@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,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
Sources
|
|
4
|
+
https://www.canada.ca/en/revenue-agency/services/tax/individuals/topics/registered-education-savings-plans-resps/canada-education-savings-programs-cesp/canada-education-savings-grant-cesg.html
|
|
5
|
+
|
|
6
|
+
Last updated
|
|
7
|
+
2025-02-07
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.CanadaEducationSavingsGrant = void 0;
|
|
11
|
+
const savings_grant_1 = require("./savings-grant");
|
|
12
|
+
const canadaEducationSavingsGrantConfig = {
|
|
13
|
+
MAX_GRANT: 7200,
|
|
14
|
+
MAX_BENEFICIARY_AGE: 17,
|
|
15
|
+
MAX_AMOUNT_YEARLY_FOR_GRANT: 2500,
|
|
16
|
+
YEARLY_GRANT_PERCENT: 0.2,
|
|
17
|
+
MAX_AMOUNT_FOR_SUPP_GRANT: 500,
|
|
18
|
+
SUPP_GRANT_PERCENT: {
|
|
19
|
+
LOW_INCOME: 0.2,
|
|
20
|
+
MEDIUM_INCOME: 0.1,
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
exports.CanadaEducationSavingsGrant = (0, savings_grant_1.initializeSavingsGrant)(canadaEducationSavingsGrantConfig);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface CanadaLearningBond {
|
|
2
|
+
OPENING_YEAR_CLB: number;
|
|
3
|
+
YEARLY_CLB: number;
|
|
4
|
+
MAX_BENEFICIARY_AGE: number;
|
|
5
|
+
getTotalForAYear(income: number, beneficiaryAge?: number, accountOpeningYear?: boolean): number;
|
|
6
|
+
}
|
|
7
|
+
export interface CanadaLearningBondData {
|
|
8
|
+
OPENING_YEAR_CLB: number;
|
|
9
|
+
YEARLY_CLB: number;
|
|
10
|
+
MAX_BENEFICIARY_AGE: number;
|
|
11
|
+
}
|
|
12
|
+
export declare const CanadaLearningBond: CanadaLearningBond;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CanadaLearningBond = void 0;
|
|
4
|
+
const income_level_1 = require("./income-level");
|
|
5
|
+
const canadaLearningBondData = {
|
|
6
|
+
OPENING_YEAR_CLB: 500,
|
|
7
|
+
YEARLY_CLB: 100,
|
|
8
|
+
MAX_BENEFICIARY_AGE: 15,
|
|
9
|
+
};
|
|
10
|
+
const getTotalForAYear = (income, beneficiaryAge = 0, accountOpeningYear = false) => {
|
|
11
|
+
let total = 0;
|
|
12
|
+
const { MAX_BENEFICIARY_AGE, OPENING_YEAR_CLB, YEARLY_CLB } = canadaLearningBondData;
|
|
13
|
+
const incomeLevel = income_level_1.IncomeLevel.getIncomeLevel(income);
|
|
14
|
+
if (incomeLevel === income_level_1.IncomeLevelType.LOW && beneficiaryAge <= MAX_BENEFICIARY_AGE) {
|
|
15
|
+
total = accountOpeningYear ? OPENING_YEAR_CLB : YEARLY_CLB;
|
|
16
|
+
}
|
|
17
|
+
return total;
|
|
18
|
+
};
|
|
19
|
+
exports.CanadaLearningBond = Object.assign(Object.assign({}, canadaLearningBondData), { getTotalForAYear });
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare enum IncomeLevelType {
|
|
2
|
+
LOW = "LOW",
|
|
3
|
+
MEDIUM = "MEDIUM",
|
|
4
|
+
HIGH = "HIGH"
|
|
5
|
+
}
|
|
6
|
+
export interface IncomeLevel {
|
|
7
|
+
LOW_INCOME_THRESHOLD: number;
|
|
8
|
+
MEDIUM_INCOME_THRESHOLD: number;
|
|
9
|
+
getIncomeLevel(income: number): IncomeLevelType;
|
|
10
|
+
}
|
|
11
|
+
export declare const IncomeLevel: IncomeLevel;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
Sources
|
|
4
|
+
https://www.canada.ca/fr/services/prestations/education/epargne-etudes/estimation-montants.html?utm_source=chatgpt.com#_faible-rev
|
|
5
|
+
|
|
6
|
+
Last updated
|
|
7
|
+
2025-02-07
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.IncomeLevel = exports.IncomeLevelType = void 0;
|
|
11
|
+
const LOW_INCOME_THRESHOLD = 55867;
|
|
12
|
+
const MEDIUM_INCOME_THRESHOLD = 111735;
|
|
13
|
+
var IncomeLevelType;
|
|
14
|
+
(function (IncomeLevelType) {
|
|
15
|
+
IncomeLevelType["LOW"] = "LOW";
|
|
16
|
+
IncomeLevelType["MEDIUM"] = "MEDIUM";
|
|
17
|
+
IncomeLevelType["HIGH"] = "HIGH";
|
|
18
|
+
})(IncomeLevelType || (exports.IncomeLevelType = IncomeLevelType = {}));
|
|
19
|
+
const getIncomeLevel = (income) => {
|
|
20
|
+
if (income <= LOW_INCOME_THRESHOLD) {
|
|
21
|
+
return IncomeLevelType.LOW;
|
|
22
|
+
}
|
|
23
|
+
if (income <= MEDIUM_INCOME_THRESHOLD) {
|
|
24
|
+
return IncomeLevelType.MEDIUM;
|
|
25
|
+
}
|
|
26
|
+
return IncomeLevelType.HIGH;
|
|
27
|
+
};
|
|
28
|
+
exports.IncomeLevel = {
|
|
29
|
+
LOW_INCOME_THRESHOLD,
|
|
30
|
+
MEDIUM_INCOME_THRESHOLD,
|
|
31
|
+
getIncomeLevel,
|
|
32
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './canada-education-savings-grant';
|
|
2
|
+
export * from './canada-learning-bond';
|
|
3
|
+
export * from './quebec-education-savings-incentive';
|
|
4
|
+
export * from './british-columbia-training-and-education-savings-grant';
|
|
5
|
+
export * from './tuition-fees';
|
|
6
|
+
export * from './income-level';
|
|
7
|
+
export * from './beneficiary';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./canada-education-savings-grant"), exports);
|
|
18
|
+
__exportStar(require("./canada-learning-bond"), exports);
|
|
19
|
+
__exportStar(require("./quebec-education-savings-incentive"), exports);
|
|
20
|
+
__exportStar(require("./british-columbia-training-and-education-savings-grant"), exports);
|
|
21
|
+
__exportStar(require("./tuition-fees"), exports);
|
|
22
|
+
__exportStar(require("./income-level"), exports);
|
|
23
|
+
__exportStar(require("./beneficiary"), exports);
|
package/dist/investments/registered-education-savings-plan/quebec-education-savings-incentive.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QuebecEducationSavingsIncentive = void 0;
|
|
4
|
+
const savings_grant_1 = require("./savings-grant");
|
|
5
|
+
const quebecEducationSavingsIncentiveConfig = {
|
|
6
|
+
MAX_GRANT: 3600,
|
|
7
|
+
MAX_BENEFICIARY_AGE: 17,
|
|
8
|
+
MAX_AMOUNT_YEARLY_FOR_GRANT: 2500,
|
|
9
|
+
YEARLY_GRANT_PERCENT: 0.1,
|
|
10
|
+
MAX_AMOUNT_FOR_SUPP_GRANT: 500,
|
|
11
|
+
SUPP_GRANT_PERCENT: {
|
|
12
|
+
LOW_INCOME: 0.1,
|
|
13
|
+
MEDIUM_INCOME: 0.05,
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
// eslint-disable-next-line max-len
|
|
17
|
+
exports.QuebecEducationSavingsIncentive = (0, savings_grant_1.initializeSavingsGrant)(quebecEducationSavingsIncentiveConfig);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { IncomeLevelType } from './income-level';
|
|
2
|
+
export interface SuppGrantPercent {
|
|
3
|
+
LOW_INCOME: number;
|
|
4
|
+
MEDIUM_INCOME: number;
|
|
5
|
+
}
|
|
6
|
+
export interface SavingsGrant {
|
|
7
|
+
MAX_GRANT: number;
|
|
8
|
+
MAX_BENEFICIARY_AGE: number;
|
|
9
|
+
MAX_AMOUNT_YEARLY_FOR_GRANT: number;
|
|
10
|
+
YEARLY_GRANT_PERCENT: number;
|
|
11
|
+
MAX_AMOUNT_FOR_SUPP_GRANT: number;
|
|
12
|
+
SUPP_GRANT_PERCENT: SuppGrantPercent;
|
|
13
|
+
getBaseGrant(contribution: number): number;
|
|
14
|
+
getSuppGrant(contribution: number, incomeLevel: IncomeLevelType): number;
|
|
15
|
+
getTotalForAYear(income: number, contribution: number, totalGrantAlreadyGiven?: number, beneficiaryAge?: number): number;
|
|
16
|
+
}
|
|
17
|
+
export interface SavingsGrantConfig {
|
|
18
|
+
MAX_GRANT: number;
|
|
19
|
+
MAX_BENEFICIARY_AGE: number;
|
|
20
|
+
MAX_AMOUNT_YEARLY_FOR_GRANT: number;
|
|
21
|
+
YEARLY_GRANT_PERCENT: number;
|
|
22
|
+
MAX_AMOUNT_FOR_SUPP_GRANT: number;
|
|
23
|
+
SUPP_GRANT_PERCENT: SuppGrantPercent;
|
|
24
|
+
}
|
|
25
|
+
export declare function initializeSavingsGrant(SavingsGrantConfig: SavingsGrantConfig): SavingsGrant;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initializeSavingsGrant = initializeSavingsGrant;
|
|
4
|
+
const income_level_1 = require("./income-level");
|
|
5
|
+
function initializeSavingsGrant(SavingsGrantConfig) {
|
|
6
|
+
const { MAX_GRANT, MAX_BENEFICIARY_AGE, MAX_AMOUNT_YEARLY_FOR_GRANT, YEARLY_GRANT_PERCENT, SUPP_GRANT_PERCENT, MAX_AMOUNT_FOR_SUPP_GRANT, } = SavingsGrantConfig;
|
|
7
|
+
const getBaseGrant = (contribution) => {
|
|
8
|
+
let totalGrantForAYear = 0;
|
|
9
|
+
if (contribution > MAX_AMOUNT_YEARLY_FOR_GRANT) {
|
|
10
|
+
totalGrantForAYear = YEARLY_GRANT_PERCENT * MAX_AMOUNT_YEARLY_FOR_GRANT;
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
totalGrantForAYear = YEARLY_GRANT_PERCENT * contribution;
|
|
14
|
+
}
|
|
15
|
+
return totalGrantForAYear;
|
|
16
|
+
};
|
|
17
|
+
const getSuppGrant = (contribution, incomeLevel) => {
|
|
18
|
+
let suppGrant = 0;
|
|
19
|
+
const cappedContribution = Math.min(contribution, MAX_AMOUNT_FOR_SUPP_GRANT);
|
|
20
|
+
switch (incomeLevel) {
|
|
21
|
+
case income_level_1.IncomeLevelType.LOW:
|
|
22
|
+
suppGrant = SUPP_GRANT_PERCENT.LOW_INCOME * cappedContribution;
|
|
23
|
+
break;
|
|
24
|
+
case income_level_1.IncomeLevelType.MEDIUM:
|
|
25
|
+
suppGrant = SUPP_GRANT_PERCENT.MEDIUM_INCOME * cappedContribution;
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
return suppGrant;
|
|
29
|
+
};
|
|
30
|
+
const getTotalForAYear = (income, contribution, totalGrantAlreadyGiven = 0, beneficiaryAge = 0) => {
|
|
31
|
+
if (totalGrantAlreadyGiven >= MAX_GRANT || beneficiaryAge > MAX_BENEFICIARY_AGE)
|
|
32
|
+
return 0;
|
|
33
|
+
// Grant
|
|
34
|
+
let totalGrantForAYear = getBaseGrant(contribution);
|
|
35
|
+
// Supp. grant
|
|
36
|
+
const incomeLevel = income_level_1.IncomeLevel.getIncomeLevel(income);
|
|
37
|
+
totalGrantForAYear += getSuppGrant(contribution, incomeLevel);
|
|
38
|
+
return totalGrantForAYear;
|
|
39
|
+
};
|
|
40
|
+
return {
|
|
41
|
+
MAX_AMOUNT_FOR_SUPP_GRANT,
|
|
42
|
+
MAX_AMOUNT_YEARLY_FOR_GRANT,
|
|
43
|
+
MAX_BENEFICIARY_AGE,
|
|
44
|
+
MAX_GRANT,
|
|
45
|
+
SUPP_GRANT_PERCENT,
|
|
46
|
+
YEARLY_GRANT_PERCENT,
|
|
47
|
+
getBaseGrant,
|
|
48
|
+
getSuppGrant,
|
|
49
|
+
getTotalForAYear,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
Sources
|
|
4
|
+
https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710004501&cubeTimeFrame.startYear=2024+%2F+2025&cubeTimeFrame.endYear=2024+%2F+2025&referencePeriods=20240101%2C20240101
|
|
5
|
+
|
|
6
|
+
Revised data
|
|
7
|
+
2024-09-04
|
|
8
|
+
|
|
9
|
+
Last updated
|
|
10
|
+
2025-02-07
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.TuitionFees = void 0;
|
|
14
|
+
const TuitionFeesData = {
|
|
15
|
+
AB: 7734,
|
|
16
|
+
BC: 6607,
|
|
17
|
+
MB: 5534,
|
|
18
|
+
NB: 9470,
|
|
19
|
+
NL: 3727,
|
|
20
|
+
NS: 9762,
|
|
21
|
+
PE: 7728,
|
|
22
|
+
ON: 8514,
|
|
23
|
+
QC: 3594,
|
|
24
|
+
SK: 9609,
|
|
25
|
+
NT: 6000, // valeur hypothétique
|
|
26
|
+
NU: 6500, // valeur hypothétique
|
|
27
|
+
YT: 4350,
|
|
28
|
+
};
|
|
29
|
+
const getTuitionFeesByProvinceCode = (provinceCode) => TuitionFeesData[provinceCode];
|
|
30
|
+
exports.TuitionFees = {
|
|
31
|
+
getTuitionFeesByProvinceCode,
|
|
32
|
+
TuitionFeesData,
|
|
33
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
Sources
|
|
4
|
+
https://www.canada.ca/en/revenue-agency/services/tax/businesses/topics/completing-slips-summaries/t4rsp-t4rif-information-returns/payments/chart-prescribed-factors.html
|
|
5
|
+
|
|
6
|
+
Conversion
|
|
7
|
+
None
|
|
8
|
+
|
|
9
|
+
Revised
|
|
10
|
+
2024-01-18
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.RRIF = void 0;
|
|
14
|
+
exports.getMinimumWithdrawalPercentage = getMinimumWithdrawalPercentage;
|
|
15
|
+
exports.RRIF = {
|
|
16
|
+
MIN_WITHDRAWAL_PCT: {
|
|
17
|
+
50: 0.0250,
|
|
18
|
+
51: 0.0256,
|
|
19
|
+
52: 0.0263,
|
|
20
|
+
53: 0.0270,
|
|
21
|
+
54: 0.0278,
|
|
22
|
+
55: 0.0286,
|
|
23
|
+
56: 0.0294,
|
|
24
|
+
57: 0.0303,
|
|
25
|
+
58: 0.0313,
|
|
26
|
+
59: 0.0323,
|
|
27
|
+
60: 0.0333,
|
|
28
|
+
61: 0.0345,
|
|
29
|
+
62: 0.0357,
|
|
30
|
+
63: 0.0370,
|
|
31
|
+
64: 0.0385,
|
|
32
|
+
65: 0.0400,
|
|
33
|
+
66: 0.0417,
|
|
34
|
+
67: 0.0435,
|
|
35
|
+
68: 0.0455,
|
|
36
|
+
69: 0.0476,
|
|
37
|
+
70: 0.0500,
|
|
38
|
+
71: 0.0528,
|
|
39
|
+
72: 0.0540,
|
|
40
|
+
73: 0.0553,
|
|
41
|
+
74: 0.0567,
|
|
42
|
+
75: 0.0582,
|
|
43
|
+
76: 0.0598,
|
|
44
|
+
77: 0.0617,
|
|
45
|
+
78: 0.0636,
|
|
46
|
+
79: 0.0658,
|
|
47
|
+
80: 0.0682,
|
|
48
|
+
81: 0.0708,
|
|
49
|
+
82: 0.0738,
|
|
50
|
+
83: 0.0771,
|
|
51
|
+
84: 0.0808,
|
|
52
|
+
85: 0.0851,
|
|
53
|
+
86: 0.0899,
|
|
54
|
+
87: 0.0955,
|
|
55
|
+
88: 0.1021,
|
|
56
|
+
89: 0.1099,
|
|
57
|
+
90: 0.1192,
|
|
58
|
+
91: 0.1306,
|
|
59
|
+
92: 0.1449,
|
|
60
|
+
93: 0.1634,
|
|
61
|
+
94: 0.1879,
|
|
62
|
+
95: 0.20,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
function getMinimumWithdrawalPercentage(beginningOfYearAge) {
|
|
66
|
+
const pct = beginningOfYearAge >= 71 ? exports.RRIF.MIN_WITHDRAWAL_PCT[beginningOfYearAge] : 1 / (90 - beginningOfYearAge);
|
|
67
|
+
return parseFloat(pct.toFixed(4));
|
|
68
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
Sources
|
|
4
|
+
https://www.canada.ca/en/revenue-agency/services/tax/registered-plans-administrators/pspa/mp-rrsp-dpsp-tfsa-limits-ympe.html
|
|
5
|
+
|
|
6
|
+
Note
|
|
7
|
+
Must use RRSP dollar limit and not DB limit
|
|
8
|
+
|
|
9
|
+
Revised
|
|
10
|
+
2024-12-23
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.RRSP = void 0;
|
|
14
|
+
exports.RRSP = {
|
|
15
|
+
CONVERSION_AGE: {
|
|
16
|
+
MIN: 0,
|
|
17
|
+
MAX: 71,
|
|
18
|
+
},
|
|
19
|
+
MAX_CONTRIBUTION: 32490,
|
|
20
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
Sources
|
|
4
|
+
https://www.canada.ca/en/revenue-agency/services/tax/registered-plans-administrators/pspa/mp-rrsp-dpsp-tfsa-limits-ympe.html
|
|
5
|
+
https://www.taxtips.ca/tfsa/tfsa-contribution-rules-and-limits.htm
|
|
6
|
+
|
|
7
|
+
Revised
|
|
8
|
+
2024-12-23
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.TFSA = void 0;
|
|
12
|
+
exports.TFSA = {
|
|
13
|
+
MAX_CONTRIBUTION: 7000,
|
|
14
|
+
/**
|
|
15
|
+
* Latest unrounded contribution change that changed rounded factor bracket
|
|
16
|
+
* (6751 -> 7000, but 2025 will be ~6893 -> 7000)
|
|
17
|
+
*/
|
|
18
|
+
UNROUNDED_MAX_CONTRIBUTION: 6893,
|
|
19
|
+
ROUNDING_FACTOR: 500,
|
|
20
|
+
UPDATE_YEAR: 2024,
|
|
21
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type ProvinceCode = 'AB' | 'BC' | 'MB' | 'NB' | 'NL' | 'NS' | 'PE' | 'ON' | 'QC' | 'SK' | 'NT' | 'NU' | 'YT';
|
|
2
|
+
export type FederalCode = 'CA';
|
|
3
|
+
export type FederalName = 'CANADA';
|
|
4
|
+
export type ProvinceName = 'ALBERTA' | 'BRITISH_COLUMBIA' | 'MANITOBA' | 'NEW_BRUNSWICK' | 'NEWFOUNDLAND' | 'NOVA_SCOTIA' | 'PRINCE_EDWARD_ISLAND' | 'ONTARIO' | 'QUEBEC' | 'SASKATCHEWAN' | 'NORTHWEST_TERRITORIES' | 'NUNAVUT' | 'YUKON';
|
|
5
|
+
export declare const PROVINCIAL_CODES: {
|
|
6
|
+
[key in ProvinceName]: ProvinceCode;
|
|
7
|
+
};
|
|
8
|
+
export declare const FEDERAL_CODE: FederalCode;
|
|
9
|
+
export type ByProvince<T> = {
|
|
10
|
+
[key in ProvinceCode]: T;
|
|
11
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FEDERAL_CODE = exports.PROVINCIAL_CODES = void 0;
|
|
4
|
+
exports.PROVINCIAL_CODES = {
|
|
5
|
+
ALBERTA: 'AB',
|
|
6
|
+
BRITISH_COLUMBIA: 'BC',
|
|
7
|
+
MANITOBA: 'MB',
|
|
8
|
+
NEW_BRUNSWICK: 'NB',
|
|
9
|
+
NEWFOUNDLAND: 'NL',
|
|
10
|
+
NOVA_SCOTIA: 'NS',
|
|
11
|
+
PRINCE_EDWARD_ISLAND: 'PE',
|
|
12
|
+
ONTARIO: 'ON',
|
|
13
|
+
QUEBEC: 'QC',
|
|
14
|
+
SASKATCHEWAN: 'SK',
|
|
15
|
+
NORTHWEST_TERRITORIES: 'NT',
|
|
16
|
+
NUNAVUT: 'NU',
|
|
17
|
+
YUKON: 'YT',
|
|
18
|
+
};
|
|
19
|
+
exports.FEDERAL_CODE = 'CA';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
interface MonthlyConsumerPriceIndex {
|
|
2
|
+
JAN: number;
|
|
3
|
+
FEB: number;
|
|
4
|
+
MAR: number;
|
|
5
|
+
APR: number;
|
|
6
|
+
MAY: number;
|
|
7
|
+
JUN: number;
|
|
8
|
+
JUL: number;
|
|
9
|
+
AUG: number;
|
|
10
|
+
SEP: number;
|
|
11
|
+
OCT: number;
|
|
12
|
+
NOV: number;
|
|
13
|
+
DEC: number;
|
|
14
|
+
}
|
|
15
|
+
export interface ConsumerPriceIndex {
|
|
16
|
+
2009: MonthlyConsumerPriceIndex;
|
|
17
|
+
2010: MonthlyConsumerPriceIndex;
|
|
18
|
+
2011: MonthlyConsumerPriceIndex;
|
|
19
|
+
2012: MonthlyConsumerPriceIndex;
|
|
20
|
+
2013: MonthlyConsumerPriceIndex;
|
|
21
|
+
2014: MonthlyConsumerPriceIndex;
|
|
22
|
+
2015: MonthlyConsumerPriceIndex;
|
|
23
|
+
2016: MonthlyConsumerPriceIndex;
|
|
24
|
+
2017: MonthlyConsumerPriceIndex;
|
|
25
|
+
2018: MonthlyConsumerPriceIndex;
|
|
26
|
+
2019: MonthlyConsumerPriceIndex;
|
|
27
|
+
2020: MonthlyConsumerPriceIndex;
|
|
28
|
+
2021: MonthlyConsumerPriceIndex;
|
|
29
|
+
2022: MonthlyConsumerPriceIndex;
|
|
30
|
+
2023: MonthlyConsumerPriceIndex;
|
|
31
|
+
2024: MonthlyConsumerPriceIndex;
|
|
32
|
+
}
|
|
33
|
+
export declare const CONSUMER_PRICE_INDEX: ConsumerPriceIndex;
|
|
34
|
+
export {};
|