HL7 v2.5 入门
下载PDF HL7 Messaging Standard Version 2.4
1. 机制和通信方式
HL7使用 事件机制 传递消息,就好像是我们要响应鼠标点击事件,那么就要注册一个点击事件的处理函数。
通信可以看成 请求-响应 的方式,事件发送方发送事件,接收端接收到之后处理消息,然后回复处理结果给发送端。
通信过程是通过在 2端 建立 Socket连接(TCP) 来推送事件,通信的协议采用 MLLP
协议,就是固定的编码表示一个消息的开始和结束
编码 (16进制) | 意义 | 表示代号 |
---|---|---|
0x0B | 消息开始 |
<SB>
|
0x1C | 消息结束 |
<EB>
|
0x0D | 换行 |
<CR>
|
消息格式为: <SB>ddd<EB>
,ddd表示数据
例如,
0B 00 00 00 00 1C
,就表示1条消息,0B
为开始,1C
表示消息结束,消息内容为00 00 00 00
。
关于协议请参考 《HL7 Version 3 Standard: Transport Specifications - MLLP》 (链接如果失效直接搜索标题就可以)
2. 消息解析入门
“消息是系统间传递信息的最小数据单元。从组成结构上分析,消息是一组消息段(Segment)按照定义顺序的逻辑组合,每个消息段包含若干字段(Field),字段可以进一步分解为成分(Component)和子成分(Sub Component)。”[2]
上述所有消息结构将会编码为一个字符串,不同的类型使用不用的分隔符来区别。
分隔符 | 符号 | 用法 |
---|---|---|
消息段结束符 |
使用<CR> 表示 ,16进制值 0x0D
|
结束一个段的记录 |
字段分隔符 |
|
|
在消息段中分隔2个相邻的字段,并把消息段ID与第1个字符分隔开 |
成分分隔符 |
^
|
在字段中分隔相邻的成分 |
子成分分隔符 |
&
|
在成分中分隔相邻的子成分,如果没有子成分,这个字符可以省略 |
重复字段分隔符 |
~
|
分隔多个重复出现的字段 |
转义字符 |
\
|
用于构造ST、TX或FT等数据类型中的转义序列 |
示例:
MSH|^~\&|ADT1|MCM|ADT2|MCM|200512011114||ADT^A01|MSG00001|P|2.3.1|<
CR>
EVN|A01|200512011111||<CR>
PID| |3301081|李林||28|19780401|男| |西安市太白南路 2 号^710071|88201111|||<CR>
PV1||C|02^03^04||||00233^王波| |外科|||||||<CR>
特殊的 MSH 中的第一个字段不需要解析,一般为固定值
^~\&
,表示使用到的编码符号。
把 消息 => 消息段 => 字段 => 成分 => 子成分 想象为面向对象中嵌套的对象结构:
- 消息(Message) 就是一个 对象数组。
- 消息段(Segment)、字段(Field)、成分(Component) 是对象,它们可以是基础类型(如字符串或数字)、也可以是符合类型也就是对象,但是 子成分(Sub Component) 就不可再分。
我们按照面向对象的方式把上面结构解析成树形结构如下:
这个树各个 消息段 里面的各个节点表达的意义是什么就需要根据这个消息段的ID找到这个段的定义文档来确定。
3. 定义
3.1 消息(Message)
用消息类型和触发事件的标识码组合来唯一确定一个具体的消息。
如
ADT_A01
代表病人入院消息,ADT
表示消息类型(入院 Admission、出院 Discharge、转诊 Transfer),A01
为事件接诊(Admit/Visit)的编号。
一种消息格式可用多种事件中,因此 对于事件消息的命名格式如下:
- 事件^消息^消息名称
例如:
ADT^A01^ADT_A01
和ADT^A04^ADT_A01
这里两个详细类型名称的定义中,ADT^A01
和ADT^A04
个不同的事件,但是使用的是同一个ADT_A01
消息格式。
消息就是 按照一定的 顺序排列 和 出现规则 的消息段的数组。
定义数据消息的方式是通过,顺序依次列出在消息中可能出现的消息段ID,并表明消息段的可选性和可重复性。
{...}
表示括号内的消息段可以出现1到多次。[...]
表示括号内的消息段可选。{[...]}
或[{...}]
表示可选且可重复。
ADT^A01^ADT_A01 部分参定义表
ADT | ADT Message | Chapter |
---|---|---|
MSH | Message Header | 2 |
EVN | Event Type | 3 |
PID | Patient Identification | 3 |
[ PD1 ] | Additional Demographics | 3 |
[{ ROL }] | Role | 12 |
[{ NK1 }] | Next of Kin / Associated Parties | 3 |
PV1 | Patient Visit | 3 |
[ PV2 ] | Patient Visit - Additional Info. | 3 |
[{ ROL }] | Role | 12 |
[{ DB1 }] | Disability Information | 3 |
[{ OBX }] | Observation/Result | 7 |
更多的事件定义请参考 《HL7 Messaging Standard Version 2.4 . CHAPTER 3》
3.2 消息段(Segment)
消息段使用1个唯一的3个大写字母来标识(标识ID),内部由字段(Field)按照一定顺序所组成,由换行符(0x0D
)标识消息段结束。
MSH|...|<CR>
我们可以在《HL7 Messaging Standard Version 2.4》相应章节找到这些段的定义:
- MSA - MESSAGE ACKNOWLEDGMENT SEGMENT (第2章)
- MSH - MESSAGE HEADER SEGMENT (第2章)
- EVN - EVENT TYPE SEGMENT (第3章)
- PID - PATIENT IDENTIFICATION SEGMENT (第3章)
3.3 字段(Field)
字段位于段当中,字段通过一定顺序排列构成了消息段,因此通过一下参数来描述字段
- 位置(SEQ): 在消息段中的的顺序位置。
- 最大长度(LEN):字段最大容纳字符数。
- 数据类型(DT):如ST(String)、DT(Date)等。
- 可选性(OPT):
- R 必选
- O 可选
- C 条件可选
- X 不是用于这个事件
- B 向后兼容属性
- 表(TBL):HL7标准中用表的形式定义了某些字段取值,表示字段的ID属性。
- ID号(ITEM):标准中的这个属性的唯一ID。
例如MSA消息段的内部的字段定义如下:
重复字段、组件、子组件他们构成定义方式基本与字段一致所以不再赘述。
有时为了同时描述消息段和其中的字段以及组件和子组件,可以使用下面类型的表结构:
字段名: 消息段ID-字段位置-成分位置
例如: MSH-3-2 表示 MSH段的第3个字段中第2子组件。
字段名 | 数据类型 | 描述 |
---|---|---|
MSH | ||
MSH-1 | ST | Field Separator |
MSH-2 | ST | Encoding Characters |
MSH-3 | HD | Sending Application |
MSH-3-1 | IS | Namespace ID |
MSH-3-2 | ST | Universal ID |
MSH-3-3 | ID | Universal ID Type |
… | … | … |
参考文献
- [1] www.hl7.org . HL7 Version 3 Standard: Transport Specifications - MLLP
- [2] 胡永辉. 基于HL7的医疗信息系统研究[D].西安电子科技大学,2006.
- [3] www.hl7.org . HL7 Messaging Standard Version 2.4
- [4] www.hl7.org . HL7 Messaging Standard Version 2.5
- [5] 张建. 高效HL7消息构建与解析方法研究与实现[D].昆明理工大学,2014.
HL7 v2.5 入门相关推荐
- idea怎么运行eclipse的web项目_Apache Storm v2.0入门项目的开发、测试和运行(IDEA/Maven)...
第一个Apache Storm v2.0流计算入门项目的开发.测试和运行(IDEA/Maven) 关于流计算框架Apache Storm最新版的安装,可以参考: 流计算框架-最新版Apache Sto ...
- 基于`IRIS`,动态解析`HL7`消息
文章目录 基于`IRIS`,动态解析`HL7`消息 什么是`HL7` `HL7` 版本 `HL7` 消息结构 段(`Segment`) 字段(`Field`) `HL7` 数据类型 在`IRIS`中查 ...
- HL7 标准及实现指南 必看的网址
V2: http://hl7book.net/index.php?title=HL7_version_2 包括HL7 的介绍,主要章节,每个版本的变化, 各种语言实现的HL7库,免费HL7工具, 最 ...
- Vue简明实用教程(01)——Vue框架入门
版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl Vue概述 Vue是一个渐进式的JavaScript框架. 官方网站 https://cn.v ...
- HC3i论坛医疗信息化热门资源100个
<医学影像学>电子书免费下载 http://bbs.hc3i.cn/thread-10705-1-1.html [免费]DICOM标准正式版本PDF文档及最新动态 http://bbs.h ...
- 【8月】100个HC3i优秀医疗信息化资源推荐
也许这几个专题同样值得你关注一下: [推荐] HC3i方正众邦资料下载与讨论交流汇总 关于方正众邦的各种资料汇总,还有不少关于方正众邦的讨论交流贴 [推荐][8月]100个HC3i优秀医疗信息化资源 ...
- 欢迎中文社区新版主@黄念刚
亲爱的社区开发者们, 我很高兴地向大家介绍一位我们的新版主@黄念刚. 让我们以热烈的掌声欢迎 @黄念刚! @黄念刚目前任职于东华医为(Mediway),担任技术支持中心开发工程师一职.目前任职于东华医 ...
- 电子健康档案在国外的一些实践
这是一个非常典型的病人就诊流程.周一身体一直不错,没去过医院 .这天,在公司组织的年度体检中,发现血压有些高,被建议去医院复诊一下.于是,周一去了就近的社区医院.护士周四接待了他,先在本地系统查询,发 ...
- 医疗行业几个常提到的系统名词
前段时间一直在忙毕业设计和毕业论文(此处鄙视一下翟博士),导致没有时间写.在此期间找了一份工作,属于医疗行业,看到了些医疗行业相关的一些术语,觉得比较实用在此总结一下. 医疗行业一些专业系统名称:分别 ...
- InterSystems 2022全球峰会亮点解读:Smart Data Fabric与InterSystems数据平台的超能力
2022年9月9日,我们将举办线上"InterSystems 2022全球峰会亮点解读",点击此处参会. 亮点一:Smart Data Fabric(智能数据编织) 认识Data ...
最新文章
- python简史_命令行简史
- Tomcat5.0与SqlServer2000配置连接池(jtds驱动)
- 老男孩最近几年常用的免费的开源软件
- Linux下交叉编译gdb和gdbserver
- 学go语言能做什么工作?
- lambda捕获this_非捕获Lambda的实例
- 2011 MVP大奖礼品包,那是相当的给力啊!!
- Selenium2+python自动化75-非input文件上传(SendKeys)
- 数的计数【Noip2001】
- Java 注解(Java Annotation)
- PPT素材模板哪个网站资源内容比较丰富?
- 缅柬泰之色---彩图大串联 一 (缅甸篇)
- 极化SAR图像四成分分解
- 经典数学问题——三门问题(数据分析面试题)
- 零和博弈,囚徒困境,马斯洛需求层次理论
- 线程有哪些状态?创建、就绪、运行、阻塞和死亡
- 实例二:上海房屋2017年成交信息分析
- 推荐给大家的一款很不错的PHP文库管理系统(九鸟文库)-php 开源系统
- 基于JAVAWeb产品管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
- 【Visual C++】游戏开发笔记二十六 DirectX 11各组件的介绍第一个DirectX 11 Demo的创建
热门文章
- python爬取豆瓣Top250完整代码
- windows 配置中科大的 Rust 下载云,提高下载速度
- 【Java类的封装性】封装的日期类。Person类,使用对象作为成员变量并实现深拷贝。(利用了类的封装性)
- win10系统有些软件有声音,有些软件没有声音
- ESD与EOS的区别
- 常见计算机蓝屏代码,史上最全蓝屏代码分析,快速解决电脑常见故障,值得收藏!...
- 卖肉了也没火的十大悲催女星
- xp框架 android4.4.4,Redmi 2A高配置降级4.4.4和xposed框架安装
- 君望永远--纠缠在爱情的起点上 (转载)
- unity 接入谷歌广告