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

> Publica los CloudEvents del ciclo de vida de las transacciones de Midaz hacia brokers compatibles con Kafka, para integraciones downstream.

## Por qué esto importa

***

Los eventos del ciclo de vida de las transacciones permiten que los sistemas downstream reaccionen sin acoplarse a la API de transacciones. Úsalos para notificaciones, conciliación, analítica y workflows de cumplimiento.

Para conocer el catálogo completo y el contrato del consumidor, consulta [Recepción de eventos de Midaz](/es/products/midaz/receiving-midaz-events).

## Habilitar los eventos del ciclo de vida de las transacciones

***

Midaz publica los CloudEvents del ciclo de vida a través de la superficie lib-streaming compatible con Kafka. La publicación está deshabilitada de forma predeterminada. Configura la aplicación del ledger con una lista de brokers y su fuente de roster:

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

Debes definir `STREAMING_CLOUDEVENTS_SOURCE` cuando habilitas streaming. El binario de Ledger, CRM y Fees usa `ledger`. Los hechos de transacción se publican en `lerian.streaming.ledger`.

Si habilitas streaming sin `STREAMING_BROKERS`, Midaz se niega a iniciar. Cuando streaming está deshabilitado, Midaz usa un emisor sin efecto (no-op).

## Eventos del ciclo de vida

***

Midaz emite estos hechos públicos para los cambios de estado de transacción persistidos que sean elegibles:

| Hecho                   | Cuándo lo emite Midaz                                                           |
| ----------------------- | ------------------------------------------------------------------------------- |
| `transaction.posted`    | Una transacción recién creada está `APPROVED` y no tiene transacción principal. |
| `transaction.reverted`  | Una transacción `APPROVED` recién creada tiene una transacción principal.       |
| `transaction.committed` | Una actualización de estado de la transacción llega a `APPROVED`.               |
| `transaction.canceled`  | Una actualización de estado de la transacción llega a `CANCELED`.               |

Midaz no emite un hecho del ciclo de vida para una transacción `PENDING` recién creada, una transacción `NOTED` ni un cambio de estado sin efecto. Una transacción pendiente emite solo cuando una actualización de estado posterior la confirma o la cancela.

## Consumir eventos

***

Suscríbete a `lerian.streaming.ledger` y selecciona los hechos que necesitas usando los headers de CloudEvents. No infieras el tipo de evento a partir del tema de Kafka: Midaz usa un solo tema de aplicación para los hechos de ledger, CRM y Fees.

Usa el manifiesto del productor como el contrato en tiempo de despliegue:

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

El manifiesto permanece disponible incluso cuando la publicación está deshabilitada. La [referencia de eventos de Midaz](/es/reference/events/midaz) enumera los payloads de los eventos.

<Note>
  La publicación de eventos es best effort y no hace que la escritura en el broker sea transaccional junto con la mutación del ledger. Los consumidores deben ser idempotentes y deduplicar según `(ce-source, ce-id)`.
</Note>
