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回传报告状态。

HL7 v2.x 消息在 RIS 中的交换关系 HIS 患者登记 / 医嘱下达 报告接收 RIS 患者索引 / 检查管理 状态流转 / 报告管理 PACS 影像存储 / 调阅 检查状态回传 ADT^A04/A08 患者信息同步 ORM^O01 检查申请 ORU^R01 状态/报告回传 检查信息 DICOM Worklist 检查状态 已检查/已存储 HL7 v2.x 消息结构层级 Message 整条消息 Segment MSH/PID/OBR Field PID-3 等 Component ^ 分隔 Sub & 分隔 示例:MSH|^~\&|HIS|HOSP|RIS|RAD|20240520103000||ORM^O01|MSG001|P|2.4 OBR|1|ORD001|ACC001|CT^头部CT平扫^L|||20240520110000|||||||||神经内科||||||||||||脑梗死 段名 | 字段1 | 字段2 | ... 字段n

五、接口实现中的关键判断

在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。不同版本字段位置可能不同,接口程序应按版本号选择解析规则。
在调试HL7接口时,建议先抓取原始消息文本,逐段核对MSH、PID、OBR、OBX的字段位置与取值,再对照业务预期判断是消息内容问题、解析逻辑问题还是状态机问题。不要只看日志中的“处理成功”,要确认关键字段是否真正落库。

六、状态消息与检查流程的对应

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机制,是排查接口问题和设计集成方案的基础。