mcpField
H
hl7-pam-parser

hl7-pam-parser

github.com/dedalus-erp-pas数据与数据库186 次安装
代码仓库

关于 hl7-pam-parser

hl7-pam-parser 用于解析和解释 HL7 v2.5 IHE PAM 患者管理消息,可识别 ADT 事件、提取字段、检查必需结构,并生成易读说明,适用于医疗数据分析。

主要功能

  1. 01识别 ADT 消息类型和事件
  2. 02提取并标注消息段与字段
  3. 03验证必需结构和字段
  4. 04解释患者及就诊信息
  5. 05检查日期和代码值

适用场景

  1. 01解读原始 HL7 ADT 消息
  2. 02查找缺失字段或结构问题
  3. 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.json
a02_transfer.json
a03_discharge.json
reference/
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 消息时:

  1. 按段终止符拆分:segments = message.split('\r') 或 split('\n')

  2. 解析 MSH 段(始终位于首位):

    • 从 MSH-2 提取分隔符:^~\&
    • 字段分隔符:|
    • 组件分隔符:^
    • 重复分隔符:~
    • 转义字符:\
    • 子组件分隔符:&
  3. 识别消息类型:检查 MSH-9

    • ADT^A01 = 入院
    • ADT^A02 = 转院
    • ADT^A03 = 出院
    • 等
  4. 解析每个段:

    • 按字段分隔符 | 拆分
    • 使用 ^ 解析组件
    • 使用 ~ 解析重复项
    • 使用 & 解析子组件
  5. 提取关键字段:

    • 患者 ID(PID-3)
    • 患者姓名(PID-5)
    • 出生日期(PID-7)
    • 就诊编号(PV1-19)
    • 位置(PV1-3)
    • 日期(PV1-44、PV1-45)
  6. 验证结构:

    • 检查是否存在必需段
    • 检查必填字段是否已填写
    • 验证日期格式(YYYYMMDD、YYYYMMDDHHmmss)
    • 验证代码值(患者类别、性别等)
  7. 生成说明:

    • 识别消息用途
    • 说明事件类型
    • 列出患者关键信息
    • 描述就诊/接诊详情
    • 提供临床背景

示例输出格式

解析消息时,请提供:

### 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 规范:

HL7 v2.5 标准:

相关工具:

快速参考

分隔符
|  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

评论

支持 Markdown