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 可以:
- 解析消息。
- 消息标头细分 (MSH) 中提取多个字段以进行过滤。
- 将消息的内容表示为 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.create
。ACK
响应不会在 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 存储区中。然后,存储区会使用 ACK
或 NACK
同步响应 MLLP 适配器。如果消息格式正确且具有有效的标头细分,则系统会发送 ACK
。MLLP 适配器将 ACK
或 NACK
响应发送到医疗保健系统。
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 消息时,它预期不会生成新消息并从远程/本地系统返回。
上图显示了以下信息:
- 本地医疗保健系统。
- ADT HL7v2 消息离开医疗保健系统。
- 通过 MLLP 适配器将 HL7v2 消息提取到 HL7v2 存储区中。
- HL7v2 存储区的已配置 Pub/Sub 主题会收到消息已被提取的通知。
- 订阅者应用会侦听提取自其 Pub/Sub 主题的 HL7v2 消息的通知。