HL7 IHE PAM Message Parser and Explainer
Overview
This skill parses and explains HL7 v2.5 IHE PAM (Patient Administration Management) messages - the standard healthcare interoperability format for patient administration events. The parser identifies message types, extracts segments and fields, validates structure according to IHE PAM 2.10 specifications, and provides human-readable explanations.
When to use this skill:
- Parse and explain any HL7 ADT message (raw HL7 text)
- Identify HL7 message type and event code (ADT^A01, ADT^A02, etc.)
- Extract and label all segments and fields (MSH, EVN, PID, PV1, PV2)
- Validate HL7 message structure and required fields
- Understand IHE PAM business rules and field mappings
- Debug HL7 message issues or data quality problems
- Document HL7 message examples with explanations
HL7 v2.5 Message Format
HL7 messages use specific delimiters:
Field delimiter: | (pipe)
Component delimiter: ^ (caret)
Repetition delimiter: ~ (tilde)
Escape character: \ (backslash)
Subcomponent delimiter: & (ampersand)
Basic Structure:
MSH|^~\&|SendingApp|SendingFacility|ReceivingApp|ReceivingFacility|Timestamp||MessageType|MessageControlId|ProcessingId|VersionId
EVN|EventTypeCode|RecordedDateTime|...
PID|SetId||PatientId||PatientName||BirthDate|Sex|...
PV1|SetId|PatientClass|AssignedPatientLocation|...
Segment Terminators: Each segment ends with carriage return (\r) or newline (\n)
IHE PAM Message Types
ADT Messages (Admit, Discharge, Transfer)
ADT^A01 - Admit/Visit Notification
Purpose: Patient admission to inpatient care or registration
Required Segments:
- MSH (Message Header)
- EVN (Event Type)
- PID (Patient Identification)
- PV1 (Patient Visit)
Example:
MSH|^~\&|HEXAFLUX|CHU_PARIS|TARGET|DEST|20260122140000||ADT^A01^ADT_A01|MSG001|P|2.5
EVN|A01|20260122140000|||USER001
PID|1||PAT12345^^^CHU_PARIS^PI||DUPONT^JEAN^^M.||19750315|M|||15 RUE DE LA PAIX^^PARIS^^75001^FRA||(33)612345678
PV1|1|I|CHU_PARIS^CARDIO^LIT_001^CHU_PARIS||||PR_MARTIN^MARTIN^SOPHIE|||CARDIO||||||||||VIS20260122001|||||||||||||||||||||||||20260122140000
Explanation:
- Event: A01 (Patient Admission)
- Patient: DUPONT JEAN (M.), born 15/03/1975
- Patient ID: PAT12345
- Visit: VIS20260122001
- Location: CHU_PARIS, Cardiology, Bed LIT_001
- Admission: 22/01/2026 14:00:00
- Patient Class: I (Inpatient)
- Attending: Dr. MARTIN SOPHIE
ADT^A02 - Transfer a Patient
Purpose: Patient transfer between units, rooms, or services
Required Segments:
- MSH, EVN, PID, PV1
- PV2 (optional but recommended for prior location)
Example:
MSH|^~\&|HEXAFLUX|CHU_PARIS|TARGET|DEST|20260123090000||ADT^A02^ADT_A02|MSG002|P|2.5
EVN|A02|20260123090000|||USER002
PID|1||PAT12345^^^CHU_PARIS^PI||DUPONT^JEAN^^M.||19750315|M
PV1|1|I|CHU_PARIS^NEURO^LIT_102^CHU_PARIS||||PR_DURAND^DURAND^PAUL|||NEURO||||||||||VIS20260122001
PV2||||||||||||||||||||||CHU_PARIS^CARDIO^LIT_001^CHU_PARIS
Explanation:
- Event: A02 (Patient Transfer)
- Patient: PAT12345 (DUPONT JEAN)
- From: Cardiology, Bed LIT_001 (PV2-1: prior location)
- To: Neurology, Bed LIT_102 (PV1-3: assigned location)
- Transfer Time: 23/01/2026 09:00:00
ADT^A03 - Discharge a Patient
Purpose: Patient discharge from hospital
Required Segments:
- MSH, EVN, PID, PV1
Example:
MSH|^~\&|HEXAFLUX|CHU_PARIS|TARGET|DEST|20260125180000||ADT^A03^ADT_A03|MSG003|P|2.5
EVN|A03|20260125180000|||USER003
PID|1||PAT12345^^^CHU_PARIS^PI||DUPONT^JEAN^^M.||19750315|M
PV1|1|I|CHU_PARIS^CARDIO^LIT_001^CHU_PARIS||||PR_MARTIN^MARTIN^SOPHIE|||CARDIO||||||||||VIS20260122001|||||||||||||||||||||||||||20260125180000|||||HOME
Explanation:
- Event: A03 (Patient Discharge)
- Patient: PAT12345 (DUPONT JEAN)
- Discharge Time: 25/01/2026 18:00:00 (PV1-45)
- Discharge Disposition: HOME (PV1-36)
- Visit: VIS20260122001
ADT^A04 - Register a Patient
Purpose: Pre-admission or outpatient registration
Required Segments:
- MSH, EVN, PID, PV1
ADT^A05 - Pre-admit a Patient
Purpose: Pre-admission notification
ADT^A06 - Change Outpatient to Inpatient
Purpose: Convert outpatient visit to inpatient admission
ADT^A07 - Change Inpatient to Outpatient
Purpose: Convert inpatient admission to outpatient visit
ADT^A08 - Update Patient Information
Purpose: Update patient demographics
Example:
MSH|^~\&|HEXAFLUX|CHU_PARIS|TARGET|DEST|20260122150000||ADT^A08^ADT_A08|MSG004|P|2.5
EVN|A08|20260122150000|||USER001
PID|1||PAT12345^^^CHU_PARIS^PI||DUPONT^JEAN^^M.||19750315|M|||15 RUE DE LA PAIX^^PARIS^^75001^FRA||(33)612345678|||||||1234567890123||FRA
PV1|1|O||||||||||||||||||||VIS20260122001
Explanation:
- Event: A08 (Update Patient Information)
- Patient: PAT12345 demographics updated
- Updated Fields: Address, phone, national identifier (NIR)
ADT^A11 - Cancel Admit
Purpose: Cancel a previous admission
ADT^A12 - Cancel Transfer
Purpose: Cancel a previous transfer
ADT^A13 - Cancel Discharge
Purpose: Cancel a previous discharge
Segment Definitions
MSH - Message Header (Required)
Purpose: Message metadata and routing information
Field Structure:
MSH|^~\&|SendingApp|SendingFacility|ReceivingApp|ReceivingFacility|Timestamp||MessageType^EventCode^MessageStructure|MessageControlId|ProcessingId|VersionId
Key Fields:
- MSH-3: Sending Application
- MSH-4: Sending Facility
- MSH-5: Receiving Application
- MSH-6: Receiving Facility
- MSH-7: Date/Time of Message (YYYYMMDDHHmmss)
- MSH-9: Message Type (ADT^A01^ADT_A01)
- MSH-10: Message Control ID (unique identifier)
- MSH-11: Processing ID (P=Production, T=Training, D=Debugging)
- MSH-12: Version ID (2.5)
EVN - Event Type (Required)
Purpose: Event-specific information
Field Structure:
EVN|EventTypeCode|RecordedDateTime|EventDateTime|EventReasonCode|OperatorId
Key Fields:
- EVN-1: Event Type Code (A01, A02, A03, etc.)
- EVN-2: Recorded Date/Time (when event was recorded)
- EVN-3: Event Occurred Date/Time (when event actually occurred)
- EVN-5: Operator ID (user who triggered the event)
PID - Patient Identification (Required)
Purpose: Patient demographic information
Field Structure (30+ fields):
PID|SetId||PatientId^^^AssigningAuthority^IdType~AltId||LastName^FirstName^MiddleName^Suffix^Prefix||BirthDate|Sex|PatientAlias|Race|PatientAddress||PhoneHome|PhoneBusiness|PrimaryLanguage|MaritalStatus|Religion|PatientAccountNumber|SSN|DriverLicense|MotherIdentifier|EthnicGroup|BirthPlace|MultipleBirth|BirthOrder|Citizenship|VeteranStatus|Nationality|DeathDateTime|DeathIndicator
Key Fields:
- PID-1: Set ID
- PID-3: Patient Identifier List (PatientId^^^Facility^PI)
- PID-5: Patient Name (LastName^FirstName^MiddleName^Suffix^Prefix)
- PID-7: Date of Birth (YYYYMMDD)
- PID-8: Sex (M/F/O/U)
- PID-11: Patient Address (Street^^City^^PostalCode^Country)
- PID-13: Phone Number - Home
- PID-14: Phone Number - Business
- PID-22: Ethnic Group
- PID-29: Death Date and Time
- PID-30: Death Indicator (Y/N)
PV1 - Patient Visit (Required)
Purpose: Visit/encounter information
Field Structure (52 fields):
PV1|SetId|PatientClass|AssignedLocation^Room^Bed^Facility|AdmissionType|PreadmitNumber|PriorLocation|AttendingDoctor^LastName^FirstName|ReferringDoctor|ConsultingDoctor|HospitalService|TemporaryLocation|PreadmitTestIndicator|ReadmissionIndicator|AdmitSource|AmbulatoryStatus|VIPIndicator|AdmittingDoctor|PatientType|VisitNumber|FinancialClass
Key Fields:
- PV1-1: Set ID
- PV1-2: Patient Class (I=Inpatient, O=Outpatient, E=Emergency, R=Recurring)
- PV1-3: Assigned Patient Location (Facility^Service^Room^Bed)
- PV1-4: Admission Type (E=Emergency, R=Routine, etc.)
- PV1-6: Prior Patient Location (for transfers)
- PV1-7: Attending Doctor (DoctorId^LastName^FirstName)
- PV1-10: Hospital Service
- PV1-19: Visit Number (unique visit identifier)
- PV1-36: Discharge Disposition (HOME, SNF, EXP, etc.)
- PV1-44: Admit Date/Time
- PV1-45: Discharge Date/Time
PV2 - Patient Visit - Additional Info (Optional)
Purpose: Extended visit information
Key Fields:
- PV2-1: Prior Pending Location (for transfers)
- PV2-3: Admit Reason
- PV2-8: Expected Discharge Date
- PV2-9: Expected Discharge Disposition
- PV2-47: Expected LOA Return Date/Time
IHE PAM Mandatory Fields
Required for All ADT Messages
- MSH-3: Sending Application
- MSH-4: Sending Facility
- MSH-7: Date/Time of Message
- MSH-9: Message Type
- MSH-10: Message Control ID
- MSH-12: Version ID (2.5)
- EVN-1: Event Type Code
- EVN-2: Recorded Date/Time
- PID-3: Patient Identifier
- PID-5: Patient Name
- PID-7: Date of Birth
- PID-8: Sex
Required for Admission/Transfer Messages (A01, A02)
- PV1-2: Patient Class
- PV1-3: Assigned Patient Location
- PV1-19: Visit Number
- PV1-44: Admit Date/Time
Required for Discharge Messages (A03)
- PV1-36: Discharge Disposition
- PV1-45: Discharge Date/Time
Parsing Logic
When asked to parse an HL7 IHE PAM message:
-
Split by segment terminator:
segments = message.split('\r')orsplit('\n') -
Parse MSH segment (always first):
- Extract delimiters from MSH-2:
^~\& - Field delimiter:
| - Component delimiter:
^ - Repetition delimiter:
~ - Escape character:
\ - Subcomponent delimiter:
&
- Extract delimiters from MSH-2:
-
Identify message type: Check MSH-9
- ADT^A01 = Admission
- ADT^A02 = Transfer
- ADT^A03 = Discharge
- etc.
-
Parse each segment:
- Split by field delimiter
| - Parse components with
^ - Parse repetitions with
~ - Parse subcomponents with
&
- Split by field delimiter
-
Extract key fields:
- Patient ID (PID-3)
- Patient name (PID-5)
- Birth date (PID-7)
- Visit number (PV1-19)
- Location (PV1-3)
- Dates (PV1-44, PV1-45)
-
Validate structure:
- Check required segments present
- Check required fields populated
- Validate date formats (YYYYMMDD, YYYYMMDDHHmmss)
- Validate code values (patient class, sex, etc.)
-
Generate explanation:
- Identify message purpose
- Explain event type
- List key patient information
- Describe visit/encounter details
- Provide clinical context
Example Output Format
When parsing a message, provide:
### HL7 IHE PAM Message Analysis
**Raw Message**:
[original HL7 message with visible delimiters]
**Message Identification**:
- Message Type: ADT^A01
- Event Code: A01 (Admit/Visit Notification)
- Message Control ID: [MSH-10]
- Timestamp: [formatted MSH-7]
- Version: 2.5
**MSH - Message Header**:
- Sending Application: [MSH-3]
- Sending Facility: [MSH-4]
- Receiving Application: [MSH-5]
- Receiving Facility: [MSH-6]
- Processing ID: [MSH-11] (Production/Test)
**EVN - Event Type**:
- Event Code: [EVN-1]
- Recorded DateTime: [formatted EVN-2]
- Event Occurred: [formatted EVN-3]
- Operator: [EVN-5]
**PID - Patient Identification**:
- Patient ID: [PID-3]
- Patient Name: [formatted PID-5]
- Date of Birth: [formatted PID-7]
- Sex: [PID-8]
- Address: [formatted PID-11]
- Phone: [PID-13]
- [other relevant fields]
**PV1 - Patient Visit**:
- Patient Class: [PV1-2] ([description])
- Assigned Location: [formatted PV1-3]
- Attending Doctor: [formatted PV1-7]
- Hospital Service: [PV1-10]
- Visit Number: [PV1-19]
- Admit DateTime: [formatted PV1-44]
- [other relevant fields based on message type]
**PV2 - Additional Visit Info** (if present):
- Prior Location: [PV2-1]
- [other relevant fields]
**Business Context**:
[Explain what this message represents, the workflow event, and clinical significance]
**IHE PAM Compliance**:
- Required segments: [✓ or ✗ for MSH, EVN, PID, PV1]
- Required fields: [list of mandatory field validation results]
- Field formats: [✓ or ✗ for dates, codes, etc.]
Common ADT Event Codes
| Code | Event Name | Purpose | |------|------------|---------| | A01 | Admit/Visit Notification | Patient admission to inpatient care | | A02 | Transfer a Patient | Transfer between units/rooms | | A03 | Discharge a Patient | Patient discharge from hospital | | A04 | Register a Patient | Pre-admission or outpatient registration | | A05 | Pre-admit a Patient | Notification of planned admission | | A06 | Change Outpatient to Inpatient | Status change | | A07 | Change Inpatient to Outpatient | Status change | | A08 | Update Patient Information | Demographics update | | A09 | Patient Departing - Tracking | Patient left facility temporarily | | A10 | Patient Arriving - Tracking | Patient returned to facility | | A11 | Cancel Admit | Cancel previous admission | | A12 | Cancel Transfer | Cancel previous transfer | | A13 | Cancel Discharge | Cancel previous discharge | | A21 | Patient Goes on Leave of Absence | Temporary leave | | A22 | Patient Returns from Leave of Absence | Return from leave | | A28 | Add Person Information | Add new person to database | | A31 | Update Person Information | Update person demographics |
Patient Class Codes
| Code | Description | |------|-------------| | I | Inpatient | | O | Outpatient | | E | Emergency | | P | Preadmit | | R | Recurring patient | | B | Obstetrics | | C | Commercial Account | | N | Not Applicable | | U | Unknown |
Discharge Disposition Codes
| Code | Description | |------|-------------| | HOME | Home or self care | | SNF | Skilled nursing facility | | RH | Rehabilitation facility | | EXP | Expired (deceased) | | HOS | Hospice | | AADVICE | Left against medical advice | | OTH | Other |
Validation Rules
Message Structure
- First segment MUST be MSH
- MSH-1 MUST be
| - MSH-2 MUST be
^~\&(encoding characters) - Segments MUST be separated by CR or LF
- Fields MUST be separated by
|
Required Segments by Message Type
- A01, A04, A05: MSH, EVN, PID, PV1
- A02: MSH, EVN, PID, PV1 (PV2 recommended for prior location)
- A03: MSH, EVN, PID, PV1
- A08: MSH, EVN, PID (PV1 optional)
- A11, A12, A13: MSH, EVN, PID
Date/Time Formats
- Date: YYYYMMDD
- DateTime: YYYYMMDDHHmmss or YYYYMMDDHHmmss.SSSS
- Time: HHmmss
Patient Identifier Format
- PID-3: PatientId^^^AssigningAuthority^IdentifierType
- Example: PAT12345^^^CHU_PARIS^PI
Name Format
- PID-5: LastName^FirstName^MiddleName^Suffix^Prefix^Degree
- Example: DUPONT^JEAN^^M.
Location Format
- PV1-3: PointOfCare^Room^Bed^Facility^LocationStatus^PersonLocationType^Building
- Example: CHU_PARIS^CARDIO^LIT_001^CHU_PARIS
Reference Documentation
IHE PAM Specification:
- French: https://github.com/Interop-Sante/ihe.iti.pam.fr
- International: https://profiles.ihe.net/ITI/TF/Volume1/ch-14.html
HL7 v2.5 Standard:
- Official: http://www.hl7.eu/HL7v2x/v25/std25/ch02.html
- Segments: http://www.hl7.eu/HL7v2x/v25/std25/ch03.html
- Data Types: http://www.hl7.eu/HL7v2x/v25/std25/ch02a.html
Related Tools:
- simple-hl7 (Node.js): https://github.com/Bugs5382/node-hl7-client
- HAPI (Java): https://hapifhir.github.io/hapi-hl7v2/
Quick Reference
Delimiters
| Field delimiter
^ Component delimiter
~ Repetition delimiter
\ Escape character
& Subcomponent delimiter
Common Fields
MSH-9 : Message Type (ADT^A01^ADT_A01)
MSH-10 : Message Control ID
EVN-1 : Event Type Code (A01, A02, etc.)
EVN-2 : Recorded DateTime
PID-3 : Patient ID
PID-5 : Patient Name
PID-7 : Birth Date
PID-8 : Sex
PV1-2 : Patient Class (I/O/E)
PV1-3 : Assigned Location
PV1-19 : Visit Number
PV1-44 : Admit DateTime
PV1-45 : Discharge DateTime