fix: alinhar criterios 100% com documento PDF oficial
Backend: - Reescrever criterios_pontuacao.py com valores corretos do PDF - Adicionar Blocos B e E ao enum - Corrigir Base/Teto: AVAL_COMIS_GP (40), COORD_COMIS_PREMIO (40), COORD_COMIS_GP (50), PROJ teto (30) - Orientacoes/Bancas agora sao selos (Base=0, Teto=0) - CONS_FALECIDO agora pontua tempo (5 pts/ano) - Remover codigos obsoletos (PREMIACAO, MENCAO, BOL_BPQ_SUP/INT) - Usar apenas BOL_BPQ_NIVEL, PREMIACAO_*_AUTOR, MENCAO_AUTOR - Atualizar ranking_store.py e validar_ranking.py Frontend: - Atualizar ConsultorCard e CompararModal com codigos corretos - Adicionar logo CAPES em PNG com transparencia - Ajustar espacamento do header e tamanho das fontes - Mapear pasta public no docker-compose
This commit is contained in:
@@ -5,8 +5,10 @@ from enum import Enum
|
||||
|
||||
class Bloco(Enum):
|
||||
A = "A"
|
||||
B = "B"
|
||||
C = "C"
|
||||
D = "D"
|
||||
E = "E"
|
||||
|
||||
|
||||
class TipoAtuacao(Enum):
|
||||
@@ -33,6 +35,7 @@ class CriterioPontuacao:
|
||||
teto_recorrencia: int = 0
|
||||
bonus_recorrencia_participacao: int = 0
|
||||
teto_recorrencia_participacao: int = 0
|
||||
gera_selo: bool = False
|
||||
|
||||
|
||||
CRITERIOS: Dict[str, CriterioPontuacao] = {
|
||||
@@ -86,17 +89,21 @@ CRITERIOS: Dict[str, CriterioPontuacao] = {
|
||||
),
|
||||
"PPG_COORD": CriterioPontuacao(
|
||||
codigo="PPG_COORD",
|
||||
bloco=Bloco.A,
|
||||
bloco=Bloco.E,
|
||||
tipo=TipoAtuacao.FUNCAO,
|
||||
base=0,
|
||||
teto=0,
|
||||
pontua_tempo=True,
|
||||
multiplicador_tempo=0,
|
||||
teto_tempo=0,
|
||||
bonus_atualidade=15,
|
||||
bonus_retorno=10,
|
||||
bonus_continuidade_8anos=15,
|
||||
gera_selo=True,
|
||||
),
|
||||
"CONS_ATIVO": CriterioPontuacao(
|
||||
codigo="CONS_ATIVO",
|
||||
bloco=Bloco.C,
|
||||
bloco=Bloco.B,
|
||||
tipo=TipoAtuacao.FUNCAO,
|
||||
base=150,
|
||||
teto=230,
|
||||
@@ -109,7 +116,7 @@ CRITERIOS: Dict[str, CriterioPontuacao] = {
|
||||
),
|
||||
"CONS_HIST": CriterioPontuacao(
|
||||
codigo="CONS_HIST",
|
||||
bloco=Bloco.C,
|
||||
bloco=Bloco.B,
|
||||
tipo=TipoAtuacao.FUNCAO,
|
||||
base=100,
|
||||
teto=230,
|
||||
@@ -121,18 +128,18 @@ CRITERIOS: Dict[str, CriterioPontuacao] = {
|
||||
),
|
||||
"CONS_FALECIDO": CriterioPontuacao(
|
||||
codigo="CONS_FALECIDO",
|
||||
bloco=Bloco.C,
|
||||
bloco=Bloco.B,
|
||||
tipo=TipoAtuacao.FUNCAO,
|
||||
base=100,
|
||||
teto=230,
|
||||
pontua_tempo=False,
|
||||
multiplicador_tempo=0,
|
||||
teto_tempo=0,
|
||||
pontua_tempo=True,
|
||||
multiplicador_tempo=5,
|
||||
teto_tempo=50,
|
||||
bonus_continuidade_8anos=20,
|
||||
),
|
||||
"INSC_AUTOR": CriterioPontuacao(
|
||||
codigo="INSC_AUTOR",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.FUNCAO,
|
||||
base=10,
|
||||
teto=20,
|
||||
@@ -141,23 +148,16 @@ CRITERIOS: Dict[str, CriterioPontuacao] = {
|
||||
),
|
||||
"INSC_INST_AUTOR": CriterioPontuacao(
|
||||
codigo="INSC_INST_AUTOR",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
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,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PAPEL,
|
||||
base=30,
|
||||
teto=60,
|
||||
@@ -166,107 +166,62 @@ CRITERIOS: Dict[str, CriterioPontuacao] = {
|
||||
),
|
||||
"AVAL_COMIS_GP": CriterioPontuacao(
|
||||
codigo="AVAL_COMIS_GP",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PAPEL,
|
||||
base=50,
|
||||
base=40,
|
||||
teto=80,
|
||||
bonus_recorrencia_anual=3,
|
||||
teto_recorrencia=20,
|
||||
),
|
||||
"COORD_COMIS_PREMIO": CriterioPontuacao(
|
||||
codigo="COORD_COMIS_PREMIO",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.FUNCAO,
|
||||
base=50,
|
||||
base=40,
|
||||
teto=100,
|
||||
bonus_recorrencia_anual=4,
|
||||
teto_recorrencia=20,
|
||||
),
|
||||
"COORD_COMIS_GP": CriterioPontuacao(
|
||||
codigo="COORD_COMIS_GP",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.FUNCAO,
|
||||
base=60,
|
||||
base=50,
|
||||
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,
|
||||
gera_selo=True,
|
||||
),
|
||||
"PREMIACAO_GP_AUTOR": CriterioPontuacao(
|
||||
codigo="PREMIACAO_GP_AUTOR",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
||||
base=100,
|
||||
teto=300,
|
||||
gera_selo=True,
|
||||
),
|
||||
"PREMIACAO_AUTOR": CriterioPontuacao(
|
||||
codigo="PREMIACAO_AUTOR",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
||||
base=50,
|
||||
teto=150,
|
||||
),
|
||||
"MENCAO": CriterioPontuacao(
|
||||
codigo="MENCAO",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
||||
base=30,
|
||||
teto=30,
|
||||
gera_selo=True,
|
||||
),
|
||||
"MENCAO_AUTOR": CriterioPontuacao(
|
||||
codigo="MENCAO_AUTOR",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
||||
base=30,
|
||||
teto=90,
|
||||
gera_selo=True,
|
||||
),
|
||||
"EVENTO": CriterioPontuacao(
|
||||
codigo="EVENTO",
|
||||
@@ -282,72 +237,193 @@ CRITERIOS: Dict[str, CriterioPontuacao] = {
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=10,
|
||||
teto=40,
|
||||
teto=30,
|
||||
bonus_recorrencia_participacao=2,
|
||||
teto_recorrencia_participacao=10,
|
||||
),
|
||||
"IDIOMA_BILINGUE": CriterioPontuacao(
|
||||
codigo="IDIOMA_BILINGUE",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"IDIOMA_MULTILINGUE": CriterioPontuacao(
|
||||
codigo="IDIOMA_MULTILINGUE",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"TITULACAO_MESTRE": CriterioPontuacao(
|
||||
codigo="TITULACAO_MESTRE",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"TITULACAO_DOUTOR": CriterioPontuacao(
|
||||
codigo="TITULACAO_DOUTOR",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"TITULACAO_POS_DOUTOR": CriterioPontuacao(
|
||||
codigo="TITULACAO_POS_DOUTOR",
|
||||
bloco=Bloco.D,
|
||||
tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"ORIENT_POS_DOC": CriterioPontuacao(
|
||||
codigo="ORIENT_POS_DOC",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=15,
|
||||
teto=100,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"ORIENT_POS_DOC_PREM": CriterioPontuacao(
|
||||
codigo="ORIENT_POS_DOC_PREM",
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"ORIENT_TESE": CriterioPontuacao(
|
||||
codigo="ORIENT_TESE",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=10,
|
||||
teto=50,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"ORIENT_TESE_PREM": CriterioPontuacao(
|
||||
codigo="ORIENT_TESE_PREM",
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"ORIENT_DISS": CriterioPontuacao(
|
||||
codigo="ORIENT_DISS",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=5,
|
||||
teto=25,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"ORIENT_DISS_PREM": CriterioPontuacao(
|
||||
codigo="ORIENT_DISS_PREM",
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"CO_ORIENT_POS_DOC": CriterioPontuacao(
|
||||
codigo="CO_ORIENT_POS_DOC",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=7,
|
||||
teto=35,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"CO_ORIENT_POS_DOC_PREM": CriterioPontuacao(
|
||||
codigo="CO_ORIENT_POS_DOC_PREM",
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"CO_ORIENT_TESE": CriterioPontuacao(
|
||||
codigo="CO_ORIENT_TESE",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=5,
|
||||
teto=25,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"CO_ORIENT_TESE_PREM": CriterioPontuacao(
|
||||
codigo="CO_ORIENT_TESE_PREM",
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"CO_ORIENT_DISS": CriterioPontuacao(
|
||||
codigo="CO_ORIENT_DISS",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=3,
|
||||
teto=15,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"CO_ORIENT_DISS_PREM": CriterioPontuacao(
|
||||
codigo="CO_ORIENT_DISS_PREM",
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"MB_BANCA_POS_DOC": CriterioPontuacao(
|
||||
codigo="MB_BANCA_POS_DOC",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=3,
|
||||
teto=15,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"MB_BANCA_POS_DOC_PREM": CriterioPontuacao(
|
||||
codigo="MB_BANCA_POS_DOC_PREM",
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"MB_BANCA_TESE": CriterioPontuacao(
|
||||
codigo="MB_BANCA_TESE",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=3,
|
||||
teto=15,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"MB_BANCA_TESE_PREM": CriterioPontuacao(
|
||||
codigo="MB_BANCA_TESE_PREM",
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"MB_BANCA_DISS": CriterioPontuacao(
|
||||
codigo="MB_BANCA_DISS",
|
||||
bloco=Bloco.D,
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=2,
|
||||
teto=10,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
"MB_BANCA_DISS_PREM": CriterioPontuacao(
|
||||
codigo="MB_BANCA_DISS_PREM",
|
||||
bloco=Bloco.C,
|
||||
tipo=TipoAtuacao.PARTICIPACAO,
|
||||
base=0,
|
||||
teto=0,
|
||||
gera_selo=True,
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
@@ -42,33 +42,14 @@ def extrair_selos_entry(detalhes: Dict[str, Any]) -> Set[str]:
|
||||
selos.add("BPQ")
|
||||
|
||||
for prem in detalhes.get("premiacoes", []):
|
||||
papel = (prem.get("papel") or "").lower()
|
||||
codigo = prem.get("codigo", "")
|
||||
|
||||
if codigo == "PREMIACAO":
|
||||
tipo_prem = "GP"
|
||||
elif codigo == "PREMIACAO_GP":
|
||||
tipo_prem = "PREMIO"
|
||||
elif codigo == "MENCAO":
|
||||
tipo_prem = "MENCAO"
|
||||
elif codigo == "PREMIACAO_GP_AUTOR":
|
||||
if codigo == "PREMIACAO_GP_AUTOR":
|
||||
selos.add("AUTOR_GP")
|
||||
continue
|
||||
elif codigo == "PREMIACAO_AUTOR":
|
||||
selos.add("AUTOR_PREMIO")
|
||||
continue
|
||||
elif codigo == "MENCAO_AUTOR":
|
||||
selos.add("AUTOR_MENCAO")
|
||||
continue
|
||||
else:
|
||||
continue
|
||||
|
||||
if "autor" in papel:
|
||||
selos.add(f"AUTOR_{tipo_prem}")
|
||||
elif "orientador" in papel:
|
||||
selos.add(f"ORIENT_{tipo_prem}")
|
||||
elif "coorientador" in papel or "co-orientador" in papel:
|
||||
selos.add(f"COORIENT_{tipo_prem}")
|
||||
|
||||
for orient in detalhes.get("orientacoes", []):
|
||||
codigo = orient.get("codigo", "")
|
||||
|
||||
@@ -330,23 +330,12 @@ class ConsultorRepositoryImpl(ConsultorRepository):
|
||||
nome_lower = str(nome_premio).lower()
|
||||
tipo_norm = self._inferir_premiacao_tipo(f"{tipo_lower} {nome_lower}")
|
||||
|
||||
papel_lower = str(papel or "").lower()
|
||||
is_autor = "autor" in papel_lower
|
||||
|
||||
if is_autor:
|
||||
if tipo_norm == "GP":
|
||||
codigo = "PREMIACAO_GP_AUTOR"
|
||||
elif tipo_norm == "MENCAO":
|
||||
codigo = "MENCAO_AUTOR"
|
||||
else:
|
||||
codigo = "PREMIACAO_AUTOR"
|
||||
if tipo_norm == "GP":
|
||||
codigo = "PREMIACAO_GP_AUTOR"
|
||||
elif tipo_norm == "MENCAO":
|
||||
codigo = "MENCAO_AUTOR"
|
||||
else:
|
||||
if tipo_norm == "GP":
|
||||
codigo = "PREMIACAO"
|
||||
elif tipo_norm == "MENCAO":
|
||||
codigo = "MENCAO"
|
||||
else:
|
||||
codigo = "PREMIACAO_GP"
|
||||
codigo = "PREMIACAO_AUTOR"
|
||||
|
||||
premiacoes.append(Premiacao(
|
||||
codigo=codigo,
|
||||
@@ -368,16 +357,8 @@ class ConsultorRepositoryImpl(ConsultorRepository):
|
||||
nivel = dados.get("nivel", "") or dados.get("categoria", "") or ""
|
||||
area = dados.get("areaConhecimento", "") or ""
|
||||
|
||||
nivel_lower = nivel.lower()
|
||||
if not nivel_lower:
|
||||
codigo = "BOL_BPQ_NIVEL"
|
||||
elif "1d" in nivel_lower or "2" in nivel_lower:
|
||||
codigo = "BOL_BPQ_INT"
|
||||
else:
|
||||
codigo = "BOL_BPQ_SUP"
|
||||
|
||||
bolsas.append(BolsaCNPQ(
|
||||
codigo=codigo,
|
||||
codigo="BOL_BPQ_NIVEL",
|
||||
nivel=nivel,
|
||||
area=area,
|
||||
))
|
||||
|
||||
Reference in New Issue
Block a user