HL7v2

A versão 2 da Health Level Seven International (HL7v2) é um formato de mensagens clínicas que fornece dados sobre eventos que ocorrem numa organização.

Consulte a documentação do conjunto de produtos da versão 2 do HL7 para obter mais detalhes sobre o HL7v2.

Armazenamentos de HL7v2

Um armazenamento de HL7v2 é um armazenamento de dados que reside num conjunto de dados. Os armazenamentos de HL7v2 contêm mensagens HL7v2.

O recurso HL7V2Store fornece uma representação dos atributos de um armazenamento de HL7v2. Para cada um dos seus armazenamentos de HL7v2, pode escolher opções como:

  • Se deve publicar alterações na loja HL7v2 (se, por exemplo, a sua aplicação receber uma nova mensagem) num tópico do Pub/Sub.
  • Como analisar mensagens carregadas num armazenamento de HL7v2.

Mensagens HL7v2

As mensagens HL7v2 não processadas podem ser difíceis de ler. Por exemplo, considere a seguinte mensagem:

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|

A Cloud Healthcare API pode:

  1. Analise uma mensagem.
  2. Extração de vários campos do segmento de cabeçalho da mensagem (MSH) para permitir a filtragem.
  3. Representar o conteúdo da mensagem como dados JSON para processamento adicional ou troca de dados.

O recurso Message fornece uma representação de uma mensagem HL7v2. Inclui informações como:

  • A hora em que a mensagem foi criada
  • Quem criou a mensagem
  • Que dados a mensagem contém

O recurso Message para a mensagem anterior tem o seguinte aspeto:

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

Criar e carregar mensagens

Pode armazenar mensagens HL7v2 num armazenamento HL7v2 através dos seguintes métodos:

  • messages.create: cria um recurso Message e armazena-o no armazenamento de HL7v2. A resposta deste método contém o corpo da mensagem.

  • messages.ingest: carrega um recurso Message e armazena-o no armazenamento de HL7v2. A resposta deste método contém o corpo da mensagem e um campo de confirmação, hl7ack, que verifica se a mensagem foi aceite.

    Tenha em atenção as seguintes informações importantes acerca do valor do campo hl7ack:

    • O valor contém um tipo de resposta. Um tipo de resposta AA indica que Application Accept, o que significa que a mensagem foi validada e carregada com êxito.
    • A instalação de envio e a instalação de receção estão invertidas.
    • O valor contém o ID de controlo da mensagem original.

Se a sua aplicação precisar de uma resposta ACK, use messages.ingest. Se a sua aplicação não exigir uma resposta ACK, use messages.create. ACK As respostas não são mantidas nos armazenamentos de HL7v2.

Quando cria ou carrega uma mensagem HL7v2, é atribuído um ID à mensagem pelo servidor. Pode usar este ID quando interagir com a mensagem (por exemplo, para eliminar a mensagem ou etiquetá-la com etiquetas definidas pelo utilizador).

MLLP e o Google Cloud adaptador MLLP

O protocolo de camada inferior mínimo (MLLP) é a norma usada para transmitir mensagens HL7v2 através de ligações TCP/IP numa rede, como um hospital.

O MLLP não oferece um mapeamento exato para a API Cloud Healthcare API REST HL7v2, que usa HTTP. Por conseguinte, tem de usar um adaptador MLLP para converter mensagens transmitidas através de MLLP num formato que uma API HTTP/REST possa aceitar. Para transmitir mensagens através do MLLP e, em seguida, para a Cloud Healthcare API, use o adaptador MLLP do Google Cloud. Para ver um tutorial que usa este adaptador MLLP, consulte o artigo Transmissão de mensagens HL7v2 através de ligações TCP/IP.

Se a sua aplicação exigir que uma autoridade fidedigna assine a mensagem HL7v2, use o adaptador MLLP de autorização binária do Google Cloud. Para um tutorial que use este adaptador MLLP, consulte o artigo Transmitir mensagens HL7v2 através de ligações TCP/IP com autorização binária.

O adaptador não analisa nem inspeciona as mensagens HL7v2. A Cloud Healthcare API analisa e valida as mensagens à medida que são carregadas num armazenamento HL7v2. Em seguida, pode fazer uma validação adicional da mensagem visualizando-a ou etiquetando-a para análise.

Enquanto está em execução, o adaptador mantém uma ligação TCP de longa duração aberta entre a rede do sistema de cuidados e o adaptador. Também expõe um socket TCP para aceitar mensagens HL7v2 através de MLLP. O adaptador determina os limites das mensagens detetando os bytes de bloco de início e fim de cada mensagem, conforme definido na norma MLLP.

Quando o adaptador MLLP recebe uma mensagem HL7v2 do sistema de cuidados através da ligação TCP, carrega a mensagem para o armazenamento HL7v2. Em seguida, a loja responde de forma síncrona ao adaptador MLLP com ACK ou NACK. É enviado um ACK se a mensagem estiver corretamente formada e tiver um segmento de cabeçalho válido. O adaptador MLLP envia a resposta ACK ou NACK ao sistema de cuidados.

O adaptador MLLP também pode ouvir uma subscrição do Pub/Sub associada à loja HL7v2. Quando uma mensagem HL7v2 é criada ou carregada para o armazenamento, o adaptador MLLP recebe a notificação e publica a mensagem no sistema de cuidados.

MLLP e segurança

O MLLP não suporta nativamente nenhuma encriptação nem autenticação. Por conseguinte, uma ligação TCP que use MLLP deve ser envolvida numa ligação segura através de uma rede privada virtual (VPN). Pode usar o Cloud VPN para criar uma ligação segura entre o cluster do GKE no qual o adaptador MLLP é executado e a sua aplicação no local. Para mais informações, consulte o artigo Configurar a Cloud VPN.

HL7v2, MLLP e Pub/Sub

Um aspeto fundamental da utilização do HL7v2 com a Cloud Healthcare API envolve a configuração de notificações do Pub/Sub. Ao usar uma aplicação de subscrição com o Pub/Sub, pode receber notificações quando uma mensagem HL7v2 é criada ou carregada para um arquivo HL7v2.

Leia o artigo Configurar notificações do Pub/Sub para ver como usar tópicos do Pub/Sub com a implementação HL7v2 da Cloud Healthcare API.

HL7v2, MLLP e Google Cloud arquitetura

O diagrama seguinte mostra como uma mensagem HL7v2 é enviada de um sistema de cuidados e carregada na Cloud Healthcare API. O adaptador MLLP é implementado no Google Kubernetes Engine e a mensagem é transmitida através de uma VPN com a VPN do Google Cloud. Após o carregamento, uma aplicação subscritora subscrita no tópico Pub/Sub da loja HL7v2 recebe uma notificação de que a mensagem foi carregada. A Cloud Healthcare API também gera um ACK para o adaptador MLLP e envia-o de volta através do túnel VPN e para o sistema de cuidados.

A mensagem HL7v2 enviada a partir do sistema de cuidados é uma mensagem "ADT", que é uma mensagem comum no HL7v2. Quando um sistema de cuidados envia uma mensagem ADT, não espera que seja gerada e devolvida uma nova mensagem do sistema remoto/no local.

mllp_adapter

O diagrama mostra o seguinte:

  1. O sistema de cuidados nas instalações.
  2. Uma mensagem ADT HL7v2 sai do sistema de cuidados.
  3. A mensagem HL7v2 é carregada através do adaptador MLLP para um armazenamento de HL7v2.
  4. O tópico do Pub/Sub configurado do arquivo HL7v2 recebe uma notificação de que uma mensagem foi carregada.
  5. Uma aplicação subscritora ouve as notificações de carregamentos de mensagens HL7v2 do respetivo tópico do Pub/Sub.