HL7v2

Health Level Seven International Version 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.create를 사용하세요. ACK 응답은 HL7v2 저장소에서 유지되지 않습니다.

HL7v2 메시지를 만들거나 수집할 때 메시지는 서버에서 ID를 할당합니다. 메시지와 상호작용할 때 이 ID를 사용할 수 있습니다(예: 메시지를 삭제하거나 사용자 정의 라벨로 라벨 지정).

MLLP 및 Google Cloud MLLP 어댑터

Minimal Lower Layer Protocol(MLLP)은 병원과 같은 네트워크 내의 TCP/IP 연결을 통해 HL7v2 메시지를 전송하는 데 사용되는 표준입니다.

MLLP는 HTTP를 사용하는 Cloud Healthcare API HL7v2 REST API에 대한 정확한 매핑을 제공하지 않습니다. 따라서 MLLP를 통해 전송된 메시지를 HTTP/REST API가 허용하는 형식으로 변환하는 데 MLLP 어댑터를 사용해야 합니다. MLLP를 통해 메시지를 전송한 다음 Cloud Healthcare API로 전송하려면 Google Cloud MLLP 어댑터를 사용하세요. 이 MLLP 어댑터를 사용하는 가이드는 TCP/IP 연결을 통해 HL7v2 메시지 전송을 참조하세요.

애플리케이션에서 신뢰할 수 있는 기관이 HL7v2 메시지에 서명해야 하는 경우 Google Cloud Binary Authorization MLLP 어댑터를 사용합니다. 이 MLLP 어댑터를 사용하는 가이드는 Binary Authorization을 사용하여 TCP/IP 연결을 통해 HL7v2 메시지 전송을 참조하세요.

어댑터는 HL7v2 메시지를 파싱하거나 검사하지 않습니다. Cloud Healthcare API는 메시지가 HL7v2 저장소에 수집될 때 파싱하고 유효성을 검사합니다. 그런 다음 메일을 조회하거나 분석을 위해 라벨을 지정하여 추가 확인을 수행할 수 있습니다.

어댑터는 실행되는 동안 관리 시스템 네트워크와 어댑터 간에 TCP 연결이 오랫동안 유지됩니다. 또한 MLLP를 통해 HL7v2 메시지를 수락하기 위한 TCP 소켓을 노출합니다. 어댑터는 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

Cloud Healthcare API와 함께 HL7v2를 사용하는 기본적인 방법에는 Pub/Sub 알림 구성이 포함됩니다. Pub/Sub에서 구독자 애플리케이션을 사용하면 HL7v2 메시지가 생성되거나 HL7v2 저장소에 수집될 때 알림을 받을 수 있습니다.

Cloud Healthcare API HL7v2 구현으로 Pub/Sub 주제를 사용하는 방법은 Pub/Sub 알림 구성을 참조하세요.

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 메시지는 HL7v2의 일반적인 메시지인 'ADT' 메시지입니다. 관리 시스템에서 ADT 메시지를 보낼 때 원격/온프레미스 시스템에서 새 메시지가 생성되어 반환되지 않습니다.

mllp_adapter

다이어그램에 표시된 항목은 다음과 같습니다.

  1. 온프레미스 관리 시스템
  2. ADT HL7v2 메시지는 관리 시스템에서 나갑니다.
  3. HL7v2 메시지는 MLLP 어댑터를 통해 HL7v2 저장소로 수집됩니다.
  4. HL7v2 저장소의 구성된 Pub/Sub 주제는 메시지가 수집되었다는 알림을 받습니다.
  5. 구독자 애플리케이션은 Pub/Sub 주제의 HL7v2 메시지 수집 알림을 리슨합니다.