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
| Campo | Tipo | Descrição |
|---|---|---|
creditLedgerEntryId | UUID | Identificador único |
creditGrantId | UUID | Crédito movimentado |
organizationId | UUID | Organização da Company do crédito |
companyId | UUID | Company responsável pelo crédito |
customerId | UUID | Customer beneficiado pelo movimento |
checkoutId | UUID? | Checkout relacionado ao movimento, quando existir |
orderId | UUID? | Pedido relacionado ao movimento, quando existir |
ticketId | UUID? | Passagem relacionada ao movimento, quando existir |
type | CreditLedgerEntryType | Tipo do movimento |
amount | Int | Valor do movimento em centavos |
availableAfter | Int | Valor disponível do CreditGrant após o movimento |
referenceType | String? | Tipo de referência externa ou interna que originou o movimento |
referenceId | String? | Identificador da referência que originou o movimento |
idempotencyKey | String? | Chave usada para evitar duplicidade do movimento |
createdBy | UUID? | Usuário que criou o movimento, quando aplicável |
createdAt | DateTime | Data de criação do movimento |
Relacionamentos
- Relaciona-se com CreditGrant por
creditGrantId. - Relaciona-se com Company por
companyId. - Relaciona-se com Customer por
customerId. - Relaciona-se com Checkout, Order e Ticket, quando o movimento vem de uma compra.
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.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.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.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.
Enums
CreditLedgerEntryType
| Valor | Descrição |
|---|---|
GRANT | Entrada inicial do valor concedido |
RESERVE | Reserva temporária para checkout em andamento |
CAPTURE | Uso confirmado em compra paga |
RELEASE | Liberação de reserva não capturada |
REFUND | Estorno de valor usado em compra cancelada |
EXPIRE | Baixa de valor vencido |
ADJUSTMENT | Ajuste administrativo rastreado |