{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE RecordWildCards #-}

module Tax.Canada.Province.BC.BC479.Fix (BC479, fixBC479) where

import Tax.Canada.Province.BC.BC479.Types
import Tax.Canada.Shared (fixSubCalculation, SubCalculation(result))
import Tax.Util (fixEq, fractionOf, nonNegativeDifference, totalOf)

fixBC479 :: BC479 Maybe -> BC479 Maybe
fixBC479 :: BC479 Maybe -> BC479 Maybe
fixBC479 = (BC479 Maybe -> BC479 Maybe) -> BC479 Maybe -> BC479 Maybe
forall a. Eq a => (a -> a) -> a -> a
fixEq ((BC479 Maybe -> BC479 Maybe) -> BC479 Maybe -> BC479 Maybe)
-> (BC479 Maybe -> BC479 Maybe) -> BC479 Maybe -> BC479 Maybe
forall a b. (a -> b) -> a -> b
$ \bc479 :: BC479 Maybe
bc479@BC479{Page3 Maybe
Page2 Maybe
Page1 Maybe
page1 :: Page1 Maybe
page2 :: Page2 Maybe
page3 :: Page3 Maybe
$sel:page1:BC479 :: forall (line :: * -> *). BC479 line -> Page1 line
$sel:page2:BC479 :: forall (line :: * -> *). BC479 line -> Page2 line
$sel:page3:BC479 :: forall (line :: * -> *). BC479 line -> Page3 line
..}-> BC479{$sel:page1:BC479 :: Page1 Maybe
page1 = Page1 Maybe -> Page1 Maybe
fixPage1 Page1 Maybe
page1,
                                            $sel:page2:BC479 :: Page2 Maybe
page2 = BC479 Maybe -> Page2 Maybe -> Page2 Maybe
fixPage2 BC479 Maybe
bc479 Page2 Maybe
page2,
                                            $sel:page3:BC479 :: Page3 Maybe
page3 = BC479 Maybe -> Page3 Maybe -> Page3 Maybe
fixPage3 BC479 Maybe
bc479 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
$ \page :: Page1 Maybe
page@Page1{Maybe Bool
Maybe Centi
line1_netIncome_self :: Maybe Centi
line1_netIncome_spouse :: Maybe Centi
line2_uccb_rdsp_repayment_self :: Maybe Centi
line2_uccb_rdsp_repayment_spouse :: Maybe Centi
line3_sum_self :: Maybe Centi
line3_sum_spouse :: Maybe Centi
line4_uccb_rdsp_income_self :: Maybe Centi
line4_uccb_rdsp_income_spouse :: Maybe Centi
line5_difference_self :: Maybe Centi
line5_difference_spouse :: Maybe Centi
line6_sum :: Maybe Centi
line7_threshold :: Maybe Centi
line8_difference :: Maybe Centi
line_60330_sales :: Maybe Centi
line_60350_spouse :: Maybe Centi
line11_sum :: Maybe Centi
line12_copy :: Maybe Centi
line12_fraction :: Maybe Centi
line13_difference :: Maybe Centi
line_60890_separate :: Maybe Bool
line_60480_renovation :: Maybe Centi
line14_fraction :: Maybe Centi
line15_sum :: Maybe Centi
$sel:line1_netIncome_self:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line1_netIncome_spouse:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line2_uccb_rdsp_repayment_self:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line2_uccb_rdsp_repayment_spouse:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line3_sum_self:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line3_sum_spouse:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line4_uccb_rdsp_income_self:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line4_uccb_rdsp_income_spouse:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line5_difference_self:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line5_difference_spouse:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line6_sum:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line7_threshold:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line8_difference:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line_60330_sales:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line_60350_spouse:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line11_sum:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line12_copy:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line12_fraction:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line13_difference:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line_60890_separate:Page1 :: forall (line :: * -> *). Page1 line -> line Bool
$sel:line_60480_renovation:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line14_fraction:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
$sel:line15_sum:Page1 :: forall (line :: * -> *). Page1 line -> line Centi
..}-> Page1 Maybe
page{
   line3_sum_self = totalOf [line1_netIncome_self, line2_uccb_rdsp_repayment_self],
   line3_sum_spouse = totalOf [line1_netIncome_spouse, line2_uccb_rdsp_repayment_spouse],
   line5_difference_self = nonNegativeDifference line3_sum_self line4_uccb_rdsp_income_self,
   line5_difference_spouse = nonNegativeDifference line3_sum_spouse line4_uccb_rdsp_income_spouse,
   line6_sum = totalOf [line5_difference_self, line5_difference_spouse],
   line8_difference = nonNegativeDifference line6_sum line7_threshold,
   line_60330_sales = Just 75,
   line11_sum = totalOf [line_60330_sales, line_60350_spouse],
   line12_copy = line8_difference,
   line12_fraction = (0.02 *) <$> line8_difference,
   line13_difference = nonNegativeDifference line11_sum line12_fraction,
   line14_fraction = (0.1 *) <$> line_60480_renovation,
   line15_sum = totalOf [line13_difference, line14_fraction]}

fixPage2 :: BC479 Maybe -> Page2 Maybe -> Page2 Maybe
fixPage2 :: BC479 Maybe -> Page2 Maybe -> Page2 Maybe
fixPage2 BC479 Maybe
bc479 = (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 :: Page2 Maybe
page2@Page2{Maybe Text
Maybe Centi
SubCalculation Maybe
line16_copy :: Maybe Centi
line17_venture :: Maybe Centi
line_60490_shares :: Maybe Centi
line_60491_certificate :: Maybe Text
line_60495_shares :: Maybe Centi
line_60496_certificate :: Maybe Text
line22_sum :: SubCalculation Maybe
line_60510_fromT88 :: Maybe Centi
line_60530_fromT88 :: Maybe Centi
line_60545_buildings :: Maybe Centi
line_60546_partnership :: Maybe Centi
line27_sum :: SubCalculation Maybe
line_60550_training :: Maybe Centi
line_60560_training :: Maybe Centi
line_60570_ships :: Maybe Centi
line31_sum :: SubCalculation Maybe
line32_credits :: Maybe Centi
$sel:line16_copy:Page2 :: forall (line :: * -> *). Page2 line -> line Centi
$sel:line17_venture:Page2 :: forall (line :: * -> *). Page2 line -> line Centi
$sel:line_60490_shares:Page2 :: forall (line :: * -> *). Page2 line -> line Centi
$sel:line_60491_certificate:Page2 :: forall (line :: * -> *). Page2 line -> line Text
$sel:line_60495_shares:Page2 :: forall (line :: * -> *). Page2 line -> line Centi
$sel:line_60496_certificate:Page2 :: forall (line :: * -> *). Page2 line -> line Text
$sel:line22_sum:Page2 :: forall (line :: * -> *). Page2 line -> SubCalculation line
$sel:line_60510_fromT88:Page2 :: forall (line :: * -> *). Page2 line -> line Centi
$sel:line_60530_fromT88:Page2 :: forall (line :: * -> *). Page2 line -> line Centi
$sel:line_60545_buildings:Page2 :: forall (line :: * -> *). Page2 line -> line Centi
$sel:line_60546_partnership:Page2 :: forall (line :: * -> *). Page2 line -> line Centi
$sel:line27_sum:Page2 :: forall (line :: * -> *). Page2 line -> SubCalculation line
$sel:line_60550_training:Page2 :: forall (line :: * -> *). Page2 line -> line Centi
$sel:line_60560_training:Page2 :: forall (line :: * -> *). Page2 line -> line Centi
$sel:line_60570_ships:Page2 :: forall (line :: * -> *). Page2 line -> line Centi
$sel:line31_sum:Page2 :: forall (line :: * -> *). Page2 line -> SubCalculation line
$sel:line32_credits:Page2 :: forall (line :: * -> *). Page2 line -> line Centi
..}-> Page2 Maybe
page2{
   line16_copy = bc479.page1.line15_sum,
   line22_sum = fixSubCalculation $ totalOf [line17_venture, line_60490_shares, line_60495_shares],
   line27_sum = fixSubCalculation $ totalOf [line_60545_buildings, line_60546_partnership],
   line31_sum = fixSubCalculation $ totalOf [line_60550_training, line_60560_training, line_60570_ships],
   line32_credits = totalOf [line16_copy, line22_sum.result, line27_sum.result, line_60510_fromT88, line31_sum.result]}

fixPage3 :: BC479 Maybe -> Page3 Maybe -> Page3 Maybe
fixPage3 :: BC479 Maybe -> Page3 Maybe -> Page3 Maybe
fixPage3 BC479 Maybe
bc479 = (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
$ \page3 :: Page3 Maybe
page3@Page3{Maybe Rational
Maybe Word
Maybe Centi
SubCalculation Maybe
line33_copy :: Maybe Centi
tenancy_months1 :: Maybe Word
tenancy_months2 :: Maybe Word
rent_paid1 :: Maybe Centi
rent_paid2 :: Maybe Centi
line_60575_sum :: Maybe Word
line35_ceiling :: Maybe Centi
line36_income_copy :: Maybe Centi
line37_threshold :: Maybe Centi
line38_difference :: Maybe Centi
line39_rate :: Maybe Rational
line40_fraction :: SubCalculation Maybe
line_60576_difference :: SubCalculation Maybe
line42_credits :: Maybe Centi
$sel:line33_copy:Page3 :: forall (line :: * -> *). Page3 line -> line Centi
$sel:tenancy_months1:Page3 :: forall (line :: * -> *). Page3 line -> line Word
$sel:tenancy_months2:Page3 :: forall (line :: * -> *). Page3 line -> line Word
$sel:rent_paid1:Page3 :: forall (line :: * -> *). Page3 line -> line Centi
$sel:rent_paid2:Page3 :: forall (line :: * -> *). Page3 line -> line Centi
$sel:line_60575_sum:Page3 :: forall (line :: * -> *). Page3 line -> line Word
$sel:line35_ceiling:Page3 :: forall (line :: * -> *). Page3 line -> line Centi
$sel:line36_income_copy:Page3 :: forall (line :: * -> *). Page3 line -> line Centi
$sel:line37_threshold:Page3 :: forall (line :: * -> *). Page3 line -> line Centi
$sel:line38_difference:Page3 :: forall (line :: * -> *). Page3 line -> line Centi
$sel:line39_rate:Page3 :: forall (line :: * -> *). Page3 line -> line Rational
$sel:line40_fraction:Page3 :: forall (line :: * -> *). Page3 line -> SubCalculation line
$sel:line_60576_difference:Page3 :: forall (line :: * -> *). Page3 line -> SubCalculation line
$sel:line42_credits:Page3 :: forall (line :: * -> *). Page3 line -> line Centi
..}-> Page3 Maybe
page3{
   line33_copy = bc479.page2.line32_credits,
   line_60575_sum = totalOf [tenancy_months1, tenancy_months2],
   line36_income_copy = bc479.page1.line6_sum,
   line38_difference = nonNegativeDifference line36_income_copy line37_threshold,
   line40_fraction = fixSubCalculation $ line39_rate `fractionOf` line38_difference,
   line_60576_difference = fixSubCalculation $ nonNegativeDifference line35_ceiling line40_fraction.result,
   line42_credits = totalOf [line33_copy, line_60576_difference.result]}