O Health Level Seven International versão 2 (HL7v2) é um formato de mensagens médicas que fornece dados sobre eventos que ocorrem dentro de uma organização.
Consulte a documentação do pacote de produtos HL7 versão 2 para mais detalhes sobre HL7v2.
Armazenamentos HL7v2
Um armazenamento HL7v2 é um armazenamento de dados que reside em um conjunto de dados. Os armazenamentos HL7v2 estocam mensagens HL7v2.
O recurso HL7V2Store
fornece uma representação dos atributos de um armazenamento HL7v2. Para cada um dos armazenamentos HL7v2, é possível escolher opções como:
- Se as alterações serão publicadas no armazenamento HL7v2 (se, por exemplo, o aplicativo receber uma nova mensagem) em um tópico do Pub/Sub.
- Como analisar mensagens ingeridas em um armazenamento HL7v2.
Mensagens HL7v2
As mensagens HL7v2 brutas podem ser difíceis de ler. Por exemplo, veja 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 API Cloud Healthcare pode realizar as seguintes ações:
- Analisar uma mensagem.
- Extrair vários campos do segmento de cabeçalho da mensagem (MSH, na sigla em inglês) para permitir a filtragem.
- Representar o conteúdo da mensagem como dados JSON para processamento ou troca de dados.
O recurso Message
fornece uma representação de uma mensagem HL7v2. Ele inclui informações como:
- a hora em que a mensagem foi criada;
- quem criou a mensagem;
- quais dados a mensagem contém.
O recurso Message
da mensagem anterior tem esta aparência:
{ "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" } } ] } }
Como criar e ingerir mensagens
É possível armazenar mensagens HL7v2 em um armazenamento HL7v2 usando os seguintes métodos:
messages.create
: cria um recursoMessage
e o salva no armazenamento HL7v2. A resposta desse método contém o corpo da mensagem.messages.ingest
: ingere um recursoMessage
e o salva no armazenamento HL7v2. A resposta desse método contém o corpo da mensagem e um campo de confirmação,hl7ack
, que verifica se a mensagem foi aceita.Observe as seguintes informações importantes sobre o valor do campo
hl7ack
:- O valor contém um tipo de resposta. Um tipo de resposta
AA
indicaApplication Accept
, o que significa que a mensagem foi validada e ingerida. - As instalações de envio e de recebimento são revertidas.
- O valor contém o ID de controle da mensagem original.
- O valor contém um tipo de resposta. Um tipo de resposta
Se o aplicativo exigir uma resposta ACK
, use messages.ingest
. Se o aplicativo não exigir uma resposta ACK
, use messages.create
. As respostas ACK
não são mantidas em armazenamentos HL7v2.
Quando você cria ou ingere uma mensagem HL7v2, a mensagem recebe um código pelo servidor. É possível usar esse código ao interagir com a mensagem. Por exemplo, para excluir a mensagem ou aplicar rótulos definidos pelo usuário.
MLLP e o adaptador MLLP do Google Cloud
O protocolo mínimo de camada inferior (MLLP, na sigla em inglês) é o padrão usado para transmitir mensagens HL7v2 por conexões TCP/IP em uma rede, como um hospital.
O MLLP não oferece um mapeamento exato para a API REST HL7v2 da API Cloud Healthcare, que usa HTTP. Portanto, um adaptador MLLP precisa ser usado para converter mensagens transmitidas por MLLP em um formato que uma API HTTP/REST possa aceitar. Para transmitir mensagens pela MLLP e depois para a API Cloud Healthcare, use o adaptador MLLP do Google Cloud. Para um tutorial usando esse adaptador MLLP, consulte Como transmitir mensagens HL7v2 por conexões TCP/IP.
Se o aplicativo exigir que uma autoridade confiável assine a mensagem HL7v2, use o Adaptador MLLP de autorização binária do Google Cloud. Para um tutorial usando esse adaptador MLLP, consulte Como transmitir mensagens HL7v2 por conexões TCP/IP com autorização binária.
O adaptador não analisa nem inspeciona as mensagens HL7v2. A API Cloud Healthcare analisa e valida as mensagens conforme elas são ingeridas em um armazenamento HL7v2. Em seguida, é possível fazer mais validações na mensagem visualizando-a ou rotulando-a para análise.
Enquanto é executado, o adaptador mantém uma conexão TCP de longa duração aberta entre a rede do sistema de atendimento e o adaptador. Ele também expõe um soquete TCP para aceitar mensagens HL7v2 sobre MLLP. O adaptador determina os limites da mensagem detectando os bytes do bloco inicial e final de cada mensagem, conforme definido no padrão MLLP.
Quando o adaptador MLLP recebe uma mensagem HL7v2 do sistema de atendimento pela conexão TCP, ele ingere a mensagem no armazenamento HL7v2. Em seguida, o armazenamento responde de forma síncrona ao adaptador MLLP com ACK
ou NACK
. Um ACK
será enviado se a mensagem for formada corretamente e tiver um segmento de cabeçalho válido. O adaptador MLLP envia a resposta ACK
ou NACK
para o sistema de atendimento.
O adaptador MLLP também pode detectar uma assinatura do Pub/Sub associada ao armazenamento HL7v2. Quando uma mensagem HL7v2 é criada ou ingerida no armazenamento, o adaptador MLLP recebe a notificação e publica a mensagem no sistema de atendimento.
MLLP e segurança
O MLLP não é compatível com nenhuma criptografia ou autenticação. Portanto, uma conexão TCP que usa o MLLP precisa ser encapsulada em uma conexão segura usando uma rede privada virtual (VPN). É possível usar o Cloud VPN para criar uma conexão segura entre o cluster do GKE em que o adaptador MLLP é executado e o aplicativo local. Para mais informações, consulte Como configurar o Cloud VPN.
HL7v2, MLLP e Pub/Sub
Um aspecto fundamental do uso do HL7v2 com a API Cloud Healthcare envolve a configuração de notificações do Pub/Sub. Ao usar um aplicativo de assinatura com o Pub/Sub, é possível receber notificações quando uma mensagem HL7v2 é criada ou ingerida em um armazenamento HL7v2.
Leia Como configurar notificações do Pub/Sub para ver como usar tópicos do Pub/Sub com a implementação HL7v2 da API Cloud Healthcare.
Arquitetura HL7v2, MLLP e Google Cloud
O diagrama a seguir mostra como uma mensagem HL7v2 é enviada de um sistema de saúde e ingerida na API Cloud Healthcare. O adaptador MLLP é implantado no Google Kubernetes Engine e a mensagem é transmitida por uma VPN usando o Cloud VPN. Após a ingestão, um aplicativo de assinatura inscrito no tópico Pub/Sub da loja HL7v2 recebe uma notificação de que a mensagem foi ingerida. A API Cloud Healthcare também gera um ACK
para o adaptador MLLP e o envia de volta pelo túnel da VPN para o sistema de atendimento.
A mensagem HL7v2 enviada do sistema de atendimento é uma mensagem "ADT", que é uma mensagem comum no HL7v2. Quando um sistema de atendimento envia uma mensagem ADT, ele não espera que uma nova mensagem seja gerada e retornada do sistema remoto/local.
O diagrama mostra o seguinte fluxo:
- O sistema de atendimento no local.
- Uma mensagem ADT HL7v2 sai do sistema de atendimento.
- A mensagem HL7v2 é ingerida por meio do adaptador MLLP em um armazenamento HL7v2.
- O tópico do Pub/Sub configurado pelo armazenamento HL7v2 recebe uma notificação de que uma mensagem foi ingerida.
- Um aplicativo de assinatura detecta notificações de ingestão de mensagens HL7v2 do tópico do Pub/Sub.