Commit Graph

107 Commits

Author SHA1 Message Date
Frederico Castro
d33695ed65 feat(frontend): colorir selos ao passar o mouse por cima 2025-12-22 20:29:10 -03:00
Frederico Castro
b585272701 fix(backend): corrigir calculo de anos consecutivos para consultores ativos
- 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)
2025-12-22 06:25:47 -03:00
Frederico Castro
46ffe72fef fix(frontend): alinhar stats e adicionar modais de pontuacao clicaveis 2025-12-22 05:38:05 -03:00
Frederico Castro
06f241aea0 fix(frontend): adicionar cursor pointer e click nos totais de cada bloco 2025-12-22 04:31:43 -03:00
Frederico Castro
e11c80f6ca fix(frontend): aplicar cursor pointer nos score items clicaveis 2025-12-22 04:29:12 -03:00
Frederico Castro
89f5a8484f feat(frontend): adicionar modais de calculo nas caixas de pontuacao
- 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
2025-12-22 04:27:52 -03:00
Frederico Castro
32b404d1a8 feat(frontend): adicionar modais de detalhes para itens das listas
- 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
2025-12-22 04:17:12 -03:00
Frederico Castro
061a3e8768 feat(frontend): melhorias no ConsultorCard
- Adicionar função corrigir_encoding para fix de caracteres Latin1
- Melhorias visuais no CSS do card de consultor
2025-12-21 22:23:16 -03:00
Frederico Castro
7d73510101 perf(ranking): otimizar paginação usando Oracle direto
- 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
2025-12-21 22:22:58 -03:00
Frederico Castro
d4aa75ca0b feat(ranking): adicionar badges de tipos de atuação nos cards
- 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
2025-12-21 05:36:26 -03:00
Frederico Castro
bb36961b4c feat(equipe): implementar montagem de equipe interdisciplinar com PDF
- 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
2025-12-20 18:30:37 -03:00
Frederico Castro
81acf1895f fix: exigir match de tema na busca e corrigir verificacao de status ativo 2025-12-20 12:27:29 -03:00
Frederico Castro
342e52880e fix: corrigir filtro de ativos, remover count de areas e navegacao ao clicar 2025-12-20 12:22:45 -03:00
Frederico Castro
45ab7412fe feat: adicionar sistema de sugestao de consultores por tema
- 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
2025-12-20 07:35:03 -03:00
Frederico Castro
f7557831eb feat(modal): ordenar atuações por data e ajustar layout do nome
- 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
2025-12-20 07:20:57 -03:00
Frederico Castro
26492c880c fix: alinhar criterios 100% com documento PDF oficial
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
2025-12-20 06:53:45 -03:00
Frederico Castro
7ba2c2be9d feat(ui): atualizar painel de criterios com todos os blocos do documento V1
- Reorganizar layout em 3 linhas com 5 blocos (A, B, C, D, E)
- Bloco A: Coordenacao CAPES (CA, CAJ, CAJ_MP, CAM)
- Bloco B: Consultoria (ATIVO, HIST, FALECIDO)
- Bloco C: Premiacoes, Avaliacoes, Inscricoes, Orientacoes, Bancas
- Bloco D: Indicadores (BOL_BPQ, PROJ, EVENTO, IDIOMA, TITULACAO)
- Bloco E: Coord. PPG (reservado para V2)
- Atualizar valores Base/Teto conforme documento oficial
- Adicionar logo CAPES no header
- Melhorar alinhamento de colunas nas tabelas
- Ajustar tamanhos de fonte para melhor legibilidade
2025-12-20 06:02:35 -03:00
Frederico Castro
fe763d83c6 Merge branch 'feat/criterios-novos-planilha' into develop
Implementa novos critérios de pontuação baseados na planilha atualizada
2025-12-19 22:30:36 -03:00
Frederico Castro
9457c18cbd feat: implementar novos critérios de pontuação da planilha atualizada
- 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
2025-12-19 22:30:21 -03:00
Frederico Castro
6297d135ec fix: corrigir cálculo de anos consecutivos em períodos sobrepostos
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
2025-12-19 14:14:57 -03:00
Frederico Castro
cbdeddb5d8 feat(ui): expandir modal de dados e melhorar template PDF
- 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
2025-12-19 11:59:41 -03:00
Frederico Castro
47f0a80f3f feat(pdf): adicionar exportação de ficha do consultor em PDF
- 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
2025-12-18 22:43:42 -03:00
Frederico Castro
9d93e42a12 fix(backend): deduplicar vínculos de consultoria com mesmo ID
Dados do ATUACAPES podem conter registros duplicados de consultoria
com mesmo ID. Mantém o registro ativo (sem fim) quando há duplicatas.
2025-12-18 12:32:14 -03:00
Frederico Castro
7dc1284d0b feat(ui): exibir coordenação CAPES no card em vez de status consultoria
Substitui exibição de CONS_ATIVO/HIST pela coordenação CAPES mais
relevante (CA > CAJ > CAJ_MP > CAM), priorizando coordenações ativas.
2025-12-18 12:27:39 -03:00
Frederico Castro
b8b97e2f88 style(selos): aplicar estilo monocromático nos selos da listagem
- Selos compactos agora usam tons de slate/cinza
- Emojis com filtro grayscale para visual uniforme
- Selos completos (internos) mantêm cores originais
2025-12-18 06:37:31 -03:00
Frederico Castro
ffdd4cad2c feat(api): adicionar endpoint para consulta de posição individual no ranking
- 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
2025-12-18 05:50:11 -03:00
Frederico Castro
c388509acb feat(raw-data): adicionar visualização de dados brutos 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
2025-12-17 23:28:11 -03:00
Frederico Castro
99ce6e30d8 feat(vinculos): adicionar vínculos de consultoria com IES e ordenação cronológica
- 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)
2025-12-17 20:48:50 -03:00
Frederico Castro
678be6170f fix(ui): corrigir exibição de posição e status no ranking
- 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
2025-12-17 17:22:24 -03:00
Frederico Castro
15570be9c9 feat(avaliacao): adicionar nome da comissão nas avaliações
- 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
2025-12-17 14:15:43 -03:00
Frederico Castro
0f61b55944 fix(comparacao): corrigir alinhamento simétrico no modal de comparação
Ajusta layout para que valores absolutos fiquem próximos ao centro
e diferenças nas extremidades de cada lado.
2025-12-15 13:24:04 -03:00
Frederico Castro
6034289403 feat(comparacao): exibir selos de cada consultor no modal de comparacao 2025-12-15 13:13:47 -03:00
Frederico Castro
3254374486 fix(filtros): corrigir extração de selos e melhorar UX do filtro
- 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
2025-12-15 13:04:06 -03:00
Frederico Castro
c294d4cc77 feat(filtros): adicionar filtro multi-select por selos no ranking
- 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
2025-12-15 12:32:24 -03:00
Frederico Castro
d215e9ac76 feat(backend): adicionar validação de selos ao script
- 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)
2025-12-15 12:21:54 -03:00
Frederico Castro
e785b9fc62 feat(backend): adicionar script de validação do ranking
- 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)
2025-12-15 12:16:54 -03:00
Frederico Castro
99e59e2100 docs: corrigir critérios de pontuação no README
- CONS_FALECIDO: não pontua por tempo
- MENCAO: teto corrigido de 20 para 30
- BOL_BPQ_INTERMEDIARIO: base=50, teto=100
- Avaliação/Coordenação Comissão: removido bônus recorrência inexistente
- Orientações: adicionados tetos (100, 50, 25, 35, 25, 15)
- Bancas: adicionados tetos (15, 15, 10)
2025-12-15 11:20:18 -03:00
Frederico Castro
0ea1b13eb1 chore: mover documentação para pasta docs e ignorar no git 2025-12-15 11:17:32 -03:00
Frederico Castro
4876d4d9f5 feat(frontend): adicionar link para perfil no ATUACAPES
- 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
2025-12-15 11:14:10 -03:00
Frederico Castro
b44582653b fix(oracle): corrigir persistência e carregamento do ranking
- 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
2025-12-15 07:40:05 -03:00
Frederico Castro
3a0dd036f4 fix(frontend): aumentar timeout de polling para 45 minutos 2025-12-15 07:20:19 -03:00
Frederico Castro
df3d03d3b2 fix: resolver problemas identificados no code review
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
2025-12-15 07:11:28 -03:00
Frederico Castro
d639b82087 fix(selos): corrigir geração de selos e adicionar ícones visuais
- 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
2025-12-15 05:01:52 -03:00
Frederico Castro
97322e5ad7 fix(frontend): evitar erro por 409 em processamento (StrictMode) 2025-12-15 00:26:30 -03:00
Frederico Castro
6369ac5d22 feat(frontend): alinhar critérios e selos/hints 2025-12-15 00:13:15 -03:00
Frederico Castro
2a0dc1a652 feat(backend): ranking 100% Elasticsearch e critérios do PDF 2025-12-15 00:13:12 -03:00
Frederico Castro
70787fbb51 chore(security): remove credenciais hardcoded dos scripts 2025-12-14 23:57:06 -03:00
Frederico Castro
f91651056a Refatoracao de qualidade de codigo
- 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
2025-12-14 21:47:00 -03:00
Frederico Castro
4a98e8b38c Add utility scripts and documentation
- Add TIPOS_ATUACAO_ELASTICSEARCH.md: mapping of ES activity types
- Add TOP_10_RANKING_CAPES.md: sample ranking output documentation
- Add backend/scripts/: utility scripts for analysis and debugging
  - analise_detalhada.py: detailed consultant analysis
  - auditar_ranking.py: ranking audit tool
  - bootstrap_ranking.sh: bootstrap script
  - buscar_consultores_especificos.py: search specific consultants
  - popular_componente_b.py: populate component B
  - top10_ranking.py: generate top 10 ranking
- Add scripts/reload_atuacapes.sh: reload ES index script
2025-12-14 21:36:57 -03:00
Frederico Castro
10d8efc96a Update README with V2 scoring criteria and visual badges 2025-12-14 21:29:43 -03:00