CreditLedgerEntry registra cada movimento financeiro de um CreditGrant. Ele cria rastreabilidade para concessão, reserva, captura, liberação, expiração, ajuste e estorno do crédito.
Campos
Relacionamentos
- Relaciona-se com CreditGrant por
creditGrantId. - Relaciona-se com Company por
companyId. - Relaciona-se com Customer por
customerId. - Relaciona-se com Cooperative por
cooperativeId, quando o movimento ocorre em ticket. - Relaciona-se com TransportOperator por
transportOperatorId, quando o movimento ocorre em ticket. - Relaciona-se com Checkout e Order como contexto comercial.
- Relaciona-se com Ticket como unidade final de uso do crédito.
Regras de Negócio
- O ledger é append-only: registros não devem ser atualizados nem removidos depois de criados.
companyId,organizationIdecustomerIddevem repetir o escopo do CreditGrant no momento do movimento.companyIdidentifica a empresa que concedeu o crédito; não identifica a cooperativa do ticket.- Quando o movimento vier de um ticket,
cooperativeIdetransportOperatorIddevem repetir o contexto operacional do Ticket/Trip. - O uso definitivo do crédito é sempre por Ticket.
- Movimentos
CAPTUREeREFUNDdevem preencherticketId. orderIdecheckoutIdpodem acompanhar o movimento para rastreabilidade, mas não substituem oticketIdno consumo.amountpositivo aumenta o valor disponível do crédito;amountnegativo reduz o valor disponível.availableAfterdeve refletir o valor disponível do CreditGrant depois da aplicação do movimento.descriptiondeve explicar movimentos manuais, ajustes e exceções operacionais quando a referência técnica não for suficiente para auditoria.RESERVEreduzavailableAmounte aumentareservedAmountno CreditGrant.CAPTUREreduzreservedAmounte aumentausedAmountno CreditGrant.RELEASEdesfaz uma reserva não capturada e retorna o valor paraavailableAmount.REFUNDdevolve valor capturado para o mesmo CreditGrant, no mesmo beneficiário e na mesma Company.- REFUND não devolve saldo para CompanyCreditAccount; ele recompõe o CreditGrant do Customer.
- No Checkout QR com
paymentMethod = CREDIT_GRANT, a reserva e a captura exigem autorização do Customer pelo app do cliente. EXPIREremove o valor disponível remanescente quando a validade termina.idempotencyKeydeve ser única por tipo de movimento crítico para evitar duplicidade em retry.- Por ser imutável, o registro usa apenas
createdByecreatedAtcomo auditoria direta.