Manual de Integração para Sistemas externos
1. Descrição
Atualmente, o Prontuário Eletrônico e-SUS APS permite configurar sistemas externos por meio do módulo de Integração, disponível para o administrador da instalação.
Após a configuração, o acesso ao sistema externo será disponibilizado de acordo com o local definido no momento do cadastro. Ele poderá ser acessado pelo menu lateral do PEC ou, durante o Atendimento Individual e o Atendimento Odontológico, por meio da aba Sistemas Externos.
2. Cadastro do sistema externo
-
O cadastro de sistemas externos está habilitado somente para as instalações que possuam HTTPS configurado.
-
O cadastro deve ser feito pelo Administrador da Instalação no módulo "Integração > Sistemas externos". Sendo necessário informar os seguintes dados dos integradores:
a: Para cadastro de "Pessoa física" o registro deve conter as seguintes informações da pessoa que será responsável pela integração:
- URL de acesso ao sistema externo;
- Nome;
- CPF;
- E-mail;
- Nome do sistema.
b: Para cadastro de "Pessoa jurídica" o registro deve conter as seguintes informações da pessoa que será responsável pela integração:
- URL de acesso ao sistema externo;
- Nome;
- CNPJ;
- E-mail;
- Nome do sistema.
- Após realizar o cadastro de um sistema externo, será gerada a chave de assinatura, que deve ser utilizada para gerar a chave durante a requisição de acesso ao sistema externo.
O Administrador da Instalação é responsável por fornecer a chave de acesso aos responsáveis pelos sistemas externos.
Atenção: uma chave gerada anteriormente não pode ser recuperada. Caso ela seja perdida, será necessário realizar um novo cadastro para gerar uma nova chave.
3. Sistemas habilitados para iFrame
Não é possível carregar o iFrame no Prontuário Eletrônico e-SUS APS, caso o sistema configurado possua configurações que restrinjam o uso do conteúdo, como, por exemplo, quando o servidor envia cabeçalhos de segurança específi cos. Os cabeçalhos que podem causar essa restrição incluem:
● Content-Security-Policy: Se configurado como frame-ancestors 'none', impede que qualquer site carregue o conteúdo em um iFrame.
● X-Frame-Options: Definido com valores como SAMEORIGIN ou DENY, esse cabeçalho restringe a exibição do conteúdo em iFrames. O valor SAMEORIGIN permite que o conteúdo seja exibido apenas em páginas do mesmo domínio, enquanto DENY bloqueia completamente a exibição em iFrames.
Para mais informações:
● CSP
4. Chave de assinatura
Durante a configuração de um sistema externo, o Prontuário Eletrônico e-SUS APS gera uma chave de assinatura. Essa chave permite que o sistema externo confirme que a solicitação de acesso foi realmente enviada pelo Prontuário Eletrônico e-SUS APS.
Para obter a chave de assinatura, o responsável pelo sistema externo deverá entrar em contato com o Administrador da Instalação do município.
4.1. Exemplo de URL
4.1.2 Como funciona
- Parte Base da URL (usada para assinar):
Esta é a parte que será usada para gerar e verificar a assinatura. Note que ela termina no timestamp.
- Timestamp:
● O parâmetro pec_timestamp=1749542182 representa o momento da requisição (segundos);
● O sistema pode estabelecer um critério de validade, por exemplo, considerando válidas apenas requisições numa janela de 30 minutos.
- Assinatura:
● O parâmetro pec_sign=9e6c...6c0f contém a assinatura HMAC-SHA256 da URL;
● A assinatura é calculada usando toda a URL até o timestamp (inclusive);
● É usado o algoritmo HMAC-SHA256 com a chave secreta para gerar a assinatura.
4.1.3 Processo de Verificação
- O sistema pega a URL completa e remove tudo após
&pec_sign=; - Usa esta URL "limpa" para calcular um novo HMAC;
- Compara o HMAC calculado com o recebido no parâmetro
pec_sign; - Simultaneamente, verifi ca se o
pec_timestampestá dentro de uma janela esperada.
A requisição só é considerada válida se:
● A parte da URL até o timestamp gerar a mesma assinatura que foi recebida;
● O timestamp estiver dentro da janela estabelecida.
4.1.4 Exemplo de cálculo do HMAC (Javascript/Node/Express)
function calculateHMAC(req) {
const fullUrl = `${req.protocol}://${req.get("host")}${req.originalUrl}`; //url assinada no PEC é canônica. Pode ser necessário codifi car a url se tiver caracteres especiais.
const urlToSign = fullUrl.split("&pec_sign=")[0];
return {
urlToSign,
signature: crypto
.createHmac("sha256", HMAC_KEY) //HMAC_KEY corresponde a chave obtida junto ao administrador da instalação
.update(urlToSign)
.digest("hex"),
};
}
4.1.4.1 Verificação do Timestamp
function verifyTimestamp(timestamp) {
const currentTimeInSeconds = Math.fl oor(Date.now() / 1000);
const timeDiff = Math.abs(currentTimeInSeconds - timestamp);
// Permitir diferença de até 30 minutos
return timeDiff <= 1800;
}
5. Parâmetros dinâmicos
Os parâmetros permitem que o Prontuário Eletrônico e-SUS APS envie informações através da URL para o sistema externo que está sendo acessado.
5.1. Parâmetros disponíveis
-
[documentoCidadao]: identificador do cidadão que está sendo atendido pelo profissional, preferencialmente é enviado o CPF do cidadão, caso não exista, é enviado o CNS. (disponível apenas para sistemas definidos com o local de acesso como Atendimento)
-
[documentoProfi ssional]: identifi cador do profissional que está acessando o sistema externo, preferencialmente é enviado o CPF do profissional, caso não exista, é enviado o CNS.
-
[cnes]: identifi cador do estabelecimento do profi ssional.
5.2. Exemplo de URL
● O sistema externo deverá disponibilizar a URL para o administrador da instalação utilizando as variáveis, no formato previsto pelo Prontuário Eletrônico e-SUS APS: https://[url_do_sistema_externo]?documento-profissional=[documentoProfi ssional]&documento-cidadao=[documentoCidadao]&cnes-estabelecimento=[cnes]
● Ao acionar a URL, o Prontuário Eletrônico e-SUS APS irá substituir os valores das variáveis pelo efetivo valor da mesma: https://[url_do_sistema_externo]?documento-profissional=27406912030&documento-cidadao=07838480051
Dessa forma, o sistema externo poderá identificar o profissional e cidadão que estão sendo contemplados nessa requisição e direcionar assertivamente para os dados corretos. Importante ressaltar que os dados de segurança sempre serão enviados através da URL. bridge.ufsc.