Source | ch.fhir.ig.cda-fhir-maps#0.3.0:CDA-FHIR-Maps (R4) (v4.0.1) |
resourceType | StructureMap |
id | FhirToCdaTypes |
canonical | http://fhir.ch/ig/cda-fhir-maps/StructureMap/FhirToCdaTypes |
version | 0.3.0 |
status | draft |
publisher | ahdis |
name | FhirToCdaTypes |
date | 2022-02-11T11:14:39+01:00 |
description | Adapted from https://github.com/HL7/ccda-to-fhir/tree/master/mappings CDA: http://build.fhir.org/ig/ahdis/cda-core-2.0/branches/master/index.html FHIR: http://hl7.org/fhir/r4/ |
copyright | CC-BY-SA-4.0 |
Usages | (none) |
/// url = 'http://fhir.ch/ig/cda-fhir-maps/StructureMap/FhirToCdaTypes' /// name = 'FhirToCdaTypes' /// status = 'draft' conceptmap " uri2oid " { prefix s = " http://hl7.org/fhir " prefix t = " http://hl7.org/cda " s : "http://snomed.info/sct" == t : " 2.16.840.1.113883.6.96 " s : "http://loinc.org" == t : " 2.16.840.1.113883.6.1 " s : "http://hl7.org/fhir/sid/atc" == t : " 2.16.840.1.113883.6.73 " s : "http://www.whocc.no/atc" == t : " 2.16.840.1.113883.6.73 " s : "http://terminology.hl7.org/CodeSystem/v3-substanceAdminSubstitution" == t : " 2.16.840.1.113883.5.1070 " } conceptmap " uri2system " { prefix s = " http://hl7.org/fhir " prefix t = " http://hl7.org/cda " s : "http://snomed.info/sct" == t : " SNOMED CT " s : "http://loinc.org" == t : LOINC s : "http://hl7.org/fhir/sid/atc" == t : " ATC WHO " s : "http://www.whocc.no/atc" == t : " ATC WHO " s : "http://terminology.hl7.org/CodeSystem/v3-substanceAdminSubstitution" == t : " HL7 Substance Admin Substitution " } conceptmap " oid2system " { prefix s = " http://hl7.org/fhir " prefix t = " http://hl7.org/cda " s : "urn:oid:2.51.1.1" == t : GTIN s : "urn:oid:1.3.6.1.4.1.19376.1.9.2.1" == t : " IHE Pharmaceutical Advice Status List " } conceptmap " addressUse " { prefix s = " http://hl7.org/fhir/valueset-address-use.html " prefix t = " http://terminology.hl7.org/ValueSet/v3-AddressUse " s : home == t : H s : work == t : WP s : temp == t : TMP s : old == t : OLD } uses " http://hl7.org/fhir/StructureDefinition/Identifier " as source uses " http://hl7.org/fhir/cda/StructureDefinition/II " as target group Any ( source src , target tgt ) { src.extension as extension where $this.url = 'http://hl7.org/fhir/StructureDefinition/iso21090-nullFlavor' -> tgt.nullFlavor as nullFlavor then { extension.valueCode as valueCode then { valueCode.value as v -> nullFlavor.value = cast ( v , 'string' ) ; } "nullFlavor" ; } ; } group IdentifierII ( source src : Identifier, target tgt : II ) extends Any <<types>> { src.value as value where src.system.empty() and src.value.startsWith('urn:uuid:') -> tgt.root = ( value.substring(9).upper() ) "idAsUuid" ; src.value as value where src.system = 'urn:ietf:rfc:3986' -> tgt.root = ( value.substring(9).upper() ) "idAsUuid" ; src.value as value where src.system.startsWith('urn:oid:') then { src.system as system -> tgt.root = ( system.substring(8) ) , tgt.extension = value "oidident" ; } "system" ; } group IntegerINT ( source src : integer, target tgt : INT ) extends Any <<types>> { src.value as v -> tgt.value = v "integer" ; } // group Identifier(source src : Identifier, target tgt : II) extends Any <<types>> { // src.system as system then { // src.value as value then { // value.value as v where system.value = 'urn:ietf:rfc:3986' -> tgt.root = cast(v, 'string') "noExtension"; // system.value as v where system.value != 'urn:ietf:rfc:3986' -> tgt.root = v then { // value.value as val -> tgt.extension = cast(val, 'string') "extension"; // } "withExtension"; // } "rootValue"; // } "root"; // src.value as value -> tgt.root = '123' "test"; // src -> tgt.root = '123' "test"; // src.assigner as a then { // a.display as display then { // display.value as val -> tgt.assigningAuthorityName = cast(val, 'string'); // } "display"; // } "assigner"; // src.extension as ext where ext.url = 'http://hl7.org/fhir/cdaStructureDefinition/extension-displayable' -> tgt.displayable as displayable then { // ext.value as v -> displayable.value = cast(v, 'string'); // } "displayable"; // } group InstantTS ( source src : instant, target tgt : TS ) extends Any <<types>> { src.value as v -> tgt.value = v "copy" ; } group DateTimeTS ( source src : dateTime, target tgt : TS ) extends InstantTS <<types>> { } group DateTS ( source src : date, target tgt : TS ) extends InstantTS <<types>> { } group CodeCS ( source src : code, target tgt : CS ) extends Any <<types>> { src.code as c -> tgt.value = cast ( c , 'string' ) ; } group CodeCE ( source src : code, target tgt : CE ) extends CodeCS <<types>> { } group CodeCD ( source src : code, target tgt : CD ) extends CodeCS <<types>> { } group CodingCE ( source src : Coding, target tgt : CE ) extends Any <<types>> { src.code as code -> tgt.code = code ; src.system as system where $this.startsWith('http:') -> tgt.codeSystem = translate ( system , '#uri2oid' , 'code' ) ; src.system as system where $this.startsWith('urn:oid:') then { src.system as system -> tgt.codeSystem = ( system.substring(8) ) "oidident" ; } ; src.system as system where $this.startsWith('http:') -> tgt.codeSystemName = translate ( system , '#uri2system' , 'code' ) "systemName1" ; src.system as system where $this.startsWith('urn:oid:') -> tgt.codeSystemName = translate ( system , '#oid2system' , 'code' ) "systemName2" ; src.display as display -> tgt.displayName = display ; } group CodeableConceptCE ( source src : CodeableConcept, target tgt : CE ) extends Any <<types>> { src.text as text -> tgt.orginialText as originalText , originalText.data = text ; src.coding first as coding then CodingCE ( coding , tgt ) "first" ; src.coding not_first as coding -> tgt.translation as translation then CodingCE ( coding , translation ) "translation" ; } // group CECodeableConcept(source src : CE, target tgt : CodeableConcept) extends Any <<types>> { // src.originalText -> tgt.text; // src -> tgt.coding as coding then { // src.code as code -> coding.code = cast(code, 'string'); // src.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); // src.displayName as display -> coding.display = cast(display, 'string'); // } "code"; // src.translation as translation -> tgt.coding as coding then { // translation.code as code -> coding.code = cast(code, 'string'); // translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); // translation.displayName as display -> coding.display = cast(display, 'string'); // } "translation"; // } // group CSCodeableConcept(source src : CS, target tgt : CodeableConcept) extends CECodeableConcept <<types>> { // } // group CDCodeableConcept(source src : CD, target tgt : CodeableConcept) extends CECodeableConcept <<types>> { // } group AddressAD ( source src : Address, target tgt : AD ) extends Any <<types>> { src.line as v -> tgt.streetAddressLine as line , line.data = v "streetAddress" ; src.postalCode as v -> tgt.postalCode as postalCode , postalCode.data = v ; src where $this.postalCode.exists() = false -> tgt.postalCode as postalCode , postalCode.nullFlavor = 'NI' "nullFlavor" ; src.city as v -> tgt.city as city , city.data = v ; src where $this.city.exists() = false -> tgt.city as city , city.nullFlavor = 'NI' "nullFlavor" ; src.state as v -> tgt.state as state , state.data = v ; src.district as v -> tgt.county as county , county.data = v ; src.country as v -> tgt.country as country , country.data = v ; src where $this.country.exists() = false -> tgt.country as country , country.nullFlavor = 'NI' "nullFlavor" ; src.use as c -> tgt.use = translate ( c , '#addressUse' , 'code' ) "addressUse" ; } group ContactPointTEL ( source src : ContactPoint, target tgt : TEL ) extends Any <<types>> { src.value as value -> tgt.value = ( iif(%src.system = 'phone', 'tel:', '') + iif(%src.system = 'fax', 'fax:', '') + iif(%src.system = 'email', 'mailto:', '') + iif(%src.system = 'url', 'http:', '') + value ) ; src.use as use where $this = 'home' -> tgt.use = 'HP' ; src.use as use where $this = 'work' -> tgt.use = 'WP' ; src.use as use where $this = 'old' -> tgt.use = 'BAD' ; src.use as use where $this = 'temp' -> tgt.use = 'TMP' ; src.use as use where $this = 'mobile' -> tgt.use = 'MC' ; } group HumanNameEN ( source src : HumanName, target tgt : EN ) extends Any <<types>> { src.family as v -> tgt.family as family , family.data = v ; src.given as v -> tgt.given as given , given.data = v ; src.prefix as v -> tgt.prefix as prefix , prefix.data = v ; src.suffix as v -> tgt.suffix as suffix , suffix.data = v ; } group QuantityPQ ( source src : Quantity, target tgt : PQ ) extends Any <<types>> { src.code as code -> tgt.unit = code ; src.value as value -> tgt.value = value ; } group RatioRTOPQPQ ( source src : Ratio, target tgt : RTO_PQ_PQ ) extends Any <<types>> { src.numerator as numerator -> tgt.numerator as targetNumerator then QuantityPQ ( numerator , targetNumerator ) ; src.denominator as denominator -> tgt.denominator as targetDenominator then QuantityPQ ( denominator , targetDenominator ) ; }
Produced 08 Sep 2023