{-# LANGUAGE DataKinds #-}
module Data.Tax.ATO.FY.FY2022 (FY, fyProxy, tables) where
import Data.Proxy
import Control.Lens (review)
import Data.Tax
import Data.Tax.ATO.Common
import Data.Tax.ATO.PrivateHealthInsuranceRebate
import qualified Data.Tax.ATO.FY.FY2021 as FY2021
type FY = 2022
fyProxy :: Proxy FY
fyProxy :: Proxy FY
fyProxy = Proxy FY
forall {k} (t :: k). Proxy t
Proxy
help :: (Fractional a, Ord a) => Tax (Money a) (Money a)
help :: forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
help = [(a, a)] -> Tax (Money a) (Money a)
forall a.
(Fractional a, Ord a) =>
[(a, a)] -> Tax (Money a) (Money a)
thresholds'
[ (a
47014, a
0.01)
, (a
54283, a
0.01)
, (a
57539, a
0.005)
, (a
60992, a
0.005)
, (a
64652, a
0.005)
, (a
68530, a
0.005)
, (a
72642, a
0.005)
, (a
77002, a
0.005)
, (a
81621, a
0.005)
, (a
86519, a
0.005)
, (a
91710, a
0.005)
, (a
97213, a
0.005)
, (a
103046, a
0.005)
, (a
109228, a
0.005)
, (a
115782, a
0.005)
, (a
122729, a
0.005)
, (a
130093, a
0.005)
, (a
137898, a
0.005)
]
tables :: (Ord a, Fractional a) => TaxTables FY a
tables :: forall a. (Ord a, Fractional a) => TaxTables FY a
tables = 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 FY a
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
Tax (Money a) (Money a)
forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
FY2021.individualIncomeTax
(Money a -> Tax (Money a) (Money a)
forall a.
(Fractional a, Ord a) =>
Money a -> Tax (Money a) (Money a)
medicareLevy (AReview (Money a) a -> a -> Money a
forall b (m :: * -> *) t. MonadReader b m => AReview t b -> m t
review AReview (Money a) a
forall a b (p :: * -> * -> *) (f :: * -> *).
(Profunctor p, Functor f) =>
p a (f b) -> p (Money a) (f (Money b))
money a
23365))
(TaxTables FY a -> Tax (Money a) (Money a)
forall {k} (y :: k) a. TaxTables y a -> Tax (Money a) (Money a)
ttMedicareLevySurcharge TaxTables FY a
forall a. (Ord a, Fractional a) => TaxTables FY a
FY2021.tables)
Tax (Money a) (Money a)
forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
help
Tax (Money a) (Money a)
forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
help
(Tax (Money a) (Money a)
forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
lowIncomeTaxOffset2021 Tax (Money a) (Money a)
-> Tax (Money a) (Money a) -> Tax (Money a) (Money a)
forall a. Semigroup a => a -> a -> a
<> Tax (Money a) (Money a)
forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
lmito2022)
PrivateHealthInsuranceRebateRates a
forall a. Fractional a => PrivateHealthInsuranceRebateRates a
privateHealthInsuranceRebateRates
privateHealthInsuranceRebateRates
:: (Fractional a) => PrivateHealthInsuranceRebateRates a
privateHealthInsuranceRebateRates :: forall a. Fractional a => PrivateHealthInsuranceRebateRates a
privateHealthInsuranceRebateRates =
[ ( a
90000, (a
0.24608, a
0.24608), (a
0.28710, a
0.28710), (a
0.32812, a
0.32812) )
, (a
105000, (a
0.16405, a
0.16405), (a
0.20507, a
0.20507), (a
0.24608, a
0.24608) )
, (a
140000, (a
0.08202, a
0.08202), (a
0.12303, a
0.12303), (a
0.16405, a
0.16405) )
]
lmito2022 :: (Fractional a, Ord a) => Tax (Money a) (Money a)
lmito2022 :: forall a. (Fractional a, Ord a) => Tax (Money a) (Money a)
lmito2022 = Money a -> Tax (Money a) (Money a) -> Tax (Money a) (Money a)
forall a b. Ord a => a -> Tax b a -> Tax b a
limit Money a
forall a. Monoid a => a
mempty (Tax (Money a) (Money a) -> Tax (Money a) (Money a))
-> Tax (Money a) (Money a) -> Tax (Money a) (Money a)
forall a b. (a -> b) -> a -> b
$
Tax (Money a) (Money a)
-> Tax (Money a) (Money a) -> Tax (Money a) (Money a)
forall a b. Ord a => Tax b a -> Tax b a -> Tax b a
greaterOf (Money a -> Tax (Money a) (Money a)
forall a b. a -> Tax b a
lump (AReview (Money a) a -> a -> Money a
forall b (m :: * -> *) t. MonadReader b m => AReview t b -> m t
review AReview (Money a) a
forall a b (p :: * -> * -> *) (f :: * -> *).
(Profunctor p, Functor f) =>
p a (f b) -> p (Money a) (f (Money b))
money (-a
1500)))
( Money a -> Tax (Money a) (Money a)
forall a b. a -> Tax b a
lump (AReview (Money a) a -> a -> Money a
forall b (m :: * -> *) t. MonadReader b m => AReview t b -> m t
review AReview (Money a) a
forall a b (p :: * -> * -> *) (f :: * -> *).
(Profunctor p, Functor f) =>
p a (f b) -> p (Money a) (f (Money b))
money (-a
255))
Tax (Money a) (Money a)
-> Tax (Money a) (Money a) -> Tax (Money a) (Money a)
forall a. Semigroup a => a -> a -> a
<> Money a -> a -> Tax (Money a) (Money a)
forall a. (Num a, Ord a) => Money a -> a -> Tax (Money a) (Money a)
above (AReview (Money a) a -> a -> Money a
forall b (m :: * -> *) t. MonadReader b m => AReview t b -> m t
review AReview (Money a) a
forall a b (p :: * -> * -> *) (f :: * -> *).
(Profunctor p, Functor f) =>
p a (f b) -> p (Money a) (f (Money b))
money a
37000) (-a
0.075) )
Tax (Money a) (Money a)
-> Tax (Money a) (Money a) -> Tax (Money a) (Money a)
forall a. Semigroup a => a -> a -> a
<> Money a -> a -> Tax (Money a) (Money a)
forall a. (Num a, Ord a) => Money a -> a -> Tax (Money a) (Money a)
above (AReview (Money a) a -> a -> Money a
forall b (m :: * -> *) t. MonadReader b m => AReview t b -> m t
review AReview (Money a) a
forall a b (p :: * -> * -> *) (f :: * -> *).
(Profunctor p, Functor f) =>
p a (f b) -> p (Money a) (f (Money b))
money a
90000) a
0.03