rnds
Version:
Biblioteca de conveniência para acesso aos serviços oferecidos pela Rede Nacional de Dados em Saúde (RNDS).
98 lines (71 loc) • 4.34 kB
Markdown
## RNDS (Rede Nacional de Dados em Saúde)
Biblioteca de acesso à RNDS (Rede Nacional de Dados em Saúde) que contempla o envio de resultads de exames laboratoriais (COVID-19).
Os serviços oferecidos pela RNDS estão encapsulados em funções de fácil uso que implementam um [façade](https://en.wikipedia.org/wiki/Facade_pattern) para os ambientes FHIR (homologação e produção) oferecidos pelo
Ministério da Saúde (DATASUS) para o Brasil.
Consulte o [Guia de Integração com a RNDS](https://rnds-guia.saude.gov.br/) para detalhes da integração com a RNDS.
### Instalar
```shell
$ npm i rnds
```
### Configurar
Tendo em vista a sensibilidade das informações que fazem parte da configuração
necessária, todas elas são fornecidas por meio de variáveis de ambiente, conforme tabela abaixo:
| Variável | Conteúdo |
| ------------------------- | ---------------------------------------------------------------------------------------------------- |
| RNDS_AUTH | Endereço do serviço de autenticação (sem protocolo, sem path).Exemplo: **ehr-auth-hmg.saude.gov.br** |
| RNDS_EHR | Endereço dos serviços de saúde. Exemplo: **ehr-services.hmg.saude.gov.br** |
| RNDS_CERTIFICADO_ENDERECO | Endereço (web ou arquivo) do certificado digital (formato **.pfx**). |
| RNDS_CERTIFICADO_SENHA | Senha do certificado digital. |
| RNDS_REQUISITANTE_CNS | CNS do profissional de saúde em nome do qual requisições serão feitas. |
| RNDS_REQUISITANTE_UF | Código do estado (duas letras, por exemplo, AC, DF, GO) do estabelecimento de saúde. |
### Usar
**IMPORTANTE**: foi necessário usar a opção **--openssl-legacy-provider** para que
funcione com a versão 17 do NodeJS.
```js
import RNDS from "./rnds.js";
const rnds = await RNDS.cliente(true, true, true);
rnds.checkVersion()
.then(c => console.log("FHIR VERSION", c ? "ok" : "erro"))
.catch(() => console.log("erro ao verificar versão..."));
```
Ou ainda,
```javascript
import RNDS from "./rnds.js";
process.on('uncaughtException', (err) => console.log("!!??\n", err));
async function status(requisicao, msg) {
const retorno = await requisicao;
console.log(retorno.code === 200 ? "ok" : "erro", msg);
}
const CNPJ = "01567601000143";
const CNES = "2337991";
const CNS = "980016287385192";
try {
const rnds = await RNDS.cliente(false, true, true);
await status(rnds.capability(), "CapabilityStatement");
console.log(await rnds.checkVersion() ? "ok" : "erro", "FHIR VERSION");
await status(rnds.atendimento(CNES, CNS, CNS), "contextoAtendimento");
await status(rnds.cnes(CNES), "CNES");
// Obtém CPF para uso posterior (informação sensível não registrada)
const resposta = await rnds.cns(CNS)
console.log(resposta.code === 200 ? "ok" : "erro", "CNS");
const idt = JSON.parse(resposta.retorno).identifier;
const idx = idt.findIndex(i => i.system.endsWith("/cpf"));
const codigoCPF = idt[idx].value;
await status(rnds.cpf(codigoCPF), "CPF");
await status(rnds.cnpj(CNPJ), "CNPJ");
await status(rnds.lotacoes(CNS, CNES), "CNS/CNES");
await status(rnds.lotacaoPorCns(CNS), "CNS (lotações)");
await status(rnds.lotacaoPorCnes(CNES), "CNES (lotações)");
await status(rnds.lotacaoCnsEmCnes(CNS, CNES), "CNS/CNES");
await status(rnds.pacientePorCns(CNS), "CNS (Bundle)");
await status(rnds.pacientePorCpf(codigoCPF), "CPF (Patient)");
await status(rnds.paciente(CNS), "CNS (paciente - Patient)");
} catch (erro) {
console.log(erro);
}
```
### Alguns links pertinentes
- Autenticação com certificado via [Javascript](https://medium.com/@sevcsik/authentication-using-https-client-certificates-3c9d270e8326)
- Cliente/validador para js ([fhir](https://www.npmjs.com/package/fhir))
- [SMART on FHIR](http://docs.smarthealthit.org/client-js/)
- Interação com servidor FHIR ([fhir.js](https://github.com/FHIR/fhir.js))