packages feed

canadian-income-tax-2023.0: src/Tax/Canada/Province/BC/BC479/Fix.hs

{-# 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 = fixEq $ \bc479@BC479{..}-> BC479{page1 = fixPage1 page1,
                                            page2 = fixPage2 bc479 page2,
                                            page3 = fixPage3 bc479 page3}

fixPage1 :: Page1 Maybe -> Page1 Maybe
fixPage1 = fixEq $ \page@Page1{..}-> 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 = fixEq $ \page2@Page2{..}-> 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 = fixEq $ \page3@Page3{..}-> 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]}