HL7v2

Health Level Seven International 版本 2 (HL7v2) 是一种临床消息传递格式,用来提供有关组织内所发生事件的数据。

如需详细了解 HL7v2,请参阅 HL7v2 产品套件文档

HL7v2 存储区

HL7v2 存储区是位于数据集内的数据存储区。HL7v2 存储区用于存储 HL7v2 消息。

HL7V2Store 资源表示 HL7v2 存储区的特性。对于每个 HL7v2 存储区,您可以选择以下选项:

  • 是否将 HL7v2 存储区的更改(如果您的应用收到新消息)发布到 Pub/Sub 主题。
  • 如何解析提取到 HL7v2 存储区的消息。

HL7v2 信息

原始 HL7v2 消息可能难以查看。以下面的消息为例:

MSH|^~\&|FROM_APP|FROM_FACILITY|TO_APP|TO_FACILITY|20180101000000||ADT^A01|20180101000000|P|2.5|
EVN|A01|20110613083617|
PID|1|843125^^^^MRN|21004053^^^^MRN~2269030303^^^^ORGNMBR||SULLY^BRIAN||19611209|M|||123 MAIN ST^^CITY^STATE^12345|
PV1||I|H73 RM1^1^^HIGHWAY 01 CLINIC||||5148^MARY QUINN|||||||||Y||||||||||||||||||||||||||||20180101000000|

Cloud Healthcare API 可以:

  1. 解析消息。
  2. 消息标头细分 (MSH) 中提取多个字段以进行过滤。
  3. 将消息的内容表示为 JSON 数据,以便进一步处理或交换数据。

Message 资源提供了 HL7v2 消息的表示形式。其中包括以下信息:

  • 消息创建的时间
  • 消息的创建者
  • 消息包含哪些数据

上述消息的 Message 资源如下所示:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/W5_pxOBkoLoCxiFxE4cg8zwEWRzMlOzIfaLBrZPf0Zg=",
  "data": "TVNIfF5+XCZ8RlJPTV9BUFB8RlJPTV9GQUNJTElUWXxUT19BUFB8VE9fRkFDSUxJVFl8MjAxODAxMDEwMDAwMDB8fEFEVF5BMDF8MjAxODAxMDEwMDAwMDB8UHwyLjV8DUVWTnxBMDF8MjAxMTA2MTMwODM2MTd8DVBJRHwxfDg0MzEyNV5eXl5NUk58MjEwMDQwNTNeXl5eTVJOfjIyNjkwMzAzMDNeXl5eT1JHTk1CUnx8U1VMTFleQlJJQU58fDE5NjExMjA5fE18fHwxMjMgTUFJTiBTVF5eQ0lUWV5TVEFURV4xMjM0NXwNUFYxfHxJfEg3MyBSTTFeMV5eSElHSFdBWSAwMSBDTElOSUN8fHx8NTE0OF5NQVJZIFFVSU5OfHx8fHx8fHx8WXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHwyMDE4MDEwMTAwMDAwMHw=",
  "sendFacility": "FROM_FACILITY",
  "sendTime": "2018-01-01T00:00:00Z",
  "messageType": "ADT",
  "createTime": "2018-01-01T00:00:00Z",
  "patientIds": [
    {
      "value": "843125",
      "type": "MRN"
    },
    {
      "value": "21004053",
      "type": "MRN"
    },
    {
      "value": "2269030303",
      "type": "ORGNMBR"
    }
  ],
  "parsedData": {
    "segments": [
      {
        "segmentId": "MSH",
        "fields": {
          "5": "TO_FACILITY",
          "2": "FROM_APP",
          "3": "FROM_FACILITY",
          "0": "MSH",
          "1": "^~\\&",
          "10": "P",
          "4": "TO_APP",
          "9": "20180101000000",
          "8.1": "ADT",
          "11": "2.5",
          "8.2": "A01",
          "6": "20180101000000"
        }
      },
      {
        "segmentId": "EVN",
        "fields": {
          "1": "A01",
          "2": "20110613083617",
          "0": "EVN"
        }
      },
      {
        "segmentId": "PID",
        "fields": {
          "1": "1",
          "3[0].1": "21004053",
          "3[1].1": "2269030303",
          "3[0].5": "MRN",
          "0": "PID",
          "11.4": "STATE",
          "11.5": "12345",
          "2.1": "843125",
          "2.5": "MRN",
          "5.1": "SULLY",
          "11.3": "CITY",
          "8": "M",
          "11.1": "123 MAIN ST",
          "3[1].5": "ORGNMBR",
          "7": "19611209",
          "5.2": "BRIAN"
        }
      },
      {
        "segmentId": "PV1",
        "fields": {
          "44": "20180101000000",
          "7.1": "5148",
          "16": "Y",
          "2": "I",
          "3.2": "1",
          "3.4": "HIGHWAY 01 CLINIC",
          "7.2": "MARY QUINN",
          "3.1": "H73 RM1",
          "0": "PV1"
        }
      }
    ]
  }
}

创建和提取消息

您可以使用以下方法将 HL7v2 消息存储在 HL7v2 存储区中:

  • messages.create:创建一个 Message 资源并将其存储在 HL7v2 存储区中。此方法的响应包含消息正文。

  • messages.ingest:提取 Message 资源并将其存储在 HL7v2 存储区中。此方法的响应包含消息正文和确认字段 hl7ack,确认字段用于确认消息已被接受。

    请注意有关 hl7ack 字段值的以下重要信息:

    • 该值包含响应类型。AA 响应类型指示 Application Accept,表示消息已通过验证并成功提取。
    • 发送方设施和接收方设施反转。
    • 该值包含原始消息的控件 ID

如果您的应用需要 ACK 响应,请使用 messages.ingest。如果您的应用不需要 ACK 响应,请使用 messages.createACK 响应不会在 HL7v2 存储区中持久保存。

当您创建或注入 HL7v2 消息时,服务器会分配一个 ID 给该消息。您可以在与消息互动(例如,删除消息或使用用户定义的标签对其进行标记)时使用此 ID。

MLLP 和 Google Cloud MLLP 适配器

最小底层协议 (MLLP) 是用于通过网络(如医院)内的 TCP/IP 连接传输 HL7v2 消息的标准。

MLLP 不提供与使用 HTTP 的 Cloud Healthcare API HL7v2 REST API 的精确映射。因此,必须使用 MLLP 适配器将通过 MLLP 传输的消息转换为 HTTP/REST API 可以接受的格式。要通过 MLLP 传输消息,然后再传送到 Cloud Healthcare API,请使用 Google Cloud MLLP 适配器。如需查看使用此 MLLP 适配器的教程,请参阅通过 TCP/IP 连接传输 HL7v2 消息

如果您的应用要求受信任的机构签署 HL7v2 消息,请使用 Google Cloud Binary Authorization MLLP 适配器。如需查看使用此 MLLP 适配器的教程,请参阅通过 TCP/IP 连接使用 Binary Authorization 传输 HL7v2 消息

适配器不会解析或检查 HL7v2 消息;当这些消息提取到 HL7v2 存储区时,Cloud Healthcare API 即会进行解析和验证。然后,您可以通过查看消息或为邮件添加标签以进一步验证消息。

当适配器运行时,它会在医疗保健系统网络和适配器之间保持长期有效的 TCP 连接。此外,它还公开一个 TCP 套接字,用于通过 MLLP 接受 HL7v2 消息。适配器通过检测每条消息的开头和结尾块字节来确定消息边界,如 MLLP 标准中所定义。

当 MLLP 适配器通过 TCP 连接从医疗保健系统收到 HL7v2 消息时,它会将该消息提取到 HL7v2 存储区中。然后,存储区会使用 ACKNACK 同步响应 MLLP 适配器。如果消息格式正确且具有有效的标头细分,则系统会发送 ACK。MLLP 适配器将 ACKNACK 响应发送到医疗保健系统。

MLLP 适配器还可以侦听与 HL7v2 存储区关联的 Pub/Sub 订阅。当系统创建 HL7v2 消息或将其提取到存储区时,MLLP 适配器会收到通知并将该消息发布到医疗保健系统。

MLLP 和安全

MLLP 原生不支持任何加密或身份验证功能。因此,使用 MLLP 的 TCP 连接应封装在使用虚拟专用网 (VPN) 的安全连接中。您可以使用 Cloud VPN 在运行 MLLP 适配器的 GKE 集群与您的本地应用之间创建安全连接。如需了解详情,请参阅配置 Cloud VPN

HL7v2、MLLP 和 Pub/Sub

将 HL7v2 与 Cloud Healthcare API 配合使用的基本方面涉及 Pub/Sub 通知的配置。通过搭配使用订阅者应用与 Pub/Sub,当系统创建 HL7v2 消息或将其提取到 HL7v2 存储区时,您可以收到通知。

如需了解如何将 Pub/Sub 主题与 Cloud Healthcare API HL7v2 实现搭配使用,请参阅配置 Pub/Sub 通知

HL7v2、MLLP 和 Google Cloud 架构

以下图表展示如何从医疗保健系统发送 HL7v2 消息并将其提取到 Cloud Healthcare API 中。MLLP 适配器将部署到 Google Kubernetes Engine,并且系统会使用 Cloud VPN 传输消息。提取消息后,订阅了 HL7v2 存储区的 Pub/Sub 主题的订阅者应用会收到一则通知,告知您消息已被提取。Cloud Healthcare API 还会为 MLLP 适配器生成一个 ACK,并通过 VPN 隧道将其发回至医疗保健系统。

从医疗保健系统发送的 HL7v2 消息是一条“ADT”消息,这是 HL7v2 中的常见消息。当医疗保健系统发送 ADT 消息时,它预期不会生成新消息并从远程/本地系统返回。

mllp_adapter

上图显示了以下信息:

  1. 本地医疗保健系统。
  2. ADT HL7v2 消息离开医疗保健系统。
  3. 通过 MLLP 适配器将 HL7v2 消息提取到 HL7v2 存储区中。
  4. HL7v2 存储区的已配置 Pub/Sub 主题会收到消息已被提取的通知。
  5. 订阅者应用会侦听提取自其 Pub/Sub 主题的 HL7v2 消息的通知。