Mapping Epic extract to US Core Patient: Field Reference
Epic Clarity PATIENT table extract (CSV). Maps PAT_ID, PAT_NAME parts, BIRTH_DATE, SEX_C into US Core Patient.
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 PAT_ID | Patient.identifier[0].value | Copied directly |
| (literal "urn:oid:1.2.840.114350.1.13.0.1.7.5.737384.0") | Patient.identifier[0].system | Copied directly — Epic Clarity PAT_ID system OID |
| column PAT_MRN_ID | Patient.identifier[1].value | Copied directly |
| (literal "usual") | Patient.identifier[1].use | Copied directly |
| (literal "MR") | Patient.identifier[1].type.coding[0].code | Copied directly |
| column PAT_LAST_NAME | Patient.name[0].family | Copied directly |
| column PAT_FIRST_NAME | Patient.name[0].given[0] | Copied directly |
| column PAT_MIDDLE_NAME | Patient.name[0].given[1] | Copied directly |
| column BIRTH_DATE | Patient.birthDate | Copied directly |
| column SEX_C | Patient.gender | Value-set lookup (M→male, F→female, O→other, U→unknown, …; fallback "unknown") |
| column ADD_LINE_1 | Patient.address[0].line[0] | Copied directly |
| column CITY | Patient.address[0].city | Copied directly |
| column STATE_C | Patient.address[0].state | Copied directly |
| column ZIP | Patient.address[0].postalCode | Copied directly |
| (literal "phone") | Patient.telecom[0].system | Copied directly |
| (literal "home") | Patient.telecom[0].use | Copied directly |
| column HOME_PHONE | Patient.telecom[0].value | Copied directly |
| (literal "email") | Patient.telecom[1].system | Copied directly |
| column EMAIL_ADDRESS | Patient.telecom[1].value | Copied directly |
Source extract (CSV row shown as JSON)
The sample input this template is designed to handle:
{
"PAT_ID": "Z9999001",
"PAT_MRN_ID": "MRN12345",
"PAT_FIRST_NAME": "JOHN",
"PAT_MIDDLE_NAME": "A",
"PAT_LAST_NAME": "DOE",
"BIRTH_DATE": "1980-01-01",
"SEX_C": "M",
"ADD_LINE_1": "123 MAIN ST",
"CITY": "CITYTOWN",
"STATE_C": "WA",
"ZIP": "98101",
"HOME_PHONE": "555-555-0100",
"EMAIL_ADDRESS": "john.doe@example.com"
}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-patient. 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 Patient?
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 Patient mapping US Core compliant?
It targets http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient. 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.