Commit Graph

131 Commits

Author SHA1 Message Date
Frederico Castro
143ec401f5 feat(tests): adicionar suite completa de testes automatizados
- 198 testes cobrindo todos os módulos do backend
- Testes unitários para calculador de pontuação (56 testes)
- Testes para value objects de período (23 testes)
- Testes para cliente Elasticsearch com mocks (27 testes)
- Testes para repository de consultores (48 testes)
- Testes de integração ES + Repository (6 testes)
- Testes para API routes FastAPI (23 testes)
- Testes para job de processamento (16 testes)
- Cobertura de 54% do código
2025-12-29 08:06:08 -03:00
Frederico Castro
e0692ee49c fix(frontend): evitar requisições duplicadas causadas pelo React StrictMode
- Adicionar ref para controlar requisições já feitas no App.jsx
- Adicionar ref para controlar fetch no RawDataModal.jsx
- Adicionar componente FiltroAtivo para filtrar consultores
2025-12-29 03:29:42 -03:00
Frederico Castro
78670c40de fix(selos): mostrar nome do selo no tooltip ao passar o mouse 2025-12-28 01:49:19 -03:00
Frederico Castro
840934a187 feat(export): adicionar exportação Excel do ranking com barra de progresso
- Novo endpoint GET /api/v1/ranking/exportar/excel
- Exporta apenas consultores com pontuação > 0
- Usa xlsxwriter para geração rápida (~40s para 300k registros)
- Layout profissional com formatação, filtros e cores condicionais
- Barra de progresso real no frontend com dois estados:
  - Animação indeterminada durante geração no servidor
  - Progresso real durante download do arquivo
- Botão de exportação integrado ao layout do sistema
- Suporte a cancelamento da exportação
2025-12-28 01:45:52 -03:00
Frederico Castro
015c8f5741 fix(selos): normalizar filtro de selos para case-insensitive
Converte selos para uppercase em todas as camadas (frontend, API e
repository) para garantir que o filtro funcione independente de como
o usuário digita ou seleciona os selos.
2025-12-28 00:20:35 -03:00
Frederico Castro
6b07cecf4e fix(criterios): atualizar tela de criterios com selos disponiveis
- Remover selos sem dados: POS_DOC, CO_ORIENT_*, MB_BANCA_*, BOL_BPQ, PPG_COORD
- Atualizar seção Orientações para ORIENT_TESE e ORIENT_DISS apenas
- Remover seção Bancas (sem dados no ATUACAPES)
- Criar seções Participações (EVENTO, PROJ) e Características (IDIOMA_MULTILINGUE)
- Alinhar layout das tabelas de selos (65% código, 35% selo centralizado)
- Adicionar classe CSS selo-idioma
2025-12-27 21:39:50 -03:00
Frederico Castro
13ccfb02d3 feat(selos): implementar sistema completo de selos para consultores
- Adicionar coluna SELOS na tabela TB_RANKING_CONSULTOR (migration v1.2)
- Criar script popular_selos.py para popular/atualizar selos em batch
- Simplificar para 22 selos com dados reais (remover selos sem dados)
- Adicionar selo IDIOMA_MULTILINGUE para consultores com 3+ idiomas
- Corrigir filtro de selos com query LIKE exata (evitar matches parciais)
- Alinhar ícones entre FiltroSelos e ConsultorCard
- Reorganizar filtro em 7 categorias: Coordenação, Consultoria, Avaliações,
  Premiações, Orientações, Participações, Características

Selos disponíveis: CA, CAJ, CAJ_MP, CAM, PRESID_CAMARA, CONS_ATIVO,
AVAL_COMIS, COORD_COMIS, AUTOR_GP, AUTOR_PREMIO, AUTOR_MENCAO,
ORIENT_GP, ORIENT_PREMIO, ORIENT_MENCAO, COORIENT_GP, COORIENT_PREMIO,
COORIENT_MENCAO, ORIENT_TESE, ORIENT_DISS, EVENTO, PROJ, IDIOMA_MULTILINGUE
2025-12-27 21:08:22 -03:00
Frederico Castro
edb4e00880 fix(api): corrigir conversao do campo ano em titulacoes
Campo ano vinha como string do Elasticsearch causando TypeError
ao ordenar titulacoes com operador unario negativo.

Corrigido nos endpoints:
- /ranking/paginado
- /consultor/{id}/lattes
2025-12-27 19:55:25 -03:00
Frederico Castro
444a5ce80d docs(readme): remove seção Referências
Remove seção desnecessária com links internos de documentação
2025-12-27 01:36:50 -03:00
Frederico Castro
2e6757fa98 docs: corrigir criterios de pontuacao no README conforme codigo 2025-12-27 01:34:06 -03:00
Frederico Castro
ef50aee945 docs: atualizar README com estrutura e endpoints atuais 2025-12-27 01:29:48 -03:00
Frederico Castro
04f0c93a36 chore: remove arquivos locais do repositório
- Remove PDF e HTML de critérios de gerência
- Remove script start-ngrok.sh
- Adiciona arquivos ao .gitignore
2025-12-27 01:23:37 -03:00
Frederico Castro
c78f48c988 fix(lattes): correcoes finais na integracao Lattes 2025-12-27 01:06:43 -03:00
Frederico Castro
1e15ab64ca fix(frontend): ajustes finais na secao Lattes 2025-12-26 23:59:01 -03:00
Frederico Castro
e8b3868d28 feat(lattes): melhorias na integracao Lattes e estilos da secao
- Aprimorar extracao de dados Lattes no backend
- Melhorar estilos CSS da secao Lattes
- Ajustes no componente ConsultorCard para exibicao do Lattes
2025-12-26 23:45:08 -03:00
Frederico Castro
9d3b4d37b7 feat(backend/frontend): integrar dados do Lattes no ranking
- Adicionar endpoint /consultor/{id}/lattes para buscar producoes
- Incluir id_lattes e titulacoes na resposta do ranking paginado
- Adicionar LattesSchema no backend
- Adicionar funcao getLattes no servico frontend
- Simplificar botao Producoes removendo estado loading desnecessario
2025-12-26 23:35:32 -03:00
Frederico Castro
962cea0fd9 fix(frontend): corrigir formatacao da secao Lattes e configurar acesso Oracle CAPES
- Adicionar estilos CSS para secao Lattes (titulacoes em badges separados)
- Montar arquivo .env no container backend para carregar credenciais Oracle CAPES
- Configurar DNS da VPN CAPES no docker-compose para resolucao de hostnames
2025-12-26 20:43:05 -03:00
Frederico Castro
919d95d1e8 fix(backend): corrigir exibicao de idiomas e selos multilingue
- Adicionar idiomas e formacoes ao _source das queries ES (client.py)
- Corrigir type mismatch int/str no endpoint paginado (routes.py)
- Adicionar campo evento nas inscricoes para nome do premio
- Implementar extracao de idiomas do ES no repository
- Ajustar frontend para exibir selo multilingue corretamente
2025-12-24 18:12:22 -03:00
Frederico Castro
0d355e705e feat(frontend): implementar selos faltantes e corrigir alinhamento tabelas
- Adicionar 10 novos selos: MB_BANCA_*, EVENTO, PROJ, IDIOMA_*, TITULACAO_*
- Adicionar TETOS para Bloco A e B no calculo de pontuacao
- Adicionar modais para selos de banca, evento e projeto
- Corrigir alinhamento de colunas nas tabelas do painel de criterios
- Corrigir alinhamento nos modais de blocos (BlocoCriteriosModal)
- Ajustar layout dos selos para linha dedicada abaixo do nome
- Corrigir distribuicao de espaco nas tabelas com selos
- Corrigir extracao de datas de consultoria no backend
2025-12-24 00:53:28 -03:00
Frederico Castro
9576e55289 feat(frontend): adicionar modais detalhados para cada bloco de criterios
- Criar BlocoCriteriosModal com dados completos da planilha oficial
- Incluir formula, base, teto, tempo, bonus e recorrencias por bloco
- Tornar blocos clicaveis para abrir modal com informacoes detalhadas
- Bloco A: Coordenacao CAPES com bonus atualidade/retorno
- Bloco B: Consultoria com bonus continuidade/retorno
- Bloco C: Premiacoes, Comissoes, Inscricoes com recorrencias
- Bloco D: Indicadores e selos (idioma, titulacao)
- Bloco E: Explicacao do indicador PPG_COORD
2025-12-23 23:05:14 -03:00
Frederico Castro
73ea0943ba fix(frontend): alinhar insights e criterios com planilha oficial
- Corrigir gerarInsights() removendo conceitos inexistentes (TETOS_BLOCO,
  "Destaque em Coordenação CAPES", aproveitamento % do teto de bloco)
- Adicionar valores corretos de bônus conforme Aba 4 do Excel oficial
- Remover "max 300" do Bloco C (não existe teto de bloco na especificação)
- Remover PRES_CAM do Bloco D (código inexistente na planilha oficial)
2025-12-23 22:48:48 -03:00
Frederico Castro
ab1cb1ba8c feat(frontend): adicionar modal de insights explicando posicao no ranking
- Criar funcao gerarInsights() com regras baseadas nos criterios oficiais
- Adicionar botao "?" junto a posicao para abrir modal de insights
- Mostrar percentil, bloco dominante, coordenacoes, premiacoes, etc
- Calcular aproveitamento dos tetos por bloco
2025-12-23 22:11:40 -03:00
Frederico Castro
26a478be05 fix: alinhar estrutura de blocos com especificacao PDF V1.0
- Backend: reorganizar blocos para A (Coord CAPES), B (Consultoria),
  C (Avaliacoes/Premiacoes), D (Indicadores), E (Coord PPG)
- Frontend: atualizar labels e formulas dos blocos
- Frontend: ajustar CSS para blocos com tamanho uniforme e quebra de linha
- Adicionar migration script para COMPONENTE_E no Oracle
2025-12-23 21:57:43 -03:00
Frederico Castro
8799a68c30 feat: extrair docencias PPG e simplificar blocos de pontuacao
Backend:
- Adicionar entidade DocenciaPPG para dados de docencia
- Extrair docencias do Elasticsearch (tipo "Docência")
- Serializar docencias no JSON de detalhes do consultor
- Aumentar batch size de 500 para 2000 para melhor performance

Frontend:
- Remover Bloco B (Coord. PPG) - reservado para V2
- Simplificar formula para: Bloco A + Bloco C + Bloco D
- Filtrar orientacoes/bancas da listagem (sao apenas selos)
- Atualizar Header com nota que PPG_COORD e apenas indicador
- Exibir pontuacao base nos modais de orientacao/banca
2025-12-23 04:27:36 -03:00
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