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

# Jobs y lógica de reintentos

> Recupera operaciones Pix automáticamente con jobs en segundo plano que reintentan eventos fallidos, concilian devoluciones y mantienen los datos consistentes.

El plugin de Pix recupera operaciones automáticamente con jobs en segundo plano y reintentos. Si una llamada al proveedor agota su timeout o un evento falla al procesarse, el plugin reintenta y concilia los datos sin trabajo manual.

## Reintentos automáticos

***

El plugin procesa los eventos Pix de forma asíncrona. Si falla al procesar un evento, el plugin reintenta ahí mismo y después captura el evento en una dead-letter queue sin pérdida. Un operador reproduce un evento retenido, limitado a un número máximo de intentos. Después del límite, el registro permanece retenido para inspección y el plugin nunca lo descarta.

El plugin reintenta las llamadas salientes al proveedor ante respuestas 5xx y timeouts. Cada reintento usa backoff exponencial con jitter.

<Tip>
  El plugin deduplica los eventos por ID durante una ventana de tiempo fija. Un evento reintentado o duplicado nunca se aplica dos veces, así que los jobs siguen siendo idempotentes.
</Tip>

## Conciliación de devoluciones

***

Una devolución puede tener éxito en el proveedor pero fallar al registrarse localmente si el servicio se cae entre los dos pasos. El sweeper de conciliación de devoluciones es una red de seguridad en segundo plano para este caso.

El sweeper se ejecuta con un temporizador y encuentra las devoluciones que siguen atascadas en pending. Para cada una, vuelve a ejecutar los pasos idempotentes (settle, confirm o close), que el proveedor deduplica por la referencia de la devolución. Retiene para un operador una fila que sigue en el paso create, porque una repetición ciega de create podría causar una devolución doble.

```mermaid theme={null}
sequenceDiagram
  participant Sweeper
  participant Provider
  participant DB
  Sweeper->>DB: Buscar filas de devolución pendientes
  Sweeper->>Provider: Reejecutar el paso faltante
  alt Success
    Provider-->>Sweeper: confirmado
    Sweeper->>DB: Marcar como hecho
  else Still failing
    Provider-->>Sweeper: error
    Sweeper->>DB: Registrar el intento y aplicar backoff
  else Attempts exhausted
    Sweeper->>DB: Retener la fila y generar alerta
  end
```

Cada intento fallido espera más que el anterior, desde un minuto hasta una hora. Después de un número máximo de intentos, el sweeper retiene el registro y genera una alerta. No reintenta para siempre. El sweeper es opcional y está desactivado de forma predeterminada.

## Configuración

***

Puedes ajustar el comportamiento de reintentos y conciliación con variables de entorno:

| Variable                                     | Descripción                                                                                 | Predeterminado |
| :------------------------------------------- | :------------------------------------------------------------------------------------------ | :------------- |
| `DLQ_REPLAY_MAX_ATTEMPTS`                    | Veces que un operador puede reproducir un evento retenido antes de que permanezca retenido  | 3              |
| `CONSUMER_DEDUP_TTL_SEC`                     | Ventana de deduplicación, en segundos, que mantiene idempotente el procesamiento de eventos | 3600           |
| `REFUND_RECONCILIATION_SWEEPER_ENABLED`      | Activa el sweeper de conciliación de devoluciones                                           | false          |
| `REFUND_RECONCILIATION_SWEEPER_INTERVAL_SEC` | Tiempo, en segundos, entre barridos                                                         | 30             |
| `REFUND_RECONCILIATION_SWEEPER_MAX_ATTEMPTS` | Intentos antes de que el sweeper retenga un registro y genere una alerta                    | 10             |

## Qué debes hacer

***

El plugin gestiona los reintentos y la conciliación por ti. Los ajustes predeterminados sirven para la mayoría de los despliegues. Para mantener las operaciones sanas:

* Usa IDs únicos y rastreables para tus transacciones y cuentas.
* Monitorea la entrega de eventos y el estado de las transacciones.
* Contacta a Lerian para obtener visibilidad de los jobs o soporte de repetición de eventos.
