{-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedRecordDot #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} module Tax.Canada.Province.AB.AB428.Fix (AB428, fixAB428) where import Data.Fixed (Centi) import Tax.Canada.Province.AB.AB428.Types import Tax.Canada.Shared (fixBaseCredit, fixMedicalExpenses, fixSubCalculation, fixTaxIncomeBracket, BaseCredit(cont), MedicalExpenses (difference), SubCalculation (result), TaxIncomeBracket (equalsTax)) import Tax.Util (fixEq, fractionOf, nonNegativeDifference, totalOf) fixAB428 :: AB428 Maybe -> AB428 Maybe fixAB428 :: AB428 Maybe -> AB428 Maybe fixAB428 = (AB428 Maybe -> AB428 Maybe) -> AB428 Maybe -> AB428 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((AB428 Maybe -> AB428 Maybe) -> AB428 Maybe -> AB428 Maybe) -> (AB428 Maybe -> AB428 Maybe) -> AB428 Maybe -> AB428 Maybe forall a b. (a -> b) -> a -> b $ \ab428 :: AB428 Maybe ab428@AB428{Page3 Maybe Page2 Maybe Page1 Maybe page1 :: Page1 Maybe page2 :: Page2 Maybe page3 :: Page3 Maybe page3 :: forall (line :: * -> *). AB428 line -> Page3 line page2 :: forall (line :: * -> *). AB428 line -> Page2 line page1 :: forall (line :: * -> *). AB428 line -> Page1 line ..}-> AB428{page1 :: Page1 Maybe page1 = Page1 Maybe -> Page1 Maybe fixPage1 Page1 Maybe page1, page2 :: Page2 Maybe page2 = AB428 Maybe -> Page2 Maybe -> Page2 Maybe fixPage2 AB428 Maybe ab428 Page2 Maybe page2, page3 :: Page3 Maybe page3 = AB428 Maybe -> Page3 Maybe -> Page3 Maybe fixPage3 AB428 Maybe ab428 Page3 Maybe page3} 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 $ \Page1{Maybe Centi Page1PartB Maybe Page1PartA Maybe income :: Maybe Centi partA :: Page1PartA Maybe partB :: Page1PartB Maybe partB :: forall (line :: * -> *). Page1 line -> Page1PartB line partA :: forall (line :: * -> *). Page1 line -> Page1PartA line income :: forall (line :: * -> *). Page1 line -> line Centi ..}-> Page1{ income :: Maybe Centi income = Maybe Centi income, partA :: Page1PartA Maybe partA = Maybe Centi -> Page1PartA Maybe -> Page1PartA Maybe fixPage1PartA Maybe Centi income Page1PartA Maybe partA, partB :: Page1PartB Maybe partB = Page1PartB Maybe -> Page1PartB Maybe fixPage1PartB Page1PartB Maybe partB} fixPage1PartA :: Maybe Centi -> Page1PartA Maybe -> Page1PartA Maybe fixPage1PartA :: Maybe Centi -> Page1PartA Maybe -> Page1PartA Maybe fixPage1PartA Maybe Centi income = (Page1PartA Maybe -> Page1PartA Maybe) -> Page1PartA Maybe -> Page1PartA Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page1PartA Maybe -> Page1PartA Maybe) -> Page1PartA Maybe -> Page1PartA Maybe) -> (Page1PartA Maybe -> Page1PartA Maybe) -> Page1PartA Maybe -> Page1PartA Maybe forall a b. (a -> b) -> a -> b $ \Page1PartA{TaxIncomeBracket Maybe column1 :: TaxIncomeBracket Maybe column2 :: TaxIncomeBracket Maybe column3 :: TaxIncomeBracket Maybe column4 :: TaxIncomeBracket Maybe column5 :: TaxIncomeBracket Maybe column5 :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line column4 :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line column3 :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line column2 :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line column1 :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line ..}-> Page1PartA{ column1 :: TaxIncomeBracket Maybe column1 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income (TaxIncomeBracket Maybe -> Maybe (TaxIncomeBracket Maybe) forall a. a -> Maybe a Just TaxIncomeBracket Maybe column2) TaxIncomeBracket Maybe column1, column2 :: TaxIncomeBracket Maybe column2 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income (TaxIncomeBracket Maybe -> Maybe (TaxIncomeBracket Maybe) forall a. a -> Maybe a Just TaxIncomeBracket Maybe column3) TaxIncomeBracket Maybe column2, column3 :: TaxIncomeBracket Maybe column3 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income (TaxIncomeBracket Maybe -> Maybe (TaxIncomeBracket Maybe) forall a. a -> Maybe a Just TaxIncomeBracket Maybe column4) TaxIncomeBracket Maybe column3, column4 :: TaxIncomeBracket Maybe column4 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income (TaxIncomeBracket Maybe -> Maybe (TaxIncomeBracket Maybe) forall a. a -> Maybe a Just TaxIncomeBracket Maybe column5) TaxIncomeBracket Maybe column4, column5 :: TaxIncomeBracket Maybe column5 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income Maybe (TaxIncomeBracket Maybe) forall a. Maybe a Nothing TaxIncomeBracket Maybe column5} fixPage1PartB :: Page1PartB Maybe -> Page1PartB Maybe fixPage1PartB :: Page1PartB Maybe -> Page1PartB Maybe fixPage1PartB = (Page1PartB Maybe -> Page1PartB Maybe) -> Page1PartB Maybe -> Page1PartB Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page1PartB Maybe -> Page1PartB Maybe) -> Page1PartB Maybe -> Page1PartB Maybe) -> (Page1PartB Maybe -> Page1PartB Maybe) -> Page1PartB Maybe -> Page1PartB Maybe forall a b. (a -> b) -> a -> b $ \part :: Page1PartB Maybe part@Page1PartB{Maybe Centi SubCalculation Maybe BaseCredit Maybe line9_basic :: Maybe Centi line10_age :: Maybe Centi spouseAmount :: BaseCredit Maybe dependantAmount :: BaseCredit Maybe line17_infirm :: Maybe Centi line18 :: Maybe Centi line19_cppQpp :: Maybe Centi line20_cppQpp :: Maybe Centi line21_employmentInsurance :: Maybe Centi line22_employmentInsurance :: Maybe Centi line23_adoption :: Maybe Centi line24_sum :: SubCalculation Maybe line25 :: Maybe Centi line25 :: forall (line :: * -> *). Page1PartB line -> line Centi line24_sum :: forall (line :: * -> *). Page1PartB line -> SubCalculation line line23_adoption :: forall (line :: * -> *). Page1PartB line -> line Centi line22_employmentInsurance :: forall (line :: * -> *). Page1PartB line -> line Centi line21_employmentInsurance :: forall (line :: * -> *). Page1PartB line -> line Centi line20_cppQpp :: forall (line :: * -> *). Page1PartB line -> line Centi line19_cppQpp :: forall (line :: * -> *). Page1PartB line -> line Centi line18 :: forall (line :: * -> *). Page1PartB line -> line Centi line17_infirm :: forall (line :: * -> *). Page1PartB line -> line Centi dependantAmount :: forall (line :: * -> *). Page1PartB line -> BaseCredit line spouseAmount :: forall (line :: * -> *). Page1PartB line -> BaseCredit line line10_age :: forall (line :: * -> *). Page1PartB line -> line Centi line9_basic :: forall (line :: * -> *). Page1PartB line -> line Centi ..}-> Page1PartB Maybe part{ line9_basic = Just 21885, spouseAmount = fixBaseCredit spouseAmount, dependantAmount = fixBaseCredit dependantAmount, line18 = totalOf [line9_basic, line10_age, spouseAmount.cont, dependantAmount.cont, line17_infirm], line24_sum = fixSubCalculation id $ totalOf [line19_cppQpp, line20_cppQpp, line21_employmentInsurance, line22_employmentInsurance, line23_adoption], line25 = totalOf [line18, line24_sum.result]} fixPage2 :: AB428 Maybe -> Page2 Maybe -> Page2 Maybe fixPage2 :: AB428 Maybe -> Page2 Maybe -> Page2 Maybe fixPage2 AB428 Maybe ab428 = (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{Page2PartB Maybe partB :: Page2PartB Maybe partB :: forall (line :: * -> *). Page2 line -> Page2PartB line ..}-> Page2{ partB :: Page2PartB Maybe partB = AB428 Maybe -> Page2PartB Maybe -> Page2PartB Maybe fixPage2PartB AB428 Maybe ab428 Page2PartB Maybe partB} fixPage2PartB :: AB428 Maybe -> Page2PartB Maybe -> Page2PartB Maybe fixPage2PartB :: AB428 Maybe -> Page2PartB Maybe -> Page2PartB Maybe fixPage2PartB AB428 Maybe ab428 = (Page2PartB Maybe -> Page2PartB Maybe) -> Page2PartB Maybe -> Page2PartB Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page2PartB Maybe -> Page2PartB Maybe) -> Page2PartB Maybe -> Page2PartB Maybe) -> (Page2PartB Maybe -> Page2PartB Maybe) -> Page2PartB Maybe -> Page2PartB Maybe forall a b. (a -> b) -> a -> b $ \part :: Page2PartB Maybe part@Page2PartB{Maybe Rational Maybe Centi SubCalculation Maybe MedicalExpenses Maybe Donations Maybe line26 :: Maybe Centi line27_pension :: Maybe Centi line28_caregiver :: Maybe Centi line29 :: Maybe Centi line30_disability :: Maybe Centi line31 :: Maybe Centi line32 :: Maybe Centi line33_interest :: Maybe Centi line34_education :: Maybe Centi line35_transferredSpouse :: Maybe Centi line36 :: Maybe Centi medicalExpenses :: MedicalExpenses Maybe line43 :: Maybe Centi line44_sum :: SubCalculation Maybe line45 :: Maybe Centi line46_rate :: Maybe Rational line47_fraction :: Maybe Centi donations :: Donations Maybe line50_sum :: SubCalculation Maybe line51 :: Maybe Centi line51 :: forall (line :: * -> *). Page2PartB line -> line Centi line50_sum :: forall (line :: * -> *). Page2PartB line -> SubCalculation line donations :: forall (line :: * -> *). Page2PartB line -> Donations line line47_fraction :: forall (line :: * -> *). Page2PartB line -> line Centi line46_rate :: forall (line :: * -> *). Page2PartB line -> line Rational line45 :: forall (line :: * -> *). Page2PartB line -> line Centi line44_sum :: forall (line :: * -> *). Page2PartB line -> SubCalculation line line43 :: forall (line :: * -> *). Page2PartB line -> line Centi medicalExpenses :: forall (line :: * -> *). Page2PartB line -> MedicalExpenses line line36 :: forall (line :: * -> *). Page2PartB line -> line Centi line35_transferredSpouse :: forall (line :: * -> *). Page2PartB line -> line Centi line34_education :: forall (line :: * -> *). Page2PartB line -> line Centi line33_interest :: forall (line :: * -> *). Page2PartB line -> line Centi line32 :: forall (line :: * -> *). Page2PartB line -> line Centi line31 :: forall (line :: * -> *). Page2PartB line -> line Centi line30_disability :: forall (line :: * -> *). Page2PartB line -> line Centi line29 :: forall (line :: * -> *). Page2PartB line -> line Centi line28_caregiver :: forall (line :: * -> *). Page2PartB line -> line Centi line27_pension :: forall (line :: * -> *). Page2PartB line -> line Centi line26 :: forall (line :: * -> *). Page2PartB line -> line Centi ..}-> Page2PartB Maybe part{ line26 = ab428.page1.partB.line25, line29 = totalOf [line26, line27_pension, line28_caregiver], line32 = totalOf [line29, line30_disability, line31], line36 = totalOf [line32, line33_interest, line34_education, line35_transferredSpouse], medicalExpenses = fixMedicalExpenses 2828 medicalExpenses, line44_sum = fixSubCalculation id $ totalOf [medicalExpenses.difference, line43], line45 = totalOf [line36, line44_sum.result], line47_fraction = line46_rate `fractionOf` line45, donations = fixDonations donations, line50_sum = fixSubCalculation id $ totalOf [donations.line48_fraction, donations.line49_fraction], line51 = totalOf [line47_fraction, line50_sum.result]} fixDonations :: Donations Maybe -> Donations Maybe fixDonations :: Donations Maybe -> Donations Maybe fixDonations = (Donations Maybe -> Donations Maybe) -> Donations Maybe -> Donations Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Donations Maybe -> Donations Maybe) -> Donations Maybe -> Donations Maybe) -> (Donations Maybe -> Donations Maybe) -> Donations Maybe -> Donations Maybe forall a b. (a -> b) -> a -> b $ \part :: Donations Maybe part@Donations{Maybe Centi line48_base :: Maybe Centi line48_fraction :: Maybe Centi line49_base :: Maybe Centi line49_fraction :: Maybe Centi line49_fraction :: forall (line :: * -> *). Donations line -> line Centi line49_base :: forall (line :: * -> *). Donations line -> line Centi line48_fraction :: forall (line :: * -> *). Donations line -> line Centi line48_base :: forall (line :: * -> *). Donations line -> line Centi ..} -> Donations Maybe part{ line48_fraction = Just 0.6 `fractionOf` line48_base, line49_fraction = Just 0.21 `fractionOf` line49_base} fixPage3 :: AB428 Maybe -> Page3 Maybe -> Page3 Maybe fixPage3 :: AB428 Maybe -> Page3 Maybe -> Page3 Maybe fixPage3 AB428 Maybe ab428 = (Page3 Maybe -> Page3 Maybe) -> Page3 Maybe -> Page3 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page3 Maybe -> Page3 Maybe) -> Page3 Maybe -> Page3 Maybe) -> (Page3 Maybe -> Page3 Maybe) -> Page3 Maybe -> Page3 Maybe forall a b. (a -> b) -> a -> b $ \page :: Page3 Maybe page@Page3{PartC Maybe partC :: PartC Maybe partC :: forall (line :: * -> *). Page3 line -> PartC line ..}-> Page3 Maybe page{ partC = fixPartC ab428 partC} fixPartC :: AB428 Maybe -> PartC Maybe -> PartC Maybe fixPartC :: AB428 Maybe -> PartC Maybe -> PartC Maybe fixPartC AB428 Maybe ab428 = (PartC Maybe -> PartC Maybe) -> PartC Maybe -> PartC Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((PartC Maybe -> PartC Maybe) -> PartC Maybe -> PartC Maybe) -> (PartC Maybe -> PartC Maybe) -> PartC Maybe -> PartC Maybe forall a b. (a -> b) -> a -> b $ \part :: PartC Maybe part@PartC{Maybe Centi SubCalculation Maybe line52_tax :: Maybe Centi line53_splitIncomeTax :: Maybe Centi line54 :: Maybe Centi line55_copy :: Maybe Centi line56_dividendCredits :: Maybe Centi line57_copy :: Maybe Centi line57_fraction :: Maybe Centi line58_sum :: SubCalculation Maybe line59_difference :: Maybe Centi line60_fromT691 :: Maybe Centi line60_fraction :: Maybe Centi line61 :: Maybe Centi line62_foreignCredit :: Maybe Centi line63_difference :: Maybe Centi line64_political :: Maybe Centi line65_political :: Maybe Centi line66_tax :: Maybe Centi line66_tax :: forall (line :: * -> *). PartC line -> line Centi line65_political :: forall (line :: * -> *). PartC line -> line Centi line64_political :: forall (line :: * -> *). PartC line -> line Centi line63_difference :: forall (line :: * -> *). PartC line -> line Centi line62_foreignCredit :: forall (line :: * -> *). PartC line -> line Centi line61 :: forall (line :: * -> *). PartC line -> line Centi line60_fraction :: forall (line :: * -> *). PartC line -> line Centi line60_fromT691 :: forall (line :: * -> *). PartC line -> line Centi line59_difference :: forall (line :: * -> *). PartC line -> line Centi line58_sum :: forall (line :: * -> *). PartC line -> SubCalculation line line57_fraction :: forall (line :: * -> *). PartC line -> line Centi line57_copy :: forall (line :: * -> *). PartC line -> line Centi line56_dividendCredits :: forall (line :: * -> *). PartC line -> line Centi line55_copy :: forall (line :: * -> *). PartC line -> line Centi line54 :: forall (line :: * -> *). PartC line -> line Centi line53_splitIncomeTax :: forall (line :: * -> *). PartC line -> line Centi line52_tax :: forall (line :: * -> *). PartC line -> line Centi ..}-> PartC Maybe part{ line52_tax = totalOf [ab428.page1.partA.column1.equalsTax, ab428.page1.partA.column2.equalsTax, ab428.page1.partA.column3.equalsTax, ab428.page1.partA.column4.equalsTax, ab428.page1.partA.column5.equalsTax], line54 = totalOf [line52_tax, line53_splitIncomeTax], line55_copy = ab428.page2.partB.line51, line57_fraction = Just 0.35 `fractionOf` line57_copy, line58_sum = fixSubCalculation id $ totalOf [line55_copy, line56_dividendCredits, line57_fraction], line59_difference = nonNegativeDifference line54 line58_sum.result, line60_fraction = Just 0.35 `fractionOf` line60_fromT691, line61 = totalOf [line59_difference, line60_fraction], line63_difference = nonNegativeDifference line61 line62_foreignCredit, line66_tax = nonNegativeDifference line63_difference line65_political}