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?recebecan :manage, :all.- Para os demais, o usuário tem um
Profile, que reúneroles. Cada role é o par controller × ação — ou seja, a permissão é concedida por controller. OAbilitypercorre 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) ecan_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):
cp config/database.sample.yml config/database.ymle ajuste o acesso ao banco.bundle install.bin/rake db:create.bin/rake salus:install— primeira migração e seed do banco.bin/rake salus:sample— carrega um perfil administrador, uma unidade de saúde e um usuário de exemplo.yarn— dependências de front-end.gem install foremane suba a aplicação comforeman 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_PATHePASSWORD_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_ENDPOINTeRNDS_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 (gemunico). Têm migrations próprias, rodadas comdb:migrate:unico.salus_— dados específicos do Salus (db:migratenormal).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.