Skip to content

fix: cifra as colunas de risco e registra a exceção de alerts.riskLevel (#75) - #84

Merged
hbgit merged 7 commits into
developfrom
fix/issue-75-colunas-de-risco
Oct 16, 2026
Merged

hbgit merged 7 commits into
developfrom
fix/issue-75-colunas-de-risco

Conversation

@hbgit

@hbgit hbgit commented Oct 16, 2026

Copy link
Copy Markdown
Owner

Fecha #75.

O que muda

  • Cifra triage_sessions.resultRisk e visits.riskLevelBefore/riskLevelAfter em AES-256-GCM na borda ORM, pelo codec infrastructure/crypto/encrypted_risk_level.dart. O nome do nível é preenchido até uma largura fixa, porque o AES-GCM preserva o tamanho do texto claro e "red" cifrado sairia mais curto que "yellow".
  • Remove triage_sessions.resultDisplay: era o rótulo derivado do risco e ninguém o lia.
  • Mantém alerts.riskLevel legível, por decisão registrada no PRD (INV-04) e em spec/lgpd_data_audit.md §2.3: só red é gravado, e a coluna sustenta os filtros SQL da INV-03 (escalonamento, guarda do expurgo, indicadores). O teste INV-04 (#75) de test/unit/red_alert_discard_paths_test.dart falha se um construtor Alert(...) em lib/src passar a gravar outro nível.
  • Visita gravada antes da migração (sem risco cifrado): fica fora do visits.pull e, no sync/syncLegacy/syncDeferred, recebe rejected só para ela, sem derrubar o resto do lote. Nunca um risco inventado (INV-02).

Migrações (sem backfill)

20261016135918697 (triagem) e 20261016140159775 (visitas) fazem DROP COLUMN das colunas em claro. Um pg_data/ antigo precisa ser recriado (ver CLAUDE.md).

Verificação

  • dart test -j 1 no backend: 1367/1367; dart analyze sem erros nem avisos.
  • flutter analyze limpo em acs, patient e admin.
  • Pilha local recriada do zero + scripts/qa/e2e.sh --keep verde; no banco, os riscos gravados pelos live_check estão em base64 de 48 caracteres uniformes.

Adiados (Minor da revisão)

  • O seed de e2e grava um alerta green sintético por SQL cru (bin/seed_e2e_fixtures.dart:162), fora do alcance do teste-guarda.
  • Textos que ainda citam resultRisk/resultDisplay: patient_risk_event.spy.yaml:2, docs/publicacao-google-play.md:601, spec/validation_report.md:114.
  • decryptRiskLevel lança TypeError (não ArgumentError) se o JSON decifrado não for texto.

@hbgit
hbgit merged commit 1d18461 into develop Oct 16, 2026
10 checks passed
@hbgit
hbgit deleted the fix/issue-75-colunas-de-risco branch October 16, 2026 15:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant