1.2.0 - STU 1 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 1.2.0 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.


Immunization Activity substanceAdministration
Transform Steps
/@negationInd=”true”   Set .status="not-done" when @negationInd=”true”
/id .identifier CDA id ↔ FHIR identifier
/statusCode .status CDA statusCode → FHIR status
.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.
/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
(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”.
(only if observation/code is from ValueSet Problem Type)
.reasonCode CDA coding ↔ FHIR CodeableConcept
.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

1. XPath abbrievated for C-CDA Immunization Activity as:
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.

Illustrative example

An illustrative example with highlighting is shown above based on the consensus of mapping and guidance. Not all possible elements in CDA or FHIR may be represented. To access the content for the above example, click on the links below.

The consensus mapping example developed through multiple vendors are available below:

Prior work and Expanded Spreadsheets

As reviewed in the methodology, a more comprehensive review was performed via spreadsheets. These spreadsheets have been consolidated and further revised in the tables above but are provided for reference here