Mapping Epic extract to US Core Observation: Field Reference
Epic Clarity ORDER_RESULTS row (CSV). Maps LOINC code, numeric / string value, units, and reference ranges into a US Core Lab Observation.
Field-by-field mapping
Every rule in the Interoperall template is shown below: the source field, the FHIR target path it populates, and the transform applied. This table is generated from the live template, so it matches exactly what runs when you fork it.
| Source | FHIR path | Transform |
|---|---|---|
| column RESULT_STATUS_C | Observation.status | Value-set lookup (F→final, P→preliminary, C→corrected, X→cancelled; fallback "final") |
| (literal "laboratory") | Observation.category[0].coding[0].code | Copied directly |
| (literal "http://terminology.hl7.org/CodeSystem/observation-category") | Observation.category[0].coding[0].system | Copied directly |
| column LOINC_CODE | Observation.code.coding[0].code | Copied directly |
| column COMPONENT_NAME | Observation.code.coding[0].display | Copied directly |
| (literal "http://loinc.org") | Observation.code.coding[0].system | Copied directly |
| column ORD_NUM_VALUE | Observation.valueQuantity.value | Copied directly |
| column REFERENCE_UNIT | Observation.valueQuantity.unit | Copied directly |
| column REFERENCE_UNIT | Observation.valueQuantity.code | Copied directly |
| (literal "http://unitsofmeasure.org") | Observation.valueQuantity.system | Copied directly |
| column REFERENCE_LOW | Observation.referenceRange[0].low.value | Copied directly |
| column REFERENCE_HIGH | Observation.referenceRange[0].high.value | Copied directly |
| column REFERENCE_UNIT | Observation.referenceRange[0].low.unit | Copied directly |
| column REFERENCE_UNIT | Observation.referenceRange[0].high.unit | Copied directly |
| column RESULT_TIME | Observation.effectiveDateTime | Copied directly |
Source extract (CSV row shown as JSON)
The sample input this template is designed to handle:
{
"ORDER_PROC_ID": "ORD1001",
"COMPONENT_ID": "GLU",
"COMPONENT_NAME": "Glucose",
"LOINC_CODE": "2345-7",
"ORD_VALUE": "110",
"ORD_NUM_VALUE": "110",
"REFERENCE_UNIT": "mg/dL",
"REFERENCE_LOW": "70",
"REFERENCE_HIGH": "110",
"RESULT_TIME": "2024-01-15T13:55:00",
"RESULT_STATUS_C": "F"
}Common gotchas
- Vendor extract column names are not standardized, so verify the exact header in your export (Clarity vs. Caboodle, MAGIC vs. Expanse, CCL report vs. HealtheIntent) before trusting a template.
- Numeric-coded columns (Epic `_C` category columns, MEDITECH numeric flags) need a lookup to the correct FHIR code, and the lookup table is site-configurable, so confirm the codes against your own build.
- Identifier `system` URIs/OIDs are organization-specific. The OID in a template is a placeholder; substitute the OID your facility actually publishes for that identifier namespace.
- Date columns vary between `YYYYMMDD`, ISO timestamps, and locale strings. Normalize to ISO-8601 with a date-format or split transform so the FHIR value is schema-valid.
Target profile
This mapping targets http://hl7.org/fhir/us/core/StructureDefinition/us-core-observation-lab. After mapping, validate the output against the profile — the template populates the Must Support elements, but required elements missing from your source data will still fail. Score it against US Core.
Frequently asked questions
How do I convert a Epic CSV extract to a FHIR Observation?
Map each CSV column to a FHIR element. Coded columns need a value-set lookup, identifier columns need a real system URI/OID, and date columns must be normalized to ISO-8601. The field table on this page shows the exact column-to-path rules; fork the template to adapt the column names to your own export.
Is this Observation mapping US Core compliant?
It targets http://hl7.org/fhir/us/core/StructureDefinition/us-core-observation-lab. The template populates the elements US Core marks as Must Support, but you should always validate the output against the profile. Required elements that are absent in your source data will still fail.
Can I customize this mapping?
Yes. Fork the template in the Mapping Builder to get an editable copy, then add, remove, or re-target rules, for example to handle repeating segments, extra identifiers, or a different value set.