@equisoft/tax-ca 2021.8.0 → 2022.0.0
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/dist/investments/life-income-fund.d.ts +2 -2
- package/dist/investments/life-income-fund.js +53 -50
- package/dist/investments/registered-retirement-income-fund.js +3 -2
- package/dist/investments/registered-retirement-savings-plan.js +4 -3
- package/dist/investments/tax-free-savings-account.js +3 -2
- package/dist/misc/consumer-price-index.d.ts +1 -0
- package/dist/misc/consumer-price-index.js +20 -3
- package/dist/misc/iqpf-stats.js +3 -2
- package/dist/misc/life-expectancy.js +3 -2
- package/dist/pension/canada-pension-plan.js +29 -29
- package/dist/pension/old-age-security.js +11 -10
- package/dist/pension/public-pension-plan.d.ts +1 -1
- package/dist/pension/quebec-pension-plan.js +27 -24
- package/dist/pension/supplemental-pension-plan.js +2 -1
- package/dist/taxes/dividend-credit.js +10 -9
- package/dist/taxes/employment-insurance.js +5 -4
- package/dist/taxes/income-tax.js +111 -98
- package/dist/taxes/quebec-parental-insurance-plan.js +4 -3
- package/package.json +3 -3
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { FederalCode, ProvinceCode } from '../misc
|
|
1
|
+
import { FederalCode, ProvinceCode } from '../misc';
|
|
2
2
|
interface MaxWithdrawalPctByAge {
|
|
3
3
|
[key: number]: number;
|
|
4
4
|
}
|
|
5
5
|
export declare const province1MaxWithdrawalPct: MaxWithdrawalPctByAge;
|
|
6
6
|
export declare const province2MaxWithdrawalPct: MaxWithdrawalPctByAge;
|
|
7
|
-
export declare const federalMaxWithdrawalPct: MaxWithdrawalPctByAge;
|
|
8
7
|
export declare const othersMaxWithdrawalPct: MaxWithdrawalPctByAge;
|
|
8
|
+
export declare const federalMaxWithdrawalPct: MaxWithdrawalPctByAge;
|
|
9
9
|
export declare function getMaxWithdrawalPct(jurisdiction: ProvinceCode | FederalCode, age: number): number;
|
|
10
10
|
export {};
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
// tslint:disable:max-line-length
|
|
2
3
|
/*
|
|
3
|
-
Sources
|
|
4
|
-
Federal: http://www.osfi-bsif.gc.ca/Eng/pp-rr/faq/Pages/lif-frv.aspx
|
|
4
|
+
Sources
|
|
5
5
|
Provincial: https://www.empire.ca/sites/default/files/2020-02/INV-996A-LIFMinMaxWithdrawalPercentages-EN-web_0.pdf
|
|
6
|
+
https://ca.rbcwealthmanagement.com/documents/634020/2289317/2021+-+Registered+Plan+Minimums+and+Maximums.pdf/ded97359-099d-4650-b626-67358d78f3af
|
|
7
|
+
Federal: http://www.osfi-bsif.gc.ca/Eng/pp-rr/faq/Pages/lif-frv.aspx
|
|
6
8
|
|
|
7
|
-
Revised
|
|
9
|
+
Revised
|
|
10
|
+
2021-12-21
|
|
8
11
|
*/
|
|
12
|
+
// tslint:enable:max-line-length
|
|
9
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.getMaxWithdrawalPct = exports.
|
|
11
|
-
const
|
|
14
|
+
exports.getMaxWithdrawalPct = exports.federalMaxWithdrawalPct = exports.othersMaxWithdrawalPct = exports.province2MaxWithdrawalPct = exports.province1MaxWithdrawalPct = void 0;
|
|
15
|
+
const utils_1 = require("../utils");
|
|
12
16
|
/* Alberta (AB), British Columbia (BC), Ontario (ON), New Brunswick (NB),
|
|
13
17
|
Newfoundland and Labrador (NL), Saskatchewan (SK)
|
|
14
|
-
|
|
18
|
+
*/
|
|
15
19
|
exports.province1MaxWithdrawalPct = {
|
|
16
20
|
54: 0.0640,
|
|
17
21
|
55: 0.0645,
|
|
@@ -90,46 +94,6 @@ exports.province2MaxWithdrawalPct = {
|
|
|
90
94
|
88: 0.1890,
|
|
91
95
|
89: 0.2000,
|
|
92
96
|
};
|
|
93
|
-
// Federal
|
|
94
|
-
exports.federalMaxWithdrawalPct = {
|
|
95
|
-
54: 0.040251,
|
|
96
|
-
55: 0.040662,
|
|
97
|
-
56: 0.041107,
|
|
98
|
-
57: 0.041589,
|
|
99
|
-
58: 0.042113,
|
|
100
|
-
59: 0.042683,
|
|
101
|
-
60: 0.043304,
|
|
102
|
-
61: 0.043983,
|
|
103
|
-
62: 0.044726,
|
|
104
|
-
63: 0.045541,
|
|
105
|
-
64: 0.046438,
|
|
106
|
-
65: 0.047429,
|
|
107
|
-
66: 0.048526,
|
|
108
|
-
67: 0.049746,
|
|
109
|
-
68: 0.051107,
|
|
110
|
-
69: 0.052635,
|
|
111
|
-
70: 0.054357,
|
|
112
|
-
71: 0.056309,
|
|
113
|
-
72: 0.058538,
|
|
114
|
-
73: 0.061102,
|
|
115
|
-
74: 0.064077,
|
|
116
|
-
75: 0.067563,
|
|
117
|
-
76: 0.071699,
|
|
118
|
-
77: 0.076427,
|
|
119
|
-
78: 0.081883,
|
|
120
|
-
79: 0.088251,
|
|
121
|
-
80: 0.095777,
|
|
122
|
-
81: 0.104811,
|
|
123
|
-
82: 0.115855,
|
|
124
|
-
83: 0.129661,
|
|
125
|
-
84: 0.147416,
|
|
126
|
-
85: 0.171091,
|
|
127
|
-
86: 0.20424,
|
|
128
|
-
87: 0.253968,
|
|
129
|
-
88: 0.336854,
|
|
130
|
-
89: 0.502636,
|
|
131
|
-
90: 1,
|
|
132
|
-
};
|
|
133
97
|
// Others: Northwest Territories (NT), Nunavut (NU), Prince Edward Island (PE), Yukon (YT)
|
|
134
98
|
exports.othersMaxWithdrawalPct = {
|
|
135
99
|
54: 0.0270,
|
|
@@ -176,6 +140,45 @@ exports.othersMaxWithdrawalPct = {
|
|
|
176
140
|
95: 0.1879,
|
|
177
141
|
96: 0.2000,
|
|
178
142
|
};
|
|
143
|
+
// Federal
|
|
144
|
+
exports.federalMaxWithdrawalPct = {
|
|
145
|
+
54: 0.044832,
|
|
146
|
+
55: 0.045301,
|
|
147
|
+
56: 0.045808,
|
|
148
|
+
57: 0.046359,
|
|
149
|
+
58: 0.046957,
|
|
150
|
+
59: 0.047608,
|
|
151
|
+
60: 0.048318,
|
|
152
|
+
61: 0.049094,
|
|
153
|
+
62: 0.049944,
|
|
154
|
+
63: 0.050878,
|
|
155
|
+
64: 0.051907,
|
|
156
|
+
65: 0.053045,
|
|
157
|
+
66: 0.054306,
|
|
158
|
+
67: 0.05571,
|
|
159
|
+
68: 0.05728,
|
|
160
|
+
69: 0.059044,
|
|
161
|
+
70: 0.061036,
|
|
162
|
+
71: 0.0633,
|
|
163
|
+
72: 0.06589,
|
|
164
|
+
73: 0.068878,
|
|
165
|
+
74: 0.072356,
|
|
166
|
+
75: 0.076448,
|
|
167
|
+
76: 0.08113,
|
|
168
|
+
77: 0.086536,
|
|
169
|
+
78: 0.092849,
|
|
170
|
+
79: 0.100316,
|
|
171
|
+
80: 0.109283,
|
|
172
|
+
81: 0.12025,
|
|
173
|
+
82: 0.133967,
|
|
174
|
+
83: 0.151612,
|
|
175
|
+
84: 0.175151,
|
|
176
|
+
85: 0.208118,
|
|
177
|
+
86: 0.257586,
|
|
178
|
+
87: 0.340054,
|
|
179
|
+
88: 0.505024,
|
|
180
|
+
89: 1,
|
|
181
|
+
};
|
|
179
182
|
function getMaxWithdrawalPct(jurisdiction, age) {
|
|
180
183
|
switch (jurisdiction) {
|
|
181
184
|
case 'AB':
|
|
@@ -184,15 +187,15 @@ function getMaxWithdrawalPct(jurisdiction, age) {
|
|
|
184
187
|
case 'NB':
|
|
185
188
|
case 'NL':
|
|
186
189
|
case 'SK':
|
|
187
|
-
return exports.province1MaxWithdrawalPct[
|
|
190
|
+
return exports.province1MaxWithdrawalPct[utils_1.clamp(age, 54, 90)];
|
|
188
191
|
case 'QC':
|
|
189
192
|
case 'MB':
|
|
190
193
|
case 'NS':
|
|
191
|
-
return exports.province2MaxWithdrawalPct[
|
|
194
|
+
return exports.province2MaxWithdrawalPct[utils_1.clamp(age, 54, 89)];
|
|
192
195
|
case 'CA':
|
|
193
|
-
return exports.federalMaxWithdrawalPct[
|
|
196
|
+
return exports.federalMaxWithdrawalPct[utils_1.clamp(age, 54, 89)];
|
|
194
197
|
default:
|
|
195
|
-
return exports.othersMaxWithdrawalPct[
|
|
198
|
+
return exports.othersMaxWithdrawalPct[utils_1.clamp(age, 54, 96)];
|
|
196
199
|
}
|
|
197
200
|
}
|
|
198
201
|
exports.getMaxWithdrawalPct = getMaxWithdrawalPct;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// tslint:disable:max-line-length
|
|
3
3
|
/*
|
|
4
|
-
Sources
|
|
4
|
+
Sources
|
|
5
5
|
http://www.getsmarteraboutmoney.ca/en/managing-your-money/investing/rrifs-and-annuities/Pages/Making-withdrawals-from-your-RRIF.aspx
|
|
6
6
|
|
|
7
|
-
Revised
|
|
7
|
+
Revised
|
|
8
|
+
2021-12-21
|
|
8
9
|
*/
|
|
9
10
|
// tslint:enable:max-line-length
|
|
10
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// tslint:disable:max-line-length
|
|
3
3
|
/*
|
|
4
|
-
Sources
|
|
4
|
+
Sources
|
|
5
5
|
https://www.canada.ca/en/revenue-agency/services/tax/registered-plans-administrators/pspa/mp-rrsp-dpsp-tfsa-limits-ympe.html
|
|
6
6
|
|
|
7
|
-
Revised
|
|
7
|
+
Revised
|
|
8
|
+
2021-12-21
|
|
8
9
|
*/
|
|
9
10
|
// tslint:enable:max-line-length
|
|
10
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -14,5 +15,5 @@ exports.RRSP = {
|
|
|
14
15
|
MIN: 55,
|
|
15
16
|
MAX: 71,
|
|
16
17
|
},
|
|
17
|
-
MAX_CONTRIBUTION:
|
|
18
|
+
MAX_CONTRIBUTION: 29210,
|
|
18
19
|
};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// tslint:disable:max-line-length
|
|
3
3
|
/*
|
|
4
|
-
Sources
|
|
4
|
+
Sources
|
|
5
5
|
https://www.canada.ca/en/revenue-agency/services/tax/registered-plans-administrators/pspa/mp-rrsp-dpsp-tfsa-limits-ympe.html
|
|
6
6
|
|
|
7
|
-
Revised
|
|
7
|
+
Revised
|
|
8
|
+
2021-12-21
|
|
8
9
|
*/
|
|
9
10
|
// tslint:enable:max-line-length
|
|
10
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -25,6 +25,7 @@ export interface ConsumerPriceIndex {
|
|
|
25
25
|
2018: MonthlyConsumerPriceIndex;
|
|
26
26
|
2019: MonthlyConsumerPriceIndex;
|
|
27
27
|
2020: MonthlyConsumerPriceIndex;
|
|
28
|
+
2021: MonthlyConsumerPriceIndex;
|
|
28
29
|
}
|
|
29
30
|
export declare const CONSUMER_PRICE_INDEX: ConsumerPriceIndex;
|
|
30
31
|
export {};
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Sources
|
|
3
|
+
Sources
|
|
4
4
|
https://www.bankofcanada.ca/rates/price-indexes/cpi/
|
|
5
|
+
Use column v41690973
|
|
5
6
|
|
|
6
7
|
NOT USED BY FNA-ENGINE
|
|
7
|
-
Revised
|
|
8
|
+
Revised
|
|
9
|
+
2021-12-21
|
|
8
10
|
*/
|
|
9
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
12
|
exports.CONSUMER_PRICE_INDEX = void 0;
|
|
@@ -175,6 +177,21 @@ exports.CONSUMER_PRICE_INDEX = {
|
|
|
175
177
|
SEP: 136.9,
|
|
176
178
|
OCT: 137.5,
|
|
177
179
|
NOV: 137.7,
|
|
178
|
-
DEC: 137.
|
|
180
|
+
DEC: 137.4,
|
|
181
|
+
},
|
|
182
|
+
2021: {
|
|
183
|
+
JAN: 138.2,
|
|
184
|
+
FEB: 138.9,
|
|
185
|
+
MAR: 139.6,
|
|
186
|
+
APR: 140.3,
|
|
187
|
+
MAY: 141.0,
|
|
188
|
+
JUN: 141.4,
|
|
189
|
+
JUL: 142.3,
|
|
190
|
+
AUG: 142.6,
|
|
191
|
+
SEP: 142.9,
|
|
192
|
+
OCT: 143.9,
|
|
193
|
+
NOV: 144.2,
|
|
194
|
+
// DEC is estimated using the difference between OCT and NOV.
|
|
195
|
+
DEC: 144.5,
|
|
179
196
|
},
|
|
180
197
|
};
|
package/dist/misc/iqpf-stats.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Sources
|
|
3
|
+
Sources
|
|
4
4
|
https://www.iqpf.org/docs/default-source/outils/iqpf-normes-projection2021.pdf
|
|
5
5
|
|
|
6
|
-
Revised
|
|
6
|
+
Revised
|
|
7
|
+
2021-05-05
|
|
7
8
|
*/
|
|
8
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
10
|
exports.IQPF = void 0;
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Sources
|
|
3
|
+
Sources
|
|
4
4
|
http://www.cra-arc.gc.ca/tx/bsnss/tpcs/pyrll/clcltng/cpp-rpc/cnt-chrt-pf-eng.html
|
|
5
|
-
Excutive decision to calculate AVG_MAX with AVG(YMPE2019+YMPE2020+YMPE2021+YMPE2021 for 2022+YMPE2021 for 2023)
|
|
6
|
-
because YMPE is overinflated following coronavirus pandemic. Executive deciision to calculate SUP_MAX with
|
|
7
|
-
YMPE2021*1.14 because YMPE is overinflated following coronavirus pandemic.
|
|
8
5
|
https://www.canada.ca/en/services/benefits/publicpensions/cpp/payment-amounts.html
|
|
6
|
+
https://www.canada.ca/en/services/benefits/publicpensions/cpp/old-age-security/cpp-price.html
|
|
9
7
|
---
|
|
10
8
|
http://www.esdc.gc.ca/en/cpp/survivor_pension.page
|
|
11
9
|
http://www.esdc.gc.ca/en/cpp/death_benefit.page
|
|
12
10
|
http://www.esdc.gc.ca/en/reports/pension/cpp_technical_amendments.page
|
|
13
|
-
http://www.esdc.gc.ca/en/cpp/consumer_price_index.page
|
|
14
11
|
http://www.statcan.gc.ca/tables-tableaux/sum-som/l01/cst01/econ46a-eng.htm
|
|
15
12
|
|
|
16
|
-
Revised
|
|
13
|
+
Revised
|
|
14
|
+
2022-01-04
|
|
17
15
|
*/
|
|
18
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
17
|
exports.CPP = void 0;
|
|
@@ -22,12 +20,12 @@ const math_1 = require("../utils/math");
|
|
|
22
20
|
exports.CPP = {
|
|
23
21
|
CONTRIBUTIONS: {
|
|
24
22
|
PENSIONABLE_EARNINGS: {
|
|
25
|
-
MAX:
|
|
23
|
+
MAX: 64900,
|
|
26
24
|
MIN: 3500,
|
|
27
|
-
// Average
|
|
28
|
-
AVG_MAX:
|
|
25
|
+
// Average YMPE of the last 5 year (including current year)
|
|
26
|
+
AVG_MAX: 59700,
|
|
29
27
|
// 114% of AVG_MAX
|
|
30
|
-
SUP_MAX:
|
|
28
|
+
SUP_MAX: 68058,
|
|
31
29
|
SUP_FACTORS: [
|
|
32
30
|
{ FROM: 2019, TO: 2023, FACTOR: 1 },
|
|
33
31
|
{ FROM: 2024, TO: 2024, FACTOR: 1.07 },
|
|
@@ -49,24 +47,24 @@ exports.CPP = {
|
|
|
49
47
|
DEATH_BENEFIT: { RATE: 0.5 },
|
|
50
48
|
DEFAULT_REFERENCE_AGE: 65,
|
|
51
49
|
FLAT_BENEFIT: {
|
|
52
|
-
ORPHAN:
|
|
53
|
-
DISABILITY:
|
|
54
|
-
UNDER_45:
|
|
55
|
-
UNDER_45_WITH_CHILD:
|
|
56
|
-
UNDER_45_DISABLED:
|
|
57
|
-
FROM_45_TO_64:
|
|
58
|
-
OVER_64_WITHOUT_PENSION:
|
|
50
|
+
ORPHAN: 3174.36,
|
|
51
|
+
DISABILITY: 17577.96,
|
|
52
|
+
UNDER_45: 8097.48,
|
|
53
|
+
UNDER_45_WITH_CHILD: 8097.48,
|
|
54
|
+
UNDER_45_DISABLED: 8097.48,
|
|
55
|
+
FROM_45_TO_64: 8097.48,
|
|
56
|
+
OVER_64_WITHOUT_PENSION: 9025.80,
|
|
59
57
|
},
|
|
60
58
|
getRequestDateFactor(birthDate, requestDate, customReferenceDate) {
|
|
61
59
|
const { BONUS, PENALTY } = this.MONTHLY_DELAY;
|
|
62
|
-
const minRequestDate =
|
|
63
|
-
const maxRequestDate =
|
|
64
|
-
const referenceDate = customReferenceDate ||
|
|
65
|
-
const monthsToToday =
|
|
66
|
-
const monthsToMinRequestDate =
|
|
67
|
-
const monthsToMaxRequestDate =
|
|
68
|
-
const monthsToReferenceDate =
|
|
69
|
-
const monthsToRequestDate =
|
|
60
|
+
const minRequestDate = date_1.addYearsToDate(birthDate, this.MIN_REQUEST_AGE);
|
|
61
|
+
const maxRequestDate = date_1.addYearsToDate(birthDate, this.MAX_REQUEST_AGE);
|
|
62
|
+
const referenceDate = customReferenceDate || date_1.addYearsToDate(birthDate, this.DEFAULT_REFERENCE_AGE);
|
|
63
|
+
const monthsToToday = date_1.getMonthsDiff(birthDate, date_1.now());
|
|
64
|
+
const monthsToMinRequestDate = date_1.getMonthsDiff(birthDate, minRequestDate);
|
|
65
|
+
const monthsToMaxRequestDate = date_1.getMonthsDiff(birthDate, maxRequestDate);
|
|
66
|
+
const monthsToReferenceDate = date_1.getMonthsDiff(birthDate, referenceDate);
|
|
67
|
+
const monthsToRequestDate = date_1.getMonthsDiff(birthDate, requestDate);
|
|
70
68
|
const monthsToLastBirthDay = monthsToToday - (monthsToToday % 12);
|
|
71
69
|
// Request date is before minimum request date
|
|
72
70
|
if (monthsToRequestDate < monthsToMinRequestDate) {
|
|
@@ -80,13 +78,13 @@ exports.CPP = {
|
|
|
80
78
|
if (monthsToToday > monthsToReferenceDate && monthsToRequestDate < monthsToLastBirthDay) {
|
|
81
79
|
return 1;
|
|
82
80
|
}
|
|
83
|
-
let monthsDelta =
|
|
81
|
+
let monthsDelta = math_1.clamp(monthsToRequestDate, monthsToMinRequestDate, monthsToMaxRequestDate);
|
|
84
82
|
monthsDelta -= Math.max(monthsToLastBirthDay, monthsToReferenceDate);
|
|
85
83
|
return 1 + monthsDelta * (monthsDelta >= 0 ? BONUS : PENALTY);
|
|
86
84
|
},
|
|
87
85
|
getAverageIndexationRate() {
|
|
88
86
|
const sum = this.INDEXATION_RATE_REFERENCES.reduce((previous, current) => previous + current[1], 0);
|
|
89
|
-
return
|
|
87
|
+
return math_1.roundToPrecision(sum / this.INDEXATION_RATE_REFERENCES.length, 3);
|
|
90
88
|
},
|
|
91
89
|
INDEXATION_RATE_REFERENCES: [
|
|
92
90
|
[2007, 0.020],
|
|
@@ -104,6 +102,7 @@ exports.CPP = {
|
|
|
104
102
|
[2019, 0.023],
|
|
105
103
|
[2020, 0.019],
|
|
106
104
|
[2021, 0.010],
|
|
105
|
+
[2022, 0.027],
|
|
107
106
|
],
|
|
108
107
|
MAX_INCOME: {
|
|
109
108
|
1966: 5000,
|
|
@@ -162,10 +161,11 @@ exports.CPP = {
|
|
|
162
161
|
2019: 57400,
|
|
163
162
|
2020: 58700,
|
|
164
163
|
2021: 61600,
|
|
164
|
+
2022: 64900,
|
|
165
165
|
},
|
|
166
166
|
MAX_PENSION: {
|
|
167
|
-
RETIREMENT:
|
|
168
|
-
COMBINED_RETIREMENT_SURVIVOR:
|
|
167
|
+
RETIREMENT: 15043.08,
|
|
168
|
+
COMBINED_RETIREMENT_SURVIVOR: 15085.56,
|
|
169
169
|
DEATH_BENEFIT: 2500,
|
|
170
170
|
},
|
|
171
171
|
MAX_REQUEST_AGE: 70,
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Sources
|
|
3
|
+
Sources
|
|
4
4
|
https://www.canada.ca/en/services/benefits/publicpensions/cpp/old-age-security/benefit-amount.html
|
|
5
5
|
https://www.canada.ca/en/services/benefits/publicpensions/cpp/old-age-security/recovery-tax.html
|
|
6
6
|
https://www.canada.ca/en/services/benefits/publicpensions/cpp/old-age-security/eligibility.html (delay bonus)
|
|
7
7
|
https://www.canada.ca/en/services/benefits/publicpensions/cpp/old-age-security/payments.html
|
|
8
8
|
|
|
9
|
-
Revised
|
|
9
|
+
Revised
|
|
10
|
+
2021-12-21
|
|
10
11
|
*/
|
|
11
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
13
|
exports.OAS = void 0;
|
|
@@ -14,12 +15,12 @@ const date_1 = require("../utils/date");
|
|
|
14
15
|
const math_1 = require("../utils/math");
|
|
15
16
|
exports.OAS = {
|
|
16
17
|
getRequestDateFactor(birthDate, requestDate) {
|
|
17
|
-
const minRequestDate =
|
|
18
|
-
const maxRequestDate =
|
|
19
|
-
const monthsToToday =
|
|
20
|
-
const monthsToMinRequestDate =
|
|
21
|
-
const monthsToMaxRequestDate =
|
|
22
|
-
const monthsToRequestDate =
|
|
18
|
+
const minRequestDate = date_1.addYearsToDate(birthDate, this.MIN_AGE);
|
|
19
|
+
const maxRequestDate = date_1.addYearsToDate(birthDate, this.MAX_AGE);
|
|
20
|
+
const monthsToToday = date_1.getMonthsDiff(birthDate, date_1.now());
|
|
21
|
+
const monthsToMinRequestDate = date_1.getMonthsDiff(birthDate, minRequestDate);
|
|
22
|
+
const monthsToMaxRequestDate = date_1.getMonthsDiff(birthDate, maxRequestDate);
|
|
23
|
+
const monthsToRequestDate = date_1.getMonthsDiff(birthDate, requestDate);
|
|
23
24
|
const monthsToLastBirthDay = monthsToToday - (monthsToToday % 12);
|
|
24
25
|
// Request date is before minimum request date
|
|
25
26
|
if (monthsToRequestDate < monthsToMinRequestDate) {
|
|
@@ -29,7 +30,7 @@ exports.OAS = {
|
|
|
29
30
|
if (monthsToMaxRequestDate < monthsToToday || monthsToRequestDate < monthsToLastBirthDay) {
|
|
30
31
|
return 1;
|
|
31
32
|
}
|
|
32
|
-
let monthsDelta =
|
|
33
|
+
let monthsDelta = math_1.clamp(monthsToRequestDate, monthsToMinRequestDate, monthsToMaxRequestDate);
|
|
33
34
|
monthsDelta -= Math.max(monthsToLastBirthDay, monthsToMinRequestDate);
|
|
34
35
|
return 1 + (monthsDelta * this.MONTHLY_DELAY_BONUS);
|
|
35
36
|
},
|
|
@@ -39,7 +40,7 @@ exports.OAS = {
|
|
|
39
40
|
MONTHLY_DELAY_BONUS: 0.006,
|
|
40
41
|
REPAYMENT: {
|
|
41
42
|
MAX: 129757,
|
|
42
|
-
MIN:
|
|
43
|
+
MIN: 79845,
|
|
43
44
|
RATIO: 0.15,
|
|
44
45
|
},
|
|
45
46
|
};
|
|
@@ -32,7 +32,7 @@ export interface FlatBenefit {
|
|
|
32
32
|
FROM_45_TO_64: number;
|
|
33
33
|
OVER_64_WITHOUT_PENSION: number;
|
|
34
34
|
}
|
|
35
|
-
export declare type IndexationRateReferenceYear = 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021;
|
|
35
|
+
export declare type IndexationRateReferenceYear = 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022;
|
|
36
36
|
export declare type IndexationRateReference = [IndexationRateReferenceYear, number];
|
|
37
37
|
export interface MaxPension {
|
|
38
38
|
RETIREMENT: number;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// tslint:disable:max-line-length
|
|
3
3
|
/*
|
|
4
|
-
Sources
|
|
4
|
+
Sources
|
|
5
5
|
http://www.rrq.gouv.qc.ca/en/programmes/regime_rentes/regime_chiffres/Pages/regime_chiffres.aspx
|
|
6
6
|
https://www.rrq.gouv.qc.ca/en/services/publications/regime_rentes/retraite/Pages/tableaux-revenus-travail-admissibles.aspx
|
|
7
7
|
|
|
8
|
-
Revised
|
|
8
|
+
Revised
|
|
9
|
+
2022-01-04
|
|
9
10
|
*/
|
|
10
11
|
// tslint:enable:max-line-length
|
|
11
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -15,12 +16,12 @@ const math_1 = require("../utils/math");
|
|
|
15
16
|
exports.QPP = {
|
|
16
17
|
CONTRIBUTIONS: {
|
|
17
18
|
PENSIONABLE_EARNINGS: {
|
|
18
|
-
MAX:
|
|
19
|
+
MAX: 64900,
|
|
19
20
|
MIN: 3500,
|
|
20
21
|
// Average YPE of the last 5 year (including current year)
|
|
21
|
-
AVG_MAX:
|
|
22
|
+
AVG_MAX: 59700,
|
|
22
23
|
// 114% of AVG_MAX
|
|
23
|
-
SUP_MAX:
|
|
24
|
+
SUP_MAX: 68058,
|
|
24
25
|
SUP_FACTORS: [
|
|
25
26
|
{ FROM: 2019, TO: 2023, FACTOR: 1 },
|
|
26
27
|
{ FROM: 2024, TO: 2024, FACTOR: 1.07 },
|
|
@@ -42,24 +43,24 @@ exports.QPP = {
|
|
|
42
43
|
DEATH_BENEFIT: { RATE: 0.5 },
|
|
43
44
|
DEFAULT_REFERENCE_AGE: 65,
|
|
44
45
|
FLAT_BENEFIT: {
|
|
45
|
-
ORPHAN:
|
|
46
|
-
DISABILITY:
|
|
47
|
-
UNDER_45:
|
|
48
|
-
UNDER_45_WITH_CHILD:
|
|
49
|
-
UNDER_45_DISABLED:
|
|
50
|
-
FROM_45_TO_64:
|
|
51
|
-
OVER_64_WITHOUT_PENSION:
|
|
46
|
+
ORPHAN: 3174.36,
|
|
47
|
+
DISABILITY: 17565.96,
|
|
48
|
+
UNDER_45: 7268.16,
|
|
49
|
+
UNDER_45_WITH_CHILD: 11501.16,
|
|
50
|
+
UNDER_45_DISABLED: 11951.04,
|
|
51
|
+
FROM_45_TO_64: 11951.04,
|
|
52
|
+
OVER_64_WITHOUT_PENSION: 9013.80,
|
|
52
53
|
},
|
|
53
54
|
getRequestDateFactor(birthDate, requestDate, customReferenceDate) {
|
|
54
55
|
const { BONUS, PENALTY } = this.MONTHLY_DELAY;
|
|
55
|
-
const minRequestDate =
|
|
56
|
-
const maxRequestDate =
|
|
57
|
-
const referenceDate = customReferenceDate ||
|
|
58
|
-
const monthsToToday =
|
|
59
|
-
const monthsToMinRequestDate =
|
|
60
|
-
const monthsToMaxRequestDate =
|
|
61
|
-
const monthsToReferenceDate =
|
|
62
|
-
const monthsToRequestDate =
|
|
56
|
+
const minRequestDate = date_1.addYearsToDate(birthDate, this.MIN_REQUEST_AGE);
|
|
57
|
+
const maxRequestDate = date_1.addYearsToDate(birthDate, this.MAX_REQUEST_AGE);
|
|
58
|
+
const referenceDate = customReferenceDate || date_1.addYearsToDate(birthDate, this.DEFAULT_REFERENCE_AGE);
|
|
59
|
+
const monthsToToday = date_1.getMonthsDiff(birthDate, date_1.now());
|
|
60
|
+
const monthsToMinRequestDate = date_1.getMonthsDiff(birthDate, minRequestDate);
|
|
61
|
+
const monthsToMaxRequestDate = date_1.getMonthsDiff(birthDate, maxRequestDate);
|
|
62
|
+
const monthsToReferenceDate = date_1.getMonthsDiff(birthDate, referenceDate);
|
|
63
|
+
const monthsToRequestDate = date_1.getMonthsDiff(birthDate, requestDate);
|
|
63
64
|
const monthsToLastBirthDay = monthsToToday - (monthsToToday % 12);
|
|
64
65
|
// Request date is before minimum request date
|
|
65
66
|
if (monthsToRequestDate < monthsToMinRequestDate) {
|
|
@@ -73,13 +74,13 @@ exports.QPP = {
|
|
|
73
74
|
if (monthsToToday > monthsToReferenceDate && monthsToRequestDate < monthsToLastBirthDay) {
|
|
74
75
|
return 1;
|
|
75
76
|
}
|
|
76
|
-
let monthsDelta =
|
|
77
|
+
let monthsDelta = math_1.clamp(monthsToRequestDate, monthsToMinRequestDate, monthsToMaxRequestDate);
|
|
77
78
|
monthsDelta -= Math.max(monthsToLastBirthDay, monthsToReferenceDate);
|
|
78
79
|
return 1 + monthsDelta * (monthsDelta >= 0 ? BONUS : PENALTY);
|
|
79
80
|
},
|
|
80
81
|
getAverageIndexationRate() {
|
|
81
82
|
const sum = this.INDEXATION_RATE_REFERENCES.reduce((previous, current) => previous + current[1], 0);
|
|
82
|
-
return
|
|
83
|
+
return math_1.roundToPrecision(sum / this.INDEXATION_RATE_REFERENCES.length, 2);
|
|
83
84
|
},
|
|
84
85
|
INDEXATION_RATE_REFERENCES: [
|
|
85
86
|
[2007, 0.021],
|
|
@@ -97,6 +98,7 @@ exports.QPP = {
|
|
|
97
98
|
[2019, 0.023],
|
|
98
99
|
[2020, 0.019],
|
|
99
100
|
[2021, 0.010],
|
|
101
|
+
[2022, 0.027],
|
|
100
102
|
],
|
|
101
103
|
MAX_INCOME: {
|
|
102
104
|
1966: 5000,
|
|
@@ -155,10 +157,11 @@ exports.QPP = {
|
|
|
155
157
|
2019: 57400,
|
|
156
158
|
2020: 58700,
|
|
157
159
|
2021: 61600,
|
|
160
|
+
2022: 64900,
|
|
158
161
|
},
|
|
159
162
|
MAX_PENSION: {
|
|
160
|
-
RETIREMENT:
|
|
161
|
-
COMBINED_RETIREMENT_SURVIVOR:
|
|
163
|
+
RETIREMENT: 15043.08,
|
|
164
|
+
COMBINED_RETIREMENT_SURVIVOR: 15043.08,
|
|
162
165
|
DEATH_BENEFIT: 2500,
|
|
163
166
|
},
|
|
164
167
|
MAX_REQUEST_AGE: 70,
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Sources
|
|
4
|
-
|
|
5
|
-
|
|
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
6
|
|
|
7
|
-
Revised
|
|
7
|
+
Revised
|
|
8
|
+
2022-01-04
|
|
8
9
|
*/
|
|
9
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
11
|
exports.ELIGIBLE_DIVIDEND = exports.NON_ELIGIBLE_DIVIDEND = void 0;
|
|
@@ -15,14 +16,14 @@ exports.NON_ELIGIBLE_DIVIDEND = {
|
|
|
15
16
|
BC: 0.0196,
|
|
16
17
|
MB: 0.007835,
|
|
17
18
|
NB: 0.0275,
|
|
18
|
-
NL: 0.
|
|
19
|
+
NL: 0.032,
|
|
19
20
|
NS: 0.0299,
|
|
20
21
|
NT: 0.06,
|
|
21
22
|
NU: 0.0261,
|
|
22
23
|
ON: 0.029863,
|
|
23
|
-
PE: 0.
|
|
24
|
-
QC: 0.
|
|
25
|
-
SK: 0.
|
|
24
|
+
PE: 0.013,
|
|
25
|
+
QC: 0.0342,
|
|
26
|
+
SK: 0.02105,
|
|
26
27
|
YT: 0.0067,
|
|
27
28
|
};
|
|
28
29
|
exports.ELIGIBLE_DIVIDEND = {
|
|
@@ -32,7 +33,7 @@ exports.ELIGIBLE_DIVIDEND = {
|
|
|
32
33
|
BC: 0.12,
|
|
33
34
|
MB: 0.08,
|
|
34
35
|
NB: 0.14,
|
|
35
|
-
NL: 0.
|
|
36
|
+
NL: 0.063,
|
|
36
37
|
NS: 0.0885,
|
|
37
38
|
NT: 0.115,
|
|
38
39
|
NU: 0.0551,
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// tslint:disable:max-line-length
|
|
3
3
|
/*
|
|
4
|
-
Sources
|
|
5
|
-
https://www.canada.ca/en/employment-social-development/programs/ei/ei-list/ei-employers/
|
|
4
|
+
Sources
|
|
5
|
+
https://www.canada.ca/en/employment-social-development/programs/ei/ei-list/ei-employers/2022-maximum-insurable-earnings.html
|
|
6
6
|
|
|
7
|
-
Revised
|
|
7
|
+
Revised
|
|
8
|
+
2021-12-22
|
|
8
9
|
*/
|
|
9
10
|
// tslint:enable:max-line-length
|
|
10
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
12
|
exports.EI = void 0;
|
|
12
13
|
exports.EI = {
|
|
13
|
-
MAX_INSURABLE_EARNINGS:
|
|
14
|
+
MAX_INSURABLE_EARNINGS: 60300,
|
|
14
15
|
PREMIUM_RATES: {
|
|
15
16
|
CA: 0.0158,
|
|
16
17
|
QC: 0.0120,
|
package/dist/taxes/income-tax.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// tslint:disable:max-line-length
|
|
3
3
|
/*
|
|
4
|
-
Sources
|
|
4
|
+
Sources
|
|
5
5
|
http://www.taxtips.ca/marginaltaxrates.htm
|
|
6
6
|
Abattement QC: http://www.cra-arc.gc.ca/tx/ndvdls/tpcs/ncm-tx/rtrn/cmpltng/ddctns/lns409-485/440-fra.html
|
|
7
7
|
|
|
8
|
-
Revised
|
|
8
|
+
Revised
|
|
9
|
+
2021-12-22
|
|
9
10
|
*/
|
|
10
11
|
// tslint:enable:max-line-length
|
|
11
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -17,25 +18,25 @@ exports.TAX_BRACKETS = {
|
|
|
17
18
|
CA: {
|
|
18
19
|
ABATEMENT: 0,
|
|
19
20
|
TAX_CREDIT_RATE: 0.15,
|
|
20
|
-
BASE_TAX_CREDIT:
|
|
21
|
+
BASE_TAX_CREDIT: 14398,
|
|
21
22
|
RATES: [{
|
|
22
23
|
FROM: 0,
|
|
23
|
-
TO:
|
|
24
|
+
TO: 50197,
|
|
24
25
|
RATE: 0.15,
|
|
25
26
|
}, {
|
|
26
|
-
FROM:
|
|
27
|
-
TO:
|
|
27
|
+
FROM: 50197,
|
|
28
|
+
TO: 100392,
|
|
28
29
|
RATE: 0.205,
|
|
29
30
|
}, {
|
|
30
|
-
FROM:
|
|
31
|
-
TO:
|
|
31
|
+
FROM: 100392,
|
|
32
|
+
TO: 155625,
|
|
32
33
|
RATE: 0.26,
|
|
33
34
|
}, {
|
|
34
|
-
FROM:
|
|
35
|
-
TO:
|
|
36
|
-
RATE: 0.
|
|
35
|
+
FROM: 155625,
|
|
36
|
+
TO: 221708,
|
|
37
|
+
RATE: 0.2938,
|
|
37
38
|
}, {
|
|
38
|
-
FROM:
|
|
39
|
+
FROM: 221708,
|
|
39
40
|
TO: 999999999,
|
|
40
41
|
RATE: 0.33,
|
|
41
42
|
}],
|
|
@@ -79,30 +80,30 @@ exports.TAX_BRACKETS = {
|
|
|
79
80
|
BC: {
|
|
80
81
|
ABATEMENT: 0,
|
|
81
82
|
TAX_CREDIT_RATE: 0.0506,
|
|
82
|
-
BASE_TAX_CREDIT:
|
|
83
|
+
BASE_TAX_CREDIT: 11302,
|
|
83
84
|
RATES: [{
|
|
84
85
|
FROM: 0,
|
|
85
|
-
TO:
|
|
86
|
+
TO: 43070,
|
|
86
87
|
RATE: 0.0506,
|
|
87
88
|
}, {
|
|
88
|
-
FROM:
|
|
89
|
-
TO:
|
|
89
|
+
FROM: 43070,
|
|
90
|
+
TO: 86141,
|
|
90
91
|
RATE: 0.077,
|
|
91
92
|
}, {
|
|
92
|
-
FROM:
|
|
93
|
-
TO:
|
|
93
|
+
FROM: 86141,
|
|
94
|
+
TO: 98901,
|
|
94
95
|
RATE: 0.105,
|
|
95
96
|
}, {
|
|
96
|
-
FROM:
|
|
97
|
-
TO:
|
|
97
|
+
FROM: 98901,
|
|
98
|
+
TO: 120094,
|
|
98
99
|
RATE: 0.1229,
|
|
99
100
|
}, {
|
|
100
|
-
FROM:
|
|
101
|
-
TO:
|
|
101
|
+
FROM: 120094,
|
|
102
|
+
TO: 162832,
|
|
102
103
|
RATE: 0.147,
|
|
103
104
|
}, {
|
|
104
|
-
FROM:
|
|
105
|
-
TO:
|
|
105
|
+
FROM: 162832,
|
|
106
|
+
TO: 227091,
|
|
106
107
|
RATE: 0.168,
|
|
107
108
|
}, {
|
|
108
109
|
FROM: 222420,
|
|
@@ -118,7 +119,7 @@ exports.TAX_BRACKETS = {
|
|
|
118
119
|
MB: {
|
|
119
120
|
ABATEMENT: 0,
|
|
120
121
|
TAX_CREDIT_RATE: 0.108,
|
|
121
|
-
BASE_TAX_CREDIT:
|
|
122
|
+
BASE_TAX_CREDIT: 10145,
|
|
122
123
|
RATES: [{
|
|
123
124
|
FROM: 0,
|
|
124
125
|
TO: 33723,
|
|
@@ -140,26 +141,26 @@ exports.TAX_BRACKETS = {
|
|
|
140
141
|
},
|
|
141
142
|
NB: {
|
|
142
143
|
ABATEMENT: 0,
|
|
143
|
-
TAX_CREDIT_RATE: 0.
|
|
144
|
-
BASE_TAX_CREDIT:
|
|
144
|
+
TAX_CREDIT_RATE: 0.094,
|
|
145
|
+
BASE_TAX_CREDIT: 10817,
|
|
145
146
|
RATES: [{
|
|
146
147
|
FROM: 0,
|
|
147
|
-
TO:
|
|
148
|
-
RATE: 0.
|
|
148
|
+
TO: 44887,
|
|
149
|
+
RATE: 0.0940,
|
|
149
150
|
}, {
|
|
150
|
-
FROM:
|
|
151
|
-
TO:
|
|
151
|
+
FROM: 44887,
|
|
152
|
+
TO: 89775,
|
|
152
153
|
RATE: 0.1482,
|
|
153
154
|
}, {
|
|
154
|
-
FROM:
|
|
155
|
-
TO:
|
|
155
|
+
FROM: 89775,
|
|
156
|
+
TO: 145955,
|
|
156
157
|
RATE: 0.1652,
|
|
157
158
|
}, {
|
|
158
|
-
FROM:
|
|
159
|
-
TO:
|
|
159
|
+
FROM: 145955,
|
|
160
|
+
TO: 166280,
|
|
160
161
|
RATE: 0.1784,
|
|
161
162
|
}, {
|
|
162
|
-
FROM:
|
|
163
|
+
FROM: 166280,
|
|
163
164
|
TO: 999999999,
|
|
164
165
|
RATE: 0.2030,
|
|
165
166
|
}],
|
|
@@ -172,27 +173,39 @@ exports.TAX_BRACKETS = {
|
|
|
172
173
|
NL: {
|
|
173
174
|
ABATEMENT: 0,
|
|
174
175
|
TAX_CREDIT_RATE: 0.087,
|
|
175
|
-
BASE_TAX_CREDIT:
|
|
176
|
+
BASE_TAX_CREDIT: 9804,
|
|
176
177
|
RATES: [{
|
|
177
178
|
FROM: 0,
|
|
178
|
-
TO:
|
|
179
|
+
TO: 39147,
|
|
179
180
|
RATE: 0.087,
|
|
180
181
|
}, {
|
|
181
|
-
FROM:
|
|
182
|
-
TO:
|
|
182
|
+
FROM: 39147,
|
|
183
|
+
TO: 78294,
|
|
183
184
|
RATE: 0.145,
|
|
184
185
|
}, {
|
|
185
|
-
FROM:
|
|
186
|
-
TO:
|
|
186
|
+
FROM: 78294,
|
|
187
|
+
TO: 139780,
|
|
187
188
|
RATE: 0.158,
|
|
188
189
|
}, {
|
|
189
|
-
FROM:
|
|
190
|
-
TO:
|
|
191
|
-
RATE: 0.
|
|
190
|
+
FROM: 139780,
|
|
191
|
+
TO: 195693,
|
|
192
|
+
RATE: 0.178,
|
|
192
193
|
}, {
|
|
193
|
-
FROM:
|
|
194
|
+
FROM: 195693,
|
|
195
|
+
TO: 250000,
|
|
196
|
+
RATE: 0.198,
|
|
197
|
+
}, {
|
|
198
|
+
FROM: 250000,
|
|
199
|
+
TO: 500000,
|
|
200
|
+
RATE: 0.208,
|
|
201
|
+
}, {
|
|
202
|
+
FROM: 500000,
|
|
203
|
+
TO: 1000000,
|
|
204
|
+
RATE: 0.213,
|
|
205
|
+
}, {
|
|
206
|
+
FROM: 1000000,
|
|
194
207
|
TO: 999999999,
|
|
195
|
-
RATE: 0.
|
|
208
|
+
RATE: 0.218,
|
|
196
209
|
}],
|
|
197
210
|
SURTAX_RATES: [{
|
|
198
211
|
FROM: 0,
|
|
@@ -234,7 +247,7 @@ exports.TAX_BRACKETS = {
|
|
|
234
247
|
PE: {
|
|
235
248
|
ABATEMENT: 0,
|
|
236
249
|
TAX_CREDIT_RATE: 0.098,
|
|
237
|
-
BASE_TAX_CREDIT:
|
|
250
|
+
BASE_TAX_CREDIT: 11250,
|
|
238
251
|
RATES: [{
|
|
239
252
|
FROM: 0,
|
|
240
253
|
TO: 31984,
|
|
@@ -261,17 +274,17 @@ exports.TAX_BRACKETS = {
|
|
|
261
274
|
ON: {
|
|
262
275
|
ABATEMENT: 0,
|
|
263
276
|
TAX_CREDIT_RATE: 0.0505,
|
|
264
|
-
BASE_TAX_CREDIT:
|
|
277
|
+
BASE_TAX_CREDIT: 11141,
|
|
265
278
|
RATES: [{
|
|
266
279
|
FROM: 0,
|
|
267
|
-
TO:
|
|
280
|
+
TO: 46226,
|
|
268
281
|
RATE: 0.0505,
|
|
269
282
|
}, {
|
|
270
|
-
FROM:
|
|
271
|
-
TO:
|
|
283
|
+
FROM: 46226,
|
|
284
|
+
TO: 92454,
|
|
272
285
|
RATE: 0.0915,
|
|
273
286
|
}, {
|
|
274
|
-
FROM:
|
|
287
|
+
FROM: 92454,
|
|
275
288
|
TO: 150000,
|
|
276
289
|
RATE: 0.1116,
|
|
277
290
|
}, {
|
|
@@ -285,14 +298,14 @@ exports.TAX_BRACKETS = {
|
|
|
285
298
|
}],
|
|
286
299
|
SURTAX_RATES: [{
|
|
287
300
|
FROM: 0,
|
|
288
|
-
TO:
|
|
301
|
+
TO: 4991,
|
|
289
302
|
RATE: 0,
|
|
290
303
|
}, {
|
|
291
|
-
FROM:
|
|
292
|
-
TO:
|
|
304
|
+
FROM: 4991,
|
|
305
|
+
TO: 6387,
|
|
293
306
|
RATE: 0.20,
|
|
294
307
|
}, {
|
|
295
|
-
FROM:
|
|
308
|
+
FROM: 6387,
|
|
296
309
|
TO: 999999999,
|
|
297
310
|
RATE: 0.56, // 0.20 + 0.36
|
|
298
311
|
}],
|
|
@@ -300,21 +313,21 @@ exports.TAX_BRACKETS = {
|
|
|
300
313
|
QC: {
|
|
301
314
|
ABATEMENT: 0.165,
|
|
302
315
|
TAX_CREDIT_RATE: 0.15,
|
|
303
|
-
BASE_TAX_CREDIT:
|
|
316
|
+
BASE_TAX_CREDIT: 16143,
|
|
304
317
|
RATES: [{
|
|
305
318
|
FROM: 0,
|
|
306
|
-
TO:
|
|
319
|
+
TO: 46295,
|
|
307
320
|
RATE: 0.15,
|
|
308
321
|
}, {
|
|
309
|
-
FROM:
|
|
310
|
-
TO:
|
|
322
|
+
FROM: 46295,
|
|
323
|
+
TO: 92580,
|
|
311
324
|
RATE: 0.20,
|
|
312
325
|
}, {
|
|
313
|
-
FROM:
|
|
314
|
-
TO:
|
|
326
|
+
FROM: 92580,
|
|
327
|
+
TO: 112655,
|
|
315
328
|
RATE: 0.24,
|
|
316
329
|
}, {
|
|
317
|
-
FROM:
|
|
330
|
+
FROM: 112655,
|
|
318
331
|
TO: 999999999,
|
|
319
332
|
RATE: 0.2575,
|
|
320
333
|
}],
|
|
@@ -327,17 +340,17 @@ exports.TAX_BRACKETS = {
|
|
|
327
340
|
SK: {
|
|
328
341
|
ABATEMENT: 0,
|
|
329
342
|
TAX_CREDIT_RATE: 0.105,
|
|
330
|
-
BASE_TAX_CREDIT:
|
|
343
|
+
BASE_TAX_CREDIT: 16615,
|
|
331
344
|
RATES: [{
|
|
332
345
|
FROM: 0,
|
|
333
|
-
TO:
|
|
346
|
+
TO: 46773,
|
|
334
347
|
RATE: 0.105,
|
|
335
348
|
}, {
|
|
336
|
-
FROM:
|
|
337
|
-
TO:
|
|
349
|
+
FROM: 46773,
|
|
350
|
+
TO: 133638,
|
|
338
351
|
RATE: 0.125,
|
|
339
352
|
}, {
|
|
340
|
-
FROM:
|
|
353
|
+
FROM: 133638,
|
|
341
354
|
TO: 999999999,
|
|
342
355
|
RATE: 0.145,
|
|
343
356
|
}],
|
|
@@ -350,21 +363,21 @@ exports.TAX_BRACKETS = {
|
|
|
350
363
|
NT: {
|
|
351
364
|
ABATEMENT: 0,
|
|
352
365
|
TAX_CREDIT_RATE: 0.059,
|
|
353
|
-
BASE_TAX_CREDIT:
|
|
366
|
+
BASE_TAX_CREDIT: 15609,
|
|
354
367
|
RATES: [{
|
|
355
368
|
FROM: 0,
|
|
356
|
-
TO:
|
|
369
|
+
TO: 45462,
|
|
357
370
|
RATE: 0.059,
|
|
358
371
|
}, {
|
|
359
|
-
FROM:
|
|
360
|
-
TO:
|
|
372
|
+
FROM: 45462,
|
|
373
|
+
TO: 90927,
|
|
361
374
|
RATE: 0.086,
|
|
362
375
|
}, {
|
|
363
|
-
FROM:
|
|
364
|
-
TO:
|
|
376
|
+
FROM: 90927,
|
|
377
|
+
TO: 147826,
|
|
365
378
|
RATE: 0.122,
|
|
366
379
|
}, {
|
|
367
|
-
FROM:
|
|
380
|
+
FROM: 147826,
|
|
368
381
|
TO: 999999999,
|
|
369
382
|
RATE: 0.1405,
|
|
370
383
|
}],
|
|
@@ -377,21 +390,21 @@ exports.TAX_BRACKETS = {
|
|
|
377
390
|
NU: {
|
|
378
391
|
ABATEMENT: 0,
|
|
379
392
|
TAX_CREDIT_RATE: 0.04,
|
|
380
|
-
BASE_TAX_CREDIT:
|
|
393
|
+
BASE_TAX_CREDIT: 16862,
|
|
381
394
|
RATES: [{
|
|
382
395
|
FROM: 0,
|
|
383
|
-
TO:
|
|
396
|
+
TO: 47862,
|
|
384
397
|
RATE: 0.04,
|
|
385
398
|
}, {
|
|
386
|
-
FROM:
|
|
387
|
-
TO:
|
|
399
|
+
FROM: 47862,
|
|
400
|
+
TO: 95724,
|
|
388
401
|
RATE: 0.07,
|
|
389
402
|
}, {
|
|
390
|
-
FROM:
|
|
391
|
-
TO:
|
|
403
|
+
FROM: 95724,
|
|
404
|
+
TO: 155625,
|
|
392
405
|
RATE: 0.09,
|
|
393
406
|
}, {
|
|
394
|
-
FROM:
|
|
407
|
+
FROM: 155625,
|
|
395
408
|
TO: 999999999,
|
|
396
409
|
RATE: 0.115,
|
|
397
410
|
}],
|
|
@@ -404,25 +417,25 @@ exports.TAX_BRACKETS = {
|
|
|
404
417
|
YT: {
|
|
405
418
|
ABATEMENT: 0,
|
|
406
419
|
TAX_CREDIT_RATE: 0.064,
|
|
407
|
-
BASE_TAX_CREDIT:
|
|
420
|
+
BASE_TAX_CREDIT: 14398,
|
|
408
421
|
RATES: [{
|
|
409
422
|
FROM: 0,
|
|
410
|
-
TO:
|
|
423
|
+
TO: 50197,
|
|
411
424
|
RATE: 0.064,
|
|
412
425
|
}, {
|
|
413
|
-
FROM:
|
|
414
|
-
TO:
|
|
426
|
+
FROM: 50197,
|
|
427
|
+
TO: 100392,
|
|
415
428
|
RATE: 0.09,
|
|
416
429
|
}, {
|
|
417
|
-
FROM:
|
|
418
|
-
TO:
|
|
430
|
+
FROM: 100392,
|
|
431
|
+
TO: 155625,
|
|
419
432
|
RATE: 0.109,
|
|
420
433
|
}, {
|
|
421
|
-
FROM:
|
|
422
|
-
TO:
|
|
423
|
-
RATE: 0.
|
|
434
|
+
FROM: 155625,
|
|
435
|
+
TO: 221708,
|
|
436
|
+
RATE: 0.1296,
|
|
424
437
|
}, {
|
|
425
|
-
FROM:
|
|
438
|
+
FROM: 221708,
|
|
426
439
|
TO: 500000,
|
|
427
440
|
RATE: 0.128,
|
|
428
441
|
}, {
|
|
@@ -527,27 +540,27 @@ exports.getProvincialBaseCredit = getProvincialBaseCredit;
|
|
|
527
540
|
function getTotalMarginalRate(provincialCode, grossIncome, inflationRate = 0, yearsToInflate = 0) {
|
|
528
541
|
const provRate = getProvincialMarginalRate(provincialCode, grossIncome, inflationRate, yearsToInflate);
|
|
529
542
|
const fedRate = getFederalMarginalRate(provincialCode, grossIncome, inflationRate, yearsToInflate);
|
|
530
|
-
return
|
|
543
|
+
return utils_1.roundToPrecision(provRate + fedRate, 4);
|
|
531
544
|
}
|
|
532
545
|
exports.getTotalMarginalRate = getTotalMarginalRate;
|
|
533
546
|
function getMaxProvincialMarginalRate(provincialCode) {
|
|
534
547
|
// tslint:disable-next-line:no-non-null-assertion
|
|
535
|
-
const marginalRate =
|
|
548
|
+
const marginalRate = collections_1.maxBy(getTaxRates(provincialCode), (bracket) => bracket.TO).RATE;
|
|
536
549
|
// tslint:disable-next-line:no-non-null-assertion
|
|
537
|
-
const surtaxRate =
|
|
550
|
+
const surtaxRate = collections_1.maxBy(getSurtaxRates(provincialCode), bracket => bracket.TO).RATE;
|
|
538
551
|
return marginalRate + (marginalRate * surtaxRate);
|
|
539
552
|
}
|
|
540
553
|
exports.getMaxProvincialMarginalRate = getMaxProvincialMarginalRate;
|
|
541
554
|
function getMaxFederalMarginalRate(provincialCode) {
|
|
542
555
|
// tslint:disable-next-line:no-non-null-assertion
|
|
543
|
-
const maxRate =
|
|
556
|
+
const maxRate = collections_1.maxBy(getTaxRates(code_types_1.FEDERAL_CODE), bracket => bracket.TO).RATE;
|
|
544
557
|
return maxRate * (1 - getAbatement(provincialCode));
|
|
545
558
|
}
|
|
546
559
|
exports.getMaxFederalMarginalRate = getMaxFederalMarginalRate;
|
|
547
560
|
function getTotalMaxMarginalRate(provincialCode) {
|
|
548
561
|
const provRate = getMaxProvincialMarginalRate(provincialCode);
|
|
549
562
|
const fedRate = getMaxFederalMarginalRate(provincialCode);
|
|
550
|
-
return
|
|
563
|
+
return utils_1.roundToPrecision(provRate + fedRate, 4);
|
|
551
564
|
}
|
|
552
565
|
exports.getTotalMaxMarginalRate = getTotalMaxMarginalRate;
|
|
553
566
|
function getTotalTaxAmount(provincialCode, grossIncome, inflationRate = 0, yearsToInflate = 0) {
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Sources
|
|
3
|
+
Sources
|
|
4
4
|
https://www.rqap.gouv.qc.ca/fr/a-propos-du-regime/information-generale/cotisations-et-revenu-maximal-assurable
|
|
5
5
|
|
|
6
|
-
Revised
|
|
6
|
+
Revised
|
|
7
|
+
2021-12-22
|
|
7
8
|
*/
|
|
8
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
10
|
exports.QPIP = void 0;
|
|
10
11
|
exports.QPIP = {
|
|
11
|
-
MAX_INSURABLE_EARNINGS:
|
|
12
|
+
MAX_INSURABLE_EARNINGS: 88000,
|
|
12
13
|
PREMIUM_RATES: {
|
|
13
14
|
SELF_EMPLOYED: 0.00878,
|
|
14
15
|
SALARIED: 0.00494,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@equisoft/tax-ca",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2022.0.0",
|
|
4
4
|
"description": "Canadian tax data and calculation functions.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@equisoft/tslint-config": "~0.0.8",
|
|
38
|
-
"@types/jest": "~27.0
|
|
39
|
-
"@types/node": "^
|
|
38
|
+
"@types/jest": "~27.4.0",
|
|
39
|
+
"@types/node": "^17.0.7",
|
|
40
40
|
"jest": "~24.9.0",
|
|
41
41
|
"jest-junit": "~13.0.0",
|
|
42
42
|
"ts-jest": "~24.3.0",
|