Create a gist now

Instantly share code, notes, and snippets.

@dncrht /tax_calc.rb
Last active Apr 11, 2017

What would you like to do?
Income tax calculator - Calculadora IRPF
retenciones_es = {
5151 => 0,
12450 => 19,
20200 => 24,
35200 => 30,
60000 => 37,
999999 => 45
}
rentas_ahorro_es = {
6000 => 19,
50000 => 21,
999999 => 23
}
tax_rates_uk = {
11000 => 0, # personal minimum
43000 => 20,
150000 => 40,
999999 => 45
}
class TaxCalc
def initialize(retenciones, bruto)
@retenciones = retenciones
@bruto = bruto
end
def call
tope_horquilla_anterior = 0
total = 0
@retenciones.each do |tope_horquilla, porcentaje|
cantidad_gravable = (@bruto >= tope_horquilla) ? tope_horquilla - tope_horquilla_anterior : @bruto - tope_horquilla_anterior
if cantidad_gravable > 0
impuesto = cantidad_gravable * porcentaje / 100.0
puts "Hasta #{tope_horquilla} hay #{cantidad_gravable} gravados al #{porcentaje}. Impuestos: #{impuesto}"
total += impuesto
end
tope_horquilla_anterior = tope_horquilla
end
puts "Impuestos #{total} a un tipo de equivalente #{total / @bruto * 100.0} %"
total
end
end
#### Usage / Uso
TaxCalc.new(tax_rates_uk, 70000).call
TaxCalc.new(retenciones_es, 30000).call
#### Sample result / Resultado de ejemplo
#Hasta 5151 hay 5151 gravados al 0. Impuestos: 0.0
#Hasta 12450 hay 7299 gravados al 19. Impuestos: 1386.81
#Hasta 20200 hay 7750 gravados al 24. Impuestos: 1860.0
#Hasta 35200 hay 9800 gravados al 30. Impuestos: 2940.0
#Impuestos 6186.8099999999995 a un tipo de equivalente 20.6227 %
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment