1. Fundamentos da contabilidade por partidas dobradas
O Midaz é construído sobre escrituração rigorosa por partidas dobradas. As regras são simples, mas inegociáveis:
- Toda transação deve ter pelo menos um débito e um crédito.
- O total de débitos deve ser igual ao total de créditos.
- Cada movimentação impacta o ledger de forma balanceada.
Pense em termos de de onde o valor vem (o lado do débito / origem) e para onde ele vai (o lado do crédito / destino). Toda operation do Midaz cai em um dos lados dessa equação.
2. Plano de Contas no Midaz
Na contabilidade tradicional, o Plano de Contas (CoA) define as categorias de contas (Ativos, Passivos, Patrimônio Líquido, Receitas, Despesas), sua hierarquia e como as movimentações são classificadas.
O Midaz não possui uma API dedicada de Plano de Contas. O CoA não é um recurso que você cria ou recupera — ele é o resultado de como você combina ativos, contas, segmentos, portfólios e tipos de conta. O campo
code nos Lançamentos Contábeis (ex.: 1.1.1.001) é onde a numeração de conta tradicional aparece na prática, anotando cada lançamento com sua classificação.- Ativos definem o que é movimentado — moedas (BRL, USD), pontos/milhas, tokens crypto ou unidades internas de valor — junto com a precisão decimal e a metadata regulatória.
- Contas são contêineres de saldo. Cada uma pertence a um portfólio, um segmento, um tipo de conta e um código de ativo, e é identificada por um alias (ex.:
@external/BRL) para tornar o roteamento intuitivo. - Segmentos categorizam e isolam contas (fundos de clientes vs. internos, unidades de negócio, separação multi-tenant).
- Portfólios agrupam contas que compartilham um propósito ou pertencem à mesma entidade.
code aos seus Lançamentos Contábeis para refletir seu esquema de numeração de contas.
Um processo recomendado
Mapeie seu modelo financeiro
Liste os saldos necessários: saldos de clientes, contas internas, contas de reserva/liquidação, contas de taxas e receitas. Este é o blueprint do seu CoA.
Defina os tipos de conta
Crie um Tipo de Conta por categoria conceitual — ex.:
CASH, SETTLEMENT, FEE_REVENUE, FEE_EXPENSE, TREASURY.Crie segmentos e portfólios
Segmentos separam domínios de negócio (
CUSTOMER_FUNDS); portfólios gerenciam propriedade e agrupamento (customer_12345_wallet).3. Configurando Tipos de Conta
Tipos de Conta são templates para as contas no seu ledger. Eles definem como as contas se comportam — operações permitidas, classificação interna vs. externa e regras de reconciliação — e permitem que você classifique contas de acordo com sua estrutura financeira. Uma configuração típica para um produto de pagamentos:
- CASH → fundos líquidos do cliente
- SETTLEMENT → fundos aguardando compensação
- FEE_REVENUE → taxas cobradas
- FEE_EXPENSE → taxas de provedores
- TREASURY → operações internas
type e como gerenciar Tipos de Conta via API, veja Tipos de Conta.
Entendendo os buckets de saldo
Antes de montar fluxos em duas fases, ajuda saber que cada saldo rastreia fundos em buckets distintos. O valor de um saldo é exposto por meio de três campos:available— fundos livres para serem gastos ou enviados imediatamente. Débitos e créditos a um saldo movem esse número.onHold— fundos reservados por umholdpendente e ainda não confirmados. Eles são removidos deavailable, mas ainda pertencem à conta até que a reserva seja confirmada ou cancelada.scale— o número de casas decimais usado para interpretar os valores inteiros (ex.:scale: 2significa queavailable: 100é1.00). Ele define a precisão, não um pool de fundos separado.
available e onHold no saldo de origem:
| Ação | available | onHold |
|---|---|---|
| Direct | Debitado (origem) / creditado (destino) | inalterado |
| Hold | ↓ diminui na origem | ↑ aumenta na origem |
| Commit | creditado no destino | ↓ liberado da origem |
| Cancel | ↑ retorna à origem | ↓ liberado de volta para available |
| Revert | restaurado em ambos os lados via contratransação | inalterado |
4. Definindo Lançamentos Contábeis (Rubricas)
Os Lançamentos Contábeis (Rubricas) mapeiam uma ação de transação para as contas do ledger que ela debita e credita. Em vez de calcular as classificações contábeis manualmente para cada movimentação, você registra as rubricas uma única vez e deixa o Midaz resolvê-las automaticamente — registrando o
routeCode e o routeDescription resultantes em cada operation.
As rubricas são configuradas por ação em cada Operation Route, dentro do bloco accountingEntries. Rotas de origem exigem a rubrica de débito, rotas de destino exigem a rubrica de crédito e rotas bidirecionais exigem ambas.
Os cinco tipos de ação
| Ação | Código | O que faz |
|---|---|---|
| Direct | direct | Débito/crédito imediato de etapa única entre duas contas, sem estágios intermediários (ex.: uma taxa ou ajuste). |
| Hold | hold | Reserva fundos criando uma movimentação pendente (available → on_hold na origem). |
| Commit | commit | Confirma um valor previamente reservado, liberando o on_hold para o destino. |
| Cancel | cancel | Cancela uma reserva, retornando o valor on_hold para available na origem. |
| Revert | revert | Reverte uma transação direct concluída via uma contratransação. |
5. Roteamento de transações
O roteamento é um sistema de duas camadas que resolve em tempo de execução:
- Operation Routes definem a lógica contábil de cada perna de uma transação — quais contas são debitadas/creditadas, balance keys, regras de validação — e carregam os Lançamentos Contábeis (rubricas) acima.
- Transaction Routes definem o evento de negócio que dispara a contabilidade (
PIX_CASH_OUT,WALLET_TRANSFER,BANK_SLIP_SETTLEMENT, …) e combinam Operation Routes em um evento financeiro balanceado.
6. Exemplo de ponta a ponta — um pagamento Pix
Vamos juntar tudo com um Pix cash-out simples: um cliente envia BRL da sua carteira para uma conta externa.
Configuração das contas
Crie as contas no seu ledger:
customer_12345_brl— Tipo de ContaCASH, ativoBRL@external/BRL— a conta de liquidação externa para fundos que saem do ledger
Registro da rubrica
Na Operation Route da perna do cliente (origem), registre a rubrica de débito
direct. Na perna externa (destino), registre a rubrica de crédito direct:Transação
Submeta uma transação contra a Transaction Route
PIX_CASH_OUT, movimentando, digamos, 100.00 BRL de customer_12345_brl para @external/BRL.hold, commit e cancel na rota e submeta as ações correspondentes; cada etapa resolve sua própria rubrica.
7. Modos de validação
Por padrão, se nenhuma rubrica estiver registrada para uma ação, a transação prossegue normalmente e os campos
routeCode/routeDescription simplesmente ficam vazios para aquela operation — nenhum erro é gerado. Esse modo graceful é conveniente enquanto você ainda está configurando rotas.
Em produção, defina accounting.validateRoutes como true nas Configurações do Ledger para exigir que toda ação tenha uma rubrica registrada:
0117 ErrAccountingRouteNotFound. Isso evita que movimentações fiquem silenciosamente sem classificação contábil.
Próximos passos
- Revise a visão geral de Contabilidade e as páginas de referência para o detalhamento completo a nível de campo.
- Quando seu ledger produzir lançamentos estruturados, veja o Lerian Reporter para transformar eventos do ledger em arquivos de reconciliação, demonstrações financeiras e saídas regulatórias alinhadas ao COSIF.

