> ## 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 do Lerian SPI

> Os CloudEvents que o Lerian SPI publica para pagamentos Pix, DICT, BR Code, participantes e liquidações: seus tipos, seus tópicos e como o Streaming Hub os entrega.

O Lerian SPI publica fatos de negócio como CloudEvents 1.0 em modo binário de conteúdo. Cada um dos seus quatro binários, `spi`, `dict`, `brcode` e `core`, publica sob o próprio `ce-source` no próprio tópico. O [Streaming Hub](https://docs.lerian.studio/pt/platform/streaming-hub/what-is-streaming-hub.md) entrega esses eventos aos sistemas da sua instituição. A [visão geral de streaming de eventos](https://docs.lerian.studio/pt/reference/events/overview.md) descreve o envelope compartilhado.

## Como os eventos chegam até você

***

| Binário | `ce-source` | Tópico |
| - | - | - |
| `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.** O hub lê os tópicos `lerian.streaming.<ce-source>` e entrega cada evento correspondente às suas subscriptions. Veja [Como o Streaming Hub funciona](https://docs.lerian.studio/pt/platform/streaming-hub/how-streaming-hub-works.md).
* **Uma exceção.** Os sete eventos `dict_med_operations` trafegam no tópico `br-spi.dict.med.operations`. O Streaming Hub não lê esse tópico, então não os entrega. Leia-os com seu próprio consumidor Kafka.
* **Assine pela chave do catálogo.** O campo `event_types` de uma subscription recebe o `eventKey` do catálogo do Streaming Hub (`GET /v1/catalog`). Para esses eventos, a chave são os dois últimos segmentos do `ce-type`, por exemplo `spi_payment.settled`. Veja [Gerenciar subscriptions](https://docs.lerian.studio/pt/platform/streaming-hub/managing-subscriptions.md).
* **Fixe a origem para liquidações.** O Lerian SPB também publica `settlement.settled` e `settlement.failed`. Para receber apenas as liquidações do Lerian SPI numa subscription de webhook ou de fila, defina o `origin` da subscription como `br-spi-core`.
* **Pelo menos uma vez.** Um evento pode chegar mais de uma vez. Elimine duplicatas pelo par `(ce-source, ce-id)`.
* **Não dependa da ordem de chegada.** Ordene os eventos pelo ciclo de vida deles, não pela ordem em que chegam.
* **Headers fixos.** Cada evento carrega `ce-tenantid` `default`, `ce-schemaversion` `1.0.0` e `ce-datacontenttype` `application/json`.

## Manifesto de streaming

***

Cada binário serve seu manifesto em `GET /v1/streaming/manifest`. O manifesto lista os eventos que o binário publica, com a chave, o recurso, o evento e a versão de schema de cada um. A rota exige o recurso `streaming` do Access Manager com a ação `read`.

## Catálogo

***

Cada `ce-type` tem a forma `studio.lerian.<ce-source>.<resource>.<event>`. As tabelas dão o valor completo.

### `spi`: pagamentos, mensagens e aprovações

#### Pagamentos

| `ce-type` | Quando é emitido |
| - | - |
| `studio.lerian.br-spi.spi_payment.initiated` | O trilho registrou uma ordem de pagamento que você criou. |
| `studio.lerian.br-spi.spi_payment.sent` | O trilho enviou um pagamento ao BACEN (`pacs.008`). O pagamento não está liquidado. |
| `studio.lerian.br-spi.spi_payment.status_callback_received` | O trilho aplicou uma resposta de status do BACEN (`pacs.002`) a um pagamento. |
| `studio.lerian.br-spi.spi_payment.submission_timeout` | O envio de um pagamento ao BACEN excedeu o tempo limite. O resultado é desconhecido. |
| `studio.lerian.br-spi.spi_payment.submission_deferred` | O envio de um pagamento ao BACEN falhou, e o pagamento não terminou. |
| `studio.lerian.br-spi.spi_payment.failed` | O trilho não conseguiu enviar um pagamento, e o pagamento terminou em `FAILED`. |
| `studio.lerian.br-spi.spi_payment.received` | Um Pix de entrada chegou. O trilho o registra como `PENDING` para a decisão do seu cliente. |
| `studio.lerian.br-spi.spi_payment.accepted` | O trilho respondeu a um Pix de entrada como aceito (`ACSP`). O Pix não está liquidado. |
| `studio.lerian.br-spi.spi_payment.rejected` | Um pagamento que você enviou, ou um Pix de entrada, foi recusado. |
| `studio.lerian.br-spi.spi_payment.settled` | Um Pix foi liquidado: o BACEN confirmou um pagamento que você enviou, ou o SPI confirmou um crédito de entrada. |

#### Devoluções

| `ce-type` | Quando é emitido |
| - | - |
| `studio.lerian.br-spi.spi_payment.return_initiated` | Você solicitou a devolução integral de um Pix que você recebeu. |
| `studio.lerian.br-spi.spi_payment.med_return_requested` | Você solicitou uma devolução com o motivo `FR01`. |
| `studio.lerian.br-spi.spi_payment.return_submission_deferred` | O trilho não conseguiu confirmar que o BACEN recebeu uma devolução integral. A devolução continua aberta. |
| `studio.lerian.br-spi.spi_payment.return_rejected` | O BACEN recusou uma devolução integral que você enviou. |
| `studio.lerian.br-spi.spi_payment.return_failed` | Uma devolução integral que você solicitou terminou sem movimentar dinheiro. |
| `studio.lerian.br-spi.spi_payment.returned` | Uma devolução integral foi liquidada. Pode ser uma devolução que você enviou ou uma devolução que você recebeu. |
| `studio.lerian.br-spi.spi_payment.partial_return_deferred` | O trilho não conseguiu confirmar que o BACEN recebeu uma devolução parcial. A devolução continua aberta. |
| `studio.lerian.br-spi.spi_payment.partial_return_failed` | Uma devolução parcial que você solicitou terminou sem movimentar dinheiro. |
| `studio.lerian.br-spi.spi_payment.partial_returned` | Uma devolução parcial foi liquidada. Pode ser uma devolução que você enviou ou uma devolução que você recebeu. |
| `studio.lerian.br-spi.spi_payment.return_received` | Chegou uma devolução de um Pix que você enviou. O trilho a retém para a decisão do seu cliente. |
| `studio.lerian.br-spi.spi_payment.return_accepted` | O trilho respondeu a uma devolução recebida como aceita (`ACSP`). A devolução não está liquidada. |
| `studio.lerian.br-spi.spi_payment.return_declined` | Uma devolução recebida terminou sem movimentar dinheiro: seu cliente ou o SPI a recusou. |

#### Liquidação no trilho

| `ce-type` | Quando é emitido |
| - | - |
| `studio.lerian.br-spi.spi_settlement.completion_observed` | Um Pix chegou à liquidação no trilho. |
| `studio.lerian.br-spi.spi_settlement.termination_observed` | Um Pix liquidado foi devolvido, ou um pagamento terminou sem liquidação. |

#### Pix Automático

| `ce-type` | Quando é emitido |
| - | - |
| `studio.lerian.br-spi.spi_mandate.requested` | Chegou uma solicitação de confirmação de recorrência (`pain.009`). |
| `studio.lerian.br-spi.spi_mandate.request_sent` | O BACEN aceitou o `pain.009` que o trilho enviou para uma solicitação de recorrência. |
| `studio.lerian.br-spi.spi_mandate.request_received` | O participante do pagador confirmou o recebimento desse `pain.009` (`pain.012`). |
| `studio.lerian.br-spi.spi_mandate.cancellation_requested` | Chegou um cancelamento de recorrência (`pain.011`). |
| `studio.lerian.br-spi.spi_mandate.resolved` | Um mandato do Pix Automático chegou a um veredito. |
| `studio.lerian.br-spi.spi_schedule.requested` | Chegou um agendamento de cobrança recorrente (`pain.013`), e ele corresponde a um mandato ativo. |
| `studio.lerian.br-spi.spi_schedule.cancellation_requested` | Chegou uma solicitação de cancelamento de agendamento (`camt.055`). |
| `studio.lerian.br-spi.spi_schedule.cancellation_resolved` | Um `camt.029` respondeu a uma solicitação de cancelamento de agendamento, com uma aceitação ou uma recusa. |
| `studio.lerian.br-spi.spi_schedule.resolved` | Um agendamento chegou a um veredito: confirmado ou rejeitado (`pain.014`), ou cancelado. |

#### Mensagens, relatórios e participantes

| `ce-type` | Quando é emitido |
| - | - |
| `studio.lerian.br-spi.spi_admi.rejection_received` | O BACEN recusou uma mensagem que o trilho enviou (`admi.002`). |
| `studio.lerian.br-spi.spi_admi.system_event_received` | O BACEN enviou um aviso de evento de sistema (`admi.004`). |
| `studio.lerian.br-spi.spi_camt.member_change` | Uma difusão `camt.014` informou que um participante entrou ou saiu. |
| `studio.lerian.br-spi.spi_camt.split_tax_declared` | Um lançamento de `camt.054` trouxe uma declaração de split tributário. |
| `studio.lerian.br-spi.spi_tracking.internal_settlement_reported` | O trilho enviou ao BACEN um relatório de liquidação interna do MED 2.0 (`trck.002`). |
| `studio.lerian.br-spi.spi_tracking.receipt_observed` | Chegou o recibo (`camt.025`) de um relatório enviado, com uma aceitação ou uma rejeição. |
| `studio.lerian.br-spi.spi_participant.registration_resolved` | O BACEN respondeu a uma solicitação de cadastro de participante: confirmado ou recusado. |
| `studio.lerian.br-spi.spi_participant.offboard_resolved` | O BACEN respondeu a uma solicitação de descadastro de participante. |
| `studio.lerian.br-spi.spi_participant.attributes_changed` | O BACEN difundiu uma alteração de atributos de participante (`reda.041`). |
| `studio.lerian.br-spi.spi_participant.portability_deadline_notified` | O BACEN definiu um prazo de portabilidade para um participante (`reda.017`). |

#### Aprovações e operações

| `ce-type` | Quando é emitido |
| - | - |
| `studio.lerian.br-spi.spi_approval.approved` | Um aprovador aprovou uma aprovação solicitada. |
| `studio.lerian.br-spi.spi_approval.denied` | Um aprovador negou uma aprovação solicitada. |
| `studio.lerian.br-spi.spi_approval.expired` | Uma aprovação solicitada chegou ao prazo sem decisão. |
| `studio.lerian.br-spi.spi_operation.manually_resolved` | Um operador encerrou uma operação travada por meio da [resolução manual](https://docs.lerian.studio/pt/reference/rails/spi/spi/manual-resolve-operation.md). |

### `dict`: chaves Pix, reivindicações e MED

#### Chaves

| `ce-type` | Quando é emitido |
| - | - |
| `studio.lerian.br-spi-dict.dict_key.created` | O BACEN confirmou o registro de uma chave Pix. |
| `studio.lerian.br-spi-dict.dict_key.updated` | O BACEN aceitou uma atualização de uma chave Pix. |
| `studio.lerian.br-spi-dict.dict_key.deleted` | Uma chave Pix saiu deste deploy: o BACEN confirmou a exclusão dela, ou uma reivindicação a moveu para outro participante. |
| `studio.lerian.br-spi-dict.dict_key.transferred` | Uma reivindicação moveu uma chave Pix para um participante que este deploy atende. |

#### Reivindicações

| `ce-type` | Quando é emitido |
| - | - |
| `studio.lerian.br-spi-dict.dict_claim.initiated` | O BACEN registrou uma reivindicação que você abriu. |
| `studio.lerian.br-spi-dict.dict_claim.acknowledged` | O BACEN aceitou o reconhecimento de uma reivindicação. |
| `studio.lerian.br-spi-dict.dict_claim.confirmed` | Uma reivindicação passou para `CONFIRMED`: o doador concordou em liberar a chave. |
| `studio.lerian.br-spi-dict.dict_claim.completed` | Uma reivindicação passou para `COMPLETED`: a chave foi para o reivindicante. |
| `studio.lerian.br-spi-dict.dict_claim.cancelled` | Uma reivindicação passou para `CANCELLED`. |
| `studio.lerian.br-spi-dict.dict_claim.resolved` | O prazo de uma reivindicação passou, e o trilho concluiu ou cancelou a reivindicação. |
| `studio.lerian.br-spi-dict.dict_claim.received` | Uma reivindicação que outro participante abriu contra uma das suas chaves apareceu ou mudou de status. |

#### Registros do MED

O trilho emite um evento de registro do MED quando observa uma nova versão do registro no BACEN. O evento nomeia o status que o registro atingiu. `updated` significa que o registro mudou e o status dele não mudou.

| `ce-type` | Quando é emitido |
| - | - |
| `studio.lerian.br-spi-dict.dict_infraction.created` | Um relato de infração está `OPEN`. |
| `studio.lerian.br-spi-dict.dict_infraction.acknowledged` | Um relato de infração atingiu `ACKNOWLEDGED`. |
| `studio.lerian.br-spi-dict.dict_infraction.closed` | Um relato de infração atingiu `CLOSED`. |
| `studio.lerian.br-spi-dict.dict_infraction.cancelled` | Um relato de infração atingiu `CANCELLED`. |
| `studio.lerian.br-spi-dict.dict_infraction.updated` | Um relato de infração mudou, e o status dele não mudou. |
| `studio.lerian.br-spi-dict.dict_refund.created` | Uma solicitação de reembolso está `OPEN`. |
| `studio.lerian.br-spi-dict.dict_refund.closed` | Uma solicitação de reembolso atingiu `CLOSED`. |
| `studio.lerian.br-spi-dict.dict_refund.cancelled` | Uma solicitação de reembolso atingiu `CANCELLED`. |
| `studio.lerian.br-spi-dict.dict_refund.updated` | Uma solicitação de reembolso mudou, e o status dela não mudou. |
| `studio.lerian.br-spi-dict.dict_fraud_marker.created` | Um marcador de fraude está `ACTIVE`. |
| `studio.lerian.br-spi-dict.dict_fraud_marker.cancelled` | Um marcador de fraude atingiu `INACTIVE`. |
| `studio.lerian.br-spi-dict.dict_fraud_marker.updated` | Um marcador de fraude mudou, e o status dele não mudou. |
| `studio.lerian.br-spi-dict.dict_funds_recovery.created` | Uma recuperação de fundos está `CREATED`. |
| `studio.lerian.br-spi-dict.dict_funds_recovery.tracked` | Uma recuperação de fundos atingiu `TRACKED`. |
| `studio.lerian.br-spi-dict.dict_funds_recovery.awaiting_analysis` | Uma recuperação de fundos atingiu `AWAITING_ANALYSIS`. |
| `studio.lerian.br-spi-dict.dict_funds_recovery.analysed` | Uma recuperação de fundos atingiu `ANALYSED`. |
| `studio.lerian.br-spi-dict.dict_funds_recovery.refunding` | Uma recuperação de fundos atingiu `REFUNDING`. |
| `studio.lerian.br-spi-dict.dict_funds_recovery.completed` | Uma recuperação de fundos atingiu `COMPLETED`. |
| `studio.lerian.br-spi-dict.dict_funds_recovery.cancelled` | Uma recuperação de fundos atingiu `CANCELLED`. |
| `studio.lerian.br-spi-dict.dict_funds_recovery.updated` | Uma recuperação de fundos mudou, e o status dela não mudou. |

#### Estatísticas e arquivos de conjunto de CIDs

| `ce-type` | Quando é emitido |
| - | - |
| `studio.lerian.br-spi-dict.dict_person_statistics.observed` | Os contadores antifraude do BACEN para um CPF ou CNPJ da sua lista de observação mudaram. |
| `studio.lerian.br-spi-dict.dict_cid_set_file.available` | O BACEN informa um arquivo de conjunto de CIDs solicitado como `AVAILABLE`. |
| `studio.lerian.br-spi-dict.dict_cid_set_file.unavailable` | O BACEN informa um arquivo de conjunto de CIDs solicitado como `UNAVAILABLE`. |
| `studio.lerian.br-spi-dict.dict_cid_set_file.error` | O BACEN informa um arquivo de conjunto de CIDs solicitado como `ERROR`. |

#### Operações do MED

Esses eventos trafegam no tópico `br-spi.dict.med.operations`, que o Streaming Hub não lê.

| `ce-type` | Quando é emitido |
| - | - |
| `studio.lerian.br-spi-dict.dict_med_operations.sync_pending` | O BACEN confirmou uma operação do MED, e a resposta dele veio incompleta. |
| `studio.lerian.br-spi-dict.dict_med_operations.unknown_outcome` | O resultado de uma operação do MED enviada ao BACEN é desconhecido. |
| `studio.lerian.br-spi-dict.dict_med_operations.manual_review` | Uma operação do MED que o BACEN aceitou precisa de revisão de um operador. |
| `studio.lerian.br-spi-dict.dict_med_operations.local_failure` | Uma operação do MED não chegou ao BACEN. |
| `studio.lerian.br-spi-dict.dict_med_operations.inconsistent_projection` | O trilho registrou um estado do MED no BACEN que conflita com uma regra local. |
| `studio.lerian.br-spi-dict.dict_med_operations.feed_blocked` | Um feed de descoberta do DICT parou, porque a resposta do BACEN não lhe dá nenhum caminho válido para continuar. |
| `studio.lerian.br-spi-dict.dict_med_operations.feed_record_abandoned` | Um operador abandonou um registro que um feed de descoberta não conseguiu ler ou armazenar. |

### `brcode`: cobranças e recorrências

> [!WARNING]
>
> Não registre um lançamento no ledger a partir de `brcode_charge.paid` ou `brcode_cobr.concluded`. Esses eventos registram o ciclo de vida de uma cobrança. Um consumidor que registra a partir do evento da cobrança e de um evento de liquidação do mesmo Pix registra o Pix duas vezes.

#### Cobranças

| `ce-type` | Quando é emitido |
| - | - |
| `studio.lerian.br-spi-brcode.brcode_charge.created` | Uma cobrança (Cob ou CobV) foi criada. |
| `studio.lerian.br-spi-brcode.brcode_charge.revised` | Uma cobrança foi revisada. |
| `studio.lerian.br-spi-brcode.brcode_charge.paid` | Uma cobrança atingiu `CONCLUIDA`: um Pix a pagou. |
| `studio.lerian.br-spi-brcode.brcode_charge.settlement_amount_mismatch` | Um Pix liquidado concluiu uma cobrança, e o valor dele não é o valor da cobrança. |
| `studio.lerian.br-spi-brcode.brcode_charge.cancelled` | Uma cobrança foi removida. |

#### Recorrências, cobranças recorrentes e solicitações

Cada um desses recursos emite um evento para cada status que atinge.

| `ce-type` | Quando é emitido |
| - | - |
| `studio.lerian.br-spi-brcode.brcode_recurrence.created` | Uma recorrência (Rec) atingiu `CRIADA`. |
| `studio.lerian.br-spi-brcode.brcode_recurrence.approved` | Uma recorrência atingiu `APROVADA`. |
| `studio.lerian.br-spi-brcode.brcode_recurrence.rejected` | Uma recorrência atingiu `REJEITADA`. |
| `studio.lerian.br-spi-brcode.brcode_recurrence.expired` | Uma recorrência atingiu `EXPIRADA`. |
| `studio.lerian.br-spi-brcode.brcode_recurrence.cancelled` | Uma recorrência atingiu `CANCELADA`. |
| `studio.lerian.br-spi-brcode.brcode_cobr.created` | Uma cobrança recorrente (CobR) atingiu `CRIADA`. |
| `studio.lerian.br-spi-brcode.brcode_cobr.active` | Uma cobrança recorrente atingiu `ATIVA`. |
| `studio.lerian.br-spi-brcode.brcode_cobr.concluded` | Uma cobrança recorrente atingiu `CONCLUIDA`. |
| `studio.lerian.br-spi-brcode.brcode_cobr.expired` | Uma cobrança recorrente atingiu `EXPIRADA`. |
| `studio.lerian.br-spi-brcode.brcode_cobr.rejected` | Uma cobrança recorrente atingiu `REJEITADA`. |
| `studio.lerian.br-spi-brcode.brcode_cobr.cancelled` | Uma cobrança recorrente atingiu `CANCELADA`. |
| `studio.lerian.br-spi-brcode.brcode_solicrec.created` | Uma solicitação de recorrência (SolicRec) atingiu `CRIADA`. |
| `studio.lerian.br-spi-brcode.brcode_solicrec.sent` | Uma solicitação de recorrência atingiu `ENVIADA`. |
| `studio.lerian.br-spi-brcode.brcode_solicrec.received` | Uma solicitação de recorrência atingiu `RECEBIDA`. |
| `studio.lerian.br-spi-brcode.brcode_solicrec.accepted` | Uma solicitação de recorrência atingiu `ACEITA`. |
| `studio.lerian.br-spi-brcode.brcode_solicrec.rejected` | Uma solicitação de recorrência atingiu `REJEITADA`. |
| `studio.lerian.br-spi-brcode.brcode_solicrec.expired` | Uma solicitação de recorrência atingiu `EXPIRADA`. |
| `studio.lerian.br-spi-brcode.brcode_solicrec.cancelled` | Uma solicitação de recorrência atingiu `CANCELADA`. |
| `studio.lerian.br-spi-brcode.brcode_lote.created` | Um lote de CobV foi criado, com o status `CRIADA`. |

### `core`: participantes e liquidações

| `ce-type` | Quando é emitido |
| - | - |
| `studio.lerian.br-spi-core.core_participant.registration_requested` | O Core registrou um novo participante indireto como `PENDING` e solicitou o cadastro dele no BACEN. |
| `studio.lerian.br-spi-core.core_participant.offboard_requested` | Um participante passou para `OFFBOARD_PENDING`, e o Core solicitou o descadastro dele no BACEN. |
| `studio.lerian.br-spi-core.settlement.settled` | Um Pix foi liquidado, e o Core acompanha a liquidação da operação dele. |
| `studio.lerian.br-spi-core.settlement.returned` | Um Pix liquidado foi devolvido, e o Core acompanha a liquidação da operação dele. |
| `studio.lerian.br-spi-core.settlement.failed` | Um Pix terminou sem liquidação, e o Core acompanha a liquidação da operação dele. |


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