@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.
- package/.eslintrc.json +42 -0
- package/.tool-versions +1 -0
- package/Makefile +28 -0
- package/README.md +113 -0
- package/RELEASE.md +29 -0
- package/babel.config.js +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +21 -0
- package/dist/investments/index.d.ts +6 -0
- package/dist/investments/index.js +22 -0
- package/dist/investments/life-income-fund.d.ts +11 -0
- package/dist/investments/life-income-fund.js +291 -0
- package/dist/investments/non-registered-savings-plan.d.ts +3 -0
- package/dist/investments/non-registered-savings-plan.js +30 -0
- package/dist/investments/registered-education-savings-plan/beneficiary.d.ts +4 -0
- package/dist/investments/registered-education-savings-plan/beneficiary.js +16 -0
- package/dist/investments/registered-education-savings-plan/british-columbia-training-and-education-savings-grant.d.ts +10 -0
- package/dist/investments/registered-education-savings-plan/british-columbia-training-and-education-savings-grant.js +21 -0
- package/dist/investments/registered-education-savings-plan/canada-education-savings-grant.d.ts +2 -0
- package/dist/investments/registered-education-savings-plan/canada-education-savings-grant.js +23 -0
- package/dist/investments/registered-education-savings-plan/canada-learning-bond.d.ts +12 -0
- package/dist/investments/registered-education-savings-plan/canada-learning-bond.js +19 -0
- package/dist/investments/registered-education-savings-plan/income-level.d.ts +11 -0
- package/dist/investments/registered-education-savings-plan/income-level.js +32 -0
- package/dist/investments/registered-education-savings-plan/index.d.ts +7 -0
- package/dist/investments/registered-education-savings-plan/index.js +23 -0
- package/dist/investments/registered-education-savings-plan/quebec-education-savings-incentive.d.ts +2 -0
- package/dist/investments/registered-education-savings-plan/quebec-education-savings-incentive.js +17 -0
- package/dist/investments/registered-education-savings-plan/savings-grant.d.ts +25 -0
- package/dist/investments/registered-education-savings-plan/savings-grant.js +51 -0
- package/dist/investments/registered-education-savings-plan/tuition-fees.d.ts +6 -0
- package/dist/investments/registered-education-savings-plan/tuition-fees.js +33 -0
- package/dist/investments/registered-retirement-income-fund.d.ts +7 -0
- package/dist/investments/registered-retirement-income-fund.js +68 -0
- package/dist/investments/registered-retirement-savings-plan.d.ts +9 -0
- package/dist/investments/registered-retirement-savings-plan.js +20 -0
- package/dist/investments/tax-free-savings-account.d.ts +7 -0
- package/dist/investments/tax-free-savings-account.js +21 -0
- package/dist/misc/code-types.d.ts +11 -0
- package/dist/misc/code-types.js +19 -0
- package/dist/misc/consumer-price-index.d.ts +34 -0
- package/dist/misc/consumer-price-index.js +240 -0
- package/dist/misc/index.d.ts +5 -0
- package/dist/misc/index.js +21 -0
- package/dist/misc/ipf-stats.d.ts +18 -0
- package/dist/misc/ipf-stats.js +25 -0
- package/dist/misc/life-expectancy.d.ts +28 -0
- package/dist/misc/life-expectancy.js +58 -0
- package/dist/misc/ppp-increase-factor.d.ts +10 -0
- package/dist/misc/ppp-increase-factor.js +25 -0
- package/dist/pension/canada-pension-plan.d.ts +2 -0
- package/dist/pension/canada-pension-plan.js +176 -0
- package/dist/pension/index.d.ts +5 -0
- package/dist/pension/index.js +21 -0
- package/dist/pension/old-age-security.d.ts +21 -0
- package/dist/pension/old-age-security.js +70 -0
- package/dist/pension/public-pension-plan.d.ts +63 -0
- package/dist/pension/public-pension-plan.js +2 -0
- package/dist/pension/quebec-pension-plan.d.ts +2 -0
- package/dist/pension/quebec-pension-plan.js +176 -0
- package/dist/pension/supplemental-pension-plan.d.ts +5 -0
- package/dist/pension/supplemental-pension-plan.js +14 -0
- package/dist/taxes/dividend-credit.d.ts +8 -0
- package/dist/taxes/dividend-credit.js +45 -0
- package/dist/taxes/employment-insurance.d.ts +9 -0
- package/dist/taxes/employment-insurance.js +20 -0
- package/dist/taxes/income-tax.d.ts +39 -0
- package/dist/taxes/income-tax.js +593 -0
- package/dist/taxes/index.d.ts +4 -0
- package/dist/taxes/index.js +20 -0
- package/dist/taxes/quebec-parental-insurance-plan.d.ts +9 -0
- package/dist/taxes/quebec-parental-insurance-plan.js +17 -0
- package/dist/utils/collections.d.ts +1 -0
- package/dist/utils/collections.js +7 -0
- package/dist/utils/date.d.ts +3 -0
- package/dist/utils/date.js +18 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/math.d.ts +2 -0
- package/dist/utils/math.js +16 -0
- package/package.json +68 -0
- 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,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,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,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;
|