Pular para o conteúdo principal
Um único cliente raramente tem um único saldo. A mesma pessoa pode ter uma conta principal, uma conta benefício, uma conta judicial ou bloqueada, uma subconta de produto ou um saldo promocional — cada um com suas próprias regras, seu próprio extrato e suas próprias necessidades de conciliação. O atalho comum é tratar tudo como rótulos de uma única conta e resolver isso no código da aplicação. Isso funciona até o dia em que saldos, ledgers, extratos ou regras operacionais precisam divergir — e aí 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 sendo dono de várias contas Midaz, como as entidades nativas da plataforma mapeiam esse modelo, e um exemplo passo a passo de como criar três contas para o mesmo documento de cliente.

Por que isso importa


Para times de produto e operações, modelar cada saldo como sua própria conta significa que cada regra de segregação — uma saída bloqueada, um gasto exclusivo de benefício, um saldo promocional com validade — é aplicada pelo Ledger, e não enterrada 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, os endereços externos do cliente (números de core banking, identificadores de trilho de pagamento) resolvem para uma conta específica antes de a transação ser lançada. Não há adivinhação sobre a qual saldo um evento de entrada pertence, e 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, e resolve cada identificador para a conta correta antes de chamar o Midaz. O Midaz continua sendo a fonte de verdade para contas, saldos e lançamentos.
Um cliente, várias contas — arquitetura de referência

Arquitetura de referência: um cliente, várias contas.

Cada identificador externo não é apenas um apelido de um saldo compartilhado. Quando saldo, ledger, extrato ou regra operacional difere por destino, cada identificador precisa apontar para uma conta distinta.

Como o Midaz mapeia o modelo


Cada parte dessa arquitetura mapeia para uma entidade nativa do Midaz — você não precisa construir um repositório de saldos separado nem inventar 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, e o entityId armazena o identificador do seu sistema externo. O trabalho do middleware é mais estreito do que parece à primeira vista — 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:
Valores no Midaz são representados 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: uma conta principal para movimentação ordinária, uma conta benefício governada por regras de produto, e uma conta bloqueada que 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 governada por regras de produto”) e restricted_account — a conta bloqueada, onde entradas são permitidas mas saídas são condicionadas ou bloqueadas.
3

Crie as três contas

Cada conta é vinculada ao asset BRL, declara seu type e 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, type benefit_account; e a conta bloqueada com alias @cust_12345678900_blocked, entityId 0002/77777-0, 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 será dono das três contas, mantendo a identidade centralizada.
O CRM roda como um serviço separado, e toda requisição exige o header X-Organization-Id. Veja Primeiros passos com o CRM para a configuração do serviço e o schema completo.
Salve o holderId retornado — você vai usá-lo no próximo passo.
5

Vincule cada conta ao Holder

Crie uma Alias Account por conta do ledger para anexar contexto bancário e regulatório. É isso que viabiliza as funcionalidades baseadas em CRM e mantém os detalhes voltados ao cliente separados do Ledger.
Note como o entityId da conta principal (0001/12345-1) se decompõe na branch (0001) e na account (12345) que você registra aqui — é o endereço externo resolvendo para uma conta específica. Repita para as contas benefício e bloqueada, apontando o accountId para cada uma.
O resultado: um cliente, três contas, três endereços externos distintos — cada um com seu próprio saldo, extrato e regras, todos pertencentes a um único Holder.

A fronteira transacional


Quando um evento externo chega, a resolução acontece antes de o Midaz ser chamado. Manter cada camada no seu papel é o que preserva a clareza contábil.
1

Evento externo

Uma transação, consulta ou liquidação chega carregando 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, aplicando validação de status (ativo, bloqueado, encerrado).
3

O Midaz lança na conta certa

O Midaz registra o lançamento na conta resolvida, preservando 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 de o Midaz ser chamado. 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, então um saldo bloqueado nunca pode ser gasto 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 Alias Accounts

Centralize a identidade e anexe contexto bancário e regulatório.