Agent skill
hl7-pam-parser
Parse et explique les messages HL7 v2.5 IHE PAM (Patient Administration Management). Identifie le type de message, extrait les segments (MSH, EVN, PID, PV1, PV2), valide la structure et fournit des explications détaillées des messages ADT pour les workflows d'administration des patients.
Install this agent skill to your Project
npx add-skill https://github.com/Dedalus-ERP-PAS/hexagone-foundation-skills/tree/main/skills/hl7-pam-parser
SKILL.md
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
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
ubiquitous-language
Extrait un glossaire de langage ubiquitaire style DDD de la conversation en cours, signale les ambiguïtés et propose des termes canoniques. Sauvegarde dans UBIQUITOUS_LANGUAGE.md. À utiliser quand l'utilisateur veut définir des termes métier, construire un glossaire, durcir la terminologie, créer un langage ubiquitaire ou mentionne « domain model », « DDD », « glossaire » ou « langage ubiquitaire ».
hexagone-web-feature-extractor
Explore any Hexagone Web space via Playwright headless browser, capture screenshots, and produce a PO-oriented Markdown document.
gitlab-issue
Crée, récupère, met à jour et gère les issues GitLab avec collecte complète du contexte. À utiliser quand l'utilisateur veut créer une nouvelle issue, voir les détails d'une issue, mettre à jour des issues existantes, lister les issues du projet ou gérer les workflows d'issues dans GitLab.
tdd
Développement piloté par les tests avec boucle red-green-refactor. À utiliser quand l'utilisateur veut construire des fonctionnalités ou corriger des bugs en TDD, mentionne « red-green-refactor », veut des tests d'intégration ou demande du développement test-first.
testing-patterns
Patrons et stratégies de test complets pour les projets JavaScript/TypeScript. Couvre les tests unitaires, d'intégration et E2E, les stratégies de mocking, l'organisation des tests et les anti-patrons courants. À utiliser quand l'utilisateur veut écrire des tests, améliorer la couverture de tests, établir une stratégie de test ou corriger des tests instables.
uniface-procscript
Navigue et interroge la documentation de référence officielle Uniface 9.7 ProcScript (594 entrées couvrant les instructions, fonctions, triggers, types de données, directives préprocesseur et fonctions struct). À utiliser quand l'utilisateur pose des questions sur la syntaxe ProcScript, les triggers Uniface, les opérations base de données, la gestion des listes, la manipulation d'entités, les fonctions de chaînes, la gestion d'erreurs ou tout sujet de programmation Uniface 9.7.
Didn't find tool you were looking for?