⁸SUS.AI - esqueleto FastAPI para Hackathon
Como rodar (local):
- python -m venv .venv && source .venv/bin/activate
- pip install -r requirements.txt
- export ANON_SECRET="troque_por_chave_segura_em_producao"
- uvicorn app.main:app --reload
Endpoints: POST /triagem -> classifica e enfileira GET /fila/proximo -> retorna próximo paciente
Upload and conversão .dbc:
-
Upload via endpoint multipart: POST /upload/dbc (form field "file") Retorna: {"status":"ok", "csv": "/caminho/para/output.csv", "tx": ""}
-
Ingestão genérica do CSV convertido: POST /upload/ingest/csv (form field "path") -> insere registros na tabela pacientes quando possível; retorna tx da cadeia
Pseudonimização (LGPD)
- Os CPFs são pseudonimizados usando HMAC-SHA256 com a chave definida na variável de ambiente ANON_SECRET.
- O banco armazena o hash (campo
cpf) em vez do número em texto claro. - Para reidentificação controlada, implemente um mecanismo seguro e auditado (não incluído aqui).
Uso programático do conversor:
- Para gerar .dbf:
from app.utils.converter import dbc_to_dbf
dbc_to_dbf("input.dbc", "output.dbf")- Para converter diretamente para CSV:
from app.utils.converter import dbc_to_csv
csv_path = dbc_to_csv("input.dbc", "output.csv")Rastreamento e prova de custódia (blockchain-lite)
- O projeto inclui um ledger local (append-only) que registra eventos críticos (conversão, ingestão).
- Cada evento retorna um hash (tx) que pode ser usado para verificar integridade e sequência.
Docker (opcional, rápido)
- Build da imagem: docker build -t susai:latest .
- Rodar container (monta DB e pastas locais):
docker run -d --name susai_api -p 8000:8000
-e DB_PATH=/data/data.db
-v $(pwd)/data.db:/data/data.db
-v $(pwd)/uploads:/app/uploads
-v $(pwd)/logs:/app/logs
susai:latest - Ver logs do container: docker logs -f susai_api
- Parar e remover: docker rm -f susai_api
Usando docker-compose
- Subir: docker-compose up -d --build
- Parar: docker-compose down --remove-orphans (arquivo docker-compose.yml já existe como exemplo; ajuste caminhos conforme ambiente)
Produção — Docker Compose (exemplo)
- Observação: este é um exemplo de composição para deploy rápido. O protótipo usa SQLite por compatibilidade; em produção prefira Postgres ou um serviço gerenciado.
- Defina a variável de ambiente do segredo:
export ANON_SECRET="troque_por_chave_segura_em_producao"- Suba a stack de produção:
docker-compose -f docker-compose.prod.yml up -d --build- Ver logs:
docker-compose -f docker-compose.prod.yml logs -f
# ou apenas nginx logs: docker logs -f <nginx_container_id>Notas importantes:
- SQLite (data.db) está montado como volume aqui para compatibilidade com o protótipo. Para produção com alta concorrência, substitua por Postgres:
- atualize app/db.py para ler DATABASE_URL (postgres) e ajustar SQLAlchemy engine;
- atualize docker-compose.prod.yml adicionando um serviço
postgrese a variável DATABASE_URL no serviçoweb.
- Proteja ANON_SECRET em um secret manager (KMS) e não o coloque em arquivos de texto simples.
- Considere usar um processo de foreground (gunicorn/uvicorn workers) e práticas de logging/monitoramento para produção.
Makefile (alavanca)
- Targets úteis já disponíveis (install, prepare, db, start, stop, test, docker-build, docker-run, docker-stop, docker-logs).
- Ex.: make install; make start; make test
Boas práticas (nota)
- Em produção, monte volumes e use um serviço de secrets (KMS) para ANON_SECRET.
- Não exponha o DB SQLite diretamente em ambientes compartilhados; prefira Postgres/managed DB para produção.
- Teste upload/ingest com amostras antes de processar grandes arquivos .dbc.
Nota rápida — marcar scripts executáveis
- Comando único (correto):
chmod +x run_all.sh scripts/bootstrap.sh scripts/test_endpoints.sh scripts/advanced_health_check.sh- Ou use o helper (recomendado):
chmod +x scripts/make_exec.sh
./scripts/make_exec.shNota rápida — se a instalação falhar por não encontrar dbctodbf no PyPI:
- Instale diretamente do repositório Git:
pip install git+https://github.com/mozaru/dbc-to-dbf.gitOu atualize e reinstale as dependências:
pip install --no-cache-dir -r requirements.txt