使用 LEADTOOLS 将 HL7 集成到医疗应用程序中





0/5 (0投票)
LEADTOOLS HL7 SDK 简化了复杂的 HL7 标准集成到任何医疗保健应用程序中。
引言
Health Level Seven (HL7) 消息传递已作为一种灵活的标准,在交换结构化电子健康信息方面获得了广泛的普及和接受。HL7 可以实现标准化信息和影像系统之间的通信和互操作性,例如电子健康记录 (EHR)、医院信息系统 (HIS)、放射信息系统 (RIS)、实验室信息系统 (LIS) 和影像归档与通信系统 (PACS),以及医疗保健提供者用于计费和患者跟踪等任务的任何独立诊所管理或前台应用程序。
理所当然,一个具有如此巨大效益的标准也伴随着陡峭的学习曲线。尽管这些不同的应用程序现在可以相互通信,但开发人员必须实现一个接口来处理进出 HL7 消息。LEADTOOLS HL7 SDK 简化了复杂的 HL7 标准集成到任何医疗保健应用程序中。此外,如果您有构建支持 HL7 消息的 DICOM/PACS 解决方案的需求,LEADTOOLS 包含几个预制的 HL7 接口,用于更新患者和模态调度 (MWL/MPPS)。凭借 LEADTOOLS 中全面的医学影像技术,开发人员可以快速创建功能齐全、符合 HL7 标准的 PACS。
使用 LEADTOOLS 创建和解析 HL7 消息
LEADTOOLS HL7 功能的核心是创建和解析原始 HL7 消息的能力。这些基于文本的消息是由代码、值和分隔符(如管道 (|) 和插入符号 (^))组成的集合。有超过 100 种消息类型,每种都有其自己的行和预期的管道值组合。例如,以下是一个用于接收患者的基本 HL7 消息。消息类型 (ADT_A01) 标识该消息为患者接收,患者的 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
消息,并填写了一些基本的患者标识值。
// Create and cast the message to the model and create the default segments to fill in ADT_A01 msg = (ADT_A01)Leadtools.Medical.HL7.V2x.Models.MessageFactory.New("ADT_A01", "V26"); Leadtools.Medical.HL7.V2x.Models.MessageConstructor.CreateSegments(msg); // Set header information 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"; // Set Patient info 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 Messaging 演示中已完成。
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;
PACS 集成
除了 LEADTOOLS HL7 SDK 能够简化 EHR、HIS、RIS 等的 HL7 接口开发之外,对于需要创建支持接收 HL7 消息的 PACS 解决方案的开发人员,LEADTOOLS 更是发挥了其强大的功能。其全面的 PACS 框架和 DICOM 存储服务器提供了高级类和 OEM 就绪组件,可以轻松开发 PACS。
正如许多促使 HL7 出现的分散式医疗应用程序一样,PACS 最初是医院或医疗机构中用于存储 DICOM 图像的独立实体。然而,互操作性的价值改变了格局,并将 PACS 纳入其中,使其能够与管理患者信息和计费的前台应用程序进行通信。例如,患者可能多年未看骨科专家,但现在需要另一个 X 光或 MRI。自上次就诊以来,他们结婚或搬家了。接待员的患者接收应用程序可以向网络中的每个系统(包括 PACS)发送 HL7 消息,医生可以在本次就诊期间轻松找到并查看患者多年前上次就诊的旧记录。
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; // Parse and decode the HL7 message string MessageName = MessageItemCracker.GetMessageName(hl7msg); if (MessageName == "ADT_A01") { ADT_A01 msg = (ADT_A01)hl7msg; // Get PatientID so we know which record to update OriginalPatientId = PatientId = msg.PID.Patient_ID.IDNumber.Value; // Get values that need to change FamilyName = msg.PID.Patient_Name[0].FamilyName.Surname.Value; GivenName = msg.PID.Patient_Name[0].GivenName.Value; Sex = msg.PID.Administrative_Sex.Value; // ...other values such as Birthdate, reason, etc. // Update PACS with information from message } }
由于 HL7 没有定义发送和接收消息的规则,LEADTOOLS 提供了此插件的源代码,因此可以对其进行完全自定义以满足任何环境的需求。该插件包括监听 TCP 连接的功能,但可以轻松修改以适应其他连接类型或监视包含 HL7 消息数据的文本文件文件夹。
结论
在当今的数字医疗领域,互操作性是降低成本和最小化风险的必备条件。HL7 已在全球范围内确立为交换患者护理和临床信息的标准消息传递格式,但对于软件开发人员来说,可能是一个复杂难懂的领域。LEADTOOLS 等 SDK 帮助程序员保持 HL7 合规性,避免项目延误。当 PACS 和 DICOM 也被纳入考虑范围时,LEADTOOLS 在其 PACS 框架和 DICOM 存储服务器中世界一流的影像技术,可以成为开发人员的巨大优势。这些框架节省了数月的开发时间,让开发人员在创建通过 HL7 连接的动态、现代医疗应用程序时能够安心无忧。
下载完整的 HL7 示例
您可以下载包含上述功能的完整功能演示。要运行此示例,您需要以下条件:
- LEADTOOLS 免费 60 天试用版
- Visual Studio 2008 或更高版本
- 浏览至 LEADTOOLS 示例文件夹(例如,C:\LEADTOOLS 19\Examples\),您可以在其中找到此示例以及 LEADTOOLS 中许多其他技术的示例项目。
支持
需要帮助来设置并运行此示例吗?联系我们的支持团队获取免费技术支持!有关定价或许可问题,您可以联系我们的销售团队(sales@leadtools.com)或致电 704-332-5532。