- 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
361 lines
9.0 KiB
Python
361 lines
9.0 KiB
Python
from dataclasses import dataclass
|
|
from typing import Dict, Optional
|
|
from enum import Enum
|
|
|
|
|
|
class Bloco(Enum):
|
|
A = "A"
|
|
C = "C"
|
|
D = "D"
|
|
|
|
|
|
class TipoAtuacao(Enum):
|
|
FUNCAO = "Função"
|
|
COMPETENCIA_RECONHECIMENTO = "Competência e Reconhecimento"
|
|
PAPEL = "Papel"
|
|
PARTICIPACAO = "Participação"
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class CriterioPontuacao:
|
|
codigo: str
|
|
bloco: Bloco
|
|
tipo: TipoAtuacao
|
|
base: int
|
|
teto: int
|
|
pontua_tempo: bool = False
|
|
multiplicador_tempo: int = 0
|
|
teto_tempo: int = 0
|
|
bonus_atualidade: int = 0
|
|
bonus_retorno: int = 0
|
|
bonus_continuidade_8anos: int = 0
|
|
bonus_recorrencia_anual: int = 0
|
|
teto_recorrencia: int = 0
|
|
bonus_recorrencia_participacao: int = 0
|
|
teto_recorrencia_participacao: int = 0
|
|
|
|
|
|
CRITERIOS: Dict[str, CriterioPontuacao] = {
|
|
"CA": CriterioPontuacao(
|
|
codigo="CA",
|
|
bloco=Bloco.A,
|
|
tipo=TipoAtuacao.FUNCAO,
|
|
base=200,
|
|
teto=450,
|
|
pontua_tempo=True,
|
|
multiplicador_tempo=10,
|
|
teto_tempo=100,
|
|
bonus_atualidade=30,
|
|
bonus_retorno=20,
|
|
),
|
|
"CAJ": CriterioPontuacao(
|
|
codigo="CAJ",
|
|
bloco=Bloco.A,
|
|
tipo=TipoAtuacao.FUNCAO,
|
|
base=150,
|
|
teto=370,
|
|
pontua_tempo=True,
|
|
multiplicador_tempo=8,
|
|
teto_tempo=80,
|
|
bonus_atualidade=20,
|
|
bonus_retorno=15,
|
|
),
|
|
"CAJ_MP": CriterioPontuacao(
|
|
codigo="CAJ_MP",
|
|
bloco=Bloco.A,
|
|
tipo=TipoAtuacao.FUNCAO,
|
|
base=120,
|
|
teto=315,
|
|
pontua_tempo=True,
|
|
multiplicador_tempo=6,
|
|
teto_tempo=60,
|
|
bonus_atualidade=15,
|
|
bonus_retorno=10,
|
|
),
|
|
"CAM": CriterioPontuacao(
|
|
codigo="CAM",
|
|
bloco=Bloco.A,
|
|
tipo=TipoAtuacao.FUNCAO,
|
|
base=100,
|
|
teto=280,
|
|
pontua_tempo=True,
|
|
multiplicador_tempo=5,
|
|
teto_tempo=50,
|
|
bonus_atualidade=20,
|
|
bonus_retorno=10,
|
|
),
|
|
"PPG_COORD": CriterioPontuacao(
|
|
codigo="PPG_COORD",
|
|
bloco=Bloco.A,
|
|
tipo=TipoAtuacao.FUNCAO,
|
|
base=0,
|
|
teto=0,
|
|
pontua_tempo=True,
|
|
multiplicador_tempo=0,
|
|
teto_tempo=0,
|
|
),
|
|
"CONS_ATIVO": CriterioPontuacao(
|
|
codigo="CONS_ATIVO",
|
|
bloco=Bloco.C,
|
|
tipo=TipoAtuacao.FUNCAO,
|
|
base=150,
|
|
teto=230,
|
|
pontua_tempo=True,
|
|
multiplicador_tempo=5,
|
|
teto_tempo=50,
|
|
bonus_atualidade=20,
|
|
bonus_retorno=15,
|
|
bonus_continuidade_8anos=20,
|
|
),
|
|
"CONS_HIST": CriterioPontuacao(
|
|
codigo="CONS_HIST",
|
|
bloco=Bloco.C,
|
|
tipo=TipoAtuacao.FUNCAO,
|
|
base=100,
|
|
teto=230,
|
|
pontua_tempo=True,
|
|
multiplicador_tempo=5,
|
|
teto_tempo=50,
|
|
bonus_retorno=20,
|
|
bonus_continuidade_8anos=20,
|
|
),
|
|
"CONS_FALECIDO": CriterioPontuacao(
|
|
codigo="CONS_FALECIDO",
|
|
bloco=Bloco.C,
|
|
tipo=TipoAtuacao.FUNCAO,
|
|
base=100,
|
|
teto=230,
|
|
pontua_tempo=False,
|
|
multiplicador_tempo=0,
|
|
teto_tempo=0,
|
|
bonus_continuidade_8anos=20,
|
|
),
|
|
"INSC_AUTOR": CriterioPontuacao(
|
|
codigo="INSC_AUTOR",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.FUNCAO,
|
|
base=10,
|
|
teto=20,
|
|
bonus_recorrencia_participacao=2,
|
|
teto_recorrencia_participacao=10,
|
|
),
|
|
"INSC_INST_AUTOR": CriterioPontuacao(
|
|
codigo="INSC_INST_AUTOR",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.FUNCAO,
|
|
base=20,
|
|
teto=50,
|
|
bonus_recorrencia_participacao=5,
|
|
teto_recorrencia_participacao=10,
|
|
),
|
|
"INSC_INST": CriterioPontuacao(
|
|
codigo="INSC_INST",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.FUNCAO,
|
|
base=30,
|
|
teto=60,
|
|
),
|
|
"AVAL_COMIS_PREMIO": CriterioPontuacao(
|
|
codigo="AVAL_COMIS_PREMIO",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.PAPEL,
|
|
base=30,
|
|
teto=60,
|
|
bonus_recorrencia_anual=2,
|
|
teto_recorrencia=15,
|
|
),
|
|
"AVAL_COMIS_GP": CriterioPontuacao(
|
|
codigo="AVAL_COMIS_GP",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.PAPEL,
|
|
base=50,
|
|
teto=80,
|
|
bonus_recorrencia_anual=3,
|
|
teto_recorrencia=20,
|
|
),
|
|
"COORD_COMIS_PREMIO": CriterioPontuacao(
|
|
codigo="COORD_COMIS_PREMIO",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.FUNCAO,
|
|
base=50,
|
|
teto=100,
|
|
bonus_recorrencia_anual=4,
|
|
teto_recorrencia=20,
|
|
),
|
|
"COORD_COMIS_GP": CriterioPontuacao(
|
|
codigo="COORD_COMIS_GP",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.FUNCAO,
|
|
base=60,
|
|
teto=120,
|
|
bonus_recorrencia_anual=6,
|
|
teto_recorrencia=20,
|
|
),
|
|
"BOL_BPQ_SUPERIOR": CriterioPontuacao(
|
|
codigo="BOL_BPQ_SUPERIOR",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
|
base=30,
|
|
teto=60,
|
|
),
|
|
"BOL_BPQ_INTERMEDIARIO": 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,
|
|
),
|
|
"BOL_BPQ_NIVEL": CriterioPontuacao(
|
|
codigo="BOL_BPQ_NIVEL",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
|
base=30,
|
|
teto=60,
|
|
),
|
|
"PREMIACAO": CriterioPontuacao(
|
|
codigo="PREMIACAO",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
|
base=100,
|
|
teto=180,
|
|
),
|
|
"PREMIACAO_GP": CriterioPontuacao(
|
|
codigo="PREMIACAO_GP",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
|
base=50,
|
|
teto=60,
|
|
),
|
|
"PREMIACAO_GP_AUTOR": CriterioPontuacao(
|
|
codigo="PREMIACAO_GP_AUTOR",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
|
base=100,
|
|
teto=300,
|
|
),
|
|
"PREMIACAO_AUTOR": CriterioPontuacao(
|
|
codigo="PREMIACAO_AUTOR",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
|
base=50,
|
|
teto=150,
|
|
),
|
|
"MENCAO": CriterioPontuacao(
|
|
codigo="MENCAO",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
|
base=30,
|
|
teto=30,
|
|
),
|
|
"MENCAO_AUTOR": CriterioPontuacao(
|
|
codigo="MENCAO_AUTOR",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
|
base=30,
|
|
teto=90,
|
|
),
|
|
"EVENTO": CriterioPontuacao(
|
|
codigo="EVENTO",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.PARTICIPACAO,
|
|
base=1,
|
|
teto=5,
|
|
bonus_recorrencia_participacao=1,
|
|
teto_recorrencia_participacao=10,
|
|
),
|
|
"PROJ": CriterioPontuacao(
|
|
codigo="PROJ",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.PARTICIPACAO,
|
|
base=10,
|
|
teto=40,
|
|
bonus_recorrencia_participacao=2,
|
|
teto_recorrencia_participacao=10,
|
|
),
|
|
"ORIENT_POS_DOC": CriterioPontuacao(
|
|
codigo="ORIENT_POS_DOC",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.PARTICIPACAO,
|
|
base=15,
|
|
teto=100,
|
|
),
|
|
"ORIENT_TESE": CriterioPontuacao(
|
|
codigo="ORIENT_TESE",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.PARTICIPACAO,
|
|
base=10,
|
|
teto=50,
|
|
),
|
|
"ORIENT_DISS": CriterioPontuacao(
|
|
codigo="ORIENT_DISS",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.PARTICIPACAO,
|
|
base=5,
|
|
teto=25,
|
|
),
|
|
"CO_ORIENT_POS_DOC": CriterioPontuacao(
|
|
codigo="CO_ORIENT_POS_DOC",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.PARTICIPACAO,
|
|
base=7,
|
|
teto=35,
|
|
),
|
|
"CO_ORIENT_TESE": CriterioPontuacao(
|
|
codigo="CO_ORIENT_TESE",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.PARTICIPACAO,
|
|
base=5,
|
|
teto=25,
|
|
),
|
|
"CO_ORIENT_DISS": CriterioPontuacao(
|
|
codigo="CO_ORIENT_DISS",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.PARTICIPACAO,
|
|
base=3,
|
|
teto=15,
|
|
),
|
|
"MB_BANCA_POS_DOC": CriterioPontuacao(
|
|
codigo="MB_BANCA_POS_DOC",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.PARTICIPACAO,
|
|
base=3,
|
|
teto=15,
|
|
),
|
|
"MB_BANCA_TESE": CriterioPontuacao(
|
|
codigo="MB_BANCA_TESE",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.PARTICIPACAO,
|
|
base=3,
|
|
teto=15,
|
|
),
|
|
"MB_BANCA_DISS": CriterioPontuacao(
|
|
codigo="MB_BANCA_DISS",
|
|
bloco=Bloco.D,
|
|
tipo=TipoAtuacao.PARTICIPACAO,
|
|
base=2,
|
|
teto=10,
|
|
),
|
|
}
|
|
|
|
|
|
def get_criterio(codigo: str) -> Optional[CriterioPontuacao]:
|
|
return CRITERIOS.get(codigo)
|
|
|
|
|
|
def get_criterios_bloco(bloco: Bloco) -> Dict[str, CriterioPontuacao]:
|
|
return {k: v for k, v in CRITERIOS.items() if v.bloco == bloco}
|