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

# Eventos de Fetcher

> Consulta los eventos terminales de job que emite Lerian Fetcher — job.completed y job.failed — con estructura de payload y semántica de entrega.

El worker de Fetcher emite un evento terminal por cada job de extracción: un **`job.completed`** o un **`job.failed`**, exactamente uno por desenlace de job. Estas notificaciones son un contrato obligatorio del producto — el worker se niega a arrancar con el streaming deshabilitado en lugar de tragárselas silenciosamente.

Los eventos viajan en el [sobre CloudEvents](/es/reference/events/overview) compartido, publicados sobre **RabbitMQ**: cada evento se enruta al exchange nombrado por `RABBITMQ_JOB_EVENTS_EXCHANGE` con la clave del evento como routing key AMQP (`job.completed`, `job.failed`). Ambos eventos están **respaldados por outbox**: la fila del outbox se escribe de forma durable y un relay la publica, reintentando durante las caídas del broker; un reparador reemite los eventos terminales que nunca llegaron al broker. La entrega es at-least-once — deduplica por `ce-id`, que es determinista por desenlace de job: `fetcher.job.<status>.<jobID>`, así que cada reemisión del mismo hecho lleva el mismo id. El `ce-subject` es el id del job; los despliegues single-tenant estampan `ce-tenantid` como `single-tenant`.

A diferencia de la mayoría de los payloads de Lerian, los eventos de job de Fetcher usan claves en **camelCase** — reflejan la superficie REST de Fetcher.

## Eventos de job

| Evento (`ce-type`)            | Se dispara cuando                       | Payload principal                                                                                                                                                                                                  |
| ----------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `studio.lerian.job.completed` | Un job de extracción termina con éxito. | `jobId`, `status` (`completed`), `metadata` (incluye el `source` solicitante), `result`? (`path`?, `sizeBytes`?, `rowCount`?, `format`?, `hmac`?, `integrity`?, `protection`?), `executionTimeMs`?, `completedAt`? |
| `studio.lerian.job.failed`    | Un job de extracción falla.             | `jobId`, `status` (`failed`), `metadata` (incluye el `source` solicitante y un objeto `error` con los detalles del fallo), `executionTimeMs`?, `completedAt`?                                                      |

El bloque `result` describe el artefacto producido: dónde se escribió, su tamaño y conteo de filas, el formato de salida y — cuando la protección de resultados está habilitada — los descriptores de integridad (HMAC) y protección que un consumidor usa para verificar el artefacto antes de confiar en él.

## Eventos consumidos

Fetcher no consume eventos de la plataforma. Sus solicitudes de job llegan por una cola de trabajo RabbitMQ interna desde los productos que lo embeben (como Matcher), que no forma parte del contrato público de eventos.
