Corrige calculo do Componente C (Consultoria)

- Adiciona campo vezes_responsavel na entidade Consultoria
- Corrige calculo de base: usa eventos_recentes > 0 (nao string situacao)
- Implementa calculo de extras:
  - extras_eventos: 2 pts/evento (max 20)
  - extras_responsavel: 5 pts/vez (max 25)
  - extras_areas: 10 pts/area extra (max 30)
- Extrai dados de consultorResponsavel dos eventos no repository
- Atualiza DTOs e schemas para incluir novo campo
This commit is contained in:
Frederico Castro
2025-12-13 11:57:33 -03:00
parent 8a8b4230c2
commit b18ae8199c
7 changed files with 32 additions and 12 deletions

View File

@@ -157,14 +157,18 @@ class CalculadorPontuacao:
if not consultoria:
return ComponentePontuacao(base=0, tempo=0, extras=0, bonus=0)
situacao = (consultoria.situacao or "").lower()
base = 150 if "atividade" in situacao else 100
base = 150 if consultoria.eventos_recentes > 0 else 100
anos = consultoria.anos_completos if consultoria.anos_completos else int(
((datetime.now() - consultoria.primeiro_evento).days) // 365
)
tempo = min(int(anos * 5), 50)
extras_eventos = min(consultoria.total_eventos * 2, 20)
extras_responsavel = min(consultoria.vezes_responsavel * 5, 25)
extras_areas = min((len(consultoria.areas) - 1) * 10, 30) if len(consultoria.areas) > 1 else 0
extras = extras_eventos + extras_responsavel + extras_areas
continuidade = consultoria.anos_consecutivos
if continuidade >= 8:
bonus_continuidade = 15
@@ -176,8 +180,6 @@ class CalculadorPontuacao:
bonus_continuidade = 0
retorno_bonus = 15 if consultoria.retornos > 0 else 0
extras = 0
bonus = bonus_continuidade + retorno_bonus
return ComponentePontuacao(base=base, tempo=tempo, extras=extras, bonus=bonus)