前言
本文内容是对HL7传输协议的简单介绍,因为本人主要实现了V2版本协议,所以更多的是侧重于V2版本的内容介绍。
HL7简介
HL7的全称是 healthy level 7,level 7意思是OSI的七层模型中的第七层,HL7是基于应用层的协议。 HL7的难点第一是英文的理解
HL7(Health Level 7)作为一个机构,成立于1987年,从1994年起是美国国家标准局(ANSI)授权的标准开发组织(SDO)之一,是从事医疗服务信息传输协议及标准研究和开发的非盈利组织。
HL7版本
目前发布了三个版本
FHIR: 大概在2015年正式推出,编码方式有XML和JSON格式,似乎还有其他的,FHIR解决方案构建工作的基础是一套被称为“资源(Resources)”的模块化组件。
V3: 大概在1995年左右推出,最新版本叫HDF,V3标准的目的是支持所有医疗保健工作流程,编码语法基于XML。
V2: 大概在1989年,是 UCSF 协议的改进(这个相当于HL7 V2的前身),最新版本应该是2.8.2。这是国内外普及最广的协议。 我们现在程序上的HL7的XML文件不属于我上述任意一个版本。叫AnotatedECG,是一种独立于HL7的用于表示心电图(ECG)数据的标准格式,在该标准下有独立表示心电数据的节点。而HL7标准协议并不直接涉及ECG的表示。但我大概找了下,没找到这个标准的官方协议。 HL7有100多个消息类型,消息里面包含段,段里面包含组件,组件里面包含子组件。这些什么包含什么都在标准里有定义的,但每个版本肯定有不同的区别,我们要实现自己的业务的HL7协议的话,首先在需要实现协议的版本里的100多个消息里面找出符合业务消息,也是就第一步搞清自己要做什么,是同步一个新建患者信息还是发送一个诊断结果。
-
比如我想要更新一个患者信息,我就会在ADT里找,ADT(Admission, Discharge, Transfer)在协议中的定义是用于在医疗信息系统中处理患者的入院、出院和转移等相关事件,看到ADT_A08 - Update patient information符合我的业务场景,那就确定ADT_08为我实现的消息。
-
再确定我要传一些什么患者信息,再往协议里看(这里基于HL7 V2.7),里面的PID字段是填患者信息的,我把这些信息填到PID中。
-
然后看下其他不需要传输但又必填的组件和段,填个符合场景或者固定值,这些其实也可以不按标准来,自定义,这也就是厂家需要出协议文档的意义,厂家对接的协议文件应说明自己用了哪些标准中的消息,还有哪些是自定义的,如何解析自定义数据。比如HL7标准消息中没有心电数据这一块,需要我们自定义。但标准中有的应该尽量按照标准来,越符合标准,适用性就越广。
-
要注意下不同版本的差别,比如PID段中的pID-2 Patient Id组件在 v2.3.1后是为了兼容之前保留的,在标准中是不使用的,id推荐在PID-3的Patient Identifier List中实现。
-
当然组装消息其实不需要这样麻烦,网上有通用的库,按库填入信息库会给你组装,我当初没了解到这个库。从一个一个组件自己看协议和资料理解组装和验证的,比较麻烦,不过这样自定义的自由度会比较高。