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