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

# Cómo funciona Lerian BC Correios

> Cómo Lerian BC Correios recoge los correos de BC Correio, almacena correos y adjuntos, envía mensajes a BACEN, analiza los correos con IA y aplica la retención.

Lerian BC Correios ejecuta un worker de sondeo por tenant. Cada ciclo pide a BC Correio las carpetas y los correos del usuario Sisbacen del tenant, y almacena lo que es nuevo.

## Ciclo de sondeo

***

El tenant define el intervalo de sondeo en su configuración: 5, 15, 30 o 60 minutos. Un cambio del intervalo toma efecto sin reinicio.

Cada ciclo ejecuta estos pasos:

1. Lista las carpetas de BC Correio que el usuario Sisbacen puede ver.
2. Lee cada carpeta página por página, hasta que una página vuelve vacía.
3. Lee cada correo nuevo y obtiene sus adjuntos, y luego los almacena.
4. Para un correo que ya almacena, obtiene los adjuntos que fallaron en un ciclo anterior.

Un error en una carpeta o en un correo no detiene el ciclo. El ciclo siguiente vuelve a intentar ese trabajo.

## Carpetas

***

Cuando Lerian BC Correios almacena un correo nuevo, coloca el correo en la carpeta local que corresponde a su carpeta de BC Correio:

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

Un movimiento posterior del correo en BC Correio no cambia su carpeta local. No puedes restaurar un correo desde `CANCELLED`.

## Sincronización inicial

***

El primer ciclo de un tenant almacena los correos que ya existen en BC Correio. Lerian BC Correios no envía esos correos acumulados al proveedor de IA. Aun así, puedes pedir un análisis de uno de esos correos.

Un ciclo que no logra leer una carpeta no completa la sincronización inicial. El ciclo siguiente la ejecuta otra vez.

## Almacenamiento de correos y adjuntos

***

Lerian BC Correios almacena cada correo en PostgreSQL. Almacena los adjuntos en un almacenamiento de objetos compatible con S3 o en el sistema de archivos local, con el checksum SHA-256 de cada archivo.

Cuando descargas un adjunto, el servicio verifica el archivo contra su checksum. Un archivo que no pasa la verificación devuelve `BCC-0010`.

<h2 id="sending-a-message">
  Envío de un mensaje
</h2>

***

`POST /mails/send` envía un mensaje de texto a un departamento de BACEN a través de BC Correio. El mensaje va al destino de la solicitud. Sin él, va al destino predeterminado del tenant. Sin ninguno de los dos, va a `DEINF`.

El tenant necesita credenciales de BC Correio almacenadas. Sin ellas, la solicitud devuelve `401` `BCC-2001`, y Lerian BC Correios no almacena nada.

Lerian BC Correios registra el mensaje como `PENDING` antes de llamar a BC Correio. Luego el resultado decide el estado y la respuesta:

| Resultado | Estado almacenado | Respuesta |
| - | - | - |
| BC Correio acepta el mensaje. | `CONFIRMED` | `201`, con el número de protocolo en `bcbConfirmationId`. |
| El servicio no puede saber si BC Correio recibió el mensaje, por ejemplo después de un timeout. | `AMBIGUOUS` | `409` `BCC-2010` |
| BC Correio rechaza el mensaje, o el servicio no lo envía. | `FAILED` | `503` `BCC-2002` |

Una repetición de la solicitud con la misma clave `X-Idempotency` no envía el mensaje otra vez. Mientras la primera solicitud se ejecuta, la repetición puede devolver `409` `BCC-0012` con un header `Retry-After`. En los demás casos, el estado almacenado de la primera solicitud decide la respuesta:

| Estado de la primera solicitud | Respuesta |
| - | - |
| `CONFIRMED` | La respuesta `201` original. |
| `PENDING`, dentro de la ventana de gracia | `409` `BCC-2009`. Espera y vuelve a intentarlo con la misma clave. |
| `PENDING`, después de la ventana de gracia | El estado cambia a `AMBIGUOUS`, y la respuesta es `409` `BCC-2010`. |
| `AMBIGUOUS` | `409` `BCC-2010` |
| `FAILED` | `409` `BCC-2011`. Envía el mensaje otra vez con una clave nueva. |

`TRANSMISSION_PENDING_GRACE_SEC` define la ventana de gracia, 30 segundos de forma predeterminada.

No envíes un mensaje otra vez después de `BCC-2010`. BC Correio ya puede tenerlo. Confirma con BACEN, por su canal manual, que el mensaje no llegó, y solo entonces envíalo con una clave nueva.

Lerian BC Correios no reintenta un envío por sí mismo.

## Acciones locales sobre los correos

***

Marcar como leído, archivar y restaurar cambian tu copia local de un correo. Lerian BC Correios no envía estas acciones a BC Correio.

Restaurar un correo de la carpeta `CANCELLED` o `SENT` devuelve `409` `BCC-0014`.

## Insight de IA

***

Un tenant puede configurar un proveedor de IA: `openai`, `anthropic` o `gemini`, con su propia clave de API. Lerian BC Correios envía el cuerpo del correo a ese proveedor, junto con el texto que extrae de los adjuntos TXT, CSV, XML, PDF y DOCX.

Cuando el tenant tiene un proveedor de IA, cada correo nuevo espera un análisis. Lerian BC Correios analiza en el ciclo de sondeo un correo sin adjuntos y con un cuerpo de al menos `AI_BODY_INLINE_THRESHOLD` caracteres. Un worker en segundo plano analiza los demás correos.

Puedes pedir un nuevo análisis de un correo con `POST /mails/{id}/reanalyze`. Cuando el proveedor responde dentro de 20 segundos, la respuesta trae el análisis. En otro caso, la respuesta es `202`, y el análisis continúa en segundo plano.

## Retención

***

Cada tenant define en su configuración un período de retención entre 1825 y 36500 días.

Un worker de retención se ejecuta una vez cada 24 horas. Para los correos que superan el período de retención, elimina los archivos adjuntos del almacenamiento y oculta el correo. Luego elimina los registros del correo de la base de datos.

## Registro de auditoría

***

El registro de auditoría guarda estas acciones:

| Acción | Cuándo |
| - | - |
| `VIEW_MAIL` | Un usuario lee el detalle de un correo. |
| `MAIL_READ` | Un usuario marca un correo como leído. |
| `DOWNLOAD_ATTACHMENT` | Un usuario descarga un adjunto. |
| `SEND_MESSAGE` | Un usuario envía un mensaje a BACEN. |
| `MAIL_ARCHIVED` | Un usuario archiva un correo. |
| `MAIL_RESTORED` | Un usuario restaura un correo. |
| `SETTINGS_UPDATED` | Un usuario crea o cambia la configuración del tenant. |
| `RETENTION_POLICY_APPLIED` | Una ejecución de retención elimina correos. |

`GET /audit` lista las entradas. `GET /audit/export` las exporta en CSV. Envía `Accept: application/pdf` para obtener un PDF.


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