{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
module Tax.Canada.T1 (fixT1, fileNameForProvince, formPrefixForProvince, t1FieldsForProvince,
module Tax.Canada.T1.Types) where
import Data.CAProvinceCodes qualified as Province
import Data.Enum.Memo (memoize)
import Data.Text (Text)
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
fileNameForProvince :: Province.Code -> Text
fileNameForProvince :: Code -> Text
fileNameForProvince Code
p = Code -> Text
formPrefixForProvince Code
p Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"-r-fill-24e"
formPrefixForProvince :: Province.Code -> Text
formPrefixForProvince :: Code -> Text
formPrefixForProvince = (Code -> Text) -> Code -> Text
forall k v. (Bounded k, Enum k) => (k -> v) -> k -> v
memoize ((Code -> Text) -> Code -> Text) -> (Code -> Text) -> Code -> Text
forall a b. (a -> b) -> a -> b
$ \case
Code
Province.AB -> Text
"5015"
Code
Province.BC -> Text
"5010"
Code
Province.MB -> Text
"5015"
Code
Province.NB -> Text
"5000"
Code
Province.NL -> Text
"5001"
Code
Province.NS -> Text
"5015"
Code
Province.NT -> Text
"5012"
Code
Province.NU -> Text
"5014"
Code
Province.ON -> Text
"5006"
Code
Province.PE -> Text
"5000"
Code
Province.QC -> Text
"5005"
Code
Province.SK -> Text
"5015"
Code
Province.YT -> Text
"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