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

# Eventos de Lerian SPI

> Los CloudEvents que Lerian SPI publica para pagos Pix, DICT, BR Code, participantes y liquidaciones: sus tipos, sus temas y cómo Streaming Hub los entrega.

Lerian SPI publica hechos de negocio como CloudEvents 1.0 en modo de contenido binario. Cada uno de sus cuatro binarios, `spi`, `dict`, `brcode` y `core`, publica con su propio `ce-source` en su propio tema. [Streaming Hub](https://docs.lerian.studio/es/platform/streaming-hub/what-is-streaming-hub.md) entrega estos eventos a los sistemas de tu institución. El [resumen de streaming de eventos](https://docs.lerian.studio/es/reference/events/overview.md) describe el envelope compartido.

## Cómo te llegan los eventos

***

| Binario | `ce-source` | Tema |
| - | - | - |
| `spi` | `br-spi` | `lerian.streaming.br-spi` |
| `dict` | `br-spi-dict` | `lerian.streaming.br-spi-dict` |
| `brcode` | `br-spi-brcode` | `lerian.streaming.br-spi-brcode` |
| `core` | `br-spi-core` | `lerian.streaming.br-spi-core` |

* **Streaming Hub.** El hub lee los temas `lerian.streaming.<ce-source>` y entrega cada evento coincidente a tus suscripciones. Consulta [Cómo funciona Streaming Hub](https://docs.lerian.studio/es/platform/streaming-hub/how-streaming-hub-works.md).
* **Una excepción.** Los siete eventos `dict_med_operations` viajan en el tema `br-spi.dict.med.operations`. Streaming Hub no lee ese tema, así que no los entrega. Léelos con tu propio consumidor de Kafka.
* **Suscríbete por la clave del catálogo.** El campo `event_types` de una suscripción toma el `eventKey` del catálogo de Streaming Hub (`GET /v1/catalog`). Para estos eventos, la clave son los dos últimos segmentos del `ce-type`, por ejemplo `spi_payment.settled`. Consulta [Gestionar suscripciones](https://docs.lerian.studio/es/platform/streaming-hub/managing-subscriptions.md).
* **Fija el origen para las liquidaciones.** Lerian SPB también publica `settlement.settled` y `settlement.failed`. Para recibir solo las liquidaciones de Lerian SPI en una suscripción de webhook o de cola, define el `origin` de la suscripción como `br-spi-core`.
* **Al menos una vez.** Un evento puede llegar más de una vez. Elimina duplicados por el par `(ce-source, ce-id)`.
* **No dependas del orden de llegada.** Ordena los eventos por su ciclo de vida, no por el orden en que llegan.
* **Headers fijos.** Cada evento lleva `ce-tenantid` `default`, `ce-schemaversion` `1.0.0` y `ce-datacontenttype` `application/json`.

## Manifiesto de streaming

***

Cada binario sirve su manifiesto en `GET /v1/streaming/manifest`. El manifiesto lista los eventos que el binario publica, con la clave, el recurso, el evento y la versión de schema de cada uno. La ruta requiere el recurso `streaming` de Access Manager con la acción `read`.

## Catálogo

***

Cada `ce-type` tiene la forma `studio.lerian.<ce-source>.<resource>.<event>`. Las tablas dan el valor completo.

### `spi`: pagos, mensajes y aprobaciones

#### Pagos

| `ce-type` | Cuándo se emite |
| - | - |
| `studio.lerian.br-spi.spi_payment.initiated` | El riel registró una orden de pago que creaste. |
| `studio.lerian.br-spi.spi_payment.sent` | El riel envió un pago a BACEN (`pacs.008`). El pago no está liquidado. |
| `studio.lerian.br-spi.spi_payment.status_callback_received` | El riel aplicó una respuesta de estado de BACEN (`pacs.002`) a un pago. |
| `studio.lerian.br-spi.spi_payment.submission_timeout` | El envío de un pago a BACEN superó el tiempo límite. Su resultado es desconocido. |
| `studio.lerian.br-spi.spi_payment.submission_deferred` | El envío de un pago a BACEN falló, y el pago no terminó. |
| `studio.lerian.br-spi.spi_payment.failed` | El riel no pudo enviar un pago, y el pago terminó en `FAILED`. |
| `studio.lerian.br-spi.spi_payment.received` | Llegó un Pix entrante. El riel lo registra como `PENDING` para la decisión de tu cliente. |
| `studio.lerian.br-spi.spi_payment.accepted` | El riel respondió a un Pix entrante como aceptado (`ACSP`). El Pix no está liquidado. |
| `studio.lerian.br-spi.spi_payment.rejected` | Un pago que enviaste, o un Pix entrante, fue rechazado. |
| `studio.lerian.br-spi.spi_payment.settled` | Un Pix se liquidó: BACEN confirmó un pago que enviaste, o el SPI confirmó un crédito entrante. |

#### Devoluciones

| `ce-type` | Cuándo se emite |
| - | - |
| `studio.lerian.br-spi.spi_payment.return_initiated` | Solicitaste la devolución total de un Pix que recibiste. |
| `studio.lerian.br-spi.spi_payment.med_return_requested` | Solicitaste una devolución con el motivo `FR01`. |
| `studio.lerian.br-spi.spi_payment.return_submission_deferred` | El riel no pudo confirmar que BACEN recibió una devolución total. La devolución sigue abierta. |
| `studio.lerian.br-spi.spi_payment.return_rejected` | BACEN rechazó una devolución total que enviaste. |
| `studio.lerian.br-spi.spi_payment.return_failed` | Una devolución total que solicitaste terminó sin mover dinero. |
| `studio.lerian.br-spi.spi_payment.returned` | Una devolución total se liquidó. Puede ser una devolución que enviaste o una devolución que recibiste. |
| `studio.lerian.br-spi.spi_payment.partial_return_deferred` | El riel no pudo confirmar que BACEN recibió una devolución parcial. La devolución sigue abierta. |
| `studio.lerian.br-spi.spi_payment.partial_return_failed` | Una devolución parcial que solicitaste terminó sin mover dinero. |
| `studio.lerian.br-spi.spi_payment.partial_returned` | Una devolución parcial se liquidó. Puede ser una devolución que enviaste o una devolución que recibiste. |
| `studio.lerian.br-spi.spi_payment.return_received` | Llegó una devolución de un Pix que enviaste. El riel la retiene para la decisión de tu cliente. |
| `studio.lerian.br-spi.spi_payment.return_accepted` | El riel respondió a una devolución recibida como aceptada (`ACSP`). La devolución no está liquidada. |
| `studio.lerian.br-spi.spi_payment.return_declined` | Una devolución recibida terminó sin mover dinero: tu cliente o el SPI la rechazó. |

#### Liquidación en el riel

| `ce-type` | Cuándo se emite |
| - | - |
| `studio.lerian.br-spi.spi_settlement.completion_observed` | Un Pix llegó a la liquidación en el riel. |
| `studio.lerian.br-spi.spi_settlement.termination_observed` | Un Pix liquidado se devolvió, o un pago terminó sin liquidación. |

#### Pix Automático

| `ce-type` | Cuándo se emite |
| - | - |
| `studio.lerian.br-spi.spi_mandate.requested` | Llegó una solicitud de confirmación de recurrencia (`pain.009`). |
| `studio.lerian.br-spi.spi_mandate.request_sent` | BACEN aceptó el `pain.009` que el riel envió para una solicitud de recurrencia. |
| `studio.lerian.br-spi.spi_mandate.request_received` | El participante del pagador confirmó la recepción de ese `pain.009` (`pain.012`). |
| `studio.lerian.br-spi.spi_mandate.cancellation_requested` | Llegó una cancelación de recurrencia (`pain.011`). |
| `studio.lerian.br-spi.spi_mandate.resolved` | Un mandato de Pix Automático llegó a un veredicto. |
| `studio.lerian.br-spi.spi_schedule.requested` | Llegó una programación de cobro recurrente (`pain.013`), y coincide con un mandato activo. |
| `studio.lerian.br-spi.spi_schedule.cancellation_requested` | Llegó una solicitud de cancelación de programación (`camt.055`). |
| `studio.lerian.br-spi.spi_schedule.cancellation_resolved` | Un `camt.029` respondió a una solicitud de cancelación de programación, con una aceptación o un rechazo. |
| `studio.lerian.br-spi.spi_schedule.resolved` | Una programación llegó a un veredicto: confirmada o rechazada (`pain.014`), o cancelada. |

#### Mensajes, reportes y participantes

| `ce-type` | Cuándo se emite |
| - | - |
| `studio.lerian.br-spi.spi_admi.rejection_received` | BACEN rechazó un mensaje que el riel envió (`admi.002`). |
| `studio.lerian.br-spi.spi_admi.system_event_received` | BACEN envió un aviso de evento de sistema (`admi.004`). |
| `studio.lerian.br-spi.spi_camt.member_change` | Una difusión `camt.014` informó que un participante entró o salió. |
| `studio.lerian.br-spi.spi_camt.split_tax_declared` | Un asiento de `camt.054` trajo una declaración de split tributario. |
| `studio.lerian.br-spi.spi_tracking.internal_settlement_reported` | El riel envió a BACEN un reporte de liquidación interna de MED 2.0 (`trck.002`). |
| `studio.lerian.br-spi.spi_tracking.receipt_observed` | Llegó el recibo (`camt.025`) de un reporte enviado, con una aceptación o un rechazo. |
| `studio.lerian.br-spi.spi_participant.registration_resolved` | BACEN respondió a una solicitud de registro de participante: confirmado o rechazado. |
| `studio.lerian.br-spi.spi_participant.offboard_resolved` | BACEN respondió a una solicitud de baja de participante. |
| `studio.lerian.br-spi.spi_participant.attributes_changed` | BACEN difundió un cambio de atributos de participante (`reda.041`). |
| `studio.lerian.br-spi.spi_participant.portability_deadline_notified` | BACEN fijó un plazo de portabilidad para un participante (`reda.017`). |

#### Aprobaciones y operaciones

| `ce-type` | Cuándo se emite |
| - | - |
| `studio.lerian.br-spi.spi_approval.approved` | Un aprobador aprobó una aprobación solicitada. |
| `studio.lerian.br-spi.spi_approval.denied` | Un aprobador denegó una aprobación solicitada. |
| `studio.lerian.br-spi.spi_approval.expired` | Una aprobación solicitada llegó a su plazo sin decisión. |
| `studio.lerian.br-spi.spi_operation.manually_resolved` | Un operador cerró una operación atascada mediante la [resolución manual](https://docs.lerian.studio/es/reference/rails/spi/spi/manual-resolve-operation.md). |

### `dict`: claves de Pix, reclamos y MED

#### Claves

| `ce-type` | Cuándo se emite |
| - | - |
| `studio.lerian.br-spi-dict.dict_key.created` | BACEN confirmó el registro de una clave de Pix. |
| `studio.lerian.br-spi-dict.dict_key.updated` | BACEN aceptó una actualización de una clave de Pix. |
| `studio.lerian.br-spi-dict.dict_key.deleted` | Una clave de Pix salió de este despliegue: BACEN confirmó su eliminación, o un reclamo la movió a otro participante. |
| `studio.lerian.br-spi-dict.dict_key.transferred` | Un reclamo movió una clave de Pix a un participante que este despliegue atiende. |

#### Reclamos

| `ce-type` | Cuándo se emite |
| - | - |
| `studio.lerian.br-spi-dict.dict_claim.initiated` | BACEN registró un reclamo que abriste. |
| `studio.lerian.br-spi-dict.dict_claim.acknowledged` | BACEN aceptó el acuse de recibo de un reclamo. |
| `studio.lerian.br-spi-dict.dict_claim.confirmed` | Un reclamo pasó a `CONFIRMED`: el donante aceptó liberar la clave. |
| `studio.lerian.br-spi-dict.dict_claim.completed` | Un reclamo pasó a `COMPLETED`: la clave pasó al reclamante. |
| `studio.lerian.br-spi-dict.dict_claim.cancelled` | Un reclamo pasó a `CANCELLED`. |
| `studio.lerian.br-spi-dict.dict_claim.resolved` | El plazo de un reclamo venció, y el riel completó o canceló el reclamo. |
| `studio.lerian.br-spi-dict.dict_claim.received` | Un reclamo que otro participante abrió contra una de tus claves apareció o cambió de estado. |

#### Registros de MED

El riel emite un evento de registro de MED cuando observa una nueva versión del registro en BACEN. El evento nombra el estado que alcanzó el registro. `updated` significa que el registro cambió y su estado no cambió.

| `ce-type` | Cuándo se emite |
| - | - |
| `studio.lerian.br-spi-dict.dict_infraction.created` | Un reporte de infracción está `OPEN`. |
| `studio.lerian.br-spi-dict.dict_infraction.acknowledged` | Un reporte de infracción alcanzó `ACKNOWLEDGED`. |
| `studio.lerian.br-spi-dict.dict_infraction.closed` | Un reporte de infracción alcanzó `CLOSED`. |
| `studio.lerian.br-spi-dict.dict_infraction.cancelled` | Un reporte de infracción alcanzó `CANCELLED`. |
| `studio.lerian.br-spi-dict.dict_infraction.updated` | Un reporte de infracción cambió, y su estado no cambió. |
| `studio.lerian.br-spi-dict.dict_refund.created` | Una solicitud de devolución está `OPEN`. |
| `studio.lerian.br-spi-dict.dict_refund.closed` | Una solicitud de devolución alcanzó `CLOSED`. |
| `studio.lerian.br-spi-dict.dict_refund.cancelled` | Una solicitud de devolución alcanzó `CANCELLED`. |
| `studio.lerian.br-spi-dict.dict_refund.updated` | Una solicitud de devolución cambió, y su estado no cambió. |
| `studio.lerian.br-spi-dict.dict_fraud_marker.created` | Un marcador de fraude está `ACTIVE`. |
| `studio.lerian.br-spi-dict.dict_fraud_marker.cancelled` | Un marcador de fraude alcanzó `INACTIVE`. |
| `studio.lerian.br-spi-dict.dict_fraud_marker.updated` | Un marcador de fraude cambió, y su estado no cambió. |
| `studio.lerian.br-spi-dict.dict_funds_recovery.created` | Una recuperación de fondos está `CREATED`. |
| `studio.lerian.br-spi-dict.dict_funds_recovery.tracked` | Una recuperación de fondos alcanzó `TRACKED`. |
| `studio.lerian.br-spi-dict.dict_funds_recovery.awaiting_analysis` | Una recuperación de fondos alcanzó `AWAITING_ANALYSIS`. |
| `studio.lerian.br-spi-dict.dict_funds_recovery.analysed` | Una recuperación de fondos alcanzó `ANALYSED`. |
| `studio.lerian.br-spi-dict.dict_funds_recovery.refunding` | Una recuperación de fondos alcanzó `REFUNDING`. |
| `studio.lerian.br-spi-dict.dict_funds_recovery.completed` | Una recuperación de fondos alcanzó `COMPLETED`. |
| `studio.lerian.br-spi-dict.dict_funds_recovery.cancelled` | Una recuperación de fondos alcanzó `CANCELLED`. |
| `studio.lerian.br-spi-dict.dict_funds_recovery.updated` | Una recuperación de fondos cambió, y su estado no cambió. |

#### Estadísticas y archivos de conjunto de CIDs

| `ce-type` | Cuándo se emite |
| - | - |
| `studio.lerian.br-spi-dict.dict_person_statistics.observed` | Los contadores antifraude de BACEN para un CPF o CNPJ de tu lista de observación cambiaron. |
| `studio.lerian.br-spi-dict.dict_cid_set_file.available` | BACEN informa un archivo de conjunto de CIDs solicitado como `AVAILABLE`. |
| `studio.lerian.br-spi-dict.dict_cid_set_file.unavailable` | BACEN informa un archivo de conjunto de CIDs solicitado como `UNAVAILABLE`. |
| `studio.lerian.br-spi-dict.dict_cid_set_file.error` | BACEN informa un archivo de conjunto de CIDs solicitado como `ERROR`. |

#### Operaciones de MED

Estos eventos viajan en el tema `br-spi.dict.med.operations`, que Streaming Hub no lee.

| `ce-type` | Cuándo se emite |
| - | - |
| `studio.lerian.br-spi-dict.dict_med_operations.sync_pending` | BACEN confirmó una operación de MED, y su respuesta llegó incompleta. |
| `studio.lerian.br-spi-dict.dict_med_operations.unknown_outcome` | El resultado de una operación de MED enviada a BACEN es desconocido. |
| `studio.lerian.br-spi-dict.dict_med_operations.manual_review` | Una operación de MED que BACEN aceptó necesita la revisión de un operador. |
| `studio.lerian.br-spi-dict.dict_med_operations.local_failure` | Una operación de MED no llegó a BACEN. |
| `studio.lerian.br-spi-dict.dict_med_operations.inconsistent_projection` | El riel registró un estado de MED en BACEN que entra en conflicto con una regla local. |
| `studio.lerian.br-spi-dict.dict_med_operations.feed_blocked` | Un feed de descubrimiento de DICT se detuvo, porque la respuesta de BACEN no le da ningún camino válido para continuar. |
| `studio.lerian.br-spi-dict.dict_med_operations.feed_record_abandoned` | Un operador abandonó un registro que un feed de descubrimiento no pudo leer ni almacenar. |

### `brcode`: cobros y recurrencias

> [!WARNING]
>
> No registres un movimiento en el ledger a partir de `brcode_charge.paid` o `brcode_cobr.concluded`. Estos eventos registran el ciclo de vida de un cobro. Un consumidor que registra a partir del evento del cobro y de un evento de liquidación del mismo Pix registra el Pix dos veces.

#### Cobros

| `ce-type` | Cuándo se emite |
| - | - |
| `studio.lerian.br-spi-brcode.brcode_charge.created` | Se creó un cobro (Cob o CobV). |
| `studio.lerian.br-spi-brcode.brcode_charge.revised` | Se revisó un cobro. |
| `studio.lerian.br-spi-brcode.brcode_charge.paid` | Un cobro alcanzó `CONCLUIDA`: un Pix lo pagó. |
| `studio.lerian.br-spi-brcode.brcode_charge.settlement_amount_mismatch` | Un Pix liquidado concluyó un cobro, y su monto no es el monto del cobro. |
| `studio.lerian.br-spi-brcode.brcode_charge.cancelled` | Se eliminó un cobro. |

#### Recurrencias, cobros recurrentes y solicitudes

Cada uno de estos recursos emite un evento por cada estado que alcanza.

| `ce-type` | Cuándo se emite |
| - | - |
| `studio.lerian.br-spi-brcode.brcode_recurrence.created` | Una recurrencia (Rec) alcanzó `CRIADA`. |
| `studio.lerian.br-spi-brcode.brcode_recurrence.approved` | Una recurrencia alcanzó `APROVADA`. |
| `studio.lerian.br-spi-brcode.brcode_recurrence.rejected` | Una recurrencia alcanzó `REJEITADA`. |
| `studio.lerian.br-spi-brcode.brcode_recurrence.expired` | Una recurrencia alcanzó `EXPIRADA`. |
| `studio.lerian.br-spi-brcode.brcode_recurrence.cancelled` | Una recurrencia alcanzó `CANCELADA`. |
| `studio.lerian.br-spi-brcode.brcode_cobr.created` | Un cobro recurrente (CobR) alcanzó `CRIADA`. |
| `studio.lerian.br-spi-brcode.brcode_cobr.active` | Un cobro recurrente alcanzó `ATIVA`. |
| `studio.lerian.br-spi-brcode.brcode_cobr.concluded` | Un cobro recurrente alcanzó `CONCLUIDA`. |
| `studio.lerian.br-spi-brcode.brcode_cobr.expired` | Un cobro recurrente alcanzó `EXPIRADA`. |
| `studio.lerian.br-spi-brcode.brcode_cobr.rejected` | Un cobro recurrente alcanzó `REJEITADA`. |
| `studio.lerian.br-spi-brcode.brcode_cobr.cancelled` | Un cobro recurrente alcanzó `CANCELADA`. |
| `studio.lerian.br-spi-brcode.brcode_solicrec.created` | Una solicitud de recurrencia (SolicRec) alcanzó `CRIADA`. |
| `studio.lerian.br-spi-brcode.brcode_solicrec.sent` | Una solicitud de recurrencia alcanzó `ENVIADA`. |
| `studio.lerian.br-spi-brcode.brcode_solicrec.received` | Una solicitud de recurrencia alcanzó `RECEBIDA`. |
| `studio.lerian.br-spi-brcode.brcode_solicrec.accepted` | Una solicitud de recurrencia alcanzó `ACEITA`. |
| `studio.lerian.br-spi-brcode.brcode_solicrec.rejected` | Una solicitud de recurrencia alcanzó `REJEITADA`. |
| `studio.lerian.br-spi-brcode.brcode_solicrec.expired` | Una solicitud de recurrencia alcanzó `EXPIRADA`. |
| `studio.lerian.br-spi-brcode.brcode_solicrec.cancelled` | Una solicitud de recurrencia alcanzó `CANCELADA`. |
| `studio.lerian.br-spi-brcode.brcode_lote.created` | Se creó un lote de CobV, con el estado `CRIADA`. |

### `core`: participantes y liquidaciones

| `ce-type` | Cuándo se emite |
| - | - |
| `studio.lerian.br-spi-core.core_participant.registration_requested` | Core registró un nuevo participante indirecto como `PENDING` y solicitó su registro en BACEN. |
| `studio.lerian.br-spi-core.core_participant.offboard_requested` | Un participante pasó a `OFFBOARD_PENDING`, y Core solicitó su baja en BACEN. |
| `studio.lerian.br-spi-core.settlement.settled` | Un Pix se liquidó, y Core da seguimiento a la liquidación de su operación. |
| `studio.lerian.br-spi-core.settlement.returned` | Un Pix liquidado se devolvió, y Core da seguimiento a la liquidación de su operación. |
| `studio.lerian.br-spi-core.settlement.failed` | Un Pix terminó sin liquidación, y Core da seguimiento a la liquidación de su operación. |


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