> ## 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 do Fetcher

> Consulte os eventos terminais de job que o Lerian Fetcher emite — job.completed e job.failed — com estrutura de payload e semântica de entrega.

O worker do Fetcher emite um evento terminal para cada job de extração: um **`job.completed`** ou um **`job.failed`**, exatamente um por desfecho de job. Essas notificações são um contrato obrigatório do produto — o worker se recusa a subir com o streaming desabilitado, em vez de engoli-las silenciosamente.

Os eventos trafegam no [envelope CloudEvents](/pt/reference/events/overview) compartilhado, publicados sobre **RabbitMQ**: cada evento roteia ao exchange nomeado por `RABBITMQ_JOB_EVENTS_EXCHANGE` com a chave do evento como routing key AMQP (`job.completed`, `job.failed`). Os dois eventos são **respaldados por outbox**: a linha do outbox é gravada de forma durável e um relay a publica, com retentativas durante quedas do broker; um reparador reemite eventos terminais que nunca chegaram ao broker. A entrega é at-least-once — deduplique por `ce-id`, que é determinístico por desfecho de job: `fetcher.job.<status>.<jobID>`, então toda reemissão do mesmo fato carrega o mesmo id. O `ce-subject` é o id do job; deployments single-tenant estampam `ce-tenantid` como `single-tenant`.

Diferente da maioria dos payloads Lerian, os eventos de job do Fetcher usam chaves em **camelCase** — elas espelham a superfície REST do Fetcher.

## Eventos de job

| Evento (`ce-type`)            | Dispara quando                          | Payload principal                                                                                                                                                                                                 |
| ----------------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `studio.lerian.job.completed` | Um job de extração termina com sucesso. | `jobId`, `status` (`completed`), `metadata` (inclui o `source` requisitante), `result`? (`path`?, `sizeBytes`?, `rowCount`?, `format`?, `hmac`?, `integrity`?, `protection`?), `executionTimeMs`?, `completedAt`? |
| `studio.lerian.job.failed`    | Um job de extração falha.               | `jobId`, `status` (`failed`), `metadata` (inclui o `source` requisitante e um objeto `error` com os detalhes da falha), `executionTimeMs`?, `completedAt`?                                                        |

O bloco `result` descreve o artefato produzido: onde foi gravado, seu tamanho e contagem de linhas, o formato de saída e — quando a proteção de resultado está habilitada — os descritores de integridade (HMAC) e proteção que um consumidor usa para verificar o artefato antes de confiar nele.

## Eventos consumidos

O Fetcher não consome eventos da plataforma. Suas requisições de job chegam por uma fila de trabalho RabbitMQ interna a partir dos produtos que o embarcam (como o Matcher), que não faz parte do contrato público de eventos.
