HL7v2

Health Level Seven International Version 2 (HL7v2) ist ein Format für den Austausch klinischer Nachrichten, das Daten zu Ereignissen in Organisationen liefert.

Weitere Informationen zu HL7v2 finden Sie in der Dokumentation zur HL7 Version 2 Product Suite (nur auf Englisch verfügbar).

HL7v2-Speicher

Ein HL7v2-Speicher ist ein Datenspeicher, der sich in einem Dataset befindet. In HL7v2-Speichern werden HL7v2-Nachrichten gespeichert.

Die Ressource HL7V2Store bietet eine Darstellung der Attribute eines HL7v2-Speichers. Bei jedem HL7v2-Speicher haben Sie verschiedene Optionen, z. B. zu den folgenden Punkten:

  • Gibt an, ob Änderungen im HL7v2-Speicher (z. B. wenn Ihre Anwendung eine neue Nachricht erhält) in einem Pub/Sub-Thema veröffentlicht werden sollen.
  • Wie Nachrichten, die in einen HL7v2-Speicher aufgenommen wurden, geparst werden sollen

HL7v2-Nachrichten

HL7v2-Nachrichten im Rohformat können schwer lesbar sein. Betrachten Sie zum Beispiel die folgende Nachricht:

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|

Die Cloud Healthcare API kann:

  1. Nachrichten parsen.
  2. Mehrere Felder aus dem Nachrichten-Header-Segment (MSH) extrahieren, um die Filterung zu ermöglichen.
  3. Den Inhalt der Nachricht als JSON-Daten für die weitere Verarbeitung oder den Datenaustausch darstellen.

Die Ressource Message bietet eine Darstellung einer HL7v2-Nachricht. Sie enthält unter anderem folgende Informationen:

  • Eine Angabe zur Erstellungszeit der Nachricht
  • Wer die Nachricht erstellt hat
  • Welche Daten die Nachricht enthält

Die Ressource Message für die obige Nachricht sieht so aus:

{
  "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"
        }
      }
    ]
  }
}

Nachrichten erstellen und aufnehmen

Sie können HL7v2-Nachrichten mit den folgenden Methoden in einem HL7v2-Speicher speichern:

  • messages.create: Erstellt eine Message-Ressource und speichert sie im HL7v2-Speicher. Die Antwort dieser Methode enthält den Nachrichtentext.

  • messages.ingest: Nimmt eine Message-Ressource auf und speichert sie im HL7v2-Speicher. Die Antwort dieser Methode enthält den Nachrichtentext und ein Bestätigungsfeld hl7ack, das bestätigt, dass die Nachricht akzeptiert wurde.

    Beachten Sie die folgenden wichtigen Informationen zum Wert des Felds hl7ack:

    • Der Wert enthält einen Antworttyp. Der Antworttyp AA gibt Application Accept an, was bedeutet, dass die Nachricht validiert und erfolgreich aufgenommen wurde.
    • Die Sende- und die Empfangseinrichtung werden getauscht.
    • Der Wert enthält die Kontroll-ID der ursprünglichen Nachricht.

Wenn Ihre Anwendung eine ACK-Antwort erfordert, verwenden Sie messages.ingest. Wenn Ihre Anwendung keine ACK-Antwort erfordert, verwenden Sie messages.create. ACK-Antworten werden nicht in HL7v2-Speichern gespeichert.

Wenn Sie eine HL7v2-Nachricht erstellen oder aufnehmen, wird der Nachricht vom Server eine ID zugewiesen. Sie können diese ID beim Bearbeiten der Nachricht verwenden, z. B. zum Löschen der Nachricht oder zum Kennzeichnen der Nachricht mit benutzerdefinierten Labels.

MLLP und der Google Cloud MLLP-Adapter

Das minimale Layer-Protokoll (MLLP) ist der Standard zum Übertragen von HL7v2-Nachrichten über TCP/IP-Verbindungen innerhalb eines Netzwerks, z. B. eines Krankenhauses.

MLLP bietet keine exakte Zuordnung zur Cloud Healthcare API HL7v2 REST API, die HTTP verwendet. Daher muss ein MLLP-Adapter verwendet werden, um über MLLP übertragene Nachrichten in ein Format umzuwandeln, das von einer HTTP/REST API akzeptiert wird. Um Nachrichten über MLLP und dann an die Cloud Healthcare API zu übertragen, verwenden Sie den MLLP-Adapter von Google Cloud. Eine Anleitung zur Verwendung dieses MLLP-Adapters finden Sie unter HL7v2-Nachrichten über TCP/IP-Verbindungen übertragen.

Wenn Ihre Anwendung erfordert, dass eine vertrauenswürdige Instanz die HL7v2-Nachricht signiert, verwenden Sie den MLLP-Adapter für die Binärautorisierung. Eine Anleitung zur Verwendung dieses MLLP-Adapters finden Sie unter HL7v2-Nachrichten über TCP/IP-Verbindungen mit Binärautorisierung übertragen.

Die HL7v2-Nachrichten werden vom Adapter nicht geparst oder überprüft; die Cloud Healthcare API analysiert und validiert die Nachrichten, wenn sie in einen HL7v2-Speicher aufgenommen werden. Anschließend können Sie die Nachricht weiter validieren, indem Sie sie sehen oder für die Analyse mit Labels versehen.

Während der Ausführung des Adapters bleibt der langlebige TCP-Verbindung zwischen dem Caret-Systemnetzwerk und dem Adapter geöffnet. Außerdem wird ein TCP-Socket zum Akzeptieren von HL7v2-Nachrichten über MLLP verfügbar gemacht. Der Adapter bestimmt die Grenzen der Nachrichten, indem die Start- und Endblock-Byte jeder Nachricht erkannt wird, wie im MLLP-Standard definiert.

Wenn der MLLP-Adapter eine HL7v2-Nachricht vom Pflegesystem über die TCP-Verbindung empfängt, wird die Nachricht in den HL7v2-Speicher aufgenommen. Der Speicher antwortet dann synchron mit dem MLLP-Adapter entweder mit ACK oder NACK. Ein ACK wird gesendet, wenn die Nachricht ordnungsgemäß formatiert ist und ein gültiges Header-Segment hat. Der MLLP-Adapter sendet die Antwort ACK oder NACK an das Caret-System.

Der MLLP-Adapter kann auch ein Pub/Sub-Abo überwachen, das mit dem HL7v2-Speicher verknüpft ist. Wenn eine HL7v2-Nachricht erstellt oder in den Speicher aufgenommen wird, empfängt der MLLP-Adapter die Benachrichtigung und veröffentlicht die Nachricht im Pflegesystem.

MLLP und Sicherheit

MLLP unterstützt keine native Verschlüsselung oder Authentifizierung. Daher sollte eine TCP-Verbindung, die MLLP verwendet, in eine sichere Verbindung mit einem virtuellen privaten Netzwerk (VPN) eingebunden werden. Mit Cloud VPN können Sie eine sichere Verbindung zwischen dem GKE-Cluster, auf dem der MLLP-Adapter ausgeführt wird, und Ihrer lokalen Anwendung erstellen. Weitere Informationen finden Sie unter Cloud VPN konfigurieren.

HL7v2, MLLP und Pub/Sub

Ein grundlegender Aspekt der Verwendung von HL7v2 mit der Cloud Healthcare API ist die Konfiguration von Pub/Sub-Benachrichtigungen. Durch die Verwendung einer Abonnentenanwendung mit Pub/Sub können Sie Benachrichtigungen erhalten, wenn eine HL7v2-Nachricht erstellt oder in einen HL7v2-Speicher aufgenommen wird.

Unter Pub/Sub-Benachrichtigungen konfigurieren erfahren Sie, wie Sie Pub/Sub-Themen mit der Cloud Healthcare API-HL7v2-Implementierung verwenden.

HL7v2-, MLLP- und Google Cloud-Architektur

Das folgende Diagramm zeigt, wie eine HL7v2-Nachricht von einem Caret-System gesendet und in die Cloud Healthcare API aufgenommen wird. Der MLLP-Adapter wird in Google Kubernetes Engine bereitgestellt und die Nachricht wird über ein VPN mit Cloud VPN übertragen. Nach der Aufnahme erhält eine Abonnentenanwendung, die das Pub/Sub-Thema des HL7v2-Speichers abonniert hat, eine Benachrichtigung, dass die Nachricht aufgenommen wurde. Die Cloud Healthcare API generiert auch einen ACK für den MLLP-Adapter und sendet sie über den VPN-Tunnel zurück an das Pflegesystem.

Die vom Pflegesystem gesendete HL7v2-Nachricht ist eine "ADT"-Nachricht, die in HL7v2 üblich ist. Wenn ein Pflegesystem eine ADT-Nachricht sendet, erwartet es nicht, dass eine neue Nachricht generiert und vom Remote-/lokalen System zurückgegeben wird.

mllp_adapter

Das Diagramm zeigt Folgendes:

  1. Das lokale Pflegesystem.
  2. Eine ADT HL7v2-Nachricht verlässt das Caret-System.
  3. Die HL7v2-Nachricht wird über den MLLP-Adapter in einen HL7v2-Speicher aufgenommen.
  4. Das konfigurierte Pub/Sub-Thema des HL7v2-Speichers erhält eine Benachrichtigung, dass eine Nachricht aufgenommen wurde.
  5. Eine Abonnentenanwendung wartet auf Benachrichtigungen über die Aufnahme von HL7v2-Nachrichten aus ihrem Pub/Sub-Thema.