HL7 v2 table 0003 is the master enumeration of ADT (Admit-Discharge-Transfer) trigger events. Every ADT^A0n message in a hospital interface — the lifeblood of patient registration, bed management, and downstream census feeds — carries one of these codes in both MSH-9.2 Trigger Event and EVN-1 Event Type Code. The table is HL7-defined, OID 2.16.840.1.113883.18.4, published under the canonical URI http://terminology.hl7.org/CodeSystem/v2-0003.
Purpose
Table 0003 answers the question "what just happened to this patient?" in a way that downstream systems can route on without parsing the rest of the message. An EHR fires A01 when a patient is admitted, A02 when they move beds, A03 when they go home, A08 to update demographics. A lab system listening for census changes can subscribe to A01/A03/A08 and ignore the rest; a bed-management dashboard cares about A02/A14/A15 and nothing else.
Because the trigger event drives subscription and routing, table 0003 is one of the few HL7 vocabularies where exact-string matching matters more than semantic equivalence. An interface engine that re-emits an A04 (Register) as A01 (Admit) will break downstream billing logic, because A04 is an outpatient register that does not start an inpatient stay.
Where it's used
| Field | Segment | Notes |
|---|---|---|
| MSH-9.2 | MSH | Trigger Event component of the Message Type composite — e.g. ADT^A01^ADT_A01. |
| EVN-1 | EVN | Event Type Code — should match MSH-9.2; deprecated in v2.3 but still populated by most senders. |
The EVN-1 / MSH-9.2 redundancy is a v2.2 holdover. EVN-1 was officially deprecated in v2.3 in favor of MSH-9.2, but virtually every production sender still emits both, and many receivers still validate that they match.
Code list
The full table contains 80+ codes. The primary ADT triggers below cover the vast majority of production traffic; additional codes exist for application-level events (A60 allergy update, Z-events for site-specific extensions) and for the rarely-used "tracking" subset.
| Code | Display | Comment |
|---|---|---|
| A01 | Admit/visit notification | |
| A02 | Transfer a patient | |
| A03 | Discharge/end visit | |
| A04 | Register a patient | |
| A05 | Pre-admit a patient | |
| A06 | Change outpatient to inpatient | |
| A07 | Change inpatient to outpatient | |
| A08 | Update patient information | |
| A09 | Patient departing - tracking | |
| A10 | Patient arriving - tracking | |
| A11 | Cancel admit/visit notification | |
| A12 | Cancel transfer | |
| A13 | Cancel discharge/end visit | |
| A14 | Pending admit | |
| A15 | Pending transfer | |
| A16 | Pending discharge | |
| A17 | Swap patients | |
| A18 | Merge patient information (replaced by A24/A30/A34/A35 in v2.3.1+) | |
| A21 | Patient goes on a "leave of absence" | |
| A22 | Patient returns from a "leave of absence" | |
| A23 | Delete a patient record | |
| A24 | Link patient information | |
| A25 | Cancel pending discharge | |
| A26 | Cancel pending transfer | |
| A27 | Cancel pending admit | |
| A28 | Add person information | |
| A29 | Delete person information | |
| A30 | Merge person information | |
| A31 | Update person information | |
| A32 | Cancel patient arriving - tracking | |
| A33 | Cancel patient departing - tracking | |
| A34 | Merge patient information - patient ID only | |
| A35 | Merge patient information - account number only | |
| A36 | Merge patient information - patient ID and account number | |
| A37 | Unlink patient information | |
| A38 | Cancel pre-admit | |
| A39 | Merge person - external ID | |
| A40 | Merge patient - internal ID | |
| A41 | Merge account - patient account number | |
| A42 | Merge visit - visit number | |
| A43 | Move patient information - internal ID | |
| A44 | Move account information - patient account number | |
| A45 | Move visit information - visit number | |
| A46 | Change external ID | |
| A47 | Change internal ID | |
| A48 | Change alternate patient ID | |
| A49 | Change patient account number | |
| A50 | Change visit number | |
| A51 | Change alternate visit ID | |
| A52 | Cancel leave of absence for a patient | |
| A53 | Cancel patient returns from leave of absence | |
| A54 | Change attending doctor | |
| A55 | Cancel change attending doctor | |
| A60 | Update allergy information | |
| A61 | Change consulting doctor | |
| A62 | Cancel change consulting doctor |
Note: additional event codes (A63+, Z-events) exist for site-specific extensions and newer functions; consult the v2.8.1 base standard chapter 3 for the complete list.
Code system OID and canonical URI
- OID:
2.16.840.1.113883.18.4 - Canonical URI:
http://terminology.hl7.org/CodeSystem/v2-0003 - FHIR ValueSet:
http://terminology.hl7.org/ValueSet/v2-0003
HL7-defined vs user-defined
Table 0003 is HL7-defined — extension is not permitted in conformant interfaces. Sites that need a custom trigger event must use Z-events (Z01, Z02 …) carried in a separate, site-negotiated namespace; they are not valid 0003 codes.
Version differences
- v2.2: Original A01–A20 set defined.
- v2.3: EVN-1 deprecated in favor of MSH-9.2. A18 marked for replacement.
- v2.3.1: A18 (Merge) split into A34/A35/A36 for precise merge semantics; A24 (Link) added.
- v2.5: A39–A45 added for external/internal ID merges and moves.
- v2.6: A46–A55 added for ID change events and attending doctor changes.
- v2.7: A60–A62 added for allergy updates and consulting doctor changes.
- v2.8.1: No new codes; existing definitions stable.
Common mistakes
- Treating A04 as A01. A04 (Register) creates a person/account but does not open an inpatient stay. Downstream billing systems will reject an A04 routed as an admit.
- Sending A08 for every update. A08 is a general "patient information changed" event; using it to communicate transfers (which should be A02) breaks bed-management feeds.
- Mismatching MSH-9.2 and EVN-1. Many receivers validate equality; a mismatch causes ACK rejection.
- Using A18 in v2.5+. A18 was replaced by A34/A35/A36 in v2.3.1. Modern receivers may not recognise A18 at all.
- Emitting A11 without the original A01's correlation data. A11 (Cancel admit) requires enough identifiers to undo the A01 in the receiver — missing PID-18 (Account Number) is the most common cause of failed cancels.
Examples
Sample MSH and EVN
MSH|^~&|EPIC|HOSP|LAB|LAB|20260625103000||ADT^A01^ADT_A01|MSG00001|P|2.8.1
EVN|A01|20260625103000|||1234^DOCTOR^WELBY^^^^MD
FHIR Coding JSON
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0003",
"code": "A01",
"display": "Admit/visit notification"
}
Mapping failure
A sender emits MSH-9 = ADT^A04 (Register) for an ED arrival, but the downstream bed-management system only subscribes to A01. The patient never appears on the ED census board until an A06 (Change outpatient to inpatient) fires hours later. Root cause: registration vs admission semantics confused at the sender.
FHIR mapping
There is no direct FHIR ValueSet equivalent to table 0003 — FHIR models the state of an Encounter, not the event that changed it. The v2-to-FHIR IG ConceptMap maps each trigger to an Encounter.status transition:
| HL7v2 Event | Encounter.status |
|---|---|
| A01, A04, A06 | in-progress |
| A03 | finished |
| A05, A14 | planned |
| A11, A13, A27, A38 | cancelled / entered-in-error |
| A08 | (no status change — update only) |
Engine considerations
- Mirth / NextGen Connect: routing-by-trigger is implemented in the Source Filter using
msg['MSH']['MSH.9']['MSH.9.2'].toString(). Avoid filtering on EVN-1 alone — some senders omit EVN entirely. - Rhapsody / Lyniate: the message-type property exposed in the filter expression already concatenates MSH-9.1^9.2; match against
ADT^A01, notA01alone. - Cloverleaf: the trigger event is bound to the
$msgtypevariable; sites typically branch on it in a TPS proc. - HAPI v2:
Terser.get(msg, "/MSH-9-2")returns the trigger event;Terser.get(msg, "/EVN-1")returns the EVN-1 copy.
How Vorro handles
The Vorro engine treats MSH-9.2 as the authoritative trigger and EVN-1 as advisory. Routes filter on the canonical trigger code, and the policy library ships preset rules for the four highest-volume events (A01/A02/A03/A08). When EVN-1 disagrees with MSH-9.2, Vorro emits a non-fatal warning and prefers MSH-9.2 — matching the v2.3+ deprecation guidance. Z-events are passed through unchanged but excluded from the standard 0003 ValueSet validation.
Related pages
- HL7 MSH Segment — Message Header carrying MSH-9.
- HL7 EVN Segment — Event Type segment carrying EVN-1.
- HL7 Table 0004: Patient Class — companion ADT vocabulary on PV1-2.
Sources
- HL7 Terminology — CodeSystem v2-0003
- HL7 v2-to-FHIR IG — ConceptMap table-hl70003 to Encounter.status
- HL7 v2.8.1 base standard, chapter 3 (Patient Administration)
