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为源。
二、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触发事件与段的组合关系
不同触发事件对段的要求不同,这是接口开发中最容易出错的地方:
| 触发事件 | 含义 | PID | PD1 | PV1 | 关键变化字段 |
|---|---|---|---|---|---|
| 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消息,需要写入患者主索引表和就诊表。解析步骤:
- 按段分隔符
\r切分,按字段分隔符|取各段字段,按组件分隔符^拆子组件。 - 从PID-3提取所有重复项,遍历每个ID,按"分配机构+ID类型"写入患者标识表;若PD1-4存在,写入EMPI号。
- 从PID-5取姓名,PID-7转日期格式(HL7为YYYYMMDD,入库为DATE),PID-8映射性别代码(M→男,F→女,O→其他,U→未知)。
- 从PV1-2取患者类别,PV1-3拆出病区/房间/床位,PV1-19取就诊号作为就诊表主键,PV1-44转入院时间。
- 以PID-3中MR类型的ID关联患者主索引,以PV1-19关联就诊记录,建立外键。
六、常见陷阱与判断依据
陷阱一: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接口的最小验证闭环。