Skip to content

feat: paciente vê "Atendido" — ACS conclui o atendimento do alerta (#76) - #85

Merged
hbgit merged 7 commits into
developfrom
feat/issue-76-alerta-atendido
Oct 16, 2026
Merged

hbgit merged 7 commits into
developfrom
feat/issue-76-alerta-atendido

Conversation

@hbgit

@hbgit hbgit commented Oct 16, 2026

Copy link
Copy Markdown
Owner

Fecha #76.

O que muda

  • Backend: novo RPC alerts.resolve. Ele leva o alerta de acknowledged para resolved, só para o ACS da microárea do token (INV-01) e só depois do ACK: um pending é recusado com "Confirme o recebimento antes de concluir o atendimento." (INV-03). A decisão é tomada sob SELECT … FOR UPDATE e auditada na mesma transação (resolved, already_resolved, denied_not_acknowledged). Repetir é idempotente e devolve o resolvedAt original. Alerta inexistente, de outra microárea ou com id que não é UUID devolve resolved: false sem gravar nada, como o ACK.
  • ACK: passa a travar a linha antes de ler e nunca rebaixa um alerta resolved para acknowledged (reentrega MQTT, toque atrasado em outro aparelho).
  • alerts.statusFor devolve resolvedAt. O maxChangedAt do pulso do backoffice passa a andar com a conclusão.
  • App do ACS: botão "Concluir atendimento" no cartão já confirmado, com diálogo de confirmação. O cartão concluído desce na fila e perde os botões de ação. Falhas do servidor aparecem como aviso e nunca são engolidas.
  • App do paciente: o painel de status mostra "Atendido pela equipe de saúde" e a hora da conclusão, fechando "Enviado → Visualizado → Atendido" (PRD §6.1).
  • Docs: PROGRESS.md, spec/lgpd_data_audit.md (resolvedAt), relatório de lacunas (RF05 e MVP-STATUS entregues; M2.1 segue parcial só pelo SMS) e os dois CLAUDE.md.

Migração

20261016155336452: só ALTER TABLE "alerts" ADD COLUMN "resolvedAt" (anulável, sem DROP). Volumes existentes não perdem dados.

Verificação

  • dart test -j 1 no backend: 1381 passando; dart analyze sem erros nem avisos.
  • flutter test: ACS 553, paciente 260, admin 459; flutter analyze limpo nos três.
  • python3 scripts/qa/cobertura_prd.py --final: 64 IDs, ok.
  • Não há prova no emulador: o e2e do paciente não tem um ACS concluindo o atendimento.

Abertos (adiados da revisão)

  • Um ACK num alerta já concluído responde status: acknowledged, embora a linha no banco siga resolved. Num segundo aparelho, isso faz o botão de concluir reaparecer até o próximo toque, que recebe already_resolved.
  • No backoffice, o contador "Reconhecidos" conta só acknowledged, então um alerta concluído some dele sem entrar em outro contador. Falta um contador "Concluídos".
  • Um ACK depois da conclusão reescreve acsId e grava acknowledged na trilha. Isso já acontecia antes desta PR, e o status não regride.
  • A corrida entre ACK e conclusão tem teste sequencial, mas não concorrente.

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