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}