@equisoft/tax-us 0.0.1-snapshot.20250723132536

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/.eslintrc.json +42 -0
  2. package/.tool-versions +1 -0
  3. package/Makefile +28 -0
  4. package/README.md +113 -0
  5. package/RELEASE.md +29 -0
  6. package/babel.config.js +1 -0
  7. package/dist/index.d.ts +5 -0
  8. package/dist/index.js +21 -0
  9. package/dist/investments/index.d.ts +6 -0
  10. package/dist/investments/index.js +22 -0
  11. package/dist/investments/life-income-fund.d.ts +11 -0
  12. package/dist/investments/life-income-fund.js +291 -0
  13. package/dist/investments/non-registered-savings-plan.d.ts +3 -0
  14. package/dist/investments/non-registered-savings-plan.js +30 -0
  15. package/dist/investments/registered-education-savings-plan/beneficiary.d.ts +4 -0
  16. package/dist/investments/registered-education-savings-plan/beneficiary.js +16 -0
  17. package/dist/investments/registered-education-savings-plan/british-columbia-training-and-education-savings-grant.d.ts +10 -0
  18. package/dist/investments/registered-education-savings-plan/british-columbia-training-and-education-savings-grant.js +21 -0
  19. package/dist/investments/registered-education-savings-plan/canada-education-savings-grant.d.ts +2 -0
  20. package/dist/investments/registered-education-savings-plan/canada-education-savings-grant.js +23 -0
  21. package/dist/investments/registered-education-savings-plan/canada-learning-bond.d.ts +12 -0
  22. package/dist/investments/registered-education-savings-plan/canada-learning-bond.js +19 -0
  23. package/dist/investments/registered-education-savings-plan/income-level.d.ts +11 -0
  24. package/dist/investments/registered-education-savings-plan/income-level.js +32 -0
  25. package/dist/investments/registered-education-savings-plan/index.d.ts +7 -0
  26. package/dist/investments/registered-education-savings-plan/index.js +23 -0
  27. package/dist/investments/registered-education-savings-plan/quebec-education-savings-incentive.d.ts +2 -0
  28. package/dist/investments/registered-education-savings-plan/quebec-education-savings-incentive.js +17 -0
  29. package/dist/investments/registered-education-savings-plan/savings-grant.d.ts +25 -0
  30. package/dist/investments/registered-education-savings-plan/savings-grant.js +51 -0
  31. package/dist/investments/registered-education-savings-plan/tuition-fees.d.ts +6 -0
  32. package/dist/investments/registered-education-savings-plan/tuition-fees.js +33 -0
  33. package/dist/investments/registered-retirement-income-fund.d.ts +7 -0
  34. package/dist/investments/registered-retirement-income-fund.js +68 -0
  35. package/dist/investments/registered-retirement-savings-plan.d.ts +9 -0
  36. package/dist/investments/registered-retirement-savings-plan.js +20 -0
  37. package/dist/investments/tax-free-savings-account.d.ts +7 -0
  38. package/dist/investments/tax-free-savings-account.js +21 -0
  39. package/dist/misc/code-types.d.ts +11 -0
  40. package/dist/misc/code-types.js +19 -0
  41. package/dist/misc/consumer-price-index.d.ts +34 -0
  42. package/dist/misc/consumer-price-index.js +240 -0
  43. package/dist/misc/index.d.ts +5 -0
  44. package/dist/misc/index.js +21 -0
  45. package/dist/misc/ipf-stats.d.ts +18 -0
  46. package/dist/misc/ipf-stats.js +25 -0
  47. package/dist/misc/life-expectancy.d.ts +28 -0
  48. package/dist/misc/life-expectancy.js +58 -0
  49. package/dist/misc/ppp-increase-factor.d.ts +10 -0
  50. package/dist/misc/ppp-increase-factor.js +25 -0
  51. package/dist/pension/canada-pension-plan.d.ts +2 -0
  52. package/dist/pension/canada-pension-plan.js +176 -0
  53. package/dist/pension/index.d.ts +5 -0
  54. package/dist/pension/index.js +21 -0
  55. package/dist/pension/old-age-security.d.ts +21 -0
  56. package/dist/pension/old-age-security.js +70 -0
  57. package/dist/pension/public-pension-plan.d.ts +63 -0
  58. package/dist/pension/public-pension-plan.js +2 -0
  59. package/dist/pension/quebec-pension-plan.d.ts +2 -0
  60. package/dist/pension/quebec-pension-plan.js +176 -0
  61. package/dist/pension/supplemental-pension-plan.d.ts +5 -0
  62. package/dist/pension/supplemental-pension-plan.js +14 -0
  63. package/dist/taxes/dividend-credit.d.ts +8 -0
  64. package/dist/taxes/dividend-credit.js +45 -0
  65. package/dist/taxes/employment-insurance.d.ts +9 -0
  66. package/dist/taxes/employment-insurance.js +20 -0
  67. package/dist/taxes/income-tax.d.ts +39 -0
  68. package/dist/taxes/income-tax.js +593 -0
  69. package/dist/taxes/index.d.ts +4 -0
  70. package/dist/taxes/index.js +20 -0
  71. package/dist/taxes/quebec-parental-insurance-plan.d.ts +9 -0
  72. package/dist/taxes/quebec-parental-insurance-plan.js +17 -0
  73. package/dist/utils/collections.d.ts +1 -0
  74. package/dist/utils/collections.js +7 -0
  75. package/dist/utils/date.d.ts +3 -0
  76. package/dist/utils/date.js +18 -0
  77. package/dist/utils/index.d.ts +3 -0
  78. package/dist/utils/index.js +19 -0
  79. package/dist/utils/math.d.ts +2 -0
  80. package/dist/utils/math.js +16 -0
  81. package/package.json +68 -0
  82. package/tsconfig.json +21 -0
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /*
3
+ Sources
4
+ https://www.canada.ca/en/services/benefits/publicpensions/cpp/old-age-security/benefit-amount.html
5
+ https://www.canada.ca/en/services/benefits/publicpensions/cpp/old-age-security/recovery-tax.html
6
+ https://www.canada.ca/en/services/benefits/publicpensions/cpp/old-age-security/benefit-amount.html (delay bonus)
7
+
8
+ Revised
9
+ 2025-01-02
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.OAS = void 0;
13
+ const date_1 = require("../utils/date");
14
+ const math_1 = require("../utils/math");
15
+ exports.OAS = {
16
+ getMinRequestDateFactor(birthDate, requestDate) {
17
+ const minRequestDate = (0, date_1.addYearsToDate)(birthDate, this.MIN_AGE);
18
+ const maxRequestDate = (0, date_1.addYearsToDate)(birthDate, this.MAX_AGE);
19
+ const monthsToToday = (0, date_1.getMonthsDiff)(birthDate, (0, date_1.now)());
20
+ const monthsToLastBirthDay = monthsToToday - (monthsToToday % 12);
21
+ const monthsToMinRequestDate = (0, date_1.getMonthsDiff)(birthDate, minRequestDate);
22
+ const monthsToMaxRequestDate = (0, date_1.getMonthsDiff)(birthDate, maxRequestDate);
23
+ const monthsToRequestDate = (0, date_1.getMonthsDiff)(birthDate, requestDate);
24
+ const receivingOASPayment = monthsToRequestDate >= monthsToMinRequestDate && monthsToRequestDate
25
+ <= monthsToMaxRequestDate && monthsToRequestDate <= monthsToToday;
26
+ if (monthsToLastBirthDay < monthsToMinRequestDate || monthsToLastBirthDay > monthsToMaxRequestDate
27
+ || receivingOASPayment) {
28
+ return 1;
29
+ }
30
+ const monthsDelta = monthsToLastBirthDay - monthsToMinRequestDate;
31
+ return 1 + (monthsDelta * this.MONTHLY_DELAY_BONUS);
32
+ },
33
+ getRequestDateFactor(birthDate, requestDate) {
34
+ const minRequestDate = (0, date_1.addYearsToDate)(birthDate, this.MIN_AGE);
35
+ const maxRequestDate = (0, date_1.addYearsToDate)(birthDate, this.MAX_AGE);
36
+ const monthsToToday = (0, date_1.getMonthsDiff)(birthDate, (0, date_1.now)());
37
+ const monthsToLastBirthDay = monthsToToday - (monthsToToday % 12);
38
+ const monthsToMinRequestDate = (0, date_1.getMonthsDiff)(birthDate, minRequestDate);
39
+ const monthsToMaxRequestDate = (0, date_1.getMonthsDiff)(birthDate, maxRequestDate);
40
+ const monthsToRequestDate = (0, date_1.getMonthsDiff)(birthDate, requestDate);
41
+ const clampedMonthsToRequestDate = (0, math_1.clamp)(monthsToRequestDate, monthsToMinRequestDate, monthsToMaxRequestDate);
42
+ const deltaMonthsFromMinRequestDate = clampedMonthsToRequestDate - monthsToMinRequestDate;
43
+ const receivingOASPayment = monthsToRequestDate >= monthsToMinRequestDate && monthsToRequestDate
44
+ <= monthsToMaxRequestDate && monthsToRequestDate <= monthsToToday;
45
+ if (monthsToLastBirthDay > monthsToMaxRequestDate || receivingOASPayment) {
46
+ return 1;
47
+ }
48
+ if (monthsToRequestDate < monthsToMinRequestDate) {
49
+ return 0;
50
+ }
51
+ return 1 + (deltaMonthsFromMinRequestDate * this.MONTHLY_DELAY_BONUS);
52
+ },
53
+ getRepaymentMax(startOfYearAge) {
54
+ return startOfYearAge >= exports.OAS.INCREASE.AGE - 1 ? exports.OAS.INCREASE.REPAYMENT_MAX : exports.OAS.REPAYMENT.MAX;
55
+ },
56
+ MAX_AGE: 70,
57
+ MIN_AGE: 65,
58
+ INCREASE: {
59
+ AGE: 75,
60
+ RATE: 0.1,
61
+ REPAYMENT_MAX: 154196,
62
+ },
63
+ MONTHLY_PAYMENT_MAX: 734.95,
64
+ MONTHLY_DELAY_BONUS: 0.006,
65
+ REPAYMENT: {
66
+ MAX: 148541,
67
+ MIN: 93454,
68
+ RATIO: 0.15,
69
+ },
70
+ };
@@ -0,0 +1,63 @@
1
+ export interface Factor {
2
+ FROM: number;
3
+ TO: number;
4
+ FACTOR: number;
5
+ }
6
+ export interface PensionableEarnings {
7
+ BASIC_EXEMPTION: number;
8
+ YMPE: number;
9
+ YMPE_AVG_5: number;
10
+ YAMPE: number;
11
+ YAMPE_AVG_5: number;
12
+ }
13
+ export interface ContributionRates {
14
+ BASE: number;
15
+ ENHANCEMENT_STEP_2: number;
16
+ }
17
+ export interface DeathBenefit {
18
+ RATE: number;
19
+ }
20
+ export interface FlatBenefit {
21
+ ORPHAN: number;
22
+ DISABILITY: number;
23
+ UNDER_45: number;
24
+ UNDER_45_WITH_CHILD: number;
25
+ UNDER_45_DISABLED: number;
26
+ FROM_45_TO_64: number;
27
+ OVER_64_WITHOUT_PENSION: number;
28
+ }
29
+ export type IndexationRateReferenceYear = 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024;
30
+ export type IndexationRateReference = [IndexationRateReferenceYear, number];
31
+ export interface MaxPension {
32
+ RETIREMENT: number;
33
+ COMBINED_RETIREMENT_SURVIVOR: number;
34
+ DEATH_BENEFIT: number;
35
+ }
36
+ export interface MonthlyDelay {
37
+ BONUS: number;
38
+ PENALTY: number;
39
+ }
40
+ export interface SurvivorRate {
41
+ OVER_64: number;
42
+ UNDER_65: number;
43
+ }
44
+ export interface PublicPensionPlan {
45
+ PENSIONABLE_EARNINGS: PensionableEarnings;
46
+ CONTRIBUTION_RATES: ContributionRates;
47
+ DEATH_BENEFIT: DeathBenefit;
48
+ DEFAULT_REFERENCE_AGE: number;
49
+ FLAT_BENEFIT: FlatBenefit;
50
+ INDEXATION_RATE_REFERENCES: IndexationRateReference[];
51
+ MAX_PENSION: MaxPension;
52
+ MAX_INCOME: {
53
+ [K: number]: number;
54
+ };
55
+ MAX_REQUEST_AGE: number;
56
+ MIN_REQUEST_AGE: number;
57
+ MONTHLY_DELAY: MonthlyDelay;
58
+ REPLACEMENT_FACTOR: number;
59
+ SURVIVOR_RATES: SurvivorRate;
60
+ YEARS_TO_FULL_PENSION: number;
61
+ getRequestDateFactor(birthDate: Date, requestDate: Date, customReferenceDate?: Date): number;
62
+ getAverageIndexationRate(): number;
63
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ import { PublicPensionPlan } from './public-pension-plan';
2
+ export declare const QPP: PublicPensionPlan;
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ /*
3
+ Sources
4
+ https://www.retraitequebec.gouv.qc.ca/en/landing/indexation/Pages/montants-donnees-base.aspx
5
+
6
+ Revised
7
+ 2024-12-30
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.QPP = void 0;
11
+ const date_1 = require("../utils/date");
12
+ const math_1 = require("../utils/math");
13
+ exports.QPP = {
14
+ PENSIONABLE_EARNINGS: {
15
+ BASIC_EXEMPTION: 3500,
16
+ // Year's maximum pensionable earnings (YMPE)
17
+ YMPE: 71300,
18
+ // Average YMPE of the last 5 year (including current year)
19
+ YMPE_AVG_5: 66580,
20
+ // Year's additional maximum pensionable earnings (YAMPE)
21
+ YAMPE: 81200,
22
+ // Year's additional maximum pensionable earnings (YAMPE) of the last 5 year (including current year)
23
+ // YAMPE * 0.942 (Temporary factor suggested by Martin Dupras, used to estimate until we have the right value)
24
+ YAMPE_AVG_5: 76490,
25
+ },
26
+ CONTRIBUTION_RATES: {
27
+ BASE: 0.064,
28
+ ENHANCEMENT_STEP_2: 0.04,
29
+ },
30
+ DEATH_BENEFIT: { RATE: 0.5 },
31
+ DEFAULT_REFERENCE_AGE: 65,
32
+ FLAT_BENEFIT: {
33
+ // Survivors' benefits
34
+ ORPHAN: 3621.24,
35
+ // Disability benefits
36
+ DISABILITY: 20071.44,
37
+ // Surviving spouse's pension
38
+ UNDER_45: 8273.16,
39
+ UNDER_45_WITH_CHILD: 13102.08,
40
+ UNDER_45_DISABLED: 13615.32,
41
+ FROM_45_TO_64: 13615.32,
42
+ OVER_64_WITHOUT_PENSION: 10130.88,
43
+ },
44
+ INDEXATION_RATE_REFERENCES: [
45
+ [2007, 0.021],
46
+ [2008, 0.020],
47
+ [2009, 0.025],
48
+ [2010, 0.004],
49
+ [2011, 0.017],
50
+ [2012, 0.028],
51
+ [2013, 0.018],
52
+ [2014, 0.009],
53
+ [2015, 0.018],
54
+ [2016, 0.012],
55
+ [2017, 0.020],
56
+ [2018, 0.015],
57
+ [2019, 0.023],
58
+ [2020, 0.019],
59
+ [2021, 0.010],
60
+ [2022, 0.027],
61
+ [2023, 0.065],
62
+ // Decommissionned functionnality
63
+ ],
64
+ MAX_INCOME: {
65
+ 1966: 5000,
66
+ 1967: 5000,
67
+ 1968: 5100,
68
+ 1969: 5200,
69
+ 1970: 5300,
70
+ 1971: 5400,
71
+ 1972: 5500,
72
+ 1973: 5900,
73
+ 1974: 6600,
74
+ 1975: 7400,
75
+ 1976: 8300,
76
+ 1977: 9300,
77
+ 1978: 10400,
78
+ 1979: 11700,
79
+ 1980: 13100,
80
+ 1981: 14700,
81
+ 1982: 16500,
82
+ 1983: 18500,
83
+ 1984: 20800,
84
+ 1985: 23400,
85
+ 1986: 25800,
86
+ 1987: 25900,
87
+ 1988: 26500,
88
+ 1989: 27700,
89
+ 1990: 28900,
90
+ 1991: 30500,
91
+ 1992: 32200,
92
+ 1993: 33400,
93
+ 1994: 34400,
94
+ 1995: 34900,
95
+ 1996: 35400,
96
+ 1997: 35800,
97
+ 1998: 36900,
98
+ 1999: 37400,
99
+ 2000: 37600,
100
+ 2001: 38300,
101
+ 2002: 39100,
102
+ 2003: 39900,
103
+ 2004: 40500,
104
+ 2005: 41100,
105
+ 2006: 42100,
106
+ 2007: 43700,
107
+ 2008: 44900,
108
+ 2009: 46300,
109
+ 2010: 47200,
110
+ 2011: 48300,
111
+ 2012: 50100,
112
+ 2013: 51100,
113
+ 2014: 52500,
114
+ 2015: 53600,
115
+ 2016: 54900,
116
+ 2017: 55300,
117
+ 2018: 55900,
118
+ 2019: 57400,
119
+ 2020: 58700,
120
+ 2021: 61600,
121
+ 2022: 64900,
122
+ 2023: 66600,
123
+ 2024: 68500,
124
+ 2025: 71300,
125
+ },
126
+ MAX_PENSION: {
127
+ // Max amount at age 65
128
+ RETIREMENT: 17196,
129
+ // Value must be the same as Max Retirement for the QPP
130
+ COMBINED_RETIREMENT_SURVIVOR: 17196,
131
+ DEATH_BENEFIT: 2500,
132
+ },
133
+ MAX_REQUEST_AGE: 72,
134
+ MIN_REQUEST_AGE: 60,
135
+ MONTHLY_DELAY: {
136
+ BONUS: 0.0070,
137
+ PENALTY: 0.0060,
138
+ },
139
+ REPLACEMENT_FACTOR: 0.25,
140
+ SURVIVOR_RATES: {
141
+ OVER_64: 0.6,
142
+ UNDER_65: 0.375,
143
+ },
144
+ YEARS_TO_FULL_PENSION: 40,
145
+ getRequestDateFactor(birthDate, requestDate, customReferenceDate) {
146
+ const { BONUS, PENALTY } = this.MONTHLY_DELAY;
147
+ const minRequestDate = (0, date_1.addYearsToDate)(birthDate, this.MIN_REQUEST_AGE);
148
+ const maxRequestDate = (0, date_1.addYearsToDate)(birthDate, this.MAX_REQUEST_AGE);
149
+ const referenceDate = customReferenceDate || (0, date_1.addYearsToDate)(birthDate, this.DEFAULT_REFERENCE_AGE);
150
+ const monthsToToday = (0, date_1.getMonthsDiff)(birthDate, (0, date_1.now)());
151
+ const monthsToMinRequestDate = (0, date_1.getMonthsDiff)(birthDate, minRequestDate);
152
+ const monthsToMaxRequestDate = (0, date_1.getMonthsDiff)(birthDate, maxRequestDate);
153
+ const monthsToReferenceDate = (0, date_1.getMonthsDiff)(birthDate, referenceDate);
154
+ const monthsToRequestDate = (0, date_1.getMonthsDiff)(birthDate, requestDate);
155
+ const monthsToLastBirthDay = monthsToToday - (monthsToToday % 12);
156
+ // Request date is before minimum request date
157
+ if (monthsToRequestDate < monthsToMinRequestDate) {
158
+ return 0;
159
+ }
160
+ // Analysis date is after the maximum request date
161
+ if (monthsToMaxRequestDate < monthsToToday) {
162
+ return 1;
163
+ }
164
+ // Analysis date is after reference date and request date is before last birthday
165
+ if (monthsToToday > monthsToReferenceDate && monthsToRequestDate < monthsToLastBirthDay) {
166
+ return 1;
167
+ }
168
+ let monthsDelta = (0, math_1.clamp)(monthsToRequestDate, monthsToMinRequestDate, monthsToMaxRequestDate);
169
+ monthsDelta -= Math.max(monthsToLastBirthDay, monthsToReferenceDate);
170
+ return 1 + (monthsDelta * (monthsDelta >= 0 ? BONUS : PENALTY));
171
+ },
172
+ getAverageIndexationRate() {
173
+ const sum = this.INDEXATION_RATE_REFERENCES.reduce((previous, current) => previous + current[1], 0);
174
+ return (0, math_1.roundToPrecision)(sum / this.INDEXATION_RATE_REFERENCES.length, 2);
175
+ },
176
+ };
@@ -0,0 +1,5 @@
1
+ export interface SupplementalPensionPlan {
2
+ MAX_BRIDGE_BENEFIT_AGE: number;
3
+ MIN_AGE: number;
4
+ }
5
+ export declare const SPP: SupplementalPensionPlan;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ /*
3
+ Sources
4
+ https://www.canada.ca/en/treasury-board-secretariat/services/pension-plan/plan-information/retirement-income-sources.html
5
+
6
+ Revised
7
+ 2024-12-24
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.SPP = void 0;
11
+ exports.SPP = {
12
+ MAX_BRIDGE_BENEFIT_AGE: 65,
13
+ MIN_AGE: 55,
14
+ };
@@ -0,0 +1,8 @@
1
+ import { FederalCode, ProvinceCode } from '../misc';
2
+ export type DividendTaxCreditRate = {
3
+ GROSS_UP: number;
4
+ } & {
5
+ [key in ProvinceCode | FederalCode]: number;
6
+ };
7
+ export declare const NON_ELIGIBLE_DIVIDEND: DividendTaxCreditRate;
8
+ export declare const ELIGIBLE_DIVIDEND: DividendTaxCreditRate;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ /*
3
+ Sources
4
+ Non-eligible Dividends: https://www.taxtips.ca/dtc/non-eligible-dividend-tax-credit.htm
5
+ Eligible Dividends: https://www.taxtips.ca/dtc/eligible-dividends/eligible-dividend-tax-credit-rates.htm
6
+
7
+ Revised
8
+ 2024-12-24
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.ELIGIBLE_DIVIDEND = exports.NON_ELIGIBLE_DIVIDEND = void 0;
12
+ exports.NON_ELIGIBLE_DIVIDEND = {
13
+ GROSS_UP: 1.15,
14
+ CA: 0.090301,
15
+ AB: 0.0218,
16
+ BC: 0.0196,
17
+ MB: 0.007835,
18
+ NB: 0.0275,
19
+ NL: 0.032,
20
+ NS: 0.0299,
21
+ NT: 0.06,
22
+ NU: 0.0261,
23
+ ON: 0.029863,
24
+ PE: 0.013,
25
+ QC: 0.0342,
26
+ SK: 0.02938,
27
+ YT: 0.0067,
28
+ };
29
+ exports.ELIGIBLE_DIVIDEND = {
30
+ GROSS_UP: 1.38,
31
+ CA: 0.150198,
32
+ AB: 0.0812,
33
+ BC: 0.12,
34
+ MB: 0.08,
35
+ NB: 0.14,
36
+ NL: 0.063,
37
+ NS: 0.0885,
38
+ NT: 0.115,
39
+ NU: 0.0551,
40
+ ON: 0.1,
41
+ PE: 0.105,
42
+ QC: 0.117,
43
+ SK: 0.11,
44
+ YT: 0.1202,
45
+ };
@@ -0,0 +1,9 @@
1
+ export interface PremiumRate {
2
+ CA: number;
3
+ QC: number;
4
+ }
5
+ export interface EmploymentInsurance {
6
+ MAX_INSURABLE_EARNINGS: number;
7
+ PREMIUM_RATES: PremiumRate;
8
+ }
9
+ export declare const EI: EmploymentInsurance;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /*
3
+ Sources
4
+ https://www.canada.ca/en/employment-social-development/programs/ei/ei-list/ei-employers/premium-reduction-program/2025-maximum-insurable-earnings.html
5
+
6
+ Notes
7
+ The URL is based on a specific year.
8
+
9
+ Revised
10
+ 2024-12-24
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.EI = void 0;
14
+ exports.EI = {
15
+ MAX_INSURABLE_EARNINGS: 65700,
16
+ PREMIUM_RATES: {
17
+ CA: 0.0164,
18
+ QC: 0.0131,
19
+ },
20
+ };
@@ -0,0 +1,39 @@
1
+ import { FederalCode, ProvinceCode } from '../misc';
2
+ export interface Rate {
3
+ FROM: number;
4
+ TO: number;
5
+ RATE: number;
6
+ }
7
+ export interface TaxBracket {
8
+ ABATEMENT: number;
9
+ TAX_CREDIT_RATE: number;
10
+ BASE_TAX_CREDIT: number;
11
+ RATES: Rate[];
12
+ SURTAX_RATES: Rate[];
13
+ }
14
+ export type TaxBrackets = {
15
+ [key in ProvinceCode | FederalCode]: TaxBracket;
16
+ };
17
+ export declare const CA_LOWEST_TAX_RATE_2025 = 0.145;
18
+ export declare const TAX_BRACKETS: TaxBrackets;
19
+ export declare function getTaxAmount(rates: Rate[], income: number, inflationRate: number, yearsToInflate: number): number;
20
+ export declare function getRate(brackets: Rate[], grossIncome: number, inflationRate: number, yearsToInflate: number): number;
21
+ export declare function getTaxRates(code: ProvinceCode | FederalCode): Rate[];
22
+ export declare function getFederalTaxRates(yearsToInflate: number): Rate[];
23
+ export declare function getFederalBaseTaxAmount(grossIncome: number, inflationRate?: number, yearsToInflate?: number): number;
24
+ export declare function getFederalTaxCreditRate(yearsToInflate: number): number;
25
+ export declare function getFederalBaseCredit(inflationRate: number, yearsToInflate: number): number;
26
+ export declare function getProvincialAbatement(province: ProvinceCode, federalTaxAmount: number): number;
27
+ export declare function getFederalTaxAmount(provincialCode: ProvinceCode, grossIncome: number, inflationRate?: number, yearsToInflate?: number, taxCredit?: number): number;
28
+ export declare function getProvincialSurtaxAmount(province: ProvinceCode, baseTaxAmount: number, inflationRate?: number, yearsToInflate?: number): number;
29
+ export declare function getProvincialBaseTaxAmount(province: ProvinceCode, grossIncome: number, inflationRate?: number, yearsToInflate?: number): number;
30
+ export declare function getProvincialBaseCredit(province: ProvinceCode, inflationRate: number, yearsToInflate: number): number;
31
+ export declare function getProvincialTaxAmount(province: ProvinceCode, grossIncome: number, inflationRate?: number, yearsToInflate?: number, taxCredit?: number): number;
32
+ export declare function getFederalMarginalRate(provincialCode: ProvinceCode, grossIncome: number, inflationRate?: number, yearsToInflate?: number): number;
33
+ export declare function getProvincialMarginalRate(provincialCode: ProvinceCode, grossIncome: number, inflationRate?: number, yearsToInflate?: number): number;
34
+ export declare function getTotalMarginalRate(provincialCode: ProvinceCode, grossIncome: number, inflationRate?: number, yearsToInflate?: number): number;
35
+ export declare function getMaxProvincialMarginalRate(provincialCode: ProvinceCode): number;
36
+ export declare function getMaxFederalMarginalRate(provincialCode: ProvinceCode): number;
37
+ export declare function getTotalMaxMarginalRate(provincialCode: ProvinceCode): number;
38
+ export declare function getTotalTaxAmount(provincialCode: ProvinceCode, grossIncome: number, inflationRate?: number, yearsToInflate?: number): number;
39
+ export declare function getEffectiveRate(province: ProvinceCode, income: number, inflationRate?: number, yearsToInflate?: number): number;