CDA-FHIR-Maps (R4)
0.1.0 - Draft Standard for Trial Use

This page is part of the CDA-FHIR-Maps (R4) (v0.1.0: DSTU 1) based on FHIR R4. . For a full list of available versions, see the Directory of published versions

FHIR to CDA types - XML Representation

(back to description)

Raw xml

Source view



<StructureMap xmlns="http://hl7.org/fhir">
  <id value="FhirToCdaTypes"/>
  <text>
    <status value="generated"/>
    <div xmlns="http://www.w3.org/1999/xhtml">
         <pre>map &quot;http://fhir.ch/ig/cda-fhir-maps/StructureMap/FhirToCdaTypes&quot; = &quot;FhirToCdaTypes&quot;

// 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/

conceptmap &quot;uri2oid&quot; {
  prefix s = &quot;http://hl7.org/fhir&quot;
  prefix t = &quot;http://hl7.org/cda&quot;

  s:&quot;http://snomed.info/sct&quot; == t:&quot;2.16.840.1.113883.6.96&quot;
  s:&quot;http://loinc.org&quot; == t:&quot;2.16.840.1.113883.6.1&quot;
  s:&quot;http://hl7.org/fhir/sid/atc&quot; == t:&quot;2.16.840.1.113883.6.73&quot;
  s:&quot;http://www.whocc.no/atc&quot; == t:&quot;2.16.840.1.113883.6.73&quot;
  s:&quot;http://terminology.hl7.org/CodeSystem/v3-substanceAdminSubstitution&quot; == t:&quot;2.16.840.1.113883.5.1070&quot;
}

conceptmap &quot;uri2system&quot; {
  prefix s = &quot;http://hl7.org/fhir&quot;
  prefix t = &quot;http://hl7.org/cda&quot;

  s:&quot;http://snomed.info/sct&quot; == t:&quot;SNOMED CT&quot;
  s:&quot;http://loinc.org&quot; == t:LOINC
  s:&quot;http://hl7.org/fhir/sid/atc&quot; == t:&quot;ATC WHO&quot;
  s:&quot;http://www.whocc.no/atc&quot; == t:&quot;ATC WHO&quot;
  s:&quot;http://terminology.hl7.org/CodeSystem/v3-substanceAdminSubstitution&quot; == t:&quot;HL7 Substance Admin Substitution&quot;
}

conceptmap &quot;oid2system&quot; {
  prefix s = &quot;http://hl7.org/fhir&quot;
  prefix t = &quot;http://hl7.org/cda&quot;

  s:&quot;urn:oid:2.51.1.1&quot; == t:GTIN
  s:&quot;urn:oid:1.3.6.1.4.1.19376.1.9.2.1&quot; == t:&quot;IHE Pharmaceutical Advice Status List&quot;
}

conceptmap &quot;addressUse&quot; {
  prefix s = &quot;http://hl7.org/fhir/valueset-address-use.html&quot;
  prefix t = &quot;http://terminology.hl7.org/ValueSet/v3-AddressUse&quot;

  s:home == t:H
  s:work == t:WP
  s:temp == t:TMP
  s:old == t:OLD
}

uses &quot;http://hl7.org/fhir/StructureDefinition/Identifier&quot; as source
uses &quot;http://hl7.org/fhir/cda/StructureDefinition/II&quot; as target

group Any(source src, target tgt) {
  src.extension as extension where $this.url = 'http://hl7.org/fhir/StructureDefinition/iso21090-nullFlavor' -&gt; tgt.nullFlavor as nullFlavor then {
    extension.valueCode as valueCode then {
      valueCode.value as v -&gt; nullFlavor.value = cast(v, 'string');
    } &quot;nullFlavor&quot;;
  };
}

group IdentifierII(source src : Identifier, target tgt : II) extends Any &lt;&lt;types&gt;&gt; {
  src.value as value where src.system.empty() and src.value.startsWith('urn:uuid:') -&gt; tgt.root = (value.substring(9).upper()) &quot;idAsUuid&quot;;
  src.value as value where src.system = 'urn:ietf:rfc:3986' -&gt; tgt.root = (value.substring(9).upper()) &quot;idAsUuid&quot;;
  src.value as value where src.system.startsWith('urn:oid:') then {
    src.system as system -&gt;  tgt.root = (system.substring(8)),  tgt.extension = value &quot;oidident&quot;;
  } &quot;system&quot;;
}

group IntegerINT(source src : integer, target tgt : INT) extends Any &lt;&lt;types&gt;&gt; {
  src.value as v -&gt; tgt.value = v &quot;integer&quot;;
}

// group Identifier(source src : Identifier, target tgt : II) extends Any &lt;&lt;types&gt;&gt; {
// src.system as system then {
// src.value as value then {
// value.value as v where system.value = 'urn:ietf:rfc:3986' -&gt; tgt.root = cast(v, 'string') &quot;noExtension&quot;;
// system.value as v where system.value != 'urn:ietf:rfc:3986' -&gt; tgt.root = v then {
// value.value as val -&gt; tgt.extension = cast(val, 'string') &quot;extension&quot;;
// } &quot;withExtension&quot;;
// } &quot;rootValue&quot;;
// } &quot;root&quot;;
// src.value as value -&gt; tgt.root = '123' &quot;test&quot;;
// src -&gt; tgt.root = '123' &quot;test&quot;;
// src.assigner as a then {
// a.display as display then {
// display.value as val -&gt; tgt.assigningAuthorityName = cast(val, 'string');
// } &quot;display&quot;;
// } &quot;assigner&quot;;
// src.extension as ext where ext.url = 'http://hl7.org/fhir/cdaStructureDefinition/extension-displayable' -&gt; tgt.displayable as displayable then {
// ext.value as v -&gt; displayable.value = cast(v, 'string');
// } &quot;displayable&quot;;
// }
group InstantTS(source src : instant, target tgt : TS) extends Any &lt;&lt;types&gt;&gt; {
  src.value as v -&gt; tgt.value = v &quot;copy&quot;;
}

group DateTimeTS(source src : dateTime, target tgt : TS) extends InstantTS &lt;&lt;types&gt;&gt; {
}

group DateTS(source src : date, target tgt : TS) extends InstantTS &lt;&lt;types&gt;&gt; {
}

group CodeCS(source src : code, target tgt : CS) extends Any &lt;&lt;types&gt;&gt; {
  src.code as c -&gt; tgt.value = cast(c, 'string');
}

group CodeCE(source src : code, target tgt : CE) extends CodeCS &lt;&lt;types&gt;&gt; {
}

group CodeCD(source src : code, target tgt : CD) extends CodeCS &lt;&lt;types&gt;&gt; {
}

group CodingCE(source src : Coding, target tgt : CE) extends Any &lt;&lt;types&gt;&gt; {
  src.code as code -&gt; tgt.code = code;
  src.system as system where $this.startsWith('http:') -&gt; tgt.codeSystem = translate(system, '#uri2oid', 'code');
  src.system as system where $this.startsWith('urn:oid:') then {
    src.system as system -&gt; tgt.codeSystem = (system.substring(8)) &quot;oidident&quot;;
  };
  src.system as system where $this.startsWith('http:') -&gt; tgt.codeSystemName = translate(system, '#uri2system', 'code') &quot;systemName1&quot;;
  src.system as system where $this.startsWith('urn:oid:') -&gt; tgt.codeSystemName = translate(system, '#oid2system', 'code') &quot;systemName2&quot;;
  src.display as display -&gt; tgt.displayName = display;
}

group CodeableConceptCE(source src : CodeableConcept, target tgt : CE) extends Any &lt;&lt;types&gt;&gt; {
  src.text as text -&gt;  tgt.orginialText as originalText,  originalText.data = text;
  src.coding first as coding then CodingCE(coding, tgt) &quot;first&quot;;
  src.coding not_first as coding -&gt; tgt.translation as translation then CodingCE(coding, translation) &quot;translation&quot;;
}

// group CECodeableConcept(source src : CE, target tgt : CodeableConcept) extends Any &lt;&lt;types&gt;&gt; {
// src.originalText -&gt; tgt.text;
// src -&gt; tgt.coding as coding then {
// src.code as code -&gt; coding.code = cast(code, 'string');
// src.codeSystem as system -&gt; coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');
// src.displayName as display -&gt; coding.display = cast(display, 'string');
// } &quot;code&quot;;
// src.translation as translation -&gt; tgt.coding as coding then {
// translation.code as code -&gt; coding.code = cast(code, 'string');
// translation.codeSystem as system -&gt; coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');
// translation.displayName as display -&gt; coding.display = cast(display, 'string');
// } &quot;translation&quot;;
// }
// group CSCodeableConcept(source src : CS, target tgt : CodeableConcept) extends CECodeableConcept &lt;&lt;types&gt;&gt; {
// }
// group CDCodeableConcept(source src : CD, target tgt : CodeableConcept) extends CECodeableConcept &lt;&lt;types&gt;&gt; {
// }
group AddressAD(source src : Address, target tgt : AD) extends Any &lt;&lt;types&gt;&gt; {
  src.line as v -&gt;  tgt.streetAddressLine as line,  line.data = v &quot;streetAddress&quot;;
  src.postalCode as v -&gt;  tgt.postalCode as postalCode,  postalCode.data = v;
  src.city as v -&gt;  tgt.city as city,  city.data = v;
  src.state as v -&gt;  tgt.state as state,  state.data = v;
  src.district as v -&gt;  tgt.county as county,  county.data = v;
  src.country as v -&gt;  tgt.country as country,  country.data = v;
  src.use as c -&gt; tgt.use = translate(c, '#addressUse', 'code') &quot;addressUse&quot;;
}

group ContactPointTEL(source src : ContactPoint, target tgt : TEL) extends Any &lt;&lt;types&gt;&gt; {
  src.value as value -&gt; 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' -&gt; tgt.use = 'HP';
  src.use as use where $this = 'work' -&gt; tgt.use = 'WP';
  // not complete see below
  src.use as use where $this = 'old' -&gt; tgt.use = 'BAD';
  src.use as use where $this = 'temp' -&gt; tgt.use = 'TMP';
  src.use as use where $this = 'mobile' -&gt; tgt.use = 'MC';
}

group HumanNameEN(source src : HumanName, target tgt : EN) extends Any &lt;&lt;types&gt;&gt; {
  src.family as v -&gt;  tgt.family as family,  family.data = v;
  src.given as v -&gt;  tgt.given as given,  given.data = v;
  src.prefix as v -&gt;  tgt.prefix as prefix,  prefix.data = v;
  src.suffix as v -&gt;  tgt.suffix as suffix,  suffix.data = v;
}

group QuantityPQ(source src : Quantity, target tgt : PQ) extends Any &lt;&lt;types&gt;&gt; {
  // src.code as code -&gt; tgt.unit = code;
  src.unit as unit -&gt; tgt.unit = unit;
  src.value as value -&gt; tgt.value = value;
}

group RatioRTOPQPQ(source src : Ratio, target tgt : RTO_PQ_PQ) extends Any &lt;&lt;types&gt;&gt; {
  src.numerator as numerator -&gt; tgt.numerator as targetNumerator then QuantityPQ(numerator, targetNumerator);
  src.denominator as denominator -&gt; tgt.denominator as targetDenominator then QuantityPQ(denominator, targetDenominator);
}

</pre>
      </div>
  </text>
  <contained>
    <ConceptMap>
      <id value="uri2oid"/>
      <status value="draft"/>
      <group>
        <source value="http://hl7.org/fhir"/>
        <target value="http://hl7.org/cda"/>
        <element>
          <code value="http://snomed.info/sct"/>
          <target>
            <code value="2.16.840.1.113883.6.96"/>
            <equivalence value="equivalent"/>
          </target>
        </element>
        <element>
          <code value="http://loinc.org"/>
          <target>
            <code value="2.16.840.1.113883.6.1"/>
            <equivalence value="equivalent"/>
          </target>
        </element>
        <element>
          <code value="http://hl7.org/fhir/sid/atc"/>
          <target>
            <code value="2.16.840.1.113883.6.73"/>
            <equivalence value="equivalent"/>
            <comment value="see issue #4"/>
          </target>
        </element>
        <element>
          <code value="http://www.whocc.no/atc"/>
          <target>
            <code value="2.16.840.1.113883.6.73"/>
            <equivalence value="equivalent"/>
          </target>
        </element>
        <element>
          <code
                value="http://terminology.hl7.org/CodeSystem/v3-substanceAdminSubstitution"/>
          <target>
            <code value="2.16.840.1.113883.5.1070"/>
            <equivalence value="equivalent"/>
          </target>
        </element>
      </group>
    </ConceptMap>
  </contained>
  <contained>
    <ConceptMap>
      <id value="uri2system"/>
      <status value="draft"/>
      <group>
        <source value="http://hl7.org/fhir"/>
        <target value="http://hl7.org/cda"/>
        <element>
          <code value="http://snomed.info/sct"/>
          <target>
            <code value="SNOMED CT"/>
            <equivalence value="equivalent"/>
          </target>
        </element>
        <element>
          <code value="http://loinc.org"/>
          <target>
            <code value="LOINC"/>
            <equivalence value="equivalent"/>
          </target>
        </element>
        <element>
          <code value="http://hl7.org/fhir/sid/atc"/>
          <target>
            <code value="ATC WHO"/>
            <equivalence value="equivalent"/>
            <comment value="see issue #4"/>
          </target>
        </element>
        <element>
          <code value="http://www.whocc.no/atc"/>
          <target>
            <code value="ATC WHO"/>
            <equivalence value="equivalent"/>
          </target>
        </element>
        <element>
          <code
                value="http://terminology.hl7.org/CodeSystem/v3-substanceAdminSubstitution"/>
          <target>
            <code value="HL7 Substance Admin Substitution"/>
            <equivalence value="equivalent"/>
          </target>
        </element>
      </group>
    </ConceptMap>
  </contained>
  <contained>
    <ConceptMap>
      <id value="oid2system"/>
      <status value="draft"/>
      <group>
        <source value="http://hl7.org/fhir"/>
        <target value="http://hl7.org/cda"/>
        <element>
          <code value="urn:oid:2.51.1.1"/>
          <target>
            <code value="GTIN"/>
            <equivalence value="equivalent"/>
          </target>
        </element>
        <element>
          <code value="urn:oid:1.3.6.1.4.1.19376.1.9.2.1"/>
          <target>
            <code value="IHE Pharmaceutical Advice Status List"/>
            <equivalence value="equivalent"/>
          </target>
        </element>
      </group>
    </ConceptMap>
  </contained>
  <contained>
    <ConceptMap>
      <id value="addressUse"/>
      <status value="draft"/>
      <group>
        <source value="http://hl7.org/fhir/valueset-address-use.html"/>
        <target value="http://terminology.hl7.org/ValueSet/v3-AddressUse"/>
        <element>
          <code value="home"/>
          <target>
            <code value="H"/>
            <equivalence value="equivalent"/>
            <comment value="home -&gt; home address"/>
          </target>
        </element>
        <element>
          <code value="work"/>
          <target>
            <code value="WP"/>
            <equivalence value="equivalent"/>
            <comment value="work -&gt; work place"/>
          </target>
        </element>
        <element>
          <code value="temp"/>
          <target>
            <code value="TMP"/>
            <equivalence value="equivalent"/>
            <comment value="Temporary -&gt; temporary address"/>
          </target>
        </element>
        <element>
          <code value="old"/>
          <target>
            <code value="OLD"/>
            <equivalence value="equivalent"/>
            <comment
                     value="Old / Incorrect -&gt; no longer in use, could be also t:&quot;BAD&quot; for bad address"/>
          </target>
        </element>
      </group>
    </ConceptMap>
  </contained>
  <extension url="http://fhir.ch/reference">
    <valueReference>
      <reference value="#uri2oid"/>
    </valueReference>
  </extension>
  <extension url="http://fhir.ch/reference">
    <valueReference>
      <reference value="#uri2system"/>
    </valueReference>
  </extension>
  <extension url="http://fhir.ch/reference">
    <valueReference>
      <reference value="#oid2system"/>
    </valueReference>
  </extension>
  <extension url="http://fhir.ch/reference">
    <valueReference>
      <reference value="#addressUse"/>
    </valueReference>
  </extension>
  <url value="http://fhir.ch/ig/cda-fhir-maps/StructureMap/FhirToCdaTypes"/>
  <version value="0.1.0"/>
  <name value="FhirToCdaTypes"/>
  <status value="draft"/>
  <date value="2020-12-09T15:16:13+01:00"/>
  <publisher value="ahdis"/>
  <contact>
    <name value="ahdis"/>
    <telecom>
      <system value="url"/>
      <value value="http://www.ahdis.ch/"/>
    </telecom>
  </contact>
  <description
               value="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 value="CC-BY-SA-4.0"/>
  <structure>
    <url value="http://hl7.org/fhir/StructureDefinition/Identifier"/>
    <mode value="source"/>
  </structure>
  <structure>
    <url value="http://hl7.org/fhir/cda/StructureDefinition/II"/>
    <mode value="target"/>
  </structure>
  <group>
    <name value="Any"/>
    <typeMode value="none"/>
    <input>
      <name value="src"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="tgt"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="extension"/>
      <source>
        <context value="src"/>
        <element value="extension"/>
        <variable value="extension"/>
        <condition
                   value="$this.url = &#39;http://hl7.org/fhir/StructureDefinition/iso21090-nullFlavor&#39;"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="nullFlavor"/>
        <variable value="nullFlavor"/>
      </target>
      <rule>
        <name value="nullFlavor"/>
        <source>
          <context value="extension"/>
          <element value="valueCode"/>
          <variable value="valueCode"/>
        </source>
        <rule>
          <name value="value"/>
          <source>
            <context value="valueCode"/>
            <element value="value"/>
            <variable value="v"/>
          </source>
          <target>
            <context value="nullFlavor"/>
            <contextType value="variable"/>
            <element value="value"/>
            <transform value="cast"/>
            <parameter>
              <valueId value="v"/>
            </parameter>
            <parameter>
              <valueString value="string"/>
            </parameter>
          </target>
        </rule>
      </rule>
    </rule>
  </group>
  <group>
    <name value="IdentifierII"/>
    <extends value="Any"/>
    <typeMode value="types"/>
    <input>
      <name value="src"/>
      <type value="Identifier"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="tgt"/>
      <type value="II"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="idAsUuid"/>
      <source>
        <context value="src"/>
        <element value="value"/>
        <variable value="value"/>
        <condition
                   value="src.system.empty() and src.value.startsWith(&#39;urn:uuid:&#39;)"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="root"/>
        <transform value="evaluate"/>
        <parameter>
          <valueString value="value.substring(9).upper()"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="idAsUuid"/>
      <source>
        <context value="src"/>
        <element value="value"/>
        <variable value="value"/>
        <condition value="src.system = &#39;urn:ietf:rfc:3986&#39;"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="root"/>
        <transform value="evaluate"/>
        <parameter>
          <valueString value="value.substring(9).upper()"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="system"/>
      <source>
        <context value="src"/>
        <element value="value"/>
        <variable value="value"/>
        <condition value="src.system.startsWith(&#39;urn:oid:&#39;)"/>
      </source>
      <rule>
        <name value="oidident"/>
        <source>
          <context value="src"/>
          <element value="system"/>
          <variable value="system"/>
        </source>
        <target>
          <context value="tgt"/>
          <contextType value="variable"/>
          <element value="root"/>
          <transform value="evaluate"/>
          <parameter>
            <valueString value="system.substring(8)"/>
          </parameter>
        </target>
        <target>
          <context value="tgt"/>
          <contextType value="variable"/>
          <element value="extension"/>
          <transform value="copy"/>
          <parameter>
            <valueId value="value"/>
          </parameter>
        </target>
      </rule>
    </rule>
  </group>
  <group>
    <name value="IntegerINT"/>
    <extends value="Any"/>
    <typeMode value="types"/>
    <input>
      <name value="src"/>
      <type value="integer"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="tgt"/>
      <type value="INT"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="integer"/>
      <source>
        <context value="src"/>
        <element value="value"/>
        <variable value="v"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="value"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="v"/>
        </parameter>
      </target>
    </rule>
  </group>
  <group>
    <name value="InstantTS"/>
    <extends value="Any"/>
    <typeMode value="types"/>
    <documentation
                   value="group Identifier(source src : Identifier, target tgt : II) extends Any &lt;&lt;types&gt;&gt; { src.system as system then { src.value as value then { value.value as v where system.value = &#39;urn:ietf:rfc:3986&#39; -&gt; tgt.root = cast(v, &#39;string&#39;) &quot;noExtension&quot;; system.value as v where system.value != &#39;urn:ietf:rfc:3986&#39; -&gt; tgt.root = v then { value.value as val -&gt; tgt.extension = cast(val, &#39;string&#39;) &quot;extension&quot;; } &quot;withExtension&quot;; } &quot;rootValue&quot;; } &quot;root&quot;; src.value as value -&gt; tgt.root = &#39;123&#39; &quot;test&quot;; src -&gt; tgt.root = &#39;123&#39; &quot;test&quot;; src.assigner as a then { a.display as display then { display.value as val -&gt; tgt.assigningAuthorityName = cast(val, &#39;string&#39;); } &quot;display&quot;; } &quot;assigner&quot;; src.extension as ext where ext.url = &#39;http://hl7.org/fhir/cdaStructureDefinition/extension-displayable&#39; -&gt; tgt.displayable as displayable then { ext.value as v -&gt; displayable.value = cast(v, &#39;string&#39;); } &quot;displayable&quot;; }"/>
    <input>
      <name value="src"/>
      <type value="instant"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="tgt"/>
      <type value="TS"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="copy"/>
      <source>
        <context value="src"/>
        <element value="value"/>
        <variable value="v"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="value"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="v"/>
        </parameter>
      </target>
    </rule>
  </group>
  <group>
    <name value="DateTimeTS"/>
    <extends value="InstantTS"/>
    <typeMode value="types"/>
    <input>
      <name value="src"/>
      <type value="dateTime"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="tgt"/>
      <type value="TS"/>
      <mode value="target"/>
    </input>
  </group>
  <group>
    <name value="DateTS"/>
    <extends value="InstantTS"/>
    <typeMode value="types"/>
    <input>
      <name value="src"/>
      <type value="date"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="tgt"/>
      <type value="TS"/>
      <mode value="target"/>
    </input>
  </group>
  <group>
    <name value="CodeCS"/>
    <extends value="Any"/>
    <typeMode value="types"/>
    <input>
      <name value="src"/>
      <type value="code"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="tgt"/>
      <type value="CS"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="code"/>
      <source>
        <context value="src"/>
        <element value="code"/>
        <variable value="c"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="value"/>
        <transform value="cast"/>
        <parameter>
          <valueId value="c"/>
        </parameter>
        <parameter>
          <valueString value="string"/>
        </parameter>
      </target>
    </rule>
  </group>
  <group>
    <name value="CodeCE"/>
    <extends value="CodeCS"/>
    <typeMode value="types"/>
    <input>
      <name value="src"/>
      <type value="code"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="tgt"/>
      <type value="CE"/>
      <mode value="target"/>
    </input>
  </group>
  <group>
    <name value="CodeCD"/>
    <extends value="CodeCS"/>
    <typeMode value="types"/>
    <input>
      <name value="src"/>
      <type value="code"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="tgt"/>
      <type value="CD"/>
      <mode value="target"/>
    </input>
  </group>
  <group>
    <name value="CodingCE"/>
    <extends value="Any"/>
    <typeMode value="types"/>
    <input>
      <name value="src"/>
      <type value="Coding"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="tgt"/>
      <type value="CE"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="code"/>
      <source>
        <context value="src"/>
        <element value="code"/>
        <variable value="code"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="code"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="code"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="system"/>
      <source>
        <context value="src"/>
        <element value="system"/>
        <variable value="system"/>
        <condition value="$this.startsWith(&#39;http:&#39;)"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="codeSystem"/>
        <transform value="translate"/>
        <parameter>
          <valueId value="system"/>
        </parameter>
        <parameter>
          <valueString value="#uri2oid"/>
        </parameter>
        <parameter>
          <valueString value="code"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="system"/>
      <source>
        <context value="src"/>
        <element value="system"/>
        <variable value="system"/>
        <condition value="$this.startsWith(&#39;urn:oid:&#39;)"/>
      </source>
      <rule>
        <name value="oidident"/>
        <source>
          <context value="src"/>
          <element value="system"/>
          <variable value="system"/>
        </source>
        <target>
          <context value="tgt"/>
          <contextType value="variable"/>
          <element value="codeSystem"/>
          <transform value="evaluate"/>
          <parameter>
            <valueString value="system.substring(8)"/>
          </parameter>
        </target>
      </rule>
    </rule>
    <rule>
      <name value="systemName1"/>
      <source>
        <context value="src"/>
        <element value="system"/>
        <variable value="system"/>
        <condition value="$this.startsWith(&#39;http:&#39;)"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="codeSystemName"/>
        <transform value="translate"/>
        <parameter>
          <valueId value="system"/>
        </parameter>
        <parameter>
          <valueString value="#uri2system"/>
        </parameter>
        <parameter>
          <valueString value="code"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="systemName2"/>
      <source>
        <context value="src"/>
        <element value="system"/>
        <variable value="system"/>
        <condition value="$this.startsWith(&#39;urn:oid:&#39;)"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="codeSystemName"/>
        <transform value="translate"/>
        <parameter>
          <valueId value="system"/>
        </parameter>
        <parameter>
          <valueString value="#oid2system"/>
        </parameter>
        <parameter>
          <valueString value="code"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="display"/>
      <source>
        <context value="src"/>
        <element value="display"/>
        <variable value="display"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="displayName"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="display"/>
        </parameter>
      </target>
    </rule>
  </group>
  <group>
    <name value="CodeableConceptCE"/>
    <extends value="Any"/>
    <typeMode value="types"/>
    <input>
      <name value="src"/>
      <type value="CodeableConcept"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="tgt"/>
      <type value="CE"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="text"/>
      <source>
        <context value="src"/>
        <element value="text"/>
        <variable value="text"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="orginialText"/>
        <variable value="originalText"/>
      </target>
      <target>
        <context value="originalText"/>
        <contextType value="variable"/>
        <element value="data"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="text"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="first"/>
      <source>
        <context value="src"/>
        <element value="coding"/>
        <listMode value="first"/>
        <variable value="coding"/>
      </source>
      <dependent>
        <name value="CodingCE"/>
        <variable value="coding"/>
        <variable value="tgt"/>
      </dependent>
    </rule>
    <rule>
      <name value="translation"/>
      <source>
        <context value="src"/>
        <element value="coding"/>
        <listMode value="not_first"/>
        <variable value="coding"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="translation"/>
        <variable value="translation"/>
      </target>
      <dependent>
        <name value="CodingCE"/>
        <variable value="coding"/>
        <variable value="translation"/>
      </dependent>
    </rule>
  </group>
  <group>
    <name value="AddressAD"/>
    <extends value="Any"/>
    <typeMode value="types"/>
    <documentation
                   value="group CECodeableConcept(source src : CE, target tgt : CodeableConcept) extends Any &lt;&lt;types&gt;&gt; { src.originalText -&gt; tgt.text; src -&gt; tgt.coding as coding then { src.code as code -&gt; coding.code = cast(code, &#39;string&#39;); src.codeSystem as system -&gt; coding.system = translate(system, &#39;http://hl7.org/fhir/ConceptMap/special-oid2uri&#39;, &#39;uri&#39;); src.displayName as display -&gt; coding.display = cast(display, &#39;string&#39;); } &quot;code&quot;; src.translation as translation -&gt; tgt.coding as coding then { translation.code as code -&gt; coding.code = cast(code, &#39;string&#39;); translation.codeSystem as system -&gt; coding.system = translate(system, &#39;http://hl7.org/fhir/ConceptMap/special-oid2uri&#39;, &#39;uri&#39;); translation.displayName as display -&gt; coding.display = cast(display, &#39;string&#39;); } &quot;translation&quot;; } group CSCodeableConcept(source src : CS, target tgt : CodeableConcept) extends CECodeableConcept &lt;&lt;types&gt;&gt; { } group CDCodeableConcept(source src : CD, target tgt : CodeableConcept) extends CECodeableConcept &lt;&lt;types&gt;&gt; { }"/>
    <input>
      <name value="src"/>
      <type value="Address"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="tgt"/>
      <type value="AD"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="streetAddress"/>
      <source>
        <context value="src"/>
        <element value="line"/>
        <variable value="v"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="streetAddressLine"/>
        <variable value="line"/>
      </target>
      <target>
        <context value="line"/>
        <contextType value="variable"/>
        <element value="data"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="v"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="postalCode"/>
      <source>
        <context value="src"/>
        <element value="postalCode"/>
        <variable value="v"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="postalCode"/>
        <variable value="postalCode"/>
      </target>
      <target>
        <context value="postalCode"/>
        <contextType value="variable"/>
        <element value="data"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="v"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="city"/>
      <source>
        <context value="src"/>
        <element value="city"/>
        <variable value="v"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="city"/>
        <variable value="city"/>
      </target>
      <target>
        <context value="city"/>
        <contextType value="variable"/>
        <element value="data"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="v"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="state"/>
      <source>
        <context value="src"/>
        <element value="state"/>
        <variable value="v"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="state"/>
        <variable value="state"/>
      </target>
      <target>
        <context value="state"/>
        <contextType value="variable"/>
        <element value="data"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="v"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="district"/>
      <source>
        <context value="src"/>
        <element value="district"/>
        <variable value="v"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="county"/>
        <variable value="county"/>
      </target>
      <target>
        <context value="county"/>
        <contextType value="variable"/>
        <element value="data"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="v"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="country"/>
      <source>
        <context value="src"/>
        <element value="country"/>
        <variable value="v"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="country"/>
        <variable value="country"/>
      </target>
      <target>
        <context value="country"/>
        <contextType value="variable"/>
        <element value="data"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="v"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="addressUse"/>
      <source>
        <context value="src"/>
        <element value="use"/>
        <variable value="c"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="use"/>
        <transform value="translate"/>
        <parameter>
          <valueId value="c"/>
        </parameter>
        <parameter>
          <valueString value="#addressUse"/>
        </parameter>
        <parameter>
          <valueString value="code"/>
        </parameter>
      </target>
    </rule>
  </group>
  <group>
    <name value="ContactPointTEL"/>
    <extends value="Any"/>
    <typeMode value="types"/>
    <input>
      <name value="src"/>
      <type value="ContactPoint"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="tgt"/>
      <type value="TEL"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="value"/>
      <source>
        <context value="src"/>
        <element value="value"/>
        <variable value="value"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="value"/>
        <transform value="evaluate"/>
        <parameter>
          <valueString
                       value="iif(%src.system = &#39;phone&#39;, &#39;tel:&#39;, &#39;&#39;) + iif(%src.system = &#39;fax&#39;, &#39;fax:&#39;, &#39;&#39;) + iif(%src.system = &#39;email&#39;, &#39;mailto:&#39;, &#39;&#39;) + iif(%src.system = &#39;url&#39;, &#39;http:&#39;, &#39;&#39;) + value"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="use"/>
      <source>
        <context value="src"/>
        <element value="use"/>
        <variable value="use"/>
        <condition value="$this = &#39;home&#39;"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="use"/>
        <transform value="copy"/>
        <parameter>
          <valueString value="HP"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="use"/>
      <source>
        <context value="src"/>
        <element value="use"/>
        <variable value="use"/>
        <condition value="$this = &#39;work&#39;"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="use"/>
        <transform value="copy"/>
        <parameter>
          <valueString value="WP"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="use"/>
      <source>
        <context value="src"/>
        <element value="use"/>
        <variable value="use"/>
        <condition value="$this = &#39;old&#39;"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="use"/>
        <transform value="copy"/>
        <parameter>
          <valueString value="BAD"/>
        </parameter>
      </target>
      <documentation value="not complete see below"/>
    </rule>
    <rule>
      <name value="use"/>
      <source>
        <context value="src"/>
        <element value="use"/>
        <variable value="use"/>
        <condition value="$this = &#39;temp&#39;"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="use"/>
        <transform value="copy"/>
        <parameter>
          <valueString value="TMP"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="use"/>
      <source>
        <context value="src"/>
        <element value="use"/>
        <variable value="use"/>
        <condition value="$this = &#39;mobile&#39;"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="use"/>
        <transform value="copy"/>
        <parameter>
          <valueString value="MC"/>
        </parameter>
      </target>
    </rule>
  </group>
  <group>
    <name value="HumanNameEN"/>
    <extends value="Any"/>
    <typeMode value="types"/>
    <input>
      <name value="src"/>
      <type value="HumanName"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="tgt"/>
      <type value="EN"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="family"/>
      <source>
        <context value="src"/>
        <element value="family"/>
        <variable value="v"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="family"/>
        <variable value="family"/>
      </target>
      <target>
        <context value="family"/>
        <contextType value="variable"/>
        <element value="data"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="v"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="given"/>
      <source>
        <context value="src"/>
        <element value="given"/>
        <variable value="v"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="given"/>
        <variable value="given"/>
      </target>
      <target>
        <context value="given"/>
        <contextType value="variable"/>
        <element value="data"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="v"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="prefix"/>
      <source>
        <context value="src"/>
        <element value="prefix"/>
        <variable value="v"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="prefix"/>
        <variable value="prefix"/>
      </target>
      <target>
        <context value="prefix"/>
        <contextType value="variable"/>
        <element value="data"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="v"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="suffix"/>
      <source>
        <context value="src"/>
        <element value="suffix"/>
        <variable value="v"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="suffix"/>
        <variable value="suffix"/>
      </target>
      <target>
        <context value="suffix"/>
        <contextType value="variable"/>
        <element value="data"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="v"/>
        </parameter>
      </target>
    </rule>
  </group>
  <group>
    <name value="QuantityPQ"/>
    <extends value="Any"/>
    <typeMode value="types"/>
    <input>
      <name value="src"/>
      <type value="Quantity"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="tgt"/>
      <type value="PQ"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="unit"/>
      <source>
        <context value="src"/>
        <element value="unit"/>
        <variable value="unit"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="unit"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="unit"/>
        </parameter>
      </target>
      <documentation value="src.code as code -&gt; tgt.unit = code;"/>
    </rule>
    <rule>
      <name value="value"/>
      <source>
        <context value="src"/>
        <element value="value"/>
        <variable value="value"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="value"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="value"/>
        </parameter>
      </target>
    </rule>
  </group>
  <group>
    <name value="RatioRTOPQPQ"/>
    <extends value="Any"/>
    <typeMode value="types"/>
    <input>
      <name value="src"/>
      <type value="Ratio"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="tgt"/>
      <type value="RTO_PQ_PQ"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="numerator"/>
      <source>
        <context value="src"/>
        <element value="numerator"/>
        <variable value="numerator"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="numerator"/>
        <variable value="targetNumerator"/>
      </target>
      <dependent>
        <name value="QuantityPQ"/>
        <variable value="numerator"/>
        <variable value="targetNumerator"/>
      </dependent>
    </rule>
    <rule>
      <name value="denominator"/>
      <source>
        <context value="src"/>
        <element value="denominator"/>
        <variable value="denominator"/>
      </source>
      <target>
        <context value="tgt"/>
        <contextType value="variable"/>
        <element value="denominator"/>
        <variable value="targetDenominator"/>
      </target>
      <dependent>
        <name value="QuantityPQ"/>
        <variable value="denominator"/>
        <variable value="targetDenominator"/>
      </dependent>
    </rule>
  </group>
</StructureMap>