健康狀態層級 7 (國際版本 2) (HL7v2) 是一種臨床訊息格式,可提供組織內發生事件的相關資料。
如要進一步瞭解 HL7v2,請參閱 HL7 第 2 版產品套件說明文件。
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 不會提供與 Cloud Healthcare API HL7v2 REST API 的確切對應關係,後者使用的是 HTTP。因此,您必須使用 MLLP 轉接器,將透過 MLLP 傳送的訊息轉換為 HTTP/REST API 可接受的格式。如要透過 MLLP 傳送訊息,然後傳送至 Cloud Healthcare API,請使用 Google Cloud MLLP 轉接器。如需使用此 MLLP 轉接器的教學課程,請參閱「透過 TCP/IP 連線傳送 HL7v2 訊息」。
如果您的應用程式要求信任的授權機構簽署 HL7v2 訊息,請使用 Google Cloud 二進位授權 MLLP 轉接器。如需使用此 MLLP 轉接器的教學課程,請參閱「使用二進位授權,透過 TCP/IP 連線傳送 HL7v2 訊息」。
配接器不會剖析或檢查 HL7v2 訊息;Cloud Healthcare API 會在訊息擷取至 HL7v2 儲存空間時剖析及驗證訊息。接著,您可以查看郵件或標示郵件以供分析,進一步驗證郵件。
在執行期間,轉接器會在照護系統網路和轉接器之間保持長效 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 通知」,瞭解如何搭配使用 Pub/Sub 主題與 Cloud Healthcare API 的 HL7v2 實作項目。
HL7v2、MLLP 和 Google Cloud 架構
下圖顯示如何從照護系統傳送 HL7v2 訊息,並將訊息擷取至 Cloud Healthcare API。MLLP 轉接器會部署至 Google Kubernetes Engine,並透過 Cloud VPN 透過 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 訊息攝入通知。