Java通过HAPI解析HL7消息

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消息可以直接返回ACK
            return (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

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结构化数据
IDHL7表的编码值
IS用户定义表的编码
EI实体标识符
DT日期
TM时间
CE编码要素
CX具有校验数位的扩展符合ID
XCN扩展符合ID号和ID名
XAD扩展地址
XPN扩展姓名
XTN扩展通讯号码
names:字段名

image.png
每个字段的名称,从字面意思就能够看出每个字段内容的含义;

剩下的字段大家自己消化

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

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白给卢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值