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
This commit is contained in:
Frederico Castro
2025-12-13 12:33:46 -03:00
parent b18ae8199c
commit c909608e46
2 changed files with 9 additions and 5 deletions

View File

@@ -99,7 +99,7 @@ class CalculadorPontuacao:
bonus = bonus_atual_map.get(coord_escolhida_tipo, 0) if ativo else 0 bonus = bonus_atual_map.get(coord_escolhida_tipo, 0) if ativo else 0
retorno = 20 if retornos_encontrados > 0 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 @staticmethod
def calcular_componente_b(coordenacoes: List[CoordenacaoPrograma]) -> ComponentePontuacao: 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} mapa_nota = {7: 20, 6: 15, 5: 10, 4: 5, 3: 0}
bonus = mapa_nota.get(maior_nota, 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 @staticmethod
def calcular_componente_c(consultoria: Consultoria) -> ComponentePontuacao: def calcular_componente_c(consultoria: Consultoria) -> ComponentePontuacao:
@@ -182,7 +182,7 @@ class CalculadorPontuacao:
retorno_bonus = 15 if consultoria.retornos > 0 else 0 retorno_bonus = 15 if consultoria.retornos > 0 else 0
bonus = bonus_continuidade + retorno_bonus 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 @staticmethod
def calcular_componente_d(premiacoes: List[Premiacao]) -> ComponentePontuacao: 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 = pontos_avaliador + sum(p.pontos for p in outros)
total_pontos = min(total_pontos, 180) 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 @classmethod
def calcular_pontuacao_completa(cls, consultor: Consultor) -> PontuacaoCompleta: def calcular_pontuacao_completa(cls, consultor: Consultor) -> PontuacaoCompleta:

View File

@@ -9,10 +9,14 @@ class ComponentePontuacao:
extras: int extras: int
bonus: int bonus: int
retorno: int = 0 retorno: int = 0
teto: int = 0
@property @property
def total(self) -> int: 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) @dataclass(frozen=True)