> ## 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 BC Correios funciona

> Como o Lerian BC Correios coleta correspondências do BC Correio, armazena correspondências e anexos, envia mensagens ao BACEN, analisa correspondências com IA e aplica a retenção.

O Lerian BC Correios roda um worker de polling por tenant. Cada ciclo pede ao BC Correio as pastas e as correspondências do usuário Sisbacen do tenant, e armazena o que é novo.

## Ciclo de polling

***

O tenant define o intervalo de polling nas suas configurações: 5, 15, 30 ou 60 minutos. Uma mudança no intervalo entra em vigor sem restart.

Cada ciclo executa estes passos:

1. Lista as pastas do BC Correio que o usuário Sisbacen pode ver.
2. Lê cada pasta página por página, até que uma página volte vazia.
3. Lê cada correspondência nova, busca seus anexos e depois os armazena.
4. Para uma correspondência que já armazena, busca os anexos que falharam em um ciclo anterior.

Um erro em uma pasta ou em uma correspondência não interrompe o ciclo. O próximo ciclo tenta esse trabalho de novo.

## Pastas

***

Quando o Lerian BC Correios armazena uma correspondência nova, ele a coloca na pasta local que corresponde à sua pasta no BC Correio:

| Pasta do BC Correio | Pasta local |
| - | - |
| `CaixaEntrada` | `INBOX` |
| `Transmitidos` | `SENT` |
| `Arquivados` | `ARCHIVED` |
| `Cancelados` | `CANCELLED` |
| `Destinados`, `Reservados`, `Setor` | `INBOX` |

Uma movimentação posterior da correspondência no BC Correio não muda a sua pasta local. Você não pode restaurar uma correspondência de `CANCELLED`.

## Sincronização inicial

***

O primeiro ciclo de um tenant armazena as correspondências que já existem no BC Correio. O Lerian BC Correios não envia esse acervo ao provedor de IA. Você ainda pode pedir a análise de uma correspondência desse acervo.

Um ciclo que falha ao ler uma pasta não conclui a sincronização inicial. O próximo ciclo a executa de novo.

## Armazenamento de correspondências e anexos

***

O Lerian BC Correios armazena cada correspondência no PostgreSQL. Ele armazena os anexos em um armazenamento de objetos compatível com S3 ou no sistema de arquivos local, com o checksum SHA-256 de cada arquivo.

Quando você baixa um anexo, o serviço confere o arquivo com o seu checksum. Um arquivo que falha na verificação retorna `BCC-0010`.

<h2 id="sending-a-message">
  Envio de mensagem
</h2>

***

`POST /mails/send` envia uma mensagem de texto a um departamento do BACEN pelo BC Correio. A mensagem vai para o destino da requisição. Sem ele, vai para o destino padrão do tenant. Sem os dois, vai para `DEINF`.

O tenant precisa de credenciais do BC Correio armazenadas. Sem elas, a requisição retorna `401` `BCC-2001`, e o Lerian BC Correios não armazena nada.

O Lerian BC Correios registra a mensagem como `PENDING` antes de chamar o BC Correio. O resultado então decide o status e a resposta:

| Resultado | Status armazenado | Resposta |
| - | - | - |
| O BC Correio aceita a mensagem. | `CONFIRMED` | `201`, com o número de protocolo em `bcbConfirmationId`. |
| O serviço não consegue saber se o BC Correio recebeu a mensagem, por exemplo depois de um timeout. | `AMBIGUOUS` | `409` `BCC-2010` |
| O BC Correio recusa a mensagem, ou o serviço não a envia. | `FAILED` | `503` `BCC-2002` |

Uma repetição da requisição com a mesma chave `X-Idempotency` não envia a mensagem de novo. Enquanto a primeira requisição roda, a repetição pode retornar `409` `BCC-0012` com um header `Retry-After`. Fora isso, o status armazenado da primeira requisição decide a resposta:

| Status da primeira requisição | Resposta |
| - | - |
| `CONFIRMED` | A resposta `201` original. |
| `PENDING`, dentro da janela de tolerância | `409` `BCC-2009`. Aguarde e tente de novo com a mesma chave. |
| `PENDING`, depois da janela de tolerância | O status muda para `AMBIGUOUS`, e a resposta é `409` `BCC-2010`. |
| `AMBIGUOUS` | `409` `BCC-2010` |
| `FAILED` | `409` `BCC-2011`. Envie a mensagem de novo com uma chave nova. |

`TRANSMISSION_PENDING_GRACE_SEC` define a janela de tolerância, 30 segundos por padrão.

Não envie a mensagem de novo depois de `BCC-2010`. O BC Correio pode já tê-la. Confirme com o BACEN, pelo canal manual dele, que a mensagem não chegou, e só então envie-a com uma chave nova.

O Lerian BC Correios não repete um envio por conta própria.

## Ações locais sobre correspondências

***

Marcar como lida, arquivar e restaurar mudam a sua cópia local de uma correspondência. O Lerian BC Correios não envia essas ações ao BC Correio.

Uma restauração de uma correspondência na pasta `CANCELLED` ou `SENT` retorna `409` `BCC-0014`.

## Insight de IA

***

Um tenant pode configurar um provedor de IA: `openai`, `anthropic` ou `gemini`, com a sua própria chave de API. O Lerian BC Correios envia o corpo da correspondência a esse provedor, junto com o texto que extrai de anexos TXT, CSV, XML, PDF e DOCX.

Quando o tenant tem um provedor de IA, cada correspondência nova aguarda análise. No ciclo de polling, o Lerian BC Correios analisa uma correspondência sem anexos e com um corpo de pelo menos `AI_BODY_INLINE_THRESHOLD` caracteres. Um worker em segundo plano analisa as outras correspondências.

Você pode pedir uma nova análise de uma correspondência com `POST /mails/{id}/reanalyze`. Quando o provedor responde em até 20 segundos, a resposta traz a análise. Caso contrário, a resposta é `202`, e a análise continua em segundo plano.

## Retenção

***

Cada tenant define nas suas configurações um período de retenção entre 1825 e 36500 dias.

Um worker de retenção roda uma vez a cada 24 horas. Para as correspondências que ultrapassam o período de retenção, ele exclui do armazenamento os arquivos de anexo e oculta a correspondência. Depois, exclui do banco de dados os registros da correspondência.

## Trilha de auditoria

***

A trilha de auditoria registra estas ações:

| Ação | Quando |
| - | - |
| `VIEW_MAIL` | Um usuário lê o detalhe de uma correspondência. |
| `MAIL_READ` | Um usuário marca uma correspondência como lida. |
| `DOWNLOAD_ATTACHMENT` | Um usuário baixa um anexo. |
| `SEND_MESSAGE` | Um usuário envia uma mensagem ao BACEN. |
| `MAIL_ARCHIVED` | Um usuário arquiva uma correspondência. |
| `MAIL_RESTORED` | Um usuário restaura uma correspondência. |
| `SETTINGS_UPDATED` | Um usuário cria ou muda as configurações do tenant. |
| `RETENTION_POLICY_APPLIED` | Uma execução de retenção exclui correspondências. |

`GET /audit` lista as entradas. `GET /audit/export` as exporta em CSV. Envie `Accept: application/pdf` para receber um PDF.


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