Integration · HL7 v2

HL7 v2 to live patient updates, without reading a single result

EDFlow turns the ADT, order and result-status messages your integration engine already routes into a normalized, signed event feed. The mapping is published, the result status tables are explicit, and result values are never read.

At a glance

  • ADT triggers

    A04 and A01 arrival, A08 updates, A02 transfers, A03 departure, A11 and A13 reversals, A40 merges.

  • Orders and result status

    ORM, OMG, OML and OMI new orders and status changes; ORU status from OBR-25 and OBR-22.

  • Reference channel

    A reference channel, synthetic fixtures and a conformance script that replays your test traffic.

Triggers

Main triggers and the events they produce
MessageEvents
ADT^A04 / A01 (emergency visit)Arrival; triage if a CTAS observation is present; care team if PV1-7 or ROL is present
ADT^A08 updateLocation, care team, triage and patient updates, each only when its segment is present
ADT^A02 transferLocation change; departure (admitted) when the new location is an inpatient unit
ADT^A03 dischargeDisposition and departure
ADT^A11 / A13Cancelled visit or left without being seen; discharge reversal
ORM^O01, OMG^O19, OML^O21, OMI^O23Order placed; status changes; cancellations; consults and nothing-by-mouth diet orders
ORU^R01Order status from OBR-25 and OBR-22 only; OBX segments ignored
SIU^S12 to S15Scheduled time of a linked order

Result-status mapping

Result status (HL7 table 0123, OBR-25), which takes precedence over the order status
OBR-25MeaningStatus shown
OOrder receivedOrdered
SScheduledScheduled
ISpecimen received, incompleteIn the lab / scan in progress
RStored, not verifiedIn the lab / being read
A, PSome or preliminary resultsBeing finalized
FFinalBack
CCorrectedBack (corrected)
XCancelledCancelled

"Back" means a result exists. Patients never see what it says, and a result being back is never styled as good news: the care team explains results in person.

The reference engine channel

  1. Source: copy (tee) the existing ADT, order and result feeds rather than building new EHR interfaces.
  2. Filter: keep emergency visits (PV1-2 = E) and the department's locations; drop everything else at the engine.
  3. Transform: build normalized events, drop every field the contract doesn't name, compute stable event ids.
  4. Destination: an HTTP sender that signs each batch, with a retrying queue per feed so order is kept.
  5. Scheduled: a heartbeat every 60 seconds and the department roster every 15 minutes; a backfill of the current census at go-live.

The mappings follow the HL7 Version 2 to FHIR implementation guide concept maps where they apply, so HL7 v2 and FHIR sites get the same meaning.[1]

Technical documentation

Frequently asked questions

Do you accept MLLP directly?

No. Hospitals keep MLLP inside their own network. The engine receives the messages, maps and signs them, and sends events over HTTPS. The engine acknowledges the EHR as usual; our destination is an asynchronous queue.

Do you read OBX result values?

No. OBX segments are ignored and never parsed for values. Only the order's status (OBR-25 or ORC-5) and its time are used.

Talk to us

See it with your own emergency department in mind

We'll walk through the patient, family and staff views with synthetic data, then map them to your EHR, your workflows and what you want a pilot to prove.