{-# LANGUAGE ImportQualifiedPost #-} module Tax.Canada (completeForms) where import Data.CAProvinceCodes qualified as Province import Data.Functor.Const (Const) import Data.Functor.Product (Product (Pair)) import Data.Kind (Type) import Tax.Canada.Federal qualified as Federal import Tax.Canada.Federal (fixFederalForms) import Tax.Canada.Province.AB qualified as AB import Tax.Canada.Province.BC qualified as BC import Tax.Canada.Province.MB qualified as MB import Tax.Canada.Province.ON qualified as ON import Tax.Canada.T1 (T1, fixT1, t1FieldsForProvince) import Tax.FDF (FDFs) import Tax.FDF qualified as FDF -- | Complete all FDF forms in the given map, keyed by identifiers (@T1@, @428@, @Schedule9@, etc). The inter-form -- field references are resolved as well. completeForms :: Province.Code -> FDFs -> Either String FDFs completeForms Province.AB = FDF.mapForms AB.returnFields AB.fixReturns completeForms Province.BC = FDF.mapForms BC.returnFields BC.fixReturns completeForms Province.MB = FDF.mapForms MB.returnFields MB.fixReturns completeForms Province.ON = FDF.mapForms ON.returnFields ON.fixReturns completeForms p = FDF.mapForms (Federal.formFieldsForProvince p) fixFederalForms