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.
- This template looks up a numeric-coded column (Epic `_C` category columns, MEDITECH numeric flags). The lookup table is site-configurable, so confirm the codes against your own build.
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 the Observation mapping?
Yes. Forking gives you an editable copy of all 15 rules, reading the source row columns. From there you can re-target a path, swap the value set behind a coded field, or add rules for anything this template leaves unmapped.