我们想要了解一个新技术,依旧得要从为什么出现和怎么使用出发,废话不多说正片开始。
一、什么是hl7
HL7(Health Level Seven,健康信息交换第七层协议)是一个国际标准开发组织,专注于为医疗保健领域制定一系列的标准。这些标准旨在支持电子健康记录(EHR)、临床信息系统、实验室系统以及其他医疗信息系统之间的数据交换和共享。HL7的目标是提高不同医疗信息系统间的互操作性,使得患者信息能够在不同的医疗机构和系统之间安全、有效地传输。
简单来说,它就是专为医疗而生,主要是用于实现不同系统之间的信息交流。(注意一下,虽然我们经常叫它为hl7协议,但是这里的协议并不是我们平常遇到的http协议,它更像是一个规范的数据格式)
二、hl7的结构
在结构方面我从消息类型开始讲,由远及近,由消息类型 → 消息定义(数据结构)→ 段(Segments)→ 域(Fields)→ 分隔符等。下面是一个hl7的例子:
MSH|^~\&|HIS^1|MediInfo|MediII|MediInfo|20170821175634||REF^I12^REF_I12|60c14a076950420eb6acecba290b750f|P|2.4
RF1|A||||O|1|20170821101916|20170821175826|20170821175826
PRD|RP
PID||53149506|53149505^^^JG01~53149505^^^JG06~362329199803014523^^^JG04~801953149505^^^JG06~0695185873^^^JG08~801953149505^^^JG09~801953149505^^^JG10||CaoQing^曹青||19980301000000|2|||杭州市拱墅区光郡15-2-51&广业街&15-2-51^拱墅区^杭州市^浙江省^310000^^H^乡镇信息^县地区编码^街道标准编码~ <0100007>杭州钢铁集团公司^^^^^^W||^^01^^^^13733471193~^^02^^^^13735571233|^^^^^^13735571233||||0695185873^^^99|360000199803014523|||01^汉族||||Y^职员||40^中国||||0
DG1|1|1^PRIMARY|ICD10^I10^原发性高血压|^^^^^^|20250521160000|1|^^^^^^|20170821144506
PV1|16|O||R|^1111111111||3333^^刘大大|||4|||||0|||1|14836887^16||0||||||||||||||||||2|||1030119^^^0^妇科||20170612113010|||||||V|3333^^刘医生
NTE|1|01|四肢关节疼痛3年。3年前出现关节肿痛,无畏寒发热,无皮疹,无口腔溃疡,无脱发,无腹痛腹泻。无消化道出血,无高血压病,无糖尿病,无冠心病史。
首先我们来看第一行有一个值为REF^I12^REF_I12的字符串,这个值就是我们的消息类型。
接下来简单讲一下消息类型的构成:
- REF:主消息类型,表示“参考信息请求/报告(Referral Information)”类的消息。
- I12:触发事件代码,表示“转诊结果/报告(Return Patient Referral Results)。
- REF_I12:是该消息的具体结构定义,也叫 消息数据结构(Message Data Definition)。
当然这只是hl7众多消息类型中的其中一个,我们继续介绍REF_I12消息数据结构:
MSH - Message Header # [Chapter 2] 消息头,必填
[{ SFT }] - Software Segment # [Chapter 2] 可选,可重复,软件相关信息
[ RF1 ] - Referral Information # [Chapter 11] 转诊基本信息,可选
# --- AUTHORIZATION_CONTACT begin ---
[ AUT ] - Authorization Information # [Chapter 11] 授权信息
[ CTD ] - Contact Data # [Chapter 11] 联系人信息
# --- AUTHORIZATION_CONTACT end ---
# --- PROVIDER_CONTACT begin ---
{ PRD } - Provider Data # [Chapter 11] 提供者信息,必须出现一次
[{ CTD }] - Contact Data # [Chapter 11] 可重复,联系人信息
# --- PROVIDER_CONTACT end ---
PID - Patient Identification # [Chapter 3] 患者身份信息,必填
[{ NK1 }] - Next of Kin/Associated Parties # [Chapter 6] 紧急联系人,可重复
[{ GT1 }] - Guarantor # [Chapter 6] 担保人信息,可重复
# --- INSURANCE begin ---
{
IN1 - Insurance # [Chapter 6] 保险信息,必须出现一次
[ IN2 ] - Insurance Additional Info # [Chapter 6] 附加保险信息,可选
[ IN3 ] - Insurance Add'l Info - Cert # [Chapter 6] 保险证书信息,可选
}
# --- INSURANCE end ---
[ ACC ] - Accident Information # [Chapter 6] 意外事故信息,可选
[{ DG1 }] - Diagnosis # [Chapter 6] 诊断信息,可重复
[{ DRG }] - Diagnosis Related Group # [Chapter 6] 诊断相关组,可重复
[{ AL1 }] - Allergy Information # [Chapter 3] 过敏信息,可重复
# --- PROCEDURE begin ---
{
PR1 - Procedure # [Chapter 6] 执行的医疗程序,必须出现一次
# --- AUTHORIZATION_CONTACT begin ---
[ AUT ] - Authorization Information # [Chapter 11] 授权信息
[ CTD ] - Contact Data # [Chapter 11] 联系人信息
# --- AUTHORIZATION_CONTACT end ---
}
# --- PROCEDURE end ---
# --- OBSERVATION begin ---
{
OBR - Observation Request # [Chapter 4] 观察请求,必须出现一次
[{ NTE }] - Notes and Comments # [Chapter 2] 注释信息,可重复
# --- RESULTS_NOTES begin ---
{
OBX - Observation/Result # [Chapter 7] 实际观察结果,必须出现一次
[{ NTE }] - Notes and Comments # [Chapter 2] 结果相关的注释,可重复
}
# --- RESULTS_NOTES end ---
}
# --- OBSERVATION end ---
提示:
[]
:表示该段是可选(Optional){}
:表示该段是必选(Required){}
或[{}]
内的内容:表示可重复段(Repeatable)--- begin/end
:表示一个逻辑组(Group),包含多个段注意:段的顺序非常重要,在自定义消息时尽量留意消息结构中段的顺序
根据这些数据结构我们就能了解最开始我们的hl7例子的一个结构,如下我们最开始的一个实例的无数据结构
//hl7示例消除数据后的数据结构
MSH - Message Header
// 包含关于消息的基本信息,如发送者、接收者、时间戳等,是每条HL7消息的必需部分。
RF1 - Referral Information
// 提供转诊相关的详细信息,包括转诊的原因、类型等。对于处理患者转诊请求的消息非常重要。
PRD - Provider Data
// 描述提供医疗服务的机构或个人的信息,比如医生、医院等。包含有关服务提供者的角色和联系方式等细节。
PID - Patient Identification
// 患者的身份识别信息,包括患者的唯一标识符、姓名、出生日期、性别等基本信息,用于准确识别患者。
DG1 - Diagnosis
// 诊断信息,记录了与患者相关的诊断代码和描述。这对于理解和管理患者的健康状况至关重要。
PV1 - Patient Visit
// 访问信息,包含了患者此次访问医院的相关信息,如入院类型、病房位置、医生分配等。
NTE - Notes and Comments
// 备注和注释信息,可以用来添加任何额外的信息或对其他段内容进行补充说明。
通过这些结构我们可以很清楚的了解到这条消息的不同信息分别在那一段,这里就有了我们hl7中段的概念,我们每一个结构头都是一段,关于段的类型,除了上面所能看到的类型之外还有其他的,这里我简单列举一些常用到段类型:
MSH | 消息头 |
MSA | 消息确认 |
PID | 患者基本信息 |
nk1 | 近亲信息 |
PV1 | 患者就诊信息 |
DG1 | 诊断信息 |
IN1 | 保险信息 |
AL1 | 过敏信息 |
在引入完段的概念之后,我们再来了解域('|')和域分隔符(‘^’)
域:每个段又由多个字段(Field)构成。字段是最小的信息单位,用竖线 |
分隔。
示例:
PID|1||123456^^^HOSPITAL^MR||DOE^JOHN^^^^|19800101|M|||123 Main St^^Metropolis^IL^44130
从第一个‘|’开始数,每个‘|’后面的空区都代表一个域,从第一个域开始排列,我们就可以得到这张表格(注意看,我没有列出空置,所以左侧列表不是连贯的序号;因为是空值所以没有列,不代表这个域没有意义)
字段编号 | 内容说明 | 示例值 |
---|---|---|
1 | 设置ID(Set ID) | 1 |
2 | 患者外部ID | |
3 | 患者内部ID | 123456^^^HOSPITAL^MR |
5 | 姓名(Name) | DOE^JOHN^^^^ |
7 | 出生日期(Date/Time of Birth) | 19800101 |
8 | 性别(Sex) | M |
11 | 地址(Address) | 123 Main St^^Metropolis^IL^44130 |
到这里域的概念也差不多结束了,接下来我们看域分隔符(‘^’)
域分隔符:由于域中某些字段内容比较复杂,可以进一步拆分为组件(Component)或子组件(Subcomponent),用‘^’表示。
示例:姓名字段(PID.5)
DOE^JOHN^^^^
DOE
:姓氏(Family Name)JOHN
:名字(Given Name)
这种写法使用脱字符号 ^
来分隔不同组件。
示例:地址字段(PID.11)
123 Main St^^Metropolis^IL^44130
123 Main St
:街道地址Metropolis
:城市IL
:州44130
:邮编
域分隔符和域是一个道理,把一个字符串分成一个数组,数组的每个位置都有不同的含义
常用分隔符介绍:
符号 | 名称 | 用途 |
---|---|---|
` | ` | Field Separator |
^ | Component Separator | 分隔组件 |
& | Subcomponent Separator | 分隔子组件 |
~ | Repetition Separator | 表示同一个字段重复出现 |
\ | Escape Character | 转义字符,如将 & 当作普通字符处理 |
三、可视化工具
理论总是烦躁的,如果不是深入使用,那就稍微了解一下就可以了,主要使用的话还得是我们的可视化工具。
我现在正在使用的是Hl7 Assistant,官网提供了免费版,个人觉得还是挺不错的。
官网地址->HL7 Assistant - 浏览、编辑、验证 HL7 消息
话不多说开始介绍一下这个工具的使用方法:
测试功能:
说到这里,本次我的hl7的总结已经完了,至于在代码方面如何使用,我在这里就不举例说明了,可以尝试问一问AI。
最后的最后,这也是我的第一篇博客,在创作方面还是有很多的不足,欢迎大家前来指正,谢谢观看~