From 13e90636fddd4fca5b5ab7d1c23014456fa1ee6c Mon Sep 17 00:00:00 2001 From: Severin Kohler Date: Wed, 21 Jan 2026 17:26:28 +0100 Subject: [PATCH 1/2] Fixed bugs in mapping files --- .../org.highmed/person_data.v0.yml | 21 ++-- .../versicherungsinformationen.v0.yml | 8 +- .../evaluation/org.openehr/gender.v1.yml | 9 +- .../org.openehr/vital_status.v1.yml | 2 +- .../KDS_medikationseintrag.context.yaml | 6 +- .../KDS_medikationseintrag.yml | 24 ++-- .../KDS_medikamentenverabreichung.yml | 24 ++-- .../org.highmed/KDS/person/KDS_address.yml | 104 +++++++++++++++++ .../KDS/person/KDS_admin_entry_person.yml | 5 +- .../KDS/person/person.context.yaml | 8 +- .../KDS/person_pseudo/KDS_address.yml | 105 ++++++++++++++++++ .../KDS/person_pseudo/KDS_gender.yml | 4 +- .../person_pseudo/pseudo_person.context.yaml | 1 + .../vitalstatus/KDS_Vitalstatus.context.yaml | 5 +- 14 files changed, 273 insertions(+), 53 deletions(-) create mode 100644 src/test/resources/kds_new/projects/org.highmed/KDS/person/KDS_address.yml create mode 100644 src/test/resources/kds_new/projects/org.highmed/KDS/person_pseudo/KDS_address.yml diff --git a/src/test/resources/kds_new/model/admin_entry/org.highmed/person_data.v0.yml b/src/test/resources/kds_new/model/admin_entry/org.highmed/person_data.v0.yml index 002d04fa..93362057 100644 --- a/src/test/resources/kds_new/model/admin_entry/org.highmed/person_data.v0.yml +++ b/src/test/resources/kds_new/model/admin_entry/org.highmed/person_data.v0.yml @@ -12,12 +12,17 @@ spec: fhirConfig: structureDefinition: http://hl7.org/fhir/StructureDefinition/Patient -preprocessor: - fhirCondition: - targetRoot: "$resource" - targetAttribute: "active" # exclude non-active patients - operator: "one of" - criteria: "false" +#preprocessor: Logic not supported yet +# fhirCondition: +# - targetRoot: "$resource" +# targetAttribute: "active" # exclude non-active patients +# operator: "not empty" +# if yes: +# fhirCondition: +# targetRoot: "$resource" +# targetAttribute: "active" # exclude non-active patients +# operator: "one of" +# criteria: "true" mappings: - name: "personData" @@ -30,7 +35,7 @@ mappings: with: fhir: "$resource.deceased.as(Boolean)" openehr: "$archetype/data[at0001]/items[at0024]/items[at0025]" - + - name: "deathDateTime" with: @@ -39,7 +44,7 @@ mappings: manual: - name: "deathboolean" openehr: - - path: "items[at0025]/value" + - path: "items[at0025]" value: "True" fhirCondition: targetRoot: "$resource" diff --git a/src/test/resources/kds_new/model/admin_entry/org.highmed/versicherungsinformationen.v0.yml b/src/test/resources/kds_new/model/admin_entry/org.highmed/versicherungsinformationen.v0.yml index d7775f20..203729a6 100644 --- a/src/test/resources/kds_new/model/admin_entry/org.highmed/versicherungsinformationen.v0.yml +++ b/src/test/resources/kds_new/model/admin_entry/org.highmed/versicherungsinformationen.v0.yml @@ -1,16 +1,16 @@ grammar: FHIRConnect/v0.9.0 type: model metadata: - name: ADMIN_ENTRY.versicherungsinformationen.v0 - version: 0.0.1-alpha -spec: + name: ADMIN_ENTRY.versicherungsinformationen.v0 + version: 0.0.1-alpha +spec: system: FHIR version: R4 openEhrConfig: archetype: openEHR-EHR-ADMIN_ENTRY.versicherungsinformationen.v0 revision: 0.0.1-alpha fhirConfig: - structureDefinition: http://hl7.org/fhir/StructureDefinition/BackboneElement + structureDefinition: http://hl7.org/fhir/StructureDefinition/Identifier mappings: - name: "versicherungsId" diff --git a/src/test/resources/kds_new/model/evaluation/org.openehr/gender.v1.yml b/src/test/resources/kds_new/model/evaluation/org.openehr/gender.v1.yml index db5db9fb..99103833 100644 --- a/src/test/resources/kds_new/model/evaluation/org.openehr/gender.v1.yml +++ b/src/test/resources/kds_new/model/evaluation/org.openehr/gender.v1.yml @@ -2,21 +2,22 @@ grammar: FHIRConnect/v0.9.0 type: model metadata: name: EVALUATION.gender.v1 - version: 0.0.1-alpha -spec: + version: 0.0.1-alpha +spec: system: FHIR version: R4 openEhrConfig: archetype: openEHR-EHR-EVALUATION.gender.v1 revision: 1.1.1 + fhirConfig: + structureDefinition: "http://hl7.org/fhir/StructureDefinition/Code" mappings: - name: "gender" with: - fhir: "$fhirRoot" + fhir: "$resource.gender" openehr: "$archetype/data[at0002]/items[at0022]" - # # - name: "sex" # with: diff --git a/src/test/resources/kds_new/model/evaluation/org.openehr/vital_status.v1.yml b/src/test/resources/kds_new/model/evaluation/org.openehr/vital_status.v1.yml index 479ab4e1..cfe89dc1 100644 --- a/src/test/resources/kds_new/model/evaluation/org.openehr/vital_status.v1.yml +++ b/src/test/resources/kds_new/model/evaluation/org.openehr/vital_status.v1.yml @@ -73,7 +73,7 @@ mappings: # with: # fhir: "$fhirRoot" # openehr: "$openEHRRoot" # reference to party_identified NOT SUPPORTED since 1..1 whole mapping is commented out - - + - name: "effective" with: fhir: "$resource.effective" diff --git a/src/test/resources/kds_new/projects/org.highmed/KDS/medikationseintrag/KDS_medikationseintrag.context.yaml b/src/test/resources/kds_new/projects/org.highmed/KDS/medikationseintrag/KDS_medikationseintrag.context.yaml index e76fa5ad..615b9230 100644 --- a/src/test/resources/kds_new/projects/org.highmed/KDS/medikationseintrag/KDS_medikationseintrag.context.yaml +++ b/src/test/resources/kds_new/projects/org.highmed/KDS/medikationseintrag/KDS_medikationseintrag.context.yaml @@ -2,14 +2,14 @@ grammar: FHIRConnect/v0.9.0 type: context metadata: name: KDS_medikationseintrag.context - version: 0.0.1a -spec: + version: 0.0.1a +spec: system: FHIR version: R4 context: profile: - url: "https://www.medizininformatik-initiative.de/fhir/core/modul-labor/StructureDefinition/MedicationStatement" + url: "https://www.medizininformatik-initiative.de/fhir/core/modul-medikation/StructureDefinition/MedicationStatement" version: "2025.0.0" template: id: "KDS_Medikationseintrag" diff --git a/src/test/resources/kds_new/projects/org.highmed/KDS/medikationseintrag/KDS_medikationseintrag.yml b/src/test/resources/kds_new/projects/org.highmed/KDS/medikationseintrag/KDS_medikationseintrag.yml index 44b6dc14..53a3a784 100644 --- a/src/test/resources/kds_new/projects/org.highmed/KDS/medikationseintrag/KDS_medikationseintrag.yml +++ b/src/test/resources/kds_new/projects/org.highmed/KDS/medikationseintrag/KDS_medikationseintrag.yml @@ -9,18 +9,18 @@ spec: extends: OBSERVATION.medication_statement.v0 mappings: - #todo: where is this supposed to be mapped to? No encounter on MedicationStatement + # Dokumentationsdatum - name: "fallIdentifikationIdentifier" extension: "add" with: - fhir: "$resource.context.as(Reference).identifier" - openehr: "$composition/context/other_context[at0005]/items[openEHR-EHR-CLUSTER.case_identification.v0]" + fhir: "$resource.encounter.identifier" + openehr: "$composition/context/other_context[at0001]/items[openEHR-EHR-CLUSTER.case_identification.v0]" slotArchetype: "CLUSTER.case_identification.v0" - name: "fallIdentifikationReference" # if reference is accessible overwrite fallIdentifikationIdentifier extension: "add" with: - fhir: "$resource.context.as(Encounter)" + fhir: "$resource.encounter" openehr: "$reference" reference: resourceType: "Encounter" @@ -28,15 +28,15 @@ mappings: - name: "identifierInReference" with: fhir: "$fhirRoot.identifier" - openehr: "$composition/context/other_context[at0005]/items[openEHR-EHR-CLUSTER.case_identification.v0]" + openehr: "$composition/context/other_context[at0001]/items[openEHR-EHR-CLUSTER.case_identification.v0]" slotArchetype: "CLUSTER.case_identification.v0" -# - name: "encounterMapping" -# with: -# fhir: "$fhirRoot" -# openehr: "$composition/context/other_context[at0005]/items[openEHR-EHR-CLUSTER.case_identification.v0]/links" # will use link -# openehrLink: -# meaning: "the case this composition relates to" -# type: "case" + # - name: "encounterMapping" + # with: + # fhir: "$fhirRoot" + # openehr: "$composition/context/other_context[at0001]/items[openEHR-EHR-CLUSTER.case_identification.v0]/links" # will use link + # openehrLink: + # meaning: "the case this composition relates to" + # type: "case" - name: "protocol0004Parent" extension: "add" diff --git a/src/test/resources/kds_new/projects/org.highmed/KDS/medikationsverabreichung/KDS_medikamentenverabreichung.yml b/src/test/resources/kds_new/projects/org.highmed/KDS/medikationsverabreichung/KDS_medikamentenverabreichung.yml index e9a23f15..9d79fe59 100644 --- a/src/test/resources/kds_new/projects/org.highmed/KDS/medikationsverabreichung/KDS_medikamentenverabreichung.yml +++ b/src/test/resources/kds_new/projects/org.highmed/KDS/medikationsverabreichung/KDS_medikamentenverabreichung.yml @@ -23,33 +23,35 @@ mappings: openehr: "$composition/context/other_context[at0001]/items[at0005]" # this status is mandatory, because it's 1...1 in the template + # Dokumentationsdatum - name: "fallIdentifikationIdentifier" extension: "add" with: - fhir: "$resource.context.as(Reference).identifier" + fhir: "$resource.context.identifier" openehr: "$composition/context/other_context[at0001]/items[openEHR-EHR-CLUSTER.case_identification.v0]" slotArchetype: "CLUSTER.case_identification.v0" - name: "fallIdentifikationReference" # if reference is accessible overwrite fallIdentifikationIdentifier extension: "add" with: - fhir: "$resource.encounter" + fhir: "$resource.context" openehr: "$reference" - reference: #type None + reference: resourceType: "Encounter" mappings: - name: "identifierInReference" with: fhir: "$fhirRoot.identifier" - openehr: "$archetype/context/other_context[at0001]/items[openEHR-EHR-CLUSTER.case_identification.v0]" + openehr: "$composition/context/other_context[at0001]/items[openEHR-EHR-CLUSTER.case_identification.v0]" slotArchetype: "CLUSTER.case_identification.v0" -# - name: "encounterMapping" -# with: -# fhir: "$fhirRoot" -# openehr: "$archetype/context/other_context[at0001]/items[openEHR-EHR-CLUSTER.case_identification.v0]/links" # will use link -# openehrLink: -# meaning: "the case this composition relates to" -# type: "case" + # - name: "encounterMapping" + # with: + # fhir: "$fhirRoot" + # openehr: "$composition/context/other_context[at0001]/items[openEHR-EHR-CLUSTER.case_identification.v0]/links" # will use link + # openehrLink: + # meaning: "the case this composition relates to" + # type: "case" + - name: "medicationCode" extension: "overwrite" diff --git a/src/test/resources/kds_new/projects/org.highmed/KDS/person/KDS_address.yml b/src/test/resources/kds_new/projects/org.highmed/KDS/person/KDS_address.yml new file mode 100644 index 00000000..ef1ebd46 --- /dev/null +++ b/src/test/resources/kds_new/projects/org.highmed/KDS/person/KDS_address.yml @@ -0,0 +1,104 @@ +grammar: FHIRConnect/v0.9.0 +type: extension +metadata: + name: KDS_address + version: 0.0.1-alpha +spec: + system: FHIR + version: R4 + extends: CLUSTER.address.v1 + +mappings: + - name: "streetaddress" + extension: "overwrite" + with: + fhir: "$fhirRoot" + openehr: "$archetype" + followedBy: + mappings: + - name: "city" + with: + fhir: "city" + openehr: "items[at0002]" + + - name: "postalCode" + with: + fhir: "postalCode" + openehr: "items[at0005]" + + - name: "line" + with: + fhir: "line" + openehr: "items[at0001]" + + - name: "type" + with: + fhir: "type" + openehr: "items[at0010]" + manual: + - name: "physical" + openehr: + - path: "defining_code/terminology_id" + value: "local" + - path: "defining_code/code_string" + value: "at0011" + - path: "value" + value: "Physical" + fhirCondition: + targetRoot: "$fhirRoot" + targetAttribute: "code" + operator: "one of" + criteria: "physical" + + fhir: + - path: "code" + value: "physical" + openehrCondition: + targetRoot: "$openehrRoot" + targetAttribute: "defining_code/code_string" + operator: "one of" + criteria: "at0011" + + - name: "postal" + openehr: + - path: "defining_code/terminology_id" + value: "local" + - path: "defining_code/code_string" + value: "at0012" + - path: "value" + value: "Postal" + fhirCondition: + targetRoot: "$fhirRoot" + targetAttribute: "code" + operator: "one of" + criteria: "postal" + fhir: + - path: "code" + value: "postal" + openehrCondition: + targetRoot: "$openehrRoot" + targetAttribute: "defining_code/code_string" + operator: "one of" + criteria: "at0012" + + - name: "both" + openehr: + - path: "defining_code/terminology_id" + value: "local" + - path: "defining_code/code_string" + value: "at0013" + - path: "value" + value: "Both" + fhirCondition: + targetRoot: "$fhirRoot" + targetAttribute: "code" + operator: "one of" + criteria: "both" + fhir: + - path: "code" + value: "both" + openehrCondition: + targetRoot: "$openehrRoot" + targetAttribute: "defining_code/code_string" + operator: "one of" + criteria: "at0013" \ No newline at end of file diff --git a/src/test/resources/kds_new/projects/org.highmed/KDS/person/KDS_admin_entry_person.yml b/src/test/resources/kds_new/projects/org.highmed/KDS/person/KDS_admin_entry_person.yml index bd5298c6..8fb985d1 100644 --- a/src/test/resources/kds_new/projects/org.highmed/KDS/person/KDS_admin_entry_person.yml +++ b/src/test/resources/kds_new/projects/org.highmed/KDS/person/KDS_admin_entry_person.yml @@ -14,7 +14,7 @@ mappings: with: fhir: "$resource.identifier" openehr: "$composition/context/other_context[at0003]/items[at0004]" - + fhirCondition: targetRoot: "$resource.identifier" targetAttribute: "type.coding.code" @@ -34,6 +34,7 @@ mappings: value: "MR" - name: "versicherungsInformationen" + extension: "add" with: fhir: "$resource.identifier" openehr: "$composition/content[openEHR-EHR-ADMIN_ENTRY.versicherungsinformationen.v0]" @@ -42,7 +43,7 @@ mappings: - name: "gender" extension: "add" with: - fhir: "$resource.gender" + fhir: "$resource" openehr: "$composition/content[openEHR-EHR-EVALUATION.gender.v1]" slotArchetype: "EVALUATION.gender.v1" diff --git a/src/test/resources/kds_new/projects/org.highmed/KDS/person/person.context.yaml b/src/test/resources/kds_new/projects/org.highmed/KDS/person/person.context.yaml index f6406dc5..93e825f4 100644 --- a/src/test/resources/kds_new/projects/org.highmed/KDS/person/person.context.yaml +++ b/src/test/resources/kds_new/projects/org.highmed/KDS/person/person.context.yaml @@ -2,8 +2,8 @@ grammar: FHIRConnect/v0.9.0 type: context metadata: name: KDS_Person.context - version: 0.0.1a -spec: + version: 0.0.1a +spec: system: FHIR version: R4 @@ -20,13 +20,15 @@ context: - "CLUSTER.person.v1" - "CLUSTER.structured_name.v1" - "CLUSTER.address.v1" + - "CLUSTER.organisation.v1" - "CLUSTER.person_birth_data_iso.v0" - "CLUSTER.death_details.v1" - - "CLUSTER.observation_status_fhir.v1" + - "ADMIN_ENTRY.versicherungsinformationen.v0" extensions: - "KDS_person_data.v0" - "KDS_gender.v1" - "KDS_cluster_person.v1" + - "KDS_address" - "KDS_structured_name.v1.person_name-structured_name" - "KDS_admin_entry_person.v0" start: "ADMIN_ENTRY.person_data.v0" diff --git a/src/test/resources/kds_new/projects/org.highmed/KDS/person_pseudo/KDS_address.yml b/src/test/resources/kds_new/projects/org.highmed/KDS/person_pseudo/KDS_address.yml new file mode 100644 index 00000000..86d73c0d --- /dev/null +++ b/src/test/resources/kds_new/projects/org.highmed/KDS/person_pseudo/KDS_address.yml @@ -0,0 +1,105 @@ +grammar: FHIRConnect/v0.9.0 +type: extension +metadata: + name: KDS_address_pseudo + version: 0.0.1-alpha +spec: + system: FHIR + version: R4 + extends: CLUSTER.address.v1 + +mappings: + - name: "streetaddress" + extension: "overwrite" + with: + fhir: "$fhirRoot" + openehr: "$archetype" + followedBy: + mappings: + - name: "city" + with: + fhir: "city" + openehr: "items[at0002]" + + - name: "postalCode" + with: + fhir: "postalCode" + openehr: "items[at0005]" + + - name: "line" + with: + fhir: "line" + openehr: "items[at0001]" + + + - name: "type" + with: + fhir: "type" + openehr: "items[at0010]" + manual: + - name: "physical" + openehr: + - path: "defining_code/terminology_id" + value: "local" + - path: "defining_code/code_string" + value: "at0011" + - path: "value" + value: "Physical" + fhirCondition: + targetRoot: "$fhirRoot" + targetAttribute: "code" + operator: "one of" + criteria: "physical" + + fhir: + - path: "code" + value: "physical" + openehrCondition: + targetRoot: "$openehrRoot" + targetAttribute: "defining_code/code_string" + operator: "one of" + criteria: "at0011" + + - name: "postal" + openehr: + - path: "defining_code/terminology_id" + value: "local" + - path: "defining_code/code_string" + value: "at0012" + - path: "value" + value: "Postal" + fhirCondition: + targetRoot: "$fhirRoot" + targetAttribute: "code" + operator: "one of" + criteria: "postal" + fhir: + - path: "code" + value: "postal" + openehrCondition: + targetRoot: "$openehrRoot" + targetAttribute: "defining_code/code_string" + operator: "one of" + criteria: "at0012" + + - name: "both" + openehr: + - path: "defining_code/terminology_id" + value: "local" + - path: "defining_code/code_string" + value: "at0013" + - path: "value" + value: "Both" + fhirCondition: + targetRoot: "$fhirRoot" + targetAttribute: "code" + operator: "one of" + criteria: "both" + fhir: + - path: "code" + value: "both" + openehrCondition: + targetRoot: "$openehrRoot" + targetAttribute: "defining_code/code_string" + operator: "one of" + criteria: "at0013" \ No newline at end of file diff --git a/src/test/resources/kds_new/projects/org.highmed/KDS/person_pseudo/KDS_gender.yml b/src/test/resources/kds_new/projects/org.highmed/KDS/person_pseudo/KDS_gender.yml index 1022bbe9..a088bcff 100644 --- a/src/test/resources/kds_new/projects/org.highmed/KDS/person_pseudo/KDS_gender.yml +++ b/src/test/resources/kds_new/projects/org.highmed/KDS/person_pseudo/KDS_gender.yml @@ -1,7 +1,7 @@ grammar: FHIRConnect/v0.9.0 type: extension metadata: - name: KDS_gender.v1 + name: KDS_gender_pseudo.v1 version: 0.0.1-alpha spec: system: FHIR @@ -14,7 +14,7 @@ mappings: with: fhir: "$fhirRoot.extension" openehr: "$archetype/data[at0002]/items[at0014]" - + fhirCondition: targetRoot: "$fhirRoot.extension" targetAttribute: "url" diff --git a/src/test/resources/kds_new/projects/org.highmed/KDS/person_pseudo/pseudo_person.context.yaml b/src/test/resources/kds_new/projects/org.highmed/KDS/person_pseudo/pseudo_person.context.yaml index df8f489e..4167dc95 100644 --- a/src/test/resources/kds_new/projects/org.highmed/KDS/person_pseudo/pseudo_person.context.yaml +++ b/src/test/resources/kds_new/projects/org.highmed/KDS/person_pseudo/pseudo_person.context.yaml @@ -21,6 +21,7 @@ context: - "CLUSTER.address.v1" - "CLUSTER.person_birth_data_iso.v0" extensions: + - "KDS_address_pseudo" - "KDS_admin_entry_perso_pseudo" - "KDS_person_pseudo_cluster.v1" - "KDS_gender.v1" diff --git a/src/test/resources/kds_new/projects/org.highmed/KDS/vitalstatus/KDS_Vitalstatus.context.yaml b/src/test/resources/kds_new/projects/org.highmed/KDS/vitalstatus/KDS_Vitalstatus.context.yaml index facfc1e9..ef9c9d04 100644 --- a/src/test/resources/kds_new/projects/org.highmed/KDS/vitalstatus/KDS_Vitalstatus.context.yaml +++ b/src/test/resources/kds_new/projects/org.highmed/KDS/vitalstatus/KDS_Vitalstatus.context.yaml @@ -2,8 +2,8 @@ grammar: FHIRConnect/v0.9.0 type: context metadata: name: KDS_Vitalstatus.context - version: 0.0.1a -spec: + version: 0.0.1a +spec: system: FHIR version: R4 @@ -17,7 +17,6 @@ context: archetypes: - "EVALUATION.vital_status.v1" - "CLUSTER.case_identification.v0" - - "CLUSTER.observation_status_fhir.v1" extensions: - "KDS_vital_status" start: "EVALUATION.vital_status.v1" From 665f4517bd56876655c65fb0b42c642b923d6d6f Mon Sep 17 00:00:00 2001 From: Severin Date: Tue, 27 Jan 2026 12:27:35 +0100 Subject: [PATCH 2/2] fixed Statement mapping --- .../KDS/medikationseintrag/KDS_medikationseintrag.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/resources/kds_new/projects/org.highmed/KDS/medikationseintrag/KDS_medikationseintrag.yml b/src/test/resources/kds_new/projects/org.highmed/KDS/medikationseintrag/KDS_medikationseintrag.yml index 53a3a784..90510078 100644 --- a/src/test/resources/kds_new/projects/org.highmed/KDS/medikationseintrag/KDS_medikationseintrag.yml +++ b/src/test/resources/kds_new/projects/org.highmed/KDS/medikationseintrag/KDS_medikationseintrag.yml @@ -13,14 +13,14 @@ mappings: - name: "fallIdentifikationIdentifier" extension: "add" with: - fhir: "$resource.encounter.identifier" + fhir: "$resource.context.identifier" openehr: "$composition/context/other_context[at0001]/items[openEHR-EHR-CLUSTER.case_identification.v0]" slotArchetype: "CLUSTER.case_identification.v0" - name: "fallIdentifikationReference" # if reference is accessible overwrite fallIdentifikationIdentifier extension: "add" with: - fhir: "$resource.encounter" + fhir: "$resource.context" openehr: "$reference" reference: resourceType: "Encounter"