第二十一章 重要HL7操作场景 - HL7批量消息

148 阅读4分钟

第二十一章 重要HL7操作场景 - HL7批量消息

Production品支持 HL7 中的嵌套子文档(批处理格式)。每个子文档本身就是一个虚拟文档。本节讨论由两个设置控制的细节。它包括以下部分:

支持的批处理格式

Production支持以下 HL7 批处理格式:

  • BHS MSH ... MSH ... BTS

BHS 识别为批处理标头段,将 BTS 识别为批处理尾部段。在此容器内, 将每个 MSH 消息标头段识别为子文档的开头。

  • FHS MSH ... MSH ... FTS

FHS 识别为批处理标头段,将 FTS 识别为批处理尾部段。在此容器内,将每个 MSH 消息标头段识别为子文档的开头。

  • FHS BHS MSH ... MSH ... BTS BHS MSH ... MSH ... BTS FTS

FHSBHS 一起开始消息时,将 FHS 识别为第一级父文档,将每个 BHS 识别为子文档的开头。然后,BHS 成为二级父文档,每个 MSH 段后面的内容成为其子文档。

image.png

处理传入的批次文档

HL7 业务服务具有批量处理配置设置,该设置确定如何处理传入的批量文档。选项有:

  • Whole Batch整批——不要单独处理子文档;将整个批次作为一个复合文档累积并发送。
  • Single-Session Batch单会话批次 — 在一个会话中一起转发批次中的所有子文档;该会话包括表示批次标头和标尾的对象。如果未指定批处理值,则默认为单会话批处理。
  • Multi-Session Batch多会话批处理 — 在其自己的会话中转发批次中的每个子文档,并具有唯一的会话 ID。
  • Individual单独 — 在其自己的会话中转发批次中的每个子文档;不要转发代表批次标头和标尾的对象。

在响应收到的消息时,默认行为是将确认作为批处理文档发送给发送者,其中包含每个子文档的 ACK 消息。这适用于大多数情况。但是,HL7 业务服务还有一个属性(未作为配置设置公开),称为 NoBatchReply。其默认值为 0 (false),这提供了默认行为。如果您编辑业务服务的 OnInit() 方法以包含以下语句:

Set ..NoBatchReply = 1

然后批量回复被禁止;每个单独的消息都会获得一个单独的未包装的 ACK。或者,可以通过包含以下代码来覆盖子类中属性的定义来设置该值:

 Property NoBatchReply As %Boolean [ InitialExpression = 1 ]; 

批处理模式

批处理和自动批父段的组合可为 HL7 批处理文档提供以下操作模式:

Batch HandlingAuto Batch Parent SegsResults
Whole Batch(any)业务服务仅发送父文档;所有子文档都会引用它,但不会单独发送。操作在收到父文档时一次性输出整个批次。
Single-Session or Multi-SessionTrue服务在接收和解析每个子文档时发送该子文档,然后在发送所有子文档后发送父文档。业务操作在收到第一个子文档时输出父标头,然后在收到父文档对象时以预告片结束。尾部片段自动包含正确的子计数值。
Single-Session or Multi-SessionFalse这会导致双重输出:业务操作单独发送每个子文档,然后是包含每个子文档的父文档(再次)。
IndividualFalse业务服务在其自己的会话中转发批处理中的每个子文档,并且不转发表示批处理标头和标尾的对象。在传出方面,业务运作也是如此。

自定义出库批量处理

如果希望向路由流程添加自定义代码以专门在输出端处理批处理文档,可以这样做。以下是两种可能:

  • 路由流程代码创建新的父文档和子文档并链接它们,然后将每个子文档发送到业务操作。业务操作必须将 Auto Batch Parent Segs 设置为 True。业务操作在收到第一个子文档时输出父标头,然后在收到父文档对象时以预告片结束。尾部片段自动包含正确的子计数值。
  • 路由流程代码创建新的父文档和子文档并链接它们,但通过业务操作仅发送父对象。