> ## 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 funciona a geração de relatórios

> O caminho que um relatório do Reporter percorre: a requisição, a extração das fontes de dados configuradas, a renderização, o arquivo no armazenamento de objetos e o download.

A geração de relatórios tem duas metades. O **manager** aceita a sua requisição, verifica-a e a passa para uma fila. O **worker** extrai os dados, renderiza o template e grava o arquivo. O Reporter responde à sua requisição assim que a primeira metade termina, então você faz polling ou escuta a segunda.

As duas metades são entregues em um único binário. Um deploy executa a superfície da API, a superfície do worker, ou ambas, e uma fila carrega o trabalho entre elas.

## O caminho de ponta a ponta

***

**1. Requisição**

Você chama [Criar um relatório](https://docs.lerian.studio/pt/reference/products/reporter/create-report.md) com um identificador de template e os filtros de linha que quiser. O Reporter valida a requisição e armazena o relatório como `Processing`.

**2. Extração**

O worker consulta cada fonte de dados que o template nomeia, uma seção por fonte de dados, e mantém apenas os campos no mapa de campos do template.

**3. Renderização**

As linhas extraídas se tornam o contexto do template. O Reporter renderiza o documento no formato de saída do template.

**4. Armazenamento**

O Reporter grava o arquivo renderizado no bucket de armazenamento de objetos configurado e registra o status final do relatório.

**5. Download**

Você chama [Baixar um relatório](https://docs.lerian.studio/pt/reference/products/reporter/download-report.md) e recebe o arquivo com o tipo de conteúdo e o nome dele.

## O que o manager faz

***

O manager é responsável por tudo o que acontece antes da fila. Ele executa estas verificações em ordem, e qualquer uma delas pode rejeitar a requisição imediatamente.

**Ele aplica idempotência.** Envie um header `X-Idempotency` para nomear a requisição você mesmo. Sem um, o Reporter deriva a chave a partir do corpo da requisição. O Reporter rejeita a repetição de uma requisição em andamento como duplicata. A repetição de uma requisição concluída retorna o relatório original e marca a resposta com `X-Idempotency-Replayed: true`. A janela é de 30 segundos.

**Ele resolve o template.** O Reporter carrega o mapa de campos, o formato de saída e a descrição que pertencem ao identificador do template. Um identificador desconhecido falha aqui.

**Ele valida os seus filtros.** Cada campo em que você filtra é verificado contra o schema da fonte de dados dele. Um nome de campo incorreto faz a requisição falhar em vez de gerar um relatório vazio.

**Ele resolve os parâmetros e a instituição.** O Reporter aplica os padrões que o template declara para seus parâmetros. Ele recusa um parâmetro obrigatório ausente. Em seguida, resolve a instituição para a qual o relatório lê. Um tenant com várias instituições deve nomear uma, ou `all`.

**Ele registra o relatório e enfileira o trabalho.** O relatório é armazenado como `Processing`.

O relatório mantém sua própria cópia do formato de saída e da descrição do template. Esse snapshot torna um relatório antigo reproduzível depois que o template muda.

## O que o worker faz

***

O worker consome o comando e é responsável pelo restante do caminho.

Uma fila pode entregar o mesmo comando duas vezes. Por isso, o worker lê o relatório antes de iniciar uma execução. Se o relatório já chegou a um status terminal, o worker o deixa como está e não o gera novamente.

Em seguida, ele carrega o arquivo de template do armazenamento de objetos e extrai os dados. Cada fonte de dados é uma seção. Uma seção que falha não interrompe as outras. O worker reúne o resultado de cada seção e apenas então decide o status do relatório.

Quando todas as seções falham, o Reporter registra a falha e pula a renderização. Nenhum arquivo enganoso chega ao bucket.

A etapa de renderização transforma as seções que restaram no documento. Quando o formato de saída é PDF, o Reporter renderiza HTML primeiro e o converte por meio de um pool de navegadores headless. Os bytes finalizados vão para o bucket, o status final vai para o registro do relatório, e um evento final vai para o event stream.

## Estados do relatório

***

Um relatório que você cria por `POST /v1/reports` atinge um de quatro estados.

| Estado | Significado | Artefato |
| - | - | - |
| `Processing` | Aceito e enfileirado, ou em extração | Ainda não |
| `Finished` | Nenhuma seção falhou | Pronto para download |
| `Partial` | Algumas seções falharam, outras retornaram dados | Incompleto |
| `Error` | Todas as seções falharam, a requisição nunca chegou ao worker, ou o worker parou de enviar heartbeats | Nenhum |

Uma remessa regulatória nunca termina em `Partial`. Ela termina em `Draft` ou `Error`, e a aprovação transforma um `Draft` em `Final`.

Faça polling em [Verificar status do relatório](https://docs.lerian.studio/pt/reference/products/reporter/check-report-status.md) ou consuma o evento final. Um relatório `Partial` carrega um resultado por seção nos seus metadados, que nomeia as fontes de dados que não responderam. Corrija essas fontes de dados e gere o relatório novamente. [Baixar um relatório](https://docs.lerian.studio/pt/reference/products/reporter/download-report.md) entrega o artefato de um relatório `Finished` ou `Final`, e de um `Draft` sem campo obrigatório em branco.

## Limites de tempo no caminho

***

Cada etapa carrega seu próprio limite, e um operador os define por deploy.

| Limite | Padrão | Aplica-se a |
| - | - | - |
| Janela de idempotência | 30 segundos | Detecção de repetição na requisição |
| Tempo limite de extração | 300 segundos | Uma extração de uma fonte de dados |
| Tempo limite de conversão de PDF | 90 segundos | Uma conversão de HTML para PDF |
| Pool de workers de PDF | 2 | Conversões simultâneas por worker |

Limites de volume delimitam cada extração de uma fonte de dados: 20 tabelas, 50 campos por tabela, e 256 MiB de resultado extraído. Cada tabela retorna no máximo 150.000 linhas, e cada consulta expira após 300 segundos. Veja [Variáveis de ambiente](https://docs.lerian.studio/pt/products/reporter/reporter-environment-variables.md) para as configurações por trás de cada um.

## Onde os prazos se encaixam

***

Um prazo é uma data de vencimento com uma regra de recorrência, e pode nomear o template que o satisfaz. Ele fica ao lado do caminho de geração, e não sobre ele.

Um prazo inicia um relatório apenas quando um operador ativa o gatilho de prazos e nomeia a categoria do template em `DEADLINE_TRIGGER_GENERATE_CATEGORIES`. Nos demais casos, você gera o relatório pelo caminho de requisição acima e depois marca o prazo como entregue.

O Reporter recalcula um prazo na leitura. Uma obrigação recorrente que carrega uma marca de entrega avança para sua próxima data de vencimento na primeira leitura depois que a data atual passa. Esse avanço limpa a marca. A operação de notificações retorna os prazos dentro da janela de alerta deles quando você os solicita. Veja [Gerenciando prazos](https://docs.lerian.studio/pt/products/reporter/managing-deadlines.md).

## Armazenamento e download

***

Os arquivos renderizados vivem em um bucket compatível com S3, sob o prefixo `reports/`. O Reporter armazena cada arquivo sob o identificador do template e o nomeia a partir do relatório, então os arquivos ficam agrupados pelo template que os produziu.

O download retorna os bytes com o tipo de conteúdo do formato de saída e um nome de arquivo construído a partir do identificador do relatório. O download funciona depois que o template é excluído, porque o relatório mantém seu próprio snapshot de formato.

Um relatório é criado uma vez e depois retido. Os filtros dele, o status dele e o arquivo dele descrevem exatamente a requisição que os produziu.

> [!NOTE]
>
> O Reporter mantém os arquivos renderizados no bucket. Defina a retenção com uma política de ciclo de vida no próprio bucket.

## Próximos passos

***

> [card] [Motor de templates do Reporter](https://docs.lerian.studio/pt/products/reporter/reporter-template-engine.md)
>
> O mapa de campos, o contexto de dados e os dois tipos de filtro.

> [card] [Usando o Reporter](https://docs.lerian.studio/pt/products/reporter/using-reporter.md)
>
> Faça upload de um template, gere um relatório e baixe o resultado.

> [card] [Gerenciando prazos](https://docs.lerian.studio/pt/products/reporter/managing-deadlines.md)
>
> Acompanhe uma obrigação regulatória e marque-a como entregue.

> [card] [Arquitetura do Reporter](https://docs.lerian.studio/pt/products/reporter/reporter-architecture.md)
>
> Um binário, duas superfícies e os armazenamentos que elas compartilham.


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