packages feed

tax-ato-2025.1: src/Data/Tax/ATO/FY/FY2019.hs

-- This file is part of hs-tax-ato
-- Copyright (C) 2018  Fraser Tweedale
--
-- hs-tax-ato is free software: you can redistribute it and/or modify
-- it under the terms of the GNU Affero General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU Affero General Public License for more details.
--
-- You should have received a copy of the GNU Affero General Public License
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.

{-# LANGUAGE DataKinds #-}

-- | Tax tables for 2018–19 financial year.
module Data.Tax.ATO.FY.FY2019 (FY, fyProxy, tables) where

import Data.Proxy

import Data.Tax
import Data.Tax.ATO.Common
import Data.Tax.ATO.PrivateHealthInsuranceRebate
import qualified Data.Tax.ATO.FY.FY2018 as FY2018

type FY = 2019
fyProxy :: Proxy FY
fyProxy = Proxy

-- | In FY2019 the 37% threshold was increased from $87,000 to $90,000.
individualIncomeTax :: (Fractional a, Ord a) => Tax (Money a) (Money a)
individualIncomeTax = marginal'
  [ (18200, 0.19)
  , (37000, 0.325 - 0.19)
  , (90000, 0.37 - 0.325)
  , (180000, 0.45 - 0.37) ]

help, sfss :: (Fractional a, Ord a) => Tax (Money a) (Money a)
help = thresholds'
  [ (51957, 0.02),  (57730, 0.02)
  , (64307, 0.005), (70882, 0.005),  (74608, 0.005),  (80198, 0.005)
  , (86856, 0.005), (91426, 0.005), (100614, 0.005), (107214, 0.005) ]
sfss = thresholds' [(51957, 0.02), (64307, 0.01), (91426, 0.01)]

medicare :: (Fractional a) => MedicareLevyRatesAndThresholds a
medicare = MedicareLevyRatesAndThresholds
  { medicareLevyRate                                  = 0.02
  , medicareLevyThresholdIndividual                   = Money 22398
  , medicareLevyThresholdIndividualSeniorAndPensioner = Money 35418
  , medicareLevyThresholdFamily                       = Money 37794
  , medicareLevyThresholdFamilySeniorAndPensioner     = Money 49304
  , medicareLevyThresholdDependentChildIncrease       = Money  3471
  }

-- | The 37% threshold was increased from $87,000 to $90,000.
--
-- The new /low and middle income tax offset (LAMITO)/ was
-- introduced, in addition to LITO.
--
tables :: (Ord a, Fractional a) => TaxTables FY a
tables = TaxTables
  individualIncomeTax
  medicare
  (ttMedicareLevySurcharge FY2018.tables)
  help
  sfss
  (lowIncomeTaxOffset <> lamito)
  privateHealthInsuranceRebateRates

privateHealthInsuranceRebateRates
  :: (Fractional a) => PrivateHealthInsuranceRebateRates a
privateHealthInsuranceRebateRates =
  [ ( 90000, (0.25415, 0.25059), (0.29651, 0.29236), (0.33887, 0.33413) )
  , (105000, (0.16943, 0.16706), (0.21180, 0.20883), (0.25415, 0.25059) )
  , (140000, (0.08471, 0.08352), (0.12707, 0.12529), (0.16943, 0.16706) )
  ]