4. HL7标准与消息交换
在RIS与PACS影像中心集成工程中,HL7 v2.x承担着“业务指令与状态同步”的角色:患者登记、检查申请、检查状态变更、报告状态回传等关键事件,通常都以HL7消息在HIS、RIS、PACS、报告系统之间流转。理解HL7 v2.x,不是背标准条文,而是要看懂一条消息如何把“谁、在什么时间、对哪个患者、做了什么检查、当前处于什么状态”表达清楚,并能据此判断接口是否正常。
一、消息结构:从消息到字段的层级
HL7 v2.x采用“消息(Message)—段(Segment)—字段(Field)—组件(Component)—子组件(Sub-component)”的层级结构。一条消息由若干段组成,每个段以三个大写字母标识,段内字段用竖线“|”分隔,字段内的组件用“^”分隔,子组件用“&”分隔。消息头MSH段是每条消息的第一段,它定义了消息的元信息:发送方、接收方、消息类型、触发事件、消息控制ID、字符集、版本号等。
以一条典型的患者管理消息为例,其结构可简写为:
MSH|^~\&|HIS|HOSP|RIS|RADIOLOGY|20240520103000||ADT^A04|MSG000123|P|2.4
PID|1||P20240520001^^^HOSP^MR||张三||19850312|M|||北京市朝阳区某路1号^^北京^^100020^CHN
PV1|1|O|RAD^101^A^HOSP||||||||||||||||V001
MSH中“ADT^A04”表示消息类型为ADT、触发事件为A04(患者注册)。PID段承载患者标识、姓名、出生日期、性别、地址等;PV1段承载就诊信息,如患者类别、就诊科室、床位等。RIS接口程序解析时,首先读取MSH确认消息类型与触发事件,再按段名定位PID、PV1、OBR、OBX等段,最后按字段序号取值。
二、触发事件:消息交换的“为什么”
触发事件(Trigger Event)是HL7消息产生的业务原因。没有触发事件,消息就失去了上下文。在影像业务中,常见触发事件包括:
- ADT^A04:患者注册,HIS将新患者基本信息发送给RIS,RIS据此建立患者索引。
- ADT^A08:患者信息更新,如姓名、地址、电话变更,RIS需同步更新本地患者记录。
- ORM^O01:医嘱消息,HIS向RIS下达检查申请,携带检查项目、申请科室、临床诊断等。
- SIU^S12:预约通知,用于检查预约安排。
- ORU^R01:观察结果消息,RIS或报告系统向HIS回传报告状态或结果。
触发事件决定了接收方应执行什么动作。例如收到ORM^O01,RIS应创建检查申请并进入预约/登记流程;收到ADT^A08,RIS应更新患者信息而不是新建患者。若接口程序忽略触发事件,仅按消息类型处理,就可能出现重复建档或状态错乱。
三、患者管理消息:ADT在RIS中的落地
ADT消息是RIS患者主索引的来源。以ADT^A04为例,PID段中PID-3为患者标识列表,通常包含患者ID、发证机构、ID类型;PID-5为患者姓名,采用“姓^名”结构;PID-7为出生日期;PID-8为性别。RIS接收后,需要将PID-3中的患者ID作为主键,与本地患者表进行匹配。若已存在,则按A08逻辑更新;若不存在,则新建患者记录。
实际接口中,患者ID的分配机构(Assigning Authority)非常关键。同一患者在不同系统可能有不同ID,例如HIS用住院号、RIS用影像号。若PID-3中同时携带多个ID,RIS应优先采用双方约定的主索引ID,并将其他ID作为交叉索引保存,避免因ID不一致导致患者合并错误。
四、医嘱与检查状态消息:ORM与ORU
ORM^O01是RIS接收检查申请的核心消息。其OBR段描述检查项目,OBR-4为检查项目编码与名称,OBR-7为检查时间,OBR-16为申请科室,OBR-31为临床诊断。RIS解析后,生成检查申请单,并进入预约、登记、到检、检查中、已检查、报告中等状态流转。每个状态变化,RIS可通过ORU^R01回传HIS,OBX段承载状态编码或报告文本。
下面用一张图展示HL7 v2.x消息在RIS中的典型交换关系:HIS通过ADT完成患者同步,通过ORM下达检查申请,RIS在检查过程中通过ORU回传状态,最终报告系统通过ORU回传报告状态。
五、接口实现中的关键判断
在RIS接口开发与运维中,仅能解析消息还不够,还需要处理以下问题:
- 消息控制ID(MSH-10):用于唯一标识一条消息,接收方应记录已处理的消息ID,防止重复消息导致重复建档或重复检查。
- 消息确认(ACK):接收方处理完成后应返回ACK消息,MSA段中MSA-1为确认代码(AA表示接受,AE表示错误,AR表示拒绝),MSA-2回传原消息控制ID。发送方根据ACK判断是否需要重发。
- 字符集与编码:MSH-18指定字符集,中文环境常用GBK或UTF-8。若字符集不一致,患者姓名、地址、诊断可能出现乱码。
- 版本兼容:MSH-12为版本号,常见2.3、2.4、2.6。不同版本字段位置可能不同,接口程序应按版本号选择解析规则。
六、状态消息与检查流程的对应
RIS中的检查状态通常包括:已申请、已预约、已登记、已到检、检查中、已检查、报告草稿、报告审核、报告发布。每个状态变化都可以通过ORU^R01消息回传HIS,OBX-3为观察标识,OBX-5为观察值。例如,OBX-3取“CHECK_STATUS”,OBX-5取“EXAMINED”,表示检查已完成。HIS接收到后,可在医生站显示检查进度,减少电话询问。
需要注意的是,HL7 v2.x本身不定义状态机,状态编码和流转规则由集成双方约定。因此,在项目初期应明确状态字典、消息触发时机、回传频率以及异常状态的处理方式。例如,检查取消时是发送ORU还是ORM,取消原因放在哪个字段,都需要在接口规范中写清楚。
总体而言,HL7 v2.x在RIS集成中的价值,在于用标准化的消息结构承载业务事件,使患者、医嘱、检查、报告等对象在系统之间保持一致。掌握消息结构、触发事件、段字段含义以及ACK机制,是排查接口问题和设计集成方案的基础。