{-# 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
page3 :: forall (line :: * -> *). BC479 line -> Page3 line
page2 :: forall (line :: * -> *). BC479 line -> Page2 line
page1 :: forall (line :: * -> *). BC479 line -> Page1 line
..}-> BC479{page1 :: Page1 Maybe
page1 = Page1 Maybe -> Page1 Maybe
fixPage1 Page1 Maybe
page1,
                                            page2 :: Page2 Maybe
page2 = BC479 Maybe -> Page2 Maybe -> Page2 Maybe
fixPage2 BC479 Maybe
bc479 Page2 Maybe
page2,
                                            page3 :: 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
SubCalculation Maybe
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_fraction :: SubCalculation Maybe
line13_difference :: Maybe Centi
line_60890_separate :: Maybe Bool
line_60480_renovation :: Maybe Centi
line14_fraction :: Maybe Centi
line15_sum :: Maybe Centi
line15_sum :: forall (line :: * -> *). Page1 line -> line Centi
line14_fraction :: forall (line :: * -> *). Page1 line -> line Centi
line_60480_renovation :: forall (line :: * -> *). Page1 line -> line Centi
line_60890_separate :: forall (line :: * -> *). Page1 line -> line Bool
line13_difference :: forall (line :: * -> *). Page1 line -> line Centi
line12_fraction :: forall (line :: * -> *). Page1 line -> SubCalculation line
line11_sum :: forall (line :: * -> *). Page1 line -> line Centi
line_60350_spouse :: forall (line :: * -> *). Page1 line -> line Centi
line_60330_sales :: forall (line :: * -> *). Page1 line -> line Centi
line8_difference :: forall (line :: * -> *). Page1 line -> line Centi
line7_threshold :: forall (line :: * -> *). Page1 line -> line Centi
line6_sum :: forall (line :: * -> *). Page1 line -> line Centi
line5_difference_spouse :: forall (line :: * -> *). Page1 line -> line Centi
line5_difference_self :: forall (line :: * -> *). Page1 line -> line Centi
line4_uccb_rdsp_income_spouse :: forall (line :: * -> *). Page1 line -> line Centi
line4_uccb_rdsp_income_self :: forall (line :: * -> *). Page1 line -> line Centi
line3_sum_spouse :: forall (line :: * -> *). Page1 line -> line Centi
line3_sum_self :: forall (line :: * -> *). Page1 line -> line Centi
line2_uccb_rdsp_repayment_spouse :: forall (line :: * -> *). Page1 line -> line Centi
line2_uccb_rdsp_repayment_self :: forall (line :: * -> *). Page1 line -> line Centi
line1_netIncome_spouse :: forall (line :: * -> *). Page1 line -> line Centi
line1_netIncome_self :: 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_fraction = fixSubCalculation (0.02 *) line8_difference,
   line13_difference = nonNegativeDifference line11_sum line12_fraction.result,
   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
line32_credits :: forall (line :: * -> *). Page2 line -> line Centi
line31_sum :: forall (line :: * -> *). Page2 line -> SubCalculation line
line_60570_ships :: forall (line :: * -> *). Page2 line -> line Centi
line_60560_training :: forall (line :: * -> *). Page2 line -> line Centi
line_60550_training :: forall (line :: * -> *). Page2 line -> line Centi
line27_sum :: forall (line :: * -> *). Page2 line -> SubCalculation line
line_60546_partnership :: forall (line :: * -> *). Page2 line -> line Centi
line_60545_buildings :: forall (line :: * -> *). Page2 line -> line Centi
line_60530_fromT88 :: forall (line :: * -> *). Page2 line -> line Centi
line_60510_fromT88 :: forall (line :: * -> *). Page2 line -> line Centi
line22_sum :: forall (line :: * -> *). Page2 line -> SubCalculation line
line_60496_certificate :: forall (line :: * -> *). Page2 line -> line Text
line_60495_shares :: forall (line :: * -> *). Page2 line -> line Centi
line_60491_certificate :: forall (line :: * -> *). Page2 line -> line Text
line_60490_shares :: forall (line :: * -> *). Page2 line -> line Centi
line17_venture :: forall (line :: * -> *). Page2 line -> line Centi
line16_copy :: forall (line :: * -> *). Page2 line -> line Centi
..}-> Page2 Maybe
page2{
   line16_copy = bc479.page1.line15_sum,
   line22_sum = fixSubCalculation id $ totalOf [line17_venture, line_60490_shares, line_60495_shares],
   line27_sum = fixSubCalculation id $ totalOf [line_60545_buildings, line_60546_partnership],
   line31_sum = fixSubCalculation id $ 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
line42_credits :: forall (line :: * -> *). Page3 line -> line Centi
line_60576_difference :: forall (line :: * -> *). Page3 line -> SubCalculation line
line40_fraction :: forall (line :: * -> *). Page3 line -> SubCalculation line
line39_rate :: forall (line :: * -> *). Page3 line -> line Rational
line38_difference :: forall (line :: * -> *). Page3 line -> line Centi
line37_threshold :: forall (line :: * -> *). Page3 line -> line Centi
line36_income_copy :: forall (line :: * -> *). Page3 line -> line Centi
line35_ceiling :: forall (line :: * -> *). Page3 line -> line Centi
line_60575_sum :: forall (line :: * -> *). Page3 line -> line Word
rent_paid2 :: forall (line :: * -> *). Page3 line -> line Centi
rent_paid1 :: forall (line :: * -> *). Page3 line -> line Centi
tenancy_months2 :: forall (line :: * -> *). Page3 line -> line Word
tenancy_months1 :: forall (line :: * -> *). Page3 line -> line Word
line33_copy :: 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 id $ line39_rate `fractionOf` line38_difference,
   line_60576_difference = fixSubCalculation id $ nonNegativeDifference line35_ceiling line40_fraction.result,
   line42_credits = totalOf [line33_copy, line_60576_difference.result]}