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

# Como o Lerian SRC funciona

> Como o Lerian SRC aceita uma consulta, envia-a ao BACEN, trata a resposta ou a rejeição do BACEN, faz novas tentativas e mantém os registros da instituição, a trilha de evidências e os casos de operador.

Uma consulta tem um de três status: `pending`, `completed` ou `failed`. O Lerian SRC aceita a consulta na hora e trabalha com o BACEN depois de responder à sua requisição.

## Requisição de consulta

***

Seu sistema envia `POST /v1/src/consultations` com um header `X-Idempotency`. O corpo indica um documento e as perguntas a fazer sobre ele.

| Campo | Significado |
| - | - |
| `document` | O CPF ou CNPJ a consultar. |
| `documentType` | `CPF` ou `CNPJ`. Ele deve corresponder ao documento. |
| `protectionTypes` | `account_opening`, `ownership_change` ou ambos. |
| `motivation` | O motivo da consulta. `motivation.reference` é obrigatório. |
| `subjectRole` | Opcional: `individual`, `company`, `holder` ou `representative`. Sem ele, o Lerian SRC deduz o papel a partir de `documentType`. |
| `companyConsultationId` | O id da consulta da empresa. Obrigatório para `holder` e `representative`. |

Um `holder` ou um `representative` é uma pessoa que você consulta para uma empresa. Envie primeiro a consulta da empresa. Depois envie a consulta da pessoa, com `companyConsultationId` definido como o id que a consulta da empresa retornou. Uma requisição que viola essas regras retorna `422` com um código de `SRC-0004` a `SRC-0008`.

O Lerian SRC verifica a requisição antes de aceitá-la. Ele verifica os dígitos verificadores, o tipo de documento, os tipos de proteção e a motivação. Uma requisição que falha em uma dessas verificações retorna `422` com o código `SRC-0002`, e o Lerian SRC não envia nada ao BACEN.

Uma requisição aceita retorna `202` com o `id` da consulta e o status `pending`. O Lerian SRC armazena a consulta antes de enviar qualquer coisa ao BACEN, e publica o evento de aceite.

## SRC0001: a consulta ao BACEN

***

O Lerian SRC envia cada consulta aceita ao BACEN como uma mensagem SRC0001. A cada 15 segundos, ele pega até 25 consultas que aguardam envio.

Cada mensagem leva o número de operação da consulta. A API o retorna como `regulatoryOperationNumber`.

O Lerian SRC verifica cada mensagem em relação ao schema de mensagens do BACEN antes de enviá-la. Se a mensagem não é válida para o BACEN, o Lerian SRC não a envia. A consulta termina como `failed` com o código de rejeição `SRC-OUTBOUND-INVALID`, e o Lerian SRC abre um caso de operador `invalid_outbound`.

## SRC0001R1: a resposta do BACEN

***

O BACEN responde com uma mensagem SRC0001R1. A resposta leva o código de controle do BACEN e um veredito para cada tipo de proteção.

O Lerian SRC associa a resposta à sua consulta e armazena os vereditos. A consulta passa a `completed`, e o Lerian SRC publica o evento de conclusão. Um veredito com `permitted` definido como `false` significa uma restrição ativa.

Uma resposta que não corresponde a nenhuma consulta do deploy abre um caso de operador `orphan_response`.

## SRC0001E: a rejeição do BACEN

***

O BACEN pode rejeitar uma consulta com uma mensagem SRC0001E. O Lerian SRC coloca o código de rejeição em uma de três classes:

* **`transient`**: o código indica um estado temporário do trilho. O Lerian SRC envia a consulta de novo, dentro do orçamento de tentativas. Os códigos transitórios são `EGEN0021`, `EGEN0050`, `EGEN0152`, `EGEN0300`, `EGEN0301` e `EGEN1105`.
* **`permanent`**: a consulta termina como `failed`. Corrija a causa e envie uma nova requisição.
* **`unknown`**: o Lerian SRC não reconhece o código. A consulta termina como `failed`, como para um código permanente.

Uma consulta com falha leva o código como o BACEN o enviou, em `rejection.code`, e a classe dele em `rejection.classification`. O Lerian SRC publica o evento de falha.

## Novas tentativas e indisponibilidade do BACEN

***

Quando um envio falha, ou o BACEN dá uma rejeição transitória, o Lerian SRC envia a consulta de novo. Se o BACEN não responde a tempo, o Lerian SRC também envia a consulta de novo. Cada envio conta como uma tentativa.

Três chaves de configuração em runtime definem o orçamento de tentativas:

| Chave | Padrão | Significado |
| - | - | - |
| `src.dispatch.max_attempts` | `8` | Tentativas para cada consulta, de 1 a 20. |
| `src.dispatch.backoff_initial` | `1m` | Espera antes da primeira nova tentativa, de `1s` a `1h`. |
| `src.dispatch.backoff_ceiling` | `30m` | Espera mais longa entre duas tentativas, de `1m` a `24h`. |

A espera dobra depois de cada tentativa, até o teto. O Lerian SRC espera uma resposta por 30 minutos, ou pelo teto quando o teto é mais longo.

Quando uma consulta usa todo o orçamento, o Lerian SRC para de enviá-la e abre um caso de operador `budget_exhausted`. A consulta continua `pending`.

Quando o BACEN ou o canal IBM MQ está indisponível, a API não retorna erro. O Lerian SRC continua aceitando consultas, e elas ficam `pending`.

## Registro da instituição

***

Depois que uma consulta é concluída com uma restrição ativa, sua instituição envia um registro com `POST /v1/src/consultations/{id}/institution-record`. O registro tem um de dois tipos:

| Tipo | Quando enviar | Campos que ele exige |
| - | - | - |
| `exceptional_proceed` | Sua instituição seguiu com o contrato apesar da restrição ativa. | `justification` e `circumstance` |
| `refusal_explanation` | Sua instituição recusou, e o registro guarda a explicação que ela deu à parte interessada. | `explanation` |

Os dois tipos também exigem `registeredBy`, que indica quem envia o registro. Um envio bem-sucedido retorna `201`. O registro não muda os vereditos.

Uma consulta guarda um registro. Um segundo registro retorna `409` com o código `SRC-0101`. Uma consulta que não foi concluída com uma restrição ativa retorna `409` com o código `SRC-0102`.

## Trilha de evidências

***

O Lerian SRC mantém uma trilha de evidências para cada consulta.

| Operação | O que ela retorna |
| - | - |
| `GET /v1/src/evidence/consultations/{id}` | A trilha de uma consulta, registro por registro. |
| `POST /v1/src/evidence` | As consultas que têm uma trilha, encontradas por período, id da consulta, código de controle do BACEN ou documento. |
| `POST /v1/src/evidence/records` | Os registros individuais, encontrados por documento ou por tipo de registro. |

Para corrigir um registro, envie `POST /v1/src/evidence/consultations/{id}/corrections`. Coloque a posição do registro em `correctsSequence`, e o motivo em `reason`. O Lerian SRC adiciona a correção à trilha como um novo registro e retorna `201`.

Se uma correção concorrente da mesma trilha ocupa a posição primeiro, a requisição retorna `409` com o código `SRC-0104`. O Lerian SRC não grava nada. Tente a correção de novo.

<h2 id="operator-cases">
  Casos de operador
</h2>

***

Um caso de operador é um item que o seu back office deve ver. Cada caso indica o seu tipo em `leg`. Por exemplo:

| Tipo | O que aconteceu | O que o fechamento do caso faz |
| - | - | - |
| `invalid_outbound` | O Lerian SRC se recusou a enviar uma mensagem que não é válida para o BACEN. O BACEN não a recebeu. | Ele registra que uma pessoa viu o caso. O Lerian SRC não repara nada e não envia nada. Corrija a causa e envie uma nova requisição. |
| `orphan_response` | Uma mensagem do BACEN não correspondeu a nenhuma consulta do deploy. | Ele registra que uma pessoa examinou a mensagem. |
| `budget_exhausted` | Uma consulta usou todo o seu orçamento de tentativas. | Você não pode fechá-lo. Se a resposta do BACEN chega depois, o Lerian SRC registra a resposta e o caso sai da fila. |

[Operando o Lerian SRC](/pt/rails/src/src-operations#operator-cases) explica como listar e fechar casos.

O Lerian SRC também publica um evento a cada mudança de status. [Integrando com o Lerian SRC](/pt/rails/src/src-integration#polling-and-events) lista os eventos.


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