{-# 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}