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

# Integração com o TED Lerian

> Integração com o Lerian SPB: famílias de eventos de operação do STR, integração com o ledger, entrega de webhooks e convenções da API.

O Lerian SPB é orientado a eventos. A emissão de eventos não é garantida para cada operação ou mudança de ciclo de vida: alguns emissores são opcionais ou best effort, e `EMISSION_REQUIRED` tem `false` como padrão. Defina `EMISSION_REQUIRED=true` em um deploy cujos sistemas downstream dependem desses eventos. O bootstrap então falha fechado, a menos que a emissão de eventos esteja totalmente conectada.

Os webhooks registrados recebem eventos duráveis do plano de controle. As famílias `settlement.*` e `spb.ldl.*` vão apenas para o backbone de streaming. Os sistemas downstream leem o estado de liquidação dos eventos de streaming `settlement.*` e não fazem polling.

## Famílias de eventos

***

| Família                      | Emitido em                                                                                                                                                                                                                                                                                                     |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `str.operation.*`            | Ciclo de vida da operação — `accepted`, `received`, `returnRequested`, `cancelRequested`                                                                                                                                                                                                                       |
| `str.readiness.changed`      | O estado de readiness do trilho muda                                                                                                                                                                                                                                                                           |
| `str.certificate.*`          | Ciclo de vida do certificado — `rotated`, `expiring`, `counterpartyChanged`, `activationRequested`                                                                                                                                                                                                             |
| `str.approval.*`             | Uma aprovação na fila emite `signed` ou `denied`; quando atinge o quórum e muda de `PENDING_APPROVAL` para `SUBMITTED`, emite `quorumReached` exatamente uma vez                                                                                                                                               |
| `str.reconciliation.*`       | Um caso de conciliação é `opened` ou `resolved`                                                                                                                                                                                                                                                                |
| `str.schedule.changed`       | As grades da janela de funcionamento mudam                                                                                                                                                                                                                                                                     |
| `str.message.*`              | No nível da mensagem: `received`, `sent`, `submitted`, `failed`, `rejected`                                                                                                                                                                                                                                    |
| `str.emoney.transferAdvised` | Um novo aviso de moeda eletrônica de terceiros (`SME0001R2`, `SME0002R2` ou `SME0004R2`) é registrado. Entregue por streaming e pelos webhooks registrados                                                                                                                                                     |
| `spb.ldl.*`                  | Fatos de aviso e de comando de depósito do SILOC, incluindo `deposit-commanded`, `deposit-confirmed` e `deposit-failed`. Entregue apenas no backbone de streaming, não em webhooks                                                                                                                             |
| `settlement.*`               | A posição final de liquidação: `settled` quando a perna R de entrada confirma uma operação, `returned` quando uma devolução confirmada estorna um original liquidado, `failed` em uma rejeição ou no cancelamento de um original que nunca liquidou. Entregue apenas no backbone de streaming, não em webhooks |

## Integração com o ledger

***

O seu consumidor de ledger deve receber as duas famílias, `str.operation.*` e `settlement.*`, no backbone de streaming. O evento `str.operation.accepted` sinaliza a aceitação do despacho, não a liquidação no BACEN, então use-o para registrar um lançamento pendente.

Registre a posição final a partir dos fatos `settlement.*` no backbone de streaming. A transição de negócio por trás de `settlement.settled` acontece quando a perna R de entrada move a operação para `CONFIRMED`. A entrega pelo broker é pelo menos uma vez e pode reentregar o fato. O `ce-id` é determinístico, então deduplique pelo par `(ce-source, ce-id)`.

O evento `settlement.failed` dispara quando o BACEN rejeita a operação ou quando um cancelamento estorna um original que nunca liquidou. O evento `settlement.returned` dispara quando uma devolução confirmada estorna um original liquidado. A devolução segue o mesmo padrão: `str.operation.returnRequested` sinaliza a aceitação do despacho da devolução, e o lançamento pai é estornado em `settlement.returned`. O Lerian SPB não mantém posição contábil. O trilho carrega a mensagem e o seu estado de liquidação, e o seu ledger registra o dinheiro.

## Webhooks

***

Os consumidores de webhook se autorregistram nas constantes canônicas de evento. Eles negociam os formatos de payload a partir de um catálogo de eventos compartilhado. A entrega é durável. Você pode repetir manualmente uma entrega que falhou. Um caminho de dead-letter trata as entregas que esgotam as novas tentativas.

## Convenções da API

***

* **A autenticação** é um bearer token.
* **As escritas são idempotentes** por uma chave de idempotência. Um reenvio não despacha em duplicidade.
* **As leituras do log de mensagens não expõem o frame assinado que trafega na rede.** Você lê uma única mensagem pelo seu NUOp para obter dados estruturados. Quando o trilho reteve um frame, leia o XML reconstruído pela rota de frame dedicada, autorizada separadamente. Ele não retém separadamente os bytes literais enviados.
* **Ids desconhecidos retornam um not-found uniforme.** A resposta nunca revela se existe uma operação que a sua instituição não possui.
