🎯 Objetivo / Motivação
Atualizar a tabela mentions do banco de dados, preenchendo a coluna txt_url para os registros onde ela está atualmente NULL. O script (fill_missing_txt_urls.js) buscará na API do Querido Diário o txt_url correspondente a cada diário já coletado.
Esta tarefa é necessária para maximizar a qualidade dos dados usados pelo script de enriquecimento (enrichment.js). O conteúdo completo do arquivo .txt geralmente fornece mais contexto do que o excerpt, aumentando a precisão da extração de valores financeiros pela IA. Resolve o problema de termos apenas excerpts para muitos registros.
📋 Escopo da Tarefa e Entregáveis
- Modificar Tabela
mentions: Garantir que a colunatxt_url(TEXT, nullable) exista. - Criar Script
fill_missing_txt_urls.js: Desenvolver o script na pastascripts/. - Lógica de Busca: Implementar a query
SELECT id, municipality_ibge_code, publication_date, source_url FROM mentions WHERE txt_url IS NULL. - Consulta à API Querido Diário: Para cada menção, fazer uma requisição
GETà API buscando pelomunicipality_ibge_codee apublication_dateexata. - Identificação do Diário: No resultado da API, encontrar o
gazettecujourl(link do PDF) corresponda aosource_urlda menção no banco. - Extração e Atualização: Extrair o
txt_urldogazettecorrespondente (se existir) e executar uma queryUPDATE mentions SET txt_url = $1 WHERE id = $2para salvar o valor encontrado (ouNULLse não foi encontrado). - Controle de Velocidade: Implementar um
delayentre as requisições à API do Querido Diário. - Adicionar Comando
npm: Adicionar o scriptdb:fill-txtaopackage.json.
✅ Critérios de Aceitação
- O script
fill_missing_txt_urls.jsexiste na pastascripts/e executa sem erros fatais. - O script identifica corretamente as menções na tabela
mentionscomtxt_url IS NULL. - As consultas à API do Querido Diário são feitas corretamente para a data e município específicos.
- O script consegue encontrar o
gazettecorrespondente na resposta da API usando osource_url. - A coluna
txt_urlna tabelamentionsé atualizada com a URL encontrada ou permaneceNULL(mas a linha não é mais selecionada pelo script em execuções futuras se a atualização ocorrer, mesmo que paraNULL). - O script processa todas as menções pendentes e termina.
- O comando
npm run db:fill-txtexecuta o script corretamente.
🔗 Dependências (Opcional)
- Depende da existência da tabela
mentionscom as colunasmunicipality_ibge_code,publication_date, esource_urlpopuladas. - Depende da existência da coluna
txt_urlna tabelamentions. - A Issue de Enriquecimento (
enrichment.js) pode se beneficiar desta, mas não depende estritamente (possui fallback).
💡 Sugestão de Implementação (Opcional)
- Utilizar
axiospara fazer as chamadas à API do Querido Diário. - Otimizar a busca na API consultando apenas pela data específica (
published_sinceepublished_untiliguais). - Usar o método
find()do JavaScript no arraygazettesretornado pela API para encontrar ogazettecorrespondente àsource_url. - Garantir que o
UPDATEno banco seja feito mesmo setxt_urlnão for encontrado, para evitar reprocessamento desnecessário (talvez atualizando paraNULLexplicitamente ou adicionando uma colunatxt_url_checked_at). Correção: O script atualizado já faz isso ao definirtxt_url = $1onde$1pode sernull. - Executar o script usando
screendevido à potencial longa duração (horas, dependendo do número de menções comtxt_urlnulo).
Checklist do Autor
- Verifiquei se não há uma tarefa duplicada já aberta.
- O título da tarefa é claro e conciso.
- Descrevi o objetivo e a motivação por trás da tarefa.
- Os entregáveis e os critérios de aceitação estão bem definidos.
- Associei a tarefa a um projeto (Project) ou marco (Milestone), se aplicável.