EncounterHistory — Historical states of an Encounter
A new resource introduced in FHIR R5. Captures every significant transition of a stay (ward change, unit transfer, administrative class change) without mutating the parent Encounter resource.
Purpose of the resource
Before R5, a status change of an Encounter — admission, ward transfer, temporary trip to a scanner, final discharge — was either represented by updating the Encounter (history loss) or by creating several distinct Encounters (semantic-link loss). EncounterHistory settles the debate: one stable parent Encounter + N EncounterHistory resources, one for each transition.
Typical cases: patient admitted in ED, transferred to ICU, then promoted to a pulmonary ward, finally discharged. Four EncounterHistory entries for a single pivot Encounter.
Key fields
| Field | Type | Cardinality | Role |
|---|---|---|---|
identifier | Identifier[] | 0..* | External identifiers. |
encounter | Reference(Encounter) | 0..1 | Pivot Encounter. |
status | code | 1..1 | Encounter status at that point (in-progress, finished…). |
class | CodeableConcept | 1..1 | Encounter class at that point (IMP, AMB, EMER, FLD…). |
type | CodeableConcept[] | 0..* | Specific transition type. |
serviceType | CodeableReference | 0..* | Caring service. |
subject | Reference(Patient | Group) | 0..1 | Affected patient. |
subjectStatus | CodeableConcept | 0..1 | Patient state (conscious, sedated…). |
actualPeriod | Period | 0..1 | Actual period of this history slice. |
plannedStartDate / plannedEndDate | dateTime | 0..1 | Planned period. |
length | Duration | 0..1 | Total duration. |
location | BackboneElement[] | 0..* | Locations occupied during the slice (bed, room, ward). |
JSON example
History slice for the transfer of a patient to ICU between 08:15 and 18:30:
{
"resourceType": "EncounterHistory",
"id": "transfer-to-icu",
"identifier": [{ "system": "http://hospital.example/encounters/history", "value": "EH-2026-0042" }],
"encounter": { "reference": "Encounter/example-stay" },
"status": "in-progress",
"class": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/v3-ActCode",
"code": "IMP",
"display": "Inpatient encounter"
}]
},
"type": [{
"coding": [{
"system": "http://snomed.info/sct",
"code": "11486-8",
"display": "Critical care transfer"
}]
}],
"subject": { "reference": "Patient/example" },
"actualPeriod": {
"start": "2026-05-16T08:15:00+02:00",
"end": "2026-05-16T18:30:00+02:00"
},
"location": [{
"location": { "reference": "Location/icu-room-101" },
"form": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/location-physical-type",
"code": "ro",
"display": "Room"
}]
},
"period": {
"start": "2026-05-16T08:15:00+02:00",
"end": "2026-05-16T18:30:00+02:00"
}
}]
} Typical use cases
- Ward transfers: ADT^A02 translated into EncounterHistory for each transfer.
- Temporary trip: scanner, MRI, outpatient consultation during a stay.
- Outpatient → inpatient conversion: ADT^A06.
- Bed management trace: bed occupancy by hour, bed optimisation.
- Identity vigilance audit: every class change is traced.
Common pitfalls
- EncounterHistory without
encounter: floating history is unusable. Always link to the pivot Encounter. - Updating the Encounter AND creating EncounterHistory: keep the Encounter immutable and create one EncounterHistory per transition; otherwise dual traceability.
- Overlapping periods:
actualPeriodof two consecutive EncounterHistory must be consistent (end of A = start of B). - Status (resource) / Encounter current status confusion:
EncounterHistory.statusrepresents the Encounter state at that history point, not the current state. - No location: if the slice represents a location change, omitting
locationmakes the slice useless.
Related resources
- Encounter — the pivot resource.
- Location — each occupied location.
- Patient — subject.
- EpisodeOfCare — multi-Encounter episode.
- Account — billing by slice.
See also: Encounter — the pivot resource and ADT^A02 — legacy v2 transfer.