> ## 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.

## Por que isso importa

***

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](/pt/products/midaz/receiving-midaz-events).

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

***

O Midaz publica CloudEvents de ciclo de vida por meio da superfície lib-streaming, 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 do roster 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.

## 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](/pt/reference/events/midaz) 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)`.
</Note>
