Por que isso importa
Para equipes de produto e operações, cada saldo se torna sua própria conta. O Ledger então aplica cada regra de segregação: uma saída bloqueada, um gasto restrito a 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 equipes de engenharia, cada endereço externo se resolve em uma conta específica antes de o Midaz registrar uma transação. Números de core banking e identificadores de trilhos de pagamento apontam cada um para um saldo. Você nunca precisa adivinhar a qual saldo um evento recebido pertence. Não existe um repositório de saldo separado para manter sincronizado com o Ledger.
A arquitetura de referência
O modelo é um titular, N contas, N identificadores externos:
- Um titular: o cliente, identificado por um documento (CPF, CNPJ, identificação fiscal). O titular representa quem detém o relacionamento. Ele não carrega saldo nem decide o roteamento da transação.
- N contas: cada conta é uma posição contábil autocontida, 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 se resolve em exatamente uma conta.
Arquitetura de referência: um cliente, várias contas.
Quando o saldo, o ledger, o extrato ou a regra operacional diferem por destino, aponte cada identificador para uma conta distinta. Um identificador externo não é apenas um apelido para 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 saldo separado nem inventa uma camada contábil.
Pré-requisitos
Este exemplo pressupõe um ambiente Midaz em funcionamento com o seguinte já configurado:
O Midaz representa valores na menor unidade da moeda. Para BRL,
15000 significa R$ 150,00 (centavos).Construindo três contas para um cliente
O cliente com o documento
12345678900 precisa de três contas. A conta principal é livre para movimentação comum. A conta de 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 declare um tipo registrado. Isso é o que permite que o Ledger aplique a natureza de cada conta.As configurações valem imediatamente. Você não precisa fazer um novo deploy.
2
Registre os Tipos de Conta
Crie um Tipo de Conta para cada natureza de saldo. O Repita para
keyValue é o que o campo type de cada conta deve corresponder.benefit_account (movimentação sob regras de produto) e restricted_account. A restricted_account é a conta bloqueada: ela aceita entradas, mas condiciona ou bloqueia saídas.3
Crie as três contas
Cada conta se vincula ao ativo Crie a conta de 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 Titular
Crie um Titular para o cliente. O mesmo Titular é dono das três contas e mantém a identidade em um só lugar.Salve o
No Midaz v4, o CRM é parte do binário do ledger, então não precisa de um serviço ou porta separados. O ID da organização viaja no caminho da URL. Veja Primeiros passos com o CRM para o esquema completo.
holderId retornado. Você vai usá-lo na próxima etapa.5
Vincule cada conta ao Titular
Crie um Instrumento para cada conta do ledger para anexar contexto bancário e regulatório. O Instrumento permanece dentro do binário unificado do Ledger, mas mantém os detalhes voltados ao cliente fora do modelo transacional de conta e saldo.Veja 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 se resolve em uma conta específica. Repita para as contas de benefício e bloqueada, e aponte o accountId para cada uma.O limite da transação
Quando um evento externo chega, a resolução acontece antes da chamada ao Midaz. Cada camada permanece em sua função, o que 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 correto do Midaz. Ele também aplica a validação de status (ativa, bloqueada, encerrada).
3
O Midaz registra na conta certa
O Midaz registra o lançamento na conta resolvida e preserva o saldo e o ledger. Extrato e conciliação permanecem separados por conta.
O que isso viabiliza
- Segregação real: cada saldo tem seu próprio ledger e extrato. Você não consegue 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 Titular é dono de várias contas. Os dados de identidade e contato vivem em um só lugar, enquanto os saldos permanecem separados.
- Nativo, não construído por fora: contas, tipos, aliases e
entityIdsão primitivas da plataforma, então não existe um repositório de saldo paralelo para conciliar com o Ledger.
O que você precisa para começar
Próximos passos
Contas
A unidade financeira principal: aliases,
entityId e contas externas.Tipos de Conta
Classifique contas e aplique sua natureza com validação de rota.
Portfólios
Agrupe as contas de um cliente para visualizar o relacionamento total.
CRM: Titulares e Instrumentos
Centralize a identidade e anexe contexto bancário e regulatório.

