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:
@@ -32,12 +32,22 @@ class Consultoria:
|
||||
eventos_recentes: int
|
||||
primeiro_evento: datetime
|
||||
ultimo_evento: datetime
|
||||
vezes_responsavel: int
|
||||
areas: List[str] = field(default_factory=list)
|
||||
situacao: str = "N/A"
|
||||
anos_completos: int = 0
|
||||
anos_consecutivos: int = 0
|
||||
retornos: int = 0
|
||||
vezes_responsavel: int = 0
|
||||
|
||||
@property
|
||||
def continuidade(self) -> int:
|
||||
if self.anos_consecutivos >= 8:
|
||||
return 15
|
||||
elif self.anos_consecutivos >= 5:
|
||||
return 10
|
||||
elif self.anos_consecutivos >= 3:
|
||||
return 5
|
||||
return 0
|
||||
|
||||
|
||||
@dataclass
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user