{-# LANGUAGE DisambiguateRecordFields #-}
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE NoFieldSelectors #-}
{-# LANGUAGE OverloadedRecordDot #-}

module Tax.Canada (T1, ON428, fixOntarioReturns, fixT1, fixON428, t1Fields, on428Fields) where

import Tax.Canada.T1.Types qualified as T1
import Tax.Canada.T1.Types (T1 (T1, page7), Page7(Page7, step6_RefundOrBalanceOwing))
import Tax.Canada.T1.Fix (fixT1)
import Tax.Canada.T1.FieldNames (t1Fields)
import Tax.Canada.ON428.Types qualified as ON hiding (Page1(..))
import Tax.Canada.ON428.Types (ON428 (ON428, page1, page2),
                               Page1(Page1, line1, partB))
import Tax.Canada.ON428.Fix (fixON428)
import Tax.Canada.ON428.FieldNames (on428Fields)
import Tax.Util (fixEq)

fixOntarioReturns :: (T1 Maybe, ON428 Maybe) -> (T1 Maybe, ON428 Maybe)
fixOntarioReturns :: (T1 Maybe, ON428 Maybe) -> (T1 Maybe, ON428 Maybe)
fixOntarioReturns =
  ((T1 Maybe, ON428 Maybe) -> (T1 Maybe, ON428 Maybe))
-> (T1 Maybe, ON428 Maybe) -> (T1 Maybe, ON428 Maybe)
forall a. Eq a => (a -> a) -> a -> a
fixEq (((T1 Maybe, ON428 Maybe) -> (T1 Maybe, ON428 Maybe))
 -> (T1 Maybe, ON428 Maybe) -> (T1 Maybe, ON428 Maybe))
-> ((T1 Maybe, ON428 Maybe) -> (T1 Maybe, ON428 Maybe))
-> (T1 Maybe, ON428 Maybe)
-> (T1 Maybe, ON428 Maybe)
forall a b. (a -> b) -> a -> b
$ \(t1 :: T1 Maybe
t1@T1{$sel:page7:T1 :: forall (line :: * -> *). T1 line -> Page7 line
page7 = page7 :: Page7 Maybe
page7@Page7{Page7Step6 Maybe
$sel:step6_RefundOrBalanceOwing:Page7 :: forall (line :: * -> *). Page7 line -> Page7Step6 line
step6_RefundOrBalanceOwing :: Page7Step6 Maybe
step6_RefundOrBalanceOwing}},
            on428 :: ON428 Maybe
on428@ON428{$sel:page1:ON428 :: forall (line :: * -> *). ON428 line -> Page1 line
page1 = page1 :: Page1 Maybe
page1@Page1{Page1PartB Maybe
$sel:partB:Page1 :: forall (line :: * -> *). Page1 line -> Page1PartB line
partB :: Page1PartB Maybe
partB},
                        $sel:page2:ON428 :: forall (line :: * -> *). ON428 line -> Page2 line
page2 = page2 :: Page2 Maybe
page2@ON.Page2{$sel:partB:Page2 :: forall (line :: * -> *). Page2 line -> Page2PartB line
ON.partB = partB2 :: Page2PartB Maybe
partB2@ON.Page2PartB{MedicalExpenses Maybe
medicalExpenses :: MedicalExpenses Maybe
$sel:medicalExpenses:Page2PartB :: forall (line :: * -> *). Page2PartB line -> MedicalExpenses line
ON.medicalExpenses},
                                               Page2PartC Maybe
partC :: Page2PartC Maybe
$sel:partC:Page2 :: forall (line :: * -> *). Page2 line -> Page2PartC line
ON.partC}})
          -> (T1 Maybe -> T1 Maybe
fixT1 T1 Maybe
t1{$sel:page7:T1 :: Page7 Maybe
page7 =
                       Page7 Maybe
page7{$sel:step6_RefundOrBalanceOwing:Page7 :: Page7Step6 Maybe
step6_RefundOrBalanceOwing =
                             Page7Step6 Maybe
step6_RefundOrBalanceOwing{$sel:line_42800_ProvTerrTax:Page7Step6 :: Maybe Centi
T1.line_42800_ProvTerrTax = ON428 Maybe
on428.page4.line90}}},
              ON428 Maybe -> ON428 Maybe
fixON428 ON428 Maybe
on428{$sel:page1:ON428 :: Page1 Maybe
page1 =
                             Page1 Maybe
page1{$sel:line1:Page1 :: Maybe Centi
line1 = T1 Maybe
t1.page5.step4_TaxableIncome.line_26000_TaxableIncome,
                                   $sel:partB:Page1 :: Page1PartB Maybe
partB = Page1PartB Maybe
partB{$sel:line12_spouseIncome:Page1PartB :: Maybe Centi
ON.line12_spouseIncome = T1 Maybe
t1.page1.spouse.line23600,
                                                 $sel:line19_cppQpp:Page1PartB :: Maybe Centi
ON.line19_cppQpp = T1 Maybe
t1.page6.line30800,
                                                 $sel:line20_cppQpp:Page1PartB :: Maybe Centi
ON.line20_cppQpp = T1 Maybe
t1.page6.line31000,
                                                 $sel:line21_employmentInsurance:Page1PartB :: Maybe Centi
ON.line21_employmentInsurance = T1 Maybe
t1.page6.line31200,
                                                 $sel:line22_employmentInsurance:Page1PartB :: Maybe Centi
ON.line22_employmentInsurance = T1 Maybe
t1.page6.line31217}},
                             $sel:page2:ON428 :: Page2 Maybe
page2 =
                             Page2 Maybe
page2{$sel:partB:Page2 :: Page2PartB Maybe
ON.partB = Page2PartB Maybe
partB2{$sel:line32_interest:Page2PartB :: Maybe Centi
ON.line32_interest = T1 Maybe
t1.page6.line31900,
                                                     $sel:medicalExpenses:Page2PartB :: MedicalExpenses Maybe
ON.medicalExpenses =
                                                        MedicalExpenses Maybe
medicalExpenses{$sel:line37_income:MedicalExpenses :: Maybe Centi
ON.line37_income =
                                                                        T1 Maybe
t1.page4.line_23600_NetIncome}},
                                   $sel:partC:Page2 :: Page2PartC Maybe
ON.partC = Page2PartC Maybe
partC{$sel:line59_copy:Page2PartC :: Maybe Centi
ON.line59_copy = T1 Maybe
t1.page7.partC_NetFederalTax.line40427}}})