Múltiplos saldos
Uma única conta pode manter vários saldos. Uma chave exclusiva identifica cada um. Isso permite que as instituições segmentem fundos sem criar múltiplas contas para o mesmo cliente.
Contas externas não podem ter múltiplos saldos. Cada conta externa mantém exatamente um saldo.
- Reservas de investimento
- Limites de crédito
- Fundos de garantia (bloqueados)
- Fundos operacionais do dia a dia
Figura 1. Diagrama de múltiplos saldos.
Chave do saldo
Um campokey identifica cada saldo de forma exclusiva dentro da conta.
- Comprimento máximo: 100 caracteres, sem espaços em branco.
- Chave padrão:
"default". O Midaz cria o saldo padrão automaticamente quando a conta é criada. - Exclusividade: Cada chave deve ser exclusiva por conta. Uma solicitação para criar um saldo com uma chave que já existe na conta retorna um erro.
- Em transações: Se uma transação não especificar uma
balanceKey, o Midaz usa o saldo com a chave"default".
Você define a
key no momento da criação e não pode alterá-la depois. Escolha chaves descritivas como "credit", "collateral" ou "savings" para tornar seu modelo de saldo autoexplicativo.Flags de permissão
Cada saldo tem duas flags de permissão independentes que controlam se ele pode participar de transações:
Essas flags são por saldo. Elas se aplicam a um saldo, não à conta inteira. Ambas assumem
true por padrão quando você não as define.
Casos de uso comuns:
- Congelar um saldo: Defina
allowSendingeallowReceivingcomofalsepara impedir qualquer movimentação. - Saldo apenas para recebimento: Defina
allowSendingcomofalsepara bloquear transferências de saída e continuar aceitando entradas. - Saldo apenas para envio: Defina
allowReceivingcomofalsepara impedir a entrada de novos fundos neste saldo.
Exemplos de uso
- Carteira do usuário (BRL): Uma carteira digital que mostra um saldo disponível de R$500.
- Caso de uso: Mostrar o saldo em um aplicativo de banco móvel e validar fundos antes de um pagamento.
- Conta de liquidação (USD): Uma conta de provedor de liquidez com um saldo em USD de $120.000.
- Caso de uso: Garantir que as operações diárias de tesouraria mantenham buffer suficiente para liquidações de câmbio.
- Saldo bloqueado (BRL): Um saldo de conta reservado como garantia.
- Caso de uso: Impedir o uso de fundos até que um empréstimo se encerre ou o tomador cumpra as condições.
Um saldo bloqueado (garantia) restringe fundos no nível do saldo. O Midaz mantém o valor em um saldo separado e o combina com flags de permissão para manter os fundos indisponíveis. Isso difere de uma transação de Bloqueio, que registra uma movimentação no ledger com operações do tipo
BLOCK. Uma transação de Bloqueio sinaliza fundos por motivos como uma retenção de compliance. Use um saldo de garantia para uma restrição operacional permanente. Use uma transação de Bloqueio quando precisar de um lançamento auditável no ledger.Estrutura do saldo
- Saldo > Conta: Cada Saldo pertence a uma Conta, que mantém e movimenta valor.
- Saldo > Ativo: Cada Saldo usa um Ativo específico, como BRL ou BTC.
- Saldo > Ledger: Os Saldos existem dentro de um Ledger, o que viabiliza ambientes multi-book.
- Saldo > Chave: Cada Saldo tem uma chave exclusiva dentro da conta (por exemplo,
default,credit,collateral).
Figura 2. Diagrama de relacionamentos da estrutura do saldo.
Características principais
- Acompanhamento em tempo real: O Midaz atualiza os saldos a cada operação confirmada.
- Múltiplos saldos por conta: As contas podem manter vários saldos, cada um com suas próprias regras.
- Fonte única de verdade: Os saldos refletem a soma líquida de todas as operações na conta.
- Consulta por contexto: Você pode listar saldos dentro de uma organização e ledger, recuperá-los pelo ID ou alias da conta, e recuperar o saldo de uma Conta Externa pelo código do ativo. Os endpoints de listagem de saldo não filtram por um código de ativo genérico ou por
balanceKey. - Suporte a contas externas: Você pode recuperar saldos de contas internas ou externas, como pools de liquidez ou parceiros.
Usando saldos em transações
Os seguintes endpoints de transação aceitam um campo
balanceKey para especificar qual saldo usar:
- Create a Transaction using JSON
- Create an Inflow Transaction
- Create an Outflow Transaction
- Create a Transaction Annotation
balanceKey, o Midaz usa o saldo padrão da conta.
Novos campos nas respostas
balanceKey- Aparece em transações e operações para mostrar qual saldo a transação usou.key- Aparece nos saldos para identificar cada saldo de forma exclusiva.
Sempre use a
balanceKey de forma consistente entre solicitações e respostas. Isso evita incompatibilidades quando as contas mantêm múltiplos saldos.Mudanças na chave de cache (Valkey)
Os saldos no cache (Valkey) incluem a
balanceKey.
Formato anterior
Novo formato
balance:{transactions}:, e o balance_key é anexado ao alias da conta com um separador #. Um namespace de tenant pode prefixar a chave ainda mais em deploys multi-tenant.
Overdraft
Os saldos aceitam overdraft, a capacidade de debitar um saldo além dos fundos disponíveis. Quando você habilita o overdraft, o Midaz rastreia o déficit como
overdraftUsed. O Midaz também trata a divisão da operação e o pagamento automaticamente.
Dois campos oferecem suporte a esse recurso:
direction: Para um saldo padrão criado automaticamente, a direção écreditpara contas não externas edebitpara Contas Externas. Saldos adicionais podem definir a direção na criação. Ela não pode mudar depois.settings: Controla o comportamento do overdraft comallowOverdraft,overdraftLimitEnabledeoverdraftLimit.
O Midaz reserva a chave
"overdraft" para o saldo companheiro gerenciado pelo sistema que registra o lado do passivo. Uma solicitação para criar um saldo com essa chave retorna um erro.settings.balanceScope também distingue saldos por escopo. Os saldos transacionais (o padrão) são gerenciados pelo usuário e participam de transações normais. O sistema opera exclusivamente os saldos internos, como o companheiro de overdraft. As transações do usuário não podem direcionar, modificar ou excluir esses saldos pela API pública.
Para detalhes completos sobre modos de configuração, divisão de operações, pagamento automático, eventos e casos de uso, veja Balance Overdraft.
Histórico do saldo
O Midaz oferece consultas pontuais no tempo para saldos. Você pode recuperar o estado de um saldo em um timestamp passado, em ou após a criação do saldo. Se não existir nenhuma operação antes desse timestamp, o Midaz retorna o estado inicial zerado. Ele retorna
404 quando o timestamp solicitado é anterior à criação do saldo. Isso oferece suporte a auditoria, conciliação e relatórios históricos.
Como funciona
Quando você consulta o histórico do saldo, o Midaz retorna campos históricos de identidade e valor. Ele omiteallowSending, allowReceiving, deletedAt e metadata. A implementação atual também não reconstrói direction ou settings históricos, e retorna overdraftUsed como zero. Não trate isso como uma resposta completa de saldo normal menos as flags de permissão.
Casos de uso
- Auditoria regulatória: Comprove o saldo exato de uma conta em um ponto de verificação de compliance específico.
- Conciliação: Compare snapshots de saldo entre sistemas em timestamps correspondentes.
- Resolução de disputas: Recupere o estado exato da conta no momento de uma transação contestada.
- Relatório de fim de dia: Capture posições de saldo no fechamento do mercado para operações de tesouraria.
Consultando o histórico do saldo
Você pode consultar o histórico de um único saldo ou de todos os saldos de uma conta:- Retrieve Balance History - Obtenha o estado de um saldo específico em um determinado ponto no tempo.
- Retrieve Balance History by Account - Obtenha o estado de todos os saldos de uma conta em um determinado ponto no tempo.
Gerenciando Saldos
Você pode recuperar seus saldos pela API. O motor de ledger do Midaz calcula os valores de saldo a partir das transações. Você não pode definir
available ou onHold diretamente. Você gerencia os registros de saldo (chave, flags de permissão e configurações) pelos endpoints abaixo.
- Create a Balance - Crie um novo saldo para uma conta definindo uma chave exclusiva.
- List Balances - Recupere todos os saldos por organização e ledger.
- Retrieve a Balance - Obtenha o saldo de uma conta específica pelo ID exclusivo dela.
- Retrieve Balances by Account - Obtenha o saldo de uma conta específica.
- Retrieve a Balance by Account Alias - Obtenha o saldo com um alias de conta legível por humanos (por exemplo, @user123).
- Retrieve a Balance of an External Account - Recupere o saldo de uma conta externa (por exemplo,
@external/BRL). - Update a Balance - Atualize as flags de permissão e as configurações de um saldo.
- Delete a Balance - Exclua um registro de saldo do sistema.
Próximos passos
- Use a API de Operações para rastrear transações que envolvem múltiplos saldos.
- Combine múltiplos saldos com Rotas Contábeis para criar fluxos financeiros flexíveis e escaláveis.

