Skip to main content
O Midaz emite seus fatos públicos de negócio JSON como CloudEvents 1.0 em modo de conteúdo binário sobre Kafka por meio da lib-streaming.

Catálogo público JSON do ledger

O manifesto público do ledger contém as definições verificadas abaixo. Toda definição catalogada possui um caminho de emissão de produção não relacionado a testes.

Envelope CloudEvents

Todo fato JSON público usa o envelope compartilhado abaixo. Os cabeçalhos carregam informações de roteamento e esquema; o valor Kafka carrega o objeto JSON data.

Tópicos, manifesto e roteamento

O tópico da aplicação identifica a aplicação produtora, não um evento individual. Roteie um registro por ce-resourcetype e ce-eventtype e valide ce-schemaversion antes de decodificar seu valor data.
  • Fatos: lerian.streaming.ledger
  • DLQ da rota: lerian.streaming.ledger.dlq
  • Manifesto: GET /v1/streaming/manifest expõe o catálogo JSON público e o mapeamento de tópicos, inclusive quando a publicação está desabilitada.

Semântica de entrega e falha

A publicação fica desabilitada até que STREAMING_ENABLED=true e a configuração de brokers tenha êxito. Quando habilitado, o Midaz emite depois da mudança de estado de negócio. Ele não conecta writer de outbox, repositório de outbox, outbox transacional nem relay de outbox da lib-streaming.
  • Política: toda definição JSON pública é um fact com entrega direta, tratamento de DLQ on_routable_failure e fallback_on_circuit_open configurado pela lib-streaming v3.
  • Limite real do Midaz: como nenhum writer de outbox está conectado, o fallback de circuito aberto não pode persistir um evento. Os caminhos de emissão registram e engolem erros de publicação em vez de devolvê-los ao comando de negócio.
  • Requisito do consumidor: a entrega do broker é pelo menos uma vez para registros publicados. Mantenha handlers idempotentes e deduplique com (ce-source, ce-id).

Plano legado separado do RabbitMQ

O Midaz também possui exchanges de compatibilidade para notificações selecionadas de transação, overdraft e auditoria. Eles são um plano legado separado do RabbitMQ, não um contrato da lib-streaming nem uma representação completa deste catálogo público de 49 eventos JSON. Novas integrações devem usar o contrato Kafka desta página.

Contratos completos de data

Estas declarações em estilo TypeScript espelham o formato wire do produtor. Todo nome de campo é seu nome JSON. ? significa que o campo tem omitempty; | null significa que o campo é anulável sem ser omitido. Um comentário de tipo de origem preserva exatamente o tipo do inventário. Valores decimais são strings JSON, nunca números binários de ponto flutuante.

Mapeamentos compartilhados de tipos de origem

Evento: studio.lerian.ledger.account.createdTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Uma conta é aberta em um ledger.Subject: ID da conta (p.ID)
Evento: studio.lerian.ledger.account.deletedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Uma conta é excluída.Subject: ID da conta (p.ID)
Evento: studio.lerian.ledger.account.updatedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Os campos mutáveis de uma conta mudam.Subject: ID da conta (p.ID)
Evento: studio.lerian.ledger.asset.createdTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um ativo é registrado em um ledger.Subject: ID do ativo (p.ID)
Evento: studio.lerian.ledger.asset.deletedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um ativo é excluído.Subject: ID do ativo (p.ID)
Evento: studio.lerian.ledger.asset.updatedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Os campos mutáveis de um ativo mudam.Subject: ID do ativo (p.ID)
Evento: studio.lerian.ledger.balance.changedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Uma transação confirmada move um saldo — um evento por operação que afeta o saldo; os valores refletem o estado após a operação.Subject: ID da transação e ID da operação (p.TransactionID + ":" + p.OperationID)
Evento: studio.lerian.ledger.balance.config_changedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: As configurações de um saldo mudam, ou o cheque especial é habilitado (o saldo acompanhante é materializado). changeType distingue settings_updated de overdraft_enabled.Subject: ID do saldo (p.ID)
Evento: studio.lerian.ledger.balance.createdTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um saldo é criado durante a configuração da conta.Subject: ID do saldo (p.ID)
Evento: studio.lerian.ledger.balance.deletedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um saldo é excluído.Subject: ID do saldo (p.ID)
Evento: studio.lerian.ledger.balance.overdraft_clearedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: O cheque especial é totalmente quitado — sinal terminal (action = cleared).Subject: ID da transação e ID da operação (p.TransactionID + ":" + p.OperationID)
Evento: studio.lerian.ledger.balance.overdraft_drawnTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um débito consome cheque especial além dos fundos disponíveis (action = drawn).Subject: ID da transação e ID da operação (p.TransactionID + ":" + p.OperationID)
Evento: studio.lerian.ledger.balance.overdraft_repaidTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: O uso do cheque especial diminui, mas não é totalmente quitado (action = repaid).Subject: ID da transação e ID da operação (p.TransactionID + ":" + p.OperationID)
Evento: studio.lerian.ledger.fee_billing_packages.createdTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um pacote de cobrança é criado.Subject: ID do pacote de cobrança (p.ID)
Evento: studio.lerian.ledger.fee_billing_packages.deletedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um pacote de cobrança é excluído.Subject: ID do pacote de cobrança (p.ID)
Evento: studio.lerian.ledger.fee_billing_packages.updatedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Os campos mutáveis de um pacote de cobrança mudam.Subject: ID do pacote de cobrança (p.ID)
Evento: studio.lerian.ledger.fee_charge.appliedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um pacote de tarifas é aplicado a uma transação confirmada.Subject: ID da transação (p.TransactionID)
Evento: studio.lerian.ledger.fee_packages.createdTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um pacote de tarifas é criado.Subject: ID do pacote de tarifas (p.ID)
Evento: studio.lerian.ledger.fee_packages.deletedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um pacote de tarifas é excluído.Subject: ID do pacote de tarifas (p.ID)
Evento: studio.lerian.ledger.fee_packages.updatedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Os campos mutáveis de um pacote de tarifas mudam.Subject: ID do pacote de tarifas (p.ID)
Evento: studio.lerian.ledger.holder.createdTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um titular é criado.Subject: ID do titular (p.ID)
Evento: studio.lerian.ledger.holder.deletedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um titular é excluído.Subject: ID do titular (p.ID)
Evento: studio.lerian.ledger.holder.updatedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Os campos mutáveis de um titular mudam.Subject: ID do titular (p.ID)
Evento: studio.lerian.ledger.instrument.createdTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um instrumento é criado para um titular e uma conta.Subject: ID do instrumento (p.ID)
Evento: studio.lerian.ledger.instrument.deletedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um instrumento é excluído.Subject: ID do instrumento (p.ID)
Evento: studio.lerian.ledger.instrument.updatedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Os campos mutáveis de um instrumento mudam.Subject: ID do instrumento (p.ID)
Evento: studio.lerian.ledger.ledger.createdTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um ledger é criado dentro de uma organização.Subject: ID do ledger (p.ID)
Evento: studio.lerian.ledger.ledger.deletedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um ledger é excluído.Subject: ID do ledger (p.ID)
Evento: studio.lerian.ledger.ledger.updatedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: O nome ou o status de um ledger muda.Subject: ID do ledger (p.ID)
Evento: studio.lerian.ledger.operation_route.createdTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Uma rota de operação é criada.Subject: ID da rota de operação (p.ID)
Evento: studio.lerian.ledger.operation_route.deletedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Uma rota de operação é excluída.Subject: ID da rota de operação (p.ID)
Evento: studio.lerian.ledger.operation_route.updatedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Os campos mutáveis de uma rota de operação mudam.Subject: ID da rota de operação (p.ID)
Evento: studio.lerian.ledger.organization.createdTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Uma organização é criada.Subject: ID da organização (p.ID)
Evento: studio.lerian.ledger.organization.deletedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Uma organização é excluída.Subject: ID da organização (p.ID)
Evento: studio.lerian.ledger.organization.updatedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Os campos mutáveis de uma organização mudam.Subject: ID da organização (p.ID)
Evento: studio.lerian.ledger.portfolio.createdTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um portfólio é criado.Subject: ID do portfólio (p.ID)
Evento: studio.lerian.ledger.portfolio.deletedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um portfólio é excluído.Subject: ID do portfólio (p.ID)
Evento: studio.lerian.ledger.portfolio.updatedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Os campos mutáveis de um portfólio mudam.Subject: ID do portfólio (p.ID)
Evento: studio.lerian.ledger.segment.createdTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um segmento é criado.Subject: ID do segmento (p.ID)
Evento: studio.lerian.ledger.segment.deletedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um segmento é excluído.Subject: ID do segmento (p.ID)
Evento: studio.lerian.ledger.segment.updatedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Os campos mutáveis de um segmento mudam.Subject: ID do segmento (p.ID)
Evento: studio.lerian.ledger.transaction.canceledTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Uma transação pendente passa de PENDING para CANCELED.Subject: ID da transação (p.ID)
Evento: studio.lerian.ledger.transaction.committedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Uma transação pendente passa de PENDING para APPROVED.Subject: ID da transação (p.ID)
Evento: studio.lerian.ledger.transaction.postedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Uma transação recém-criada é confirmada no armazenamento com todas as suas operações persistidas (sem pai).Subject: ID da transação (p.ID)
Evento: studio.lerian.ledger.transaction.revertedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Um fluxo de reversão cria uma transação filha; parentTransactionId a correlaciona com a original.Subject: ID da transação (p.ID)
Evento: studio.lerian.ledger.transaction_route.createdTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Uma rota de transação é criada.Subject: ID da rota de transação (p.ID)
Evento: studio.lerian.ledger.transaction_route.deletedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Uma rota de transação é excluída.Subject: ID da rota de transação (p.ID)
Evento: studio.lerian.ledger.transaction_route.updatedTópico: lerian.streaming.ledgerDLQ da rota: lerian.streaming.ledger.dlqSchema: 1.0.0Emitido quando: Os campos mutáveis de uma rota de transação mudam.Subject: ID da rota de transação (p.ID)

Evento interno de billing (fora do catálogo público)

billing_recorded é emitido separadamente dos 49 fatos JSON públicos. Ele usa Protobuf com framing Confluent, não o manifesto JSON público, e seu tópico fixo é lerian.streaming.billing.recorded. Não o conte como evento do manifesto nem o decodifique como os contratos JSON data acima. Ele preserva os cabeçalhos CloudEvents 1.0 com ce-source=ledger, ce-resourcetype=billing, ce-eventtype=recorded e ce-time definido como a data de criação da transação. Tipo CloudEvents: studio.lerian.ledger.billing.recorded Tópico: lerian.streaming.billing.recorded Tipo de conteúdo: application/vnd.confluent.protobuf Schema: 1.0.0 DLQ da rota: lerian.streaming.ledger.dlq Tenant: ce-tenantid segue a mesma regra de tenant resolvido ou literal default dos fatos públicos. Subject: ID da conta Emitido quando: Uma escrita de ciclo de vida não noop deixa a transação no status APPROVED; o Midaz emite um registro para cada conta não externa única referenciada por suas operações.
O Midaz preenche metric como active_account; properties.account_id e properties.transaction_id como strings; e subscription_id como o ID do tenant em modo multi-tenant ou o ID da organização da transação nos demais casos.