关于 hl7-pam-parser
hl7-pam-parser 用于解析和解释 HL7 v2.5 IHE PAM 患者管理消息,可识别 ADT 事件、提取字段、检查必需结构,并生成易读说明,适用于医疗数据分析。
主要功能
- 01识别 ADT 消息类型和事件
- 02提取并标注消息段与字段
- 03验证必需结构和字段
- 04解释患者及就诊信息
- 05检查日期和代码值
适用场景
- 01解读原始 HL7 ADT 消息
- 02查找缺失字段或结构问题
- 03为分析整理消息示例说明
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dedalus-erp-pas/ foundation-skills --skill hl7-pam-parser安装后在 Claude Code 中输入/hl7-pam-parser确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
fixtures/adt/a01_admission.jsona02_transfer.jsona03_discharge.jsonreference/README.md详细介绍
HL7 IHE PAM 消息解析器与说明工具
概述
此技能可解析并说明 HL7 v2.5 IHE PAM(患者管理)消息——这是用于患者管理事件的标准医疗互操作格式。解析器可识别消息类型、提取段和字段、依据 IHE PAM 2.10 规范验证结构,并提供易于理解的说明。
使用此技能的场景:
- 解析并说明任意 HL7 ADT 消息(原始 HL7 文本)
- 识别 HL7 消息类型和事件代码(ADT^A01、ADT^A02 等)
- 提取并标注所有段和字段(MSH、EVN、PID、PV1、PV2)
- 验证 HL7 消息结构和必填字段
- 理解 IHE PAM 业务规则和字段映射
- 调试 HL7 消息问题或数据质量问题
- 编写带说明的 HL7 消息示例文档
HL7 v2.5 消息格式
HL7 消息使用特定分隔符:
Field delimiter: | (pipe)
Component delimiter: ^ (caret)
Repetition delimiter: ~ (tilde)
Escape character: \ (backslash)
Subcomponent delimiter: & (ampersand)
基本结构:
MSH|^~\&|SendingApp|SendingFacility|ReceivingApp|ReceivingFacility|Timestamp||MessageType|MessageControlId|ProcessingId|VersionId
EVN|EventTypeCode|RecordedDateTime|...
PID|SetId||PatientId||PatientName||BirthDate|Sex|...
PV1|SetId|PatientClass|AssignedPatientLocation|...
段终止符:每个段以回车符(\r)或换行符(\n)结束
IHE PAM 消息类型
ADT 消息(入院、出院、转院)
ADT^A01 - 入院/就诊通知
用途:患者入院接受住院护理或办理登记
必需段:
- MSH(消息头)
- EVN(事件类型)
- PID(患者身份信息)
- PV1(患者就诊信息)
示例:
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
说明:
- 事件:A01(患者入院)
- 患者:DUPONT JEAN(男),出生于 15/03/1975
- 患者 ID:PAT12345
- 就诊:VIS20260122001
- 位置:CHU_PARIS,心脏科,床位 LIT_001
- 入院时间:22/01/2026 14:00:00
- 患者类别:I(住院患者)
- 主治医生:MARTIN SOPHIE 医生
ADT^A02 - 转移患者
用途:患者在病区、病房或科室之间转移
必需段:
- MSH、EVN、PID、PV1
- PV2(可选,但建议提供以说明先前位置)
示例:
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
说明:
- 事件:A02(患者转移)
- 患者:PAT12345(DUPONT JEAN)
- 转出位置:心脏科,床位 LIT_001(PV2-1:先前位置)
- 转入位置:神经科,床位 LIT_102(PV1-3:分配的位置)
- 转移时间:23/01/2026 09:00:00
ADT^A03 - 患者出院
用途:患者出院
必需段:
- MSH、EVN、PID、PV1
示例:
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
说明:
- 事件:A03(患者出院)
- 患者:PAT12345(DUPONT JEAN)
- 出院时间:25/01/2026 18:00:00(PV1-45)
- 出院去向:HOME(PV1-36)
- 就诊:VIS20260122001
ADT^A04 - 患者登记
用途:预先入院或门诊登记
必需段:
- MSH、EVN、PID、PV1
ADT^A05 - 患者预先入院
用途:预先入院通知
ADT^A06 - 从门诊转为住院
用途:将门诊就诊转为住院入院
ADT^A07 - 从住院转为门诊
用途:将住院入院转为门诊就诊
ADT^A08 - 更新患者信息
用途:更新患者人口统计信息
示例:
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
说明:
- 事件:A08(更新患者信息)
- 患者:PAT12345 的人口统计信息已更新
- 更新字段:地址、电话、国家身份标识(NIR)
ADT^A11 - 取消入院
用途:取消先前的入院
ADT^A12 - 取消转移
用途:取消先前的转移
ADT^A13 - 取消出院
用途:取消先前的出院
段定义
MSH - 消息头(必需)
用途:消息元数据和路由信息
字段结构:
MSH|^~\&|SendingApp|SendingFacility|ReceivingApp|ReceivingFacility|Timestamp||MessageType^EventCode^MessageStructure|MessageControlId|ProcessingId|VersionId
关键字段:
- MSH-3:发送应用程序
- MSH-4:发送机构
- MSH-5:接收应用程序
- MSH-6:接收机构
- MSH-7:消息日期/时间(YYYYMMDDHHmmss)
- MSH-9:消息类型(ADT^A01^ADT_A01)
- MSH-10:消息控制 ID(唯一标识符)
- MSH-11:处理 ID(P=生产,T=培训,D=调试)
- MSH-12:版本 ID(2.5)
EVN - 事件类型(必填)
用途:事件专属信息
字段结构:
EVN|EventTypeCode|RecordedDateTime|EventDateTime|EventReasonCode|OperatorId
关键字段:
- EVN-1:事件类型代码(A01、A02、A03 等)
- EVN-2:记录日期/时间(事件记录时间)
- EVN-3:事件发生日期/时间(事件实际发生时间)
- EVN-5:操作员 ID(触发事件的用户)
PID - 患者身份识别(必填)
用途:患者人口统计信息
字段结构(30 多个字段):
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
关键字段:
- PID-1:集合 ID
- PID-3:患者标识符列表(PatientId^^^Facility^PI)
- PID-5:患者姓名(LastName^FirstName^MiddleName^Suffix^Prefix)
- PID-7:出生日期(YYYYMMDD)
- PID-8:性别(M/F/O/U)
- PID-11:患者地址(Street^^City^^PostalCode^Country)
- PID-13:家庭电话号码
- PID-14:工作电话号码
- PID-22:族裔
- PID-29:死亡日期和时间
- PID-30:死亡标志(Y/N)
PV1 - 患者就诊(必填)
用途:就诊/接诊信息
字段结构(52 个字段):
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
关键字段:
- PV1-1:集合 ID
- PV1-2:患者类别(I=住院,O=门诊,E=急诊,R=定期就诊)
- PV1-3:分配的患者位置(Facility^Service^Room^Bed)
- PV1-4:入院类型(E=急诊,R=常规等)
- PV1-6:患者先前所在位置(用于转院)
- PV1-7:主治医生(DoctorId^LastName^FirstName)
- PV1-10:医院服务
- PV1-19:就诊编号(唯一就诊标识符)
- PV1-36:出院去向(HOME、SNF、EXP 等)
- PV1-44:入院日期/时间
- PV1-45:出院日期/时间
PV2 - 患者就诊 - 补充信息(可选)
用途:扩展就诊信息
关键字段:
- PV2-1:先前的待定位置(用于转院)
- PV2-3:入院原因
- PV2-8:预计出院日期
- PV2-9:预计出院去向
- PV2-47:预计 LOA 返回日期/时间
IHE PAM 必填字段
所有 ADT 消息的必填字段
- MSH-3:发送应用程序
- MSH-4:发送机构
- MSH-7:消息日期/时间
- MSH-9:消息类型
- MSH-10:消息控制 ID
- MSH-12:版本 ID(2.5)
- EVN-1:事件类型代码
- EVN-2:记录日期/时间
- PID-3:患者标识符
- PID-5:患者姓名
- PID-7:出生日期
- PID-8:性别
入院/转院消息的必填字段(A01、A02)
- PV1-2:患者类别
- PV1-3:分配的患者位置
- PV1-19:就诊编号
- PV1-44:入院日期/时间
出院消息的必填字段(A03)
- PV1-36:出院去向
- PV1-45:出院日期/时间
解析逻辑
要求解析 HL7 IHE PAM 消息时:
-
按段终止符拆分:
segments = message.split('\r')或split('\n') -
解析 MSH 段(始终位于首位):
- 从 MSH-2 提取分隔符:
^~\& - 字段分隔符:
| - 组件分隔符:
^ - 重复分隔符:
~ - 转义字符:
\ - 子组件分隔符:
&
- 从 MSH-2 提取分隔符:
-
识别消息类型:检查 MSH-9
- ADT^A01 = 入院
- ADT^A02 = 转院
- ADT^A03 = 出院
- 等
-
解析每个段:
- 按字段分隔符
|拆分 - 使用
^解析组件 - 使用
~解析重复项 - 使用
&解析子组件
- 按字段分隔符
-
提取关键字段:
- 患者 ID(PID-3)
- 患者姓名(PID-5)
- 出生日期(PID-7)
- 就诊编号(PV1-19)
- 位置(PV1-3)
- 日期(PV1-44、PV1-45)
-
验证结构:
- 检查是否存在必需段
- 检查必填字段是否已填写
- 验证日期格式(YYYYMMDD、YYYYMMDDHHmmss)
- 验证代码值(患者类别、性别等)
-
生成说明:
- 识别消息用途
- 说明事件类型
- 列出患者关键信息
- 描述就诊/接诊详情
- 提供临床背景
示例输出格式
解析消息时,请提供:
### HL7 IHE PAM Message Analysis
**Raw Message**:
[带可见分隔符的原始 HL7 消息]
**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.]
常见 ADT 事件代码
| 代码 | 事件名称 | 用途 |
|---|---|---|
| A01 | 入院/就诊通知 | 患者入住住院部 |
| A02 | 转移患者 | 在病区/房间之间转移 |
| A03 | 患者出院 | 患者从医院出院 |
| A04 | 登记患者 | 入院前或门诊登记 |
| A05 | 预登记患者 | 计划入院通知 |
| A06 | 将门诊患者转为住院患者 | 状态变更 |
| A07 | 将住院患者转为门诊患者 | 状态变更 |
| A08 | 更新患者信息 | 更新人口统计信息 |
| A09 | 患者离院-跟踪 | 患者暂时离开医疗机构 |
| A10 | 患者到院-跟踪 | 患者返回医疗机构 |
| A11 | 取消入院 | 取消之前的入院 |
| A12 | 取消转移 | 取消之前的转移 |
| A13 | 取消出院 | 取消之前的出院 |
| A21 | 患者暂时离院 | 暂时离院 |
| A22 | 患者暂时离院后返回 | 暂离后返回 |
| A28 | 添加人员信息 | 向数据库添加新人员 |
| A31 | 更新人员信息 | 更新人员人口统计信息 |
患者类别代码
| 代码 | 描述 |
|---|---|
| I | 住院患者 |
| O | 门诊患者 |
| E | 急诊患者 |
| P | 预登记患者 |
| R | 定期就诊患者 |
| B | 产科患者 |
| C | 商业账户 |
| N | 不适用 |
| U | 未知 |
出院去向代码
| 代码 | 描述 |
|---|---|
| HOME | 回家或自行护理 |
| SNF | 专业护理机构 |
| RH | 康复机构 |
| EXP | 已过世(死亡) |
| HOS | 临终关怀 |
| AADVICE | 未遵医嘱离院 |
| OTH | 其他 |
验证规则
消息结构
- 第一个段必须是 MSH
- MSH-1 必须是
| - MSH-2 必须是
^~\&(编码字符) - 段必须以 CR 或 LF 分隔
- 字段必须以
|分隔
按消息类型划分的必需段
- A01、A04、A05:MSH、EVN、PID、PV1
- A02:MSH、EVN、PID、PV1(建议使用 PV2 表示先前位置)
- A03:MSH、EVN、PID、PV1
- A08:MSH、EVN、PID(PV1 可选)
- A11、A12、A13:MSH、EVN、PID
日期/时间格式
- 日期:YYYYMMDD
- 日期时间:YYYYMMDDHHmmss 或 YYYYMMDDHHmmss.SSSS
- 时间:HHmmss
患者标识符格式
- PID-3:PatientId^^^AssigningAuthority^IdentifierType
- 示例:PAT12345^^^CHU_PARIS^PI
姓名格式
- PID-5:LastName^FirstName^MiddleName^Suffix^Prefix^Degree
- 示例:DUPONT^JEAN^^M.
位置格式
- PV1-3:PointOfCare^Room^Bed^Facility^LocationStatus^PersonLocationType^Building
- 示例:CHU_PARIS^CARDIO^LIT_001^CHU_PARIS
参考文档
IHE PAM 规范:
- 法语:https://github.com/Interop-Sante/ihe.iti.pam.fr
- 国际版:https://profiles.ihe.net/ITI/TF/Volume1/ch-14.html
HL7 v2.5 标准:
- 官方:http://www.hl7.eu/HL7v2x/v25/std25/ch02.html
- 段:http://www.hl7.eu/HL7v2x/v25/std25/ch03.html
- 数据类型:http://www.hl7.eu/HL7v2x/v25/std25/ch02a.html
相关工具:
- simple-hl7(Node.js):https://github.com/Bugs5382/node-hl7-client
- HAPI(Java):https://hapifhir.github.io/hapi-hl7v2/
快速参考
分隔符
| Field delimiter
^ Component delimiter
~ Repetition delimiter
\ Escape character
& Subcomponent delimiter
常见字段
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