Direção do saldo
Os saldos possuem um campo
direction que define como débitos e créditos afetam o saldo:
Você define a direção no momento da criação. Ela é imutável. O saldo companion de overdraft (descrito abaixo) sempre usa
direction=debit.Configurações do saldo
O objeto
settings no saldo controla o comportamento de overdraft:
O objeto
settings também carrega um campo balanceScope gerenciado pelo sistema. Ele separa saldos internos (como o companion de overdraft) de saldos transacionais. Você não define este campo diretamente.Modos de configuração
Sem overdraft (padrão)
O comportamento padrão. O Midaz rejeita qualquer débito que exceda o saldo disponível.Overdraft ilimitado
O saldo pode ficar negativo sem teto. Use isso para contas de liquidação ou pool, onde posições negativas são normais e você as reconcilia externamente.Overdraft limitado
O saldo pode ficar negativo até um limite definido. O modo mais comum para produtos de crédito ao consumidor.Como o overdraft funciona
Split de operação
Quando uma transação de débito excede os fundos disponíveis, o Midaz automaticamente divide a operação:- O débito consome todo o Available restante e o fixa em 0.
- O Midaz acumula o excedente como OverdraftUsed no saldo primário.
- O Midaz cria uma operação companion no saldo interno
"overdraft"(descrito abaixo). Essa operação registra o passivo como um débito de partida dobrada.
A transação é processada como uma única operação atômica. O chamador não precisa tratar o split — o Midaz faz automaticamente.
Se você configurar um limite, o Midaz compara o OverdraftUsed resultante com o
overdraftLimit antes de processar a transação. Se o resultado exceder o limite, o Midaz rejeita a transação com o erro 0167 - ErrOverdraftLimitExceeded.Reembolso automático (refund split)
Quando um crédito chega eOverdraftUsed > 0, o Midaz prioriza o reembolso:
- O Midaz aplica o crédito primeiro ao OverdraftUsed e reduz a dívida.
- Qualquer valor remanescente após o OverdraftUsed atingir 0 vai para o Available.
- Uma operação companion no saldo
"overdraft"registra o reembolso.
Cancelamento de transação pendente com overdraft
Quando você cancela uma transaçãoPENDING que consumiu overdraft, o Midaz mantém o saldo companion sincronizado com o saldo primário:
- O cancelamento reverte o hold original e qualquer overdraft consumido durante a janela pending.
OverdraftUsedretorna ao seu valor anterior ao hold. - Uma operação
CREDITcompanion no saldo"overdraft"reduz o passivo no valor exato consumido. - O Midaz aplica o cancelamento primário e o crédito companion no mesmo batch atômico. Os dois saldos nunca saem de sincronia.
Position
Toda resposta de saldo inclui um bloco computado
position. Ele fornece uma visão em tempo real do estado do saldo:
Saldo companion
Quando você atualiza um saldo para definir
allowOverdraft como true pela primeira vez, o Midaz auto-provisiona um saldo companion sob a mesma conta. O saldo companion registra o lado do passivo na partida dobrada. O Midaz o cria uma única vez por conta e o reutiliza em cada draw e quitação de overdraft.
Este saldo é totalmente gerenciado pelo sistema:
- Você não pode criá-lo, modificá-lo ou excluí-lo pela API pública.
- O Midaz reserva a chave
"overdraft". Uma requisição que cria um saldo com esta chave retorna o erro0170 - ErrReservedBalanceKey. - Ele espelha o passivo como um registro de partida dobrada, de modo que o ledger permanece equilibrado.
O valor
scope: "internal" bloqueia as operações diretas de usuários, independentemente das flags de permissão acima. O Midaz rejeita qualquer operação direta neste saldo com o erro 0168 - ErrDirectOperationOnInternalBalance. O companion só se movimenta via enrichment de overdraft conduzido pelo sistema.Estado de overdraft nas operações
Toda operação expõe o estado de overdraft nos blocos
balance e balanceAfter. O campo overdraftUsed registra o overdraft consumido antes e depois da operação. Isso fornece uma trilha de auditoria completa sem uma consulta separada ao saldo.
Para operações que não tocam o overdraft, ambos os valores são "0".
Operações companion gerenciadas pelo sistema no saldo "overdraft" usam type: "OVERDRAFT" (em maiúsculas). O campo direction carrega o ciclo de vida: "debit" para um draw, "credit" para um reembolso.
overdraftUsed antes/depois. Ambas espelham a transição de overdraft do saldo primário, então o ciclo de vida fica visível a partir de qualquer uma das linhas. A coluna interna snapshot (JSONB) na tabela operations armazena os mesmos valores para indexação e reconstrução histórica. Essa coluna não faz parte do JSON público. Em vez disso, os valores aparecem em balance.overdraftUsed e balanceAfter.overdraftUsed. O Midaz pode adicionar contexto futuro gerado pelo sistema ao snapshot sem quebrar o contrato público.
Eventos de overdraft
O Midaz publica eventos de ciclo de vida no RabbitMQ quando o estado de overdraft muda. A publicação está habilitada por padrão. Defina a flag como
"false" para desabilitar.
Tipos de evento
Exemplo de payload do evento
Casos de uso
Cheque especial (overdraft de conta corrente)
Crédito clássico ao consumidor. O saldo da conta corrente pode ficar negativo até um limite pré-aprovado. Os juros são acumulados sobre o valor em aberto.Buy Now, Pay Later (BNPL)
Um provedor de BNPL emite um crédito de compra contra o saldo do cliente. Isso cria uma posição de overdraft imediata que o cliente quita em parcelas.Antecipação salarial (Earned Wage Access)
Funcionários sacam contra rendimentos futuros. Os créditos de folha de pagamento liquidam a posição de overdraft quando chegam.Antecipação de recebíveis de marketplace
Vendedores recebem uma antecipação sobre recebíveis futuros. O Midaz quita o overdraft automaticamente conforme as liquidações de vendas chegam.Contas de liquidação / Pool (modo ilimitado)
Contas de liquidação e pool rotineiramente ficam negativas durante o processamento intradiário. O overdraft ilimitado evita rejeições artificiais enquanto você reconcilia a posição no fim do dia.Linhas de crédito rotativo (B2B)
Empresas sacam e quitam de uma facilidade de crédito rotativo. O limite de overdraft representa a linha de crédito total.Pré-financiamento de seguros
Seguradoras pré-financiam sinistros antes do fechamento dos ciclos de cobrança de prêmios. O overdraft cobre o gap entre pagamento e arrecadação.Programas de fidelidade (pontos antecipados)
Clientes resgatam pontos antes de acumulá-los. O overdraft rastreia o déficit de pontos e é quitado conforme os clientes acumulam novos pontos.Regras de proteção
O overdraft introduz diversas restrições de imutabilidade e acesso para manter a integridade do ledger:
- Direção é imutável. Depois de definir a
directionde um saldo na criação, você não pode alterá-la. - Saldos internos bloqueiam escritas. Você não pode criar, excluir ou atualizar o saldo companion
"overdraft"pela API pública — um PATCH retorna o erro0175. - Chaves reservadas. O Midaz reserva a chave
"overdraft"para o saldo companion gerenciado pelo sistema. - Desabilitar overdraft preserva a dívida pendente. Você pode definir
allowOverdraft: falseenquantoOverdraftUsed > 0para bloquear novas saídas, enquanto os créditos recebidos continuam quitando a dívida existente. - Limite não pode cair abaixo do uso. Se
OverdraftUsed = 200, o Midaz rejeitaoverdraftLimit: "100"com o erro0173, então quite abaixo do novo teto primeiro ou defina um limite maior. - Concorrência otimista. Atualizações de saldo usam controle de concorrência baseado em versão, e o Midaz rejeita uma escrita obsoleta com o erro
0174— tente novamente com a versão mais recente.
Próximos passos
- Conheça os Saldos — a base sobre a qual o overdraft é construído.
- Entenda as Operações para rastrear como os splits de overdraft aparecem no ledger.
- Configure o Event Publisher para consumir eventos de ciclo de vida do overdraft.
- Explore as Transações para a visão completa da contabilidade de partida dobrada no Midaz.

