{-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedRecordDot #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} module Tax.Canada.Province.ON.ON479.Fix (ON479, fixON479) where import Control.Applicative (liftA2) import Control.Monad (guard, mfilter) import Data.Fixed (Centi) import Rank2 qualified import Tax.Canada.Province.ON.ON479.Types import Tax.Canada.Shared (fixSubCalculation, SubCalculation(result)) import Tax.Util (fixEq, fractionOf, nonNegativeDifference, totalOf) fixON479 :: ON479 Maybe -> ON479 Maybe fixON479 = fixEq $ \on479@ON479{..}-> ON479{page1 = fixPage1 page1, page2 = fixPage2 on479 page2} fixPage1 :: Page1 Maybe -> Page1 Maybe fixPage1 = fixEq $ \page@Page1{..}-> page{ line6_fraction = line5_allowable `fractionOf` line4_homecare_copy, line9_sum = totalOf [line7_netIncome_copy, line8_spouse_copy], line11_difference = nonNegativeDifference line9_sum line10_base, line13_fraction = fixSubCalculation $ line12_rate `fractionOf` line11_difference, line_63095_difference = fixSubCalculation $ nonNegativeDifference line6_fraction line13_fraction.result, line_63100_fraction = (0.15 *) <$> line_63100_transit, line16_sum = totalOf [line_63050_childcare, line_63095_difference.result, line_63100_fraction]} fixPage2 :: ON479 Maybe -> Page2 Maybe -> Page2 Maybe fixPage2 on479 = fixEq $ \page2@Page2{..}-> page2{ line17_copy = on479.page1.line16_sum, line_63110_credit = if line_63110_contributions >= Just 3531 then Just 1552 else line_63110_credit, -- TODO worksheet? line_63220_fraction = (0.05 *) <$> line_63220_fromT1221, line23_credits = totalOf [line17_copy, line_63110_credit, line_63220_fraction, line_63300_total]}