Commit Graph

17 Commits

Author SHA1 Message Date
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
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
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
2a0dc1a652 feat(backend): ranking 100% Elasticsearch e critérios do PDF 2025-12-15 00:13:12 -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
2d4e93f82a Reimplementa sistema de ranking com novos critérios V2
Mudanças principais:
- Substitui 4 Componentes (A,B,C,D) por 3 Blocos (A,C,D)
- Remove Componente B (Coordenação PPG = 0 pts no V1)
- Adiciona novos tipos de atuação do Elasticsearch
- Implementa critérios de pontuação com tetos individuais

Bloco A - Coordenação CAPES:
- CA (max 450), CAJ (max 370), CAJ_MP (max 315), CAM (max 280)
- Calcula base + tempo + bônus atualidade + bônus retorno

Bloco C - Consultoria:
- CONS_ATIVO (base 150), CONS_HIST (base 100), CONS_FALECIDO (base 100)
- Bônus continuidade: 3anos=+5, 5anos=+10, 8anos=+15
- Bônus retorno: +15

Bloco D - Premiações/Avaliações:
- Inscrições (INSC_AUTOR, INSC_INST)
- Avaliações (AVAL_COMIS_PREMIO, AVAL_COMIS_GP)
- Coordenações (COORD_COMIS_PREMIO, COORD_COMIS_GP)
- Premiações (PREMIACAO, PREMIACAO_GP, MENCAO)
- Bolsas CNPQ, Participações, Orientações, Membros de Banca

Frontend:
- Header, ConsultorCard, CompararModal atualizados para 3 blocos
- API service atualizado para nova estrutura de dados
2025-12-13 16:41:55 -03:00
Frederico Castro
b18ae8199c Corrige calculo do Componente C (Consultoria)
- Adiciona campo vezes_responsavel na entidade Consultoria
- Corrige calculo de base: usa eventos_recentes > 0 (nao string situacao)
- Implementa calculo de extras:
  - extras_eventos: 2 pts/evento (max 20)
  - extras_responsavel: 5 pts/vez (max 25)
  - extras_areas: 10 pts/area extra (max 30)
- Extrai dados de consultorResponsavel dos eventos no repository
- Atualiza DTOs e schemas para incluir novo campo
2025-12-13 11:57:33 -03:00
Frederico Castro
dfc4323739 Remove referencias a SUCUPIRA_PAINEL do backend e docs 2025-12-13 09:40:40 -03:00
Frederico Castro
c4e92584f8 Evita buscar PPG no job principal para acelerar carga 2025-12-10 17:33:42 -03:00
Frederico Castro
8d36a71df8 Aumenta batch do ranking para 5000 para acelerar carga 2025-12-10 17:27:19 -03:00
Frederico Castro
1fbf659122 Inclui vezes_responsavel no JSON de consultoria 2025-12-10 16:02:27 -03:00
Frederico Castro
6f11b7c166 Automatiza componente B e ajuste frontend do ranking 2025-12-10 13:49:43 -03:00
Frederico Castro
e11cdcd083 feat: Implementa duas conexões Oracle simultâneas
- Oracle LOCAL (Docker): Para salvar TB_RANKING_CONSULTOR
- Oracle REMOTO (CAPES): Para ler SUCUPIRA_PAINEL.VM_COORDENADOR
- ConsultorRepositoryImpl usa oracle_remote para buscar PPG
- RankingRepository usa oracle_local para salvar ranking
- ProcessarRankingJob recebe ambos os clientes
- Componente B agora está preparado para funcionar

Nota: Elasticsearch precisa ser acessível da rede CAPES
2025-12-10 04:21:17 -03:00
Frederico Castro
f69bcd928c feat: Implementa job de ranking para 300k consultores
- Processa 350.215 consultores via Scroll API
- Insere em TB_RANKING_CONSULTOR com MERGE (upsert)
- Calcula posições via SP_ATUALIZAR_POSICOES
- Frontend com paginação completa
- Adiciona traceback detalhado para debug
2025-12-10 03:59:08 -03:00
Frederico Castro
c6aaf66e87 refactor: Substitui APScheduler por asyncio nativo para OCP
- Remove dependência apscheduler
- Implementa loop asyncio com sleep calculado
- Compatível com ambientes sem cron (OCP/Kubernetes)
- Documenta solução em SCHEDULER.md
2025-12-10 01:55:55 -03:00
Frederico Castro
3ea6a4409e feat: Implementa job de ranking para 300k consultores
Backend:
- Adiciona Scroll API no cliente Elasticsearch para processar todos os 300k+ consultores
- Cria tabela TB_RANKING_CONSULTOR no Oracle para ranking pré-calculado
- Implementa job de processamento com APScheduler (diário às 3h)
- Adiciona endpoints: /ranking/paginado, /ranking/status, /ranking/processar, /ranking/estatisticas
- Repository Oracle com paginação eficiente via ROW_NUMBER
- Status do job com progresso em tempo real (polling)
- Leitura automática de LOBs no OracleClient

Frontend:
- Componente RankingPaginado com paginação completa
- Barra de progresso do job em tempo real
- Botão para reprocessar ranking
- Alternância entre Top N (rápido) e Ranking Completo (300k)

Infraestrutura:
- Docker compose com depends_on para garantir Oracle disponível
- Schema SQL com procedure SP_ATUALIZAR_POSICOES
- Índices otimizados para paginação
2025-12-10 01:33:00 -03:00