- Nao usar inativacaoSituacao como data fim quando situacao indica ativo
- Evita que consultores com "Atividade Continua" tenham 0 anos consecutivos
- Corrigir alinhamento dos headers nas tabelas de criterios (Header.css)
- Substituir tooltips por modais clicaveis nos score items
- Adicionar PontuacaoModal com formula de calculo detalhada
- Criar ScoreItemClickable para itens de pontuacao clicaveis
- Exibir breakdown: base, tempo, bonus, teto e total
- Estilar formula-box com fonte monospace para clareza
- Manter consistencia visual com outros modais do sistema
- Criar componente ItemDetalheModal para exibir detalhes de atuações
- Adicionar modais clicáveis em: vínculos, coordenações, premiações,
avaliações, inscrições e participações
- Melhorar healthcheck do Oracle no docker-compose
- Adicionar retry com backoff na conexão Oracle
- Padronizar tamanho dos badges de tipos de atuação
- Remover carregamento de 350k registros em memória no startup
- Refatorar endpoints para buscar dados direto do Oracle:
- ranking_paginado
- buscar_por_nome
- ranking_estatisticas
- obter_posicao_ranking
- Adicionar healthcheck leve no Oracle com start_period de 60s
- Corrigir start-ngrok.sh para subir todos os containers
- Adicionar domínio ngrok-free.dev no vite.config.js
- Adiciona campo tipos_atuacao ao schema e extração no mapper
- Exibe tipos de atuação (Coordenador, Consultor, Avaliador, etc.)
na seção expandida do card, acima de Selos e Reconhecimentos
- Inclui estilos visuais distintos para cada tipo de atuação
- Melhorias no Header e SugerirConsultores
- Adicionar seleção múltipla de consultores entre diferentes buscas
- Criar endpoint POST /api/v1/equipe/pdf para gerar documento da equipe
- Implementar template HTML profissional para PDF da equipe
- Exibir estatísticas: total, ativos, coordenadores, premiados, IES
- Persistir seleção ao trocar termos de busca (equipe interdisciplinar)
- Mostrar temas combinados na barra flutuante e no PDF
- Corrigir renderização de emojis no PDF (substituir por texto)
- Melhorar contraste da cor do ranking no frontend (roxo → ciano)
- Corrigir validação Pydantic para ignorar campos extras do .env
- Novo endpoint GET /api/v1/consultores/sugerir com busca por tema
- Busca inteligente em areas de avaliacao, conhecimento e pesquisa
- Filtro por consultores ativos e area de avaliacao especifica
- Endpoint GET /api/v1/consultores/areas-avaliacao com lista de areas
- Novo componente SugerirConsultores no frontend
- Botao 'Sugerir por Tema' integrado na interface principal
- Score de match baseado em relevancia do tema e experiencia
- Adicionar ordenação das atuações por data (mais recente primeiro)
- Ajustar grid de dados pessoais para campo nome ocupar 2 colunas
- Reduzir minmax do grid de 220px para 150px para melhor distribuição
Backend:
- Reescrever criterios_pontuacao.py com valores corretos do PDF
- Adicionar Blocos B e E ao enum
- Corrigir Base/Teto: AVAL_COMIS_GP (40), COORD_COMIS_PREMIO (40),
COORD_COMIS_GP (50), PROJ teto (30)
- Orientacoes/Bancas agora sao selos (Base=0, Teto=0)
- CONS_FALECIDO agora pontua tempo (5 pts/ano)
- Remover codigos obsoletos (PREMIACAO, MENCAO, BOL_BPQ_SUP/INT)
- Usar apenas BOL_BPQ_NIVEL, PREMIACAO_*_AUTOR, MENCAO_AUTOR
- Atualizar ranking_store.py e validar_ranking.py
Frontend:
- Atualizar ConsultorCard e CompararModal com codigos corretos
- Adicionar logo CAPES em PNG com transparencia
- Ajustar espacamento do header e tamanho das fontes
- Mapear pasta public no docker-compose
- Adicionar critérios diferenciados por papel (autor vs orientador)
- Implementar INSC_INST_AUTOR, PREMIACAO_GP_AUTOR, PREMIACAO_AUTOR, MENCAO_AUTOR
- Adicionar bônus de recorrência para inscrições, eventos e projetos
- Corrigir lógica de bônus de consultoria (continuidade e retorno)
- Ajustar extração de selos no frontend para novos códigos
- Adicionar BOL_BPQ_NIVEL para bolsas sem nível especificado
- Refinar cálculo de pontuação com novos tetos e multiplicadores
Corrige bug onde consultores ativos com vínculos sobrepostos tinham
anos_consecutivos zerados incorretamente.
Problema: Ao mesclar períodos sobrepostos (ex: UP encerrado + UTFPR ativo),
o período mesclado era marcado como encerrado, resultando em
anos_consecutivos = 0 mesmo para consultores ativos.
Solução: Período mesclado é ativo se QUALQUER um dos períodos originais
for ativo (lógica OR em vez de considerar apenas o primeiro período).
Impacto:
- Consultores ativos com múltiplos vínculos agora recebem corretamente
bônus de continuidade (até +20 pontos)
- Exemplo: Valdir Fernandes (#1) tinha 0 anos consecutivos, agora tem 10
Otimizações adicionais:
- Aumenta batch_size de 5.000 para 10.000 consultores
- Reduz tempo de processamento de ~60min para ~25min (58% mais rápido)
- Reduz requisições ao Elasticsearch pela metade
Arquivos alterados:
- backend/src/domain/value_objects/periodo.py: lógica de mesclagem corrigida
- backend/src/application/jobs/processar_ranking.py: batch_size otimizado
Testado com 350.222 consultores em 25min 35s
- Expandir RawDataModal com mais funcionalidades de visualização
- Ajustar template HTML da ficha do consultor
- Adicionar configuração MCP do projeto
- Atualizar gitignore para ignorar arquivos locais
- Novo endpoint GET /api/v1/consultor/{id}/pdf para download
- Serviço PDFService usando WeasyPrint para geração
- Template HTML com layout padrão governo federal
- Botão de exportar PDF no card e modal de dados brutos
- Novo endpoint GET /api/v1/ranking/posicao/{id_pessoa}
- Retorna posição, pontuação por bloco e total de consultores
- Para integração com frontend do ATUACAPES
- Novo endpoint GET /api/v1/consultor/{id}/raw para buscar documento completo do ES
- Novo componente RawDataModal com formatação inteligente de campos
- Botão de acesso rápido no ConsultorCard (ícone ⋮)
- Melhorias de estilo no Header e ConsultorCard
- Adicionar entidades e DTOs para vínculos de consultoria (IES, período, situação)
- Extrair vínculos do Elasticsearch com datas e informações da IES
- Exibir vínculos no card do consultor com sigla e nome completo da IES
- Ordenar todas as listas do detalhe por data/ano decrescente (mais recente primeiro)
- Ajustar caixa do rank para crescer automaticamente com números grandes
- Reduzir fonte proporcionalmente para posições com 4-7 dígitos
- Exibir STATUS com valor padrão '-' quando consultoria não existe
- Ajustar responsividade para telas menores
- Adiciona campo nome_comissao em AvaliacaoComissao (entity, DTO, schema)
- Extrai nome da comissão do Elasticsearch no repository
- Propaga campo pelo job de processamento e use case
- Exibe nome da comissão no ConsultorCard (frontend)
- Remove link do manual PDF do footer
- Corrigir lógica de extração de selos para usar códigos exatos
- Filtro agora exige todos os selos selecionados (AND em vez de OR)
- Botão Aplicar volta: seleção não dispara filtro automaticamente
- Layout dos controles unificado em barra com fundo
- Backend: extrair selos de detalhes e filtrar por eles
- API: endpoint /ranking/selos e parâmetro selos em /ranking/paginado
- Frontend: componente FiltroSelos com dropdown e seleção múltipla
- Selos disponíveis: funções, premiações, orientações
- Verifica se bolsas, premiações e orientações do DB batem com ES
- Valida top 50 consultores por padrão
- Integra validação de selos no fluxo principal (passo 4/5)
- Cria script validar_ranking.py para verificar integridade do ranking
- Valida critérios do código vs especificação oficial
- Verifica ordenação, posições duplicadas e gaps
- Recalcula pontuação de amostra e compara com banco
- Corrige CONS_FALECIDO para não pontuar por tempo (spec oficial)
- Adiciona ícone de link externo antes do nome do consultor
- Link abre perfil no ATUACAPES em nova aba (/perfil/{id_pessoa})
- Variável de ambiente HOST_ATUACAPES configurável
- Adiciona retry automático (10 tentativas) ao carregar ranking
- Corrige espaçamento da seção de selos
- Atualiza arquivos .env.example
- Corrigir conexão Oracle com teste antes do pool
- Carregar ranking em batches de 10k (limite de 10k por query)
- Aumentar timeout de carregamento para 5 minutos
- Adicionar depends_on para Oracle no docker-compose
- Padronizar nome do container Oracle para oracle18c
Correções de segurança:
- SQL Injection: usar prepared statements em ranking_repository.py
- Validação de entrada para parâmetros page/size
Correções de bugs:
- Bônus de continuidade: 15→20 pts para 8+ anos (conforme especificação)
- Memory leak: limpar _consultores após processamento do ranking
Melhorias de robustez:
- Substituir bare except por exceções específicas
- Threading.Lock para padrão singleton thread-safe
- Pool Oracle com configuração otimizada (timeout/getmode)
- ES client com timeouts diferenciados e verificação is_closed
- Logging para tipos de coordenação desconhecidos
Correções frontend:
- Polling com timeout máximo de 5 minutos
- useEffect cleanup para setTimeout
- React.memo e useMemo para otimização de performance
- Corrigir extração de orientações (tipo "Orientação de Discentes")
- Selos de premiação agora usam campo papel (Autor/Orientador/Coorientador)
- Adicionar ícones visuais aos selos (emojis Unicode)
- Adicionar estilos CSS para novos tipos de selos
- Melhorias no Oracle client e ranking repository
- Mover logica de routes.py para RankingMapper na camada de aplicacao
- Consolidar funcoes mesclar_periodos e anos_completos_periodos em periodo.py
- Extrair RankingCache para modulo separado em infrastructure/cache
- Substituir todos os print() por logging adequado
- Corrigir exception handlers genericos para tipos especificos
- Remover classe Atuacao e atributo atuacoes_raw nao utilizados
- Documentar status dos scripts utilitarios