Por que isso importa
Para times de produto e operações, cada saldo se torna sua própria conta. O Ledger aplica então cada regra de segregação — uma saída bloqueada, um gasto exclusivo de benefício, um saldo promocional com validade. A regra vive no Ledger, não na lógica da aplicação. Cada conta carrega seu próprio extrato e sua própria trilha de conciliação. Para times de engenharia, cada endereço externo resolve para uma conta específica antes de o Midaz lançar uma transação. Os números de core banking e os identificadores de trilho de pagamento apontam cada um para um saldo. Você nunca adivinha a qual saldo um evento de entrada pertence. Não há um repositório de saldos separado para manter sincronizado com o Ledger.
A arquitetura de referência
O modelo é um dono, N contas, N identificadores externos:
- Um dono — o cliente, identificado por um documento (CPF, CNPJ, tax ID). O dono representa quem detém o relacionamento. Ele não carrega saldo e não decide o roteamento transacional.
- N contas — cada conta é uma posição contábil autossuficiente, com seu próprio saldo, ledger, extrato e regras.
- N identificadores externos — os endereços que outros sistemas (uma plataforma de core banking, um trilho de pagamento) usam para alcançar uma conta específica. Cada identificador resolve para exatamente uma conta.
Arquitetura de referência: um cliente, várias contas.
Quando o saldo, o ledger, o extrato ou a regra operacional difere por destino, aponte cada identificador para uma conta distinta. Um identificador externo não é apenas um apelido de um saldo compartilhado.
Como o Midaz mapeia o modelo
Cada parte dessa arquitetura mapeia para uma entidade nativa do Midaz. Você não constrói um repositório de saldos separado nem inventa uma camada contábil.
Pré-requisitos
Este exemplo assume um ambiente Midaz em execução com o seguinte já configurado:
O Midaz representa os valores na menor unidade da moeda. Para BRL,
15000 significa R$ 150,00 (centavos).Criando três contas para um cliente
O cliente com documento
12345678900 precisa de três contas. A conta principal é livre para movimentação ordinária. A conta benefício segue regras de produto. A conta bloqueada aceita entradas mas restringe saídas.
1
Habilite a validação de Tipo de Conta
Ative a validação para que toda conta precise declarar um tipo registrado. É isso que permite ao Ledger aplicar a natureza de cada conta.As configurações entram em vigor imediatamente — sem necessidade de redeploy.
2
Registre os Tipos de Conta
Crie um Tipo de Conta por natureza de saldo. O Repita para
keyValue é o valor com o qual o campo type de cada conta precisa corresponder.benefit_account (movimentação sob regras de produto) e restricted_account. A restricted_account é a conta bloqueada: aceita entradas mas condiciona ou bloqueia as saídas.3
Crie as três contas
Cada conta se vincula ao asset Crie a conta benefício com
BRL e declara seu type. Ela carrega um alias (seu endereço dentro do Ledger) e um entityId (seu identificador no seu sistema externo).alias @cust_12345678900_benefit, entityId 0001/88888-2 e type benefit_account. Crie a conta bloqueada com alias @cust_12345678900_blocked, entityId 0002/77777-0 e type restricted_account.4
Registre o cliente como um Holder
Crie um Holder para o cliente. O mesmo Holder é dono das três contas e mantém a identidade em um só lugar.Salve o
No Midaz v4, o CRM faz parte do binário do ledger, portanto não precisa de um serviço nem de uma porta separada. O ID de organização viaja na rota da URL — veja Primeiros passos com o CRM para o schema completo.
holderId retornado — você vai usá-lo no próximo passo.5
Vincule cada conta ao Holder
Crie um Instrument por conta do ledger para anexar contexto bancário e regulatório. O Instrument permanece dentro do binário Ledger unificado, mas mantém os detalhes voltados ao cliente fora do modelo transacional de contas e saldos.Note como o
entityId da conta principal (0001/12345-1) se decompõe na branch (0001) e na account (12345) que você registra aqui. Esse endereço externo agora resolve para uma conta específica. Repita para as contas benefício e bloqueada, e aponte o accountId para cada uma.A fronteira transacional
Quando um evento externo chega, a resolução acontece antes da chamada ao Midaz. Cada camada se mantém no seu papel, e isso preserva a clareza contábil.
1
Evento externo
Uma transação, consulta ou liquidação chega com um identificador externo.
2
O middleware resolve o identificador
O middleware busca o identificador externo e o resolve para o alias de conta Midaz correto. Ele também aplica validação de status (ativo, bloqueado, encerrado).
3
O Midaz lança na conta certa
O Midaz registra o lançamento na conta resolvida e preserva saldo e ledger. Extrato e conciliação permanecem separados por conta.
O que isso destrava
- Segregação real — cada saldo tem seu próprio ledger e extrato. Você não pode gastar um saldo bloqueado pela conta principal por acidente.
- Roteamento inequívoco — todo evento externo tem uma única conta de destino bem definida.
- Identidade centralizada — um único Holder é dono de várias contas. Identidade e dados de contato vivem em um só lugar, enquanto os saldos permanecem separados.
- Nativo, não improvisado — contas, tipos, aliases e
entityIdsão primitivos da plataforma, então não há um repositório de saldos paralelo para conciliar contra o Ledger.
O que você precisa para começar
Próximos passos
Contas
A unidade financeira central — aliases,
entityId e contas externas.Tipos de Conta
Classifique contas e aplique sua natureza com a validação de rota.
Portfolios
Agrupe as contas de um cliente para ver o relacionamento total.
CRM: Holders e Instruments
Centralize a identidade e anexe contexto bancário e regulatório.

