HL7(详情)
Health Level Seven组织成立於1987年,由SamSchultz博士在宾夕法尼亚州大学医院主持的一次会议促成了HL7组织和通信标准的诞生。随着许多用户、厂商、顾问组织的加入,HL7队伍在逐渐壮大,于是成立了HL7工作组。(官网)
使用的HAPI(maven)
<dependency><groupId>ca.uhn.hapi</groupId><artifactId>hapi-base</artifactId><version>${hapi.version}</version></dependency><dependency><groupId>ca.uhn.hapi</groupId><artifactId>hapi-structures-v24</artifactId><version>${hapi.version}</version></dependency>
解析
package com.dy.mms.util;import ca.uhn.hl7v2.HL7Exception;import ca.uhn.hl7v2.model.Message;import ca.uhn.hl7v2.model.v24.message.ACK;import ca.uhn.hl7v2.parser.PipeParser;/*** HL7消息解析工具*/public class HL7ParseUtil {/*** 解析* @param hl7Str* @return* @throws HL7Exception*/public static Message parse(String hl7Str) throws HL7Exception {// 解析器PipeParser parser = new PipeParser();// 解析Message message = parser.parse(hl7Str);if (message instanceof ACK) {// 如果确认是ACK消息可以直接返回ACKreturn (ACK) message;}return message;}public static void main(String[] args) throws Exception {// HL7消息String hl7Str = "MSH|^~\\&|foo|foo||foo|202103151718||ACK^A01^ACK|1|D|2.4|\rMSA|AA\r";// 解析为消息Message message = HL7ParseUtil.parse(hl7Str);// 输出原消息System.out.println(message.encode().replaceAll("\r", "\r\n"));}}
解读Message
Message
names

表明这个消息中有三个段落,分别是什么。(虽然从原字符串中我们只看到了两个段落,但是由于这条消息是由HL7定义的ACK消息,所以解析完成后显示他有三个段落);
required

表明这三个段落那个是不能为空,这里解析之后我们发现ERR字段可以为空(false);
repeating
structures(重点)

structures(Map,kv结构)为这个消息的全部内容,一下我们对重点字段进行分析:
key:段落名
value:段落内容
fields:字段内容

可以看到MSH这个段落有21个字段,没个字段又是一个集合,表明字段里可以有多个值,没个字段(组件)中可能还包括子组件(不多说了,大家自己看);
types:字段类型

没个字段是什么类型的值;
HL7定义的类型:
| 类型编码 | 类型说明 |
|---|---|
| ST | 字符串 |
| TX | 文本数据 |
| FT | 格式化文本 |
| NM | 数字 |
| SI | 序列ID号 |
| SN | 结构化数据 |
| ID | HL7表的编码值 |
| IS | 用户定义表的编码 |
| EI | 实体标识符 |
| DT | 日期 |
| TM | 时间 |
| CE | 编码要素 |
| CX | 具有校验数位的扩展符合ID |
| XCN | 扩展符合ID号和ID名 |
| XAD | 扩展地址 |
| XPN | 扩展姓名 |
| XTN | 扩展通讯号码 |
names:字段名
剩下的字段大家自己消化
以上就是我总结的HL7解析过程,大家可以在解析过程中加入自定义代码以便使用。
原创不宜,请勿抄袭!


