Add test for #824

This commit is contained in:
James Agnew 2018-01-30 12:41:34 -06:00
parent 8d468de551
commit ebcdd0d917
14 changed files with 40095 additions and 42 deletions

View File

@ -2,6 +2,7 @@ package org.hl7.fhir.dstu3.hapi.validation;
import ca.uhn.fhir.context.FhirContext;
import org.apache.commons.io.Charsets;
import org.apache.commons.lang.WordUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
import org.hl7.fhir.dstu3.hapi.ctx.IValidationSupport;
@ -121,7 +122,15 @@ public class DefaultProfileValidationSupport implements IValidationSupport {
} else if (StringUtils.countMatches(url, '/') == 1) {
url = URL_PREFIX_STRUCTURE_DEFINITION_BASE + url;
}
return provideStructureDefinitionMap(theContext).get(url);
Map<String, StructureDefinition> map = provideStructureDefinitionMap(theContext);
StructureDefinition retVal = map.get(url);
if (retVal == null && url.startsWith(URL_PREFIX_STRUCTURE_DEFINITION)) {
String tryUrl = URL_PREFIX_STRUCTURE_DEFINITION + StringUtils.capitalize(url.substring(URL_PREFIX_STRUCTURE_DEFINITION.length()));
retVal = map.get(tryUrl);
}
return retVal;
}
ValueSet fetchValueSet(FhirContext theContext, String theSystem) {

View File

@ -54,7 +54,10 @@ public class FhirInstanceValidatorDstu3Test {
private Map<String, ValueSetExpansionComponent> mySupportedCodeSystemsForExpansion;
private FhirValidator myVal;
private ArrayList<String> myValidConcepts;
private Set<String> myValidSystems = new HashSet<String>();
private Set<String> myValidSystems = new HashSet<>();
private HashMap<String, StructureDefinition> myStructureDefinitions;
private HashMap<String, CodeSystem> myCodeSystems;
private HashMap<String, ValueSet> myValueSets;
private void addValidConcept(String theSystem, String theCode) {
myValidSystems.add(theSystem);
@ -74,13 +77,13 @@ public class FhirInstanceValidatorDstu3Test {
myVal.registerValidatorModule(myInstanceVal);
mySupportedCodeSystemsForExpansion = new HashMap<String, ValueSet.ValueSetExpansionComponent>();
mySupportedCodeSystemsForExpansion = new HashMap<>();
myValidConcepts = new ArrayList<String>();
myValidConcepts = new ArrayList<>();
when(myMockSupport.expandValueSet(any(FhirContext.class), any(ConceptSetComponent.class))).thenAnswer(new Answer<ValueSetExpansionComponent>() {
@Override
public ValueSetExpansionComponent answer(InvocationOnMock theInvocation) throws Throwable {
public ValueSetExpansionComponent answer(InvocationOnMock theInvocation) {
ConceptSetComponent arg = (ConceptSetComponent) theInvocation.getArguments()[0];
ValueSetExpansionComponent retVal = mySupportedCodeSystemsForExpansion.get(arg.getSystem());
if (retVal == null) {
@ -92,7 +95,7 @@ public class FhirInstanceValidatorDstu3Test {
});
when(myMockSupport.isCodeSystemSupported(any(FhirContext.class), any(String.class))).thenAnswer(new Answer<Boolean>() {
@Override
public Boolean answer(InvocationOnMock theInvocation) throws Throwable {
public Boolean answer(InvocationOnMock theInvocation) {
boolean retVal = myValidSystems.contains(theInvocation.getArguments()[1]);
ourLog.debug("isCodeSystemSupported({}) : {}", new Object[]{theInvocation.getArguments()[1], retVal});
return retVal;
@ -101,20 +104,36 @@ public class FhirInstanceValidatorDstu3Test {
when(myMockSupport.fetchResource(any(FhirContext.class), any(Class.class), any(String.class))).thenAnswer(new Answer<IBaseResource>() {
@Override
public IBaseResource answer(InvocationOnMock theInvocation) throws Throwable {
IBaseResource retVal;
IBaseResource retVal = null;
Class<?> type = (Class<?>) theInvocation.getArguments()[1];
String id = (String) theInvocation.getArguments()[2];
if ("Questionnaire/q_jon".equals(id)) {
retVal = ourCtx.newJsonParser().parseResource(IOUtils.toString(FhirInstanceValidatorDstu3Test.class.getResourceAsStream("/q_jon.json")));
} else {
retVal = myDefaultValidationSupport.fetchResource((FhirContext) theInvocation.getArguments()[0], (Class<IBaseResource>) theInvocation.getArguments()[1], id);
if (StructureDefinition.class.equals(type)) {
retVal = myStructureDefinitions.get(id);
}
if (ValueSet.class.equals(type)) {
retVal = myValueSets.get(id);
}
if (CodeSystem.class.equals(type)) {
retVal = myCodeSystems.get(id);
}
if (retVal == null) {
retVal = myDefaultValidationSupport.fetchResource((FhirContext) theInvocation.getArguments()[0], (Class<IBaseResource>) theInvocation.getArguments()[1], id);
}
}
if (retVal == null) {
ourLog.info("fetchResource({}, {}) : {}", new Object[]{type, id, retVal});
}
ourLog.debug("fetchResource({}, {}) : {}", new Object[]{theInvocation.getArguments()[1], id, retVal});
return retVal;
}
});
when(myMockSupport.validateCode(any(FhirContext.class), any(String.class), any(String.class), any(String.class))).thenAnswer(new Answer<CodeValidationResult>() {
@Override
public CodeValidationResult answer(InvocationOnMock theInvocation) throws Throwable {
public CodeValidationResult answer(InvocationOnMock theInvocation) {
FhirContext ctx = (FhirContext) theInvocation.getArguments()[0];
String system = (String) theInvocation.getArguments()[1];
String code = (String) theInvocation.getArguments()[2];
@ -124,29 +143,36 @@ public class FhirInstanceValidatorDstu3Test {
} else {
retVal = myDefaultValidationSupport.validateCode(ctx, system, code, (String) theInvocation.getArguments()[2]);
}
ourLog.debug("validateCode({}, {}, {}) : {}", new Object[]{system, code, (String) theInvocation.getArguments()[2], retVal});
ourLog.debug("validateCode({}, {}, {}) : {}", new Object[]{system, code, theInvocation.getArguments()[2], retVal});
return retVal;
}
});
when(myMockSupport.fetchCodeSystem(any(FhirContext.class), any(String.class))).thenAnswer(new Answer<CodeSystem>() {
@Override
public CodeSystem answer(InvocationOnMock theInvocation) throws Throwable {
public CodeSystem answer(InvocationOnMock theInvocation) {
CodeSystem retVal = myDefaultValidationSupport.fetchCodeSystem((FhirContext) theInvocation.getArguments()[0], (String) theInvocation.getArguments()[1]);
ourLog.debug("fetchCodeSystem({}) : {}", new Object[]{(String) theInvocation.getArguments()[1], retVal});
ourLog.debug("fetchCodeSystem({}) : {}", new Object[]{theInvocation.getArguments()[1], retVal});
return retVal;
}
});
myStructureDefinitions = new HashMap<>();
myValueSets = new HashMap<>();
myCodeSystems = new HashMap<>();
when(myMockSupport.fetchStructureDefinition(any(FhirContext.class), any(String.class))).thenAnswer(new Answer<StructureDefinition>() {
@Override
public StructureDefinition answer(InvocationOnMock theInvocation) throws Throwable {
StructureDefinition retVal = myDefaultValidationSupport.fetchStructureDefinition((FhirContext) theInvocation.getArguments()[0], (String) theInvocation.getArguments()[1]);
ourLog.debug("fetchStructureDefinition({}) : {}", new Object[]{(String) theInvocation.getArguments()[1], retVal});
public StructureDefinition answer(InvocationOnMock theInvocation) {
String url = (String) theInvocation.getArguments()[1];
StructureDefinition retVal = myStructureDefinitions.get(url);
if (retVal == null) {
retVal = myDefaultValidationSupport.fetchStructureDefinition((FhirContext) theInvocation.getArguments()[0], url);
}
ourLog.info("fetchStructureDefinition({}) : {}", new Object[]{url, retVal});
return retVal;
}
});
when(myMockSupport.fetchAllStructureDefinitions(any(FhirContext.class))).thenAnswer(new Answer<List<StructureDefinition>>() {
@Override
public List<StructureDefinition> answer(InvocationOnMock theInvocation) throws Throwable {
public List<StructureDefinition> answer(InvocationOnMock theInvocation) {
List<StructureDefinition> retVal = myDefaultValidationSupport.fetchAllStructureDefinitions((FhirContext) theInvocation.getArguments()[0]);
ourLog.debug("fetchAllStructureDefinitions()", new Object[]{});
return retVal;
@ -159,6 +185,10 @@ public class FhirInstanceValidatorDstu3Test {
return theLocationLine != null ? theLocationLine.toString() : "";
}
private String loadResource(String theFileName) throws IOException {
return IOUtils.toString(FhirInstanceValidatorDstu3Test.class.getResourceAsStream(theFileName));
}
private List<SingleValidationMessage> logResultsAndReturnAll(ValidationResult theOutput) {
List<SingleValidationMessage> retVal = new ArrayList<SingleValidationMessage>();
@ -219,6 +249,18 @@ public class FhirInstanceValidatorDstu3Test {
}
@Test
public void testGoal() {
Goal goal = new Goal();
goal.setSubject(new Reference("Patient/123"));
goal.setDescription(new CodeableConcept().addCoding(new Coding("http://foo", "some other goal", "")));
goal.setStatus(Goal.GoalStatus.INPROGRESS);
ValidationResult results = myVal.validateWithResult(goal);
List<SingleValidationMessage> outcome = logResultsAndReturnNonInformationalOnes(results);
assertEquals(0, outcome.size());
}
@Test
public void testIsNoTerminologyChecks() {
assertFalse(myInstanceVal.isNoTerminologyChecks());
@ -226,6 +268,51 @@ public class FhirInstanceValidatorDstu3Test {
assertTrue(myInstanceVal.isNoTerminologyChecks());
}
/**
* See #824
*/
@Test
public void testValidateBadCodeForRequiredBinding() throws IOException {
StructureDefinition fiphrPefStu3 = ourCtx.newJsonParser().parseResource(StructureDefinition.class, loadResource("/dstu3/bug824-profile-fiphr-pef-stu3.json"));
myStructureDefinitions.put("http://phr.kanta.fi/StructureDefinition/fiphr-pef-stu3", fiphrPefStu3);
StructureDefinition fiphrDevice = ourCtx.newJsonParser().parseResource(StructureDefinition.class, loadResource("/dstu3/bug824-fiphr-device.json"));
myStructureDefinitions.put("http://phr.kanta.fi/StructureDefinition/fiphr-device", fiphrDevice);
StructureDefinition fiphrCreatingApplication = ourCtx.newJsonParser().parseResource(StructureDefinition.class, loadResource("/dstu3/bug824-creatingapplication.json"));
myStructureDefinitions.put("http://phr.kanta.fi/StructureDefinition/fiphr-ext-creatingapplication", fiphrCreatingApplication);
StructureDefinition fiphrBoolean = ourCtx.newJsonParser().parseResource(StructureDefinition.class, loadResource("/dstu3/bug824-fiphr-boolean.json"));
myStructureDefinitions.put("http://phr.kanta.fi/StructureDefinition/fiphr-boolean", fiphrBoolean);
StructureDefinition medContext = ourCtx.newJsonParser().parseResource(StructureDefinition.class, loadResource("/dstu3/bug824-fiphr-medicationcontext.json"));
myStructureDefinitions.put("http://phr.kanta.fi/StructureDefinition/fiphr-medicationcontext", medContext);
StructureDefinition fiphrVitalSigns = ourCtx.newJsonParser().parseResource(StructureDefinition.class, loadResource("/dstu3/bug824-fiphr-vitalsigns-stu3.json"));
myStructureDefinitions.put("http://phr.kanta.fi/StructureDefinition/fiphr-vitalsigns-stu3", fiphrVitalSigns);
CodeSystem csObservationMethod = ourCtx.newJsonParser().parseResource(CodeSystem.class, loadResource("/dstu3/bug824-fhirphr-cs-observationmethod.json"));
myCodeSystems.put("http://phr.kanta.fi/fiphr-cs-observationmethod", csObservationMethod);
ValueSet vsObservationMethod = ourCtx.newJsonParser().parseResource(ValueSet.class, loadResource("/dstu3/bug824-vs-observaionmethod.json"));
myValueSets.put("http://phr.kanta.fi/ValueSet/fiphr-vs-observationmethod", vsObservationMethod);
ValueSet vsVitalSigns = ourCtx.newJsonParser().parseResource(ValueSet.class, loadResource("/dstu3/bug824-vs-vitalsigns.json"));
myValueSets.put("http://phr.kanta.fi/ValueSet/fiphr-vs-vitalsigns", vsVitalSigns);
ValueSet vsMedicationContext = ourCtx.newJsonParser().parseResource(ValueSet.class, loadResource("/dstu3/bug824-vs-medicationcontext.json"));
myValueSets.put("http://phr.kanta.fi/ValueSet/fiphr-vs-medicationcontext", vsMedicationContext);
ValueSet vsConfidentiality = ourCtx.newJsonParser().parseResource(ValueSet.class, loadResource("/dstu3/bug824-vs-confidentiality.json"));
myValueSets.put("http://phr.kanta.fi/ValueSet/fiphr-vs-confidentiality", vsConfidentiality);
String input = loadResource("/dstu3/bug824-resource.json");
ValidationResult output = myVal.validateWithResult(input);
List<SingleValidationMessage> issues = logResultsAndReturnNonInformationalOnes(output);
assertThat(issues.toString(), containsString("None of the codes provided are in the value set http://phr.kanta.fi/ValueSet/fiphr-vs-medicationcontext"));
}
@Test
public void testValidateBigRawJsonResource() throws Exception {
InputStream stream = FhirInstanceValidatorDstu3Test.class.getResourceAsStream("/conformance.json.gz");
@ -283,6 +370,15 @@ public class FhirInstanceValidatorDstu3Test {
ourLog.info("Validated the following:\n{}", ids);
}
@Test
public void testValidateBundleWithNoType() throws Exception {
String vsContents = IOUtils.toString(FhirInstanceValidatorDstu3Test.class.getResourceAsStream("/dstu3/bundle-with-no-type.json"), "UTF-8");
ValidationResult output = myVal.validateWithResult(vsContents);
logResultsAndReturnNonInformationalOnes(output);
assertThat(output.getMessages().toString(), containsString("Element 'Bundle.type': minimum required = 1"));
}
@Test
@Ignore
public void testValidateBundleWithObservations() throws Exception {
@ -336,15 +432,6 @@ public class FhirInstanceValidatorDstu3Test {
assertTrue(output.isSuccessful());
}
@Test
public void testValidateBundleWithNoType() throws Exception {
String vsContents = IOUtils.toString(FhirInstanceValidatorDstu3Test.class.getResourceAsStream("/dstu3/bundle-with-no-type.json"), "UTF-8");
ValidationResult output = myVal.validateWithResult(vsContents);
logResultsAndReturnNonInformationalOnes(output);
assertThat(output.getMessages().toString(), containsString("Element 'Bundle.type': minimum required = 1"));
}
/**
* See #739
*/
@ -360,7 +447,7 @@ public class FhirInstanceValidatorDstu3Test {
@Test
public void testValidateQuestionnaireResponse() throws IOException {
String input = IOUtils.toString(FhirInstanceValidatorDstu3Test.class.getResourceAsStream("/qr_jon.xml"));
String input = loadResource("/qr_jon.xml");
ValidationResult output = myVal.validateWithResult(input);
logResultsAndReturnAll(output);
@ -574,7 +661,7 @@ public class FhirInstanceValidatorDstu3Test {
* A reference with only an identifier should be valid
*/
@Test
public void testValidateReferenceWithDisplayValid() throws Exception {
public void testValidateReferenceWithDisplayValid() {
Patient p = new Patient();
p.getManagingOrganization().setDisplay("HELLO");
@ -587,7 +674,7 @@ public class FhirInstanceValidatorDstu3Test {
* A reference with only an identifier should be valid
*/
@Test
public void testValidateReferenceWithIdentifierValid() throws Exception {
public void testValidateReferenceWithIdentifierValid() {
Patient p = new Patient();
p.getManagingOrganization().getIdentifier().setSystem("http://acme.org");
p.getManagingOrganization().getIdentifier().setValue("foo");
@ -855,7 +942,7 @@ public class FhirInstanceValidatorDstu3Test {
@Test
@Ignore
public void testValidateStructureDefinition() throws IOException {
String input = IOUtils.toString(FhirInstanceValidatorDstu3Test.class.getResourceAsStream("/sdc-questionnaire.profile.xml"));
String input = loadResource("/sdc-questionnaire.profile.xml");
ValidationResult output = myVal.validateWithResult(input);
logResultsAndReturnAll(output);
@ -876,18 +963,6 @@ public class FhirInstanceValidatorDstu3Test {
}
@Test
public void testGoal() {
Goal goal = new Goal();
goal.setSubject(new Reference("Patient/123"));
goal.setDescription(new CodeableConcept().addCoding(new Coding("http://foo","some other goal","")));
goal.setStatus(Goal.GoalStatus.INPROGRESS);
ValidationResult results = myVal.validateWithResult(goal);
List<SingleValidationMessage> outcome = logResultsAndReturnNonInformationalOnes(results);
assertEquals(0, outcome.size());
}
@AfterClass
public static void afterClassClearContext() {
myDefaultValidationSupport.flush();

View File

@ -0,0 +1,941 @@
{
"resourceType": "StructureDefinition",
"id": "fiphr-ext-creatingapplication",
"meta": {
"lastUpdated": "2017-09-20T13:05:42.786+00:00"
},
"url": "http://phr.kanta.fi/StructureDefinition/fiphr-ext-creatingapplication",
"version": "0.1",
"name": "Finnish PHR Application Information extension",
"title": "Finnish PHR Application Information extension",
"status": "draft",
"experimental": true,
"date": "2017-09-12T05:53:10.958+00:00",
"publisher": "Kela",
"description": "Information about the application that created the resource instance",
"purpose": "Finnish PHR extension structure for information about application that has created the reource. Extension shall be included in all resources that are stored in PHR, except contained resources.",
"fhirVersion": "3.0.1",
"kind": "complex-type",
"abstract": false,
"contextType": "resource",
"context": [
"StructureDefinition"
],
"type": "Extension",
"baseDefinition": "http://hl7.org/fhir/StructureDefinition/Extension",
"derivation": "constraint",
"snapshot": {
"element": [
{
"id": "Extension",
"path": "Extension",
"short": "Application identification",
"definition": "Application identification information. SHALL have same values that has been registered for application in PHR application catalog. ",
"min": 0,
"max": "*",
"base": {
"path": "Element",
"min": 0,
"max": "*"
},
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
},
{
"key": "ext-1",
"severity": "error",
"human": "Must have either extensions or value[x], not both",
"expression": "extension.exists() != value.exists()",
"xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), 'value')])"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.id",
"path": "Extension.id",
"representation": [
"xmlAttr"
],
"short": "xml:id (or equivalent in JSON)",
"definition": "unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.",
"comment": "Note that FHIR strings may not exceed 1MB in size",
"min": 0,
"max": "1",
"base": {
"path": "Element.id",
"min": 0,
"max": "1"
},
"type": [
{
"code": "string"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
}
]
},
{
"id": "Extension.extension",
"path": "Extension.extension",
"slicing": {
"discriminator": [
{
"type": "value",
"path": "url"
}
],
"description": "Extensions are always sliced by (at least) url",
"rules": "open"
},
"short": "Additional Content defined by implementations",
"definition": "May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.",
"comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.",
"alias": [
"extensions",
"user content"
],
"min": 0,
"max": "*",
"base": {
"path": "Element.extension",
"min": 0,
"max": "*"
},
"type": [
{
"code": "Extension"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
},
{
"key": "ext-1",
"severity": "error",
"human": "Must have either extensions or value[x], not both",
"expression": "extension.exists() != value.exists()",
"xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), 'value')])"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.extension:name",
"path": "Extension.extension",
"sliceName": "name",
"short": "Application name",
"definition": "Application name registered in PHR cataloque.",
"comment": ".",
"alias": [
"extensions",
"user content"
],
"min": 1,
"max": "1",
"base": {
"path": "Element.extension",
"min": 0,
"max": "*"
},
"type": [
{
"code": "Extension"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
},
{
"key": "ext-1",
"severity": "error",
"human": "Must have either extensions or value[x], not both",
"expression": "extension.exists() != value.exists()",
"xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), 'value')])"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.extension:name.id",
"path": "Extension.extension.id",
"representation": [
"xmlAttr"
],
"short": "xml:id (or equivalent in JSON)",
"definition": "unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.",
"comment": "Note that FHIR strings may not exceed 1MB in size",
"min": 0,
"max": "1",
"base": {
"path": "Element.id",
"min": 0,
"max": "1"
},
"type": [
{
"code": "string"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
}
]
},
{
"id": "Extension.extension:name.extension",
"path": "Extension.extension.extension",
"slicing": {
"discriminator": [
{
"type": "value",
"path": "url"
}
],
"description": "Extensions are always sliced by (at least) url",
"rules": "open"
},
"short": "Additional Content defined by implementations",
"definition": "May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.",
"comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.",
"alias": [
"extensions",
"user content"
],
"min": 0,
"max": "*",
"base": {
"path": "Element.extension",
"min": 0,
"max": "*"
},
"type": [
{
"code": "Extension"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
},
{
"key": "ext-1",
"severity": "error",
"human": "Must have either extensions or value[x], not both",
"expression": "extension.exists() != value.exists()",
"xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), 'value')])"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.extension:name.url",
"path": "Extension.extension.url",
"representation": [
"xmlAttr"
],
"short": "identifies the meaning of the extension",
"definition": "Source of the definition for the extension code - a logical name or a URL.",
"comment": "The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.",
"min": 1,
"max": "1",
"base": {
"path": "Extension.url",
"min": 1,
"max": "1"
},
"type": [
{
"code": "uri"
}
],
"fixedUri": "name",
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.extension:name.value[x]:valueString",
"path": "Extension.extension.valueString",
"sliceName": "valueString",
"short": "Value of extension",
"definition": "Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).",
"comment": "A stream of bytes, base64 encoded",
"min": 1,
"max": "1",
"base": {
"path": "Extension.value[x]",
"min": 0,
"max": "1"
},
"type": [
{
"code": "string"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.extension:applicationId",
"path": "Extension.extension",
"sliceName": "applicationId",
"short": "Application identifier",
"definition": "Application id. A unique identifier, assigned to the client by Kela in registeration process",
"comment": ".",
"alias": [
"extensions",
"user content"
],
"min": 1,
"max": "1",
"base": {
"path": "Element.extension",
"min": 0,
"max": "*"
},
"type": [
{
"code": "Extension"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
},
{
"key": "ext-1",
"severity": "error",
"human": "Must have either extensions or value[x], not both",
"expression": "extension.exists() != value.exists()",
"xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), 'value')])"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.extension:applicationId.id",
"path": "Extension.extension.id",
"representation": [
"xmlAttr"
],
"short": "xml:id (or equivalent in JSON)",
"definition": "unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.",
"comment": "Note that FHIR strings may not exceed 1MB in size",
"min": 0,
"max": "1",
"base": {
"path": "Element.id",
"min": 0,
"max": "1"
},
"type": [
{
"code": "string"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
}
]
},
{
"id": "Extension.extension:applicationId.extension",
"path": "Extension.extension.extension",
"slicing": {
"discriminator": [
{
"type": "value",
"path": "url"
}
],
"description": "Extensions are always sliced by (at least) url",
"rules": "open"
},
"short": "Additional Content defined by implementations",
"definition": "May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.",
"comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.",
"alias": [
"extensions",
"user content"
],
"min": 0,
"max": "*",
"base": {
"path": "Element.extension",
"min": 0,
"max": "*"
},
"type": [
{
"code": "Extension"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
},
{
"key": "ext-1",
"severity": "error",
"human": "Must have either extensions or value[x], not both",
"expression": "extension.exists() != value.exists()",
"xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), 'value')])"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.extension:applicationId.url",
"path": "Extension.extension.url",
"representation": [
"xmlAttr"
],
"short": "identifies the meaning of the extension",
"definition": "Source of the definition for the extension code - a logical name or a URL.",
"comment": "The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.",
"min": 1,
"max": "1",
"base": {
"path": "Extension.url",
"min": 1,
"max": "1"
},
"type": [
{
"code": "uri"
}
],
"fixedUri": "applicationId",
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.extension:applicationId.value[x]:valueString",
"path": "Extension.extension.valueString",
"sliceName": "valueString",
"short": "Value of extension",
"definition": "Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).",
"comment": "A stream of bytes, base64 encoded",
"min": 1,
"max": "1",
"base": {
"path": "Extension.value[x]",
"min": 0,
"max": "1"
},
"type": [
{
"code": "string"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.url",
"path": "Extension.url",
"representation": [
"xmlAttr"
],
"short": "identifies the meaning of the extension",
"definition": "Source of the definition for the extension code - a logical name or a URL.",
"comment": "The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.",
"min": 1,
"max": "1",
"base": {
"path": "Extension.url",
"min": 1,
"max": "1"
},
"type": [
{
"code": "uri"
}
],
"fixedUri": "http://phr.kanta.fi/StructureDefinition/fiphr-ext-creatingapplication",
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.value[x]",
"path": "Extension.value[x]",
"short": "Value of extension",
"definition": "Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).",
"comment": "A stream of bytes, base64 encoded",
"min": 0,
"max": "0",
"base": {
"path": "Extension.value[x]",
"min": 0,
"max": "1"
},
"type": [
{
"code": "base64Binary"
},
{
"code": "boolean"
},
{
"code": "code"
},
{
"code": "date"
},
{
"code": "dateTime"
},
{
"code": "decimal"
},
{
"code": "id"
},
{
"code": "instant"
},
{
"code": "integer"
},
{
"code": "markdown"
},
{
"code": "oid"
},
{
"code": "positiveInt"
},
{
"code": "string"
},
{
"code": "time"
},
{
"code": "unsignedInt"
},
{
"code": "uri"
},
{
"code": "Address"
},
{
"code": "Age"
},
{
"code": "Annotation"
},
{
"code": "Attachment"
},
{
"code": "CodeableConcept"
},
{
"code": "Coding"
},
{
"code": "ContactPoint"
},
{
"code": "Count"
},
{
"code": "Distance"
},
{
"code": "Duration"
},
{
"code": "HumanName"
},
{
"code": "Identifier"
},
{
"code": "Money"
},
{
"code": "Period"
},
{
"code": "Quantity"
},
{
"code": "Range"
},
{
"code": "Ratio"
},
{
"code": "Reference"
},
{
"code": "SampledData"
},
{
"code": "Signature"
},
{
"code": "Timing"
},
{
"code": "Meta"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
}
]
},
"differential": {
"element": [
{
"id": "Extension",
"path": "Extension",
"short": "Application identification",
"definition": "Application identification information. SHALL have same values that has been registered for application in PHR application catalog. "
},
{
"id": "Extension.extension",
"path": "Extension.extension",
"slicing": {
"discriminator": [
{
"type": "value",
"path": "url"
}
],
"rules": "open"
}
},
{
"id": "Extension.extension:name",
"path": "Extension.extension",
"sliceName": "name",
"short": "Application name",
"definition": "Application name registered in PHR cataloque.",
"comment": ".",
"min": 1,
"max": "1"
},
{
"id": "Extension.extension:name.url",
"path": "Extension.extension.url",
"fixedUri": "name"
},
{
"id": "Extension.extension:name.value[x]:valueString",
"path": "Extension.extension.valueString",
"sliceName": "valueString",
"min": 1,
"type": [
{
"code": "string"
}
]
},
{
"id": "Extension.extension:applicationId",
"path": "Extension.extension",
"sliceName": "applicationId",
"short": "Application identifier",
"definition": "Application id. A unique identifier, assigned to the client by Kela in registeration process",
"comment": ".",
"min": 1,
"max": "1"
},
{
"id": "Extension.extension:applicationId.url",
"path": "Extension.extension.url",
"fixedUri": "applicationId"
},
{
"id": "Extension.extension:applicationId.value[x]:valueString",
"path": "Extension.extension.valueString",
"sliceName": "valueString",
"min": 1,
"type": [
{
"code": "string"
}
]
},
{
"id": "Extension.url",
"path": "Extension.url",
"fixedUri": "http://phr.kanta.fi/StructureDefinition/fiphr-ext-creatingapplication"
},
{
"id": "Extension.value[x]",
"path": "Extension.value[x]",
"max": "0"
}
]
}
}

View File

@ -0,0 +1,36 @@
{
"resourceType":"CodeSystem",
"id":"fiphr-cs-observationmethod",
"meta":{
"profile": [
"http://hl7.org/fhir/StructureDefinition/shareablecodesystem"
]
},
"url":"http://phr.kanta.fi/fiphr-cs-observationmethod",
"version":"0.01",
"name":"Code System Finnish PHR Observation Method ",
"status":"draft",
"experimental":true,
"date":"2017-05-22T06:00:00+00:00",
"publisher":"Kela ",
"description":"Finnish PHR Observation Method codes.",
"caseSensitive":true,
"content":"complete",
"concept": [
{
"code":"1",
"display":"Method 1",
"definition":"Method 1",
"designation": [
{
"language":"fi",
"value":"Metodi 1"
},
{
"language":"sv",
"value":"Metod 1"
}
]
}
]
}

View File

@ -0,0 +1,286 @@
{
"resourceType": "StructureDefinition",
"id": "fiphr-boolean",
"meta": {
"lastUpdated": "2017-09-05T12:48:55.148+00:00"
},
"url": "http://phr.kanta.fi/StructureDefinition/fiphr-boolean",
"version": "0.05",
"name": "Finnish PHR boolean extension",
"title": "Finnish PHR boolean extension",
"status": "draft",
"experimental": true,
"date": "2017-08-18T07:54:02.783+00:00",
"publisher": "Kela",
"description": "Finnish PHR extension structure to be used in boolean type extension element in profiles.",
"fhirVersion": "3.0.1",
"kind": "primitive-type",
"abstract": false,
"contextType": "resource",
"context": [
"StructureDefinition"
],
"type": "Extension",
"baseDefinition": "http://hl7.org/fhir/StructureDefinition/Extension",
"derivation": "constraint",
"snapshot": {
"element": [
{
"id": "Extension",
"path": "Extension",
"short": "Finnish PHR boolean extension",
"definition": "Finnish PHR extension structure to be used in boolean type extension element in profiles.",
"min": 0,
"max": "*",
"base": {
"path": "Element",
"min": 0,
"max": "*"
},
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
},
{
"key": "ext-1",
"severity": "error",
"human": "Must have either extensions or value[x], not both",
"expression": "extension.exists() != value.exists()",
"xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), 'value')])"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.id",
"path": "Extension.id",
"representation": [
"xmlAttr"
],
"short": "xml:id (or equivalent in JSON)",
"definition": "unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.",
"comment": "Note that FHIR strings may not exceed 1MB in size",
"min": 0,
"max": "1",
"base": {
"path": "Element.id",
"min": 0,
"max": "1"
},
"type": [
{
"code": "string"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
}
]
},
{
"id": "Extension.extension",
"path": "Extension.extension",
"slicing": {
"discriminator": [
{
"type": "value",
"path": "url"
}
],
"description": "Extensions are always sliced by (at least) url",
"rules": "open"
},
"short": "Additional Content defined by implementations",
"definition": "May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.",
"comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.",
"alias": [
"extensions",
"user content"
],
"min": 0,
"max": "*",
"base": {
"path": "Element.extension",
"min": 0,
"max": "*"
},
"type": [
{
"code": "Extension"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
},
{
"key": "ext-1",
"severity": "error",
"human": "Must have either extensions or value[x], not both",
"expression": "extension.exists() != value.exists()",
"xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), 'value')])"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.url",
"path": "Extension.url",
"representation": [
"xmlAttr"
],
"short": "identifies the meaning of the extension",
"definition": "Source of the definition for the extension code - a logical name or a URL.",
"comment": "The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.",
"min": 1,
"max": "1",
"base": {
"path": "Extension.url",
"min": 1,
"max": "1"
},
"type": [
{
"code": "uri"
}
],
"fixedUri": "http://phr.kanta.fi/StructureDefinition/fiphr-boolean",
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.value[x]:valueBoolean",
"path": "Extension.valueBoolean",
"sliceName": "valueBoolean",
"short": "Value of extension",
"definition": "Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).",
"comment": "A stream of bytes, base64 encoded",
"min": 0,
"max": "1",
"base": {
"path": "Extension.value[x]",
"min": 0,
"max": "1"
},
"type": [
{
"code": "boolean"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
}
]
},
"differential": {
"element": [
{
"id": "Extension",
"path": "Extension",
"short": "Finnish PHR boolean extension",
"definition": "Finnish PHR extension structure to be used in boolean type extension element in profiles."
},
{
"id": "Extension.url",
"path": "Extension.url",
"fixedUri": "http://phr.kanta.fi/StructureDefinition/fiphr-boolean"
},
{
"id": "Extension.value[x]:valueBoolean",
"path": "Extension.valueBoolean",
"sliceName": "valueBoolean",
"type": [
{
"code": "boolean"
}
]
}
]
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,890 @@
{
"resourceType": "StructureDefinition",
"id": "fiphr-medicationcontext",
"meta": {
"lastUpdated": "2017-09-01T05:15:12.474+00:00"
},
"url": "http://phr.kanta.fi/StructureDefinition/fiphr-medicationcontext",
"version": "0.05",
"name": "Finnish PHR medicationcontext extension",
"title": "Finnish PHR medicationcontext extension",
"status": "draft",
"experimental": true,
"date": "2017-08-31T06:09:42.264+00:00",
"publisher": "Kela",
"description": "Finnish PHR Medication Context Extension to express observation timing related to medication.",
"fhirVersion": "3.0.1",
"kind": "complex-type",
"abstract": false,
"contextType": "resource",
"context": [
"Observation"
],
"type": "Extension",
"baseDefinition": "http://hl7.org/fhir/StructureDefinition/Extension",
"derivation": "constraint",
"snapshot": {
"element": [
{
"id": "Extension",
"path": "Extension",
"short": "Finnish PHR medicationcontext extension",
"definition": "Finnish PHR Medication Context Extension to express observation timing related to medication.",
"min": "0",
"max": "*",
"base": {
"path": "Element",
"min": "0",
"max": "*"
},
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
},
{
"key": "ext-1",
"severity": "error",
"human": "Must have either extensions or value[x], not both",
"expression": "extension.exists() != value.exists()",
"xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), 'value')])"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.id",
"path": "Extension.id",
"representation": [
"xmlAttr"
],
"short": "xml:id (or equivalent in JSON)",
"definition": "unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.",
"comment": "Note that FHIR strings may not exceed 1MB in size",
"min": "0",
"max": "1",
"base": {
"path": "Element.id",
"min": "0",
"max": "1"
},
"type": [
{
"code": "string"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
}
]
},
{
"id": "Extension.extension",
"path": "Extension.extension",
"slicing": {
"discriminator": [
{
"type": "value",
"path": "url"
}
],
"description": "Extensions are always sliced by (at least) url",
"rules": "open"
},
"short": "Additional Content defined by implementations",
"definition": "May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.",
"comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.",
"alias": [
"extensions",
"user content"
],
"min": "0",
"max": "*",
"base": {
"path": "Element.extension",
"min": "0",
"max": "*"
},
"type": [
{
"code": "Extension"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
},
{
"key": "ext-1",
"severity": "error",
"human": "Must have either extensions or value[x], not both",
"expression": "extension.exists() != value.exists()",
"xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), 'value')])"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.url",
"path": "Extension.url",
"representation": [
"xmlAttr"
],
"short": "identifies the meaning of the extension",
"definition": "Source of the definition for the extension code - a logical name or a URL.",
"comment": "The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.",
"min": "1",
"max": "1",
"base": {
"path": "Extension.url",
"min": "1",
"max": "1"
},
"type": [
{
"code": "uri"
}
],
"fixedUri": "http://phr.kanta.fi/StructureDefinition/fiphr-medicationcontext",
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.value[x]:valueCodeableConcept",
"path": "Extension.valueCodeableConcept",
"sliceName": "valueCodeableConcept",
"short": "Value of extension",
"definition": "Value of extension - may be a resource or one of a constrained set of the data types (see Extensibility in the spec for list).",
"comment": "A stream of bytes, base64 encoded",
"min": "0",
"max": "1",
"base": {
"path": "Extension.value[x]",
"min": "0",
"max": "1"
},
"type": [
{
"code": "CodeableConcept"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"binding": {
"strength": "required",
"valueSetUri": "http://phr.kanta.fi/ValueSet/fiphr-vs-medicationcontext"
},
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.value[x]:valueCodeableConcept.id",
"path": "Extension.valueCodeableConcept.id",
"representation": [
"xmlAttr"
],
"short": "xml:id (or equivalent in JSON)",
"definition": "unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.",
"comment": "Note that FHIR strings may not exceed 1MB in size",
"min": "0",
"max": "1",
"base": {
"path": "Element.id",
"min": "0",
"max": "1"
},
"type": [
{
"code": "string"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
}
]
},
{
"id": "Extension.value[x]:valueCodeableConcept.extension",
"path": "Extension.valueCodeableConcept.extension",
"slicing": {
"discriminator": [
{
"type": "value",
"path": "url"
}
],
"description": "Extensions are always sliced by (at least) url",
"rules": "open"
},
"short": "Additional Content defined by implementations",
"definition": "May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.",
"comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.",
"alias": [
"extensions",
"user content"
],
"min": "0",
"max": "*",
"base": {
"path": "Element.extension",
"min": "0",
"max": "*"
},
"type": [
{
"code": "Extension"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
},
{
"key": "ext-1",
"severity": "error",
"human": "Must have either extensions or value[x], not both",
"expression": "extension.exists() != value.exists()",
"xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), 'value')])"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "Extension.value[x]:valueCodeableConcept.coding",
"path": "Extension.valueCodeableConcept.coding",
"short": "Code defined by a terminology system",
"definition": "A reference to a code defined by a terminology system.",
"comment": "Codes may be defined very casually in enumerations, or code lists, up to very formal definitions such as SNOMED CT - see the HL7 v3 Core Principles for more information. Ordering of codings is undefined and SHALL NOT be used to infer meaning. Generally, at most only one of the coding values will be labeled as UserSelected = true.",
"requirements": "Allows for translations and alternate encodings within a code system. Also supports communication of the same instance to systems requiring different encodings.",
"min": "0",
"max": "*",
"base": {
"path": "CodeableConcept.coding",
"min": "0",
"max": "*"
},
"type": [
{
"code": "Coding"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"isSummary": true,
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "v2",
"map": "CE/CNE/CWE subset one of the sets of component 1-3 or 4-6"
},
{
"identity": "rim",
"map": "CV"
},
{
"identity": "orim",
"map": "fhir:Coding rdfs:subClassOf dt:CDCoding"
},
{
"identity": "v2",
"map": "C*E.1-8, C*E.10-22"
},
{
"identity": "rim",
"map": "union(., ./translation)"
},
{
"identity": "orim",
"map": "fhir:CodeableConcept.coding rdfs:subPropertyOf dt:CD.coding"
}
]
},
{
"id": "Extension.value[x]:valueCodeableConcept.coding.id",
"path": "Extension.valueCodeableConcept.coding.id",
"representation": [
"xmlAttr"
],
"short": "xml:id (or equivalent in JSON)",
"definition": "unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.",
"comment": "Note that FHIR strings may not exceed 1MB in size",
"min": "0",
"max": "1",
"base": {
"path": "Element.id",
"min": "0",
"max": "1"
},
"type": [
{
"code": "string"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
}
]
},
{
"id": "Extension.value[x]:valueCodeableConcept.coding.extension",
"path": "Extension.valueCodeableConcept.coding.extension",
"slicing": {
"discriminator": [
{
"type": "value",
"path": "url"
}
],
"description": "Extensions are always sliced by (at least) url",
"rules": "open"
},
"short": "Additional Content defined by implementations",
"definition": "May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.",
"comment": "There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.",
"alias": [
"extensions",
"user content"
],
"min": "0",
"max": "*",
"base": {
"path": "Element.extension",
"min": "0",
"max": "*"
},
"type": [
{
"code": "Extension"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
},
{
"key": "ext-1",
"severity": "error",
"human": "Must have either extensions or value[x], not both",
"expression": "extension.exists() != value.exists()",
"xpath": "exists(f:extension)!=exists(f:*[starts-with(local-name(.), 'value')])"
}
],
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "rim",
"map": "N/A"
}
]
},
{
"id": "valueCodeableConcept:valueCodeableConcept.coding.system",
"path": "Extension.valueCodeableConcept.coding.system",
"short": "Identity of the terminology system",
"definition": "The identification of the code system that defines the meaning of the symbol in the code.",
"comment": "The URI may be an OID (urn:oid:...) or a UUID (urn:uuid:...). OIDs and UUIDs SHALL be references to the HL7 OID registry. Otherwise, the URI should come from HL7's list of FHIR defined special URIs or it should de-reference to some definition that establish the system clearly and unambiguously.",
"requirements": "Need to be unambiguous about the source of the definition of the symbol.",
"min": "1",
"max": "1",
"base": {
"path": "Coding.system",
"min": "0",
"max": "1"
},
"type": [
{
"code": "uri"
}
],
"fixedUri": "http://phr.kanta.fi/fiphr-cs-medicationcontext",
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"isSummary": true,
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "v2",
"map": "C*E.3"
},
{
"identity": "rim",
"map": "./codeSystem"
},
{
"identity": "orim",
"map": "fhir:Coding.system rdfs:subPropertyOf dt:CDCoding.codeSystem"
}
]
},
{
"id": "Extension.value[x]:valueCodeableConcept.coding.version",
"path": "Extension.valueCodeableConcept.coding.version",
"short": "Version of the system - if relevant",
"definition": "The version of the code system which was used when choosing this code. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured. and when the meaning is not guaranteed to be consistent, the version SHOULD be exchanged.",
"comment": "Where the terminology does not clearly define what string should be used to identify code system versions, the recommendation is to use the date (expressed in FHIR date format) on which that version was officially published as the version date.",
"min": "0",
"max": "1",
"base": {
"path": "Coding.version",
"min": "0",
"max": "1"
},
"type": [
{
"code": "string"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"isSummary": true,
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "v2",
"map": "C*E.7"
},
{
"identity": "rim",
"map": "./codeSystemVersion"
},
{
"identity": "orim",
"map": "fhir:Coding.version rdfs:subPropertyOf dt:CDCoding.codeSystemVersion"
}
]
},
{
"id": "valueCodeableConcept:valueCodeableConcept.coding.code",
"path": "Extension.valueCodeableConcept.coding.code",
"short": "Symbol in syntax defined by the system",
"definition": "A symbol in syntax defined by the system. The symbol may be a predefined code or an expression in a syntax defined by the coding system (e.g. post-coordination).",
"comment": "Note that FHIR strings may not exceed 1MB in size",
"requirements": "Need to refer to a particular code in the system.",
"min": "1",
"max": "1",
"base": {
"path": "Coding.code",
"min": "0",
"max": "1"
},
"type": [
{
"code": "code"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"isSummary": true,
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "v2",
"map": "C*E.1"
},
{
"identity": "rim",
"map": "./code"
},
{
"identity": "orim",
"map": "fhir:Coding.code rdfs:subPropertyOf dt:CDCoding.code"
}
]
},
{
"id": "Extension.value[x]:valueCodeableConcept.coding.display",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-translatable",
"valueBoolean": true
}
],
"path": "Extension.valueCodeableConcept.coding.display",
"short": "Representation defined by the system",
"definition": "A representation of the meaning of the code in the system, following the rules of the system.",
"comment": "Note that FHIR strings may not exceed 1MB in size",
"requirements": "Need to be able to carry a human-readable meaning of the code for readers that do not know the system.",
"min": "0",
"max": "1",
"base": {
"path": "Coding.display",
"min": "0",
"max": "1"
},
"type": [
{
"code": "string"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"isSummary": true,
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "v2",
"map": "C*E.2 - but note this is not well followed"
},
{
"identity": "rim",
"map": "CV.displayName"
},
{
"identity": "orim",
"map": "fhir:Coding.display rdfs:subPropertyOf dt:CDCoding.displayName"
}
]
},
{
"id": "Extension.value[x]:valueCodeableConcept.coding.userSelected",
"path": "Extension.valueCodeableConcept.coding.userSelected",
"short": "If this coding was chosen directly by the user",
"definition": "Indicates that this coding was chosen by a user directly - i.e. off a pick list of available items (codes or displays).",
"comment": "Amongst a set of alternatives, a directly chosen code is the most appropriate starting point for new translations. There is some ambiguity about what exactly 'directly chosen' implies, and trading partner agreement may be needed to clarify the use of this element and its consequences more completely.",
"requirements": "This has been identified as a clinical safety criterium - that this exact system/code pair was chosen explicitly, rather than inferred by the system based on some rules or language processing.",
"min": "0",
"max": "1",
"base": {
"path": "Coding.userSelected",
"min": "0",
"max": "1"
},
"type": [
{
"code": "boolean"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"isSummary": true,
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "v2",
"map": "Sometimes implied by being first"
},
{
"identity": "rim",
"map": "CD.codingRationale"
},
{
"identity": "orim",
"map": "fhir:Coding.userSelected fhir:mapsTo dt:CDCoding.codingRationale. fhir:Coding.userSelected fhir:hasMap fhir:Coding.userSelected.map. fhir:Coding.userSelected.map a fhir:Map; fhir:target dt:CDCoding.codingRationale. fhir:Coding.userSelectedtrue a [ fhir:sourcefhir:target dt:CDCoding.codingRationaleO ]"
}
]
},
{
"id": "Extension.value[x]:valueCodeableConcept.text",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-translatable",
"valueBoolean": true
}
],
"path": "Extension.valueCodeableConcept.text",
"short": "Plain text representation of the concept",
"definition": "A human language representation of the concept as seen/selected/uttered by the user who entered the data and/or which represents the intended meaning of the user.",
"comment": "Very often the text is the same as a displayName of one of the codings.",
"requirements": "The codes from the terminologies do not always capture the correct meaning with all the nuances of the human using them, or sometimes there is no appropriate code at all. In these cases, the text is used to capture the full meaning of the source.",
"min": "0",
"max": "1",
"base": {
"path": "CodeableConcept.text",
"min": "0",
"max": "1"
},
"type": [
{
"code": "string"
}
],
"condition": [
"ele-1"
],
"constraint": [
{
"key": "ele-1",
"severity": "error",
"human": "All FHIR elements must have a @value or children",
"expression": "hasValue() | (children().count() > id.count())",
"xpath": "@value|f:*|h:div"
}
],
"isSummary": true,
"mapping": [
{
"identity": "rim",
"map": "n/a"
},
{
"identity": "v2",
"map": "C*E.9. But note many systems use C*E.2 for this"
},
{
"identity": "rim",
"map": "./originalText[mediaType/code=/data"
},
{
"identity": "orim",
"map": "fhir:CodeableConcept.text rdfs:subPropertyOf dt:CD.originalText"
}
]
}
]
},
"differential": {
"element": [
{
"id": "Extension",
"path": "Extension",
"short": "Finnish PHR medicationcontext extension",
"definition": "Finnish PHR Medication Context Extension to express observation timing related to medication."
},
{
"id": "Extension.url",
"path": "Extension.url",
"fixedUri": "http://phr.kanta.fi/StructureDefinition/fiphr-medicationcontext"
},
{
"id": "Extension.value[x]:valueCodeableConcept",
"path": "Extension.valueCodeableConcept",
"sliceName": "valueCodeableConcept",
"type": [
{
"code": "CodeableConcept"
}
],
"binding": {
"strength": "required",
"valueSetUri": "http://phr.kanta.fi/ValueSet/fiphr-vs-medicationcontext"
}
},
{
"id": "valueCodeableConcept:valueCodeableConcept.coding.system",
"path": "Extension.valueCodeableConcept.coding.system",
"min": "1",
"fixedUri": "http://phr.kanta.fi/fiphr-cs-medicationcontext"
},
{
"id": "valueCodeableConcept:valueCodeableConcept.coding.code",
"path": "Extension.valueCodeableConcept.coding.code",
"min": "1"
}
]
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,177 @@
{
"resourceType": "Observation",
"meta": {
"profile": [
"http://phr.kanta.fi/StructureDefinition/fiphr-pef-stu3"
],
"security": [
{
"system": "http://hl7.org/fhir/v3/Confidentiality",
"code": "U",
"display": "unrestricted"
}
]
},
"language": "fi",
"text": {
"status": "generated",
"div": "<div xmlns=\"http://www.w3.org/1999/xhtml\"><div class=\"hapiHeaderText\"> Mittaustulos<b>Boldattuu </b></div><table class=\"hapiPropertyTable\"><tbody><tr><td>Identifier</td><td>Patient/7cf4b0bd-cfb3-493b-a6ee-b290f1a2a72e</td></tr></tbody></table></div>"
},
"identifier": [
{
"system": "urn:ietf:rfc:3986",
"value": "urn:uuid:187e0c12-8dd2-67e2-99b2-bf273a9549222"
}
],
"contained": [
{
"resourceType": "Device",
"id": "dev1",
"meta": {
"profile": [
"http://phr.kanta.fi/StructureDefinition/fiphr-device"
]
},
"identifier": [
{
"system": "urn:ietf:rfc:3986",
"value": "urn:uuid:187e0c12-8dd2-67e2-99b2-bf273a9549222"
}
],
"udi": {
"deviceIdentifier": "Device123",
"name": "Scalpel, single-use"
}
}
],
"status": "final",
"category": [
{
"coding": [
{
"system": "http://hl7.org/fhir/observation-category",
"code": "vital-signs",
"display": "Vital Signs"
}
]
}
],
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "19935-6",
"display": "Maximum expiratory gas flow Respiratory system airway by Peak flow meter"
}
]
},
"subject": {
"reference": "Patient/7cf4b0bd-cfb3-493b-a6ee-b290f1a2a72e"
},
"effectiveDateTime": "2017-11-22",
"issued": "2017-11-22T16:52:00.943+03:00",
"performer": [
{
"reference": "Patient/7cf4b0bd-cfb3-493b-a6ee-b290f1a2a72e"
}
],
"valueQuantity": {
"value": 134,
"unit": "L/min",
"system": "http://unitsofmeasure.org",
"code": "L/min"
},
"interpretation": {
"coding": [
{
"system": "http://hl7.org/fhir/v2/0078",
"code": "<",
"display": "Off scale low"
}
]
},
"comment": "tässä on kommentteja",
"method": {
"coding": [
{
"system": "http://phr.kanta.fi/fiphr-cs-observationmethod",
"code": "1",
"display": "maxima"
}
],
"text": "tässä tässä mehhod"
},
"device": {
"reference": "#dev1"
},
"referenceRange": [
{
"low":
{
"value": 10,
"unit": "L/min",
"system": "http://hl7.org/fhir/v2/0078",
"code": "LU"
}
,
"high":
{
"value": 16,
"unit": "L/min",
"system": "http://hl7.org/fhir/v2/0078",
"code": "LU"
}
,
"appliesTo": [
{
"coding": [
{
"system": "http://hl7.org/fhir/referencerange-meaning",
"code": "normal",
"display": "Normal Range"
}
],
"text": "T�ss� teksti�"
}
],
"age": {
"low":
{
"value": 1,
"unit": "years",
"system": "http://unitsofmeasure.org",
"code": "21612-7"
}
,
"high":
{
"value": 1,
"unit": "years",
"system": "http://unitsofmeasure.org",
"code": "21612-7"
}
},
"text": "Sopiva ikä"
}
],
"extension": [
{
"url": "http://phr.kanta.fi/StructureDefinition/fiphr-medicationcontext",
"valueCodeableConcept": {
"coding":[
{
"system": "http://phr.kanta.fi/fiphr-cs-medicationcontext",
"code": "13",
"display": "Before medication"
}
],
"text": "mun teksti"
}
},
{
"url": "http://phr.kanta.fi/StructureDefinition/fiphr-boolean",
"valueBoolean": true
}
]
}

View File

@ -0,0 +1,82 @@
{
"resourceType": "ValueSet",
"id": "fiphr-vs-confidentiality",
"meta": {
"versionId": "1",
"lastUpdated": "2017-03-02T13:56:51.448+00:00",
"profile": [
"http://hl7.org/fhir/StructureDefinition/valueset-shareable-definition"
]
},
"text": {
"status": "generated",
"div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">!-- Snipped for Brevity --&gt;</div>"
},
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/valueset-oid",
"valueUri": "urn:oid:2.16.840.1.113883.4.642.2.37"
}
],
"url": "http://phr.kanta.fi/ValueSet/fiphr-vs-confidentiality",
"version": "0.01",
"name": "Value Set Finnish PHR Confidentiality",
"status": "draft",
"experimental": true,
"date": "2016-11-23T06:00:00+00:00",
"publisher": "Kela",
"contact": [
{
"telecom": [
{
"system": "email",
"value": "kantakehitys@kanta.fi"
},
{
"system": "other",
"value": "http://www.kanta.fi/en/web/ammattilaisille/omakannan-omatietovarannon-maarittelyt"
}
]
}
],
"description": "Value set for confidentiality codes used in finnish PHR",
"immutable": false,
"extensible": false,
"compose": {
"include": [
{
"system": "http://hl7.org/fhir/v3/Confidentiality",
"concept": [
{
"code": "R",
"display": "Restricted",
"designation": [
{
"language": "fi",
"value": "Yksityinen"
},
{
"language": "en",
"value": "Restricted"
}
]
},
{
"code": "U",
"display": "Unrestricted",
"designation": [
{
"language": "en",
"value": "Unrestricted"
},
{
"language": "fi",
"value": "Suojaamaton"
}
]
}
]
}
]
}
}

View File

@ -0,0 +1,23 @@
{
"resourceType": "ValueSet",
"id": "fiphr-vs-medicationcontext",
"meta": {
"profile": [
"http://hl7.org/fhir/StructureDefinition/valueset-shareable-definition"
]
},
"url": "http://phr.kanta.fi/ValueSet/fiphr-vs-medicationcontext",
"version": "0.01",
"name": "Value Set Finnish PHR Medication Context",
"status": "draft",
"date": "2016-11-23T06:00:00+00:00",
"publisher": "Kela",
"description": "Finnish PHR Medication Context value set.",
"compose": {
"include": [
{
"system": "http://phr.kanta.fi/fiphr-cs-medicationcontext"
}
]
}
}

View File

@ -0,0 +1,24 @@
{
"resourceType": "ValueSet",
"id": "fiphr-vs-observationmethod",
"meta": {
"profile": [
"http://hl7.org/fhir/StructureDefinition/valueset-shareable-definition"
]
},
"url": "http://phr.kanta.fi/ValueSet/fiphr-vs-observationmethod",
"version": "0.01",
"name": "Value Set Finnish PHR Observation Method",
"status": "draft",
"experimental": true,
"date": "2016-11-23T06:00:00+00:00",
"publisher": "Kela",
"description": "Finnish PHR Observation Method value set",
"compose": {
"include": [
{
"system": "http://phr.kanta.fi/fiphr-cs-observationmethod"
}
]
}
}

View File

@ -0,0 +1,287 @@
{
"resourceType": "ValueSet",
"id": "fiphr-vs-vitalsigns",
"url": "http://phr.kanta.fi/ValueSet/fiphr-vs-vitalsigns",
"version": "0.03",
"name": "Value Set Finnish PHR Vital Signs",
"status": "draft",
"date": "2017-11-27T13:50:00+02:00",
"publisher": "Kela",
"description": "This value set indicates the allowed vital sign result types in Finnish PRH. The concept Vitals signs panel (85353-1) is a grouping structure for a set of vital signs and includes related links (with type=has-member) to the Observations in this set (e.g. respiratory rate, heart rate, BP). The Blood pressure panel (85354-9) is used to group the component observations Systolic blood pressure (8480-6) and Diastolic blood pressure (8462-4).",
"copyright": "This content from LOINC? is copyright ? 1995 Regenstrief Institute, Inc. and the LOINC Committee, and available at no cost under the license at http://loinc.org/terms-of-use",
"compose": {
"include": [
{
"system": "http://loinc.org",
"concept": [
{
"code": "85353-1",
"display": "Vital signs, weight, height, head circumference, oxygen saturation & BMI panel",
"designation": [
{
"language": "fi",
"value": "ei käännetty"
},
{
"language": "sv",
"value": "översätts inte"
}
]
},
{
"code": "9279-1",
"display": "Respiratory rate",
"designation": [
{
"language": "fi",
"value": "Hengitystiheys"
},
{
"language": "sv",
"value": "Andningsfrekvens"
}
]
},
{
"code": "8867-4",
"display": "Heart rate",
"designation": [
{
"language": "fi",
"value": "Syke"
},
{
"language": "sv",
"value": "Puls"
}
]
},
{
"code": "41924-2",
"display": "Average heart rate 24h",
"designation": [
{
"language": "fi",
"value": "Keskisyke 24h"
},
{
"language": "sv",
"value": "Medelpuls 24h"
}
]
},
{
"code": "8883-1",
"display": "Minimum heart rate 24h",
"designation": [
{
"language": "fi",
"value": "Leposyke 24h"
},
{
"language": "sv",
"value": "Vilopuls 24h"
}
]
},
{
"code": "8873-2",
"display": "Maximum heart rate 24h",
"designation": [
{
"language": "fi",
"value": "Maksimisyke 24h"
},
{
"language": "sv",
"value": "Maxpuls 24h"
}
]
},
{
"code": "8310-5",
"display": "Body temperature",
"designation": [
{
"language": "fi",
"value": "Kehon lämpö"
},
{
"language": "sv",
"value": "Kroppstemperatur"
}
]
},
{
"code": "8331-1",
"display": "Oral temperature",
"designation": [
{
"language": "fi",
"value": "ei käännetty"
},
{
"language": "sv",
"value": "ei käännetty"
}
]
},
{
"code": "8332-9",
"display": "Rectal temperature",
"designation": [
{
"language": "fi",
"value": "ei käännetty"
},
{
"language": "sv",
"value": "ei käännetty"
}
]
},
{
"code": "76011-6",
"display": "Ear temperature",
"designation": [
{
"language": "fi",
"value": "ei käännetty"
},
{
"language": "sv",
"value": "ei käännetty"
}
]
},
{
"code": "8328-7",
"display": "Axillary temperature",
"designation": [
{
"language": "fi",
"value": "ei käännetty"
},
{
"language": "sv",
"value": "ei käännetty"
}
]
},
{
"code": "8302-2",
"display": "Body height",
"designation": [
{
"language": "fi",
"value": "Pituus"
},
{
"language": "sv",
"value": "Längd"
}
]
},
{
"code": "29463-7",
"display": "Body weight",
"designation": [
{
"language": "fi",
"value": "Paino"
},
{
"language": "sv",
"value": "Vikt"
}
]
},
{
"code": "85354-9",
"display": "Blood pressure panel with all children optional",
"designation": [
{
"language": "fi",
"value": "ei käännetty"
},
{
"language": "sv",
"value": "översätts inte"
}
]
},
{
"code": "8480-6",
"display": "Systolic blood pressure",
"designation": [
{
"language": "fi",
"value": "Systolinen verenpaine"
},
{
"language": "sv",
"value": "Systoliskt blodtryck"
}
]
},
{
"code": "8462-4",
"display": "Diastolic blood pressure",
"designation": [
{
"language": "fi",
"value": "Diastolinen verenpaine"
},
{
"language": "sv",
"value": "Diastoliskt blodtryck"
}
]
},
{
"code": "77135-2",
"display": "Glucose [Moles/?volume] in Serum, Plasma or Blood",
"designation": [
{
"language": "fi",
"value": "ei käännetty"
},
{
"language": "sv",
"value": "översätts inte"
}
]
},
{
"code": "19935-6",
"display": "Maximum expiratory gas flow Respiratory system airway by Peak flow meter",
"designation": [
{
"language": "fi",
"value": "ei käännetty"
},
{
"language": "sv",
"value": "översätts inte"
}
]
},
{
"code": "8280-0",
"display": "Waist Circumference at umbilicus by Tape measure",
"designation": [
{
"language": "fi",
"value": "Vyötärönympärys"
},
{
"language": "sv",
"value": "Midjemått"
}
]
}
]
}
]
}
}