Last active
February 5, 2022 15:53
-
-
Save dncrht/e76d3e29c9e172e71b63e77a881e9e98 to your computer and use it in GitHub Desktop.
Income tax calculator - Calculadora IRPF
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class TaxCalc | |
TABLAS = { | |
retenciones_es: { | |
5550 => 0, | |
12450 => 19, | |
20200 => 24, | |
35200 => 30, | |
60000 => 37, | |
999999 => 45 | |
}, | |
rentas_ahorro_es: { | |
6000 => 19, | |
50000 => 21, | |
999999 => 23 | |
}, | |
tax_rates_uk: { | |
12500 => 0, # personal minimum | |
50000 => 20, | |
150000 => 40, | |
999999 => 45 | |
}, | |
tax_rates_au: { | |
18200 => 0, # personal minimum | |
37000 => 19, | |
90000 => 32.5, | |
180000 => 37, | |
999999 => 45 | |
}, | |
} | |
def initialize(retenciones, bruto) | |
@retenciones = TABLAS[retenciones] | |
puts "Available / Disponibles: #{TABLAS.keys}" | |
@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 #{n tope_horquilla} hay #{n cantidad_gravable} gravados al #{n porcentaje}. Impuestos: #{n impuesto}" | |
total += impuesto | |
end | |
tope_horquilla_anterior = tope_horquilla | |
end | |
puts "Impuestos #{n total} a un tipo de equivalente #{n(total / @bruto * 100.0)} %" | |
puts "Neto: #{n (@bruto - total)}" | |
total | |
end | |
private | |
def n(valor) | |
valor.round(2) | |
end | |
end | |
puts "Usage / Uso: TaxCalc.new(:retenciones_es, 30000).call" | |
#### Usage / Uso | |
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