Fluxo
Estados da sessão
Os estados abaixo são calculados a partir delinkedAt, preparedAt, confirmedAt, canceledAt e expiresAt; não há campo status persistido na sessão.
Responsabilidades
Dinheiro vs crédito
Validações
- O QR Code deve pertencer a uma sessão ativa, não expirada e não confirmada.
- O Customer deve estar autenticado no app do cliente.
- A sessão só pode ser vinculada por um Customer autenticado uma vez; tentativa de trocar o vínculo deve cancelar a sessão e criar outra.
- O usuário autenticado deve estar autorizado para a Trip selecionada.
- A Trip precisa estar elegível para venda embarcada, conforme política operacional da cooperativa.
- O ticket continua exigindo itinerary, passageiro, assento disponível e regras de benefício compatíveis.
- Vendas com
paymentMethod = CREDIT_GRANTdevem validar saldo ativo do Customer e criar movimentos de reserva/captura no Credit Grant. - Vendas com
paymentMethod = CASHnão dependem de gateway e não aguardam webhook para emissão.
Dados que não devem ser persistidos
- Saldo disponível do Customer na sessão; calcular a partir de CreditGrant.
- Estado de envio da prestação de contas; a confirmação CASH já cria o CashSettlement pendente.
CREDIT_GRANTem PaymentMethod; crédito corporativo permanece no domínio Credit Grant.