{-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedRecordDot #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} module Tax.Canada.Province.BC.BC428.Fix (BC428, fixBC428) where import Tax.Canada.Province.BC.BC428.Types import Tax.Canada.Shared (fixBaseCredit, fixMedicalExpenses, fixSubCalculation, fixTaxIncomeBracket, BaseCredit(cont), MedicalExpenses (difference), SubCalculation (result), TaxIncomeBracket (equalsTax)) import Tax.Util (fixEq, fractionOf, nonNegativeDifference, totalOf) fixBC428 :: BC428 Maybe -> BC428 Maybe fixBC428 :: BC428 Maybe -> BC428 Maybe fixBC428 = (BC428 Maybe -> BC428 Maybe) -> BC428 Maybe -> BC428 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((BC428 Maybe -> BC428 Maybe) -> BC428 Maybe -> BC428 Maybe) -> (BC428 Maybe -> BC428 Maybe) -> BC428 Maybe -> BC428 Maybe forall a b. (a -> b) -> a -> b $ \bc428 :: BC428 Maybe bc428@BC428{Page3 Maybe Page2 Maybe Page1 Maybe page1 :: Page1 Maybe page2 :: Page2 Maybe page3 :: Page3 Maybe page3 :: forall (line :: * -> *). BC428 line -> Page3 line page2 :: forall (line :: * -> *). BC428 line -> Page2 line page1 :: forall (line :: * -> *). BC428 line -> Page1 line ..}-> BC428{page1 :: Page1 Maybe page1 = Page1 Maybe -> Page1 Maybe fixPage1 Page1 Maybe page1, page2 :: Page2 Maybe page2 = BC428 Maybe -> Page2 Maybe -> Page2 Maybe fixPage2 BC428 Maybe bc428 Page2 Maybe page2, page3 :: Page3 Maybe page3 = BC428 Maybe -> Page3 Maybe -> Page3 Maybe fixPage3 BC428 Maybe bc428 Page3 Maybe page3} fixPage1 :: Page1 Maybe -> Page1 Maybe fixPage1 :: Page1 Maybe -> Page1 Maybe fixPage1 = (Page1 Maybe -> Page1 Maybe) -> Page1 Maybe -> Page1 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page1 Maybe -> Page1 Maybe) -> Page1 Maybe -> Page1 Maybe) -> (Page1 Maybe -> Page1 Maybe) -> Page1 Maybe -> Page1 Maybe forall a b. (a -> b) -> a -> b $ \Page1{Page1PartB Maybe Page1PartA Maybe partA :: Page1PartA Maybe partB :: Page1PartB Maybe partB :: forall (line :: * -> *). Page1 line -> Page1PartB line partA :: forall (line :: * -> *). Page1 line -> Page1PartA line ..}-> Page1{ partA :: Page1PartA Maybe partA = Page1PartA Maybe -> Page1PartA Maybe fixPage1PartA Page1PartA Maybe partA, partB :: Page1PartB Maybe partB = Page1PartB Maybe -> Page1PartB Maybe fixPage1PartB Page1PartB Maybe partB} fixPage1PartA :: Page1PartA Maybe -> Page1PartA Maybe fixPage1PartA :: Page1PartA Maybe -> Page1PartA Maybe fixPage1PartA = (Page1PartA Maybe -> Page1PartA Maybe) -> Page1PartA Maybe -> Page1PartA Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page1PartA Maybe -> Page1PartA Maybe) -> Page1PartA Maybe -> Page1PartA Maybe) -> (Page1PartA Maybe -> Page1PartA Maybe) -> Page1PartA Maybe -> Page1PartA Maybe forall a b. (a -> b) -> a -> b $ \Page1PartA{Maybe Centi TaxIncomeBracket Maybe income :: Maybe Centi column1 :: TaxIncomeBracket Maybe column2 :: TaxIncomeBracket Maybe column3 :: TaxIncomeBracket Maybe column4 :: TaxIncomeBracket Maybe column5 :: TaxIncomeBracket Maybe column6 :: TaxIncomeBracket Maybe column7 :: TaxIncomeBracket Maybe column7 :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line column6 :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line column5 :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line column4 :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line column3 :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line column2 :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line column1 :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line income :: forall (line :: * -> *). Page1PartA line -> line Centi ..}-> Page1PartA{ income :: Maybe Centi income = Maybe Centi income, column1 :: TaxIncomeBracket Maybe column1 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income (TaxIncomeBracket Maybe -> Maybe (TaxIncomeBracket Maybe) forall a. a -> Maybe a Just TaxIncomeBracket Maybe column2) TaxIncomeBracket Maybe column1, column2 :: TaxIncomeBracket Maybe column2 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income (TaxIncomeBracket Maybe -> Maybe (TaxIncomeBracket Maybe) forall a. a -> Maybe a Just TaxIncomeBracket Maybe column3) TaxIncomeBracket Maybe column2, column3 :: TaxIncomeBracket Maybe column3 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income (TaxIncomeBracket Maybe -> Maybe (TaxIncomeBracket Maybe) forall a. a -> Maybe a Just TaxIncomeBracket Maybe column4) TaxIncomeBracket Maybe column3, column4 :: TaxIncomeBracket Maybe column4 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income (TaxIncomeBracket Maybe -> Maybe (TaxIncomeBracket Maybe) forall a. a -> Maybe a Just TaxIncomeBracket Maybe column5) TaxIncomeBracket Maybe column4, column5 :: TaxIncomeBracket Maybe column5 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income (TaxIncomeBracket Maybe -> Maybe (TaxIncomeBracket Maybe) forall a. a -> Maybe a Just TaxIncomeBracket Maybe column6) TaxIncomeBracket Maybe column5, column6 :: TaxIncomeBracket Maybe column6 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income (TaxIncomeBracket Maybe -> Maybe (TaxIncomeBracket Maybe) forall a. a -> Maybe a Just TaxIncomeBracket Maybe column7) TaxIncomeBracket Maybe column6, column7 :: TaxIncomeBracket Maybe column7 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income Maybe (TaxIncomeBracket Maybe) forall a. Maybe a Nothing TaxIncomeBracket Maybe column7} fixPage1PartB :: Page1PartB Maybe -> Page1PartB Maybe fixPage1PartB :: Page1PartB Maybe -> Page1PartB Maybe fixPage1PartB = (Page1PartB Maybe -> Page1PartB Maybe) -> Page1PartB Maybe -> Page1PartB Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page1PartB Maybe -> Page1PartB Maybe) -> Page1PartB Maybe -> Page1PartB Maybe) -> (Page1PartB Maybe -> Page1PartB Maybe) -> Page1PartB Maybe -> Page1PartB Maybe forall a b. (a -> b) -> a -> b $ \part :: Page1PartB Maybe part@Page1PartB{Maybe Centi BaseCredit Maybe line16_basic :: Maybe Centi line17_age :: Maybe Centi spouseAmount :: BaseCredit Maybe dependantAmount :: BaseCredit Maybe line24_caregiver :: Maybe Centi line25 :: Maybe Centi line25 :: forall (line :: * -> *). Page1PartB line -> line Centi line24_caregiver :: forall (line :: * -> *). Page1PartB line -> line Centi dependantAmount :: forall (line :: * -> *). Page1PartB line -> BaseCredit line spouseAmount :: forall (line :: * -> *). Page1PartB line -> BaseCredit line line17_age :: forall (line :: * -> *). Page1PartB line -> line Centi line16_basic :: forall (line :: * -> *). Page1PartB line -> line Centi ..}-> Page1PartB Maybe part{ line16_basic = Just 12580, spouseAmount = fixBaseCredit spouseAmount, dependantAmount = fixBaseCredit dependantAmount, line25 = totalOf [line16_basic, line17_age, spouseAmount.cont, dependantAmount.cont, line24_caregiver]} fixPage2 :: BC428 Maybe -> Page2 Maybe -> Page2 Maybe fixPage2 :: BC428 Maybe -> Page2 Maybe -> Page2 Maybe fixPage2 BC428 Maybe bc428 = (Page2 Maybe -> Page2 Maybe) -> Page2 Maybe -> Page2 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page2 Maybe -> Page2 Maybe) -> Page2 Maybe -> Page2 Maybe) -> (Page2 Maybe -> Page2 Maybe) -> Page2 Maybe -> Page2 Maybe forall a b. (a -> b) -> a -> b $ \Page2{Page2PartB Maybe partB :: Page2PartB Maybe partB :: forall (line :: * -> *). Page2 line -> Page2PartB line ..}-> Page2{ partB :: Page2PartB Maybe partB = BC428 Maybe -> Page2PartB Maybe -> Page2PartB Maybe fixPage2PartB BC428 Maybe bc428 Page2PartB Maybe partB} fixPage2PartB :: BC428 Maybe -> Page2PartB Maybe -> Page2PartB Maybe fixPage2PartB :: BC428 Maybe -> Page2PartB Maybe -> Page2PartB Maybe fixPage2PartB BC428 Maybe bc428 = (Page2PartB Maybe -> Page2PartB Maybe) -> Page2PartB Maybe -> Page2PartB Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page2PartB Maybe -> Page2PartB Maybe) -> Page2PartB Maybe -> Page2PartB Maybe) -> (Page2PartB Maybe -> Page2PartB Maybe) -> Page2PartB Maybe -> Page2PartB Maybe forall a b. (a -> b) -> a -> b $ \part :: Page2PartB Maybe part@Page2PartB{Maybe Rational Maybe Centi SubCalculation Maybe MedicalExpenses Maybe line26 :: Maybe Centi line27_cppQpp :: Maybe Centi line28_cppQpp :: Maybe Centi line29_employmentInsurance :: Maybe Centi line30_employmentInsurance :: Maybe Centi line31_firefighters :: Maybe Centi line32_rescue :: Maybe Centi line33_sum :: SubCalculation Maybe line34_adoption :: Maybe Centi line35 :: Maybe Centi line36_pension :: Maybe Centi line37 :: Maybe Centi line38_disability :: Maybe Centi line39 :: Maybe Centi line40 :: Maybe Centi line41_interest :: Maybe Centi line42_education :: Maybe Centi line43_transferredChild :: Maybe Centi line44_transferredSpouse :: Maybe Centi line45 :: Maybe Centi medicalExpenses :: MedicalExpenses Maybe line52 :: Maybe Centi line53_sum :: SubCalculation Maybe line54 :: Maybe Centi line55_rate :: Maybe Rational line56_fraction :: Maybe Centi line57_donations :: Maybe Centi line58 :: Maybe Centi line59_food :: Maybe Centi line59_fraction :: Maybe Centi line60 :: Maybe Centi line60 :: forall (line :: * -> *). Page2PartB line -> line Centi line59_fraction :: forall (line :: * -> *). Page2PartB line -> line Centi line59_food :: forall (line :: * -> *). Page2PartB line -> line Centi line58 :: forall (line :: * -> *). Page2PartB line -> line Centi line57_donations :: forall (line :: * -> *). Page2PartB line -> line Centi line56_fraction :: forall (line :: * -> *). Page2PartB line -> line Centi line55_rate :: forall (line :: * -> *). Page2PartB line -> line Rational line54 :: forall (line :: * -> *). Page2PartB line -> line Centi line53_sum :: forall (line :: * -> *). Page2PartB line -> SubCalculation line line52 :: forall (line :: * -> *). Page2PartB line -> line Centi medicalExpenses :: forall (line :: * -> *). Page2PartB line -> MedicalExpenses line line45 :: forall (line :: * -> *). Page2PartB line -> line Centi line44_transferredSpouse :: forall (line :: * -> *). Page2PartB line -> line Centi line43_transferredChild :: forall (line :: * -> *). Page2PartB line -> line Centi line42_education :: forall (line :: * -> *). Page2PartB line -> line Centi line41_interest :: forall (line :: * -> *). Page2PartB line -> line Centi line40 :: forall (line :: * -> *). Page2PartB line -> line Centi line39 :: forall (line :: * -> *). Page2PartB line -> line Centi line38_disability :: forall (line :: * -> *). Page2PartB line -> line Centi line37 :: forall (line :: * -> *). Page2PartB line -> line Centi line36_pension :: forall (line :: * -> *). Page2PartB line -> line Centi line35 :: forall (line :: * -> *). Page2PartB line -> line Centi line34_adoption :: forall (line :: * -> *). Page2PartB line -> line Centi line33_sum :: forall (line :: * -> *). Page2PartB line -> SubCalculation line line32_rescue :: forall (line :: * -> *). Page2PartB line -> line Centi line31_firefighters :: forall (line :: * -> *). Page2PartB line -> line Centi line30_employmentInsurance :: forall (line :: * -> *). Page2PartB line -> line Centi line29_employmentInsurance :: forall (line :: * -> *). Page2PartB line -> line Centi line28_cppQpp :: forall (line :: * -> *). Page2PartB line -> line Centi line27_cppQpp :: forall (line :: * -> *). Page2PartB line -> line Centi line26 :: forall (line :: * -> *). Page2PartB line -> line Centi ..}-> Page2PartB Maybe part{ line26 = bc428.page1.partB.line25, line33_sum = fixSubCalculation id $ totalOf [line27_cppQpp, line28_cppQpp, line29_employmentInsurance, line30_employmentInsurance, line31_firefighters, line32_rescue], line35 = totalOf [line26, line33_sum.result, line34_adoption], line37 = totalOf [line35, line36_pension], line40 = totalOf [line37, line38_disability, line39], line45 = totalOf [line40, line41_interest, line42_education, line43_transferredChild, line44_transferredSpouse], medicalExpenses = fixMedicalExpenses 2616 medicalExpenses, line53_sum = fixSubCalculation id $ totalOf [medicalExpenses.difference, line52], line54 = totalOf [line45, line53_sum.result], line56_fraction = line55_rate `fractionOf` line54, line58 = totalOf [line56_fraction, line57_donations], line59_fraction = Just 0.25 `fractionOf` line59_food, line60 = totalOf [line58, line59_fraction]} fixPartC :: BC428 Maybe -> PartC Maybe -> PartC Maybe fixPartC :: BC428 Maybe -> PartC Maybe -> PartC Maybe fixPartC BC428 Maybe bc428 = (PartC Maybe -> PartC Maybe) -> PartC Maybe -> PartC Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((PartC Maybe -> PartC Maybe) -> PartC Maybe -> PartC Maybe) -> (PartC Maybe -> PartC Maybe) -> PartC Maybe -> PartC Maybe forall a b. (a -> b) -> a -> b $ \part :: PartC Maybe part@PartC{Maybe Centi SubCalculation Maybe line61_tax :: Maybe Centi line62_splitIncomeTax :: Maybe Centi line63 :: Maybe Centi line64_copy :: Maybe Centi line65_dividendCredits :: Maybe Centi line66_copy :: Maybe Centi line66_fraction :: Maybe Centi line67_sum :: SubCalculation Maybe line68 :: Maybe Centi line69_copy :: Maybe Centi line69_fraction :: Maybe Centi line70 :: Maybe Centi line71_foreignCredit :: Maybe Centi line72 :: Maybe Centi line72 :: forall (line :: * -> *). PartC line -> line Centi line71_foreignCredit :: forall (line :: * -> *). PartC line -> line Centi line70 :: forall (line :: * -> *). PartC line -> line Centi line69_fraction :: forall (line :: * -> *). PartC line -> line Centi line69_copy :: forall (line :: * -> *). PartC line -> line Centi line68 :: forall (line :: * -> *). PartC line -> line Centi line67_sum :: forall (line :: * -> *). PartC line -> SubCalculation line line66_fraction :: forall (line :: * -> *). PartC line -> line Centi line66_copy :: forall (line :: * -> *). PartC line -> line Centi line65_dividendCredits :: forall (line :: * -> *). PartC line -> line Centi line64_copy :: forall (line :: * -> *). PartC line -> line Centi line63 :: forall (line :: * -> *). PartC line -> line Centi line62_splitIncomeTax :: forall (line :: * -> *). PartC line -> line Centi line61_tax :: forall (line :: * -> *). PartC line -> line Centi ..}-> PartC Maybe part{ line61_tax = totalOf [bc428.page1.partA.column1.equalsTax, bc428.page1.partA.column2.equalsTax, bc428.page1.partA.column3.equalsTax, bc428.page1.partA.column4.equalsTax, bc428.page1.partA.column5.equalsTax, bc428.page1.partA.column6.equalsTax, bc428.page1.partA.column7.equalsTax], line63 = totalOf [line61_tax, line62_splitIncomeTax], line64_copy = bc428.page2.partB.line60, line66_fraction = Just 0.337 `fractionOf` line66_copy, line67_sum = fixSubCalculation id $ totalOf [line64_copy, line65_dividendCredits, line66_fraction], line68 = nonNegativeDifference line63 line67_sum.result, line69_fraction = Just 0.337 `fractionOf` line69_copy, line70 = totalOf [line68, line69_fraction], line72 = nonNegativeDifference line70 line71_foreignCredit} fixPage3 :: BC428 Maybe -> Page3 Maybe -> Page3 Maybe fixPage3 :: BC428 Maybe -> Page3 Maybe -> Page3 Maybe fixPage3 BC428 Maybe bc428 = (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{Maybe Rational Maybe Text Maybe Centi SubCalculation Maybe PartC Maybe partC :: PartC Maybe line73_basicReduction :: Maybe Centi line74_copy :: Maybe Centi line75_base :: Maybe Centi line76_difference :: Maybe Centi line77_rate :: Maybe Rational line78_fraction :: SubCalculation Maybe line79_difference :: SubCalculation Maybe line80_difference :: Maybe Centi line81_logging :: Maybe Centi line82_difference :: Maybe Centi line83_political :: Maybe Centi line84_political :: Maybe Centi line85_difference :: Maybe Centi line86_esop20 :: Maybe Text line_60450_esop20 :: Maybe Centi line87_evcc30 :: Maybe Text line_60470_evcc30 :: Maybe Centi line88_sum :: SubCalculation Maybe line89_difference :: Maybe Centi line90_mining :: Maybe Centi line91_tax :: Maybe Centi line91_tax :: forall (line :: * -> *). Page3 line -> line Centi line90_mining :: forall (line :: * -> *). Page3 line -> line Centi line89_difference :: forall (line :: * -> *). Page3 line -> line Centi line88_sum :: forall (line :: * -> *). Page3 line -> SubCalculation line line_60470_evcc30 :: forall (line :: * -> *). Page3 line -> line Centi line87_evcc30 :: forall (line :: * -> *). Page3 line -> line Text line_60450_esop20 :: forall (line :: * -> *). Page3 line -> line Centi line86_esop20 :: forall (line :: * -> *). Page3 line -> line Text line85_difference :: forall (line :: * -> *). Page3 line -> line Centi line84_political :: forall (line :: * -> *). Page3 line -> line Centi line83_political :: forall (line :: * -> *). Page3 line -> line Centi line82_difference :: forall (line :: * -> *). Page3 line -> line Centi line81_logging :: forall (line :: * -> *). Page3 line -> line Centi line80_difference :: forall (line :: * -> *). Page3 line -> line Centi line79_difference :: forall (line :: * -> *). Page3 line -> SubCalculation line line78_fraction :: forall (line :: * -> *). Page3 line -> SubCalculation line line77_rate :: forall (line :: * -> *). Page3 line -> line Rational line76_difference :: forall (line :: * -> *). Page3 line -> line Centi line75_base :: forall (line :: * -> *). Page3 line -> line Centi line74_copy :: forall (line :: * -> *). Page3 line -> line Centi line73_basicReduction :: forall (line :: * -> *). Page3 line -> line Centi partC :: forall (line :: * -> *). Page3 line -> PartC line ..}-> Page3 Maybe page{ partC = fixPartC bc428 partC, line73_basicReduction = Just 547, line76_difference = nonNegativeDifference line74_copy line75_base, line78_fraction = fixSubCalculation id $ line77_rate `fractionOf` line76_difference, line79_difference = fixSubCalculation id $ nonNegativeDifference line73_basicReduction line78_fraction.result, line80_difference = nonNegativeDifference partC.line72 line79_difference.result, line82_difference = nonNegativeDifference line80_difference line81_logging, line85_difference = nonNegativeDifference line82_difference line84_political, line88_sum = fixSubCalculation id $ min 2000 <$> totalOf [line_60450_esop20, line_60470_evcc30], line89_difference = nonNegativeDifference line85_difference line88_sum.result, line91_tax = nonNegativeDifference line89_difference line90_mining}