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 Vitals FHIR → CDA. For guidance on how to read the table below, see Reading the C-CDA ↔ FHIR Mapping Pages.
C-CDA vitals are typically grouped into a Vital Signs Organizer to group one or more vitals readings together. This has been mapped to an additional FHIR Observation for the panel of vital signs. This panel contains a .hasMember
field which references each observation mapped from the original C-CDA Vital Signs Organizer.
C-CDA¹ Vital SignsOrganizer |
FHIR Vital Signs Observation |
Transform Steps |
---|---|---|
/id | .identifier | CDA id ↔ FHIR identifier |
.category | Set to vital-signs from Vital Signs value set |
|
.code | Set to 85353-1 CDA coding ↔ FHIR CodeableConcept |
|
/statusCode | .status | final (C-CDA is fixed to completed ) |
/effectiveTime | .effectiveDateTime or .effectivePeriod |
If low and high are identical, use effectiveDateTime. If organizer/effectiveTime is missing, use the earliest and latest observation/effectiveTime as the source of the mapping. CDA ↔ FHIR Time/Dates |
.hasMember | Reference to each vital sign observation mapped from CDA |
C-CDA¹ Vital Sign Observation |
FHIR Vital Signs Observation |
Transform Steps Note: US Core defines separate profiles for individual vitals such as weight, heart rate, etc. |
---|---|---|
/id | .identifier | CDA id ↔ FHIR identifier |
.category | Set to vital-signs from Vital Signs value set |
|
/code | .code² | CDA coding ↔ FHIR CodeableConcept |
/effectiveTime | .effectiveDateTime or .effectivePeriod |
Prefer effectiveDateTime CDA ↔ FHIR Time/Dates |
value | .valueQuantity² | CDA ↔ FHIR Quantity |
/interpretationCode | .interpretation² | CDA coding ↔ FHIR CodeableConcept |
/methodCode | .method | CDA coding ↔ FHIR CodeableConcept |
/targetSiteCode | .bodySite | CDA coding ↔ FHIR CodeableConcept |
/author | .performer & Provenance |
CDA ↔ FHIR Provenance |
/referenceRange/observationRange/interpretationCode | Not Supported | FHIR expects reference ranges to be "normal" ranges. If C-CDA includes multiple reference ranges, only map the one with interpretationCode = "N" . |
/referenceRange/observationRange/value[xsi:type=IVL_PQ] | .referenceRange.low² & .referenceRange.high² |
CDA ↔ FHIR Quantity |
/referenceRange/observationRange/value[xsi:type=ST] or /referenceRange/observationRange/text |
.referenceRange.text² |
1. XPath abbreviated for C-CDA Vital Signs Observation as:
ClinicalDocument/component/structuredBody/component/section[code/@code="8716-3"]/entry/organizer/entryRelationship/component
2. Some C-CDA observations need special handling when converting to FHIR. When recording the following vitals, the value, interpretation, and referenceRange should be placed in a .component
element within a parent Observation.
Blood Pressure (C-CDA observations with codes 8480-6
- systolic & 8462-4
- diastolic)
Observation.code
to 85354-9
(Blood Pressure Panel) and create 2 components for the systolic and diastolic readings. Both components are required.Observation.valueQuantity
Pulse Oximetry (C-CDA observations with codes 3150-0
- Inhaled Oxygen Concentration, 3151-8
- Inhaled Oxygen Flow Rate, 59408-5
- Oxygen saturation in Arterial blood by Pulse oximetry, or 2708-6
- Oxygen saturation in Arterial blood)
Observation.code
should contain two coding values: 59408-5
& 2708-6
98%
)3150-0
- Inhaled Oxygen Concentration & 3151-8
- Inhaled Oxygen Flow Rate (only if values exist)CDA Vitals Example | FHIR Observation Resources |
---|---|
<organizer classCode="CLUSTER" moodCode="EVN">
<templateId root="2.16.840.1.113883.10.20.22.4.26"/>
<templateId root="2.16.840.1.113883.10.20.22.4.26"
extension="2015-08-01"/>
<id
extension="21688133041015158234"
root="2.16.840.1.113883.3.42.126.100001.19"/>
<code
code="46680005"
displayName="Vital Signs"
codeSystem="2.16.840.1.113883.6.96"
codeSystemName="SNOMED CT">
<translation code="74728-7"
codeSystem="2.16.840.1.113883.6.1"
codeSystemName="LOINC"/>
</code>
<statusCode code="completed"/>
<effectiveTime value="20140520193605-0600"/>
<!-- Each vital sign should be its own component. -->
<component>
<observation classCode="OBS" moodCode="EVN">
<templateId root="2.16.840.1.113883.10.20.22.4.27"/>
<templateId root="2.16.840.1.113883.10.20.22.4.27"
extension="2014-06-09"/>
<id
extension="216881330410151584"
root="2.16.840.1.113883.3.42.126.100001.19"/>
<code code="8867-4"
codeSystem="2.16.840.1.113883.6.1"
codeSystemName="LOINC"
displayName="HEART RATE"/>
<text>
<reference value="#Pulse_1"/>
</text>
<statusCode code="completed"/>
<effectiveTime value="20140520193605-0600"/>
<value xsi:type="PQ"
value="80"
unit="/min"/>
</observation>
</component>
</organizer>
|
Note: The following shows an Observation resource for the panel with an individual Observation resource embedded in its contained property. This was done for ease of creating a single, visual, highlighted example, but implementers may choose to create separate, external resources according to their own policy.
{
"resourceType": "Observation",
"identifier": [{
"value": "21688133041015158234",
"system": "urn:oid:2.16.840.1.113883.3.42.126.100001.19"
}],
"status": "final",
"category": [{
"text": "vital-signs",
"coding": [{
"code": "vital-signs",
"system": "http://terminology.hl7.org/CodeSystem/observation-category",
"display": "Vital Signs"
}]
}],
"code": {
"text": "Vital Signs Panel",
"coding": [{
"code": "85353-1",
"system": "http://loinc.org"
}]
},
"subject": {
"reference": "urn:uuid:a4986486-6599-4bb2-a7fb-e2deb8d50b5e"
},
"effectiveDateTime": "2014-05-20T19:36:05-06:00",
"hasMember": [{
"reference": "#heartRate"
}],
"contains": [{
"resourceType": "Observation",
"id": "heartRate",
"identifier": [{
"system": "urn:oid:2.16.840.1.113883.3.42.126.100001.19",
"value": "216881330410151584"
}],
"status": "final",
"category": [{
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/observation-category",
"code": "vital-signs",
"display": "Vital Signs"
}]
}],
"code": {
"coding": [{
"system": "http://loinc.org",
"code": "8867-4",
"display": "HEART RATE"
}]
},
"subject": {
"reference": "Patient/62f17e29b7532c0009e217b7"
},
"effectiveDateTime": "2014-05-20T19:36:05-06:00",
"valueQuantity": {
"value": 80,
"unit": "/min"
}
}]
}
|
C-CDA Blood Pressure (Codes & Values Only) | FHIR Blood Pressure |
---|---|
<organizer>
<!-- C-CDA Vital Signs Organizer -->
<templateId
root="2.16.840.1.113883.10.20.22.4.26"
extension="2015-08-01" />
<id root="..." />
<code
code="46680005"
codeSystem="2.16.840.1.113883.6.96"
codeSystemName="SNOMED CT"
displayName="Vital Signs" />
<statusCode code="completed" />
<!-- effectiveTime, author, etc stripped -->
<component>
<observation>
<!-- C-CDA Vital Signs Observation -->
<templateId
root="2.16.840.1.113883.10.20.22.4.27"
extension="2014-06-09" />
<id root="..." />
<code
code="8480-6"
codeSystem="2.16.840.1.113883.6.1"
codeSystemName="LOINC"
displayName="Systolic blood pressure" />
<statusCode code="completed" />
<value xsi:type="PQ"
value="115"
unit="mm[Hg]" />
</observation>
</component>
<component>
<observation>
<!-- C-CDA Vital Signs Observation -->
<templateId
root="2.16.840.1.113883.10.20.22.4.27"
extension="2014-06-09" />
<id root="..." />
<code
code="8462-4"
codeSystem="2.16.840.1.113883.6.1"
codeSystemName="LOINC"
displayName="Diastolic blood pressure" />
<value xsi:type="PQ" value="75" unit="mm[Hg]" />
</observation>
</component>
</organizer>
|
{
"resourceType" : "Observation",
"status" : "final",
"category" : [{
"coding" : [{
"system" : "http://terminology.hl7.org/CodeSystem/observation-category",
"code" : "vital-signs"
}]
}],
"code" : {
"coding" : [{
"system" : "http://loinc.org",
"code" : "85354-9",
"display" : "Blood pressure panel with all children optional"
}]
},
"component" : [{
"code" : {
"coding" : [{
"system" : "http://loinc.org",
"code" : "8480-6",
"display" : "Systolic blood pressure"
}],
"text" : "Systolic blood pressure"
},
"valueQuantity" : {
"value" : 115,
"unit" : "mmHg",
"system" : "http://unitsofmeasure.org",
"code" : "mm[Hg]"
}
},
{
"code" : {
"coding" : [{
"system" : "http://loinc.org",
"code" : "8462-4",
"display" : "Diastolic blood pressure"
}],
"text" : "Diastolic blood pressure"
},
"valueQuantity" : {
"value" : 75,
"unit" : "mmHg",
"system" : "http://unitsofmeasure.org",
"code" : "mm[Hg]"
}
}]
}
|
C-CDA Pulse Oximetry (Codes & Values Only) | FHIR Pulse Oximetry |
---|---|
<organizer>
<!-- C-CDA Vital Signs Organizer -->
<templateId
root="2.16.840.1.113883.10.20.22.4.26"
extension="2015-08-01" />
<id root="..." />
<code
code="46680005"
codeSystem="2.16.840.1.113883.6.96"
codeSystemName="SNOMED CT"
displayName="Vital Signs" />
<statusCode code="completed" />
<!-- effectiveTime, author, etc stripped -->
<component>
<observation>
<!-- C-CDA Vital Signs Observation -->
<templateId
root="2.16.840.1.113883.10.20.22.4.27"
extension="2014-06-09" />
<id root="..." />
<code
code="2708-6"
codeSystem="2.16.840.1.113883.6.1"
codeSystemName="LOINC"
displayName="Oxygen saturation" />
<value xsi:type="PQ"
value="98"
unit="%" />
</observation>
<observation>
<!-- C-CDA Vital Signs Observation -->
<templateId
root="2.16.840.1.113883.10.20.22.4.27"
extension="2014-06-09" />
<id root="..." />
<code
code="3151-8"
codeSystem="2.16.840.1.113883.6.1"
codeSystemName="LOINC"
displayName="Inhaled Oxygen Flow Rate" />
<value xsi:type="PQ"
value="6"
unit="L/min" />
</observation>
<observation>
<!-- C-CDA Vital Signs Observation -->
<templateId
root="2.16.840.1.113883.10.20.22.4.27"
extension="2014-06-09" />
<id root="..." />
<code
code="3150-0"
codeSystem="2.16.840.1.113883.6.1"
codeSystemName="LOINC"
displayName="Inhaled Oxygen Concentration" />
<value xsi:type="PQ"
value="35"
unit="%" />
</observation>
</component>
</organizer>
|
{
"resourceType": "Observation",
"status": "final",
"category": [{
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/observation-category",
"code": "vital-signs"
}]
}],
"code": {
"coding": [{
"system": "http://loinc.org",
"code": "2708-6",
"display": "Oxygen saturation in Arterial blood"
},
{
"system": "http://loinc.org",
"code": "59408-5",
"display": "Oxygen saturation in Arterial blood by Pulse oximetry"
}]
},
"valueQuantity": {
"value": 98,
"unit": "%",
"system": "http://unitsofmeasure.org",
"code": "%"
},
"component": [{
"code": {
"coding": [{
"system": "http://loinc.org",
"code": "3151-8",
"display": "Inhaled oxygen flow rate"
}]
},
"valueQuantity": {
"value": 6,
"unit": "liters/min",
"system": "http://unitsofmeasure.org",
"code": "L/min"
}
},
{
"code": {
"coding": [{
"system": "http://loinc.org",
"code": "3150-0",
"display": "Inhaled Oxygen Concentration"
}]
},
"valueQuantity": {
"value": 35,
"unit": "%",
"system": "http://unitsofmeasure.org",
"code": "%"
}
}]
}
|