Giter Club home page Giter Club logo

agenda-saude's Introduction

Agenda Saúde

Maintainability Test Coverage GitHub issues GitHub last commit (branch) Discord Open Collective backers and sponsors

Agenda Saúde é um projeto de código aberto desenvolvido de forma colaborativa para fornecer um sistema de agendamento de vacinação e exames de COVID-19 para prefeituras. Atualmente está em uso pela secretaria de saúde da prefeitura de Joinville/SC. O sistema pode ser usado livremente, respeitando a licença de uso, para gerenciar a fila de vacinação em outras cidades.

Conheça detalhes do projeto na nossa página institucional.

Quer saber como implantar na sua cidade? Veja nosso fórum. Tire qualquer dúvida sobre o projeto. Sugira melhorias. Fique a vontade para contribuir!

Dependências

Este projeto usa o framework de desenvolvimento Web Ruby on Rails e possui as seguintes dependências:

Desenvolvimento

Se você quiser executar este projeto no seu ambiente de desenvolvimento, você deve clonar este código-fonte, compilá-lo e executá-lo localmente.

Existem duas formas de configurar o projeto no seu ambiente. Usando o Docker Compose ou instalando manualmente as dependências.

Docker Compose

A forma mais fácil de executar este projeto no seu ambiente é usando o Docker Compose, ferramenta responsável por criar um ambiente virtualizado e instalar todas as outras dependências.

Após clonar o repositório, você pode executar os seguintes comandos no diretório da aplicação:

docker-compose up --build
docker-compose run web rails db:migrate

E acesse no ambiente local http://localhost:3000.

Inicialmente a aplicação não possui nenhum dado, para popular o banco de dados utiliza as seeds:

docker-compose run web rails db:seed

Obs.: Você pode omitir a opção --build depois de fazer o build da aplicação pela primeira vez. Dessa forma, subir o docker-compose fica consideravelmente mais rápido. Porém, quando há mudanças no Gemfile, é aconselhável executar com --build novamente.

Instalando manualmente

Caso você queira instalar manualmente todas as dependências no seu ambiente GNU/Linux, precisará executar os seguintes comandos:

apt update
apt install postgresql postgresql-contrib postgresql-server-dev-all cmake nodejs libpq-dev
gem install bundler

Para instalar as bibliotecas execute:

bundle install

Para configurar o banco de dados execute:

cp .env.db.sample .env
source .env
bin/rails db:setup

E acesse no ambiente local http://localhost:3000:

bundle exec rails server

Problemas conhecidos

Caso você configure seu PostgreSQL localmente para não usar nenhuma senha, é provavável que precise alterar o método de autenticação

Testes

Para executar os testes da aplicação e verificar se tudo está funcionando como esperado execute:

bundle exec rspec

Style Guides

Você pode verificar se o código está em conformidade com os padrões do projeto executando o robocop e corrigindo qualquer alerta evidenciado:

bundle exec rubocop

Contribuindo

Este projeto existe graças a todas as pessoas que contribuem. Fique a vontade para contribuir! Essas aqui são boas issues para começar! Quer conversar com o time? Estamos no Discord.

Contribuição Financeira

Deseja contribuir financeiramente? Acesse nossa página institucional. Caso sua contribuição seja menor que 500 reais, use o nosso Open Collective. Nossos financiadores:

Financial Contributors - Individuals

Time

Esse projeto existe graças ao esforço e dedicação dessas pessoas:

desenvolvimento

Code Contribotors

design

gisele gus

Empresas parceiras

Magrathea

Licença

MIT

agenda-saude's People

Contributors

alfakini avatar andresakata avatar brunofrank avatar bugarela avatar danielsbastos avatar dependabot[bot] avatar edrd-f avatar erickgurian avatar gustavodiel avatar he7d3r avatar iago-silva avatar jjmoraes avatar jmonteiro avatar laurogripa avatar lucianowayand avatar maickellvilela avatar mat-bit avatar mtayllan avatar rafaelamachado avatar schaiana avatar vgasparini avatar vitorebatista avatar wedsonlima avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

agenda-saude's Issues

Alguns usuários não conseguem editar seus dados

Essa issue é de um card antigo (não sabemos se está ocorrendo)

Temos 2 ocorrências de um erro que estouraram para o mesmo usuário. É possível que ele esteja com a data de nascimento incorreta no banco (devido ao problema de datas já consertado) que causa algum erro ao renderizar a nova seleção de datas.

Precisamos prever esse erro ou arrumar retroativamente as datas que ficaram erradas no banco.

Melhorar README

Acredito que seria legal termos um README mais atrativo, contando brevemente a história do projeto e listando os contribuidores!

O atual não traz o contexto exato do projeto, podemos separar algumas especificações para a wiki como alternativa e deixar o README com os passos básicos iniciais.

temos essa issue também relacionada: #61

Editar o bairro não altera a UBS principal para um paciente

Adicionamos a tela de edição, mas a chamada set_main_ubs que define uma UBS para o paciente não é chamada durante a edição, somente na criação.

Precisamos entender se é ok permitir que os pacientes editem esse campo a fim de "escolher" outras UBS, e cuidar para não fazer chamadas desnecessárias do set_main_ubs já que ele escolhe uma UBS aleatória em certas situações.

Melhorar README

O readme atual não traz o contexto exato do projeto, podemos separar algumas especificações para a wiki como alternativa e deixar o readme com os passos básicos iniciais.

Traduzir rotas

As rotas ainda estão em inglês, traduzi-las pode melhorar a navegação dos usuários.

Melhorar uso de recursos (CPU/memória)

Podemos investigar a possibilidade de usarmos essas alternativas:

  • JRuby/Rubinius
  • jemalloc

A saída dessa issue pode ser uma PoC usando benchmarks demonstrando a melhora do use de CPU/memória

Aviso de agendamento

Retirar aviso de agendamento da tela do paciente após o horário de agendamento do mesmo

Avaliar alternativas melhores de como conciliar os dois sistemas

Esse repositório que hoje chamamos de "Agenda Saúde" começou como um sistema de agendamento para vacinas, chamado "Vacina Joinville" na época.

Quando surgiu a demanda de criar um sistema de agendamento para testes rápidos de COVID, decidimos criar outra branch chamada master-covid, para atender a demanda o mais rápido possível.

Basicamente, criamos dois sistemas, um sistema de agendamento de vacinas que é hospedado a partir da master e outro sistema de agendamento de testes rápidos hospedado a partir da master-covid

Os dois sistemas tem propósitos diferentes e grandes diferenças em partes do código, porém, ainda sim compartilham boa parte do código.

Precisamos pensar em uma maneira melhor de lidar com a existência dos dois sistemas, pois quanto mais mudanças tem em cada sistema, mais difícil fica gerenciar o código compartilhado.

No longo prazo uma possibilidade é extrair o código compartilhado e criar uma solução "white-label" customizável.
No curto prazo uma possibilidade é separar em dois repositórios, mesmo que compartilhem bastante código.

O que acham?

Remover database.yml.example

O arquivo database.yml está usando variáveis de ambiente, logo o database.yml.example é desnecessário.

Atualizar docker-compose para usar o database.yml ao invés de database.yml.example

Incluir campo "Data de Nascimento" no login

O objetivo aqui é tornar o acesso mais controlado

Além da Data de Nascimento, podemos incluir Telefone e Endereço anonimizados. Por exemplo:

Meu telefone é:
(4*) **9**-*2*1 

Adicionar validações de Paciente a nível de banco

Por exemplo, não permitir que campos obrigatórios no model sejam nulos no banco e limitar o tamanho do CPF para 11 caracteres (garantir que sempre seja salvo sem formatação).

Hoje as validações estão somente no backend

Aumentar cobertura de testes

Aqui é preciso fazer um levantamento das partes da aplicação que não estão cobertas de testes do rspec ou do cypress.

A saída dessa issue pode ser a criação de issues menores explicando cada lugar que precisa ser coberto.

Fluxos do paciente

  • condições da tela home
  • Quando tem ubss ativas tem que mostrar texto de doses disponiveis
  • Quando não tem nenhuma ubs ativa tem que mostra texto de aguardando doses
  • Quando tem doses disponiveis em várias ubss tem que mostrar soma dessas doses para o grupo
  • Quando tem vários grupos permitidos tem que mostrar esses grupos

Fluxos do operador

Fluxos do Admin

todos 😅

Possibilitar a edição do nome da mãe do paciente

Isso é importante pois eventualmente (e está ocorrendo) pacientes não preenchem o campo da mãe corretamente, e como este informação é utilizada como forma de autenticação, é necessário a possibilidade do paciente alterar esse campo.

Alta latência no endpoint TimeSlotController#index

new relic

Selection_139

Contexto

Hoje temos uma ação nesse controller que pega todos os slots de agendamento disponiveis. Provavelmente há alguma forma de simplificar essa requisição e tornar ela mais rápida para o usuário. Hoje o impacto está sendo que muitas vezes o servidor dá um timeout.

A complexidade dessa consulta é que as UBS's tem parâmetros de configuração como tempo da consulta, intervalo entre consultas e horário de funcionamento da UBS. Além disso, tem os próprios agendamentos que concorrem com essa lógica que mostra os agendamentos disponíveis.

Esse problema escalou com o aumento da disponibilidade de testes rápidos em Joinville nas últimas semanas.

Ideias

Uma alternativa seria montar uma consulta pequena para o usuário e ir alimentando mais opções com o scroll (estilo dale ponto)

Improve routes

We can have less code by using standard resourceful routes instead of manually setting ones. We also should make use of link_to defined_path instead of manually writting <a href="/define/<%= thing.id %>"> for instance.

Explicar o que vem depois do docker-compose up

Mesmo depois de gerar manualmente o database.yml (#81 ) e o docker-compose up, aparentemente, ser executado com sucesso, quando acesso http://localhost:3000/ recebo um

Não foi possível conectar
O Firefox não conseguiu estabelecer uma conexão com o servidor localhost:3000.

Segue saída do docker-compose up

$ sudo docker-compose up
Starting agenda-saude_postgres_1 ... done
Starting agenda-saude_web_1      ... done
Attaching to agenda-saude_postgres_1, agenda-saude_web_1
postgres_1  | 
postgres_1  | PostgreSQL Database directory appears to contain a database; Skipping initialization
postgres_1  | 
postgres_1  | 2020-10-07 01:28:29.849 UTC [1] LOG:  starting PostgreSQL 12.1 on x86_64-pc-linux-musl, compiled by gcc (Alpine 9.2.0) 9.2.0, 64-bit
postgres_1  | 2020-10-07 01:28:29.849 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
postgres_1  | 2020-10-07 01:28:29.849 UTC [1] LOG:  listening on IPv6 address "::", port 5432
postgres_1  | 2020-10-07 01:28:29.916 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_1  | 2020-10-07 01:28:31.068 UTC [20] LOG:  database system was shut down at 2020-10-07 01:27:29 UTC
postgres_1  | 2020-10-07 01:28:31.193 UTC [1] LOG:  database system is ready to accept connections
web_1       | => Booting Puma
web_1       | => Rails 6.0.2.2 application starting in development 
web_1       | => Run `rails server --help` for more startup options
web_1       | [1] Puma starting in cluster mode...
web_1       | [1] * Version 4.3.5 (ruby 2.6.5-p114), codename: Mysterious Traveller
web_1       | [1] * Min threads: 5, max threads: 5
web_1       | [1] * Environment: development
web_1       | [1] * Process workers: 2
web_1       | [1] * Preloading application
web_1       | [1] * Listening on tcp://0.0.0.0:3000
web_1       | [1] Use Ctrl-C to stop
web_1       | [1] - Worker 0 (pid: 23) booted, phase: 0
web_1       | [1] - Worker 1 (pid: 28) booted, phase: 0

Revisar traduções do Devise

A mensagem do Devise tá sendo exibida ao tentar logar quando já tem um paciente logado.

Passos para simular o erro:

  • Logar com algum Paciente
  • Voltar na setinha do navegador
  • Logar novamente

As views de Devise são as únicas que utilizam i18n, mas definimos apenas algumas traduções presentes no fluxo mais comum. Precisamos revisar se há mais traduções faltando.

image

Extrair código repetido nas views em partials

Exemplo, o trecho abaixo aparece em diversos lugares:

<div class="row text-center mt-5 mb-5">
  <div class="col">
    <small class="text-muted">Para mais informações sobre eventos de saúde da cidade, acesse:<br>
    <a href="https://www.joinville.sc.gov.br/?post_type=evento&tag-tipo-evento=conscientizacao&s=">https://www.joinville.sc.gov.br/evento/conscientizacao/</a></small>
  </div>
</div>

Poderia ser extraído para uma partial, assim como alguns alerts.

Refatorar controller de ubs

  • dry chamadas de função
  • melhorar queries
  • garantir que parâmetros da UBS não podem ser alterados (hoje essa proteção existe somente no frontend)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.