带你认识HL7和CDA

大家好,我是帅气小伙。今天想和大家谈谈医疗信息化标准协议。最近在研发医疗传输协议的消息中间件,被这些复杂的医疗协议搞到晕头转向。相信有很多人都将会在这个里头苦恼一阵子了。因为医疗信息化成熟度这个评审要求。
先说一下自己最近研究的成果吧:

1.实现任意json,xml转HL7v2.x 字符串的转换。
2.CDA校验,HL7V3的校验

感性认知

HL7 v2.4

MSH|^~\&|MedSeries|CAISI_1-2|PLS|3910|200903230934||ADT^A31^ADT_A05|75535037-1237815294895|P^T|2.4
EVN|A31|200903230934
PID|1||29^^CAISI_1-2^PI~""||Test300^Leticia^^^^^L||19770201|M
  • HL7 v2.x 是一种基于传输数据的事物,按照特定的编码规则而制定的字符。说白了就是一段字符串,而且这个字符串,不同的区域代表这不同的数据区(及不同的传输事物,例如:MSH:消息头,ADT_A05:事件类型,PID:病人信息)

  • 一般传输方式 点对点的较多(socket形式的),极少数采用Http传输。基本就是国内PACS,LIS 系统有这么先进格式的传输。

HL7 v3

<?xml version="1.0" encoding="UTF-8"?>
<POLB_IN224200UV01 xmlns:hl7="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ITSVersion="XML_1.0">
    <templateId extension="VS_RM200901CO01" assigningAuthorityName="HospitalJorgeHUribe"/>
    <id extension="MSG0000001"/>
    <creationTime value="20100511220525"/>
    <interactionId root="2.16.840.1.113883.1.6" extension="POLB_IN224202UV01"/>
    <processingCode code="P"/>
    <processingModeCode code="T"/>
    <acceptAckCode code="NE"/>
    <receiver typeCode="RCV">
        <device classCode="DEV" determinerCode="INSTANCE">
            <id extension="HIS001"/>
        </device>
    </receiver>
    <sender typeCode="SND">
        <device classCode="DEV" determinerCode="INSTANCE">
            <id extension="VSM001"/>
        </device>
    </sender>
    <controlActProcess classCode="CACT" moodCode="EVN">
        <code code="POLB_TE004202UV01" codeSystem="2.16.840.1.113883.1.11.20299" codeSystemName="LaboratoryTriggerEventType" displayName="Result Complete"/>
        <languageCode code="es-co" codeSystem="2.16.840.1.113883.1.11.11526" codeSystemName="HumanLanguage" displayName="Espanol Colombia"/>
        <subject typeCode="SUBJ" contextConductionInd="false">
            <observationBattery classCode="BATTERY" moodCode="EVN">
                <id extension="VS12340000"/>
                <code code="28562-7" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC" displayName="Vital Signs"/>
                <statusCode code="complete"/>
                <recordTarget typeCode="RCT" contextControlCode="OP">
                    <patient classCode="PAT">
                        <id extension="6537077"/>
                        <patientPerson classCode="PSN" determinerCode="INSTANCE">
                            <name>
                                <given>ANDRES FELIPE</given>
                                <family>FERNANDEZ CORTES</family>
                            </name>
                            <administrativeGenderCode code="M" codeSystem="2.16.840.1.113883.5.1" codeSystemName="AdministrativeGender"/>
                            <birthTime value="19860705"/>
                        </patientPerson>
                    </patient>
                </recordTarget>
                <author typeCode="AUT">
                    <time value="20100511220525"/>
                    <assignedEntity classCode="ASSIGNED">
                        <assignedDevice classCode="DEV" determinerCode="INSTANCE">
                            <id extension="VSM001"/>
                            <manufacturerModelName code="VSM" codeSystem="BiomedicalDevice" displayName="Vital Signs Monitor"/>
                        </assignedDevice>
                    </assignedEntity>
                </author>
            </observationBattery>
        </subject>
    </controlActProcess>
</POLB_IN224200UV01>
  • 看到这么无解的xml,到底怎么去理解呢,其实很简单。我们需要跟HL7v2.x 做一个对比就很明朗了。
作用/协议 Hl7v2.x Hl7v3
交互 Messaging(消息) Messaging(消息)
语义支持 RIM(参照消息模型)
语义支持 Vocabulary(术语)
语义支持 Data Type(数据类型)
语义支持 Common terminology services (常用术语服务)
语义支持 Entity Identifiction services(实体标识服务)
其他
RIM模型
Vocabulary
Data Type

V3 校 V2.x 多了许多内容,因为 V2.x 仅支持语法交互,而V3支持语义交互。

v2.x : 给病人止痛药
v3 : 给病人用药止痛
从意思上来说,大家都知道,但是如果要深究起来,v3稍微更具体些。因为“给病人止痛药”有很多层意思,比如:是委托家属给病人止痛药 还是 只是给病人一个止痛药;但是在v3的就不会有这种模糊的意思,而且还带有了特殊的语境(下医嘱)。因此,v3的出现,能够更加准确地描述医疗行为/事务。

其实v3是一把双刃剑,由于他的传输格式复杂性,在开发上还是存在许多障碍的。许多国内的PACS LIS 也不太愿意将他们原本的v2升级到v3,因为这里边的成本太高了。所以消息中间件就应运而生了。

CDA
https://github.com/brynlewis/C-CDA_Viewer/tree/master/samples

临床文档结构(CDA),主要用于共享医疗信息,构成临床数据仓库(CDR)的重要组成,一种指定结构和语意的文档标记标准。

  • xml封装
  • 基于HL7v3 RIM(参照消息模型)和 Data Type
  • 灵活的表达方式

以上这些都是国际标准化的医疗传输协议,刚开始接触肯定是无从下手的,因为你还不知道他们到底有什么用,把数据搞得那么复杂,到底有什么用?

HL7 消息的作用

  • 互联互通 (HL7v2.0 HL7v3 FHIR)
  • 信息共享 (CDA)

例如:有以下医疗事务

门诊病人就诊流程
  • 1.首先我们要对这个过程进行建模,也就是说需要对原有的模型进行裁剪,得到一个最终期待的HL7格式字符串或者xml

  • 2.各HIS系统开通基于HL7的传输接口进行信息交互(开始一份无值有结果的的xml文档,经过了这一系列过程,最终得到一份有数据的文档)

  • 3.如果我们要共享并记录这一医疗事务,我们就需要借助CDA
    例如

开始
{
  patinetId:"",
  visitId:"",
  temperature:"",
  result:"",
  .... 
}

走完流程之后
{
  patinetId:"123",
  visitId:"1",
  temperature:"37",
  result:"正常",
  .... 
}

也就是说,我们每个HIS系统都要实现基于HL7协议的转换和解析。在现实情况下,几乎不可能实现这么大规模的标准化。

基于HL7协议的消息中间件

从上述分析可知,正常情况下一个HIS系统,不可能去实现HL7协议,我们需要借助外部的程序,将非HL7的数据做数据转换。具体流程是这样的,仍然用上面的就诊流程来说,以json作为传输数据

Json->His系统->Json
Json->中间件->HL7

这样就实现了任意的json转HL7的数据协议了。

目前开源的HL7消息中间件

mirth-connect

基于医疗传输协议的医院信息集成平台

这是一个更为庞大的系统,消息中间的只是一部分,一般描述它的功能,都可以用这种图来表示。


图片来自互联网

相比中间件,它的强大功能在,HIS系统并不用关心本身的接口会被谁调用,更不懂担心数据格式的问题,都统一委托给集成平台,它负责控制调用流程和格式转换。
还有一点就是,如果要做CDA的存储,并不需要HIS系统做任何的改造。平台创造的价值是巨大的。在2020年的医院信息化革命中,它将是不可或缺的。
目前国内比较有名的集成平台

  • intersystems ensemble
  • 东软(orion)
  • 嘉禾美康
    ...
    没做太多的调查。

说说自研医院集成平台的注意事项吧

  • 平台的稳定性
    集成平台承载着医院的重要数据流,一旦出现宕机,后果是很严重的。
    1.要考虑平台的运维告警,及时对相关人员发出告警信息
    2.集群与负载均衡,集群是相对于整个平台而言的,国内有许多中小型企业的集成平台是基于ESB去做的,很难做到集群,基本上单机部署。而负载均衡是相对于消息交换而言的,一家医院的内部消息交换可能一天就几千万条,平台的压力也是要考虑进去的。

  • 平台的数据安全性
    1.传输加密,随着医院的信息化发展,信息安全的问题越来越明显,作为数据的载体,平台必须对传输数据进行加密
    2.服务授权,作为外界与医院内部系统沟通的媒介,平台必须有良好的授权方式,供外部系统调用

  • 平台的伸缩性
    1.目前国内的医院信息化的水平还是比较落后的,平台在设计初期应该灵活,以适应不同医院的信息化环境。
    2.平台的可操作性一定要注意,尽量做到简单易用。

总结

以上内容为个人总结,如有错误请批评指正。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容