Ir para o conteúdo principal

Envio de requisições/solicitações e cancelamento de coletas

Atenção: Esse capítulo é uma transcrição do arquivo original enviado pela empresa responsável pelo Sistema de Gestão Pública de Saúde, para acessar o documento original na integra realize o download abaixo

Integração laboratório - Envio de Solicitação.pdf

Objetivo do documento

Este manual de interoperabilidade tem como objetivo permitir que as empresas responsáveis pelos sistemas de laboratórios terceirizados desenvolvam drivers de comunicação capazes de receber requisições de exames, assim como o cancelamento das mesmas, provenientes do sistema de gestão em saúde pública.

Com essa integração, o laboratório contratado terá acesso rápido e automatizado às informações disponibilizadas pelo cliente, o que agilizará significativamente as atividades laboratoriais do dia a dia.

Detalhes Técnicos

Pré-requisitos

    • É necessário que o sistema do laboratório terceirizado seja capaz de receber a requisição do SIS, utilizando os protocolos REST ou SOAP. O protocolo REST é mais leve e utiliza métodos HTTP para interação com recursos, enquanto o protocolo SOAP é mais estruturado e utiliza XML para definir a estrutura da mensagem. A escolha entre REST e SOAP dependerá das necessidades específicas do projeto e das capacidades do sistema de laboratório terceirizado.
    • No caso em que a instalação local do software de laboratório terceirizado não possui um endereço de entrada externo, é necessário acionar a equipe técnica da Vivver para estabelecer uma rede VPN. Essa VPN permitirá a conexão com o host do laboratório, viabilizando a comunicação segura entre os sistemas. Dessa forma, mesmo sem um endereço externo, a integração poderá ser realizada de forma adequada.
    • Em casos onde a aplicação estiver com instalação local, e for necessário o uso da VPN, o endpoint do laboratório terceiro deve estar preparado para receber as requisições através da porta 7001.
    • No caso da utilização da VPN, deverá ser parametrizado no SIS o host do certificado utilizado na VPN onde o software de laboratório terceirizado está localizado.
    • O cliente deve parametrizar as unidades de saúde que enviarão os dados de solicitação de exames. Caso essa parametrização não seja realizada, nenhuma unidade enviará automaticamente os dados de solicitação de exames.
    • A unidade de saúde deve criar e recepcionar a solicitação de exames, incluindo os respectivos exames que serão integrados, para que a transmissão seja realizada via webservice.

Envio de requisições - Fluxo simplificado

Após o alinhamento dos códigos do laboratório terceiro e a ativação do serviço para a unidade específica, no momento em que a coleta de amostras dos exames for registrada, as solicitações serão enviadas para uma fila de transmissão interna. Em um curto intervalo de tempo, as solicitações da fila serão transmitidas via webservice.

No processo de transmissão, o sistema Vivver aguardará o retorno do request dos exames para atualizar os dados nas respectivas solicitações. Isso garante que posteriormente, os resultados sejam recebidos e registrados corretamente, proporcionando a atualização dos dados pertinentes ao atendimento médico e à rotina laboratorial.

Endereço do Serviço

URL do Serviço: http://url_endpoint/InterfaceService.asmx ou host da VPN
Método HTTP: POST
SOAPAction: "ReceberPedido"
Content-Type: text/xml;charset=UTF-8

Definição do XML de envio de envio de requisição

CampoDescriçãoTipo do DadoTamanho
pedido_lab.ordem_servicoNúmero da solicitação de exames no Sistema de Gestão Pública de SaúdeNumérico13
pedido_lab.codigo_pedidoNúmero da solicitação de exames no Sistema de Gestão Pública de SaúdeNumérico13
pedido_lab.pedido.codigoNúmero da solicitação de exames no Sistema de Gestão Pública de SaúdeNumérico13
pedido_lab.pedido.ordem_servicoNúmero da solicitação de exames no Sistema de Gestão Pública de SaúdeNumérico13
pedido_lab.pedido.origemNome da unidade saúde que solicitou os examesTexto255
pedido_lab.pedido.profissionalNome do profissional da unidade de saúde que solicitou os examesTexto255
pedido_lab.pedido.ufconselhoUF do conselho do profissional que solicitou os examesTexto2
pedido_lab.pedido.orgaoemissorNome do órgão emissor do profissional solicitanteTexto255
pedido_lab.pedido.numconselhoNúmero do conselho do profissional solicitanteTexto13
pedido_lab.pedido.equipeNúmero INE da equipe em que o profissional solicitante está vinculadoNumérico10
pedido_lab.pedido.postoPosto de Coleta sugeridoTexto120
pedido_lab.pedido.urgenteIndica se o exame é urgente (S = Sim, N = Não)Texto1
pedido_lab.pedido.cnesUnidadeExecutanteCódigo CNES da unidade de saúde que executará o exame.Numérico7
pedido_lab.pedido.codconvenioCódigo do plano de saúde no sis relacionado a solicitaçãoNumérico3
pedido_lab.pedido.convenioDescrição do plano de saúde relacionado a solicitação.Texto255
pedido_lab.pedido.observacaoJustificativa da solicitaçãoTexto1400
pedido_lab.pedido.gestanteIndica se no momento da solciitação a paciente está gestante (S ou N).Texto1
pedido_lab.pedido.codcidCódigo do cid relacionado a solicitação.Texto4
pedido_lab.pedido.datahoraData e hora da solicitação YYYY-MM-DD HH:MM:SSTexto19
pedido_lab.paciente.codigoNúmero prontuário do paciente no Sistema de Gestão Pública de SaúdeNumérico13
pedido_lab.paciente.nomeNome do paciente no Sistema de Gestão Pública de SaúdeTexto120
pedido_lab.paciente.sexoSexo do paciente no Sistema de Gestão Pública de SaúdeTexto1
pedido_lab.paciente.dt_nascimentoData de nascimento do paciente no Sistema de Gestão Pública de Saúde - AA-MM-DDTexto8
pedido_lab.paciente.racaCódigo da raça/cor informada no cadastro do paciente:

BRANCA
PRETA
PARDA
AMARELA
INDIGENA
Numérico2
pedido_lab.paciente.etniaEnviada somente se a tag raca for 05, conforme tabela padrão do SUS.
O código enviado é uma referência ao código usado no eSUS : https://integracao.esusab.ufsc.br/ledi/documentacao/referencias/dicionario.html - Etnia
Texto4
pedido_lab.paciente.alturaAltura do paciente informada no momento da coletaNumérico3
pedido_lab.paciente.pesoPeso do paciente informado no momento da coletaNumérico3
pedido_lab.paciente.cnsNúmero do cartão nacional do SUS do pacienteNumérico15
pedido_lab.paciente.obscoletaObservação da coletaTexto255
pedido_lab.paciente.nomemaeNome da mãe do paciente no SISTexto255
pedido_lab.paciente.nomesocialNome social do paciente informado no SISTexto255
pedido_lab.paciente.enderecoEndereço de residência do pacienteTexto255
pedido_lab.paciente.cepCEP de residência do pacienteNumérico8
pedido_lab.paciente.telefoneTelefone principal do paciente informado no SISNumérico15
pedido_lab.paciente.emailE Mail do paciente preenchido no SISTexto255
pedido_lab.paciente.rgNúmero do documento de identidade do pacienteTexto20
pedido_lab.paciente.cpfNúmero CPF do pacienteNumérico11
pedido_lab.exames.exame.codigoCódigo do exame no Sistema de Gestão Pública de SaúdeNumérico10
pedido_lab.exames.exame.amostraID da amostra da solicitação / código de barras da amostraNumérico13
pedido_lab.exames.exame.amostras.amostra.amostra.cbarraID da amostra da solicitação / código de barras da amostraNumérico13
pedido_lab.exames.exame.descricaoDescrição do exame no Sistema de Gestão Pública de SaúdeNumérico70
pedido_lab.exame.recoletaIndica se houve registro de problema na coleta S ou NTexto1
pedido_lab.exame.codmotivorecoletaCódigo do motivo de problema na coleta quando existir recoleta for SNumérico3
pedido_lab.exame.desmotivorecoletaDescrição do motivo de problema na coleta quando recoleta for STexto255
pedido_lab.exames.exame.questionario.codigoPerguntaCódigo de identificação da pergunta do questionário respondido para o exameNumérico4
pedido_lab.exames.exame.questionario.perguntaDescrição da pergunta do questionárioTexto120
pedido_lab.exames.exame.questionario.respostaRespostas das perguntas do questionárioTexto120
pedido_lab.exames.anamnese.””tag_name””Este bloco traz os mesmos dados das tags questionário acima, porém em uma estrutura diferente, onde o campo tag_name parametrizado nas perguntas e seus respectivos valores são enviadas como tag do objeto anamnese.Texto120
pedido_lab.exames.exame.itens.item.codigoItemCódigo do item de resultado do exame no Sistema de Gestão Pública de SaúdeNumérico4
pedido_lab.exames.exame.itens.item.sglSigla do item de resultado do exame no Sistema de Gestão Pública de SaúdeTexto10
pedido_lab.exames.exame.itens.item.descricaoDescrição da sigla do item de resultado do exame no Sistema de Gestão Pública de SaúdeTexto70

Envio de requisição via cURL

 

# Envio de requisição via cURL
curl --location 'http://url_endpoint/InterfaceService.asmx' \
--header 'SOAPAction: ReceberPedido' \
--header 'Content-Type: text/xml;charset=UTF-8' \
--data 'PASTE_XML_HERE'
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns:viv="http://www.vivver.com.br"
                  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <viv:ReceberPedido>
            <pedidoLab>
                <ordemServico>2022060003391</ordemServico>
                <codigoPedido>2022060003391</codigoPedido>
                <identificador/>
                <usuarioWebId/>

                <pedido>
                    <codigo>2022060003391</codigo>
                    <ordemServico>2022060003391</ordemServico>
                    <origem>LABORATORIO MUNICIPA</origem>
                    <profissional>PROFISSIONAL TESTE</profissional>
                    <ufconselho>MG</ufconselho>
                    <orgaoemissor/>
                    <numconselho>99999</numconselho>
                    <equipe/>
                    <posto>LABORATORIO MUNICIPAL</posto>
                    <urgente>N</urgente>
                    <cnesUnidadeExecutante>9999999</cnesUnidadeExecutante>
                    <codconvenio xsi:nil="true"/>
                    <convenio xsi:nil="true"/>
                    <observacao/>
                    <gestante>N</gestante>
                    <codcid xsi:nil="true"/>
                    <datahora>2022-06-30 11:23</datahora>
                </pedido>

                <paciente>
                    <codigo>166906</codigo>
                    <nome>Teste um</nome>
                    <sexo>F</sexo>
                    <dtNascimento>2024-01-01</dtNascimento>
                    <raca>03</raca>
                    <etnia/>
                    <altura xsi:nil="true"/>
                    <peso xsi:nil="true"/>
                    <cns>999999999999999</cns>
                    <obscoleta xsi:nil="true"/>
                    <nomemae>Estrangeira</nomemae>
                    <nomesocial xsi:nil="true"/>
                    <endereco>RUA TESTE ,1, CENTRO, MUNICIPIO TESTE</endereco>
                    <cep>35599999</cep>
                    <telefone>99999999</telefone>
                    <email xsi:nil="true"/>
                    <rg/>
                    <cpf>99999999999</cpf>
                </paciente>

                <exames>
                    <exame>
                        <codigo>299</codigo>
                        <amostra>047860200108</amostra>

                        <amostras>
                            <amostra>
                                <cBarra>047860200108</cBarra>
                            </amostra>
                        </amostras>

                        <obsexame/>
                        <descricao>HEMATOCRITO</descricao>

                        <questionario>
                            <codigoPergunta>1</codigoPergunta>
                            <pergunta>teste 1</pergunta>
                            <resposta>10</resposta>

                            <codigoPergunta>2</codigoPergunta>
                            <pergunta>teste 2</pergunta>
                            <resposta>Sim</resposta>

                            <codigoPergunta>3</codigoPergunta>
                            <pergunta>teste 3</pergunta>
                            <resposta>["", "Não pratica"]</resposta>
                        </questionario>

                        <anamnese>
                            <teste1>10</teste1>
                            <teste2>S</teste2>
                            <teste3>N</teste3>
                        </anamnese>

                        <recoleta>N</recoleta>
                        <codmotivorecoleta xsi:nil="true"/>
                        <desmotivorecoleta xsi:nil="true"/>

                        <itens>
                            <item>
                                <codigoItem>1</codigoItem>
                                <sgl>HEMAT</sgl>
                                <descricao>HEMATOCRITO</descricao>
                            </item>
                            <item>
                                <codigoItem>999</codigoItem>
                                <sgl>IntExa</sgl>
                                <descricao>Integração Exame</descricao>
                            </item>
                        </itens>
                    </exame>
                </exames>
            </pedidoLab>
        </viv:ReceberPedido>
    </soapenv:Body>
</soapenv:Envelope>

Definição do XML esperado no response de envio de requisição

CampoDescriçãoTipo do DadoTamanho
ordemServicoCódigo da ordem de serviçoString50
codigoPedidoCódigo do pedido do clienteString50
exames.exame.codigoCódigo do exameString50
exames.exame.amostras.amostra.codig oBarraCódigo de barras
da amostra - não é obrigatório
String50
exames.exame.amostras.amostra.etique taDados da etiquetaString50
retornoSituação da geração do pedidoBoolean50
desErroDescrição da situaçãp geração do pedidoString50
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <ReceberPedidoResponse xmlns="http://www.vivver.com.br">
            <ReceberPedidoResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                <ordemServico>2023090000007</ordemServico>
                <codigoPedido>2023090000007</codigoPedido>

                <exames>
                    <exame>
                        <codigo>127</codigo>
                        <amostra>0121000208</amostra>
                    </exame>
                </exames>

                <retorno>true</retorno>
                <desErro i:nil="true"/>
            </ReceberPedidoResult>
        </ReceberPedidoResponse>
    </s:Body>
</s:Envelope>

Envio de cancelamento - Fluxo Simplificado

No momento em que o cancelamento da coleta de um determinado exame da solicitação, ou de todos, é efetuado, a situação do registro já existente na fila de transmissão interna é atualizada para ser cancelada. Em um curto intervalo de tempo, estes cancelamentos da fila serão transmitidos via webservice para método específico.

Endereço do Serviço

URL do Serviço: http://url_endpoint/InterfaceService.asmx ou host da VPN
Método HTTP: POST
SOAPAction: "ReceberCancelamento"
Content-Type: text/xml;charset=UTF-8

Definição do XML de envio de envio de requisição

CampoDescriçãoTipo do DadoTamanho
pedidoLab.identificadorNome do sistema de gestão em saúde públicaString fixaSISGS
pedido_lab.pedido.codigoNúmero da solicitação de exames no SIS VivverNumérico13
pedido_lab.pedido.ordem_servicoNúmero da solicitação de exames no SIS VivverNumérico13
pedido_lab.pedido.cancelamentoTotalIndica se é cancelamento outal ou somente de determinado registrobooleanfalse ou true
pedido_lab.pedido.exames.exame.codigoCódigo do exame canceladoInteger5
pedido_lab.pedido.exames.exame.codmotivorecoletaCódigo no SIS do motivo do cancelamento da amostraInteger5
pedido_lab.pedido.exames.exame.desmotivorecoletaDescrição do motivo do cancelamento da amostraTexto255
# Envio de requisição via cURL para cancelamento de exames
curl -X POST http://vpn1.root.ooo:7017/InterfaceService.asmx \
-H "SOAPAction: \"ReceberCancelamento\"" \
-H "Content-Type: text/xml;charset=UTF-8" \
-d 'PASTE_XML_HERE'
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns:viv="http://www.vivver.com.br"
                  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <viv:ReceberCancelamento>
            <pedidoLab>
                <identificador>SISGS</identificador>

                <pedido>
                    <codigo>2024080000008</codigo>
                    <ordemServico>2024080000008</ordemServico>
                    <cancelamentoTotal>false</cancelamentoTotal>
                </pedido>

                <exames>
                    <exame>
                        <codigo>1554</codigo>
                        <codmotivorecoleta>32</codmotivorecoleta>
                        <desmotivorecoleta>AMOSTRA INSUFICIENTE</desmotivorecoleta>
                    </exame>
                    <exame>
                        <codigo>10</codigo>
                        <codmotivorecoleta>31</codmotivorecoleta>
                        <desmotivorecoleta>AMOSTRA INCORRETA</desmotivorecoleta>
                    </exame>
                </exames>
            </pedidoLab>
        </viv:ReceberCancelamento>
    </soapenv:Body>
</soapenv:Envelope>

Definição do XML esperado no response de envio de cancelamento

CampoDescriçãoTipo do DadoTamanho
pedido.codigoNúmero da solciitaçãoString50
exames.exame.codigoCódigo do exameString50
exames.exame.desricaoRetornoDescrição da situação do cancelamento do exameString50
.situacaoSituação da geração do cancelamentoBoolean50
descricaoDescrição da situaçãp geração do cancelamentoString50

 

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:s="http://www.w3.org/2001/XMLSchema">
    <SOAP-ENV:Body>
        <ReceberCancelamentoResponse xmlns="http://www.example.com">
            <ReceberCancelamentoResult>true</ReceberCancelamentoResult>

            <s01:retornoLab xmlns="http://www.example.com/cancelamento"
                            xmlns:s01="http://www.example.com">
                <pedido>
                    <codigo>2024080000087</codigo>
                </pedido>

                <exames>
                    <exame>
                        <codigo>839</codigo>
                        <descricaoRetorno>Exame(s) Cancelado(s) com sucesso.</descricaoRetorno>
                    </exame>
                    <exame>
                        <codigo>003</codigo>
                        <descricaoRetorno>Exame(s) Cancelado(s) com sucesso.</descricaoRetorno>
                    </exame>
                </exames>

                <situacao>true</situacao>
                <descricao>Processo realizado com sucesso.</descricao>
            </s01:retornoLab>
        </ReceberCancelamentoResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>