{-# 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
page8 :: forall (line :: * -> *). T1 line -> Page8 line
page7 :: forall (line :: * -> *). T1 line -> Page7 line
page6 :: forall (line :: * -> *). T1 line -> Page6 line
page5 :: forall (line :: * -> *). T1 line -> Page5 line
page4 :: forall (line :: * -> *). T1 line -> Page4 line
page3 :: forall (line :: * -> *). T1 line -> Page3 line
page2 :: forall (line :: * -> *). T1 line -> Page2 line
page1 :: forall (line :: * -> *). T1 line -> Page1 line
..}-> T1{page1 :: Page1 Maybe
page1 = Page1 Maybe -> Page1 Maybe
fixPage1 Page1 Maybe
page1,
                                page2 :: Page2 Maybe
page2 = Page2 Maybe -> Page2 Maybe
fixPage2 Page2 Maybe
page2,
                                page3 :: Page3 Maybe
page3 = Page3 Maybe -> Page3 Maybe
fixPage3 Page3 Maybe
page3,
                                page4 :: Page4 Maybe
page4 = T1 Maybe -> Page4 Maybe -> Page4 Maybe
fixPage4 T1 Maybe
t1 Page4 Maybe
page4,
                                page5 :: Page5 Maybe
page5 = HasCallStack => T1 Maybe -> Page5 Maybe -> Page5 Maybe
T1 Maybe -> Page5 Maybe -> Page5 Maybe
fixPage5 T1 Maybe
t1 Page5 Maybe
page5,
                                page6 :: Page6 Maybe
page6 = T1 Maybe -> Page6 Maybe -> Page6 Maybe
fixPage6 T1 Maybe
t1 Page6 Maybe
page6,
                                page7 :: Page7 Maybe
page7 = T1 Maybe -> Page7 Maybe -> Page7 Maybe
fixPage7 T1 Maybe
t1 Page7 Maybe
page7,
                                page8 :: 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{selfEmployment :: 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
line_14300_Amount :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi
line_14299_Amount :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi
line_14100_Amount :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi
line_14099_Amount :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi
line_13900_Amount :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi
line_13899_Amount :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi
line_13700_Amount :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi
line_13699_Amount :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi
line_13500_Amount :: forall (line :: * -> *). SelfEmploymentIncome line -> line Centi
line_13499_Amount :: 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_12701_CapitalGainsReduction :: Maybe Centi
line16_difference :: SubCalculation Maybe
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
line23_sum :: Maybe Centi
line29_sum :: SubCalculation Maybe
line30_sum :: Maybe Centi
line_14400_WorkersCompBen :: Maybe Centi
line_14500_SocialAssistPay :: Maybe Centi
line_14600_NetFedSupplements :: Maybe Centi
line_14700_sum :: SubCalculation Maybe
line_15000_TotalIncome :: Maybe Centi
line_15000_TotalIncome :: forall (line :: * -> *). Page3 line -> line Centi
line_14700_sum :: forall (line :: * -> *). Page3 line -> SubCalculation line
line_14600_NetFedSupplements :: forall (line :: * -> *). Page3 line -> line Centi
line_14500_SocialAssistPay :: forall (line :: * -> *). Page3 line -> line Centi
line_14400_WorkersCompBen :: forall (line :: * -> *). Page3 line -> line Centi
line30_sum :: forall (line :: * -> *). Page3 line -> line Centi
line29_sum :: forall (line :: * -> *). Page3 line -> SubCalculation line
line23_sum :: forall (line :: * -> *). Page3 line -> line Centi
line_13010_TaxableScholarship :: forall (line :: * -> *). Page3 line -> line Centi
line_13000_OtherIncomeSource :: forall (line :: * -> *). Page3 line -> line Text
line_13000_OtherIncome :: forall (line :: * -> *). Page3 line -> line Centi
line_12906_OtherFHSAIncome :: forall (line :: * -> *). Page3 line -> line Centi
line_12905_FHSAIncome :: forall (line :: * -> *). Page3 line -> line Centi
line_12900_RRSPIncome :: forall (line :: * -> *). Page3 line -> line Centi
line_12800_Amount :: forall (line :: * -> *). Page3 line -> line Centi
line_12799_Amount :: forall (line :: * -> *). Page3 line -> line Centi
line16_difference :: forall (line :: * -> *). Page3 line -> SubCalculation line
line_12701_CapitalGainsReduction :: forall (line :: * -> *). Page3 line -> line Centi
line_12700_TaxableCapitalGains :: forall (line :: * -> *). Page3 line -> line Centi
line_12600_Amount :: forall (line :: * -> *). Page3 line -> line Centi
line_12599_12600_RentalIncome :: forall (line :: * -> *). Page3 line -> line Centi
line_12500_RDSP :: forall (line :: * -> *). Page3 line -> line Centi
line_12200_PartnershipIncome :: forall (line :: * -> *). Page3 line -> line Centi
line_12100_InvestmentIncome :: forall (line :: * -> *). Page3 line -> line Centi
line_12010_OtherTaxableDividends :: forall (line :: * -> *). Page3 line -> line Centi
line_12000_TaxableDividends :: forall (line :: * -> *). Page3 line -> line Centi
line_11905_Employmentmaternity :: forall (line :: * -> *). Page3 line -> line Centi
line_11900_EmploymentInsurance :: forall (line :: * -> *). Page3 line -> line Centi
line_11701_UCCBDesignated :: forall (line :: * -> *). Page3 line -> line Centi
line_11700_UCCB :: forall (line :: * -> *). Page3 line -> line Centi
line_11600_ElectedSplitPension :: forall (line :: * -> *). Page3 line -> line Centi
line_11500_OtherPensions :: forall (line :: * -> *). Page3 line -> line Centi
line_11410_DisabilityBenefits :: forall (line :: * -> *). Page3 line -> line Centi
line_11400_CPP_QPP :: forall (line :: * -> *). Page3 line -> line Centi
line_11300_OldAgeSecurityPension :: forall (line :: * -> *). Page3 line -> line Centi
line_10400_OtherEmploymentIncome :: forall (line :: * -> *). Page3 line -> line Centi
line_10130_sf :: forall (line :: * -> *). Page3 line -> line Centi
line_10120_Commissions :: forall (line :: * -> *). Page3 line -> line Centi
line_10105_Taxexemptamount :: forall (line :: * -> *). Page3 line -> line Centi
line_10100_EmploymentIncome :: forall (line :: * -> *). Page3 line -> line Centi
..}-> Page3 Maybe
page{
   line16_difference = fixSubCalculation id $
                       nonNegativeDifference line_12700_TaxableCapitalGains line_12701_CapitalGainsReduction,
   line23_sum = 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,
                         line16_difference.result,
                         line_12800_Amount,
                         line_12900_RRSPIncome,
                         line_12905_FHSAIncome,
                         line_12906_OtherFHSAIncome,
                         line_13000_OtherIncome,
                         line_13010_TaxableScholarship],
   line29_sum = fixSubCalculation id $
                totalOf [line_13500_Amount,
                         line_13700_Amount,
                         line_13900_Amount,
                         line_14100_Amount,
                         line_14300_Amount],
   line30_sum = totalOf [line23_sum, line29_sum.result],
   line_14700_sum = fixSubCalculation id $
                    totalOf [line_14400_WorkersCompBen,
                             line_14500_SocialAssistPay,
                             line_14600_NetFedSupplements],
   line_15000_TotalIncome = totalOf [line30_sum, line_14700_sum.result]}

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_21698_Amount :: 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
line_23600_NetIncome :: forall (line :: * -> *). Page4 line -> line Centi
line_23500_SocialBenefits :: forall (line :: * -> *). Page4 line -> line Centi
line_23400_NetBeforeAdjust :: forall (line :: * -> *). Page4 line -> line Centi
line_23300_sum :: forall (line :: * -> *). Page4 line -> SubCalculation line
line_23200_Specify :: forall (line :: * -> *). Page4 line -> line Text
line_23200_OtherDeductions :: forall (line :: * -> *). Page4 line -> line Centi
line_23100_ClergyResDeduction :: forall (line :: * -> *). Page4 line -> line Centi
line_22900_OtherEmployExpenses :: forall (line :: * -> *). Page4 line -> line Centi
line_22400_XplorationDevExpenses :: forall (line :: * -> *). Page4 line -> line Centi
line_22300_DeductionPPIP :: forall (line :: * -> *). Page4 line -> line Centi
line_22215_DeductionCPP_QPP :: forall (line :: * -> *). Page4 line -> line Centi
line_22200_CPP_QPP_Contributions :: forall (line :: * -> *). Page4 line -> line Centi
line_22100_CarryingChargesInterest :: forall (line :: * -> *). Page4 line -> line Centi
line_22000_Amount :: forall (line :: * -> *). Page4 line -> line Centi
line_21999_Amount :: forall (line :: * -> *). Page4 line -> line Centi
line_21900_MovingExpenses :: forall (line :: * -> *). Page4 line -> line Centi
line_21700_Amount :: forall (line :: * -> *). Page4 line -> line Centi
line_21699_Amount :: forall (line :: * -> *). Page4 line -> line Centi
line_21698_Amount :: forall (line :: * -> *). Page4 line -> line Centi
line_21500_DisabilityDeduction :: forall (line :: * -> *). Page4 line -> line Centi
line_21400_ChildCareExpenses :: forall (line :: * -> *). Page4 line -> line Centi
line_21300_UCCBRepayment :: forall (line :: * -> *). Page4 line -> line Centi
line_21200_Dues :: forall (line :: * -> *). Page4 line -> line Centi
line_21000_SplitPensionDeduction :: forall (line :: * -> *). Page4 line -> line Centi
line_20810_PRPP :: forall (line :: * -> *). Page4 line -> line Centi
line_20805_FHSADeduction :: forall (line :: * -> *). Page4 line -> line Centi
line_20800_RRSPDeduction :: forall (line :: * -> *). Page4 line -> line Centi
line_20700_RPPDeduction :: forall (line :: * -> *). Page4 line -> line Centi
line_20600_PensionAdjustment :: forall (line :: * -> *). Page4 line -> line Centi
line_15000_TotalIncome_2 :: forall (line :: * -> *). Page4 line -> line Centi
..}-> Page4 Maybe
page{
   line_15000_TotalIncome_2 = t1.page3.line_15000_TotalIncome,
   line_23300_sum = fixSubCalculation id $
                    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
partB_FederalTaxCredits :: forall (line :: * -> *). Page5 line -> Page5PartB line
partA_FederalTax :: forall (line :: * -> *). Page5 line -> Page5PartA line
step4_TaxableIncome :: forall (line :: * -> *). Page5 line -> Step4 line
..}-> Page5{
   step4_TaxableIncome :: Step4 Maybe
step4_TaxableIncome = T1 Maybe -> Step4 Maybe -> Step4 Maybe
fixStep4 T1 Maybe
t1 Step4 Maybe
step4_TaxableIncome,
   partA_FederalTax :: 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,
   partB_FederalTaxCredits :: 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
pageBreakCarry :: Maybe Centi
line_30800 :: Maybe Centi
line_31000 :: Maybe Centi
line_31200 :: Maybe Centi
line_31205 :: Maybe Centi
line_31210 :: Maybe Centi
line_31215 :: Maybe Centi
line_31217 :: Maybe Centi
line_31220 :: Maybe Centi
line_31240 :: Maybe Centi
line_31260 :: Maybe Centi
line_31270 :: Maybe Centi
line_31285 :: Maybe Centi
line_31300 :: Maybe Centi
line_31350 :: Maybe Centi
line102_sum :: SubCalculation Maybe
line_31400 :: Maybe Centi
line104_sum :: Maybe Centi
line_31600 :: Maybe Centi
line_31800 :: Maybe Centi
line107_sum :: Maybe Centi
line_31900 :: Maybe Centi
line_32300 :: Maybe Centi
line_32400 :: Maybe Centi
line_32600 :: Maybe Centi
line112_sum :: Maybe Centi
medical_expenses :: MedicalExpenses Maybe
line_33200_sum :: SubCalculation Maybe
line_33500 :: Maybe Centi
line120_taxCreditRate :: Maybe Rational
line_33800 :: Maybe Centi
line_34900 :: Maybe Centi
line_35000 :: Maybe Centi
line_35000 :: forall (line :: * -> *). Page6 line -> line Centi
line_34900 :: forall (line :: * -> *). Page6 line -> line Centi
line_33800 :: forall (line :: * -> *). Page6 line -> line Centi
line120_taxCreditRate :: forall (line :: * -> *). Page6 line -> line Rational
line_33500 :: forall (line :: * -> *). Page6 line -> line Centi
line_33200_sum :: forall (line :: * -> *). Page6 line -> SubCalculation line
medical_expenses :: forall (line :: * -> *). Page6 line -> MedicalExpenses line
line112_sum :: forall (line :: * -> *). Page6 line -> line Centi
line_32600 :: forall (line :: * -> *). Page6 line -> line Centi
line_32400 :: forall (line :: * -> *). Page6 line -> line Centi
line_32300 :: forall (line :: * -> *). Page6 line -> line Centi
line_31900 :: forall (line :: * -> *). Page6 line -> line Centi
line107_sum :: forall (line :: * -> *). Page6 line -> line Centi
line_31800 :: forall (line :: * -> *). Page6 line -> line Centi
line_31600 :: forall (line :: * -> *). Page6 line -> line Centi
line104_sum :: forall (line :: * -> *). Page6 line -> line Centi
line_31400 :: forall (line :: * -> *). Page6 line -> line Centi
line102_sum :: forall (line :: * -> *). Page6 line -> SubCalculation line
line_31350 :: forall (line :: * -> *). Page6 line -> line Centi
line_31300 :: forall (line :: * -> *). Page6 line -> line Centi
line_31285 :: forall (line :: * -> *). Page6 line -> line Centi
line_31270 :: forall (line :: * -> *). Page6 line -> line Centi
line_31260 :: forall (line :: * -> *). Page6 line -> line Centi
line_31240 :: forall (line :: * -> *). Page6 line -> line Centi
line_31220 :: forall (line :: * -> *). Page6 line -> line Centi
line_31217 :: forall (line :: * -> *). Page6 line -> line Centi
line_31215 :: forall (line :: * -> *). Page6 line -> line Centi
line_31210 :: forall (line :: * -> *). Page6 line -> line Centi
line_31205 :: forall (line :: * -> *). Page6 line -> line Centi
line_31200 :: forall (line :: * -> *). Page6 line -> line Centi
line_31000 :: forall (line :: * -> *). Page6 line -> line Centi
line_30800 :: forall (line :: * -> *). Page6 line -> line Centi
pageBreakCarry :: forall (line :: * -> *). Page6 line -> line Centi
..}-> Page6 Maybe
page{
   pageBreakCarry = t1.page5.partB_FederalTaxCredits.pageBreakSummary,
   line_31260 = minimum [Just 1433,
                        totalOf [t1.page3.line_10100_EmploymentIncome, t1.page3.line_10400_OtherEmploymentIncome]],
   line102_sum = fixSubCalculation id $
                 totalOf [line_30800,
                          line_31000,
                          line_31200,
                          line_31205,
                          line_31210,
                          line_31215,
                          line_31217,
                          line_31220,
                          line_31240,
                          line_31260,
                          line_31270,
                          line_31285,
                          line_31300,
                          line_31350],
   line104_sum = totalOf [pageBreakCarry, line102_sum.result, line_31400],
   line107_sum = totalOf [line104_sum, line_31600, line_31800],
   line112_sum = totalOf [line107_sum, line_31900, line_32300, line_32400, line_32600],
   medical_expenses = fixMedicalExpenses t1 medical_expenses,
   line_33200_sum = fixSubCalculation id $ totalOf [medical_expenses.difference, medical_expenses.otherDependants],
   line_33500 = totalOf [line112_sum, line_33200_sum.result],
   line_33800 = line120_taxCreditRate `fractionOf` line_33500,
   line_35000 = totalOf [line_33800, line_34900]}

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
partC_NetFederalTax :: forall (line :: * -> *). Page7 line -> Page7PartC line
partC_NetFederalTax, Page7Step6 Maybe
step6_RefundOrBalanceOwing :: Page7Step6 Maybe
step6_RefundOrBalanceOwing :: forall (line :: * -> *). Page7 line -> Page7Step6 line
step6_RefundOrBalanceOwing}-> Page7{
   partC_NetFederalTax :: Page7PartC Maybe
partC_NetFederalTax = T1 Maybe -> Page7PartC Maybe -> Page7PartC Maybe
fixPage7PartC T1 Maybe
t1 Page7PartC Maybe
partC_NetFederalTax,
   step6_RefundOrBalanceOwing :: 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
line_48400_Refund :: Maybe Centi
line_48500_BalanceOwing :: Maybe Centi
telephone :: Maybe Centi
date :: Maybe Centi
taxPreparer :: TaxPreparer Maybe
line1_ONOpportunitiesFund :: Maybe Centi
line_46500 :: Maybe Centi
line_46600 :: Maybe Centi
line_46600 :: forall (line :: * -> *). Page8 line -> line Centi
line_46500 :: forall (line :: * -> *). Page8 line -> line Centi
line1_ONOpportunitiesFund :: forall (line :: * -> *). Page8 line -> line Centi
taxPreparer :: forall (line :: * -> *). Page8 line -> TaxPreparer line
date :: forall (line :: * -> *). Page8 line -> line Centi
telephone :: forall (line :: * -> *). Page8 line -> line Centi
line_48500_BalanceOwing :: forall (line :: * -> *). Page8 line -> line Centi
line_48400_Refund :: forall (line :: * -> *). Page8 line -> line Centi
step6_RefundOrBalanceOwing :: forall (line :: * -> *). Page8 line -> Page8Step6 line
..}-> Page8{
   step6_RefundOrBalanceOwing :: Page8Step6 Maybe
step6_RefundOrBalanceOwing = T1 Maybe -> Page8Step6 Maybe -> Page8Step6 Maybe
fixPage8Step6 T1 Maybe
t1 Page8Step6 Maybe
step6_RefundOrBalanceOwing,
   line_48400_Refund :: Maybe Centi
line_48400_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,
   line_48500_BalanceOwing :: Maybe Centi
line_48500_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,
   line_46600 :: 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
line_48400_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
line1_ONOpportunitiesFund :: Maybe Centi
line_46500 :: Maybe Centi
line_46500 :: Maybe Centi
line1_ONOpportunitiesFund :: Maybe Centi
taxPreparer :: TaxPreparer Maybe
date :: Maybe Centi
telephone :: 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_24901_SecurityDeductions :: Maybe Centi
line_25000_OtherPayDeductions :: Maybe Centi
line_25100_PartnershipLosses :: Maybe Centi
line_25200_NoncapitalLosses :: Maybe Centi
line_25300_NetCapitalLosses :: Maybe Centi
line_25395_BusinessTransfer :: 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_sum :: SubCalculation Maybe
line72_difference :: Maybe Centi
line_25999_CapitalGainsReductionAddBack :: Maybe Centi
line_26000_TaxableIncome :: Maybe Centi
line_26000_TaxableIncome :: forall (line :: * -> *). Step4 line -> line Centi
line_25999_CapitalGainsReductionAddBack :: forall (line :: * -> *). Step4 line -> line Centi
line72_difference :: forall (line :: * -> *). Step4 line -> line Centi
line_25700_sum :: forall (line :: * -> *). Step4 line -> SubCalculation line
line_25600_AdditionalDeductions_Specify :: forall (line :: * -> *). Step4 line -> line Text
line_25600_AdditionalDeductions_Amount :: forall (line :: * -> *). Step4 line -> line Centi
line_25500_NorthernDeductions :: forall (line :: * -> *). Step4 line -> line Centi
line_25400_CapitalGainsDeduction :: forall (line :: * -> *). Step4 line -> line Centi
line_25395_BusinessTransfer :: forall (line :: * -> *). Step4 line -> line Centi
line_25300_NetCapitalLosses :: forall (line :: * -> *). Step4 line -> line Centi
line_25200_NoncapitalLosses :: forall (line :: * -> *). Step4 line -> line Centi
line_25100_PartnershipLosses :: forall (line :: * -> *). Step4 line -> line Centi
line_25000_OtherPayDeductions :: forall (line :: * -> *). Step4 line -> line Centi
line_24901_SecurityDeductions :: forall (line :: * -> *). Step4 line -> line Centi
line_24900_SecurityDeductions :: forall (line :: * -> *). Step4 line -> line Centi
line_24400_MilitaryPoliceDeduction :: forall (line :: * -> *). Step4 line -> line Centi
line_23600_NetIncome_2 :: forall (line :: * -> *). Step4 line -> line Centi
..}-> Step4 Maybe
step{
   line_23600_NetIncome_2 = t1.page4.line_23600_NetIncome,
   line_25700_sum = fixSubCalculation id $
                    totalOf [line_24400_MilitaryPoliceDeduction,
                             line_24900_SecurityDeductions,
                             line_24901_SecurityDeductions,
                             line_25000_OtherPayDeductions,
                             line_25100_PartnershipLosses,
                             line_25200_NoncapitalLosses,
                             line_25300_NetCapitalLosses,
                             line_25395_BusinessTransfer,
                             line_25400_CapitalGainsDeduction,
                             line_25500_NorthernDeductions,
                             line_25600_AdditionalDeductions_Amount],
   line72_difference = nonNegativeDifference line_23600_NetIncome_2 line_25700_sum.result,
   line_26000_TaxableIncome = totalOf [line72_difference, line_25999_CapitalGainsReductionAddBack]}

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
column5 :: forall (line :: * -> *). Page5PartA line -> TaxIncomeBracket line
column4 :: forall (line :: * -> *). Page5PartA line -> TaxIncomeBracket line
column3 :: forall (line :: * -> *). Page5PartA line -> TaxIncomeBracket line
column2 :: forall (line :: * -> *). Page5PartA line -> TaxIncomeBracket line
column1 :: 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
line_30000 :: Maybe Centi
line_30100 :: Maybe Centi
line_30300 :: Maybe Centi
line_30400 :: Maybe Centi
line_30425 :: Maybe Centi
line_30450 :: Maybe Centi
line_30499_ChildrenNum :: Maybe Word
line_30500 :: Maybe Centi
pageBreakSummary :: Maybe Centi
pageBreakSummary :: forall (line :: * -> *). Page5PartB line -> line Centi
line_30500 :: forall (line :: * -> *). Page5PartB line -> line Centi
line_30499_ChildrenNum :: forall (line :: * -> *). Page5PartB line -> line Word
line_30450 :: forall (line :: * -> *). Page5PartB line -> line Centi
line_30425 :: forall (line :: * -> *). Page5PartB line -> line Centi
line_30400 :: forall (line :: * -> *). Page5PartB line -> line Centi
line_30300 :: forall (line :: * -> *). Page5PartB line -> line Centi
line_30100 :: forall (line :: * -> *). Page5PartB line -> line Centi
line_30000 :: forall (line :: * -> *). Page5PartB line -> line Centi
..}-> Page5PartB Maybe
part{
   line_30000 = let income = Centi -> Maybe Centi -> Centi
forall a. a -> Maybe a -> a
fromMaybe Centi
0 T1 Maybe
t1.page4.line_23600_NetIncome
                    threshold = Centi
173_205
                    ceiling = Centi
246_752
                in if income <= threshold then Just 15_705
                   else if income >= ceiling then Just 14_156
                        else Just $ 15_705 - (15_705 - 14_156) * (income - threshold) / (ceiling - threshold),
   line_30100 = if any ((<= (1959 :: 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
44_325
                         ceiling = Centi
102_925
                     in if income <= threshold then Just 8790
                        else if income >= ceiling then Just 0
                             else Just (8790 - (income - threshold) * 0.15)
                else Nothing,
   line_30500 =  ((* 2616) . fromIntegral) <$> line_30499_ChildrenNum,
   pageBreakSummary = totalOf [line_30000,
                               line_30100,
                               line_30300,
                               line_30400,
                               line_30425,
                               line_30450,
                               line_30500]}

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
familyExpenses :: forall (line :: * -> *). MedicalExpenses line -> line Centi
familyExpenses, Maybe Centi
taxableIncome :: Maybe Centi
taxableIncome :: forall (line :: * -> *). MedicalExpenses line -> line Centi
taxableIncome,
                                                          Maybe Centi
taxableIncomeFraction :: Maybe Centi
taxableIncomeFraction :: forall (line :: * -> *). MedicalExpenses line -> line Centi
taxableIncomeFraction, Maybe Centi
threshold :: Maybe Centi
threshold :: forall (line :: * -> *). MedicalExpenses line -> line Centi
threshold}-> MedicalExpenses Maybe
expenses{
   taxableIncome = t1.page4.line_23600_NetIncome,
   taxableIncomeFraction = (* 0.03) <$> taxableIncome,
   threshold = min 2759 <$> 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
tax_copy :: Maybe Centi
line_40424 :: Maybe Centi
line_40400 :: Maybe Centi
credits_copy :: Maybe Centi
line_40425 :: Maybe Centi
line_40427 :: Maybe Centi
line130_sum :: SubCalculation Maybe
line_42900 :: Maybe Centi
line132_foreignSurtax :: Maybe Centi
line133_sum :: Maybe Centi
line_40500 :: Maybe Centi
line135_difference :: Maybe Centi
line136_recapture :: Maybe Centi
line137_sum :: Maybe Centi
line138_logging :: Maybe Centi
line_40600 :: Maybe Centi
line_40900 :: Maybe Centi
line_41000 :: Maybe Centi
line_41200 :: Maybe Centi
line_41300 :: Maybe Centi
line_41400 :: Maybe Centi
line_41600_sum :: SubCalculation Maybe
line_41700 :: Maybe Centi
line_41500 :: Maybe Centi
line_41800 :: Maybe Centi
line_42000 :: Maybe Centi
line_42000 :: forall (line :: * -> *). Page7PartC line -> line Centi
line_41800 :: forall (line :: * -> *). Page7PartC line -> line Centi
line_41500 :: forall (line :: * -> *). Page7PartC line -> line Centi
line_41700 :: forall (line :: * -> *). Page7PartC line -> line Centi
line_41600_sum :: forall (line :: * -> *). Page7PartC line -> SubCalculation line
line_41400 :: forall (line :: * -> *). Page7PartC line -> line Centi
line_41300 :: forall (line :: * -> *). Page7PartC line -> line Centi
line_41200 :: forall (line :: * -> *). Page7PartC line -> line Centi
line_41000 :: forall (line :: * -> *). Page7PartC line -> line Centi
line_40900 :: forall (line :: * -> *). Page7PartC line -> line Centi
line_40600 :: forall (line :: * -> *). Page7PartC line -> line Centi
line138_logging :: forall (line :: * -> *). Page7PartC line -> line Centi
line137_sum :: forall (line :: * -> *). Page7PartC line -> line Centi
line136_recapture :: forall (line :: * -> *). Page7PartC line -> line Centi
line135_difference :: forall (line :: * -> *). Page7PartC line -> line Centi
line_40500 :: forall (line :: * -> *). Page7PartC line -> line Centi
line133_sum :: forall (line :: * -> *). Page7PartC line -> line Centi
line132_foreignSurtax :: forall (line :: * -> *). Page7PartC line -> line Centi
line_42900 :: forall (line :: * -> *). Page7PartC line -> line Centi
line130_sum :: forall (line :: * -> *). Page7PartC line -> SubCalculation line
line_40427 :: forall (line :: * -> *). Page7PartC line -> line Centi
line_40425 :: forall (line :: * -> *). Page7PartC line -> line Centi
credits_copy :: forall (line :: * -> *). Page7PartC line -> line Centi
line_40400 :: forall (line :: * -> *). Page7PartC line -> line Centi
line_40424 :: forall (line :: * -> *). Page7PartC line -> line Centi
tax_copy :: forall (line :: * -> *). Page7PartC line -> line Centi
..}-> Page7PartC Maybe
part{
   tax_copy = let partA = T1 Maybe
t1.page5.partA_FederalTax
              in partA.column1.equalsTax
                 <|> partA.column2.equalsTax
                 <|> partA.column3.equalsTax
                 <|> partA.column4.equalsTax
                 <|> partA.column5.equalsTax,
   line_40400 = totalOf [tax_copy, line_40424],
   credits_copy = t1.page6.line_35000,
   line_40425,
   line_40427,
   line130_sum = fixSubCalculation id $ totalOf [credits_copy, line_40425, line_40427],
   line_42900 = nonNegativeDifference line_40400 line130_sum.result,
   line133_sum = totalOf [line_42900, line132_foreignSurtax],
   line135_difference = difference line133_sum line_40500,
   line137_sum = totalOf [line135_difference, line136_recapture],
   line_40600 = nonNegativeDifference line137_sum line138_logging,
   line_41000 = case line_40900
               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,
   line_41600_sum = fixSubCalculation id $ totalOf [line_41000, line_41200, line_41400],
   line_41700 = nonNegativeDifference line_40600 line_41600_sum.result,
   line_42000 = totalOf [line_41700, line_41500, line_41800]}

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
tax_copy :: 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
line_43500_TotalPayable :: forall (line :: * -> *). Page7Step6 line -> line Centi
line_43200_FirstNationsTax :: forall (line :: * -> *). Page7Step6 line -> line Centi
line_42800_ProvTerrTax :: forall (line :: * -> *). Page7Step6 line -> line Centi
line_42200_SocialBenefits :: forall (line :: * -> *). Page7Step6 line -> line Centi
line_42120_EIPremiums :: forall (line :: * -> *). Page7Step6 line -> line Centi
line_42100_CPPContributions :: forall (line :: * -> *). Page7Step6 line -> line Centi
tax_copy :: forall (line :: * -> *). Page7Step6 line -> line Centi
..}-> Page7Step6 Maybe
step{
   tax_copy = t1.page7.partC_NetFederalTax.line_42000,
   line_43500_TotalPayable = totalOf [tax_copy, 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
line164_Refund_or_BalanceOwing :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_48200_sum :: forall (line :: * -> *). Page8Step6 line -> SubCalculation line
line_47900_ProvTerrCredits :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_47600_TaxPaid :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_47557 :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_47556 :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_47555_TaxPaid :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_46900 :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_46800 :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_45700_GST_HST_Rebate :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_45600_TrustTaxCredit :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_45400_InvestmentTaxCredit :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_45355_MHRTC :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_45350_CTC :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_45300_CWB :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_45200_MedicalExpense :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_45100_diff :: forall (line :: * -> *). Page8Step6 line -> SubCalculation line
line_31210_copy :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_45000_EIOverpayment :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_44800_CPPOverpayment :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_44100 :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_44000 :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_42900_copy :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_43850_diff :: forall (line :: * -> *). Page8Step6 line -> SubCalculation line
line_43800_TaxTransferQC :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_43700_Total_income_tax_ded :: forall (line :: * -> *). Page8Step6 line -> line Centi
line_43500_totalpayable :: 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 id $ difference line_43700_Total_income_tax_ded line_43800_TaxTransferQC,
   line_31210_copy = t1.page6.line_31210,
   line_45100_diff = fixSubCalculation id $ difference line_45000_EIOverpayment line_31210_copy,
   line_48200_sum = fixSubCalculation id $
                    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}