1. Função para calcular a base de cálculo do IRPF:
  • Esta função deve receber o salário bruto e o número de dependentes como parâmetros.
  • A função deve realizar o cálculo do desconto do INSS, de acordo com a tabela progressiva do INSS.
  • Ela deve retornar a base de cálculo do IRPF, que é dada pela fórmula:
Base = salário bruto - INSS - dedução por dependentes
  • A dedução por dependente é de R$ 189,59 por dependente.
Protótipo da função:
def calcular_base_calculo(salario_bruto: float, inss: float, dependentes: int):
# Implemente aqui

Passo 1

O que o enunciado pede:
  • Criar uma função com o protótipo \texttt{def\\ calcular\_base\_calculo(salario\_bruto:\\ float,\\ inss:\\ float,\\ dependentes:\\ int):}.
  • A função deve calcular o desconto do INSS segundo a tabela progressiva do INSS e retornar a base de cálculo do IRPF, dada por
\text{Base} = \text{salário bruto} - \text{INSS} - \text{dedução por dependentes}.áçã
Informações fornecidas:
  • A dedução por dependente é de \text{R\$ }189{,}59 por dependente.
  • Precisa-se aplicar a tabela progressiva do INSS (ou seja, cada faixa incide apenas sobre a parcela do salário pertencente àquela faixa).
Observação sobre o protótipo: o protótipo inclui um parâmetro \texttt{inss}. Na prática, a função deve calcular o INSS internamente; vou fazer a função de modo que, se o parâmetro \texttt{inss} for passado com valor maior que 0, a função use esse valor como desconto do INSS (caso o chamador já tenha calculado externamente). Se for passado 0 ou negativo, a função calcula o INSS automaticamente usando a tabela progressiva definida abaixo.

Passo 2

Qual tabela do INSS vamos usar e como funciona o cálculo progressivo:
  • A tabela progressiva do INSS consiste em faixas (limites) e alíquotas. Cada faixa é aplicada só sobre a parcela do salário que cabe nessa faixa. Vou usar as faixas e alíquotas seguintes (valores nominais usados aqui para o cálculo; se você tiver outra tabela atualizada, podemos trocar os limites/alíquotas):
    • Faixa 1: até \text{R\$ }1\,302{,}00 — alíquota de 7{,}5\%.
    • Faixa 2: de \text{R\$}1\,302{,}01 até \text{R\$ }2\,571{,}29 — alíquota de 9\%.
    • Faixa 3: de \text{R\$}2\,571{,}30 até \text{R\$ }3\,856{,}94 — alíquota de 12\%.
    • Faixa 4: de \text{R\$}3\,856{,}95 até \text{R\$ }7\,507{,}49 — alíquota de 14\%.
  • Depois do limite superior da última faixa ( \text{R\$ }7\,507{,}49) não há acréscimo adicional: o INSS é limitado (teto). Ou seja, renda acima desse teto não aumenta a contribuição (a contribuição máxima é a soma das parcelas calculadas para cada faixa).
  • Como o cálculo é progressivo, para um salário qualquer \text{S} calculamos para cada faixa a parcela tributável (o quanto do salário está naquela faixa) e multiplicamos pela alíquota correspondente; somando essas parcelas obtemos o desconto do INSS.

Passo 3

Fórmula aplicada para a Base do IRPF e dedução por dependente:
  • Dedução por dependentes:
\text{Dedução\_dependentes} = \text{dependentes} \times \text{R\$ }189{,}59.çã
  • Base do IRPF:
\text{Base} = \text{salário\_bruto} - \text{INSS\_efetivo} - \text{Dedução\_dependentes}.áçã
Onde \text{INSS\_efetivo} é o desconto apurado no Passo 2 (ou o valor passado no parâmetro \texttt{inss}, se esse parâmetro for maior que zero).

Passo 4

Algoritmo passo a passo que a função vai executar (para implementar sem calculadora na prova):
  1. Receber \text{salario\_bruto}, \text{inss} (possível valor fornecido) e \text{dependentes}.
  2. Se \text{inss} \le 0: calcular \text{INSS\_efetivo} usando cálculo progressivo:
    • Inicializar \text{INSS\_efetivo} \leftarrow 0 e \text{limite\_anterior} \leftarrow 0.
    • Para cada faixa (com seu limite superior \text{L}_i e alíquota r_i):
      • Calcular a parcela tributável nessa faixa: \text{parcela} = \min(\text{salario\_bruto}, \text{L}_i) - \text{limite\_anterior}.
      • Se \text{parcela} > 0, adicionar \text{parcela} \times r_i a \text{INSS\_efetivo}.
      • Atualizar \text{limite\_anterior} \leftarrow \text{L}_i.
    • Após todas as faixas, se \text{salario\_bruto} > último limite, não adicionar mais nada (teto aplicado).
  3. Se \text{inss} > 0: usar \text{INSS\_efetivo} \leftarrow \text{inss}.
  4. Calcular \text{Dedução\_dependentes} = \text{dependentes} \times 189{,}59çã.
  5. Calcular \text{Base} = \text{salario\_bruto} - \text{INSS\_efetivo} - \text{Dedução\_dependentes}çã.
  6. Retornar \text{Base}, preferencialmente arredondada para duas casas decimais (opcional).
Dica de prova: faça as contas faixa a faixa, escrevendo cada parcela e multiplicando pela alíquota; some tudo no final — isso evita erros com porcentagens sobre o total.

Passo 5

Exemplo numérico (confirmação passo a passo) — suponha \text{salário\_bruto} = \text{R\$ }5\,000{,}00á e \text{dependentes} = 2, e assumindo que \texttt{inss} foi passado como 0 (logo a função calcula o INSS):
  1. Faixa 1: parcela = \min(5\,000{,}00,1\,302{,}00)-0 = 1\,302{,}00.
    • Contribuição = 1\,302{,}00 \times 0{,}075 = \text{R\$ }97{,}65.
  2. Faixa 2: parcela = \min(5\,000{,}00,2\,571{,}29)-1\,302{,}00 = 1\,269{,}29.
    • Contribuição = 1\,269{,}29 \times 0{,}09 \approx \text{R\$ }114{,}24.
  3. Faixa 3: parcela = \min(5\,000{,}00,3\,856{,}94)-2\,571{,}29 = 1\,285{,}65.
    • Contribuição = 1\,285{,}65 \times 0{,}12 \approx \text{R\$ }154{,}28.
  4. Faixa 4: parcela = \min(5\,000{,}00,7\,507{,}49)-3\,856{,}94 = 1\,143{,}06.
    • Contribuição = 1\,143{,}06 \times 0{,}14 \approx \text{R\$ }160{,}03.
  5. Soma do INSS = 97{,}65 + 114{,}24 + 154{,}28 + 160{,}03 \approx \text{R\$ }526{,}20.
  6. Dedução por dependentes = 2 \times 189{,}59 = \text{R\$ }379{,}18.
  7. Base do IRPF = 5\,000{,}00 - 526{,}20 - 379{,}18 = \text{R\$ }4\,094{,}62 (arredondando para duas casas decimais).
Esse é o procedimento completo; abaixo está a implementação pronta para usar.

Resposta

def calcular_base_calculo(salario_bruto: float, inss: float, dependentes: int):
# Tabela progressiva do INSS (limites superiores e alíquotas)
limites = [1302.00, 2571.29, 3856.94, 7507.49]
aliquotas = [0.075, 0.09, 0.12, 0.14]
# Se inss for fornecido (> 0), usamos esse valor; caso contrário calculamos
if inss is None or inss <= 0:
    inss_calc = 0.0
    limite_anterior = 0.0
    salario = salario_bruto
    for limite, aliquota in zip(limites, aliquotas):
        parcela = min(salario, limite) - limite_anterior
        if parcela > 0:
            inss_calc += parcela * aliquota
        limite_anterior = limite
    # Se salario > último limite, não se adiciona nada além (teto já considerado)
    inss_efetivo = inss_calc
else:
    inss_efetivo = float(inss)

# Dedução por dependentes
deducao_dependentes = dependentes * 189.59

# Base do IRPF
base = salario_bruto - inss_efetivo - deducao_dependentes

# Arredonda para duas casas decimais e retorna
return round(base, 2)

Exercícios relacionados