Atualiza criterios de pontuacao para V2

Backend:
- CAJ retorno 20->15, CAJ_MP retorno 20->10, CAM atualidade 10->20, retorno 20->10
- CONS_ATIVO/HIST/FALECIDO continuidade 8a+ = 20 (simplificado)
- CONS_FALECIDO agora pontua tempo (5 pts/ano, teto 50)
- AVAL_COMIS_PREMIO e AVAL_COMIS_GP mudaram tipo para PAPEL
- AVAL_COMIS_GP teto 100->80
- Novo bonus de recorrencia anual para comissoes (2-6 pts/ano)
- PREMIACAO base 150->100, PREMIACAO_GP base 30->50, MENCAO base 10->30
- BOL_BPQ_INTERMEDIARIO base 50->30 (consolidado)
- Orientacoes/Co-orientacoes/Bancas: tetos zerados (sem limite)
- TipoAtuacao.RESULTADO renomeado para COMPETENCIA_RECONHECIMENTO

Frontend:
- Atualiza PONTOS_BASE e TETOS com novos valores V2
- Atualiza descricoes das formulas nos tooltips
- Melhora exibicao de teto=0 como "sem limite"
- Adiciona info de bonus de recorrencia nos tooltips
This commit is contained in:
Frederico Castro
2025-12-14 20:37:55 -03:00
parent 7000268261
commit 120593831c
3 changed files with 95 additions and 74 deletions

View File

@@ -114,18 +114,13 @@ class CalculadorPontuacao:
tempo = min(anos_total * criterio.multiplicador_tempo, criterio.teto_tempo)
bonus = 0
if codigo == "CONS_ATIVO":
if consultoria.anos_consecutivos >= 8:
bonus += criterio.bonus_continuidade_8anos
elif consultoria.anos_consecutivos >= 5:
bonus += criterio.bonus_continuidade_5anos
elif consultoria.anos_consecutivos >= 3:
bonus += criterio.bonus_continuidade_3anos
if consultoria.retornos > 0:
bonus += criterio.bonus_retorno
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
total_bruto = base + tempo + bonus
total = min(total_bruto, criterio.teto)
total = min(total_bruto, criterio.teto) if criterio.teto > 0 else total_bruto
atuacoes = [PontuacaoAtuacao(
codigo=codigo,
@@ -149,7 +144,7 @@ class CalculadorPontuacao:
membros_banca: List[MembroBanca],
) -> PontuacaoBloco:
atuacoes = []
totais_por_codigo: Dict[str, Dict] = defaultdict(lambda: {"base": 0, "qtd": 0})
totais_por_codigo: Dict[str, Dict] = defaultdict(lambda: {"base": 0, "qtd": 0, "anos": set()})
for insc in inscricoes:
criterio = get_criterio(insc.codigo)
@@ -162,6 +157,8 @@ class CalculadorPontuacao:
if criterio:
totais_por_codigo[aval.codigo]["base"] += criterio.base
totais_por_codigo[aval.codigo]["qtd"] += 1
if hasattr(aval, 'ano') and aval.ano:
totais_por_codigo[aval.codigo]["anos"].add(aval.ano)
for prem in premiacoes:
criterio = get_criterio(prem.codigo)
@@ -198,12 +195,24 @@ class CalculadorPontuacao:
if not criterio:
continue
total = min(dados["base"], criterio.teto)
base_total = dados["base"]
bonus = 0
if criterio.bonus_recorrencia_anual > 0:
anos_distintos = len(dados["anos"])
bonus_recorrencia = anos_distintos * criterio.bonus_recorrencia_anual
bonus = min(bonus_recorrencia, criterio.teto_recorrencia)
total_bruto = base_total + bonus
if criterio.teto > 0:
total = min(total_bruto, criterio.teto)
else:
total = total_bruto
atuacoes.append(PontuacaoAtuacao(
codigo=codigo,
base=dados["base"],
base=base_total,
tempo=0,
bonus=0,
bonus=bonus,
total=total,
quantidade=dados["qtd"],
))