R-002 — Confirmação de pagamento via webhook e ativação da sessão
TLDR: Um pagamento confirmado via webhook do gateway só ativa as sessões se elas ainda existirem em estado
pending— um webhook atrasado após a expiração deixa o pagamentopaidmas as sessões irrecuperáveis.
Given / When / Then
Dado um pagamento ligado a uma order com sessões
Quando o webhook do ZeusPay/Asaas dispara um evento de confirmação e Payments::UpdateStatusFlow o processa
Então se payment.paid? e order.meetings.pending.exists? → as sessões passam a scheduled e notificações são enviadas; caso contrário nenhuma mudança ocorre nas sessões
Tabela de decisão
| Status no gateway | Sessões existem? | Estado das sessões | Resultado |
|---|---|---|---|
paid |
sim | pending |
Sessões → scheduled, notificações enviadas |
paid |
sim | canceled ou finished |
Nenhuma mudança nas sessões |
paid |
não (destruídas) | — | Nenhuma mudança — perda silenciosa de dados |
refunded / canceled / overdue / expired |
sim | qualquer | Sessões → canceled com motivo |
| Igual ao status atual | qualquer | qualquer | Retorno antecipado — nenhuma mudança |
Restrições
Orders::ConfirmPaymentsó é chamado quandoorder.meetings.pending.exists?retornatrue- Uma vez que as sessões são destruídas (por
Meetings::DestroyAllByRelatedPayment), um webhook atrasado não consegue recuperá-las - O handler do webhook não distingue entre sessões canceladas pelo sistema vs. por um usuário
- O status
RECEIVEDdo gateway (Asaas) mapeia parapaidna plataforma
Teste vinculado
spec/use_cases/payments/update_meetings_by_gateway_status_spec.rb — (sem teste ainda)