> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Publicador de eventos

> Publique CloudEvents do ciclo de vida das transações do Midaz para brokers compatíveis com Kafka, para integrações downstream.

## Usos dos eventos de ciclo de vida da transação

***

Os eventos de ciclo de vida da transação permitem que sistemas downstream reajam sem se acoplar à API de transação. Use-os para notificações, conciliação, analytics e workflows de compliance.

Para o catálogo completo e o contrato do consumidor, veja [Recebendo eventos do Midaz](https://docs.lerian.studio/pt/products/midaz/receiving-midaz-events.md).

## Habilitar eventos de ciclo de vida da transação

***

O Midaz publica CloudEvents de ciclo de vida em um broker compatível com Kafka. A publicação vem desabilitada por padrão. Configure a aplicação do ledger com uma lista de brokers e a fonte de CloudEvents dela:

```env theme={null}
STREAMING_ENABLED=true
STREAMING_BROKERS=<broker-list>
STREAMING_CLOUDEVENTS_SOURCE=ledger
```

Você deve definir `STREAMING_CLOUDEVENTS_SOURCE` ao habilitar o streaming. O binário do ledger, CRM e Fees usa `ledger`. Os fatos de transação são publicados em `lerian.streaming.ledger`.

Se você habilitar o streaming sem `STREAMING_BROKERS`, o Midaz se recusa a iniciar. Quando o streaming está desabilitado, o Midaz usa um emissor no-op.

## Eventos de ciclo de vida

***

O Midaz emite estes fatos públicos para mudanças de estado de transação persistidas e elegíveis:

| Fato | Quando o Midaz o emite |
| - | - |
| `transaction.posted` | Uma transação recém-criada está `APPROVED` e não tem transação pai. |
| `transaction.reverted` | Uma transação `APPROVED` recém-criada tem uma transação pai. |
| `transaction.committed` | Uma atualização de status de transação chega a `APPROVED`. |
| `transaction.canceled` | Uma atualização de status de transação chega a `CANCELED`. |

O Midaz não emite um fato de ciclo de vida para uma transação `PENDING` recém-criada, uma transação `NOTED`, ou uma mudança de estado no-op. Uma transação pendente emite apenas quando uma atualização de status posterior a confirma ou a cancela.

Quando uma requisição move valor entre ledgers, o Midaz também emite um fato para a movimentação inteira: `transaction_group.posted`, `transaction_group.committed`, `transaction_group.canceled` ou `transaction_group.reverted`.

## Consumir eventos

***

Inscreva-se em `lerian.streaming.ledger` e selecione os fatos que você precisa usando os headers do CloudEvents. Não infira o tipo de evento a partir do tópico do Kafka: o Midaz usa um único tópico de aplicação para os fatos do ledger, do CRM e do Fees.

Use o manifesto do produtor como o contrato em tempo de deploy:

```http theme={null}
GET /v1/streaming/manifest
```

O manifesto continua disponível mesmo quando a publicação está desabilitada. A [referência de eventos do Midaz](https://docs.lerian.studio/pt/reference/events/midaz.md) lista os payloads dos eventos.

> [!NOTE]
>
> A publicação de eventos é best effort e não torna a escrita no broker transacional com a mutação do ledger. Os consumidores devem ser idempotentes e deduplicar por `(ce-source, ce-id)`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.