HL7v2

Health Level Seven International Version 2 (HL7v2) è un formato di messaggistica clinica che fornisce dati sugli eventi che si verificano all'interno di un'organizzazione.

Per ulteriori dettagli su HL7v2, consulta la documentazione per la suite di prodotti HL7 Version 2.

Archivi HL7v2

Un archivio HL7v2 è un datastore che si trova all'interno di un set di dati. Gli archivi HL7v2 contengono messaggi HL7v2.

La risorsa HL7V2Store fornisce una rappresentazione degli attributi di un archivio HL7v2. Per ogni archivio HL7v2 puoi scegliere ad esempio:

  • Se pubblicare le modifiche all'archivio HL7v2 (se, ad esempio, l'applicazione riceve un nuovo messaggio) in un argomento Pub/Sub.
  • Come analizzare i messaggi importati in un archivio HL7v2.

Messaggi HL7v2

I messaggi HL7v2 non elaborati possono essere difficili da leggere. Ad esempio, analizziamo il seguente messaggio:

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|

L'API Cloud Healthcare può:

  1. Analizza un messaggio.
  2. Estrai diversi campi dal segmento dell'intestazione del messaggio (MSH) per consentire l'applicazione di filtri.
  3. Rappresentare i contenuti del messaggio come dati JSON per l'ulteriore elaborazione o lo scambio di dati.

La Message fornisce una rappresentazione di un messaggio HL7v2. Sono incluse informazioni quali:

  • L'ora in cui è stato creato il messaggio
  • Chi ha creato il messaggio
  • Quali dati contiene il messaggio

La risorsa Message per il messaggio precedente ha il seguente aspetto:

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

Creazione e importazione dei messaggi

È possibile archiviare i messaggi HL7v2 in un archivio HL7v2 utilizzando i seguenti metodi:

  • messages.create: crea una risorsa Message e la memorizza nell'archivio HL7v2. La risposta di questo metodo contiene il corpo del messaggio.

  • messages.ingest: importa una risorsa Message e la memorizza nell'archivio HL7v2. La risposta di questo metodo contiene il corpo del messaggio e un campo di conferma, hl7ack, che verifica l'accettazione del messaggio.

    Prendi in considerazione le seguenti informazioni importanti il valore del campo hl7ack:

    • Il valore contiene un tipo di risposta. Un tipo di risposta AA indica Application Accept, ovvero che il messaggio è stato convalidato e importato correttamente.
    • La struttura che invia il messaggio e quella che lo riceve sono invertite.
    • Il valore contiene l'ID di controllo del messaggio originale.

Se la tua applicazione richiede una risposta ACK, usa messages.ingest. Se le tue l'applicazione non richiede una risposta ACK, usa messages.create. ACK le risposte non sono persistenti negli archivi HL7v2.

Al momento di creare o importare un messaggio HL7v2, il server assegna un ID al messaggio. Puoi utilizzare questo ID durante l'interazione con il messaggio, ad esempio per eliminarlo o aggiungervi etichette definite dall'utente.

MLLP e l'adattatore MLLP di Google Cloud

Il protocollo di livello inferiore minimo (MLLP) è lo standard utilizzato per trasmettere messaggi HL7v2 su connessioni TCP/IP all'interno di una rete, ad esempio un ospedale.

MLLP non offre una mappatura esatta all'API Cloud Healthcare API REST HL7v2, che utilizza HTTP. Per convertire i messaggi è quindi necessario usare un adattatore MLLP trasmessi tramite MLLP in un formato accettato da un'API HTTP/REST. Per trasmettere messaggi tramite MLLP e quindi all'API Cloud Healthcare, utilizza l'adattatore MLLP di Google Cloud. Per un tutorial sull'uso di questo adattatore MLLP, vedi Trasmissione di messaggi HL7v2 tramite connessioni TCP/IP.

Se la tua applicazione richiede che un fornitore firma il messaggio HL7v2, utilizza l'adattatore MLLP di Autorizzazione binaria di Google Cloud. Per un tutorial sull'uso di questo adattatore MLLP, vedi Trasmissione di messaggi HL7v2 su connessioni TCP/IP con Autorizzazione binaria.

L'adattatore non analizza né ispeziona i messaggi HL7v2. L'API Cloud Healthcare analizza e convalida i messaggi durante l'importazione in un archivio HL7v2. Puoi quindi eseguire un'ulteriore convalida del messaggio visualizzazione o l'etichettatura per l'analisi.

Durante l'esecuzione, l'adattatore mantiene aperta una connessione TCP di lunga durata tra rete del sistema di assistenza sanitaria e l'adattatore. Espone inoltre un socket TCP per accettare Messaggi HL7v2 su MLLP. L'adattatore determina i confini dei messaggi rilevando i byte dei blocchi iniziali e finali di ciascun messaggio, come definito Standard MLLP.

Quando l’adattatore MLLP riceve un messaggio HL7v2 dal sistema di assistenza tramite TCP, importa il messaggio nell'archivio HL7v2. Il negozio risponde quindi in modo sincrono all'adattatore MLLP con ACK o NACK. ACK viene inviato se il messaggio ha un formato corretto e un segmento di intestazione valido. La L'adattatore MLLP invia la risposta ACK o NACK al sistema di assistenza sanitaria.

L'adattatore MLLP può anche ascoltare una sottoscrizione Pub/Sub associata con l'archivio HL7v2. Quando un messaggio HL7v2 viene creato o importato nell'archivio, l'adattatore MLLP riceve la notifica e pubblica il messaggio nel sistema di assistenza.

MLLP e sicurezza

MLLP non supporta in modo nativo alcuna crittografia o autenticazione. Pertanto, una connessione TCP che utilizza MLLP deve essere racchiusa in una connessione sicura che utilizza una rete privata virtuale (VPN). Puoi utilizzare Cloud VPN per creare una connessione sicura tra il cluster GKE su cui viene eseguito l'adattatore MLL e la tua applicazione on-premise. Per ulteriori informazioni, consulta Configurare Cloud VPN.

HL7v2, MLLP e Pub/Sub

Un aspetto fondamentale dell'utilizzo di HL7v2 con l'API Cloud Healthcare riguarda la configurazione delle notifiche Pub/Sub. Utilizzando un'applicazione sottoscrittore con Pub/Sub, puoi ricevere notifiche quando un messaggio HL7v2 viene creato o importato in un archivio HL7v2.

Leggi Configurazione delle notifiche Pub/Sub per scoprire come utilizzare gli argomenti Pub/Sub con l'implementazione HL7v2 dell'API Cloud Healthcare.

Architettura HL7v2, MLLP e Google Cloud

Il seguente diagramma mostra come un messaggio HL7v2 viene inviato da un sistema di assistenza e importati nell'API Cloud Healthcare. Viene eseguito il deployment dell'adattatore MLLP Google Kubernetes Engine e il messaggio viene trasmesso su una usando Cloud VPN. Dopo l'importazione, un'applicazione dell'abbonato ha sottoscritto all'argomento Pub/Sub dell'archivio HL7v2 riceve una notifica che il messaggio è stato importato. L'API Cloud Healthcare genera anche ACK per l'adattatore MLLP e lo restituisce attraverso il tunnel VPN e nel sistema di assistenza sanitaria.

Il messaggio HL7v2 inviato dal sistema di assistenza è un messaggio "ADT", che è un messaggio comune in HL7v2. Quando un sistema di assistenza invia un messaggio ADT, non si aspetta che venga generato e restituito un nuovo messaggio dalla rete remota/on-premise di un sistema operativo completo.

mllp_adapter

Il diagramma mostra quanto segue:

  1. Il sistema di assistenza on-premise.
  2. Un messaggio ADT HL7v2 esce dal sistema di assistenza.
  3. Il messaggio HL7v2 viene importato tramite l'adattatore MLLP in un archivio HL7v2.
  4. L'argomento Pub/Sub configurato dell'archivio HL7v2 riceve una notifica che indica che è stato importato un messaggio.
  5. Un'applicazione sottoscrittore rimane in ascolto delle notifiche relative all'importazione di messaggi HL7v2 dal proprio argomento Pub/Sub.