{-# 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 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 :: ON479 Maybe -> ON479 Maybe
fixON479 = (ON479 Maybe -> ON479 Maybe) -> ON479 Maybe -> ON479 Maybe
forall a. Eq a => (a -> a) -> a -> a
fixEq ((ON479 Maybe -> ON479 Maybe) -> ON479 Maybe -> ON479 Maybe)
-> (ON479 Maybe -> ON479 Maybe) -> ON479 Maybe -> ON479 Maybe
forall a b. (a -> b) -> a -> b
$ \on479 :: ON479 Maybe
on479@ON479{Page2 Maybe
Page1 Maybe
page1 :: Page1 Maybe
page2 :: Page2 Maybe
page2 :: forall (line :: * -> *). ON479 line -> Page2 line
page1 :: forall (line :: * -> *). ON479 line -> Page1 line
..}-> ON479{page1 :: Page1 Maybe
page1 = Page1 Maybe -> Page1 Maybe
fixPage1 Page1 Maybe
page1,
page2 :: Page2 Maybe
page2 = ON479 Maybe -> Page2 Maybe -> Page2 Maybe
fixPage2 ON479 Maybe
on479 Page2 Maybe
page2}
fixPage1 :: Page1 Maybe -> Page1 Maybe
fixPage1 :: Page1 Maybe -> Page1 Maybe
fixPage1 = (Page1 Maybe -> Page1 Maybe) -> Page1 Maybe -> Page1 Maybe
forall a. Eq a => (a -> a) -> a -> a
fixEq ((Page1 Maybe -> Page1 Maybe) -> Page1 Maybe -> Page1 Maybe)
-> (Page1 Maybe -> Page1 Maybe) -> Page1 Maybe -> Page1 Maybe
forall a b. (a -> b) -> a -> b
$ \page :: Page1 Maybe
page@Page1{Maybe Rational
Maybe Centi
SubCalculation Maybe
line_63050_childcare :: Maybe Centi
line4_homecare_copy :: Maybe Centi
line5_allowable :: Maybe Rational
line6_fraction :: Maybe Centi
line7_netIncome_copy :: Maybe Centi
line8_spouse_copy :: Maybe Centi
line9_sum :: Maybe Centi
line10_base :: Maybe Centi
line11_difference :: Maybe Centi
line12_rate :: Maybe Rational
line13_fraction :: SubCalculation Maybe
line_63095_difference :: SubCalculation Maybe
line_63100_transit :: Maybe Centi
line_63100_fraction :: Maybe Centi
line16_sum :: Maybe Centi
line16_sum :: forall (line :: * -> *). Page1 line -> line Centi
line_63100_fraction :: forall (line :: * -> *). Page1 line -> line Centi
line_63100_transit :: forall (line :: * -> *). Page1 line -> line Centi
line_63095_difference :: forall (line :: * -> *). Page1 line -> SubCalculation line
line13_fraction :: forall (line :: * -> *). Page1 line -> SubCalculation line
line12_rate :: forall (line :: * -> *). Page1 line -> line Rational
line11_difference :: forall (line :: * -> *). Page1 line -> line Centi
line10_base :: forall (line :: * -> *). Page1 line -> line Centi
line9_sum :: forall (line :: * -> *). Page1 line -> line Centi
line8_spouse_copy :: forall (line :: * -> *). Page1 line -> line Centi
line7_netIncome_copy :: forall (line :: * -> *). Page1 line -> line Centi
line6_fraction :: forall (line :: * -> *). Page1 line -> line Centi
line5_allowable :: forall (line :: * -> *). Page1 line -> line Rational
line4_homecare_copy :: forall (line :: * -> *). Page1 line -> line Centi
line_63050_childcare :: forall (line :: * -> *). Page1 line -> line Centi
..}-> Page1 Maybe
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 id $ line12_rate `fractionOf` line11_difference,
line_63095_difference = fixSubCalculation id $ 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 Maybe -> Page2 Maybe -> Page2 Maybe
fixPage2 ON479 Maybe
on479 = (Page2 Maybe -> Page2 Maybe) -> Page2 Maybe -> Page2 Maybe
forall a. Eq a => (a -> a) -> a -> a
fixEq ((Page2 Maybe -> Page2 Maybe) -> Page2 Maybe -> Page2 Maybe)
-> (Page2 Maybe -> Page2 Maybe) -> Page2 Maybe -> Page2 Maybe
forall a b. (a -> b) -> a -> b
$ \page2 :: Page2 Maybe
page2@Page2{Maybe Bool
Maybe Word
Maybe Text
Maybe Centi
line17_copy :: Maybe Centi
line_63110_contributions :: Maybe Centi
line_63110_credit :: Maybe Centi
line_63220_fromT1221 :: Maybe Centi
line_63220_fraction :: Maybe Centi
line_63260_placements :: Maybe Word
line_63265_partnership :: Maybe Bool
line_63270_business :: Maybe Text
line_63300_total :: Maybe Centi
line23_credits :: Maybe Centi
line23_credits :: forall (line :: * -> *). Page2 line -> line Centi
line_63300_total :: forall (line :: * -> *). Page2 line -> line Centi
line_63270_business :: forall (line :: * -> *). Page2 line -> line Text
line_63265_partnership :: forall (line :: * -> *). Page2 line -> line Bool
line_63260_placements :: forall (line :: * -> *). Page2 line -> line Word
line_63220_fraction :: forall (line :: * -> *). Page2 line -> line Centi
line_63220_fromT1221 :: forall (line :: * -> *). Page2 line -> line Centi
line_63110_credit :: forall (line :: * -> *). Page2 line -> line Centi
line_63110_contributions :: forall (line :: * -> *). Page2 line -> line Centi
line17_copy :: forall (line :: * -> *). Page2 line -> line Centi
..}-> Page2 Maybe
page2{
line17_copy = on479.page1.line16_sum,
line_63110_credit = if line_63110_contributions >= Just 3691 then Just 1622.08 else line_63110_credit,
line_63220_fraction = (0.05 *) <$> line_63220_fromT1221,
line23_credits = totalOf [line17_copy, line_63110_credit, line_63220_fraction, line_63300_total]}