feat: implementar novos critérios de pontuação da planilha atualizada

- 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
This commit is contained in:
Frederico Castro
2025-12-19 22:30:21 -03:00
parent 6297d135ec
commit 9457c18cbd
6 changed files with 107 additions and 26 deletions

View File

@@ -51,6 +51,15 @@ def extrair_selos_entry(detalhes: Dict[str, Any]) -> Set[str]:
tipo_prem = "PREMIO"
elif codigo == "MENCAO":
tipo_prem = "MENCAO"
elif 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

View File

@@ -262,7 +262,7 @@ class ConsultorRepositoryImpl(ConsultorRepository):
ano = inicio.year if inicio else datetime.now().year
is_institucional = "coordenador" in tipo_part.lower() or "ppg" in tipo_part.lower()
codigo = "INSC_INST" if is_institucional else "INSC_AUTOR"
codigo = "INSC_INST_AUTOR" if is_institucional else "INSC_AUTOR"
inscricoes.append(Inscricao(
codigo=codigo,
@@ -330,12 +330,23 @@ class ConsultorRepositoryImpl(ConsultorRepository):
nome_lower = str(nome_premio).lower()
tipo_norm = self._inferir_premiacao_tipo(f"{tipo_lower} {nome_lower}")
if tipo_norm == "GP":
codigo = "PREMIACAO"
elif tipo_norm == "MENCAO":
codigo = "MENCAO"
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"
else:
codigo = "PREMIACAO_GP"
if tipo_norm == "GP":
codigo = "PREMIACAO"
elif tipo_norm == "MENCAO":
codigo = "MENCAO"
else:
codigo = "PREMIACAO_GP"
premiacoes.append(Premiacao(
codigo=codigo,
@@ -358,7 +369,9 @@ class ConsultorRepositoryImpl(ConsultorRepository):
area = dados.get("areaConhecimento", "") or ""
nivel_lower = nivel.lower()
if "1d" in nivel_lower or "2" in 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"