{-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE NumericUnderscores #-} {-# LANGUAGE OverloadedRecordDot #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} module Tax.Canada.T1.Fix (T1, fixT1) where import Control.Applicative ((<|>)) import Data.Fixed (Centi) import Data.Maybe (fromMaybe) import Data.Text (Text) import Data.Time.Calendar (Year, dayPeriod) import GHC.Stack (HasCallStack) import Rank2 qualified import Tax.Canada.T1.Types import Tax.Canada.Shared (fixSubCalculation, fixTaxIncomeBracket, SubCalculation(result), TaxIncomeBracket (equalsTax)) import Tax.Util (difference, fixEq, fractionOf, nonNegativeDifference, totalOf) fixT1 :: HasCallStack => T1 Maybe -> T1 Maybe fixT1 :: HasCallStack => T1 Maybe -> T1 Maybe fixT1 = (T1 Maybe -> T1 Maybe) -> T1 Maybe -> T1 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((T1 Maybe -> T1 Maybe) -> T1 Maybe -> T1 Maybe) -> (T1 Maybe -> T1 Maybe) -> T1 Maybe -> T1 Maybe forall a b. (a -> b) -> a -> b $ \t1 :: T1 Maybe t1@T1{Page8 Maybe Page7 Maybe Page6 Maybe Page5 Maybe Page4 Maybe Page3 Maybe Page2 Maybe Page1 Maybe page1 :: Page1 Maybe page2 :: Page2 Maybe page3 :: Page3 Maybe page4 :: Page4 Maybe page5 :: Page5 Maybe page6 :: Page6 Maybe page7 :: Page7 Maybe page8 :: Page8 Maybe $sel:page1:T1 :: forall (line :: * -> *). T1 line -> Page1 line $sel:page2:T1 :: forall (line :: * -> *). T1 line -> Page2 line $sel:page3:T1 :: forall (line :: * -> *). T1 line -> Page3 line $sel:page4:T1 :: forall (line :: * -> *). T1 line -> Page4 line $sel:page5:T1 :: forall (line :: * -> *). T1 line -> Page5 line $sel:page6:T1 :: forall (line :: * -> *). T1 line -> Page6 line $sel:page7:T1 :: forall (line :: * -> *). T1 line -> Page7 line $sel:page8:T1 :: forall (line :: * -> *). T1 line -> Page8 line ..}-> T1{$sel:page1:T1 :: Page1 Maybe page1 = Page1 Maybe -> Page1 Maybe fixPage1 Page1 Maybe page1, $sel:page2:T1 :: Page2 Maybe page2 = Page2 Maybe -> Page2 Maybe fixPage2 Page2 Maybe page2, $sel:page3:T1 :: Page3 Maybe page3 = Page3 Maybe -> Page3 Maybe fixPage3 Page3 Maybe page3, $sel:page4:T1 :: Page4 Maybe page4 = T1 Maybe -> Page4 Maybe -> Page4 Maybe fixPage4 T1 Maybe t1 Page4 Maybe page4, $sel:page5:T1 :: Page5 Maybe page5 = HasCallStack => T1 Maybe -> Page5 Maybe -> Page5 Maybe T1 Maybe -> Page5 Maybe -> Page5 Maybe fixPage5 T1 Maybe t1 Page5 Maybe page5, $sel:page6:T1 :: Page6 Maybe page6 = T1 Maybe -> Page6 Maybe -> Page6 Maybe fixPage6 T1 Maybe t1 Page6 Maybe page6, $sel:page7:T1 :: Page7 Maybe page7 = T1 Maybe -> Page7 Maybe -> Page7 Maybe fixPage7 T1 Maybe t1 Page7 Maybe page7, $sel:page8:T1 :: Page8 Maybe page8 = T1 Maybe -> Page8 Maybe -> Page8 Maybe fixPage8 T1 Maybe t1 Page8 Maybe page8} fixPage1 :: Page1 Maybe -> Page1 Maybe fixPage1 :: Page1 Maybe -> Page1 Maybe fixPage1 = Page1 Maybe -> Page1 Maybe forall a. a -> a id fixPage2 :: Page2 Maybe -> Page2 Maybe fixPage2 :: Page2 Maybe -> Page2 Maybe fixPage2 = Page2 Maybe -> Page2 Maybe forall a. a -> a id fixPage3 :: Page3 Maybe -> Page3 Maybe fixPage3 :: Page3 Maybe -> Page3 Maybe fixPage3 = (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{$sel:selfEmployment:Page3 :: forall (line :: * -> *). Page3 line -> SelfEmploymentIncome line selfEmployment=SelfEmploymentIncome{Maybe Centi line_13499_Amount :: Maybe Centi line_13500_Amount :: Maybe Centi line_13699_Amount :: Maybe Centi line_13700_Amount :: Maybe Centi line_13899_Amount :: Maybe Centi line_13900_Amount :: Maybe Centi line_14099_Amount :: Maybe Centi line_14100_Amount :: Maybe Centi line_14299_Amount :: Maybe Centi line_14300_Amount :: Maybe Centi $sel:line_13499_Amount:SelfEmploymentIncome :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi $sel:line_13500_Amount:SelfEmploymentIncome :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi $sel:line_13699_Amount:SelfEmploymentIncome :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi $sel:line_13700_Amount:SelfEmploymentIncome :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi $sel:line_13899_Amount:SelfEmploymentIncome :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi $sel:line_13900_Amount:SelfEmploymentIncome :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi $sel:line_14099_Amount:SelfEmploymentIncome :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi $sel:line_14100_Amount:SelfEmploymentIncome :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi $sel:line_14299_Amount:SelfEmploymentIncome :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi $sel:line_14300_Amount:SelfEmploymentIncome :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi ..}, Maybe Text Maybe Centi SubCalculation Maybe line_10100_EmploymentIncome :: Maybe Centi line_10105_Taxexemptamount :: Maybe Centi line_10120_Commissions :: Maybe Centi line_10130_sf :: Maybe Centi line_10400_OtherEmploymentIncome :: Maybe Centi line_11300_OldAgeSecurityPension :: Maybe Centi line_11400_CPP_QPP :: Maybe Centi line_11410_DisabilityBenefits :: Maybe Centi line_11500_OtherPensions :: Maybe Centi line_11600_ElectedSplitPension :: Maybe Centi line_11700_UCCB :: Maybe Centi line_11701_UCCBDesignated :: Maybe Centi line_11900_EmploymentInsurance :: Maybe Centi line_11905_Employmentmaternity :: Maybe Centi line_12000_TaxableDividends :: Maybe Centi line_12010_OtherTaxableDividends :: Maybe Centi line_12100_InvestmentIncome :: Maybe Centi line_12200_PartnershipIncome :: Maybe Centi line_12500_RDSP :: Maybe Centi line_12599_12600_RentalIncome :: Maybe Centi line_12600_Amount :: Maybe Centi line_12700_TaxableCapitalGains :: Maybe Centi line_12799_Amount :: Maybe Centi line_12800_Amount :: Maybe Centi line_12900_RRSPIncome :: Maybe Centi line_12905_FHSAIncome :: Maybe Centi line_12906_OtherFHSAIncome :: Maybe Centi line_13000_OtherIncome :: Maybe Centi line_13000_OtherIncomeSource :: Maybe Text line_13010_TaxableScholarship :: Maybe Centi line_19 :: Maybe Centi line_25_sum :: SubCalculation Maybe line_26 :: Maybe Centi line_14400_WorkersCompBen :: Maybe Centi line_14500_SocialAssistPay :: Maybe Centi line_14600_NetFedSupplements :: Maybe Centi line_14700_EqualsAmount :: Maybe Centi line_14700_PlusAmount :: Maybe Centi line_15000_TotalIncome :: Maybe Centi $sel:line_10100_EmploymentIncome:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_10105_Taxexemptamount:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_10120_Commissions:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_10130_sf:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_10400_OtherEmploymentIncome:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_11300_OldAgeSecurityPension:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_11400_CPP_QPP:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_11410_DisabilityBenefits:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_11500_OtherPensions:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_11600_ElectedSplitPension:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_11700_UCCB:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_11701_UCCBDesignated:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_11900_EmploymentInsurance:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_11905_Employmentmaternity:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_12000_TaxableDividends:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_12010_OtherTaxableDividends:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_12100_InvestmentIncome:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_12200_PartnershipIncome:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_12500_RDSP:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_12599_12600_RentalIncome:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_12600_Amount:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_12700_TaxableCapitalGains:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_12799_Amount:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_12800_Amount:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_12900_RRSPIncome:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_12905_FHSAIncome:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_12906_OtherFHSAIncome:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_13000_OtherIncome:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_13000_OtherIncomeSource:Page3 :: forall (line :: * -> *). Page3 line -> line Text $sel:line_13010_TaxableScholarship:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_19:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_25_sum:Page3 :: forall (line :: * -> *). Page3 line -> SubCalculation line $sel:line_26:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_14400_WorkersCompBen:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_14500_SocialAssistPay:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_14600_NetFedSupplements:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_14700_EqualsAmount:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_14700_PlusAmount:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line_15000_TotalIncome:Page3 :: forall (line :: * -> *). Page3 line -> line Centi ..}-> Page3 Maybe page{ line_19 = totalOf [line_10100_EmploymentIncome , line_10400_OtherEmploymentIncome, line_11300_OldAgeSecurityPension, line_11400_CPP_QPP, line_11500_OtherPensions, line_11600_ElectedSplitPension, line_11700_UCCB, line_11900_EmploymentInsurance, line_12000_TaxableDividends, line_12100_InvestmentIncome, line_12200_PartnershipIncome, line_12500_RDSP, line_12600_Amount, line_12700_TaxableCapitalGains, line_12800_Amount, line_12900_RRSPIncome, line_12905_FHSAIncome, line_12906_OtherFHSAIncome, line_13000_OtherIncome, line_13010_TaxableScholarship], line_25_sum = fixSubCalculation $ totalOf [line_13500_Amount, line_13700_Amount, line_13900_Amount, line_14100_Amount, line_14300_Amount], line_26 = totalOf [line_19, line_25_sum.result], line_14700_EqualsAmount = totalOf [line_14400_WorkersCompBen, line_14500_SocialAssistPay, line_14600_NetFedSupplements], line_14700_PlusAmount = line_14700_EqualsAmount, line_15000_TotalIncome = totalOf [line_26, line_14700_PlusAmount]} fixPage4 :: T1 Maybe -> Page4 Maybe -> Page4 Maybe fixPage4 :: T1 Maybe -> Page4 Maybe -> Page4 Maybe fixPage4 T1 Maybe t1 = (Page4 Maybe -> Page4 Maybe) -> Page4 Maybe -> Page4 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page4 Maybe -> Page4 Maybe) -> Page4 Maybe -> Page4 Maybe) -> (Page4 Maybe -> Page4 Maybe) -> Page4 Maybe -> Page4 Maybe forall a b. (a -> b) -> a -> b $ \page :: Page4 Maybe page@Page4{Maybe Text Maybe Centi SubCalculation Maybe line_15000_TotalIncome_2 :: Maybe Centi line_20600_PensionAdjustment :: Maybe Centi line_20700_RPPDeduction :: Maybe Centi line_20800_RRSPDeduction :: Maybe Centi line_20805_FHSADeduction :: Maybe Centi line_20810_PRPP :: Maybe Centi line_21000_SplitPensionDeduction :: Maybe Centi line_21200_Dues :: Maybe Centi line_21300_UCCBRepayment :: Maybe Centi line_21400_ChildCareExpenses :: Maybe Centi line_21500_DisabilityDeduction :: Maybe Centi line_21699_Amount :: Maybe Centi line_21700_Amount :: Maybe Centi line_21900_MovingExpenses :: Maybe Centi line_21999_Amount :: Maybe Centi line_22000_Amount :: Maybe Centi line_22100_CarryingChargesInterest :: Maybe Centi line_22200_CPP_QPP_Contributions :: Maybe Centi line_22215_DeductionCPP_QPP :: Maybe Centi line_22300_DeductionPPIP :: Maybe Centi line_22400_XplorationDevExpenses :: Maybe Centi line_22900_OtherEmployExpenses :: Maybe Centi line_23100_ClergyResDeduction :: Maybe Centi line_23200_OtherDeductions :: Maybe Centi line_23200_Specify :: Maybe Text line_23300_sum :: SubCalculation Maybe line_23400_NetBeforeAdjust :: Maybe Centi line_23500_SocialBenefits :: Maybe Centi line_23600_NetIncome :: Maybe Centi $sel:line_15000_TotalIncome_2:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_20600_PensionAdjustment:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_20700_RPPDeduction:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_20800_RRSPDeduction:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_20805_FHSADeduction:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_20810_PRPP:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_21000_SplitPensionDeduction:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_21200_Dues:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_21300_UCCBRepayment:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_21400_ChildCareExpenses:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_21500_DisabilityDeduction:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_21699_Amount:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_21700_Amount:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_21900_MovingExpenses:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_21999_Amount:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_22000_Amount:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_22100_CarryingChargesInterest:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_22200_CPP_QPP_Contributions:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_22215_DeductionCPP_QPP:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_22300_DeductionPPIP:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_22400_XplorationDevExpenses:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_22900_OtherEmployExpenses:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_23100_ClergyResDeduction:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_23200_OtherDeductions:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_23200_Specify:Page4 :: forall (line :: * -> *). Page4 line -> line Text $sel:line_23300_sum:Page4 :: forall (line :: * -> *). Page4 line -> SubCalculation line $sel:line_23400_NetBeforeAdjust:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_23500_SocialBenefits:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line_23600_NetIncome:Page4 :: forall (line :: * -> *). Page4 line -> line Centi ..}-> Page4 Maybe page{ line_15000_TotalIncome_2 = t1.page3.line_15000_TotalIncome, line_23300_sum = fixSubCalculation $ totalOf [line_20700_RPPDeduction, line_20800_RRSPDeduction, line_20805_FHSADeduction, line_21000_SplitPensionDeduction, line_21200_Dues, line_21300_UCCBRepayment, line_21400_ChildCareExpenses, line_21500_DisabilityDeduction, line_21700_Amount, line_21900_MovingExpenses, line_22000_Amount, line_22100_CarryingChargesInterest, line_22200_CPP_QPP_Contributions, line_22215_DeductionCPP_QPP, line_22300_DeductionPPIP, line_22400_XplorationDevExpenses, line_22900_OtherEmployExpenses, line_23100_ClergyResDeduction, line_23200_OtherDeductions], line_23400_NetBeforeAdjust = nonNegativeDifference line_15000_TotalIncome_2 line_23300_sum.result, line_23600_NetIncome = nonNegativeDifference line_23400_NetBeforeAdjust line_23500_SocialBenefits} fixPage5 :: HasCallStack => T1 Maybe -> Page5 Maybe -> Page5 Maybe fixPage5 :: HasCallStack => T1 Maybe -> Page5 Maybe -> Page5 Maybe fixPage5 T1 Maybe t1 = (Page5 Maybe -> Page5 Maybe) -> Page5 Maybe -> Page5 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page5 Maybe -> Page5 Maybe) -> Page5 Maybe -> Page5 Maybe) -> (Page5 Maybe -> Page5 Maybe) -> Page5 Maybe -> Page5 Maybe forall a b. (a -> b) -> a -> b $ \Page5{Page5PartB Maybe Page5PartA Maybe Step4 Maybe step4_TaxableIncome :: Step4 Maybe partA_FederalTax :: Page5PartA Maybe partB_FederalTaxCredits :: Page5PartB Maybe $sel:step4_TaxableIncome:Page5 :: forall (line :: * -> *). Page5 line -> Step4 line $sel:partA_FederalTax:Page5 :: forall (line :: * -> *). Page5 line -> Page5PartA line $sel:partB_FederalTaxCredits:Page5 :: forall (line :: * -> *). Page5 line -> Page5PartB line ..}-> Page5{ $sel:step4_TaxableIncome:Page5 :: Step4 Maybe step4_TaxableIncome = T1 Maybe -> Step4 Maybe -> Step4 Maybe fixStep4 T1 Maybe t1 Step4 Maybe step4_TaxableIncome, $sel:partA_FederalTax:Page5 :: Page5PartA Maybe partA_FederalTax = HasCallStack => T1 Maybe -> Page5PartA Maybe -> Page5PartA Maybe T1 Maybe -> Page5PartA Maybe -> Page5PartA Maybe fixPage5PartA T1 Maybe t1 Page5PartA Maybe partA_FederalTax, $sel:partB_FederalTaxCredits:Page5 :: Page5PartB Maybe partB_FederalTaxCredits = T1 Maybe -> Page5PartB Maybe -> Page5PartB Maybe fixPage5PartB T1 Maybe t1 Page5PartB Maybe partB_FederalTaxCredits} fixPage6 :: T1 Maybe -> Page6 Maybe -> Page6 Maybe fixPage6 :: T1 Maybe -> Page6 Maybe -> Page6 Maybe fixPage6 T1 Maybe t1 = (Page6 Maybe -> Page6 Maybe) -> Page6 Maybe -> Page6 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page6 Maybe -> Page6 Maybe) -> Page6 Maybe -> Page6 Maybe) -> (Page6 Maybe -> Page6 Maybe) -> Page6 Maybe -> Page6 Maybe forall a b. (a -> b) -> a -> b $ \page :: Page6 Maybe page@Page6{Maybe Rational Maybe Centi SubCalculation Maybe MedicalExpenses Maybe line82 :: Maybe Centi line30800 :: Maybe Centi line31000 :: Maybe Centi line31200 :: Maybe Centi line31205 :: Maybe Centi line31210 :: Maybe Centi line31215 :: Maybe Centi line31217 :: Maybe Centi line31220 :: Maybe Centi line31240 :: Maybe Centi line31260 :: Maybe Centi line31270 :: Maybe Centi line31285 :: Maybe Centi line31300 :: Maybe Centi line31350 :: Maybe Centi line94_sum :: SubCalculation Maybe line31400 :: Maybe Centi line96 :: Maybe Centi line31600 :: Maybe Centi line31800 :: Maybe Centi line99 :: Maybe Centi line31900 :: Maybe Centi line32300 :: Maybe Centi line32400 :: Maybe Centi line32600 :: Maybe Centi line104 :: Maybe Centi medical_expenses :: MedicalExpenses Maybe line33200_sum :: SubCalculation Maybe line33500 :: Maybe Centi line112 :: Maybe Rational line33800 :: Maybe Centi line34900 :: Maybe Centi line35000 :: Maybe Centi $sel:line82:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line30800:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line31000:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line31200:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line31205:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line31210:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line31215:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line31217:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line31220:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line31240:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line31260:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line31270:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line31285:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line31300:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line31350:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line94_sum:Page6 :: forall (line :: * -> *). Page6 line -> SubCalculation line $sel:line31400:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line96:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line31600:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line31800:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line99:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line31900:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line32300:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line32400:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line32600:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line104:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:medical_expenses:Page6 :: forall (line :: * -> *). Page6 line -> MedicalExpenses line $sel:line33200_sum:Page6 :: forall (line :: * -> *). Page6 line -> SubCalculation line $sel:line33500:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line112:Page6 :: forall (line :: * -> *). Page6 line -> line Rational $sel:line33800:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line34900:Page6 :: forall (line :: * -> *). Page6 line -> line Centi $sel:line35000:Page6 :: forall (line :: * -> *). Page6 line -> line Centi ..}-> Page6 Maybe page{ line82 = t1.page5.partB_FederalTaxCredits.line_81, line31260 = minimum [Just 1368, totalOf [t1.page3.line_10100_EmploymentIncome, t1.page3.line_10400_OtherEmploymentIncome]], line94_sum = fixSubCalculation $ totalOf [line30800, line31000, line31200, line31205, line31210, line31215, line31217, line31220, line31240, line31260, line31270, line31285, line31300, line31350], line96 = totalOf [line82, line94_sum.result, line31400], line99 = totalOf [line96, line31600, line31800], line104 = totalOf [line99, line31900, line32300, line32400, line32600], medical_expenses = fixMedicalExpenses t1 medical_expenses, line33200_sum = fixSubCalculation $ totalOf [medical_expenses.difference, medical_expenses.otherDependants], line33500 = totalOf [line104, line33200_sum.result], line33800 = line112 `fractionOf` line33500, line35000 = totalOf [line33800, line34900]} fixPage7 :: T1 Maybe -> Page7 Maybe -> Page7 Maybe fixPage7 :: T1 Maybe -> Page7 Maybe -> Page7 Maybe fixPage7 T1 Maybe t1 = (Page7 Maybe -> Page7 Maybe) -> Page7 Maybe -> Page7 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page7 Maybe -> Page7 Maybe) -> Page7 Maybe -> Page7 Maybe) -> (Page7 Maybe -> Page7 Maybe) -> Page7 Maybe -> Page7 Maybe forall a b. (a -> b) -> a -> b $ \Page7{Page7PartC Maybe partC_NetFederalTax :: Page7PartC Maybe $sel:partC_NetFederalTax:Page7 :: forall (line :: * -> *). Page7 line -> Page7PartC line partC_NetFederalTax, Page7Step6 Maybe step6_RefundOrBalanceOwing :: Page7Step6 Maybe $sel:step6_RefundOrBalanceOwing:Page7 :: forall (line :: * -> *). Page7 line -> Page7Step6 line step6_RefundOrBalanceOwing}-> Page7{ $sel:partC_NetFederalTax:Page7 :: Page7PartC Maybe partC_NetFederalTax = T1 Maybe -> Page7PartC Maybe -> Page7PartC Maybe fixPage7PartC T1 Maybe t1 Page7PartC Maybe partC_NetFederalTax, $sel:step6_RefundOrBalanceOwing:Page7 :: Page7Step6 Maybe step6_RefundOrBalanceOwing = T1 Maybe -> Page7Step6 Maybe -> Page7Step6 Maybe fixPage7Step6 T1 Maybe t1 Page7Step6 Maybe step6_RefundOrBalanceOwing} fixPage8 :: T1 Maybe -> Page8 Maybe -> Page8 Maybe fixPage8 :: T1 Maybe -> Page8 Maybe -> Page8 Maybe fixPage8 T1 Maybe t1 = (Page8 Maybe -> Page8 Maybe) -> Page8 Maybe -> Page8 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page8 Maybe -> Page8 Maybe) -> Page8 Maybe -> Page8 Maybe) -> (Page8 Maybe -> Page8 Maybe) -> Page8 Maybe -> Page8 Maybe forall a b. (a -> b) -> a -> b $ \page :: Page8 Maybe page@Page8{Maybe Centi TaxPreparer Maybe Page8Step6 Maybe step6_RefundOrBalanceOwing :: Page8Step6 Maybe line48400_Refund :: Maybe Centi line48500_BalanceOwing :: Maybe Centi telephone :: Maybe Centi date :: Maybe Centi taxPreparer :: TaxPreparer Maybe line_1_ONOpportunitiesFund :: Maybe Centi line_46500 :: Maybe Centi line_46600 :: Maybe Centi $sel:step6_RefundOrBalanceOwing:Page8 :: forall (line :: * -> *). Page8 line -> Page8Step6 line $sel:line48400_Refund:Page8 :: forall (line :: * -> *). Page8 line -> line Centi $sel:line48500_BalanceOwing:Page8 :: forall (line :: * -> *). Page8 line -> line Centi $sel:telephone:Page8 :: forall (line :: * -> *). Page8 line -> line Centi $sel:date:Page8 :: forall (line :: * -> *). Page8 line -> line Centi $sel:taxPreparer:Page8 :: forall (line :: * -> *). Page8 line -> TaxPreparer line $sel:line_1_ONOpportunitiesFund:Page8 :: forall (line :: * -> *). Page8 line -> line Centi $sel:line_46500:Page8 :: forall (line :: * -> *). Page8 line -> line Centi $sel:line_46600:Page8 :: forall (line :: * -> *). Page8 line -> line Centi ..}-> Page8{ $sel:step6_RefundOrBalanceOwing:Page8 :: Page8Step6 Maybe step6_RefundOrBalanceOwing = T1 Maybe -> Page8Step6 Maybe -> Page8Step6 Maybe fixPage8Step6 T1 Maybe t1 Page8Step6 Maybe step6_RefundOrBalanceOwing, $sel:line48400_Refund:Page8 :: Maybe Centi line48400_Refund = Page8Step6 Maybe step6_RefundOrBalanceOwing.line164_Refund_or_BalanceOwing Maybe Centi -> (Centi -> Maybe Centi) -> Maybe Centi forall a b. Maybe a -> (a -> Maybe b) -> Maybe b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= \Centi x-> if Centi x Centi -> Centi -> Bool forall a. Ord a => a -> a -> Bool < Centi 0 then Centi -> Maybe Centi forall a. a -> Maybe a Just (Centi -> Centi forall a. Num a => a -> a negate Centi x) else Maybe Centi forall a. Maybe a Nothing, $sel:line48500_BalanceOwing:Page8 :: Maybe Centi line48500_BalanceOwing = Page8Step6 Maybe step6_RefundOrBalanceOwing.line164_Refund_or_BalanceOwing Maybe Centi -> (Centi -> Maybe Centi) -> Maybe Centi forall a b. Maybe a -> (a -> Maybe b) -> Maybe b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= \Centi x-> if Centi x Centi -> Centi -> Bool forall a. Ord a => a -> a -> Bool > Centi 0 then Centi -> Maybe Centi forall a. a -> Maybe a Just Centi x else Maybe Centi forall a. Maybe a Nothing, $sel:line_46600:Page8 :: Maybe Centi line_46600 = (-) (Centi -> Centi -> Centi) -> Maybe Centi -> Maybe (Centi -> Centi) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Maybe Centi line48400_Refund Maybe (Centi -> Centi) -> Maybe Centi -> Maybe Centi forall a b. Maybe (a -> b) -> Maybe a -> Maybe b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Maybe Centi line_46500, Maybe Centi TaxPreparer Maybe telephone :: Maybe Centi date :: Maybe Centi taxPreparer :: TaxPreparer Maybe line_1_ONOpportunitiesFund :: Maybe Centi line_46500 :: Maybe Centi $sel:telephone:Page8 :: Maybe Centi $sel:date:Page8 :: Maybe Centi $sel:taxPreparer:Page8 :: TaxPreparer Maybe $sel:line_1_ONOpportunitiesFund:Page8 :: Maybe Centi $sel:line_46500:Page8 :: Maybe Centi ..} fixStep4 :: T1 Maybe -> Step4 Maybe -> Step4 Maybe fixStep4 :: T1 Maybe -> Step4 Maybe -> Step4 Maybe fixStep4 T1 Maybe t1 = (Step4 Maybe -> Step4 Maybe) -> Step4 Maybe -> Step4 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Step4 Maybe -> Step4 Maybe) -> Step4 Maybe -> Step4 Maybe) -> (Step4 Maybe -> Step4 Maybe) -> Step4 Maybe -> Step4 Maybe forall a b. (a -> b) -> a -> b $ \step :: Step4 Maybe step@Step4{Maybe Text Maybe Centi SubCalculation Maybe line_23600_NetIncome_2 :: Maybe Centi line_24400_MilitaryPoliceDeduction :: Maybe Centi line_24900_SecurityDeductions :: Maybe Centi line_25000_OtherPayDeductions :: Maybe Centi line_25100_PartnershipLosses :: Maybe Centi line_25200_NoncapitalLosses :: Maybe Centi line_25300_NetCapitalLosses :: Maybe Centi line_25400_CapitalGainsDeduction :: Maybe Centi line_25500_NorthernDeductions :: Maybe Centi line_25600_AdditionalDeductions_Amount :: Maybe Centi line_25600_AdditionalDeductions_Specify :: Maybe Text line_25700_AddLines_sum :: SubCalculation Maybe line_26000_TaxableIncome :: Maybe Centi $sel:line_23600_NetIncome_2:Step4 :: forall (line :: * -> *). Step4 line -> line Centi $sel:line_24400_MilitaryPoliceDeduction:Step4 :: forall (line :: * -> *). Step4 line -> line Centi $sel:line_24900_SecurityDeductions:Step4 :: forall (line :: * -> *). Step4 line -> line Centi $sel:line_25000_OtherPayDeductions:Step4 :: forall (line :: * -> *). Step4 line -> line Centi $sel:line_25100_PartnershipLosses:Step4 :: forall (line :: * -> *). Step4 line -> line Centi $sel:line_25200_NoncapitalLosses:Step4 :: forall (line :: * -> *). Step4 line -> line Centi $sel:line_25300_NetCapitalLosses:Step4 :: forall (line :: * -> *). Step4 line -> line Centi $sel:line_25400_CapitalGainsDeduction:Step4 :: forall (line :: * -> *). Step4 line -> line Centi $sel:line_25500_NorthernDeductions:Step4 :: forall (line :: * -> *). Step4 line -> line Centi $sel:line_25600_AdditionalDeductions_Amount:Step4 :: forall (line :: * -> *). Step4 line -> line Centi $sel:line_25600_AdditionalDeductions_Specify:Step4 :: forall (line :: * -> *). Step4 line -> line Text $sel:line_25700_AddLines_sum:Step4 :: forall (line :: * -> *). Step4 line -> SubCalculation line $sel:line_26000_TaxableIncome:Step4 :: forall (line :: * -> *). Step4 line -> line Centi ..}-> Step4 Maybe step{ line_23600_NetIncome_2 = t1.page4.line_23600_NetIncome, line_25700_AddLines_sum = fixSubCalculation $ totalOf [line_24400_MilitaryPoliceDeduction, line_24900_SecurityDeductions, line_25000_OtherPayDeductions, line_25100_PartnershipLosses, line_25200_NoncapitalLosses, line_25300_NetCapitalLosses, line_25400_CapitalGainsDeduction, line_25500_NorthernDeductions, line_25600_AdditionalDeductions_Amount], line_26000_TaxableIncome = nonNegativeDifference line_23600_NetIncome_2 line_25700_AddLines_sum.result} fixPage5PartA :: HasCallStack => T1 Maybe -> Page5PartA Maybe -> Page5PartA Maybe fixPage5PartA :: HasCallStack => T1 Maybe -> Page5PartA Maybe -> Page5PartA Maybe fixPage5PartA T1 Maybe t1 = (Page5PartA Maybe -> Page5PartA Maybe) -> Page5PartA Maybe -> Page5PartA Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page5PartA Maybe -> Page5PartA Maybe) -> Page5PartA Maybe -> Page5PartA Maybe) -> (Page5PartA Maybe -> Page5PartA Maybe) -> Page5PartA Maybe -> Page5PartA Maybe forall a b. (a -> b) -> a -> b $ \part :: Page5PartA Maybe part@Page5PartA{TaxIncomeBracket Maybe column1 :: TaxIncomeBracket Maybe column2 :: TaxIncomeBracket Maybe column3 :: TaxIncomeBracket Maybe column4 :: TaxIncomeBracket Maybe column5 :: TaxIncomeBracket Maybe $sel:column1:Page5PartA :: forall (line :: * -> *). Page5PartA line -> TaxIncomeBracket line $sel:column2:Page5PartA :: forall (line :: * -> *). Page5PartA line -> TaxIncomeBracket line $sel:column3:Page5PartA :: forall (line :: * -> *). Page5PartA line -> TaxIncomeBracket line $sel:column4:Page5PartA :: forall (line :: * -> *). Page5PartA line -> TaxIncomeBracket line $sel:column5:Page5PartA :: forall (line :: * -> *). Page5PartA line -> TaxIncomeBracket line ..}-> Page5PartA Maybe part{ column1 = fixTaxIncomeBracket income (Just part.column2) part.column1, column2 = fixTaxIncomeBracket income (Just part.column3) part.column2, column3 = fixTaxIncomeBracket income (Just part.column4) part.column3, column4 = fixTaxIncomeBracket income (Just part.column5) part.column4, column5 = fixTaxIncomeBracket income Nothing part.column5} where income :: Maybe Centi income = T1 Maybe t1.page5.step4_TaxableIncome.line_26000_TaxableIncome fixPage5PartB :: T1 Maybe -> Page5PartB Maybe -> Page5PartB Maybe fixPage5PartB :: T1 Maybe -> Page5PartB Maybe -> Page5PartB Maybe fixPage5PartB T1 Maybe t1 = (Page5PartB Maybe -> Page5PartB Maybe) -> Page5PartB Maybe -> Page5PartB Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page5PartB Maybe -> Page5PartB Maybe) -> Page5PartB Maybe -> Page5PartB Maybe) -> (Page5PartB Maybe -> Page5PartB Maybe) -> Page5PartB Maybe -> Page5PartB Maybe forall a b. (a -> b) -> a -> b $ \part :: Page5PartB Maybe part@Page5PartB{Maybe Word Maybe Centi line30000 :: Maybe Centi line30100 :: Maybe Centi line30300 :: Maybe Centi line30400 :: Maybe Centi line30425 :: Maybe Centi line30450 :: Maybe Centi line30499_ChildrenNum :: Maybe Word line30500 :: Maybe Centi line_81 :: Maybe Centi $sel:line30000:Page5PartB :: forall (line :: * -> *). Page5PartB line -> line Centi $sel:line30100:Page5PartB :: forall (line :: * -> *). Page5PartB line -> line Centi $sel:line30300:Page5PartB :: forall (line :: * -> *). Page5PartB line -> line Centi $sel:line30400:Page5PartB :: forall (line :: * -> *). Page5PartB line -> line Centi $sel:line30425:Page5PartB :: forall (line :: * -> *). Page5PartB line -> line Centi $sel:line30450:Page5PartB :: forall (line :: * -> *). Page5PartB line -> line Centi $sel:line30499_ChildrenNum:Page5PartB :: forall (line :: * -> *). Page5PartB line -> line Word $sel:line30500:Page5PartB :: forall (line :: * -> *). Page5PartB line -> line Centi $sel:line_81:Page5PartB :: forall (line :: * -> *). Page5PartB line -> line Centi ..}-> Page5PartB Maybe part{ line30000 = let income = Centi -> Maybe Centi -> Centi forall a. a -> Maybe a -> a fromMaybe Centi 0 T1 Maybe t1.page4.line_23600_NetIncome threshold = Centi 165_430 ceiling = Centi 235_675 in if income <= threshold then Just 15_000 else if income >= ceiling then Just 13_520 else Just $ 15_000 - (15_000 - 13_250) * (income - threshold) / (ceiling - threshold), line30100 = if any ((<= (1958 :: Year)) . dayPeriod) t1.page1.identification.dateBirth then let income = Centi -> Maybe Centi -> Centi forall a. a -> Maybe a -> a fromMaybe Centi 0 T1 Maybe t1.page4.line_23600_NetIncome threshold = Centi 42_335 ceiling = Centi 98_309 in if income <= threshold then Just 8396 else if income >= ceiling then Just 0 else Just (8396 - (income - threshold) * 0.15) else Nothing, line30500 = ((* 2499) . fromIntegral) <$> line30499_ChildrenNum, line_81 = totalOf [line30000, line30100, line30300, line30400, line30425, line30450, line30500]} fixMedicalExpenses :: T1 Maybe -> MedicalExpenses Maybe -> MedicalExpenses Maybe fixMedicalExpenses :: T1 Maybe -> MedicalExpenses Maybe -> MedicalExpenses Maybe fixMedicalExpenses T1 Maybe t1 = (MedicalExpenses Maybe -> MedicalExpenses Maybe) -> MedicalExpenses Maybe -> MedicalExpenses Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((MedicalExpenses Maybe -> MedicalExpenses Maybe) -> MedicalExpenses Maybe -> MedicalExpenses Maybe) -> (MedicalExpenses Maybe -> MedicalExpenses Maybe) -> MedicalExpenses Maybe -> MedicalExpenses Maybe forall a b. (a -> b) -> a -> b $ \expenses :: MedicalExpenses Maybe expenses@MedicalExpenses{Maybe Centi familyExpenses :: Maybe Centi $sel:familyExpenses:MedicalExpenses :: forall (line :: * -> *). MedicalExpenses line -> line Centi familyExpenses, Maybe Centi taxableIncome :: Maybe Centi $sel:taxableIncome:MedicalExpenses :: forall (line :: * -> *). MedicalExpenses line -> line Centi taxableIncome, Maybe Centi taxableIncomeFraction :: Maybe Centi $sel:taxableIncomeFraction:MedicalExpenses :: forall (line :: * -> *). MedicalExpenses line -> line Centi taxableIncomeFraction, Maybe Centi threshold :: Maybe Centi $sel:threshold:MedicalExpenses :: forall (line :: * -> *). MedicalExpenses line -> line Centi threshold}-> MedicalExpenses Maybe expenses{ taxableIncome = t1.page4.line_23600_NetIncome, taxableIncomeFraction = (* 0.03) <$> taxableIncome, threshold = min 2635 <$> taxableIncomeFraction, difference = nonNegativeDifference familyExpenses threshold} fixPage7PartC :: T1 Maybe -> Page7PartC Maybe -> Page7PartC Maybe fixPage7PartC :: T1 Maybe -> Page7PartC Maybe -> Page7PartC Maybe fixPage7PartC T1 Maybe t1 = (Page7PartC Maybe -> Page7PartC Maybe) -> Page7PartC Maybe -> Page7PartC Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page7PartC Maybe -> Page7PartC Maybe) -> Page7PartC Maybe -> Page7PartC Maybe) -> (Page7PartC Maybe -> Page7PartC Maybe) -> Page7PartC Maybe -> Page7PartC Maybe forall a b. (a -> b) -> a -> b $ \part :: Page7PartC Maybe part@Page7PartC{Maybe Centi SubCalculation Maybe line116 :: Maybe Centi line40424 :: Maybe Centi line40400 :: Maybe Centi line119 :: Maybe Centi line40425 :: Maybe Centi line40427 :: Maybe Centi line122_sum :: SubCalculation Maybe line42900 :: Maybe Centi line124 :: Maybe Centi line125 :: Maybe Centi line40500 :: Maybe Centi line127 :: Maybe Centi line128 :: Maybe Centi line129 :: Maybe Centi line130 :: Maybe Centi line40600 :: Maybe Centi line40900 :: Maybe Centi line41000 :: Maybe Centi line41200 :: Maybe Centi line41300 :: Maybe Centi line41400 :: Maybe Centi line41600_sum :: SubCalculation Maybe line41700 :: Maybe Centi line41500 :: Maybe Centi line41800 :: Maybe Centi line42000 :: Maybe Centi $sel:line116:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line40424:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line40400:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line119:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line40425:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line40427:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line122_sum:Page7PartC :: forall (line :: * -> *). Page7PartC line -> SubCalculation line $sel:line42900:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line124:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line125:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line40500:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line127:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line128:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line129:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line130:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line40600:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line40900:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line41000:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line41200:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line41300:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line41400:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line41600_sum:Page7PartC :: forall (line :: * -> *). Page7PartC line -> SubCalculation line $sel:line41700:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line41500:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line41800:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi $sel:line42000:Page7PartC :: forall (line :: * -> *). Page7PartC line -> line Centi ..}-> Page7PartC Maybe part{ line116 = let partA = T1 Maybe t1.page5.partA_FederalTax in partA.column1.equalsTax <|> partA.column2.equalsTax <|> partA.column3.equalsTax <|> partA.column4.equalsTax <|> partA.column5.equalsTax, line40400 = totalOf [line116, line40424], line119 = t1.page6.line35000, line40425, line40427, line122_sum = fixSubCalculation $ totalOf [line119, line40425, line40427], line42900 = nonNegativeDifference line40400 line122_sum.result, line125 = totalOf [line42900, line124], line127 = difference line125 line40500, line129 = totalOf [line127, line128], line40600 = nonNegativeDifference line129 line130, line41000 = case line40900 of Just Centi x | Centi x Centi -> Centi -> Bool forall a. Ord a => a -> a -> Bool <= Centi 400 -> Centi -> Maybe Centi forall a. a -> Maybe a Just (Centi x Centi -> Centi -> Centi forall a. Num a => a -> a -> a * Centi 0.75) | Centi x Centi -> Centi -> Bool forall a. Ord a => a -> a -> Bool <= Centi 750 -> Centi -> Maybe Centi forall a. a -> Maybe a Just ((Centi x Centi -> Centi -> Centi forall a. Num a => a -> a -> a - Centi 400) Centi -> Centi -> Centi forall a. Num a => a -> a -> a * Centi 0.5 Centi -> Centi -> Centi forall a. Num a => a -> a -> a + Centi 300) | Centi x Centi -> Centi -> Bool forall a. Ord a => a -> a -> Bool <= Centi 1275 -> Centi -> Maybe Centi forall a. a -> Maybe a Just ((Centi x Centi -> Centi -> Centi forall a. Num a => a -> a -> a - Centi 750) Centi -> Centi -> Centi forall a. Num a => a -> a -> a * Centi 0.3333 Centi -> Centi -> Centi forall a. Num a => a -> a -> a + Centi 475) | Bool otherwise -> Centi -> Maybe Centi forall a. a -> Maybe a Just Centi 650 Maybe Centi Nothing -> Maybe Centi forall a. Maybe a Nothing, line41600_sum = fixSubCalculation $ totalOf [line41000, line41200, line41400], line41700 = nonNegativeDifference line40600 line41600_sum.result, line42000 = totalOf [line41700, line41500, line41800]} fixPage7Step6 :: T1 Maybe -> Page7Step6 Maybe -> Page7Step6 Maybe fixPage7Step6 :: T1 Maybe -> Page7Step6 Maybe -> Page7Step6 Maybe fixPage7Step6 T1 Maybe t1 = (Page7Step6 Maybe -> Page7Step6 Maybe) -> Page7Step6 Maybe -> Page7Step6 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page7Step6 Maybe -> Page7Step6 Maybe) -> Page7Step6 Maybe -> Page7Step6 Maybe) -> (Page7Step6 Maybe -> Page7Step6 Maybe) -> Page7Step6 Maybe -> Page7Step6 Maybe forall a b. (a -> b) -> a -> b $ \step :: Page7Step6 Maybe step@Page7Step6{Maybe Centi line140 :: Maybe Centi line_42100_CPPContributions :: Maybe Centi line_42120_EIPremiums :: Maybe Centi line_42200_SocialBenefits :: Maybe Centi line_42800_ProvTerrTax :: Maybe Centi line_43200_FirstNationsTax :: Maybe Centi line_43500_TotalPayable :: Maybe Centi $sel:line140:Page7Step6 :: forall (line :: * -> *). Page7Step6 line -> line Centi $sel:line_42100_CPPContributions:Page7Step6 :: forall (line :: * -> *). Page7Step6 line -> line Centi $sel:line_42120_EIPremiums:Page7Step6 :: forall (line :: * -> *). Page7Step6 line -> line Centi $sel:line_42200_SocialBenefits:Page7Step6 :: forall (line :: * -> *). Page7Step6 line -> line Centi $sel:line_42800_ProvTerrTax:Page7Step6 :: forall (line :: * -> *). Page7Step6 line -> line Centi $sel:line_43200_FirstNationsTax:Page7Step6 :: forall (line :: * -> *). Page7Step6 line -> line Centi $sel:line_43500_TotalPayable:Page7Step6 :: forall (line :: * -> *). Page7Step6 line -> line Centi ..}-> Page7Step6 Maybe step{ line140 = t1.page7.partC_NetFederalTax.line42000, line_43500_TotalPayable = totalOf [line140, line_42100_CPPContributions, line_42120_EIPremiums, line_42200_SocialBenefits, line_42800_ProvTerrTax]} fixPage8Step6 :: T1 Maybe -> Page8Step6 Maybe -> Page8Step6 Maybe fixPage8Step6 :: T1 Maybe -> Page8Step6 Maybe -> Page8Step6 Maybe fixPage8Step6 T1 Maybe t1 = (Page8Step6 Maybe -> Page8Step6 Maybe) -> Page8Step6 Maybe -> Page8Step6 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page8Step6 Maybe -> Page8Step6 Maybe) -> Page8Step6 Maybe -> Page8Step6 Maybe) -> (Page8Step6 Maybe -> Page8Step6 Maybe) -> Page8Step6 Maybe -> Page8Step6 Maybe forall a b. (a -> b) -> a -> b $ \step :: Page8Step6 Maybe step@Page8Step6{Maybe Centi SubCalculation Maybe line_43500_totalpayable :: Maybe Centi line_43700_Total_income_tax_ded :: Maybe Centi line_43800_TaxTransferQC :: Maybe Centi line_43850_diff :: SubCalculation Maybe line_42900_copy :: Maybe Centi line_44000 :: Maybe Centi line_44100 :: Maybe Centi line_44800_CPPOverpayment :: Maybe Centi line_45000_EIOverpayment :: Maybe Centi line_31210_copy :: Maybe Centi line_45100_diff :: SubCalculation Maybe line_45200_MedicalExpense :: Maybe Centi line_45300_CWB :: Maybe Centi line_45350_CTC :: Maybe Centi line_45355_MHRTC :: Maybe Centi line_45400_InvestmentTaxCredit :: Maybe Centi line_45600_TrustTaxCredit :: Maybe Centi line_45700_GST_HST_Rebate :: Maybe Centi line_46800 :: Maybe Centi line_46900 :: Maybe Centi line_47555_TaxPaid :: Maybe Centi line_47556 :: Maybe Centi line_47557 :: Maybe Centi line_47600_TaxPaid :: Maybe Centi line_47900_ProvTerrCredits :: Maybe Centi line_48200_sum :: SubCalculation Maybe line164_Refund_or_BalanceOwing :: Maybe Centi $sel:line_43500_totalpayable:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_43700_Total_income_tax_ded:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_43800_TaxTransferQC:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_43850_diff:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> SubCalculation line $sel:line_42900_copy:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_44000:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_44100:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_44800_CPPOverpayment:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_45000_EIOverpayment:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_31210_copy:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_45100_diff:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> SubCalculation line $sel:line_45200_MedicalExpense:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_45300_CWB:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_45350_CTC:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_45355_MHRTC:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_45400_InvestmentTaxCredit:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_45600_TrustTaxCredit:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_45700_GST_HST_Rebate:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_46800:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_46900:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_47555_TaxPaid:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_47556:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_47557:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_47600_TaxPaid:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_47900_ProvTerrCredits:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi $sel:line_48200_sum:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> SubCalculation line $sel:line164_Refund_or_BalanceOwing:Page8Step6 :: forall (line :: * -> *). Page8Step6 line -> line Centi ..}-> Page8Step6 Maybe step{ line_43500_totalpayable = t1.page7.step6_RefundOrBalanceOwing.line_43500_TotalPayable, line_46900 = (* 0.25) <$> line_46800, line_43850_diff = fixSubCalculation $ difference line_43700_Total_income_tax_ded line_43800_TaxTransferQC, line_31210_copy = t1.page6.line31210, line_45100_diff = fixSubCalculation $ difference line_45000_EIOverpayment line_31210_copy, line_48200_sum = fixSubCalculation $ totalOf [line_43850_diff.result, line_44000, line_45100_diff.result, line_44800_CPPOverpayment, line_45000_EIOverpayment, line_45200_MedicalExpense, line_45300_CWB, line_45350_CTC, line_45355_MHRTC, line_45400_InvestmentTaxCredit, line_45600_TrustTaxCredit, line_45700_GST_HST_Rebate, line_46900, line_47555_TaxPaid, line_47556, line_47557, line_47600_TaxPaid, line_47900_ProvTerrCredits], line164_Refund_or_BalanceOwing = difference line_43500_totalpayable line_48200_sum.result}