Idosos e cuidadores frequentemente enfrentam dificuldades para controlar horários e dosagens de múltiplos medicamentos. Esquecimentos podem causar complicações graves de saúde.
O MedGuard é uma aplicação web simples que permite cadastrar medicamentos com suas doses e horários, e emite alertas quando está na hora de tomá-los (janela de ±10 minutos). Também registra o histórico de uso.
Idosos, cuidadores e familiares responsáveis pela administração de medicamentos.
- Cadastrar medicamentos com nome, dose, nível de importância e horários
- Listar e filtrar medicamentos por nome e importância
- Visualizar detalhes e histórico de uso de cada medicamento
- Receber alertas dos medicamentos a tomar no momento (±10 min)
- Confirmar ou registrar não-uso de um medicamento
- Excluir medicamentos com confirmação
- Registrar a frequência diária (quantas vezes por dia) de cada medicamento
- Consultar a bula do medicamento (finalidade, avisos e efeitos adversos) via integração com a API openFDA, com tradução automática português ↔ inglês
- Visualizar o histórico de eventos (tomado, não tomado e excluído), que é preservado mesmo após a exclusão do medicamento
- Filtrar o histórico por nome, importância e intervalo de datas
- Apagar todo o histórico de eventos de uma vez
- Python 3.10+
- Django 5.0.6
- SQLite
- pytest / pytest-django
- ruff
- GitHub Actions
- PostgreSQL (Neon) — banco de dados em nuvem usado em produção
- Gunicorn — servidor WSGI de produção
- WhiteNoise — entrega de arquivos estáticos
- dj-database-url / psycopg2-binary — configuração e conexão com o PostgreSQL
- requests — consumo da API openFDA
- deep-translator — tradução das bulas (português ↔ inglês)
- pytest-cov — relatório de cobertura de testes
- Render — hospedagem e deploy da aplicação
medguard/
├── manage.py
├── db.sqlite3 # gerado após migrations (não versionar)
├── requirements.txt
├── pyproject.toml
├── README.md
├── VERSION
├── CHANGELOG.md
├── LICENSE.txt
├── CONTRIBUTING.md
├── conftest.py
├── build.sh # script de build para deploy
├── .coverage # relatório de cobertura (não versionar)
├── .gitignore
│
├── .github/ # integração contínua
│ └── workflows/
│ └── ci.yml # pipeline: lint (Ruff) + testes + migrate
│
├── config/
│ ├── __init__.py
│ ├── settings.py
│ ├── settings.py.save # backup local do settings (não versionar)
│ ├── urls.py
│ └── wsgi.py
│
├── medicamento/
│ ├── __init__.py
│ ├── admin.py # registra Medicamento, HorarioMedicamento, RegistroUso
│ ├── apps.py
│ ├── models.py # models: Medicamento, HorarioMedicamento, RegistroUso, HistoricoEvento
│ ├── views.py # inclui buscar_bula_medicamento (openFDA), historico e apagar_historico
│ ├── urls.py # inclui rotas /bula/<nome_medicamento>/, /historico/ e /historico/apagar/
│ ├── forms.py # MedicamentoForm, FiltroForm, RegistroUsoForm, FiltroHistoricoForm
│ ├── traducao.py # tradução PT↔EN dos nomes/bulas (deep-translator)
│ │
│ ├── data/
│ │ └── medicamentos_pt_en.json # mapa de medicamentos PT→EN para a openFDA
│ │
│ ├── migrations/
│ │ ├── __init__.py
│ │ ├── 0001_initial.py
│ │ ├── 0002_historicoevento.py
│ │ └── 0003_medicamento_frequencia.py
│ │
│ └── templates/
│ └── medicamento/
│ ├── base.html
│ ├── index.html
│ ├── listar.html
│ ├── cadastrar.html
│ ├── detalhe.html
│ ├── alertas.html
│ ├── confirmar_uso.html
│ ├── confirmar_exclusao.html
│ └── historico.html # tela de histórico de eventos
│
├── staticfiles/ # gerado pelo collectstatic / WhiteNoise (não versionar)
│
├── tests/
│ ├── __init__.py
│ ├── test_models.py
│ ├── test_bula_api.py # testes da integração com a API openFDA
│ └── test_traducao.py # testes da tradução PT↔EN
│
├── __pycache__/ # não versionar
├── .pytest_cache/ # não versionar
├── .ruff_cache/ # não versionar
├── .venv/ # não versionar
└── .git/ # controle de versão localInicialize o terminal (Prompt de Comando CMD ou PowerShell), clicando com o botão direito na pasta de preferência e selecionando "Abrir Terminal":
# No terminal que abrir Clone o repositório com o comando:
git clone https://github.com/AdlerMrF/medguard.git
cd medguard
# Crie e ative o ambiente virtual
python -m venv .venv
.venv\\Scripts\\activate ou .venv/Scripts/activate # Windows
source .venv/bin/activate # Linux/Mac
# Instale as dependências
pip install -r requirements.txt
# Execute as migrações
python manage.py migrate
# (Opcional) Crie um superusuário para o admin
python manage.py createsuperuser
# Rode o servidor
python manage.py runserver
Acesse em: http://127.0.0.1:8000Ao rodarmos http://127.0.0.1:8000, será apresentada a tela inicial do Programa:
Para fins de testes adicionamos o "Soro Nasal", para mostrar as funcionalidades de cadastro de remédios:
Teste da API, criei dois medicamentos, um com o nome "aspirin" e o outro com o nome "ibuprofen" que em português são aspirina e ibuprofeno reespectivamente:
A aplicação está hospedada no Render e disponível em https://medguard-2khx.onrender.com.
O banco de dados em produção é o Neon, um PostgreSQL
gerenciado em nuvem. A conexão é feita pela variável de ambiente DATABASE_URL
(lida em config/settings.py via dj-database-url); em ambiente local, sem essa
variável, o projeto continua usando o db.sqlite3 automaticamente.
O processo de build no Render é executado pelo build.sh:
pip install -r requirements.txt
python manage.py collectstatic --no-input
python manage.py migrateVariáveis de ambiente usadas em produção:
| Variável | Descrição |
|---|---|
DATABASE_URL |
URL de conexão do PostgreSQL (Neon) |
SECRET_KEY |
Chave secreta do Django |
DEBUG |
False em produção |
pytestCom cobertura:
pytest --cov=medicamento --cov-report=term-missingruff check .1.0.0
Adler — https://github.com/AdlerMrF
David - https://github.com/Daviddanillo
Heitor - https://github.com/HeitorSantos2006
Vinicius - https://github.com/Vinicius665a