Skip to content

HL7 ADT Message: Event Types & Structure

HL7 ADT (Admit, Discharge, Transfer) messages are the most widely used HL7 v2 message type, handling patient movement and registration events across healthcare facilities. Every hospital runs ADT interfaces: they are the backbone of patient census, bed management, and downstream system synchronization.

An HL7 ADT message is the message type that communicates patient administration events: admissions, discharges, transfers, registrations, and demographic updates. A single ADT message code carries dozens of distinct trigger events (A01 through A44), each identifying a specific event in the EVN and MSH-9 fields. Downstream systems use ADT feeds to stay synchronized with the patient census.

A typical ADT message contains these segments in order:

SegmentNameRequiredPurpose
MSHMessage HeaderYesSender, receiver, message type, version
EVNEvent TypeYesTrigger event code and timestamp
PIDPatient IdentificationYesMRN, name, DOB, demographics
PD1Additional DemographicsNoPrimary care provider, living will
PV1Patient VisitYesPatient class, location, attending MD
PV2Patient Visit (Additional)NoExpected length of stay, admit reason
NK1Next of KinNoEmergency contacts (repeating)
IN1InsuranceNoPrimary/secondary payer information
IN2Insurance (Additional)NoExtended insurance details
GT1GuarantorNoGuarantor demographics and employer
AL1AllergyNoPatient allergies (repeating)
DG1DiagnosisNoDiagnosis codes (repeating)

HL7 v2 defines over 40 ADT trigger events. These are the most commonly implemented:

One message shape, five different jobs. ADT events carry almost the same segments; MSH-9 is what tells the receiver whether it is opening an encounter, closing one, or repointing every reference to another identifier.
EventNameDescriptionTypical use
A01Admit/Visit NotificationPatient admitted as inpatient or begins an encounterCore
A02Transfer a PatientPatient moved from one location to anotherCore
A03Discharge/End VisitPatient discharged from facilityCore
A04Register a PatientOutpatient or emergency registrationCore
A05Pre-Admit a PatientFuture admission scheduledCore
A06Change Outpatient to InpatientPatient class changeSite-dependent
A07Change Inpatient to OutpatientPatient class changeSite-dependent
A11Cancel AdmitReversal of A01Core
A12Cancel TransferReversal of A02Core
A13Cancel DischargeReversal of A03Core
EventNameDescriptionTypical use
A08Update Patient InformationDemographics or visit data changedCore
A28Add Person InformationNew person record (not visit-specific)Site-dependent
A31Update Person InformationPerson-level update (not visit-specific)Core
A40Merge PatientTwo patient records merged into oneCore
A41Merge AccountTwo accounts mergedSite-dependent
A44Move AccountAccount reassigned to different patientSite-dependent
EventNameDescriptionTypical use
A09Patient Departing (Tracking)Temporary departure from assigned locationRare
A10Patient Arriving (Tracking)Arrival at temporary locationRare
A15Pending TransferTransfer requested but not yet executedSite-dependent
A16Pending DischargeDischarge requested but not yet executedSite-dependent
A21Patient Goes on LeaveLOA from inpatient bedSite-dependent
A22Patient Returns from LeaveLOA returnSite-dependent
A25Cancel Pending DischargeReversal of A16Rare
A26Cancel Pending TransferReversal of A15Rare

The most commonly implemented HL7 ADT message types are HL7 ADT A01 (admission), HL7 ADT A04 (registration), and HL7 ADT A08 (patient update). These three events account for the majority of ADT interface traffic in most hospitals.

A complete admission message with all common segments:

ADT^A01: Admit/Visit Notification
Header Patient Clinical Order/Result Financial
Open in parser

Browse the full HL7 sample messages catalog for more ADT examples, each one ready to copy as valid HL7 or download as a .hl7 file.

A08 (Update Patient) vs A31 (Update Person)

Section titled “A08 (Update Patient) vs A31 (Update Person)”

The distinction between A08 and A31 trips up many implementers:

  • A08 updates patient information in the context of a visit (PV1 segment present). Use when the patient has an active encounter.
  • A31 updates person-level information independent of any visit. Used by master patient index (MPI) systems for demographic corrections.

Some EHR vendors (notably Epic) use A08 for both scenarios, while others strictly separate them. Always confirm with the sending system which events they fire and under what conditions.

The same demographic change, scoped two ways. A08 carries PV1 and applies inside a visit; A31 has no PV1 and applies to the person. Which one a sender actually emits is worth confirming before you build against the distinction.

Merge events are among the most complex ADT operations. When two patient records are merged, the surviving MRN absorbs the deprecated MRN. The A40 message contains:

  • MRG segment: The deprecated (old) patient identifier being merged away
  • PID segment: The surviving (correct) patient identifier

Receiving systems must update all references from the old MRN to the new MRN: lab results, orders, documents, and any other linked data. Incorrect merge handling is a patient safety risk.

A merge is not an update. MRG carries the identifier being retired and PID the one that survives, and everything downstream that referenced the old one has to follow.

In a large hospital, ADT feeds can generate thousands of messages per hour during shift changes, morning registrations, and discharge waves. Key design considerations:

  • Message queuing: Buffer ADT messages during downstream system outages
  • Idempotency: Handle duplicate messages gracefully (same control ID)
  • Order preservation: ADT events must be processed in chronological order per patient
  • Filtering: Not every downstream system needs every ADT event: route selectively

Related glossary terms

Browse the full healthcare IT glossary →