C-CDA on FHIR
2.0.0-ballot - STU 2 Ballot United States of America flag

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

C-CDA to FHIR Immunizations

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 to FHIR

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.

Example: Standard Immunization

CDA Immunization ExampleFHIR 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" } } ] }

Example: Refused Immunization

CDA Refused Immunization ExampleFHIR 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: