Skip to content

Instantly share code, notes, and snippets.

@fabiocosta0305
Created August 19, 2021 15:06
Show Gist options
  • Save fabiocosta0305/947f4b9ad68d98f592c2ac9d300358a3 to your computer and use it in GitHub Desktop.
Save fabiocosta0305/947f4b9ad68d98f592c2ac9d300358a3 to your computer and use it in GitHub Desktop.
PROGRAMA irpf
VAR:
dependentes: inteiro
salario, aliquota, contribuicaoINSS, baseCalculo, impostoDevido: racional
salarioRodar, piso, descontoDependente, aliquotaIRPF: racional
# O sinal de <> indica uma estrutura mais complexa com varios elementos de vários tipos
tabelaContrib: lista<valor: racional, aliquota: racional>
contribINSS: <valor: racional, aliquota: racional>
tabelaIRPF: lista<base: racional, aliquota: racional, parcelaIRPF: racional>
faixaIRPF: <base: racional, aliquota: racional, parcelaIRPF: racional>
COMEÇAR:
# Iniciando as tabelas de contribuição e IRPF e o valor de desconto por dependente
descontoDependente = 189.59
tabelaContrib = <1045,7.5>, <2089.6,9>, <3134.4,12>, <6101.06,14>
# o último valor é de base da faixa é propositalmente impossivelmetne alto,
# para que a lógica que adotaremos para descobrir a faixa de cálculo funcione a contento
tabelaIRPF = <1903.98,0,0>, <2826.65,7.5,142.80>, <3751.05,15,354.8>, <4664.68,22.5,636.13>, <999999999999999,27.5,869.36>
# Solicita o valor do salário e o número de dependentes
EXIBE "Favor inserir o salario: "
INSERE salario
EXIBE "Favor inserir o número de dependentes: "
INSERE dependentes
# copiando o valor do salário para uma variável temporária a ser usada em um loop
salarioRodar = salario
contribuicaoINSS = 0
piso = 0 # será necessário para fazer a base "subir" e seguir o resto do salário
# agora, vai reproduzir o loop abaixo enquanto:
# 1. Houver faixas de salário ou
# 2. O salário tiver esgotado (veja abaixo)
ENQUANTO tabelaContrib COMO contribINSS:
# aqui é necessário ver se o salário que "ainda tem/vai ter" cabe dentro da faixa de salário
SE contribINSS<valor> > salarioRodar:
# se não "couber", calcula o que ainda tem baseado na aliquota e sai do ENQUANTO
contribuicaoINSS = contribuicaoINSS + (((salarioRodar) * contribINSS<aliquota>)/100)
SAIR_ENQUANTO
SENAO:
# caso contrário, calcula o valor baseado no valor dentro da faixa (por isso necessário a variável "piso")
contribuicaoINSS = contribuicaoINSS + ((contribINSS<valor> * contribINSS<aliquota>) / 100)
piso = piso + contribINSS<valor>
salarioRodar = salarioRodar - contribINSS<valor>
# Agora, vamos obter a base de cálculo
baseCalculo = salario - contribuicaoINSS - (descontoDependente * dependentes)
# Usaremos outro LOOP para obter a faixa da alíquota do Imposto de Renda
impostoDevido = 0
ENQUANTO tabelaIRPF COMO faixaIRPF:
SE baseCalculo < faixaIRPF<base>:
impostoDevido = ((baseCalculo * faixaIRPF<aliquota>)/100) - faixaIRPF<parcelaIRPF>
aliquotaIRPF = faixaIRPF<aliquota>
SE impostoDevido < 0:
impostoDevido = 0
ESCREVA "Valor do Sálario: " + salario
ESCREVA "Dependentes: " + dependentes
ESCREVA "Desconto por dependentes: " + descontoDependentes
ESCREVA "Contribuicao INSS: " + contribuicaoINSS
ESCREVA "Base de Cálculo IRPF: " + baseCalculo
ESCREVA "Alíquota de IRPF: " + aliquotaIRPF
ESCREVA "Imposto Devido: " + impostoDevido
ENCERRAR.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment