feat(backend): ranking 100% Elasticsearch e critérios do PDF
This commit is contained in:
@@ -14,6 +14,7 @@ class CoordenacaoCapes:
|
||||
periodo: Periodo
|
||||
areas_adicionais: List[str] = field(default_factory=list)
|
||||
ja_coordenou_antes: bool = False
|
||||
presidente: bool = False
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -51,6 +52,7 @@ class Premiacao:
|
||||
tipo: str
|
||||
nome_premio: str
|
||||
ano: int
|
||||
papel: Optional[str] = None
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -74,6 +76,9 @@ class Orientacao:
|
||||
tipo: str
|
||||
nivel: str
|
||||
ano: Optional[int] = None
|
||||
coorientacao: bool = False
|
||||
premiada: bool = False
|
||||
premiacao_tipo: Optional[str] = None
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -89,6 +94,7 @@ class Consultor:
|
||||
id_pessoa: int
|
||||
nome: str
|
||||
cpf: Optional[str] = None
|
||||
coordenador_ppg: bool = False
|
||||
coordenacoes_capes: List[CoordenacaoCapes] = field(default_factory=list)
|
||||
consultoria: Optional[Consultoria] = None
|
||||
inscricoes: List[Inscricao] = field(default_factory=list)
|
||||
|
||||
@@ -89,10 +89,19 @@ class CalculadorPontuacao:
|
||||
tempo = min(anos_total * criterio.multiplicador_tempo, criterio.teto_tempo)
|
||||
|
||||
bonus = 0
|
||||
if consultoria.anos_consecutivos >= 8 and criterio.bonus_continuidade_8anos:
|
||||
bonus += criterio.bonus_continuidade_8anos
|
||||
if codigo == "CONS_ATIVO" and consultoria.retornos > 0 and criterio.bonus_retorno:
|
||||
bonus += criterio.bonus_retorno
|
||||
|
||||
# Bônus de continuidade (escalonado, não cumulativo) - apenas CONS_ATIVO
|
||||
if codigo == "CONS_ATIVO":
|
||||
if consultoria.anos_consecutivos >= 8:
|
||||
bonus += 15
|
||||
elif consultoria.anos_consecutivos >= 5:
|
||||
bonus += 10
|
||||
elif consultoria.anos_consecutivos >= 3:
|
||||
bonus += 5
|
||||
|
||||
# Bônus de retorno (uma vez) - apenas CONS_ATIVO
|
||||
if consultoria.retornos > 0 and criterio.bonus_retorno:
|
||||
bonus += criterio.bonus_retorno
|
||||
|
||||
total_bruto = base + tempo + bonus
|
||||
total = min(total_bruto, criterio.teto) if criterio.teto > 0 else total_bruto
|
||||
|
||||
@@ -101,7 +101,6 @@ CRITERIOS: Dict[str, CriterioPontuacao] = {
|
||||
pontua_tempo=True,
|
||||
multiplicador_tempo=5,
|
||||
teto_tempo=50,
|
||||
bonus_continuidade_8anos=20,
|
||||
bonus_retorno=15,
|
||||
),
|
||||
"CONS_HIST": CriterioPontuacao(
|
||||
@@ -113,7 +112,6 @@ CRITERIOS: Dict[str, CriterioPontuacao] = {
|
||||
pontua_tempo=True,
|
||||
multiplicador_tempo=5,
|
||||
teto_tempo=50,
|
||||
bonus_continuidade_8anos=20,
|
||||
),
|
||||
"CONS_FALECIDO": CriterioPontuacao(
|
||||
codigo="CONS_FALECIDO",
|
||||
@@ -124,7 +122,6 @@ CRITERIOS: Dict[str, CriterioPontuacao] = {
|
||||
pontua_tempo=True,
|
||||
multiplicador_tempo=5,
|
||||
teto_tempo=50,
|
||||
bonus_continuidade_8anos=20,
|
||||
),
|
||||
"INSC_AUTOR": CriterioPontuacao(
|
||||
codigo="INSC_AUTOR",
|
||||
@@ -154,7 +151,7 @@ CRITERIOS: Dict[str, CriterioPontuacao] = {
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.PAPEL,
|
||||
base=50,
|
||||
teto=80,
|
||||
teto=100,
|
||||
bonus_recorrencia_anual=3,
|
||||
teto_recorrencia=20,
|
||||
),
|
||||
@@ -187,9 +184,23 @@ CRITERIOS: Dict[str, CriterioPontuacao] = {
|
||||
codigo="BOL_BPQ_INTERMEDIARIO",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
||||
base=50,
|
||||
teto=100,
|
||||
),
|
||||
"BOL_BPQ_SUP": CriterioPontuacao(
|
||||
codigo="BOL_BPQ_SUP",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
||||
base=30,
|
||||
teto=60,
|
||||
),
|
||||
"BOL_BPQ_INT": CriterioPontuacao(
|
||||
codigo="BOL_BPQ_INT",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
||||
base=50,
|
||||
teto=100,
|
||||
),
|
||||
"PREMIACAO": CriterioPontuacao(
|
||||
codigo="PREMIACAO",
|
||||
bloco=Bloco.D,
|
||||
@@ -201,14 +212,14 @@ CRITERIOS: Dict[str, CriterioPontuacao] = {
|
||||
codigo="PREMIACAO_GP",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
||||
base=50,
|
||||
base=30,
|
||||
teto=60,
|
||||
),
|
||||
"MENCAO": CriterioPontuacao(
|
||||
codigo="MENCAO",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
||||
base=30,
|
||||
base=10,
|
||||
teto=20,
|
||||
),
|
||||
"EVENTO": CriterioPontuacao(
|
||||
@@ -230,63 +241,63 @@ CRITERIOS: Dict[str, CriterioPontuacao] = {
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=15,
|
||||
teto=0,
|
||||
teto=100,
|
||||
),
|
||||
"ORIENT_TESE": CriterioPontuacao(
|
||||
codigo="ORIENT_TESE",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=10,
|
||||
teto=0,
|
||||
teto=50,
|
||||
),
|
||||
"ORIENT_DISS": CriterioPontuacao(
|
||||
codigo="ORIENT_DISS",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=5,
|
||||
teto=0,
|
||||
teto=25,
|
||||
),
|
||||
"CO_ORIENT_POS_DOC": CriterioPontuacao(
|
||||
codigo="CO_ORIENT_POS_DOC",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=7,
|
||||
teto=0,
|
||||
teto=35,
|
||||
),
|
||||
"CO_ORIENT_TESE": CriterioPontuacao(
|
||||
codigo="CO_ORIENT_TESE",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=5,
|
||||
teto=0,
|
||||
teto=25,
|
||||
),
|
||||
"CO_ORIENT_DISS": CriterioPontuacao(
|
||||
codigo="CO_ORIENT_DISS",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=3,
|
||||
teto=0,
|
||||
teto=15,
|
||||
),
|
||||
"MB_BANCA_POS_DOC": CriterioPontuacao(
|
||||
codigo="MB_BANCA_POS_DOC",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=3,
|
||||
teto=0,
|
||||
teto=15,
|
||||
),
|
||||
"MB_BANCA_TESE": CriterioPontuacao(
|
||||
codigo="MB_BANCA_TESE",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=3,
|
||||
teto=0,
|
||||
teto=15,
|
||||
),
|
||||
"MB_BANCA_DISS": CriterioPontuacao(
|
||||
codigo="MB_BANCA_DISS",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=2,
|
||||
teto=0,
|
||||
teto=10,
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user