Skip to main content
Um único cliente raramente tem um único saldo. A mesma pessoa pode ter uma conta principal, uma conta benefício, uma conta bloqueada, uma subconta de produto ou um saldo promocional. Cada saldo tem suas próprias regras, seu próprio extrato e suas próprias necessidades de conciliação. O atalho comum trata tudo como rótulos de uma única conta e resolve isso no código da aplicação. Isso funciona até saldos, ledgers, extratos ou regras operacionais precisarem divergir. Nesse ponto, uma única conta não consegue mais dizer a verdade sobre onde o dinheiro está. Esta página mostra a arquitetura de referência para um cliente com várias contas Midaz. Ela mapeia cada parte do modelo para uma entidade nativa da plataforma. Depois percorre um exemplo: três contas para o mesmo documento de cliente.

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.
Uma camada de middleware mantém o mapa entre identificadores externos e contas. Ela resolve cada identificador para a conta correta antes da chamada ao Midaz. O Midaz continua sendo a fonte de verdade para contas, saldos e lançamentos.

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.
Boa parte do que um “alias registry” externo faria já é nativo. O alias da conta é o endereço dentro do Ledger. O entityId armazena o identificador do seu sistema externo. O trabalho do middleware é estreito — traduzir um identificador de trilho externo para o alias de conta correto e, então, lançar.

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 keyValue é o valor com o qual o campo type de cada conta precisa corresponder.
Repita para 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 BRL e declara seu type. Ela carrega um alias (seu endereço dentro do Ledger) e um entityId (seu identificador no seu sistema externo).
Crie a conta benefício com 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.
O entityId é onde você armazena o endereço externo que outros sistemas usam para alcançar esta conta — o seu mapa entre o Midaz e o seu sistema de origem.
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.
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.
Salve o 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.
O resultado: um cliente, três contas, três endereços externos distintos. Cada conta mantém seu próprio saldo, extrato e regras sob um único Holder.

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.
Um identificador de uma conta bloqueada ou encerrada deve falhar na validação antes da chamada ao Midaz. As decisões de roteamento pertencem ao middleware. O Ledger permanece a fonte de verdade para saldos e lançamentos.

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 entityId sã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.