npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@conselho-federal-de-medicina/integracao-prescricao-cfm

v0.1.8

Published

Biblioteca de integração com o sistema de Prescrição Eletrônica do Conselho Federal de Medicina do Brasil

Downloads

52

Readme

Integração Prescrição-CFM

Biblioteca para integração com o sistema de Prescrição Eletrônica do Conselho Federal de Medicina do Brasil.

Como usar?

Opção A - Se você usa NPM (ou equivalente) e a sintaxe de módulos do ES6.

  1. Adicione essa biblioteca no seu projeto.
npm install @conselho-federal-de-medicina/integracao-prescricao-cfm
  1. Importe as classes no seu módulo.
import {
    CfmAmbiente, 
    CfmIntegracaoPrescricao, 
    CfmLocalAtendimento, 
    CfmMedicamento, 
    CfmPaciente
} from "@conselho-federal-de-medicina/integracao-prescricao-cfm";
  1. Crie a classe de integração. Note que você deve guardar a instância dessa classe no seu componente ou página.
let integracaoPrescricao = new CfmIntegracaoPrescricao(CfmAmbiente.SIMULACAO);

Os possíveis ambiente são:

  • SIMULACAO: Use esse ambiente para fazer o desenvolvimento inicial. Nesse ambiente, você estará interagindo com um mock da nossa API. Não é necessário solicitar credenciais ao CFM para usar esse ambiente.
  • HOMOLOGACAO: Após conseguir integrar com sucesso no ambiente de homologação, solicite as credenciais do seu sistema ao CFM para testar a integração com nossa API de homologação.
  • PRODUCAO: Nesse ambiente, apenas médicos conseguem fazer login e emitir receitas. Todos os documentos emitidos são assinados digitalmente com certificados ICP-BR e têm validade legal.
  1. Quando o usuário clicar no botão da integração (ou outra ação equivalente), carregue o nosso componente no seu frontend.
await integracaoPrescricao.criarIframe(CfmTipoDocumento.RECEITA_SIMPLES, 'divIframe');

Existem dois métodos para carregar o componente:

  • criarIframe(): Recebe o tipo de documento e o ID do elemento pai do iframe. Carrega o componente dentro de um iframe que será criado dinamicamente como filho do elemento indicado. O iframe terá a altura e largura de 100% do elemento pai.
  • criarPopup(): Recebe o tipo de documento e as configurações de criação da nova janela ou aba. O segundo parâmetro é uma string no formato windowFeatures. Essa string será passada para window.open().

Os tipos de documento válidos são:

  • RECEITA_SIMPLES
  • ANTIMICROBIANO
  • CONTROLE_ESPECIAL
  1. Faça uma chamada ao seu backend para obter o token de acesso. Esse token autoriza o seu sistema a fazer chamadas ao sistema do CFM.

IMPORTANTE: A obtenção do token deve ser feita a partir do seu backend, pois o seu client_secret é confidencial.

let accessToken = backend.getAccessTokenPrescricao();

Veja mais abaixo um exemplo de implementação dessa chamada no backend.

  1. Recupere, do seu sistema, as informações do paciente, local de atendimento e medicamentos sendo prescritos e envie para o nosso componente. O componente devolverá uma mensagem de resposta quando o usuário assinar o documento. Essa mensagem irá conter a URL do PDF assinado.
let localAtendimento = new CfmLocalAtendimento(...);
let paciente = new CfmPaciente(...);
let medicamentos = [new CfmMedicamento(...), ...];
let prescricao = new CfmPrescricao(localAtendimento, paciente, medicamentos);
let requisicao = new CfmRequestMessage(accessToken, prescricao);
let resposta = await integracaoPrescricao.enviarPrescricao(requisicao);
console.log(resposta.urlDocumento);
  1. Baixe o documento e apresente ao usuário.

Opção B - Se você importa dependências a partir de CDNs e precisa manter compatibilidade com ES5.

  1. Importe a versão compatível com ES5 da nossa biblioteca em seu index.html.
<script src="https://unpkg.com/@conselho-federal-de-medicina/[email protected]/dist/main.iife.js"></script>

OBSERVAÇÃO: Essa opção usa a sintaxe IIFE e expõe todas as classes a partir do objeto global integracaoPrescricaoCfm. Recomendamos criar um alias para esse objeto, para facilitar a escrita do código. Exemplo:

var p = integracaoPrescricaoCfm;
  1. Crie a classe de integração.
let integracaoPrescricao = new p.CfmIntegracaoPrescricao(CfmAmbiente.SIMULACAO);

A partir desse ponto, siga as mesmas instruções da Opção A, do passo 3 em diante.

Como obter o token de acesso do meu sistema?

Para os ambientes de homologação e produção, você precisará entrar em contato com o CFM e solicitar o cadastro da sua aplicação em nosso IAM. Você receberá as credenciais de acesso e a URL a ser chamada.

Toda vez que seu frontend for enviar uma mensagem para o componente do CFM, ele deverá solicitar o token para o backend.

IMPORTANTE: O seu backend não deve obter um novo token toda vez. Se fizer isso, seu sistema será bloqueado! O token é válido por alguns minutos e durante esse tempo, ele deve ser reaproveitado, ou seja, o seu backend deve devolver o mesmo token para todas as chamadas feitas pelo seu frontend, independente do usuário logado. O backend só deve obter um novo token quando o anterior estiver expirado ou próximo de expirar.

Segue abaixo um exemplo de um backend feito em Node.js, usando Express e Axios, obtendo e devolvendo o token ao frontend.

app.get('/token-prescricao', async (req, res) => {
    if (tokenIsExpired()) {
        let tokenResponse = await axios.post(prescricao_iam_url, new URLSearchParams({
            grant_type: 'client_credentials',
            client_id: my_client_id,
            client_secret: my_client_secret,
            scope: 'openid'
        }));
        token = tokenResponse.data;
    }
    res.send(token);
});