- 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
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
. - 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
Informações fornecidas:
- A dedução por dependente é de
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
. Na prática, a função deve calcular o INSS internamente; vou fazer a função de modo que, se o parâmetro
for passado com valor maior que
, a função use esse valor como desconto do INSS (caso o chamador já tenha calculado externamente). Se for passado
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é
— alíquota de . - Faixa 2: de
até — alíquota de . - Faixa 3: de
até — alíquota de . - Faixa 4: de
até — alíquota de .
- Faixa 1: até
- Depois do limite superior da última faixa (
) 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
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:
- Base do IRPF:
Onde
é o desconto apurado no Passo 2 (ou o valor passado no parâmetro
, 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):
- Receber
, (possível valor fornecido) e . - Se
: calcular usando cálculo progressivo: - Inicializar
e . - Para cada faixa (com seu limite superior
e alíquota ): - Calcular a parcela tributável nessa faixa:
. - Se
, adicionar a . - Atualizar
.
- Calcular a parcela tributável nessa faixa:
- Após todas as faixas, se
último limite, não adicionar mais nada (teto aplicado).
- Inicializar
- Se
: usar . - Calcular
. - Calcular
. - Retornar
, 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
e
, e assumindo que
foi passado como
(logo a função calcula o INSS):
- Faixa 1: parcela =
. - Contribuição =
.
- Contribuição =
- Faixa 2: parcela =
. - Contribuição =
.
- Contribuição =
- Faixa 3: parcela =
. - Contribuição =
.
- Contribuição =
- Faixa 4: parcela =
. - Contribuição =
.
- Contribuição =
- Soma do INSS =
. - Dedução por dependentes =
. - Base do IRPF =
(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]
# 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)