Skip to content

Instantly share code, notes, and snippets.

@dncrht
Last active February 5, 2022 15:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dncrht/e76d3e29c9e172e71b63e77a881e9e98 to your computer and use it in GitHub Desktop.
Save dncrht/e76d3e29c9e172e71b63e77a881e9e98 to your computer and use it in GitHub Desktop.
Income tax calculator - Calculadora IRPF
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