{-# LANGUAGE DataKinds #-}
module Data.Tax.ATO.FY.FY2017 (tables, individualIncomeTax) where
import Control.Lens (review)
import Data.Tax
import Data.Tax.ATO.Common
import Data.Tax.ATO.PrivateHealthInsuranceRebate
individualIncomeTax :: (Fractional a, Ord a) => Tax (Money a) (Money a)
individualIncomeTax :: forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
individualIncomeTax = forall a.
(Fractional a, Ord a) =>
[(a, a)] -> Tax (Money a) (Money a)
marginal'
[ (a
18200, a
0.19)
, (a
37000, a
0.325 forall a. Num a => a -> a -> a
- a
0.19)
, (a
87000, a
0.37 forall a. Num a => a -> a -> a
- a
0.325)
, (a
180000, a
0.45 forall a. Num a => a -> a -> a
- a
0.37) ]
temporaryBudgetRepairLevy :: (Fractional a, Ord a) => Tax (Money a) (Money a)
temporaryBudgetRepairLevy :: forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
temporaryBudgetRepairLevy = forall a. (Num a, Ord a) => Money a -> a -> Tax (Money a) (Money a)
above (forall b (m :: * -> *) t. MonadReader b m => AReview t b -> m t
review forall a b. Iso (Money a) (Money b) a b
money a
180000) a
0.02
help, sfss :: (Fractional a, Ord a) => Tax (Money a) (Money a)
help :: forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
help = forall a.
(Fractional a, Ord a) =>
[(a, a)] -> Tax (Money a) (Money a)
thresholds'
[ (a
54869, a
0.04)
, (a
61120, a
0.005), (a
67369, a
0.005), (a
70910, a
0.005), (a
76223, a
0.005)
, (a
82551, a
0.005), (a
86895, a
0.005), (a
95627, a
0.005), (a
101900, a
0.005) ]
sfss :: forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
sfss = forall a.
(Fractional a, Ord a) =>
[(a, a)] -> Tax (Money a) (Money a)
thresholds' [(a
54869, a
0.02), (a
67369, a
0.01), (a
95627, a
0.01)]
tables :: (Ord a, Fractional a) => TaxTables 2017 a
tables :: forall a. (Ord a, Fractional a) => TaxTables 2017 a
tables = forall {k} (y :: k) a.
Tax (Money a) (Money a)
-> Tax (Money a) (Money a)
-> Tax (Money a) (Money a)
-> Tax (Money a) (Money a)
-> Tax (Money a) (Money a)
-> Tax (Money a) (Money a)
-> PrivateHealthInsuranceRebateRates a
-> TaxTables y a
TaxTables
(forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
individualIncomeTax forall a. Semigroup a => a -> a -> a
<> forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
temporaryBudgetRepairLevy)
(forall a.
(Fractional a, Ord a) =>
Money a -> Tax (Money a) (Money a)
medicareLevy (forall b (m :: * -> *) t. MonadReader b m => AReview t b -> m t
review forall a b. Iso (Money a) (Money b) a b
money a
21656))
forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
medicareLevySurcharge
forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
help
forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
sfss
forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
lowIncomeTaxOffset
forall a. Fractional a => PrivateHealthInsuranceRebateRates a
privateHealthInsuranceRebateRates
privateHealthInsuranceRebateRates
:: (Fractional a) => PrivateHealthInsuranceRebateRates a
privateHealthInsuranceRebateRates :: forall a. Fractional a => PrivateHealthInsuranceRebateRates a
privateHealthInsuranceRebateRates =
[ ( a
90000, (a
0.26791, a
0.25934), (a
0.31256, a
0.30256), (a
0.35722, a
0.34579) )
, (a
105000, (a
0.17861, a
0.17289), (a
0.22326, a
0.21612), (a
0.26791, a
0.25934) )
, (a
140000, (a
0.08930, a
0.08644), (a
0.13395, a
0.12966), (a
0.17861, a
0.17289) )
]