Skip to content

angualberto/projeto-sus

Repository files navigation

⁸SUS.AI - esqueleto FastAPI para Hackathon

Como rodar (local):

  1. python -m venv .venv && source .venv/bin/activate
  2. pip install -r requirements.txt
  3. export ANON_SECRET="troque_por_chave_segura_em_producao"
  4. 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.
  1. Defina a variável de ambiente do segredo:
export ANON_SECRET="troque_por_chave_segura_em_producao"
  1. Suba a stack de produção:
docker-compose -f docker-compose.prod.yml up -d --build
  1. 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 postgres e a variável DATABASE_URL no serviço web.
  • 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.sh

Nota 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.git

Ou atualize e reinstale as dependências:

pip install --no-cache-dir -r requirements.txt

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published