From c909608e46e8f178d02f78694198629ce1d7490c Mon Sep 17 00:00:00 2001 From: Frederico Castro Date: Sat, 13 Dec 2025 12:33:46 -0300 Subject: [PATCH] Adiciona tetos maximos por componente - Componente A: teto 450 pts - Componente B: teto 180 pts - Componente C: teto 230 pts - Componente D: teto 180 pts Adiciona campo teto no ComponentePontuacao que limita o total --- backend/src/domain/services/calculador_pontuacao.py | 8 ++++---- backend/src/domain/value_objects/pontuacao.py | 6 +++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/backend/src/domain/services/calculador_pontuacao.py b/backend/src/domain/services/calculador_pontuacao.py index 7dfa4f1..778085e 100644 --- a/backend/src/domain/services/calculador_pontuacao.py +++ b/backend/src/domain/services/calculador_pontuacao.py @@ -99,7 +99,7 @@ class CalculadorPontuacao: bonus = bonus_atual_map.get(coord_escolhida_tipo, 0) if ativo else 0 retorno = 20 if retornos_encontrados > 0 else 0 - return ComponentePontuacao(base=base, tempo=tempo, extras=extras, bonus=bonus, retorno=retorno) + return ComponentePontuacao(base=base, tempo=tempo, extras=extras, bonus=bonus, retorno=retorno, teto=450) @staticmethod def calcular_componente_b(coordenacoes: List[CoordenacaoPrograma]) -> ComponentePontuacao: @@ -150,7 +150,7 @@ class CalculadorPontuacao: mapa_nota = {7: 20, 6: 15, 5: 10, 4: 5, 3: 0} bonus = mapa_nota.get(maior_nota, 0) - return ComponentePontuacao(base=base, tempo=tempo, extras=extras, bonus=bonus) + return ComponentePontuacao(base=base, tempo=tempo, extras=extras, bonus=bonus, teto=180) @staticmethod def calcular_componente_c(consultoria: Consultoria) -> ComponentePontuacao: @@ -182,7 +182,7 @@ class CalculadorPontuacao: retorno_bonus = 15 if consultoria.retornos > 0 else 0 bonus = bonus_continuidade + retorno_bonus - return ComponentePontuacao(base=base, tempo=tempo, extras=extras, bonus=bonus) + return ComponentePontuacao(base=base, tempo=tempo, extras=extras, bonus=bonus, teto=230) @staticmethod def calcular_componente_d(premiacoes: List[Premiacao]) -> ComponentePontuacao: @@ -196,7 +196,7 @@ class CalculadorPontuacao: total_pontos = pontos_avaliador + sum(p.pontos for p in outros) total_pontos = min(total_pontos, 180) - return ComponentePontuacao(base=total_pontos, tempo=0, extras=0, bonus=0) + return ComponentePontuacao(base=total_pontos, tempo=0, extras=0, bonus=0, teto=180) @classmethod def calcular_pontuacao_completa(cls, consultor: Consultor) -> PontuacaoCompleta: diff --git a/backend/src/domain/value_objects/pontuacao.py b/backend/src/domain/value_objects/pontuacao.py index 8fe14bf..890c3c4 100644 --- a/backend/src/domain/value_objects/pontuacao.py +++ b/backend/src/domain/value_objects/pontuacao.py @@ -9,10 +9,14 @@ class ComponentePontuacao: extras: int bonus: int retorno: int = 0 + teto: int = 0 @property def total(self) -> int: - return self.base + self.tempo + self.extras + self.bonus + self.retorno + soma = self.base + self.tempo + self.extras + self.bonus + self.retorno + if self.teto > 0: + return min(soma, self.teto) + return soma @dataclass(frozen=True)