CashSettlement registra a prestação de contas individual de uma venda em dinheiro iniciada por CheckoutSession. A declaração e o envio são automáticos; a cooperativa apenas confirma ou rejeita a prestação pendente.
Campos
Relacionamentos
- Relaciona-se com CheckoutSession por
checkoutSessionIdúnico. Cada CheckoutSession confirmada compaymentMethod = CASHpossui exatamente um CashSettlement. - Relaciona-se com Organization por
organizationId. - Relaciona-se com Cooperative por
cooperativeId. - Relaciona-se com TransportOperator por
transportOperatorId. - Relaciona-se com Driver por
driverId. - Relaciona-se opcionalmente 1:1 com Payment por
Payment.cashSettlementIdúnico. O vínculo é obrigatório quandostatus = CONFIRMED.
As APIs podem projetar
paymentId no CashSettlement. Esse valor é derivado do Payment que possui cashSettlementId; a FK é persistida somente em Payment.Regras de Negócio
- A confirmação de uma CheckoutSession com
paymentMethod = CASHcria e envia o CashSettlement automaticamente comstatus = PENDING. - O mesmo fluxo cria o Payment
CASHcomchannel = DRIVER_APPestatus = PAID, mas mantémPayment.cashSettlementId = nullaté a confirmação pela OPS. - O fluxo CASH de CheckoutSession deve produzir exatamente um Payment para preservar as relações 1:1.
declaredAmounté preenchido automaticamente com o valor em dinheiro da venda e não é informado por um endpoint de criação ou envio.organizationId,cooperativeId,transportOperatorIdedriverIdrepetem o contexto da Trip no momento da venda para manter o registro financeiro auditável.- Confirmar a prestação e preencher
Payment.cashSettlementIdocorre na mesma transação. - Um CashSettlement
CONFIRMEDdeve possuir exatamente um Payment vinculado, e um Payment não pode pertencer a mais de um CashSettlement. - Um CashSettlement
PENDINGouREJECTEDnão possui Payment vinculado. - Rejeitar a prestação não altera o status
PAIDdo Payment nem invalida Order ou Ticket já emitidos. - A criação e o envio são idempotentes por
checkoutSessionId.