4. 患者标识与ADT消息

在HL7 v2的ADT(Admission, Discharge, Transfer)消息族中,PID、PD1、PV1三个段构成了患者身份与就诊上下文的核心骨架。理解它们的字段语义、重复规则和段间关系,是开发患者主索引(EMPI)对接、住院登记、转科转床等接口的基础。本节从段结构出发,结合触发事件,给出可直接用于开发的解析与构造方法。

一、三个段的职责边界

PID(Patient Identification)承载患者身份标识:患者ID列表、姓名、出生日期、性别、地址、电话、账号、婚姻状况等。它是ADT消息中唯一必须出现的患者级段。PD1(Patient Additional Demographic)是PID的补充,承载居住安排、器官捐献、免疫状态、患者主索引标识等扩展人口学信息,属于可选段。PV1(Patient Visit)承载本次就诊信息:患者类别、所在病区/床位、主治医师、就诊号、入院类型、服务科室等,描述的是"这一次就诊"而非"这个人"。

关键区分:PID描述人,PV1描述就诊,PD1补充人的扩展属性。同一患者多次就诊时,PID内容基本稳定,PV1随每次就诊变化。这一区分直接决定了数据库建模:患者主索引表以PID为源,就诊表以PV1为源。

ADT消息中 PID / PD1 / PV1 的段结构与数据归属 MSH 消息头:消息类型 ADT^A01、触发事件、发送/接收应用、字符集、版本 PID — 患者身份(人) PID-3 患者ID列表(多子系统ID,含分配机构) PID-5 姓名 PID-7 出生日期 PID-8 性别 PID-11 地址 PID-13 电话 PID-16 婚姻 PID-18 账号 PID-3 可重复:本地ID / 医保号 / 区域EMPI号 并列 PD1 — 扩展人口学(人的补充) PD1-3 居住安排 PD1-4 患者主索引标识 PD1-6 患者状态 PD1-8 器官捐献 PD1-4 是EMPI对接的关键字段,用于跨机构患者匹配 PV1 — 就诊信息(这一次就诊) PV1-2 患者类别(I住院/O门诊/E急诊) PV1-3 所在病区/床位 PV1-7 主治医师 PV1-10 服务科室 PV1-19 就诊号 PV1-36 出院处置 PV1-44 入院时间 PV1-3 结构:病区^床位^房间^设施,转床时该字段变化 患者主索引 vs 就诊记录

二、PID-3:患者标识的核心与EMPI匹配

PID-3是患者ID列表,属于可重复字段(repeating field),每个重复项内部由子组件构成:ID^校验位^ID类型^分配机构^ID类型版本。例如:

PID|1||1002345^^^HIS_A^MR~3201-8876-22^^^REGION_EMPI^PI||张^三^^||19850312|M|||北京市朝阳区XX路1号^^北京^^100020^CHN^H||010-88886666^PRN^PH

这里PID-3有两个重复项:本地HIS的住院号(MR)和区域EMPI号(PI)。开发EMPI对接时,匹配逻辑通常按优先级:先按分配机构+ID类型精确匹配,再按姓名+出生日期+性别+电话模糊匹配。需要注意,PID-3的分配机构(第4子组件)是区分不同系统ID空间的关键,忽略它会导致不同医院的"1002345"被误判为同一患者。

三、PV1-3与转科转床:位置字段的解析

PV1-3(Assigned Patient Location)是复合字段,结构为点位^房间^床位^设施^位置状态^人员位置类型^楼层^建筑。以A01入院为例:

PV1|1|I|3W^301^01^WARD_A||||0098^李医生^明^^^DR|||内科^NEI^内部代码

表示患者类别为住院(I),位于WARD_A设施的3W病区301房间01床,主治医师是李医生。当发生A02转床时,PV1-3的床位子组件从"01"变为"02",其余字段不变。开发时若只比较PV1-3整串字符串,能正确识别变化;但若要精确判断"转床"还是"转科",需分别比较床位子组件与PV1-10服务科室。

四、ADT触发事件与段的组合关系

不同触发事件对段的要求不同,这是接口开发中最容易出错的地方:

触发事件含义PIDPD1PV1关键变化字段
A01入院/就诊必填可选必填PV1-2、PV1-3、PV1-44
A02转床/转科必填可选必填PV1-3、PV1-10
A03出院必填可选必填PV1-36、PV1-45
A04门诊登记必填可选必填PV1-2=O、PV1-19
A08信息更新必填可选可选PID-5、PID-11等

A08是最常用的"患者信息更新"事件,可能只更新PID而PV1为空。解析器必须容忍PV1缺失,不能强制要求PV1存在。反之,A01/A02/A03中PV1必填,缺失应报错。

五、实战:解析与入库的字段映射

假设收到一条A01消息,需要写入患者主索引表和就诊表。解析步骤:

  1. 按段分隔符\r切分,按字段分隔符|取各段字段,按组件分隔符^拆子组件。
  2. 从PID-3提取所有重复项,遍历每个ID,按"分配机构+ID类型"写入患者标识表;若PD1-4存在,写入EMPI号。
  3. 从PID-5取姓名,PID-7转日期格式(HL7为YYYYMMDD,入库为DATE),PID-8映射性别代码(M→男,F→女,O→其他,U→未知)。
  4. 从PV1-2取患者类别,PV1-3拆出病区/房间/床位,PV1-19取就诊号作为就诊表主键,PV1-44转入院时间。
  5. 以PID-3中MR类型的ID关联患者主索引,以PV1-19关联就诊记录,建立外键。
解析时务必保留原始消息到日志表,字段映射失败时可回溯。HL7 v2的字段位置固定但可空,建议用"字段索引→值"的映射表而非硬编码字符串截取。

六、常见陷阱与判断依据

陷阱一:PID-3重复项顺序不固定。不能假设第一个重复项就是本地ID,必须按ID类型和分配机构筛选。陷阱二:PV1-3子组件数量可变。有的系统只发"3W^301",有的发完整8个组件,解析时按索引取值并做空值保护。陷阱三:A08更新时PV1可能为空。入库逻辑应判断PV1是否存在,存在才更新就诊表。陷阱四:日期格式。HL7日期为YYYYMMDD,时间戳为YYYYMMDDHHMMSS,带时区时附加+/-HHMM,转换时需处理精度截断。

判断一条ADT消息处理是否成功,可检查三点:患者主索引是否按PID-3正确匹配或新建;就诊记录是否按PV1-19正确关联;触发事件对应的关键字段是否已更新(如A03的PV1-36出院处置非空)。这三点构成ADT接口的最小验证闭环。