HL7(详情

Health Level Seven组织成立於1987年,由SamSchultz博士在宾夕法尼亚州大学医院主持的一次会议促成了HL7组织和通信标准的诞生。随着许多用户、厂商、顾问组织的加入,HL7队伍在逐渐壮大,于是成立了HL7工作组。(官网

使用的HAPI(maven

  1. <dependency>
  2. <groupId>ca.uhn.hapi</groupId>
  3. <artifactId>hapi-base</artifactId>
  4. <version>${hapi.version}</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>ca.uhn.hapi</groupId>
  8. <artifactId>hapi-structures-v24</artifactId>
  9. <version>${hapi.version}</version>
  10. </dependency>

解析

  1. package com.dy.mms.util;
  2. import ca.uhn.hl7v2.HL7Exception;
  3. import ca.uhn.hl7v2.model.Message;
  4. import ca.uhn.hl7v2.model.v24.message.ACK;
  5. import ca.uhn.hl7v2.parser.PipeParser;
  6. /**
  7. * HL7消息解析工具
  8. */
  9. public class HL7ParseUtil {
  10. /**
  11. * 解析
  12. * @param hl7Str
  13. * @return
  14. * @throws HL7Exception
  15. */
  16. public static Message parse(String hl7Str) throws HL7Exception {
  17. // 解析器
  18. PipeParser parser = new PipeParser();
  19. // 解析
  20. Message message = parser.parse(hl7Str);
  21. if (message instanceof ACK) {
  22. // 如果确认是ACK消息可以直接返回ACK
  23. return (ACK) message;
  24. }
  25. return message;
  26. }
  27. public static void main(String[] args) throws Exception {
  28. // HL7消息
  29. String hl7Str = "MSH|^~\\&|foo|foo||foo|202103151718||ACK^A01^ACK|1|D|2.4|\rMSA|AA\r";
  30. // 解析为消息
  31. Message message = HL7ParseUtil.parse(hl7Str);
  32. // 输出原消息
  33. System.out.println(message.encode().replaceAll("\r", "\r\n"));
  34. }
  35. }

解读Message

Message

image.png

names

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

required

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

repeating

image.png
表明这三个段落可以有多个吗,这里全都不可以(false);

structures(重点)

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

key:段落名

value:段落内容

fields:字段内容

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

types:字段类型

image.png
没个字段是什么类型的值;
HL7定义的类型:

类型编码 类型说明
ST 字符串
TX 文本数据
FT 格式化文本
NM 数字
SI 序列ID号
SN 结构化数据
ID HL7表的编码值
IS 用户定义表的编码
EI 实体标识符
DT 日期
TM 时间
CE 编码要素
CX 具有校验数位的扩展符合ID
XCN 扩展符合ID号和ID名
XAD 扩展地址
XPN 扩展姓名
XTN 扩展通讯号码

names:字段名

image.png
没个字段的名称,从字面之一就能够看出没个字段内容的含义;

剩下的字段大家自己消化

以上就是我总结的HL7解析过程,大家可以在解析过程中加入自定义代码以便使用。
原创不宜,请勿抄袭!