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
This commit is contained in:
Frederico Castro
2025-12-13 16:41:55 -03:00
parent 97cd328415
commit 2d4e93f82a
15 changed files with 1517 additions and 1001 deletions

View File

@@ -1,6 +1,5 @@
from dataclasses import dataclass, asdict
from typing import List, Optional, Dict, Any
from datetime import datetime
@dataclass
@@ -13,6 +12,7 @@ class PeriodoDTO:
@dataclass
class CoordenacaoCapesDTO:
codigo: str
tipo: str
area_avaliacao: str
periodo: PeriodoDTO
@@ -21,55 +21,94 @@ class CoordenacaoCapesDTO:
@dataclass
class CoordenacaoProgramaDTO:
id_programa: int
nome_programa: str
codigo_programa: str
nota_ppg: str
modalidade: str
area_avaliacao: str
class ConsultoriaDTO:
codigo: str
situacao: str
periodo: PeriodoDTO
areas: List[str]
anos_consecutivos: int
retornos: int
@dataclass
class ConsultoriaDTO:
total_eventos: int
eventos_recentes: int
primeiro_evento: str
ultimo_evento: str
continuidade: int
areas: List[str]
class InscricaoDTO:
codigo: str
tipo: str
premio: str
ano: int
situacao: str
anos_completos: int
anos_consecutivos: int
retornos: int
vezes_responsavel: int
@dataclass
class AvaliacaoComissaoDTO:
codigo: str
tipo: str
premio: str
ano: int
comissao_tipo: str
@dataclass
class PremiacaoDTO:
codigo: str
tipo: str
nome_premio: str
ano: int
pontos: int
@dataclass
class ComponentePontuacaoDTO:
class BolsaCNPQDTO:
codigo: str
nivel: str
area: str
@dataclass
class ParticipacaoDTO:
codigo: str
tipo: str
descricao: str
ano: Optional[int]
@dataclass
class OrientacaoDTO:
codigo: str
tipo: str
nivel: str
ano: Optional[int]
@dataclass
class MembroBancaDTO:
codigo: str
tipo: str
nivel: str
ano: Optional[int]
@dataclass
class PontuacaoAtuacaoDTO:
codigo: str
base: int
tempo: int
extras: int
bonus: int
retorno: int
total: int
quantidade: int
@dataclass
class PontuacaoBlocoDTO:
bloco: str
total: int
atuacoes: List[PontuacaoAtuacaoDTO]
@dataclass
class PontuacaoCompletaDTO:
componente_a: ComponentePontuacaoDTO
componente_b: ComponentePontuacaoDTO
componente_c: ComponentePontuacaoDTO
componente_d: ComponentePontuacaoDTO
bloco_a: PontuacaoBlocoDTO
bloco_c: PontuacaoBlocoDTO
bloco_d: PontuacaoBlocoDTO
pontuacao_total: int
@@ -81,6 +120,9 @@ class ConsultorResumoDTO:
ativo: bool
veterano: bool
pontuacao_total: int
bloco_a: int
bloco_c: int
bloco_d: int
rank: Optional[int] = None
@@ -93,9 +135,14 @@ class ConsultorDetalhadoDTO:
ativo: bool
veterano: bool
coordenacoes_capes: List[CoordenacaoCapesDTO]
coordenacoes_programas: List[CoordenacaoProgramaDTO]
consultoria: Optional[ConsultoriaDTO]
inscricoes: List[InscricaoDTO]
avaliacoes_comissao: List[AvaliacaoComissaoDTO]
premiacoes: List[PremiacaoDTO]
bolsas_cnpq: List[BolsaCNPQDTO]
participacoes: List[ParticipacaoDTO]
orientacoes: List[OrientacaoDTO]
membros_banca: List[MembroBancaDTO]
pontuacao: PontuacaoCompletaDTO
rank: Optional[int] = None