{-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE InstanceSigs #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE NoFieldSelectors #-} {-# LANGUAGE NumericUnderscores #-} {-# LANGUAGE OverloadedRecordDot #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-} module Tax.Canada.Federal.Schedule8 where import Control.Applicative ((<|>)) import Data.Fixed (Centi) import Data.Text (Text) import Data.Time.Calendar (MonthOfYear) import Language.Haskell.TH qualified as TH import Rank2 qualified import Rank2.TH qualified import Transformation.Shallow.TH qualified import Tax.Canada.Shared (SubCalculation(SubCalculation, calculation, result), fixSubCalculation, subCalculationFields) import Tax.Canada.T1.Types (T1) import Tax.Canada.T1.Types qualified as T1 import Tax.FDF (Entry (Amount, Constant, Count, Month, Percent), FieldConst (Field), within) import Tax.Util (fixEq, fractionOf, difference, nonNegativeDifference, totalOf) data Schedule8 line = Schedule8{ forall (line :: * -> *). Schedule8 line -> Page2 line page2 :: Page2 line, forall (line :: * -> *). Schedule8 line -> Page3 line page3 :: Page3 line, forall (line :: * -> *). Schedule8 line -> Page4 line page4 :: Page4 line, forall (line :: * -> *). Schedule8 line -> Page5 line page5 :: Page5 line, forall (line :: * -> *). Schedule8 line -> Page6 line page6 :: Page6 line, forall (line :: * -> *). Schedule8 line -> Page7 line page7 :: Page7 line, forall (line :: * -> *). Schedule8 line -> Page8 line page8 :: Page8 line, forall (line :: * -> *). Schedule8 line -> Page9 line page9 :: Page9 line, forall (line :: * -> *). Schedule8 line -> Page10 line page10 :: Page10 line} data Page2 line = Page2{ forall (line :: * -> *). Page2 line -> line MonthOfYear line_50372_stopMonth :: line MonthOfYear, forall (line :: * -> *). Page2 line -> line MonthOfYear line_50374_revokeMonth :: line MonthOfYear} data Page3 line = Page3{ forall (line :: * -> *). Page3 line -> line Word lineA_months :: line Word, forall (line :: * -> *). Page3 line -> line Centi lineB_additionalMaxPensionableEarnings :: line Centi, forall (line :: * -> *). Page3 line -> line Centi lineC_maxPensionableEarnings :: line Centi, forall (line :: * -> *). Page3 line -> line Centi lineD_maxBasicExemption :: line Centi, forall (line :: * -> *). Page3 line -> line Centi lineE_maxSubjectToSecondAdditionalContributions :: line Centi} data Page4 line = Page4{ forall (line :: * -> *). Page4 line -> line Centi line_50339_totalPensionableEarnings :: line Centi, forall (line :: * -> *). Page4 line -> SubCalculation line line2_least :: SubCalculation line, forall (line :: * -> *). Page4 line -> line Centi line3_copyC :: line Centi, forall (line :: * -> *). Page4 line -> SubCalculation line line4_difference :: SubCalculation line, forall (line :: * -> *). Page4 line -> line Centi line5_difference :: line Centi, forall (line :: * -> *). Page4 line -> line Centi line6_copyD :: line Centi, forall (line :: * -> *). Page4 line -> line Centi line7_difference :: line Centi, forall (line :: * -> *). Page4 line -> line Centi line_50340_totalContributions :: line Centi, forall (line :: * -> *). Page4 line -> SubCalculation line line9_fraction :: SubCalculation line, forall (line :: * -> *). Page4 line -> line Centi line10_difference :: line Centi, forall (line :: * -> *). Page4 line -> SubCalculation line line11_fraction :: SubCalculation line, forall (line :: * -> *). Page4 line -> SubCalculation line line12_fraction :: SubCalculation line, forall (line :: * -> *). Page4 line -> line Centi line13_sum :: line Centi, forall (line :: * -> *). Page4 line -> line Centi line_50341_totalSecondContributions :: line Centi, forall (line :: * -> *). Page4 line -> SubCalculation line line15_fraction :: SubCalculation line, forall (line :: * -> *). Page4 line -> line Centi line16_copy :: line Centi, forall (line :: * -> *). Page4 line -> line Centi line17_copy :: line Centi, forall (line :: * -> *). Page4 line -> line Centi line18_difference :: line Centi, forall (line :: * -> *). Page4 line -> line Centi line19_copy :: line Centi, forall (line :: * -> *). Page4 line -> line Centi line20_copy :: line Centi, forall (line :: * -> *). Page4 line -> SubCalculation line line21_difference :: SubCalculation line, forall (line :: * -> *). Page4 line -> line Centi line22_sum :: line Centi, forall (line :: * -> *). Page4 line -> line Centi line23_copy :: line Centi, forall (line :: * -> *). Page4 line -> line Centi line24_copy :: line Centi, forall (line :: * -> *). Page4 line -> SubCalculation line line25_difference :: SubCalculation line, forall (line :: * -> *). Page4 line -> line Centi line26_sum :: line Centi} data Page5 line = Page5{ forall (line :: * -> *). Page5 line -> Page5Part3a line part3a :: Page5Part3a line, forall (line :: * -> *). Page5 line -> Page5Part3b line part3b :: Page5Part3b line} data Page5Part3a line = Page5Part3a{ forall (line :: * -> *). Page5Part3a line -> line Centi line27_copy :: line Centi, forall (line :: * -> *). Page5Part3a line -> line Centi line28_copy :: line Centi, forall (line :: * -> *). Page5Part3a line -> line Centi line29_copy :: line Centi, forall (line :: * -> *). Page5Part3a line -> line Centi line30_sum :: line Centi, forall (line :: * -> *). Page5Part3a line -> line Centi line31_copy :: line Centi} data Page5Part3b line = Page5Part3b{ forall (line :: * -> *). Page5Part3b line -> line Centi line32_join :: line Centi, forall (line :: * -> *). Page5Part3b line -> line Centi line33_conditionalCopy :: line Centi, forall (line :: * -> *). Page5Part3b line -> Page5Part3bCond1 line line34to37 :: Page5Part3bCond1 line, forall (line :: * -> *). Page5Part3b line -> line Centi line38_conditionalCopy :: line Centi, forall (line :: * -> *). Page5Part3b line -> Page5Part3bCond2 line line39to42 :: Page5Part3bCond2 line, forall (line :: * -> *). Page5Part3b line -> line Centi line43_sum :: line Centi} data Page5Part3bCond1 line = Page5Part3bCond1{ forall (line :: * -> *). Page5Part3bCond1 line -> line Centi line34_abs :: line Centi, forall (line :: * -> *). Page5Part3bCond1 line -> line Centi line35_copy :: line Centi, forall (line :: * -> *). Page5Part3bCond1 line -> line Centi line36_least :: line Centi, forall (line :: * -> *). Page5Part3bCond1 line -> SubCalculation line line37_sum :: SubCalculation line} data Page5Part3bCond2 line = Page5Part3bCond2{ forall (line :: * -> *). Page5Part3bCond2 line -> line Centi line39_abs :: line Centi, forall (line :: * -> *). Page5Part3bCond2 line -> line Centi line40_copy :: line Centi, forall (line :: * -> *). Page5Part3bCond2 line -> line Centi line41_least :: line Centi, forall (line :: * -> *). Page5Part3bCond2 line -> SubCalculation line line42_sum :: SubCalculation line} data Page6 line = Page6{ forall (line :: * -> *). Page6 line -> line Centi line1_netSelfEmploymentEarnings :: line Centi, forall (line :: * -> *). Page6 line -> line Centi line_50373_additionalEmploymentEarningsOffT4 :: line Centi, forall (line :: * -> *). Page6 line -> line Centi line3_sum :: line Centi, forall (line :: * -> *). Page6 line -> SubCalculation line line4_least :: SubCalculation line, forall (line :: * -> *). Page6 line -> line Centi line5_copyC :: line Centi, forall (line :: * -> *). Page6 line -> SubCalculation line line6_difference :: SubCalculation line, forall (line :: * -> *). Page6 line -> line Centi line7_difference :: line Centi, forall (line :: * -> *). Page6 line -> line Centi line8_copyD :: line Centi, forall (line :: * -> *). Page6 line -> line Centi line9_difference :: line Centi, forall (line :: * -> *). Page6 line -> SubCalculation line line10_fraction :: SubCalculation line, forall (line :: * -> *). Page6 line -> SubCalculation line line11_fraction :: SubCalculation line, forall (line :: * -> *). Page6 line -> SubCalculation line line12_fraction :: SubCalculation line, forall (line :: * -> *). Page6 line -> SubCalculation line line13_sum :: SubCalculation line, forall (line :: * -> *). Page6 line -> line Centi line14_sum :: line Centi, forall (line :: * -> *). Page6 line -> SubCalculation line line15_half :: SubCalculation line, forall (line :: * -> *). Page6 line -> line Centi line16_copy :: line Centi, forall (line :: * -> *). Page6 line -> line Centi line17_sum :: line Centi} data Page7 line = Page7{ forall (line :: * -> *). Page7 line -> line Centi line1_netSelfEmploymentEarnings :: line Centi, forall (line :: * -> *). Page7 line -> line Centi line_50373_additionalEmploymentEarningsOffT4 :: line Centi, forall (line :: * -> *). Page7 line -> line Centi line_50399_additionalEmploymentEarningsOnT4 :: line Centi, forall (line :: * -> *). Page7 line -> line Centi line4_sum :: line Centi, forall (line :: * -> *). Page7 line -> line Centi line5_copy :: line Centi, forall (line :: * -> *). Page7 line -> Page7Cond1 line line6to8 :: Page7Cond1 line, forall (line :: * -> *). Page7 line -> line Centi line9_difference :: line Centi, forall (line :: * -> *). Page7 line -> SubCalculation line line10_fraction :: SubCalculation line, forall (line :: * -> *). Page7 line -> line Centi line11_copy :: line Centi, forall (line :: * -> *). Page7 line -> Page7Cond2 line line12to14 :: Page7Cond2 line, forall (line :: * -> *). Page7 line -> line Centi line15_difference :: line Centi, forall (line :: * -> *). Page7 line -> SubCalculation line line16_fraction :: SubCalculation line, forall (line :: * -> *). Page7 line -> line Centi line17_sum :: line Centi, forall (line :: * -> *). Page7 line -> Page7Cond3 line line18to20 :: Page7Cond3 line, forall (line :: * -> *). Page7 line -> line Centi line21_copy :: line Centi, forall (line :: * -> *). Page7 line -> line Centi line22_copy :: line Centi, forall (line :: * -> *). Page7 line -> line Centi line23_sum :: line Centi, forall (line :: * -> *). Page7 line -> line Centi line24_copyC :: line Centi, forall (line :: * -> *). Page7 line -> line Centi line25_copyD :: line Centi, forall (line :: * -> *). Page7 line -> line Centi line26_difference :: line Centi, forall (line :: * -> *). Page7 line -> line Centi line27_copy :: line Centi, forall (line :: * -> *). Page7 line -> line Centi line28_difference :: line Centi} data Page7Cond1 line = Page7Cond1{ forall (line :: * -> *). Page7Cond1 line -> line Centi line6_copy :: line Centi, forall (line :: * -> *). Page7Cond1 line -> line Centi line7_copy :: line Centi, forall (line :: * -> *). Page7Cond1 line -> SubCalculation line line8_difference :: SubCalculation line} data Page7Cond2 line = Page7Cond2{ forall (line :: * -> *). Page7Cond2 line -> line Centi line12_copy :: line Centi, forall (line :: * -> *). Page7Cond2 line -> line Centi line13_copy :: line Centi, forall (line :: * -> *). Page7Cond2 line -> SubCalculation line line14_difference :: SubCalculation line} data Page7Cond3 line = Page7Cond3{ forall (line :: * -> *). Page7Cond3 line -> line Centi line18_abs :: line Centi, forall (line :: * -> *). Page7Cond3 line -> line Centi line19_least :: line Centi, forall (line :: * -> *). Page7Cond3 line -> SubCalculation line line20_fraction :: SubCalculation line} data Page8 line = Page8{ forall (line :: * -> *). Page8 line -> line Centi line29_least :: line Centi, forall (line :: * -> *). Page8 line -> line Centi line30_copy :: line Centi, forall (line :: * -> *). Page8 line -> line Centi line31_copy :: line Centi, forall (line :: * -> *). Page8 line -> line Centi line32_difference :: line Centi, forall (line :: * -> *). Page8 line -> line Centi line33_copy :: line Centi, forall (line :: * -> *). Page8 line -> line Centi line34_copy :: line Centi, forall (line :: * -> *). Page8 line -> SubCalculation line line35_difference :: SubCalculation line, forall (line :: * -> *). Page8 line -> SubCalculation line line36_difference :: SubCalculation line, forall (line :: * -> *). Page8 line -> line Centi line37_difference :: line Centi, forall (line :: * -> *). Page8 line -> Page8Cond1 line line38to48 :: Page8Cond1 line, forall (line :: * -> *). Page8 line -> SubCalculation line line49_fraction :: SubCalculation line, forall (line :: * -> *). Page8 line -> SubCalculation line line50_fraction :: SubCalculation line, forall (line :: * -> *). Page8 line -> SubCalculation line line51_fraction :: SubCalculation line, forall (line :: * -> *). Page8 line -> SubCalculation line line52_sum :: SubCalculation line, forall (line :: * -> *). Page8 line -> line Centi line53_sum :: line Centi, forall (line :: * -> *). Page8 line -> SubCalculation line line54_double :: SubCalculation line, forall (line :: * -> *). Page8 line -> line Centi line55_difference :: line Centi} data Page8Cond1 line = Page8Cond1{ forall (line :: * -> *). Page8Cond1 line -> line Centi line38_copyE :: line Centi, forall (line :: * -> *). Page8Cond1 line -> line Centi line39_copy :: line Centi, forall (line :: * -> *). Page8Cond1 line -> line Centi line40_copy :: line Centi, forall (line :: * -> *). Page8Cond1 line -> SubCalculation line line41_sum :: SubCalculation line, forall (line :: * -> *). Page8Cond1 line -> line Centi line42_difference :: line Centi, forall (line :: * -> *). Page8Cond1 line -> line Centi line43_copy :: line Centi, forall (line :: * -> *). Page8Cond1 line -> line Centi line44_copy :: line Centi, forall (line :: * -> *). Page8Cond1 line -> line Centi line45_difference :: line Centi, forall (line :: * -> *). Page8Cond1 line -> line Centi line46_copy :: line Centi, forall (line :: * -> *). Page8Cond1 line -> line Centi line47_difference :: line Centi, forall (line :: * -> *). Page8Cond1 line -> line Centi line48_least :: line Centi} data Page9 line = Page9{ forall (line :: * -> *). Page9 line -> SubCalculation line line56_half :: SubCalculation line, forall (line :: * -> *). Page9 line -> line Centi line57_copy :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line58_copy :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line59_difference :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line60_least :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line61_copy :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line62_copy :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line63_difference :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line64_conditionalCopy :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line65_abs :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line66_copy :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line67_least :: line Centi, forall (line :: * -> *). Page9 line -> SubCalculation line line68_sum :: SubCalculation line, forall (line :: * -> *). Page9 line -> line Centi line69_copy :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line70_copy :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line71_difference :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line72_conditionalCopy :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line73_abs :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line74_copy :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line75_least :: line Centi, forall (line :: * -> *). Page9 line -> SubCalculation line line76_sum :: SubCalculation line, forall (line :: * -> *). Page9 line -> line Centi line77_sum :: line Centi, forall (line :: * -> *). Page9 line -> SubCalculation line line78_half :: SubCalculation line, forall (line :: * -> *). Page9 line -> SubCalculation line line79_half :: SubCalculation line, forall (line :: * -> *). Page9 line -> line Centi line80_sum :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line81_positiveCopy :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line82_difference :: line Centi, forall (line :: * -> *). Page9 line -> SubCalculation line line83_fraction :: SubCalculation line, forall (line :: * -> *). Page9 line -> line Centi line84_copy :: line Centi, forall (line :: * -> *). Page9 line -> line Centi line85_difference :: line Centi} data Page10 line = Page10{ forall (line :: * -> *). Page10 line -> line Centi line86_copy :: line Centi, forall (line :: * -> *). Page10 line -> line Centi line87_copy :: line Centi, forall (line :: * -> *). Page10 line -> line Centi line88_copy :: line Centi, forall (line :: * -> *). Page10 line -> SubCalculation line line89_difference :: SubCalculation line, forall (line :: * -> *). Page10 line -> line Centi line90_copy :: line Centi, forall (line :: * -> *). Page10 line -> line Centi line91_copy :: line Centi, forall (line :: * -> *). Page10 line -> SubCalculation line line92_difference :: SubCalculation line, forall (line :: * -> *). Page10 line -> SubCalculation line line93_half :: SubCalculation line, forall (line :: * -> *). Page10 line -> line Centi line94_copy :: line Centi, forall (line :: * -> *). Page10 line -> line Centi line95_join :: line Centi, forall (line :: * -> *). Page10 line -> SubCalculation line line96_difference :: SubCalculation line, forall (line :: * -> *). Page10 line -> line Centi line97_sum :: line Centi} $