C-CDA on FHIR, published by HL7 International / Cross-Group Projects. This guide is not an authorized publication; it is the continuous build for version 2.0.0-ballot built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/ccda-on-fhir/ and changes regularly. See the Directory of published versions
This page provides a mapping from CDA to FHIR. For the FHIR to CDA mapping, please refer to Immunizations FHIR → CDA. For guidance on how to read the table below, see Reading the C-CDA ↔ FHIR Mapping Pages
Mapping is from @moodCode="EVN"
(i.e. historical) immunizations, not INT
(future / planned) immunizations. For INT, use the MedicationRequest resource.
C-CDA¹ Immunization Activity substanceAdministration |
FHIR Immunization |
Transform Steps |
---|---|---|
/@negationInd="true" | Set .status="not-done" when @negationInd="true" |
|
/id | .identifier | CDA id ↔ FHIR identifier |
/statusCode | .status | CDA statusCode → FHIR status |
/effectiveTime/@value or /effectiveTime/low/@value |
.occurrenceDateTime | EVN immunizations typically only contain a value, but if effectiveTime contains low/high, the occurenceDateTime should come from low. CDA ↔ FHIR Time/Dates |
/repeatNumber/@value | .protocolApplied.doseNumberPositiveInt | Note: for @moodCode=EVN immunizations only |
/routeCode | .route | CDA coding ↔ FHIR CodeableConcept |
/approachSiteCode | .site | CDA coding ↔ FHIR CodeableConcept |
/doseQuantity | .doseQuantity | CDA ↔ FHIR Quantity |
/consumable/manufacturedProduct/manufacturedMaterial/code | .vaccineCode | CDA coding ↔ FHIR CodeableConcept |
/consumable/manufacturedMaterial/lotNumberText | .lotNumber | |
/consumable/manufacturedMaterial/manufacturerOrganization | .manufacturer | |
N/A | .primarySource | Since this is unavailable in CDA, when mapping to a FHIR profile that requires the element (such as USCore prior to Release 6), include a data-absent-reason extension such as 'unsupported'. |
/author | Provenance | CDA ↔ FHIR Provenance |
/author/time | .recorded | Earliest, if more than one. CDA ↔ FHIR Time/Dates |
/performer | .performer | Set performer.function="AP" |
Immunization Refusal Reason /entryRelationship[@typeCode="RSON"]²/observation/code (only if code is from ValueSet No Immunization Reason) |
.statusReason | CDA refusal → FHIR statusReason Indicates the reason the immunization event was not performed. This is generally only used for the status of "not-done". |
Indication /entryRelationship[@typeCode="RSON"]²/observation/value (only if observation/code is from ValueSet Problem Type) |
.reasonCode | CDA coding ↔ FHIR CodeableConcept |
Reaction /entryRelationship[@typeCode="MFST"]/observation/value |
.reaction | It is recommended that reaction observation value be mapped to reaction detail (Observation) valueCodeable concept. Comments are welcome on how this may be best implemented. |
Comment Activity /entryRelationship/act[code/@code="48767-8"]/text |
Annotation .note |
See Comment → Annotation |
1. XPath abbrievated for C-CDA Immunization Activity as:
ClinicalDocument/component/structuredBody/component/section[code/@code="11369-6"]/entry/substanceAdministration
2. Both indication and refusal reason are observations related by @typeCode="RSON". Typically templateIds should not be used to identify content, but the Indication template does not require a specific code. If the observation/code comes from ValueSet No Immunization Reason, then it is clearly a refusal reason. If it comes from ValueSet Problem Type, then it is an indication. But if the code comes from neither value set, the observation is possibly an indication, but the only way to know is to check the templateId.
CDA Immunization Example | FHIR Immunization Resource |
---|---|
<substanceAdministration classCode="SBADM" moodCode="EVN" negationInd="false">
<!-- ** Immunization activity ** -->
<templateId root="2.16.840.1.113883.10.20.22.4.52"/>
<templateId root="2.16.840.1.113883.10.20.22.4.52" extension="2015-08-01"/>
<id root="e6f1ba43-c0ed-4b9b-9f12-f435d8ad8f92"/>
<text>
<reference value="#immun1"/>
</text>
<!-- Indicates the status of the substanceAdministartion -->
<statusCode code="completed"/>
<effectiveTime value="20100815"/>
<repeatNumber value="1"/>
<routeCode
code="C28161"
codeSystem="2.16.840.1.113883.3.26.1.1"
codeSystemName="National Cancer Institute (NCI) Thesaurus"
displayName="Intramuscular Route of Administration" />
<approachSiteCode
code="700022004"
codeSystem="2.16.840.1.113883.6.96"
codeSystemName="SNOMED CT"
displayName="Muscle and/or tendon structure of upper limb" />
<doseQuantity value="60" unit="ug" />
<administrationUnitCode
code="C44278"
codeSystem="2.16.840.1.113883.3.26.1.1"
codeSystemName="National Cancer Institute (NCI) Thesaurus"
displayName="Unit"/>
<consumable>
<manufacturedProduct classCode="MANU">
<!-- ** Immunization medication information ** -->
<templateId root="2.16.840.1.113883.10.20.22.4.54"/>
<templateId root="2.16.840.1.113883.10.20.22.4.54" extension="2014-06-09"/>
<id root="5823d446-9066-11ee-b9d1-0242ac120002"/>
<manufacturedMaterial>
<code
code="88"
codeSystem="2.16.840.1.113883.12.292"
displayName="Influenza virus vaccine"
codeSystemName="CVX">
<originalText>
<reference value="#ImmunizationProduct_100"/>
</originalText>
<translation
code="49281-0422-50"
codeSystem="2.16.840.1.113883.6.69"
codeSystemName="NDC"
displayName="Influenza vaccine"/>
</code>
<lotNumberText>1</lotNumberText>
</manufacturedMaterial>
<manufacturerOrganization>
<name>Health LS - Immuno Inc.</name>
</manufacturerOrganization>
</manufacturedProduct>
</consumable>
<!-- Optional Performer -->
<!-- Creates resource: PractitionerRole/AmandaAtGoodHealthClinics -->
<!-- With functionCode: AP -->
<performer>
<assignedEntity>
<id root="2.16.840.1.113883.19.5.9999.456" extension="2981824"/>
<addr>
<streetAddressLine>1021 Health Drive</streetAddressLine>
<city>Ann Arbor</city>
<state>MI</state>
<postalCode>99099</postalCode>
</addr>
<telecom nullFlavor="UNK"/>
<assignedPerson>
<name>
<given>Amanda</given>
<family>Assigned</family>
</name>
</assignedPerson>
<representedOrganization>
<name>Good Health Clinic</name>
</representedOrganization>
</assignedEntity>
</performer>
<!-- Optional Author -->
<author>
<templateId root="2.16.840.1.113883.10.20.22.4.119"/>
<time value="20100815"/>
<assignedAuthor>
<id extension="99999999" root="2.16.840.1.113883.4.6"/>
<telecom use="WP" value="tel:555-555-1002"/>
<assignedPerson>
<name>
<given>Henry</given>
<family>Seven</family>
</name>
</assignedPerson>
</assignedAuthor>
</author>
<entryRelationship typeCode="RSON">
<observation classCode="OBS" moodCode="EVN">
<!-- Indication (V2) -->
<templateId root="2.16.840.1.113883.10.20.22.4.19" extension="2014-06-09"/>
<templateId root="2.16.840.1.113883.10.20.22.4.19"/>
<code
codeSystem="2.16.840.1.113883.6.96"
codeSystemName="SNOMED CT"
code="404684003"
displayName="Clinical finding"/>
<statusCode code="completed"/>
<value xsi:type="CD"
code="195967001"
codeSystem="2.16.840.1.113883.6.96"
displayName="asthma" />
</observation>
</entryRelationship>
<!-- Reaction becomes Observation with id: Observation/WithCode247472004Wheal -->
<entryRelationship typeCode="MFST" inversionInd="true">
<observation classCode="OBS" moodCode="EVN">
<templateId root="2.16.840.1.113883.10.20.22.4.9" extension="2014-06-09" />
<templateId root="2.16.840.1.113883.10.20.22.4.9" />
<id root="37006474-947a-11ee-b9d1-0242ac120002"/>
<code code="ASSERTION" codeSystem="2.16.840.1.113883.5.4" />
<text>
<reference value="#_8a7ed342-967a-400e-88d5-2f8c2b7cdda0" />
</text>
<statusCode code="completed" />
<effectiveTime>
<low value="20080501"/>
<high value="20080501"/>
</effectiveTime>
<value xsi:type="CD"
code="247472004"
codeSystem="2.16.840.1.113883.6.96"
displayName="Wheal" />
</observation>
</entryRelationship>
</substanceAdministration>
|
{
"resourceType": "Immunization",
"id": "2b622767-4560-46ba-a1ac-58092fcdcdda",
"status": "completed",
"identifier": [
{
"system": "urn:ietf:rfc:3986",
"value": "urn:uuid:e6f1ba43-c0ed-4b9b-9f12-f435d8ad8f92"
}
],
"vaccineCode": {
"coding": [
{
"system": "http://hl7.org/fhir/sid/cvx",
"code": "88",
"display": "Influenza virus vaccine"
},
{
"system": "http://hl7.org/fhir/sid/ndc",
"code": "49281-0422-50",
"display": "Influenza vaccine"
}
],
"text": "Influenza virus vaccine"
},
"doseQuantity": {
"unit": "ug",
"value": 60,
"system": "http://unitofmeasure.org",
"code": "ug"
},
"lotNumber": "1",
"recorded": "2010-08-15",
"performer": [
{
"actor": {
"reference": "PractitionerRole/AmandaAtGoodHealthClinics"
},
"function": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0443",
"code": "AP",
"display": "Administering Provider"
}
]
}
}
],
"reasonCode": [
{
"coding": [
{
"system": "http://snomed.info/sct",
"code": "195967001",
"display": "asthma"
}
]
}
],
"_primarySource": {
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/data-absent-reason",
"valueCode": "unknown"
}
]
},
"manufacturer": {
"display": "Health LS - Immuno Inc."
},
"site": {
"coding": [
{
"system": "http://snomed.info/sct",
"code": "700022004",
"display": "Muscle and/or tendon structure of upper limb"
}
]
},
"route": {
"coding": [
{
"system": "http://ncithesaurus-stage.nci.nih.gov",
"code": "C28161",
"display": "Intramuscular Route of Administration"
}
]
},
"patient": {
"reference": "Patient/6581e92eb6ff5dadc088eae5"
},
"protocolApplied": [
{
"doseNumberPositiveInt": 1
}
],
"occurrenceDateTime": "2010-08-15",
"reaction": [
{
"detail": {
"reference": "Observation/WithCode247472004Wheal"
}
}
]
}
|
CDA Refused Immunization Example | FHIR Immunization Resource |
---|---|
<entry typeCode="COMP">
<!-- negationInd=true indicates substance was NOT given at this date-->
<substanceAdministration classCode="SBADM" moodCode="EVN" negationInd="true">
<!-- ** Immunization activity ** -->
<templateId root="2.16.840.1.113883.10.20.22.4.52"/>
<templateId root="2.16.840.1.113883.10.20.22.4.52" extension="2015-08-01"/>
<id root="8d5942f9-5413-4486-af89-dcc5603dbec7"/>
<text>
<reference value="#immun2"/>
</text>
<!-- Indicates the status of the substanceAdministartion -->
<statusCode code="completed"/>
<effectiveTime value="20151115"/>
<consumable>
<manufacturedProduct classCode="MANU">
<!-- ** Immunization medication information ** -->
<templateId root="2.16.840.1.113883.10.20.22.4.54"/>
<templateId root="2.16.840.1.113883.10.20.22.4.54" extension="2014-06-09"/>
<manufacturedMaterial>
<code
code="43"
codeSystem="2.16.840.1.113883.12.292"
displayName="hepatitis B vaccine, adult dosage"
codeSystemName="CVX">
<originalText>hepatitis B vaccine</originalText>
</code>
<lotNumberText>2</lotNumberText>
</manufacturedMaterial>
</manufacturedProduct>
</consumable>
<entryRelationship typeCode="RSON">
<observation classCode="OBS" moodCode="EVN">
<!-- Immunization Refusal Reason -->
<!-- Included the reason since it may be relevant
to a future clinician or quality measurement -->
<templateId root="2.16.840.1.113883.10.20.22.4.53"/>
<id root="c1296315-9a6d-45a2-aac0-ee225d375409"/>
<code
displayName="patient objection"
code="PATOBJ"
codeSystemName="HL7 ActNoImmunizationReason"
codeSystem="2.16.840.1.113883.5.8"/>
<statusCode code="completed"/>
</observation>
</entryRelationship>
</substanceAdministration>
</entry>
|
{
"id": "f122ceadccaa4a9accdc117634a89dda",
"resourceType": "Immunization",
"vaccineCode": {
"coding": [{
"code": "43",
"display": "hepatitis B vaccine, adult dosage",
"system": "http://hl7.org/fhir/sid/cvx"
}]
},
"identifier": [{
"system": "urn:ietf:rfc:3986",
"value": "urn:uuid:8d5942f9-5413-4486-af89-dcc5603dbec7"
}],
"lotNumber": "2",
"occurrenceDateTime": "2015-11-15",
"patient": {
"reference": "Patient/fff"
},
"_primarySource": {
"extension": [{
"url": "http://hl7.org/fhir/StructureDefinition/data-absent-reason",
"valueCode": "unknown"
}]
},
"status": "not-done",
"statusReason": {
"coding": [{
"code": "PATOBJ",
"display": "patient objection",
"system": "http://terminology.hl7.org/CodeSystem/v3-ActReason"
}]
}
}
|
The consensus mapping example developed through multiple vendors are available below: