Pular para o conteúdo principal
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 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 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. 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 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 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. 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 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.

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


Motor de templates do Reporter

O mapa de campos, o contexto de dados e os dois tipos de filtro.

Usando o Reporter

Faça upload de um template, gere um relatório e baixe o resultado.

Gerenciando prazos

Acompanhe uma obrigação regulatória e marque-a como entregue.

Arquitetura do Reporter

Um binário, duas superfícies e os armazenamentos que elas compartilham.