我正在尝试读取和解析 HL7 消息,并对它们如何物理存储在文件中有疑问。
一个文件可以包含多个 HL7 消息还是一个文件仅包含单个消息?
HL7 消息文件的扩展名大多为 *.hl7。
有 FHS(文件头)、FTS(文件尾部)和 BHS(批处理头)、BTS(批处理尾部)段,可将多个 HL7 消息封装在一个消息文件中。
我建议在 Google 中搜索“hl7 fhs bhs”。
[FHS] (file header segment) { [BHS] (batch header segment) { MSH (one or more HL7 messages) .... .... .... } [BTS] (batch trailer segment) } [FTS] (file trailer segment)
HL7协议中没有“文件”这样的概念。
在套接字上传输时,HL7 消息需要包含在 MLLP 块中。您可以在此处和此处了解更多信息。当然,在这里,将 each 消息单独包含在 MLLP 块中很重要。
请注意,即使您将消息存储在文件中,也没有“文件头”。所以,总结一下——“这取决于你”。
我不知道 HL7 中的
FHS
(文件头)和 BHS
(批处理头)功能 (2.3.6 HL7 批处理协议)。我从@sqlab关于这个问题的其他答案中学到了它。FHS
和 BHS
是“文件头”,就像我们拥有 JPEG 或许多其他文件类型的头一样,我们可以在其中读取头并验证文件类型。FHS
段,我们不能说它不是HL7消息。关于扩展名“.hl7”;是的,许多组织通常将此扩展名用于 HL7 文件。
但这不是标准或强制性或强制的(规范中未提及)。
仅将扩展名设置为“.txt”并不会使HL7文件无效;虽然某些第三方应用程序可能无法使用它,但这是不同的问题。
以下是包含多条消息的单个 HL7 文件的示例:
MSH|^~\&|SendingApp|SendingFacility|ReceivingApp|ReceivingFacility|20220206114016||ADT^A08|987654321|P|2.3||||||
PID|1||123456789|^^^MY_HOSPITAL_A^MR||Doe^John^^^Mr.||19700101|M|||123 Some Street^Somewhere^IL^60606^USA||(312)555-1212|||M|NON|400003403~112233444
PV1|1|I|^^^MY_HOSPITAL_A^23^^^Consulting|^^^Dept of Something^23^^^Consulting|^^^^^^^^^^ConsultCode|||SUR|||||||ConsultServiceCode||99999999|OP
OBX|1|NM|GLU^Glucose Lvl|85|mg/dL|70-100|N|||F
NTE|1||Additional Information|||
MSH|^~\&|SendingApp|SendingFacility|ReceivingApp|ReceivingFacility|20220206114016||ADT^A08|987654322|P|2.3||||||
PID|1||987654321||Doe^Jane^^^Mrs.||19750101|F|||123 Some Other Street^Somewhere^IL^60606^USA||(312)555-1212|||M|NON|400003403~112233445
PV1|1|I|^^^MY_HOSPITAL_A^23^^^Consulting|^^^Dept of Something^23^^^Consulting|^^^^^^^^^^ConsultCode|||SUR|||||||ConsultServiceCode||99999999|OP
OBX|1|NM|GLU^Glucose Lvl|90|mg/dL|70-100|N|||F
NTE|1||Additional Information|||
在此示例中,有两条 HL7 消息,由 MSH|^~& 段分隔。每条消息均以 MSH(消息头)段开始,并以适当的段终止符结束。
处理 HL7 文件时,单独解析每条消息非常重要,并考虑段终止符以将一条消息与另一条消息分开。许多 HL7 解析库和工具都内置支持处理单个 HL7 文件中的多个消息。