Vou explicar como funcionam **classes de bônus** em programação, especialmente no contexto de jogos, sistemas de recompensa ou folha de pagamento.

## O que é uma Classe de Bônus?
É uma estrutura que define regras, cálculos e comportamentos relacionados a bônus, gratificações ou recompensas em um sistema.

## Estrutura Básica de uma Classe de Bônus

como funciona classe de bônus

“`python
class Bonus:
def __init__(self, nome, tipo, valor_base, regras):
self.nome = nome
self.tipo = tipo # ‘percentual’, ‘fixo’, ‘por_meta’
self.valor_base = valor_base
self.regras = regras # condições para aplicar o bônus

def calcular(self, salario_base=None, desempenho=None, metas=None):
if self.tipo == ‘fixo’:
return self.valor_base
elif self.tipo == ‘percentual’ and salario_base:
return salario_base * (self.valor_base / 100)
elif self.tipo == ‘por_meta’ and metas:
return self.calcular_por_metas(metas)
return 0

def calcular_por_metas(self, metas):
# Lógica específica para metas
total = 0
for meta, valor in metas.items():
if meta in self.regras[‘metas_atingidas’]:
total += valor * self.regras[‘valor_por_meta’]
return total
“`

## Tipos Comuns de Bônus

### 1. **Bônus Fixo**
“`python
bonus_natal = Bonus(“13º”, “fixo”, 1000, {})
“`

### 2. **Bônus Percentual**
“`python
bonus_desempenho = Bonus(“PLR”, “percentual”, 15, {“minimo_avaliacao”: 7})
“`

### 3. **Bônus por Metas**
“`python
bonus_vendas = Bonus(“Comissão”, “por_meta”, 0, {
“valor_por_meta”: 50,
“metas”: [“venda_ouro”, “venda_prata”]
})
“`

## Sistema Completo de Bônus

“`python
class SistemaBonus:
def __init__(self):
self.bonus_disponiveis = []

def adicionar_bonus(self, bonus):
self.bonus_disponiveis.append(bonus)

def calcular_total_bonus(self, funcionario):
total = 0
for bonus in self.bonus_disponiveis:
if self.verificar_elegibilidade(bonus, funcionario):
total += bonus.calcular(
salario_base=funcionario.salario,
desempenho=funcionario.desempenho,
metas=funcionario.metas
)
return total

def verificar_elegibilidade(self, bonus, funcionario):
# Verifica se funcionário atende às regras
regras = bonus.regras

if ‘tempo_empresa’ in regras:
if funcionario.tempo_empresa < regras['tempo_empresa']: return False if 'minimo_avaliacao' in regras: if funcionario.desempenho < regras['minimo_avaliacao']: return False return True # Exemplo de uso class Funcionario: def __init__(self, nome, salario, tempo_empresa, desempenho): self.nome = nome self.salario = salario self.tempo_empresa = tempo_empresa # em meses self.desempenho = desempenho # 0-10 self.metas = {"vendas": 150000, "clientes_novos": 10} # Configurando o sistema sistema = SistemaBonus() # Adicionando diferentes bônus sistema.adicionar_bonus(Bonus( "Anual por Tempo", "percentual", 20, {"tempo_empresa": 12} )) sistema.adicionar_bonus(Bonus( "Excelência", "fixo", 5000, {"minimo_avaliacao": 9} )) # Calculando para um funcionário func = Funcionario("João", 5000, 24, 9.5) total_bonus = sistema.calcular_total_bonus(func) print(f"Total de bônus: R$ {total_bonus:.2f}") ``` ## Aplicações Práticas ### 1. **Folha de Pagamento** ```python class FolhaPagamento: def calcular_salario_total(self, funcionario, sistema_bonus): salario_base = funcionario.salario bonus = sistema_bonus.calcular_total_bonus(funcionario) return salario_base + bonus ``` ### 2. **Sistema de Recompensas em Jogos** ```python class BonusJogo: def __init__(self): self.bonus_ativos = {} def aplicar_bonus_temporario(self, tipo, valor, duracao): # Bônus que duram X segundos/minutos self.bonus_ativos[tipo] = { 'valor': valor, 'expira_em': time.time() + duracao } def calcular_dano(self, dano_base): multiplicador = 1 if 'dano' in self.bonus_ativos: multiplicador += self.bonus_ativos['dano']['valor'] return dano_base * multiplicador ``` ### 3. **Programa de Fidelidade** ```python class ProgramaFidelidade: def __init__(self): self.niveis = { 'bronze': {'desconto': 5, 'bonus_pontos': 1}, 'prata': {'desconto': 10, 'bonus_pontos': 1.5}, 'ouro': {'desconto': 15, 'bonus_pontos': 2} } def calcular_bonus_compra(self, cliente, valor_compra): nivel = cliente.nivel_fidelidade bonus = self.niveis[nivel] desconto = valor_compra * (bonus['desconto'] / 100) pontos = valor_compra * bonus['bonus_pontos'] return {'desconto': desconto, 'pontos': pontos} ``` ## Boas Práticas 1. **Separação de Responsabilidades** - Classe para regras de bônus - Classe para cálculo - Classe para elegibilidade 2. **Configuração Flexível** - Use arquivos de configuração (JSON/YAML) para definir bônus 3. **Extensibilidade** - Facilite adição de novos tipos de bônus 4. **Testabilidade** - Crie testes unitários para cada tipo de cálculo ## Exemplo Avançado com Padrão Strategy ```python from abc import ABC, abstractmethod class EstrategiaBonus(ABC): @abstractmethod def calcular(self, contexto): pass class BonusPercentual(EstrategiaBonus): def calcular(self, contexto): return contexto['salario'] * (contexto['percentual'] / 100) class BonusMetaCumprida(EstrategiaBonus): def calcular(self, contexto): if contexto['meta_atingida']: return contexto['valor_fixo'] return 0 class BonusTempoServico(EstrategiaBonus): def calcular(self, contexto): anos = contexto['tempo_servico'] / 12 return contexto['salario'] * (min(anos, 5) * 0.02) # 2% por ano, até 5 anos ``` Essa abordagem permite maior flexibilidade e manutenção do código, especialmente em sistemas complexos com múltiplos tipos de bônus.

Share this post

Related posts