Pular para o conteúdo principal

Salus (Saúde)

Repositório: saude

Sistema de gestão em saúde de propósito misto. Atende unidades de pronto atendimento (UPA/UPS), atenção básica (prontuário eletrônico do cidadão e fichas CDS), regulação de agendas e consultas, almoxarifado e farmácia e o faturamento ao SUS (BPA, SIGTAP, AIH). Integra-se a vários sistemas nacionais (CADSUS, RNDS) e a apoios de laboratório. Base grande: ~495 models e mais de 3.000 migrations.

Manual de uso (não técnico): Saúde.

Usuários, perfis, contexto e permissões

Autenticação. Login por Devise (User).

Contexto (unidade de saúde). O recorte principal de operação é a unidade de saúde (HealthUnit) em que o profissional está atuando. Usuários são vinculados às unidades (professional_health_unit, user_linked_with_health_unit), e as telas e dados respeitam essa unidade.

Perfis e permissões. A autorização usa CanCan (app/models/ability.rb):

  • admin? recebe can :manage, :all.
  • Para os demais, o usuário tem um Profile, que reúne roles. Cada role é o par controller × ação — ou seja, a permissão é concedida por controller. O Ability percorre as roles do perfil e libera cada ação no controller correspondente.
  • O perfil ainda tem flags especiais, como can_see_all_medical_records (ver todos os prontuários) e can_revert_any_dispensation.

Menus. Os itens de menu ficam em config/locales/menu.yml e nas views em app/views/menu. O que aparece para cada usuário é filtrado pelas roles do perfil (ver Profile#home_allowed_profile_roles).

Stack

  • Linguagem: Ruby 2.3.8
  • Framework: Rails 4.0.13
  • Banco: PostgreSQL (com namespaces de tabela; veja "Padrões do projeto")
  • Autenticação: Devise
  • Autorização: CanCan (app/models/ability.rb)
  • Jobs: Sidekiq
  • Auditoria: PaperTrail
  • Criptografia: Lockbox
  • Front-end: React 15 + Webpack; Node 14.16.1
  • Testes: RSpec

Como rodar localmente

Sem Docker (a partir do README):

  1. cp config/database.sample.yml config/database.yml e ajuste o acesso ao banco.
  2. bundle install.
  3. bin/rake db:create.
  4. bin/rake salus:install — primeira migração e seed do banco.
  5. bin/rake salus:sample — carrega um perfil administrador, uma unidade de saúde e um usuário de exemplo.
  6. yarn — dependências de front-end.
  7. gem install foreman e suba a aplicação com foreman start -f Procfile.dev.

Acesse com o usuário salus e senha s12345678.

Com Docker: use cp config/database.sample.yml config/database.yml, mkdir node_modules, docker-compose run webpack yarn, depois os mesmos db:create, salus:install e salus:sample via docker-compose run web ... e suba com docker-compose up web (Linux) ou docker-sync-stack start (macOS).

SIGTAP. A tabela do DATASUS é importada por uma rake task a partir de um arquivo público:

bin/rake sigtap:import\[<url-do-zip-do-datasus>\]

Variáveis de ambiente

Configuradas em .env.dev (e .env.test). As principais, por finalidade:

  • Banco e infraestrutura: DB_HOST, DB_NAME, DB_USERNAME, DB_PASSWORD, REDIS_URL, WEBPACK_PORT, WEBPACK_MANIFEST_HOST, WEBPACK_MANIFEST_PORT, RACK_TIMEOUT_SERVICE_TIMEOUT.
  • Segurança: LOCKBOX_MASTER_KEY (criptografia de dados sensíveis), CERTIFICATE_PATH e PASSWORD_CERTIFICATE (certificado digital), SIGNER_API_URL (assinatura digital de prontuário), API_SIMPLE_AUTHORIZATION.
  • Integrações nacionais: CADSUS_* (Cartão Nacional de Saúde / CNES), RNDS_ENDPOINT e RNDS_TOKEN_ENDPOINT (Rede Nacional de Dados em Saúde), SIGAF_USER/SIGAF_PASSWORD/SIGAF_WSDL (farmácia estadual).
  • Apps e outras integrações: CITIZEN_APP_* (app do cidadão), PROFESSIONAL_APP_AUTHORIZATION_HEADER, PURCHASE_SYSTEM_INTEGRATION_URL, AUTOLAC_* (laboratórios Autolac).
  • Regras de negócio: REQUIRED_DEGREE_OF_SCHOOLING.

Padrões do projeto

Além do MVC, o app/ tem camadas próprias: services/, criteria/, presenters/, exhibits/, normalizers/, responders/, serializers/, validators/, workers/, reports/, enumerations/, inputs/ e uploaders/.

Namespaces de tabela. O banco separa os dados em três prefixos:

  • unico_ — dados comuns a vários sistemas (gem unico). Têm migrations próprias, rodadas com db:migrate:unico.
  • salus_ — dados específicos do Salus (db:migrate normal).
  • sigtap_ — dados importados da tabela SIGTAP.

Domínios centrais: agendamento com cotas (agenda, agenda_quota), atendimentos, AIH (Autorização de Internação Hospitalar), prontuário, almoxarifado e os cadastros de unidades e pessoas.

BigPicture

Módulos do Salus