{-# 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 Control.Applicative (liftA2) import Control.Monad (guard, mfilter) import Data.Fixed (Centi) import Rank2 qualified 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 $sel:page1:BC428 :: forall (line :: * -> *). BC428 line -> Page1 line $sel:page2:BC428 :: forall (line :: * -> *). BC428 line -> Page2 line $sel:page3:BC428 :: forall (line :: * -> *). BC428 line -> Page3 line ..}-> BC428{$sel:page1:BC428 :: Page1 Maybe page1 = Page1 Maybe -> Page1 Maybe fixPage1 Page1 Maybe page1, $sel:page2:BC428 :: Page2 Maybe page2 = BC428 Maybe -> Page2 Maybe -> Page2 Maybe fixPage2 BC428 Maybe bc428 Page2 Maybe page2, $sel:page3:BC428 :: 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 $sel:partA:Page1 :: forall (line :: * -> *). Page1 line -> Page1PartA line $sel:partB:Page1 :: forall (line :: * -> *). Page1 line -> Page1PartB line ..}-> Page1{ $sel:partA:Page1 :: Page1PartA Maybe partA = Page1PartA Maybe -> Page1PartA Maybe fixPage1PartA Page1PartA Maybe partA, $sel:partB:Page1 :: 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 $sel:income:Page1PartA :: forall (line :: * -> *). Page1PartA line -> line Centi $sel:column1:Page1PartA :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line $sel:column2:Page1PartA :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line $sel:column3:Page1PartA :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line $sel:column4:Page1PartA :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line $sel:column5:Page1PartA :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line $sel:column6:Page1PartA :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line $sel:column7:Page1PartA :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line ..}-> Page1PartA{ $sel:income:Page1PartA :: Maybe Centi income = Maybe Centi income, $sel:column1:Page1PartA :: 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, $sel:column2:Page1PartA :: 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, $sel:column3:Page1PartA :: 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, $sel:column4:Page1PartA :: 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, $sel:column5:Page1PartA :: 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, $sel:column6:Page1PartA :: 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, $sel:column7:Page1PartA :: 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 $sel:line16_basic:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line17_age:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:spouseAmount:Page1PartB :: forall (line :: * -> *). Page1PartB line -> BaseCredit line $sel:dependantAmount:Page1PartB :: forall (line :: * -> *). Page1PartB line -> BaseCredit line $sel:line24_caregiver:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line25:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi ..}-> Page1PartB Maybe part{ line16_basic = Just 11981, 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 $sel:partB:Page2 :: forall (line :: * -> *). Page2 line -> Page2PartB line ..}-> Page2{ $sel:partB:Page2 :: 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 $sel:line26:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line27_cppQpp:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line28_cppQpp:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line29_employmentInsurance:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line30_employmentInsurance:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line31_firefighters:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line32_rescue:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line33_sum:Page2PartB :: forall (line :: * -> *). Page2PartB line -> SubCalculation line $sel:line34_adoption:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line35:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line36_pension:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line37:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line38_disability:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line39:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line40:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line41_interest:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line42_education:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line43_transferredChild:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line44_transferredSpouse:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line45:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:medicalExpenses:Page2PartB :: forall (line :: * -> *). Page2PartB line -> MedicalExpenses line $sel:line52:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line53_sum:Page2PartB :: forall (line :: * -> *). Page2PartB line -> SubCalculation line $sel:line54:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line55_rate:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Rational $sel:line56_fraction:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line57_donations:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line58:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line59_food:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line59_fraction:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line60:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi ..}-> Page2PartB Maybe part{ line26 = bc428.page1.partB.line25, line33_sum = fixSubCalculation $ 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 2491 medicalExpenses, line53_sum = fixSubCalculation $ 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 $sel:line61_tax:PartC :: forall (line :: * -> *). PartC line -> line Centi $sel:line62_splitIncomeTax:PartC :: forall (line :: * -> *). PartC line -> line Centi $sel:line63:PartC :: forall (line :: * -> *). PartC line -> line Centi $sel:line64_copy:PartC :: forall (line :: * -> *). PartC line -> line Centi $sel:line65_dividendCredits:PartC :: forall (line :: * -> *). PartC line -> line Centi $sel:line66_copy:PartC :: forall (line :: * -> *). PartC line -> line Centi $sel:line66_fraction:PartC :: forall (line :: * -> *). PartC line -> line Centi $sel:line67_sum:PartC :: forall (line :: * -> *). PartC line -> SubCalculation line $sel:line68:PartC :: forall (line :: * -> *). PartC line -> line Centi $sel:line69_copy:PartC :: forall (line :: * -> *). PartC line -> line Centi $sel:line69_fraction:PartC :: forall (line :: * -> *). PartC line -> line Centi $sel:line70:PartC :: forall (line :: * -> *). PartC line -> line Centi $sel:line71_foreignCredit:PartC :: forall (line :: * -> *). PartC line -> line Centi $sel:line72:PartC :: 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 $ 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 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 Centi line87_evcc30 :: Maybe Centi line88_sum :: SubCalculation Maybe line89_difference :: Maybe Centi line90_mining :: Maybe Centi line91_tax :: Maybe Centi $sel:partC:Page3 :: forall (line :: * -> *). Page3 line -> PartC line $sel:line73_basicReduction:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line74_copy:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line75_base:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line76_difference:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line77_rate:Page3 :: forall (line :: * -> *). Page3 line -> line Rational $sel:line78_fraction:Page3 :: forall (line :: * -> *). Page3 line -> SubCalculation line $sel:line79_difference:Page3 :: forall (line :: * -> *). Page3 line -> SubCalculation line $sel:line80_difference:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line81_logging:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line82_difference:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line83_political:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line84_political:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line85_difference:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line86_esop20:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line87_evcc30:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line88_sum:Page3 :: forall (line :: * -> *). Page3 line -> SubCalculation line $sel:line89_difference:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line90_mining:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line91_tax:Page3 :: forall (line :: * -> *). Page3 line -> line Centi ..}-> Page3 Maybe page{ partC = fixPartC bc428 partC, line73_basicReduction = Just 521, line76_difference = nonNegativeDifference line74_copy line75_base, line78_fraction = fixSubCalculation $ line77_rate `fractionOf` line76_difference, line79_difference = fixSubCalculation $ 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 $ min 2000 <$> totalOf [line86_esop20, line87_evcc30], line89_difference = nonNegativeDifference line85_difference line88_sum.result, line91_tax = nonNegativeDifference line89_difference line90_mining}