在医疗保健领域,信息的互通性是至关重要的。随着电子健康记录(EHR)、医院信息系统(HIS)、放射信息系统(RIS)、实验室信息系统(LIS)以及影像存储传输系统(PACS)等应用的普及,标准化的信息交换变得尤为重要。HL7(Health Level Seven International)标准提供了一种灵活的方式,用于交换结构化的电子健康信息,使得这些系统之间能够实现通信和互操作性。
然而,这种标准的巨大好处也带来了一定的学习曲线。尽管这些不同的应用程序现在可以相互通信,但开发者必须实现一个接口来处理传入和传出的HL7消息。LEADTOOLSHL7 SDK简化了将复杂的HL7标准集成到任何医疗保健应用程序中的过程。此外,如果需要构建一个支持HL7消息的DICOM/PACS解决方案,LEADTOOLS包含了几个预构建的HL7接口,用于更新患者和模态排程(MWL/MPPS)。借助LEADTOOLS全面的医学影像技术,开发者可以在短时间内创建功能齐全、符合HL7标准的PACS。
LEADTOOLSHL7功能的核心是创建和解析原始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消息演示中的树视图中表示。
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;
图1:使用LEADTOOLS HL7消息演示创建并显示的示例ADT_A01消息
除了LEADTOOLS HL7 SDK能够简化EHR、HIS、RIS等HL7接口的开发外,LEADTOOLS对于需要创建支持接收HL7消息的PACS解决方案的开发者来说,真正发挥了其优势。它的全面PACS框架和DICOM存储服务器为开发PACS提供了高级类和OEM就绪组件,几乎不需要任何努力。
与许多不同的医疗应用程序一样,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;
// 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相互连接的动态、现代医疗应用程序时给他们带来安心。
可以下载包含上述功能的完全功能性演示。要运行这个示例,需要以下内容: