Sha256: 0b3c22745e65bfa7bf48a2740e04c6829bedfe3f4730ab034b4569923f3b1b48

Contents?: true

Size: 960 Bytes

Versions: 1

Compression:

Stored size: 960 Bytes

Contents

# frozen_string_literal: true

module TaxCalculator
  module Federal
    # 2021
    BRACKETS = {
      :married => {
        10.0 => 20_550.00,
        12.0 => 83_550.00,
        22.0 => 178_150.00,
        24.0 => 340_100.00,
        32.0 => 431_900.00,
        35.0 => 647_850.00,
        37.0 => :remaining
      }.freeze
    }.freeze

    def self.taxes_for(income)
      previous_amount = 0
      taxes_owed = 0

      BRACKETS[:married].each_pair do |bracket, amount|
        if amount == :remaining
          taxes_owed = taxes_owed + ((income - previous_amount) * (bracket / 100))
          break
        end

        if income < amount
          taxes_owed = taxes_owed + ((income - previous_amount) * (bracket / 100))
          break
        end

        taxes_owed = taxes_owed + ((amount - previous_amount) * (bracket / 100))
        previous_amount = amount
        break if amount == income
      end

      taxes_owed.round(2)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tax_calculator-0.4.0 lib/tax_calculator/federal.rb