Skip to main content
Um único cliente raramente tem um único saldo. A mesma pessoa pode ter uma conta principal, uma conta de 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 isso como rótulos em uma única conta e resolve tudo no código da aplicação. Isso funciona até que saldos, ledgers, extratos ou regras operacionais precisem divergir. Nesse ponto, uma única conta não consegue mais dizer a verdade sobre onde está o dinheiro. Esta página mostra a arquitetura de referência para um cliente com várias contas do 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 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.
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 da 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.

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.
Boa parte do que um “registro de aliases” externo faria já é nativo. O alias da conta é o endereço dentro do Ledger. O entityId guarda 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 registrar.

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 keyValue é o que o campo type de cada conta deve corresponder.
Repita para 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 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 de 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ê guarda o endereço externo que outros sistemas usam para alcançar essa conta. É o seu mapa entre o Midaz e o seu sistema de origem.
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.
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.
Salve o 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.
Agora você tem um cliente, três contas e três endereços externos distintos. Cada conta mantém seu próprio saldo, extrato e regras sob um único Titular.

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

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