{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE LambdaCase #-}
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
formPrefixForProvince :: Province.Code -> String
formPrefixForProvince :: Code -> String
formPrefixForProvince = (Code -> String) -> Code -> String
forall k v. (Bounded k, Enum k) => (k -> v) -> k -> v
memoize ((Code -> String) -> Code -> String)
-> (Code -> String) -> Code -> String
forall a b. (a -> b) -> a -> b
$ \case
Code
Province.AB -> String
"5015"
Code
Province.BC -> String
"5010"
Code
Province.MB -> String
"5015"
Code
Province.NB -> String
"5000"
Code
Province.NL -> String
"5001"
Code
Province.NS -> String
"5015"
Code
Province.NT -> String
"5012"
Code
Province.NU -> String
"5014"
Code
Province.ON -> String
"5006"
Code
Province.PE -> String
"5000"
Code
Province.QC -> String
"5005"
Code
Province.SK -> String
"5015"
Code
Province.YT -> String
"5011"
t1FieldsForProvince :: Province.Code -> T1 FieldConst
t1FieldsForProvince :: Code -> T1 FieldConst
t1FieldsForProvince = (Code -> T1 FieldConst) -> Code -> T1 FieldConst
forall k v. (Bounded k, Enum k) => (k -> v) -> k -> v
memoize ((Code -> T1 FieldConst) -> Code -> T1 FieldConst)
-> (Code -> T1 FieldConst) -> Code -> T1 FieldConst
forall a b. (a -> b) -> a -> b
$ \case
Code
Province.AB -> T1 FieldConst
AB.t1Fields
Code
Province.BC -> T1 FieldConst
BC.t1Fields
Code
Province.MB -> T1 FieldConst
AB.t1Fields
Code
Province.NB -> T1 FieldConst
NB.t1Fields
Code
Province.NL -> T1 FieldConst
NL.t1Fields
Code
Province.NS -> T1 FieldConst
AB.t1Fields
Code
Province.NT -> T1 FieldConst
NT.t1Fields
Code
Province.NU -> T1 FieldConst
NU.t1Fields
Code
Province.ON -> T1 FieldConst
ON.t1Fields
Code
Province.PE -> T1 FieldConst
NB.t1Fields
Code
Province.QC -> T1 FieldConst
QC.t1Fields
Code
Province.SK -> T1 FieldConst
AB.t1Fields
Code
Province.YT -> T1 FieldConst
YT.t1Fields