@novha/calc-engines 1.0.0 → 1.0.1

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.
@@ -7,4 +7,4 @@ var CalculatorType;
7
7
  CalculatorType["MORTGAGE"] = "MORTGAGE";
8
8
  CalculatorType["LOAN"] = "LOAN";
9
9
  })(CalculatorType || (exports.CalculatorType = CalculatorType = {}));
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG9tYWluL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN0QiwyQ0FBeUIsQ0FBQTtJQUN6Qix1Q0FBcUIsQ0FBQTtJQUNyQiwrQkFBYSxDQUFBO0FBQ2pCLENBQUMsRUFKVyxjQUFjLDhCQUFkLGNBQWMsUUFJekIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBDYWxjdWxhdG9yVHlwZSB7XG4gICAgSU5DT01FX1RBWCA9ICdJTkNPTUVfVEFYJyxcbiAgICBNT1JUR0FHRSA9ICdNT1JUR0FHRScsXG4gICAgTE9BTiA9ICdMT0FOJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVNZXRhIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGNvdW50cnk6IHN0cmluZztcbiAgICByZWdpb246IHN0cmluZztcbiAgICBjYWxjdWxhdG9yOiBDYWxjdWxhdG9yVHlwZTtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgZWZmZWN0aXZlX2Zyb206IHN0cmluZztcbiAgICBlZmZlY3RpdmVfdG86IHN0cmluZyB8IG51bGw7XG4gICAgc291cmNlPzogUnVsZVNvdXJjZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVTb3VyY2Uge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB1cmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdWxlSW5wdXQge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiAnbnVtYmVyJyB8ICdzZWxlY3QnIHwgJ3RleHQnO1xuICAgIHJlcXVpcmVkOiBib29sZWFuO1xuICAgIHVuaXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZU91dHB1dCB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGU6ICdudW1iZXInIHwgJ3N0cmluZyc7XG4gICAgdW5pdD86IHN0cmluZztcbn0iXX0=
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG9tYWluL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN0QiwyQ0FBeUIsQ0FBQTtJQUN6Qix1Q0FBcUIsQ0FBQTtJQUNyQiwrQkFBYSxDQUFBO0FBQ2pCLENBQUMsRUFKVyxjQUFjLDhCQUFkLGNBQWMsUUFJekIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBDYWxjdWxhdG9yVHlwZSB7XG4gICAgSU5DT01FX1RBWCA9ICdJTkNPTUVfVEFYJyxcbiAgICBNT1JUR0FHRSA9ICdNT1JUR0FHRScsXG4gICAgTE9BTiA9ICdMT0FOJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVNZXRhIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGNvdW50cnk6IHN0cmluZztcbiAgICByZWdpb246IHN0cmluZztcbiAgICBjYWxjdWxhdG9yOiBDYWxjdWxhdG9yVHlwZTtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgZWZmZWN0aXZlZnJvbTogc3RyaW5nO1xuICAgIGVmZmVjdGl2ZXRvOiBzdHJpbmcgfCBudWxsO1xuICAgIHNvdXJjZT86IFJ1bGVTb3VyY2VbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdWxlU291cmNlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdXJsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZUlucHV0IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdHlwZTogJ251bWJlcicgfCAnc2VsZWN0JyB8ICd0ZXh0JztcbiAgICByZXF1aXJlZDogYm9vbGVhbjtcbiAgICB1bml0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVPdXRwdXQge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiAnbnVtYmVyJyB8ICdzdHJpbmcnO1xuICAgIHVuaXQ/OiBzdHJpbmc7XG59Il19
@@ -7,7 +7,7 @@ class CanadaIncomeTaxServiceImpl {
7
7
  this._rules = rules;
8
8
  }
9
9
  calculateNetIncome() {
10
- const grossTax = this.computeGrossTax(this._income, this._rules.tax_brackets);
10
+ const grossTax = this.computeGrossTax(this._income, this._rules.taxBrackets);
11
11
  const netTax = this.applyCredits(grossTax, this._rules.credits);
12
12
  const cpp = this.computeCPP(this._income, this._rules.contributions?.cpp);
13
13
  const ei = this.computeEI(this._income, this._rules.contributions?.ei);
@@ -38,14 +38,14 @@ class CanadaIncomeTaxServiceImpl {
38
38
  if (!cpp || income <= cpp.exemption)
39
39
  return 0;
40
40
  const contributable = income - cpp.exemption;
41
- return Math.min(contributable * cpp.rate, cpp.max_contribution);
41
+ return Math.min(contributable * cpp.rate, cpp.maxContribution);
42
42
  }
43
43
  computeEI(income, ei) {
44
44
  if (!ei)
45
45
  return 0;
46
- const insurableIncome = Math.min(income, ei.max_insurable_earnings);
47
- return Math.min(insurableIncome * ei.rate, ei.max_contribution);
46
+ const insurableIncome = Math.min(income, ei.maxInsurableEarnings);
47
+ return Math.min(insurableIncome * ei.rate, ei.maxContribution);
48
48
  }
49
49
  }
50
50
  exports.CanadaIncomeTaxServiceImpl = CanadaIncomeTaxServiceImpl;
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FuYWRhSW5jb21lVGF4U2VydmljZUltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5jb21lLXRheC9jYW5hZGEvQ2FuYWRhSW5jb21lVGF4U2VydmljZUltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBV0EsTUFBYSwwQkFBMEI7SUFJbkMsWUFBWSxNQUFjLEVBQUUsS0FBcUI7UUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVNLGtCQUFrQjtRQUVyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFdkUsT0FBTztZQUNILFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTztZQUN6QixTQUFTLEVBQUUsTUFBTTtZQUNqQixHQUFHO1lBQ0gsRUFBRTtZQUNGLGVBQWUsRUFBRSxNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUU7WUFDbEMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFO1lBQzNDLGdCQUFnQixFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTztTQUMxQyxDQUFDO0lBQ04sQ0FBQztJQUVPLGVBQWUsQ0FBQyxNQUFjLEVBQUUsUUFBc0I7UUFDMUQsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2hDLElBQUksTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRW5DLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDO1lBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFFakQsT0FBTyxLQUFLLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDcEMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVPLFlBQVksQ0FBQyxHQUFXLEVBQUUsVUFBcUMsRUFBRTtRQUNyRSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FDOUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxFQUNuQyxDQUFDLENBQ0osQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLFlBQVksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxVQUFVLENBQUMsTUFBYyxFQUFFLEdBQXFCO1FBQ3BELElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUFTO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFFOUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUNYLGFBQWEsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUN4QixHQUFHLENBQUMsZ0JBQWdCLENBQ3ZCLENBQUM7SUFDTixDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQWMsRUFBRSxFQUFtQjtRQUNqRCxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWxCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQzVCLE1BQU0sRUFDTixFQUFFLENBQUMsc0JBQXNCLENBQzVCLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxHQUFHLENBQ1gsZUFBZSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQ3pCLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FDdEIsQ0FBQztJQUNOLENBQUM7Q0FDSjtBQXRFRCxnRUFzRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYW5hZGFJbmNvbWVUYXhTZXJ2aWNlIH0gZnJvbSBcIi4vQ2FuYWRhSW5jb21lVGF4U2VydmljZVwiO1xuaW1wb3J0IHtcbiAgICBDUFBDb250cmlidXRpb24sXG4gICAgQ29tcHV0ZWRJbmNvbWVUYXhWYWx1ZXMsXG4gICAgRUlDb250cmlidXRpb24sXG4gICAgSW5jb21lVGF4UnVsZXMsXG4gICAgVGF4QnJhY2tldCxcbiAgICBUYXhDcmVkaXRcbn0gZnJvbSBcIi4vZG9tYWluL3R5cGVzXCI7XG5cblxuZXhwb3J0IGNsYXNzIENhbmFkYUluY29tZVRheFNlcnZpY2VJbXBsIGltcGxlbWVudHMgQ2FuYWRhSW5jb21lVGF4U2VydmljZSB7XG4gICAgcHJpdmF0ZSBfaW5jb21lOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfcnVsZXM6IEluY29tZVRheFJ1bGVzO1xuXG4gICAgY29uc3RydWN0b3IoaW5jb21lOiBudW1iZXIsIHJ1bGVzOiBJbmNvbWVUYXhSdWxlcykge1xuICAgICAgICB0aGlzLl9pbmNvbWUgPSBpbmNvbWU7XG4gICAgICAgIHRoaXMuX3J1bGVzID0gcnVsZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNhbGN1bGF0ZU5ldEluY29tZSgpOiBDb21wdXRlZEluY29tZVRheFZhbHVlcyB7XG5cbiAgICAgICAgY29uc3QgZ3Jvc3NUYXggPSB0aGlzLmNvbXB1dGVHcm9zc1RheCh0aGlzLl9pbmNvbWUsIHRoaXMuX3J1bGVzLnRheF9icmFja2V0cyk7XG4gICAgICAgIGNvbnN0IG5ldFRheCA9IHRoaXMuYXBwbHlDcmVkaXRzKGdyb3NzVGF4LCB0aGlzLl9ydWxlcy5jcmVkaXRzKTtcbiAgICAgICAgY29uc3QgY3BwID0gdGhpcy5jb21wdXRlQ1BQKHRoaXMuX2luY29tZSwgdGhpcy5fcnVsZXMuY29udHJpYnV0aW9ucz8uY3BwKTtcbiAgICAgICAgY29uc3QgZWkgPSB0aGlzLmNvbXB1dGVFSSh0aGlzLl9pbmNvbWUsIHRoaXMuX3J1bGVzLmNvbnRyaWJ1dGlvbnM/LmVpKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ3Jvc3NJbmNvbWU6IHRoaXMuX2luY29tZSxcbiAgICAgICAgICAgIGluY29tZVRheDogbmV0VGF4LFxuICAgICAgICAgICAgY3BwLFxuICAgICAgICAgICAgZWksXG4gICAgICAgICAgICB0b3RhbERlZHVjdGlvbnM6IG5ldFRheCArIGNwcCArIGVpLFxuICAgICAgICAgICAgbmV0SW5jb21lOiB0aGlzLl9pbmNvbWUgLSBuZXRUYXggLSBjcHAgLSBlaSxcbiAgICAgICAgICAgIGVmZmVjdGl2ZVRheFJhdGU6IG5ldFRheCAvIHRoaXMuX2luY29tZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXB1dGVHcm9zc1RheChpbmNvbWU6IG51bWJlciwgYnJhY2tldHM6IFRheEJyYWNrZXRbXSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBicmFja2V0cy5yZWR1Y2UoKHRvdGFsLCBiKSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5jb21lIDw9IGIuZnJvbSkgcmV0dXJuIHRvdGFsO1xuICAgIFxuICAgICAgICAgICAgY29uc3QgdXBwZXIgPSBiLnRvID8/IGluY29tZTtcbiAgICAgICAgICAgIGNvbnN0IHRheGFibGUgPSBNYXRoLm1pbihpbmNvbWUsIHVwcGVyKSAtIGIuZnJvbTtcbiAgICBcbiAgICAgICAgICAgIHJldHVybiB0b3RhbCArIHRheGFibGUgKiBiLnJhdGU7XG4gICAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlDcmVkaXRzKHRheDogbnVtYmVyLCBjcmVkaXRzOiBSZWNvcmQ8c3RyaW5nLCBUYXhDcmVkaXQ+ID0ge30pOiBudW1iZXIge1xuICAgICAgICBjb25zdCB0b3RhbENyZWRpdHMgPSBPYmplY3QudmFsdWVzKGNyZWRpdHMpLnJlZHVjZShcbiAgICAgICAgICAgIChzdW0sIGMpID0+IHN1bSArIGMuYW1vdW50ICogYy5yYXRlLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgKTtcbiAgICBcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHRheCAtIHRvdGFsQ3JlZGl0cyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wdXRlQ1BQKGluY29tZTogbnVtYmVyLCBjcHA/OiBDUFBDb250cmlidXRpb24pOiBudW1iZXIge1xuICAgICAgICBpZiAoIWNwcCB8fCBpbmNvbWUgPD0gY3BwLmV4ZW1wdGlvbikgcmV0dXJuIDA7XG4gICAgXG4gICAgICAgIGNvbnN0IGNvbnRyaWJ1dGFibGUgPSBpbmNvbWUgLSBjcHAuZXhlbXB0aW9uO1xuICAgICAgICByZXR1cm4gTWF0aC5taW4oXG4gICAgICAgICAgICBjb250cmlidXRhYmxlICogY3BwLnJhdGUsXG4gICAgICAgICAgICBjcHAubWF4X2NvbnRyaWJ1dGlvbixcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXB1dGVFSShpbmNvbWU6IG51bWJlciwgZWk/OiBFSUNvbnRyaWJ1dGlvbik6IG51bWJlciB7XG4gICAgICAgIGlmICghZWkpIHJldHVybiAwO1xuICAgIFxuICAgICAgICBjb25zdCBpbnN1cmFibGVJbmNvbWUgPSBNYXRoLm1pbihcbiAgICAgICAgICAgIGluY29tZSxcbiAgICAgICAgICAgIGVpLm1heF9pbnN1cmFibGVfZWFybmluZ3MsXG4gICAgICAgICk7XG4gICAgXG4gICAgICAgIHJldHVybiBNYXRoLm1pbihcbiAgICAgICAgICAgIGluc3VyYWJsZUluY29tZSAqIGVpLnJhdGUsXG4gICAgICAgICAgICBlaS5tYXhfY29udHJpYnV0aW9uLFxuICAgICAgICApO1xuICAgIH1cbn0iXX0=
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FuYWRhSW5jb21lVGF4U2VydmljZUltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5jb21lLXRheC9jYW5hZGEvQ2FuYWRhSW5jb21lVGF4U2VydmljZUltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBV0EsTUFBYSwwQkFBMEI7SUFJbkMsWUFBWSxNQUFjLEVBQUUsS0FBcUI7UUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVNLGtCQUFrQjtRQUVyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFdkUsT0FBTztZQUNILFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTztZQUN6QixTQUFTLEVBQUUsTUFBTTtZQUNqQixHQUFHO1lBQ0gsRUFBRTtZQUNGLGVBQWUsRUFBRSxNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUU7WUFDbEMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFO1lBQzNDLGdCQUFnQixFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTztTQUMxQyxDQUFDO0lBQ04sQ0FBQztJQUVPLGVBQWUsQ0FBQyxNQUFjLEVBQUUsUUFBc0I7UUFDMUQsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2hDLElBQUksTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRW5DLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDO1lBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFFakQsT0FBTyxLQUFLLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDcEMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVPLFlBQVksQ0FBQyxHQUFXLEVBQUUsVUFBcUMsRUFBRTtRQUNyRSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FDOUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxFQUNuQyxDQUFDLENBQ0osQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLFlBQVksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxVQUFVLENBQUMsTUFBYyxFQUFFLEdBQXFCO1FBQ3BELElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUFTO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFFOUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUNYLGFBQWEsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUN4QixHQUFHLENBQUMsZUFBZSxDQUN0QixDQUFDO0lBQ04sQ0FBQztJQUVPLFNBQVMsQ0FBQyxNQUFjLEVBQUUsRUFBbUI7UUFDakQsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUVsQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUM1QixNQUFNLEVBQ04sRUFBRSxDQUFDLG9CQUFvQixDQUMxQixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUNYLGVBQWUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUN6QixFQUFFLENBQUMsZUFBZSxDQUNyQixDQUFDO0lBQ04sQ0FBQztDQUNKO0FBdEVELGdFQXNFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhbmFkYUluY29tZVRheFNlcnZpY2UgfSBmcm9tIFwiLi9DYW5hZGFJbmNvbWVUYXhTZXJ2aWNlXCI7XG5pbXBvcnQge1xuICAgIENQUENvbnRyaWJ1dGlvbixcbiAgICBDb21wdXRlZEluY29tZVRheFZhbHVlcyxcbiAgICBFSUNvbnRyaWJ1dGlvbixcbiAgICBJbmNvbWVUYXhSdWxlcyxcbiAgICBUYXhCcmFja2V0LFxuICAgIFRheENyZWRpdFxufSBmcm9tIFwiLi9kb21haW4vdHlwZXNcIjtcblxuXG5leHBvcnQgY2xhc3MgQ2FuYWRhSW5jb21lVGF4U2VydmljZUltcGwgaW1wbGVtZW50cyBDYW5hZGFJbmNvbWVUYXhTZXJ2aWNlIHtcbiAgICBwcml2YXRlIF9pbmNvbWU6IG51bWJlcjtcbiAgICBwcml2YXRlIF9ydWxlczogSW5jb21lVGF4UnVsZXM7XG5cbiAgICBjb25zdHJ1Y3RvcihpbmNvbWU6IG51bWJlciwgcnVsZXM6IEluY29tZVRheFJ1bGVzKSB7XG4gICAgICAgIHRoaXMuX2luY29tZSA9IGluY29tZTtcbiAgICAgICAgdGhpcy5fcnVsZXMgPSBydWxlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FsY3VsYXRlTmV0SW5jb21lKCk6IENvbXB1dGVkSW5jb21lVGF4VmFsdWVzIHtcblxuICAgICAgICBjb25zdCBncm9zc1RheCA9IHRoaXMuY29tcHV0ZUdyb3NzVGF4KHRoaXMuX2luY29tZSwgdGhpcy5fcnVsZXMudGF4QnJhY2tldHMpO1xuICAgICAgICBjb25zdCBuZXRUYXggPSB0aGlzLmFwcGx5Q3JlZGl0cyhncm9zc1RheCwgdGhpcy5fcnVsZXMuY3JlZGl0cyk7XG4gICAgICAgIGNvbnN0IGNwcCA9IHRoaXMuY29tcHV0ZUNQUCh0aGlzLl9pbmNvbWUsIHRoaXMuX3J1bGVzLmNvbnRyaWJ1dGlvbnM/LmNwcCk7XG4gICAgICAgIGNvbnN0IGVpID0gdGhpcy5jb21wdXRlRUkodGhpcy5faW5jb21lLCB0aGlzLl9ydWxlcy5jb250cmlidXRpb25zPy5laSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdyb3NzSW5jb21lOiB0aGlzLl9pbmNvbWUsXG4gICAgICAgICAgICBpbmNvbWVUYXg6IG5ldFRheCxcbiAgICAgICAgICAgIGNwcCxcbiAgICAgICAgICAgIGVpLFxuICAgICAgICAgICAgdG90YWxEZWR1Y3Rpb25zOiBuZXRUYXggKyBjcHAgKyBlaSxcbiAgICAgICAgICAgIG5ldEluY29tZTogdGhpcy5faW5jb21lIC0gbmV0VGF4IC0gY3BwIC0gZWksXG4gICAgICAgICAgICBlZmZlY3RpdmVUYXhSYXRlOiBuZXRUYXggLyB0aGlzLl9pbmNvbWUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wdXRlR3Jvc3NUYXgoaW5jb21lOiBudW1iZXIsIGJyYWNrZXRzOiBUYXhCcmFja2V0W10pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gYnJhY2tldHMucmVkdWNlKCh0b3RhbCwgYikgPT4ge1xuICAgICAgICAgICAgaWYgKGluY29tZSA8PSBiLmZyb20pIHJldHVybiB0b3RhbDtcbiAgICBcbiAgICAgICAgICAgIGNvbnN0IHVwcGVyID0gYi50byA/PyBpbmNvbWU7XG4gICAgICAgICAgICBjb25zdCB0YXhhYmxlID0gTWF0aC5taW4oaW5jb21lLCB1cHBlcikgLSBiLmZyb207XG4gICAgXG4gICAgICAgICAgICByZXR1cm4gdG90YWwgKyB0YXhhYmxlICogYi5yYXRlO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5Q3JlZGl0cyh0YXg6IG51bWJlciwgY3JlZGl0czogUmVjb3JkPHN0cmluZywgVGF4Q3JlZGl0PiA9IHt9KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdG90YWxDcmVkaXRzID0gT2JqZWN0LnZhbHVlcyhjcmVkaXRzKS5yZWR1Y2UoXG4gICAgICAgICAgICAoc3VtLCBjKSA9PiBzdW0gKyBjLmFtb3VudCAqIGMucmF0ZSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICk7XG4gICAgXG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCB0YXggLSB0b3RhbENyZWRpdHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcHV0ZUNQUChpbmNvbWU6IG51bWJlciwgY3BwPzogQ1BQQ29udHJpYnV0aW9uKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFjcHAgfHwgaW5jb21lIDw9IGNwcC5leGVtcHRpb24pIHJldHVybiAwO1xuICAgIFxuICAgICAgICBjb25zdCBjb250cmlidXRhYmxlID0gaW5jb21lIC0gY3BwLmV4ZW1wdGlvbjtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKFxuICAgICAgICAgICAgY29udHJpYnV0YWJsZSAqIGNwcC5yYXRlLFxuICAgICAgICAgICAgY3BwLm1heENvbnRyaWJ1dGlvbixcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXB1dGVFSShpbmNvbWU6IG51bWJlciwgZWk/OiBFSUNvbnRyaWJ1dGlvbik6IG51bWJlciB7XG4gICAgICAgIGlmICghZWkpIHJldHVybiAwO1xuICAgIFxuICAgICAgICBjb25zdCBpbnN1cmFibGVJbmNvbWUgPSBNYXRoLm1pbihcbiAgICAgICAgICAgIGluY29tZSxcbiAgICAgICAgICAgIGVpLm1heEluc3VyYWJsZUVhcm5pbmdzLFxuICAgICAgICApO1xuICAgIFxuICAgICAgICByZXR1cm4gTWF0aC5taW4oXG4gICAgICAgICAgICBpbnN1cmFibGVJbmNvbWUgKiBlaS5yYXRlLFxuICAgICAgICAgICAgZWkubWF4Q29udHJpYnV0aW9uLFxuICAgICAgICApO1xuICAgIH1cbn0iXX0=
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5jb21lLXRheC9jYW5hZGEvZG9tYWluL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEluY29tZVRheFJ1bGVzIHtcbiAgICB0YXhfYnJhY2tldHM6IFRheEJyYWNrZXRbXTtcbiAgICBjcmVkaXRzPzogUmVjb3JkPHN0cmluZywgVGF4Q3JlZGl0PjtcbiAgICBjb250cmlidXRpb25zPzogQ29udHJpYnV0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYXhCcmFja2V0IHtcbiAgICBmcm9tOiBudW1iZXI7XG4gICAgdG86IG51bWJlciB8IG51bGw7XG4gICAgcmF0ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRheENyZWRpdCB7XG4gICAgYW1vdW50OiBudW1iZXI7XG4gICAgdHlwZTogJ25vblJlZnVuZGFibGUnIHwgJ3JlZnVuZGFibGUnO1xuICAgIHJhdGU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250cmlidXRpb25zIHtcbiAgICBjcHA/OiBDUFBDb250cmlidXRpb247XG4gICAgZWk/OiBFSUNvbnRyaWJ1dGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDUFBDb250cmlidXRpb24ge1xuICAgIHJhdGU6IG51bWJlcjtcbiAgICBtYXhfY29udHJpYnV0aW9uOiBudW1iZXI7XG4gICAgZXhlbXB0aW9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRUlDb250cmlidXRpb24ge1xuICAgIHJhdGU6IG51bWJlcjtcbiAgICBtYXhfaW5zdXJhYmxlX2Vhcm5pbmdzOiBudW1iZXI7XG4gICAgbWF4X2NvbnRyaWJ1dGlvbjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVkSW5jb21lVGF4VmFsdWVzIHtcbiAgICBncm9zc0luY29tZTogbnVtYmVyO1xuICAgIGluY29tZVRheDogbnVtYmVyO1xuICAgIGNwcDogbnVtYmVyO1xuICAgIGVpOiBudW1iZXI7XG4gICAgdG90YWxEZWR1Y3Rpb25zOiBudW1iZXI7XG4gICAgbmV0SW5jb21lOiBudW1iZXI7XG4gICAgZWZmZWN0aXZlVGF4UmF0ZTogbnVtYmVyO1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5jb21lLXRheC9jYW5hZGEvZG9tYWluL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSdWxlSW5wdXQsIFJ1bGVNZXRhLCBSdWxlT3V0cHV0IH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEluY29tZVRheFJ1bGVzIHtcbiAgICB0YXhCcmFja2V0czogVGF4QnJhY2tldFtdO1xuICAgIGNyZWRpdHM/OiBSZWNvcmQ8c3RyaW5nLCBUYXhDcmVkaXQ+O1xuICAgIGNvbnRyaWJ1dGlvbnM/OiBDb250cmlidXRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRheEJyYWNrZXQge1xuICAgIGZyb206IG51bWJlcjtcbiAgICB0bzogbnVtYmVyIHwgbnVsbDtcbiAgICByYXRlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGF4Q3JlZGl0IHtcbiAgICBhbW91bnQ6IG51bWJlcjtcbiAgICB0eXBlOiAnbm9uUmVmdW5kYWJsZScgfCAncmVmdW5kYWJsZSc7XG4gICAgcmF0ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyaWJ1dGlvbnMge1xuICAgIGNwcD86IENQUENvbnRyaWJ1dGlvbjtcbiAgICBlaT86IEVJQ29udHJpYnV0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENQUENvbnRyaWJ1dGlvbiB7XG4gICAgcmF0ZTogbnVtYmVyO1xuICAgIG1heENvbnRyaWJ1dGlvbjogbnVtYmVyO1xuICAgIGV4ZW1wdGlvbjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVJQ29udHJpYnV0aW9uIHtcbiAgICByYXRlOiBudW1iZXI7XG4gICAgbWF4SW5zdXJhYmxlRWFybmluZ3M6IG51bWJlcjtcbiAgICBtYXhDb250cmlidXRpb246IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlZEluY29tZVRheFZhbHVlcyB7XG4gICAgZ3Jvc3NJbmNvbWU6IG51bWJlcjtcbiAgICBpbmNvbWVUYXg6IG51bWJlcjtcbiAgICBjcHA6IG51bWJlcjtcbiAgICBlaTogbnVtYmVyO1xuICAgIHRvdGFsRGVkdWN0aW9uczogbnVtYmVyO1xuICAgIG5ldEluY29tZTogbnVtYmVyO1xuICAgIGVmZmVjdGl2ZVRheFJhdGU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbmNvbWVUYXhDYWxjdWxhdG9yU2NoZW1hIHtcblx0bWV0YTogUnVsZU1ldGE7XG5cdGlucHV0czogUnVsZUlucHV0W107XG5cdG91dHB1dHM6IFJ1bGVPdXRwdXRbXTtcblx0cnVsZXM6IEluY29tZVRheFJ1bGVzO1xufVxuIl19
package/dist/index.js CHANGED
@@ -1,6 +1,21 @@
1
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
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
17
  exports.CanadaIncomeTaxService = void 0;
4
18
  var CanadaIncomeTaxServiceImpl_1 = require("./income-tax/canada/CanadaIncomeTaxServiceImpl");
5
19
  Object.defineProperty(exports, "CanadaIncomeTaxService", { enumerable: true, get: function () { return CanadaIncomeTaxServiceImpl_1.CanadaIncomeTaxServiceImpl; } });
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkZBQXNIO0FBQTdHLG9JQUFBLDBCQUEwQixPQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IENhbmFkYUluY29tZVRheFNlcnZpY2VJbXBsIGFzIENhbmFkYUluY29tZVRheFNlcnZpY2UgfSBmcm9tICcuL2luY29tZS10YXgvY2FuYWRhL0NhbmFkYUluY29tZVRheFNlcnZpY2VJbXBsJztcbmV4cG9ydCB7IENvbXB1dGVkSW5jb21lVGF4VmFsdWVzLCBJbmNvbWVUYXhSdWxlcyB9IGZyb20gJy4vaW5jb21lLXRheC9jYW5hZGEvZG9tYWluL3R5cGVzJzsiXX0=
20
+ __exportStar(require("./domain/types"), exports);
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2RkFBc0g7QUFBN0csb0lBQUEsMEJBQTBCLE9BQTBCO0FBRTdELGlEQUErQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IENhbmFkYUluY29tZVRheFNlcnZpY2VJbXBsIGFzIENhbmFkYUluY29tZVRheFNlcnZpY2UgfSBmcm9tICcuL2luY29tZS10YXgvY2FuYWRhL0NhbmFkYUluY29tZVRheFNlcnZpY2VJbXBsJztcbmV4cG9ydCB7IENvbXB1dGVkSW5jb21lVGF4VmFsdWVzLCBJbmNvbWVUYXhSdWxlcywgSW5jb21lVGF4Q2FsY3VsYXRvclNjaGVtYSB9IGZyb20gJy4vaW5jb21lLXRheC9jYW5hZGEvZG9tYWluL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vZG9tYWluL3R5cGVzJzsiXX0=
@@ -9,8 +9,8 @@ export interface RuleMeta {
9
9
  region: string;
10
10
  calculator: CalculatorType;
11
11
  version: string;
12
- effective_from: string;
13
- effective_to: string | null;
12
+ effectivefrom: string;
13
+ effectiveto: string | null;
14
14
  source?: RuleSource[];
15
15
  }
16
16
  export interface RuleSource {
@@ -1,5 +1,6 @@
1
+ import { RuleInput, RuleMeta, RuleOutput } from "../../../domain/types";
1
2
  export interface IncomeTaxRules {
2
- tax_brackets: TaxBracket[];
3
+ taxBrackets: TaxBracket[];
3
4
  credits?: Record<string, TaxCredit>;
4
5
  contributions?: Contributions;
5
6
  }
@@ -19,13 +20,13 @@ export interface Contributions {
19
20
  }
20
21
  export interface CPPContribution {
21
22
  rate: number;
22
- max_contribution: number;
23
+ maxContribution: number;
23
24
  exemption: number;
24
25
  }
25
26
  export interface EIContribution {
26
27
  rate: number;
27
- max_insurable_earnings: number;
28
- max_contribution: number;
28
+ maxInsurableEarnings: number;
29
+ maxContribution: number;
29
30
  }
30
31
  export interface ComputedIncomeTaxValues {
31
32
  grossIncome: number;
@@ -36,3 +37,9 @@ export interface ComputedIncomeTaxValues {
36
37
  netIncome: number;
37
38
  effectiveTaxRate: number;
38
39
  }
40
+ export interface IncomeTaxCalculatorSchema {
41
+ meta: RuleMeta;
42
+ inputs: RuleInput[];
43
+ outputs: RuleOutput[];
44
+ rules: IncomeTaxRules;
45
+ }
@@ -1,2 +1,3 @@
1
1
  export { CanadaIncomeTaxServiceImpl as CanadaIncomeTaxService } from './income-tax/canada/CanadaIncomeTaxServiceImpl';
2
- export { ComputedIncomeTaxValues, IncomeTaxRules } from './income-tax/canada/domain/types';
2
+ export { ComputedIncomeTaxValues, IncomeTaxRules, IncomeTaxCalculatorSchema } from './income-tax/canada/domain/types';
3
+ export * from './domain/types';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@novha/calc-engines",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/types/index.d.ts",
6
6
  "scripts": {
@@ -10,8 +10,8 @@ export interface RuleMeta {
10
10
  region: string;
11
11
  calculator: CalculatorType;
12
12
  version: string;
13
- effective_from: string;
14
- effective_to: string | null;
13
+ effectivefrom: string;
14
+ effectiveto: string | null;
15
15
  source?: RuleSource[];
16
16
  }
17
17
 
@@ -20,7 +20,7 @@ export class CanadaIncomeTaxServiceImpl implements CanadaIncomeTaxService {
20
20
 
21
21
  public calculateNetIncome(): ComputedIncomeTaxValues {
22
22
 
23
- const grossTax = this.computeGrossTax(this._income, this._rules.tax_brackets);
23
+ const grossTax = this.computeGrossTax(this._income, this._rules.taxBrackets);
24
24
  const netTax = this.applyCredits(grossTax, this._rules.credits);
25
25
  const cpp = this.computeCPP(this._income, this._rules.contributions?.cpp);
26
26
  const ei = this.computeEI(this._income, this._rules.contributions?.ei);
@@ -62,7 +62,7 @@ export class CanadaIncomeTaxServiceImpl implements CanadaIncomeTaxService {
62
62
  const contributable = income - cpp.exemption;
63
63
  return Math.min(
64
64
  contributable * cpp.rate,
65
- cpp.max_contribution,
65
+ cpp.maxContribution,
66
66
  );
67
67
  }
68
68
 
@@ -71,12 +71,12 @@ export class CanadaIncomeTaxServiceImpl implements CanadaIncomeTaxService {
71
71
 
72
72
  const insurableIncome = Math.min(
73
73
  income,
74
- ei.max_insurable_earnings,
74
+ ei.maxInsurableEarnings,
75
75
  );
76
76
 
77
77
  return Math.min(
78
78
  insurableIncome * ei.rate,
79
- ei.max_contribution,
79
+ ei.maxContribution,
80
80
  );
81
81
  }
82
82
  }
@@ -1,5 +1,7 @@
1
+ import { RuleInput, RuleMeta, RuleOutput } from "../../../domain/types";
2
+
1
3
  export interface IncomeTaxRules {
2
- tax_brackets: TaxBracket[];
4
+ taxBrackets: TaxBracket[];
3
5
  credits?: Record<string, TaxCredit>;
4
6
  contributions?: Contributions;
5
7
  }
@@ -23,14 +25,14 @@ export interface Contributions {
23
25
 
24
26
  export interface CPPContribution {
25
27
  rate: number;
26
- max_contribution: number;
28
+ maxContribution: number;
27
29
  exemption: number;
28
30
  }
29
31
 
30
32
  export interface EIContribution {
31
33
  rate: number;
32
- max_insurable_earnings: number;
33
- max_contribution: number;
34
+ maxInsurableEarnings: number;
35
+ maxContribution: number;
34
36
  }
35
37
 
36
38
  export interface ComputedIncomeTaxValues {
@@ -42,3 +44,10 @@ export interface ComputedIncomeTaxValues {
42
44
  netIncome: number;
43
45
  effectiveTaxRate: number;
44
46
  }
47
+
48
+ export interface IncomeTaxCalculatorSchema {
49
+ meta: RuleMeta;
50
+ inputs: RuleInput[];
51
+ outputs: RuleOutput[];
52
+ rules: IncomeTaxRules;
53
+ }
package/src/index.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export { CanadaIncomeTaxServiceImpl as CanadaIncomeTaxService } from './income-tax/canada/CanadaIncomeTaxServiceImpl';
2
- export { ComputedIncomeTaxValues, IncomeTaxRules } from './income-tax/canada/domain/types';
2
+ export { ComputedIncomeTaxValues, IncomeTaxRules, IncomeTaxCalculatorSchema } from './income-tax/canada/domain/types';
3
+ export * from './domain/types';