{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE LambdaCase #-}
-- | The T1 forms look similar, but there are subtle differences between different provinces and
-- territories. Therefore they share the same 'T1' form type and the same 'fixT1' completion function, but field
-- paths are separately provided by 't1FieldsForProvince'.
module Tax.Canada.T1 (fixT1, formPrefixForProvince, t1FieldsForProvince, module Tax.Canada.T1.Types) where
import Data.CAProvinceCodes qualified as Province
import Data.Enum.Memo (memoize)
import Tax.FDF (FieldConst)
import Tax.Canada.T1.Types
import Tax.Canada.T1.Fix (fixT1)
import Tax.Canada.T1.FieldNames.AB qualified as AB
import Tax.Canada.T1.FieldNames.BC qualified as BC
import Tax.Canada.T1.FieldNames.NB qualified as NB
import Tax.Canada.T1.FieldNames.NL qualified as NL
import Tax.Canada.T1.FieldNames.NT qualified as NT
import Tax.Canada.T1.FieldNames.NU qualified as NU
import Tax.Canada.T1.FieldNames.ON qualified as ON
import Tax.Canada.T1.FieldNames.QC qualified as QC
import Tax.Canada.T1.FieldNames.YT qualified as YT
-- | The distinct provincial prefix of the T1 form PDF file, such as @5006@ in @5006-r-fill-23e.pdf@ for Ontario
formPrefixForProvince :: Province.Code -> String
formPrefixForProvince = memoize $ \case
Province.AB -> "5015"
Province.BC -> "5010"
Province.MB -> "5015"
Province.NB -> "5000"
Province.NL -> "5001"
Province.NS -> "5015"
Province.NT -> "5012"
Province.NU -> "5014"
Province.ON -> "5006"
Province.PE -> "5000"
Province.QC -> "5005"
Province.SK -> "5015"
Province.YT -> "5011"
-- | T1 field paths for the given province
t1FieldsForProvince :: Province.Code -> T1 FieldConst
t1FieldsForProvince = memoize $ \case
Province.AB -> AB.t1Fields
Province.BC -> BC.t1Fields
Province.MB -> AB.t1Fields
Province.NB -> NB.t1Fields
Province.NL -> NL.t1Fields
Province.NS -> AB.t1Fields
Province.NT -> NT.t1Fields
Province.NU -> NU.t1Fields
Province.ON -> ON.t1Fields
Province.PE -> NB.t1Fields
Province.QC -> QC.t1Fields
Province.SK -> AB.t1Fields
Province.YT -> YT.t1Fields