🎯 Descrição
Implementar um pipeline de “Análise Dupla” para o enriquecimento de dados da IA.
O sistema deve analisar duas fontes de texto de forma independente para cada menção:
- Fonte PDF: (Script
enrichment_pdf.js) Analisa osource_url(PDF) usandopdf-parse. - Fonte TXT: (Novo script
enrichment_txt.js) Analisa otxt_urlou oexcerpt.
Os resultados de cada análise serão salvos em colunas separadas, permitindo 100% de cobertura de análise e validação cruzada dos dados.
✅ Objetivo
Qual problema essa feature resolve?
- O pipeline atual, focado apenas em PDF (
enrichment_pdf.js), ignora menções onde o PDF não está disponível, está corrompido, ou opdf-parsefalha. Isso cria “buracos” no banco de dados. - Não temos uma forma de “plano B” (fallback) para analisar os dados de texto (o
.txtoriginal ou oexcerpt) que ocollector.jssalva.
Por que ela é importante para o projeto?
- Cobertura de 100%: Garante que todas as menções coletadas (seja PDF ou TXT) passem por uma análise de IA, maximizando a quantidade de dados extraídos.
- Validação de Dados: Ao ter duas análises (
gemini_analysisegemini_analysis_txt), podemos comparar os resultados, validar a precisão da IA e escolher a melhor fonte de dados para o frontend. - Robustez: O pipeline se torna mais resiliente, pois uma falha na análise do PDF não impede mais a análise do TXT.
📝 Detalhes da Implementação
Se já tiver uma ideia de como implementar, descreva aqui.
- Banco de Dados: Adicionar duas novas colunas à tabela
mentionsno Supabase:gemini_analysis_txt(do tipoJSONB)extracted_value_txt(do tipoNUMERIC(15, 2))
- Refatoração: O script
enrichment_pdf.jspermanece o mesmo, focado emsource_urle salvando emgemini_analysis. - Novo Script: Criar o
enrichment_txt.js, que será uma cópia doenrichment_pdf.jscom as seguintes modificações:- Dependências: Remover
pdf-parse. Mantertiktoken(para chunking). - Fonte de Dados: Modificar a lógica de download para baixar o
txt_url(se existir) ou usar oexcerpt(como fallback). - Lógica de Chunking: Manter a lógica de
splitTextIntoChunksByToken, pois o.txtouexcerptpode ser maior que o limite de 1 milhão de tokens. - Query SQL: Modificar a query principal para buscar menções onde
gemini_analysis_txt IS NULL(para rodar em todos os municípios, independentemente do sucesso do PDF) e onde(txt_url IS NOT NULL OR excerpt IS NOT NULL). - Destino (Salvar): O script deve salvar seus resultados nas novas colunas (
gemini_analysis_txteextracted_value_txt).
- Dependências: Remover
- Novo Script: Criar o
- Fluxo de Trabalho: O enriquecimento total será feito em duas fases (separadas ou paralelas):
node src/scripts/enrichment_pdf.js [startId] [endId]node src/scripts/enrichment_txt.js [startId] [endId]
📊 Critérios de Aceitação
Quais pontos devem estar presentes para considerar a feature concluída?
- As novas colunas
gemini_analysis_txteextracted_value_txtexistem no banco de dados. - O novo script
enrichment_txt.jsexiste e implementa a mesma arquitetura (Roteador de Chaves,tiktoken,chunking, processamento por ID). - O
enrichment_txt.jsbusca corretamente as fontes de texto (txt_urlouexcerpt). - O
enrichment_txt.jssalva com sucesso os resultados nas novas colunasgemini_analysis_txteextracted_value_txt. - O script
enrichment_pdf.jspermanece funcional e salva os resultados nas colunasgemini_analysisoriginais.