HL7v2

健康狀態層級 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 可執行以下操作:

  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 不會提供與 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 儲存庫。接著,商店會以 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 通知」,瞭解如何搭配使用 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 訊息時,不會預期從遠端/內部系統產生及傳回新訊息。

mllp_adapter

下圖顯示以下內容:

  1. 內部部署的照護系統。
  2. ADT HL7v2 訊息離開照護系統。
  3. 系統會透過 MLLP 轉接器將 HL7v2 訊息擷取至 HL7v2 儲存庫。
  4. HL7v2 儲存庫的 Pub/Sub 主題收到訊息攝入通知。
  5. 訂閱者應用程式會監聽 Pub/Sub 主題的 HL7v2 訊息攝入通知。