Skip to main content
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 com paymentMethod = CASH possui 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 quando status = 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 = CASH cria e envia o CashSettlement automaticamente com status = PENDING.
  • O mesmo fluxo cria o Payment CASH com channel = DRIVER_APP e status = PAID, mas mantém Payment.cashSettlementId = null até 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, transportOperatorId e driverId repetem o contexto da Trip no momento da venda para manter o registro financeiro auditável.
  • Confirmar a prestação e preencher Payment.cashSettlementId ocorre na mesma transação.
  • Um CashSettlement CONFIRMED deve possuir exatamente um Payment vinculado, e um Payment não pode pertencer a mais de um CashSettlement.
  • Um CashSettlement PENDING ou REJECTED não possui Payment vinculado.
  • Rejeitar a prestação não altera o status PAID do Payment nem invalida Order ou Ticket já emitidos.
  • A criação e o envio são idempotentes por checkoutSessionId.

Enums

CashSettlementStatus

Example