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 (ad esempio se 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. Estrarre diversi campi dal segmento dell'intestazione del messaggio (MSH) per consentire la funzione di filtro.
  3. Rappresenta il contenuto del messaggio sotto forma di dati JSON per ulteriori attività di elaborazione o per lo scambio di dati.

La risorsa 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

Puoi 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.

    Di seguito si riportano alcune informazioni importanti sul 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, utilizza messages.ingest. Se la tua applicazione non richiede una risposta ACK, utilizza messages.create. ACK Le risposte non vengono memorizzate 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 REST HL7v2 dell'API Cloud Healthcare, che utilizza HTTP. Pertanto, è necessario utilizzare un adattatore MLLP per convertire i messaggi trasmessi tramite MLLP in un formato accettato da un'API HTTP/REST. Per trasmettere i messaggi tramite MLLP e poi all'API Cloud Healthcare, utilizza l'adattatore MLLP di Google Cloud. Per un tutorial sull'utilizzo di questo adattatore MLLP, consulta Trasmissione di messaggi HL7v2 su connessioni TCP/IP.

Se la tua applicazione richiede che un'autorità attendibile firmi il messaggio HL7v2, utilizza l'adattatore MLLP di autorizzazione binaria di Google Cloud. Per un tutorial sull'utilizzo di questo adattatore MLLP, consulta 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 visualizzandolo o etichettandolo per l'analisi.

Durante l'esecuzione, l'adattatore mantiene aperta una connessione TCP di lunga durata tra la rete del sistema di assistenza e l'adattatore. Espone inoltre una presa TCP per accettare messaggi HL7v2 tramite MLLP. L'adattatore determina i confini dei messaggi rilevando i byte di inizio e di fine di ciascun messaggio, come definito nello standard MLLP.

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

L'adattatore MLLP può anche ascoltare un abbonamento Pub/Sub associato allo spazio di archiviazione 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 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 di sottoscrizione 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.

HL7v2, MLLP e architettura di Google Cloud

Il seguente diagramma mostra come un messaggio HL7v2 viene inviato da un sistema di assistenza e importato nell'API Cloud Healthcare. L'adattatore MLLP viene implementato in Google Kubernetes Engine e il messaggio viene trasmesso tramite una VPN utilizzando Cloud VPN. Dopo l'importazione, un'applicazione sottoscrittore abbonata all'argomento Pub/Sub dell'archivio HL7v2 riceve una notifica che indica che il messaggio è stato importato. L'API Cloud Healthcare genera anche un messaggio ACK per l'adattatore MLLP e lo invia di nuovo tramite il tunnel VPN nel sistema di assistenza.

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 dal sistema remoto/on-premise.

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.