Follow me on Twitter!

Dont Trust This Guy why not take my word for it? A blog by Jim Jeffers

Ruby: Tax Estimator

I got bored a couple of weeks ago and wanted to figure out how much I’d be paying in taxes depending on how much I made. I wrote this little script in Ruby to give me a basic estimate of how much I’d owe. You can use it at your own risk or make it better and share it with me!

Here is the source:

# --------------------------------------------------------------------
# Amounts to analyze taxes for.
# --------------------------------------------------------------------
amounts = [40000, 50000, 60000]
pto = 80 # Specify amount of hours as integer

# --------------------------------------------------------------------
# Tax schedule for 2006 supplied by IRS
# (http://www.irs.gov/formspubs/article/0,,id=150856,00.html)
#
# Arizona tax information obtained from
# (http://dab.nfc.usda.gov/pubs/docs/taxformulas/formulas/statecitycounty/taxaz/taxaz.html)
# --------------------------------------------------------------------
tax_rates = [0.1, 0.15, 0.25, 0.28, 0.33, 0.35]
cutoff_levels = [0, 7550, 30650, 74200, 154800, 336550]
pre_tax_balances = [0, 755, 4220, 15107.5, 37675.5, 97653]
az_tax_rates = [0.1,0.19]
az_cutoff = 10000
work_hours = 52*40-pto

# --------------------------------------------------------------------
# Extend the numeric clas to accomodate formatting.
# --------------------------------------------------------------------
class Numeric
  def to_currency
    sprintf("$%0.2f", self)
  end

  def to_percent
    sprintf("%d%", self*100)
  end
end

# --------------------------------------------------------------------
# Calculate the amounts.
# --------------------------------------------------------------------
for amount in amounts

  # Determine the federal witholding bracket
  index = 0
  for cutoff in cutoff_levels
    if amount > cutoff then bracket = index end
    index += 1
  end

  # Determine the state tax withholding percentage
  (amount < az_cutoff) ? az_index = 0 : az_index = 1

  # Calculate withholding amounts and remaining income
  tax = (amount-cutoff_levels[bracket])*tax_rates[bracket] + pre_tax_balances[bracket]
  az_tax = tax * az_tax_rates[az_index]
  income = amount - tax - az_tax

  # Print out the results
  puts "---------------------------------------------------------------"
  puts "Income Analyses for #{amount.to_currency} w/ #{pto} hours of paid time off "
  puts "---------------------------------------------------------------"
  puts "This level of income would put you in the level #{bracket+1} tax bracket which charges #{tax_rates[bracket].to_percent}."
  puts "In addition this income qualifies for the #{az_tax_rates[az_index]} state income tax level."
  puts "Total income: #{income.to_currency} after #{tax.to_currency} in federal tax expenses and #{az_tax.to_currency} in state tax expenses.."
  puts "------------------------------\nPost Tax Income\n------------------------------"
  puts "Monthly income: #{(income/12).to_currency}"
  puts "Bi-Weekly income: #{(income/24).to_currency}"
  puts "------------------------------\nHourly Income\n------------------------------"
  puts "You are going to work #{work_hours} hours this year."
  puts "That will make up #{(work_hours.to_f/(365*12)).to_percent} percent of your active time."
  puts "Before tax your hourly income is #{(amount / work_hours).to_currency} taking paid time off into account."
  puts "After tax your hourly income is #{(income / work_hours).to_currency} taking paid time off into account."
  puts "\n\n"

end

Leave a Reply

Meta Information

This post was filed under code and tagged with: , , .

This Post as a Feed

The content of this post and it's comments can be subscribed to as an RSS feed.

DontTrustThisGuy.com and all contents copyright 2003-2007 by Jim Jeffers, unless otherwise noted.Written in valid XHTML and a participant of XFN while being powered by WordPress
Contents under Creative Commons License. Visual design, layout and Cascading Style Sheets may not be reused without permission.
Entries (RSS) and Comments (RSS)