← 返回所有博客文章

LEADTOOLS HL7 SDK简化了复杂HL7标准到任何医学应用程序的集成。

简介

Health Level Seven (HL7) 消息是一个灵活的结构化电子健康信息交换标准,受到了广泛的欢迎和接受。HL7可以启用标准化信息和图像系统的通信和互操作性,如电子健康记录系统(EHR)、医院信息系统(HIS)、放射信息系统(RIS)、实验室信息系统(LIS)和图像存档及通信系统(PACS),以及任何用于计费和病人跟踪功能的个人实践管理或前台应用程序。

一般情况下,有如此多优点的标准肯定有一个陡峭的学习曲线。尽管完全不同的应用程序现在可以通信,但是开发者必须实现控制传入和传出消息的接口。LEADTOOLS HL7 SDK简化了复杂HL7标准到任何医学应用程序的集成。此外,如果你需要建立一个支持HL7消息的DICOM/PACS解决方案,LEADTOOLS提供了多个预设接口帮助你更新病人和模态调度(MWL/MPPS)。LEADTOOLS拥有如此全面的医学成像技术,开发者使用它可以快速创建功能完整且兼容HL7的PACS。

使用LEADTOOLS创建和解析HL7消息

LEADTOOLS HL7的核心功能是创建和解析原始HL7消息的能力。这些基于文本的消息是代码、值和分隔符的集合,如(|)和(^)。共有100多种消息类型,每个都是行和预期竖线值的组合。例如,以下是确认病人的一个基本HL7消息,同时病人的ID、名字和性别都存储在PID行中。

 
MSH|^~\&|||||201505210936||ADT^A01|6386af5b-a9bc-478c-9f9d-847a97c3c0c3||2.6|||||||||||||
SFT||||||
UAC||
EVN|||||||
PID||123456|||Doe^John|||M|||||||||||||||||||||||||||||||
PD1||||||||||||||||||||||
ARV||||||
ROL|||||||||||||
NK1|||||||||||||||||||||||||||||||||||||||
PV1||||||||||||||||||||||||||||||||||||||||||||||||||||
PV2||||||||||||||||||||||||||||||||||||||||||||||||||
ARV||||||
ROL|||||||||||||
DB1||||||||
OBX|||||||||||||||||||||||||
AL1||||||
DG1||||||||||||||||||||||||||
DRG|||||||||||||||||||||||||||||||||
PR1||||||||||||||||||||||
ROL|||||||||||||
GT1|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IN1|||||||||||||||||||||||||||||||||||||||||||||||||||||
IN2||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IN3|||||||||||||||||||||||||
ROL|||||||||||||
ACC|||||||||||
UB1|||||||||||||||||||||||
UB2|||||||||||||||||
PDA|||||||||

当然还有很多信息需要填写,例如病人的联系信息、就诊的医生、症状报告等。你可能会猜到,这或许会带来一些混淆,特别是多个HL7版本和子版本之间的不同。

LEADTOOLS使用Leadtools.Medical.HL7命名空间极大简化了此类消息的创建。它的类和枚举为开发者提供了一个创建和解析HL7消息的简单框架。你不需要关心竖线的的个数或来回查看不同的规范,以确保没有因为少一个字符而弄错病人的姓名和出生年月。LEADTOOLS包括了现在最流行的HL7版本 (2.6, 2.5.1, 2.3.1)中每个消息类型的数据模型,枚举它们能以更可读的方式生成消息。以下的代码创建了一个ADT_A01消息,用于确认病人、填写一些基本的病人身份信息。

 
// 创建并将信息投入一个模型,同时创建默认字段填充
ADT_A01 msg = (ADT_A01)Leadtools.Medical.HL7.V2x.Models.MessageFactory.New("ADT_A01", "V26");
Leadtools.Medical.HL7.V2x.Models.MessageConstructor.CreateSegments(msg);
// 设置header信息
msg.MSH.Sending_Application.Value = "LTHL7Demo";
msg.MSH.Sending_Facility.Value = "LEADTOOLS";
msg.MSH.Date_Time_of_Message.Value = MessageConstructor.CurTime();
msg.MSH.Message_Type.MessageCode.Value = "ADT";
msg.MSH.Message_Type.TriggerEvent.Value = "A01";
msg.MSH.Message_Control_ID.Value = UniqueId.New;
msg.MSH.Processing_ID.Value = "1";
msg.MSH.Version_ID.VersionID.Value = "2.6";
// 设置病人信息
msg.PID.Patient_ID.IDNumber.Value = PatientId;
msg.PID.Patient_Name[0].FamilyName.Value = PatientLastName;
msg.PID.Patient_Name[0].GivenName.Value = PatientFirstName;

当接收信息时,LEADTOOLS将原始的文本解析为正确的数据模型。可以显示或映射到应用程序的合适的UI元素上。如下所示,只需几行代码就可以将一个竖线信息解析为一个 IHL7MessageItem,在一个树状图中可以枚举和表示它,就像LEADTOOLS HL7消息示例一样。

PipeMessageConverter pmc = new PipeMessageConverter();
MessageStructureConverter msc = new MessageStructureConverter();
 
MessageStructure ms = pmc.PipeMessageToMessageStructure(strMessage);
IHL7MessageItem msg = msc.MessageStructureToMessage(ms, 
   new MessageStructureConverter.Options() { 
      Parse_RepeatableParentGroupFirst = true, Forgive_IncompleteMessage = true 
   }).Message;
 

clip_image002

图1 创建和显示LEADTOOLS HL7消息示例中的ADT_A01消息

PACS集成

除了简化EHR、HIS、RIS等开发的HL7接口,LEADTOOLS还支持PACS解决方案中HL7消息的接收。这个综合的PACS框架和DIOCM存储服务提供了高级类和OEM-ready组件,开发者能以很少的工作量完成PACS开发。

正如许多不同的医学应用程序越来越需要HL7一样,PACS在医院或医疗实践中作为一个独立的个体被需要,用来存储DICOM图像。然而,互操作性已经改变了整体的结构,PACS加入,这样它就能和管理病人信息和账单的前台应用程序交互。例如,一个病人多年不会去见整形专家,但是现在需要一个X-射线或MRI。上次访问至今,他们可能结婚或搬走了。前台的病人确认应用程序可以将HL7消息发送给网络中的每一个系统,包括PACS,这样现在的医生就可以查找和查看病人若干年前的就诊记录。

LEADTOOLS DICOM存储服务器包含了一个病人更新器插件,可以通过监听其他应用程序发送的HL7消息处理常见场景。一旦接收到消息,就会解析值,并将它提交���PACS图像存储中。

public override void OnHl7Message(Leadtools.Medical.HL7.V2x.Models.IHL7MessageItem hl7msg)
{
   string OriginalPatientId = string.Empty;
   string PatientId = string.Empty;
   string GivenName = string.Empty;
   string FamilyName = string.Empty;
   string Sex = string.Empty;
 
   // 解析和解码HL7消息
  string MessageName = MessageItemCracker.GetMessageName(hl7msg);
 
   if (MessageName == "ADT_A01")
   {
      ADT_A01 msg = (ADT_A01)hl7msg;
 
      // 获取PatientID,这样我们就知道更新哪一条信息 
     OriginalPatientId = PatientId = msg.PID.Patient_ID.IDNumber.Value;
 
      // 获取需要更改的值
      FamilyName = msg.PID.Patient_Name[0].FamilyName.Surname.Value;
      GivenName = msg.PID.Patient_Name[0].GivenName.Value;
      Sex = msg.PID.Administrative_Sex.Value;
      // ...其他值如Birthdate、原因等
      // 使用消息中的信息更新PACS  }
}

由于HL7没有定义发送和接收消息的规则,因此LEADTOOLS为您提供了插件的源码,这样你就能根据环境的要求完全自定义它。这个插件包括侦听TCP连接的能力,它还可以轻松被修改来侦听其他连接类型,或监视一个含有HL7消息数据的文本文件的文件夹。

总结

互操作性是当今医疗部门降低费用最小化风险必不可少的一部分。HL7是全球范围内交换病人护理和临床信息的消息标准,但对软件开发者来说这是一个复杂的领域。LEADTOOLS这一类的SDK可以帮助开发者兼容HL7,不耽误项目的进度。当还需要PACS和DICOM时,LEADTOOLS的PACS框架和DICOM存储服务器带来了巨大的改变。这些框架节省了数月的开发时间,为开发与HL7相互连接的动态现代化医学应用程序的开发者提供了内心的宁静。