@novha/calc-engines 1.7.2 → 2.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.
- package/dist/corporate/australia/AustraliaCorporateTaxService.js +3 -0
- package/dist/corporate/australia/AustraliaCorporateTaxServiceImpl.js +71 -0
- package/dist/corporate/australia/domain/types.js +3 -0
- package/dist/income-tax/australia/AustraliaIncomeTaxService.js +3 -0
- package/dist/income-tax/australia/AustraliaIncomeTaxServiceImpl.js +99 -0
- package/dist/income-tax/australia/domain/types.js +3 -0
- package/dist/index.js +9 -2
- package/dist/mortgage/australia/AustraliaMortgageService.js +3 -0
- package/dist/mortgage/australia/AustraliaMortgageServiceImpl.js +115 -0
- package/dist/mortgage/australia/domain/types.js +3 -0
- package/dist/types/corporate/australia/AustraliaCorporateTaxService.d.ts +4 -0
- package/dist/types/corporate/australia/AustraliaCorporateTaxServiceImpl.d.ts +9 -0
- package/dist/types/corporate/australia/domain/types.d.ts +34 -0
- package/dist/types/income-tax/australia/AustraliaIncomeTaxService.d.ts +4 -0
- package/dist/types/income-tax/australia/AustraliaIncomeTaxServiceImpl.d.ts +13 -0
- package/dist/types/income-tax/australia/domain/types.d.ts +36 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/mortgage/australia/AustraliaMortgageService.d.ts +4 -0
- package/dist/types/mortgage/australia/AustraliaMortgageServiceImpl.d.ts +9 -0
- package/dist/types/mortgage/australia/domain/types.d.ts +55 -0
- package/jest.config.js +1 -1
- package/package.json +1 -1
- package/src/corporate/australia/AustraliaCorporateTaxService.ts +5 -0
- package/src/corporate/australia/AustraliaCorporateTaxServiceImpl.ts +88 -0
- package/src/corporate/australia/domain/types.ts +41 -0
- package/src/income-tax/australia/AustraliaIncomeTaxService.ts +9 -0
- package/src/income-tax/australia/AustraliaIncomeTaxServiceImpl.ts +136 -0
- package/src/income-tax/australia/domain/types.ts +41 -0
- package/src/index.ts +21 -0
- package/src/mortgage/australia/AustraliaMortgageService.ts +5 -0
- package/src/mortgage/australia/AustraliaMortgageServiceImpl.ts +160 -0
- package/src/mortgage/australia/domain/types.ts +65 -0
- package/test/australia-corporate-tax.test.ts +97 -0
- package/test/australia-income-tax.test.ts +133 -0
- package/test/australia-mortgage.test.ts +125 -0
- package/tsconfig.test.json +9 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVzdHJhbGlhQ29ycG9yYXRlVGF4U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3Jwb3JhdGUvYXVzdHJhbGlhL0F1c3RyYWxpYUNvcnBvcmF0ZVRheFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElucHV0LCBSZXN1bHQsIFJ1bGVzIH0gZnJvbSBcIi4vZG9tYWluL3R5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVzdHJhbGlhQ29ycG9yYXRlVGF4U2VydmljZSB7XG4gICAgY2FsY3VsYXRlKGlucHV0OiBJbnB1dCwgcnVsZXM6IFJ1bGVzKTogUmVzdWx0O1xufVxuIl19
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AustraliaCorporateTaxServiceImpl = void 0;
|
|
4
|
+
class AustraliaCorporateTaxServiceImpl {
|
|
5
|
+
constructor(input, rules) {
|
|
6
|
+
this._input = input;
|
|
7
|
+
this._rules = rules;
|
|
8
|
+
}
|
|
9
|
+
calculate() {
|
|
10
|
+
const regime = this._input.isSmallBusiness
|
|
11
|
+
? this._rules.regimes.smallBusiness
|
|
12
|
+
: this._rules.regimes.general;
|
|
13
|
+
if (!regime) {
|
|
14
|
+
throw new Error('Unknown tax regime');
|
|
15
|
+
}
|
|
16
|
+
if (regime.conditions?.maxTurnover !== undefined) {
|
|
17
|
+
if (this._input.annualTurnover > regime.conditions.maxTurnover) {
|
|
18
|
+
throw new Error('Small business regime not applicable: turnover exceeded');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
let tax = 0;
|
|
22
|
+
let breakdowns = [];
|
|
23
|
+
if (regime.type === 'flat') {
|
|
24
|
+
tax = this._input.taxableIncome * regime.rate;
|
|
25
|
+
breakdowns = [{
|
|
26
|
+
from: '0',
|
|
27
|
+
to: 'Above',
|
|
28
|
+
rate: regime.rate,
|
|
29
|
+
amount: tax,
|
|
30
|
+
}];
|
|
31
|
+
}
|
|
32
|
+
else if (regime.type === 'progressive') {
|
|
33
|
+
const result = this.calculateProgressiveTax(this._input.taxableIncome, regime.brackets);
|
|
34
|
+
tax = result.total;
|
|
35
|
+
breakdowns = result.breakdowns;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
throw new Error('Unsupported regime type');
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
corporateTax: tax,
|
|
42
|
+
effectiveTaxRate: this._input.taxableIncome > 0
|
|
43
|
+
? (tax / this._input.taxableIncome) * 100
|
|
44
|
+
: 0,
|
|
45
|
+
breakdowns,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
calculateProgressiveTax(income, brackets) {
|
|
49
|
+
let tax = 0;
|
|
50
|
+
const breakdowns = [];
|
|
51
|
+
for (const bracket of brackets) {
|
|
52
|
+
if (income <= bracket.from)
|
|
53
|
+
break;
|
|
54
|
+
const upper = bracket.to === null ? income : Math.min(income, bracket.to);
|
|
55
|
+
const taxableAmount = upper - bracket.from;
|
|
56
|
+
if (taxableAmount > 0) {
|
|
57
|
+
const bracketTax = taxableAmount * bracket.rate;
|
|
58
|
+
tax += bracketTax;
|
|
59
|
+
breakdowns.push({
|
|
60
|
+
from: `${bracket.from}`,
|
|
61
|
+
to: `${bracket.to ?? 'Above'}`,
|
|
62
|
+
rate: bracket.rate,
|
|
63
|
+
amount: bracketTax,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return { total: tax, breakdowns };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.AustraliaCorporateTaxServiceImpl = AustraliaCorporateTaxServiceImpl;
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVzdHJhbGlhQ29ycG9yYXRlVGF4U2VydmljZUltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29ycG9yYXRlL2F1c3RyYWxpYS9BdXN0cmFsaWFDb3Jwb3JhdGVUYXhTZXJ2aWNlSW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxNQUFhLGdDQUFnQztJQUl6QyxZQUFZLEtBQVksRUFBRSxLQUFZO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlO1lBQ3RDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhO1lBQ25DLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFFbEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQy9DLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDN0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1lBQy9FLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osSUFBSSxVQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUVqQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDekIsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDOUMsVUFBVSxHQUFHLENBQUM7b0JBQ1YsSUFBSSxFQUFFLEdBQUc7b0JBQ1QsRUFBRSxFQUFFLE9BQU87b0JBQ1gsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO29CQUNqQixNQUFNLEVBQUUsR0FBRztpQkFDZCxDQUFDLENBQUM7UUFDUCxDQUFDO2FBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQ3pCLE1BQU0sQ0FBQyxRQUFRLENBQ2xCLENBQUM7WUFDRixHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNuQixVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsT0FBTztZQUNILFlBQVksRUFBRSxHQUFHO1lBQ2pCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLENBQUM7Z0JBQzNDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUc7Z0JBQ3pDLENBQUMsQ0FBQyxDQUFDO1lBQ1AsVUFBVTtTQUNiLENBQUM7SUFDTixDQUFDO0lBRU8sdUJBQXVCLENBQzNCLE1BQWMsRUFDZCxRQUFpQztRQUVqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixNQUFNLFVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBRW5DLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7WUFDN0IsSUFBSSxNQUFNLElBQUksT0FBTyxDQUFDLElBQUk7Z0JBQUUsTUFBTTtZQUVsQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUUsTUFBTSxhQUFhLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFFM0MsSUFBSSxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sVUFBVSxHQUFHLGFBQWEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNoRCxHQUFHLElBQUksVUFBVSxDQUFDO2dCQUVsQixVQUFVLENBQUMsSUFBSSxDQUFDO29CQUNaLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUU7b0JBQ3ZCLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksT0FBTyxFQUFFO29CQUM5QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7b0JBQ2xCLE1BQU0sRUFBRSxVQUFVO2lCQUNyQixDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3RDLENBQUM7Q0FDSjtBQW5GRCw0RUFtRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha2Rvd24gfSBmcm9tIFwiLi4vZG9tYWluL3R5cGVzXCI7XG5pbXBvcnQgeyBBdXN0cmFsaWFDb3Jwb3JhdGVUYXhTZXJ2aWNlIH0gZnJvbSBcIi4vQXVzdHJhbGlhQ29ycG9yYXRlVGF4U2VydmljZVwiO1xuaW1wb3J0IHsgSW5wdXQsIFByb2dyZXNzaXZlVGF4QnJhY2tldCwgUmVzdWx0LCBSdWxlcyB9IGZyb20gXCIuL2RvbWFpbi90eXBlc1wiO1xuXG5leHBvcnQgY2xhc3MgQXVzdHJhbGlhQ29ycG9yYXRlVGF4U2VydmljZUltcGwgaW1wbGVtZW50cyBBdXN0cmFsaWFDb3Jwb3JhdGVUYXhTZXJ2aWNlIHtcbiAgICBwcml2YXRlIF9pbnB1dDogSW5wdXQ7XG4gICAgcHJpdmF0ZSBfcnVsZXM6IFJ1bGVzO1xuXG4gICAgY29uc3RydWN0b3IoaW5wdXQ6IElucHV0LCBydWxlczogUnVsZXMpIHtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fcnVsZXMgPSBydWxlcztcbiAgICB9XG5cbiAgICBjYWxjdWxhdGUoKTogUmVzdWx0IHtcbiAgICAgICAgY29uc3QgcmVnaW1lID0gdGhpcy5faW5wdXQuaXNTbWFsbEJ1c2luZXNzXG4gICAgICAgICAgICA/IHRoaXMuX3J1bGVzLnJlZ2ltZXMuc21hbGxCdXNpbmVzc1xuICAgICAgICAgICAgOiB0aGlzLl9ydWxlcy5yZWdpbWVzLmdlbmVyYWw7XG5cbiAgICAgICAgaWYgKCFyZWdpbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biB0YXggcmVnaW1lJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVnaW1lLmNvbmRpdGlvbnM/Lm1heFR1cm5vdmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pbnB1dC5hbm51YWxUdXJub3ZlciA+IHJlZ2ltZS5jb25kaXRpb25zLm1heFR1cm5vdmVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTbWFsbCBidXNpbmVzcyByZWdpbWUgbm90IGFwcGxpY2FibGU6IHR1cm5vdmVyIGV4Y2VlZGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGF4ID0gMDtcbiAgICAgICAgbGV0IGJyZWFrZG93bnM6IEJyZWFrZG93bltdID0gW107XG5cbiAgICAgICAgaWYgKHJlZ2ltZS50eXBlID09PSAnZmxhdCcpIHtcbiAgICAgICAgICAgIHRheCA9IHRoaXMuX2lucHV0LnRheGFibGVJbmNvbWUgKiByZWdpbWUucmF0ZTtcbiAgICAgICAgICAgIGJyZWFrZG93bnMgPSBbe1xuICAgICAgICAgICAgICAgIGZyb206ICcwJyxcbiAgICAgICAgICAgICAgICB0bzogJ0Fib3ZlJyxcbiAgICAgICAgICAgICAgICByYXRlOiByZWdpbWUucmF0ZSxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHRheCxcbiAgICAgICAgICAgIH1dO1xuICAgICAgICB9IGVsc2UgaWYgKHJlZ2ltZS50eXBlID09PSAncHJvZ3Jlc3NpdmUnKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNhbGN1bGF0ZVByb2dyZXNzaXZlVGF4KFxuICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0LnRheGFibGVJbmNvbWUsXG4gICAgICAgICAgICAgICAgcmVnaW1lLmJyYWNrZXRzLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRheCA9IHJlc3VsdC50b3RhbDtcbiAgICAgICAgICAgIGJyZWFrZG93bnMgPSByZXN1bHQuYnJlYWtkb3ducztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcmVnaW1lIHR5cGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb3Jwb3JhdGVUYXg6IHRheCxcbiAgICAgICAgICAgIGVmZmVjdGl2ZVRheFJhdGU6IHRoaXMuX2lucHV0LnRheGFibGVJbmNvbWUgPiAwXG4gICAgICAgICAgICAgICAgPyAodGF4IC8gdGhpcy5faW5wdXQudGF4YWJsZUluY29tZSkgKiAxMDBcbiAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICBicmVha2Rvd25zLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlUHJvZ3Jlc3NpdmVUYXgoXG4gICAgICAgIGluY29tZTogbnVtYmVyLFxuICAgICAgICBicmFja2V0czogUHJvZ3Jlc3NpdmVUYXhCcmFja2V0W10sXG4gICAgKTogeyB0b3RhbDogbnVtYmVyOyBicmVha2Rvd25zOiBCcmVha2Rvd25bXSB9IHtcbiAgICAgICAgbGV0IHRheCA9IDA7XG4gICAgICAgIGNvbnN0IGJyZWFrZG93bnM6IEJyZWFrZG93bltdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBicmFja2V0IG9mIGJyYWNrZXRzKSB7XG4gICAgICAgICAgICBpZiAoaW5jb21lIDw9IGJyYWNrZXQuZnJvbSkgYnJlYWs7XG5cbiAgICAgICAgICAgIGNvbnN0IHVwcGVyID0gYnJhY2tldC50byA9PT0gbnVsbCA/IGluY29tZSA6IE1hdGgubWluKGluY29tZSwgYnJhY2tldC50byk7XG4gICAgICAgICAgICBjb25zdCB0YXhhYmxlQW1vdW50ID0gdXBwZXIgLSBicmFja2V0LmZyb207XG5cbiAgICAgICAgICAgIGlmICh0YXhhYmxlQW1vdW50ID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJyYWNrZXRUYXggPSB0YXhhYmxlQW1vdW50ICogYnJhY2tldC5yYXRlO1xuICAgICAgICAgICAgICAgIHRheCArPSBicmFja2V0VGF4O1xuXG4gICAgICAgICAgICAgICAgYnJlYWtkb3ducy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbTogYCR7YnJhY2tldC5mcm9tfWAsXG4gICAgICAgICAgICAgICAgICAgIHRvOiBgJHticmFja2V0LnRvID8/ICdBYm92ZSd9YCxcbiAgICAgICAgICAgICAgICAgICAgcmF0ZTogYnJhY2tldC5yYXRlLFxuICAgICAgICAgICAgICAgICAgICBhbW91bnQ6IGJyYWNrZXRUYXgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyB0b3RhbDogdGF4LCBicmVha2Rvd25zIH07XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29ycG9yYXRlL2F1c3RyYWxpYS9kb21haW4vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrZG93biB9IGZyb20gXCIuLi8uLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBGbGF0VGF4UnVsZSB7XG4gICAgdHlwZTogJ2ZsYXQnO1xuICAgIHJhdGU6IG51bWJlcjtcbiAgICBjb25kaXRpb25zPzoge1xuICAgICAgICBtYXhUdXJub3Zlcj86IG51bWJlcjtcbiAgICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzaXZlVGF4QnJhY2tldCB7XG4gICAgZnJvbTogbnVtYmVyO1xuICAgIHRvOiBudW1iZXIgfCBudWxsO1xuICAgIHJhdGU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9ncmVzc2l2ZVRheFJ1bGUge1xuICAgIHR5cGU6ICdwcm9ncmVzc2l2ZSc7XG4gICAgYnJhY2tldHM6IFByb2dyZXNzaXZlVGF4QnJhY2tldFtdO1xuICAgIGNvbmRpdGlvbnM/OiB7XG4gICAgICAgIG1heFR1cm5vdmVyPzogbnVtYmVyO1xuICAgIH07XG59XG5cbmV4cG9ydCB0eXBlIFRheFJ1bGUgPSBGbGF0VGF4UnVsZSB8IFByb2dyZXNzaXZlVGF4UnVsZTtcblxuZXhwb3J0IGludGVyZmFjZSBSdWxlcyB7XG4gICAgcmVnaW1lczogUmVjb3JkPHN0cmluZywgVGF4UnVsZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXQge1xuICAgIHRheGFibGVJbmNvbWU6IG51bWJlcjtcbiAgICBhbm51YWxUdXJub3ZlcjogbnVtYmVyO1xuICAgIGlzU21hbGxCdXNpbmVzczogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXN1bHQge1xuICAgIGNvcnBvcmF0ZVRheDogbnVtYmVyO1xuICAgIGVmZmVjdGl2ZVRheFJhdGU6IG51bWJlcjtcbiAgICBicmVha2Rvd25zOiBCcmVha2Rvd25bXTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVzdHJhbGlhSW5jb21lVGF4U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbmNvbWUtdGF4L2F1c3RyYWxpYS9BdXN0cmFsaWFJbmNvbWVUYXhTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wdXRlZEluY29tZVRheFZhbHVlcywgSW5jb21lVGF4UnVsZXMgfSBmcm9tIFwiLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdXN0cmFsaWFJbmNvbWVUYXhTZXJ2aWNlIHtcbiAgICBjYWxjdWxhdGVOZXRJbmNvbWUoXG4gICAgICAgIGluY29tZTogbnVtYmVyLFxuICAgICAgICBydWxlczogSW5jb21lVGF4UnVsZXMsXG4gICAgICAgIGlzUmVzaWRlbnQ/OiBib29sZWFuLFxuICAgICk6IENvbXB1dGVkSW5jb21lVGF4VmFsdWVzO1xufVxuIl19
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AustraliaIncomeTaxServiceImpl = void 0;
|
|
4
|
+
class AustraliaIncomeTaxServiceImpl {
|
|
5
|
+
constructor(income, rules, isResident = true) {
|
|
6
|
+
this._income = income;
|
|
7
|
+
this._rules = rules;
|
|
8
|
+
this._isResident = isResident;
|
|
9
|
+
}
|
|
10
|
+
calculateNetIncome() {
|
|
11
|
+
const { grossTax, bracketBreakdown } = this.computeTaxBracketBreakdown(this._income, this._rules);
|
|
12
|
+
const lito = this.computeLowIncomeTaxOffset(this._income, this._rules.lowIncomeTaxOffset);
|
|
13
|
+
const incomeTax = Math.max(0, grossTax - lito);
|
|
14
|
+
const medicareLevy = this.computeMedicareLevy(this._income, this._rules.medicareLevy);
|
|
15
|
+
const totalDeductions = incomeTax + medicareLevy;
|
|
16
|
+
const netIncome = this._income - totalDeductions;
|
|
17
|
+
return {
|
|
18
|
+
grossIncome: this._income,
|
|
19
|
+
incomeTax: this.round(incomeTax),
|
|
20
|
+
medicareLevy: this.round(medicareLevy),
|
|
21
|
+
lowIncomeTaxOffset: this.round(lito),
|
|
22
|
+
totalDeductions: this.round(totalDeductions),
|
|
23
|
+
netIncome: this.round(netIncome),
|
|
24
|
+
effectiveTaxRate: this._income > 0 ? this.round(incomeTax / this._income, 4) : 0,
|
|
25
|
+
taxBracketBreakdown: bracketBreakdown,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
computeTaxBracketBreakdown(income, rules) {
|
|
29
|
+
let tax = 0;
|
|
30
|
+
const bracketBreakdown = [];
|
|
31
|
+
const applicableBrackets = this._isResident ? rules.taxBrackets : rules.nonResidentTaxBrackets;
|
|
32
|
+
for (let index = 0; index < applicableBrackets.length; index++) {
|
|
33
|
+
const bracket = applicableBrackets[index];
|
|
34
|
+
if (income <= bracket.from) {
|
|
35
|
+
bracketBreakdown.push({
|
|
36
|
+
bracketIndex: index,
|
|
37
|
+
bracketName: `Bracket ${index + 1}`,
|
|
38
|
+
from: bracket.from,
|
|
39
|
+
to: bracket.to ?? null,
|
|
40
|
+
rate: bracket.rate,
|
|
41
|
+
amountInBracket: 0,
|
|
42
|
+
taxOnAmount: 0,
|
|
43
|
+
});
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
const upper = bracket.to ?? income;
|
|
47
|
+
const taxableAmount = Math.min(upper, income) - bracket.from;
|
|
48
|
+
if (taxableAmount > 0) {
|
|
49
|
+
const taxOnAmount = taxableAmount * bracket.rate;
|
|
50
|
+
tax += taxOnAmount;
|
|
51
|
+
bracketBreakdown.push({
|
|
52
|
+
bracketIndex: index,
|
|
53
|
+
bracketName: `Bracket ${index + 1}`,
|
|
54
|
+
from: bracket.from,
|
|
55
|
+
to: bracket.to ?? null,
|
|
56
|
+
rate: bracket.rate,
|
|
57
|
+
amountInBracket: taxableAmount,
|
|
58
|
+
taxOnAmount,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
bracketBreakdown.push({
|
|
63
|
+
bracketIndex: index,
|
|
64
|
+
bracketName: `Bracket ${index + 1}`,
|
|
65
|
+
from: bracket.from,
|
|
66
|
+
to: bracket.to ?? null,
|
|
67
|
+
rate: bracket.rate,
|
|
68
|
+
amountInBracket: 0,
|
|
69
|
+
taxOnAmount: 0,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return { grossTax: tax, bracketBreakdown };
|
|
74
|
+
}
|
|
75
|
+
computeLowIncomeTaxOffset(income, lito) {
|
|
76
|
+
if (income <= lito.phaseOutStart) {
|
|
77
|
+
return lito.maxOffset;
|
|
78
|
+
}
|
|
79
|
+
if (income >= lito.phaseOutEnd) {
|
|
80
|
+
return 0;
|
|
81
|
+
}
|
|
82
|
+
const reduction = (income - lito.phaseOutStart) * lito.phaseOutRate;
|
|
83
|
+
return Math.max(0, lito.maxOffset - reduction);
|
|
84
|
+
}
|
|
85
|
+
computeMedicareLevy(income, medicare) {
|
|
86
|
+
if (income <= medicare.shadingInThreshold) {
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
if (income <= medicare.fullLevyThreshold) {
|
|
90
|
+
return (income - medicare.shadingInThreshold) * medicare.reductionRate;
|
|
91
|
+
}
|
|
92
|
+
return income * medicare.rate;
|
|
93
|
+
}
|
|
94
|
+
round(value, decimals = 2) {
|
|
95
|
+
return Number(value.toFixed(decimals));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.AustraliaIncomeTaxServiceImpl = AustraliaIncomeTaxServiceImpl;
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVzdHJhbGlhSW5jb21lVGF4U2VydmljZUltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5jb21lLXRheC9hdXN0cmFsaWEvQXVzdHJhbGlhSW5jb21lVGF4U2VydmljZUltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBU0EsTUFBYSw2QkFBNkI7SUFLdEMsWUFBWSxNQUFjLEVBQUUsS0FBcUIsRUFBRSxhQUFzQixJQUFJO1FBQ3pFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO0lBQ2xDLENBQUM7SUFFTSxrQkFBa0I7UUFDckIsTUFBTSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FDbEUsSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsTUFBTSxDQUNkLENBQUM7UUFFRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQ3ZDLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FDakMsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUMvQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQ3pDLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQzNCLENBQUM7UUFFRixNQUFNLGVBQWUsR0FBRyxTQUFTLEdBQUcsWUFBWSxDQUFDO1FBQ2pELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsZUFBZSxDQUFDO1FBRWpELE9BQU87WUFDSCxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDekIsU0FBUyxF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QUM7Q0FDSjtBQTlIRCxzRUE4SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmFja2V0QWxsb2NhdGlvbiB9IGZyb20gXCIuLi9kb21haW4vdHlwZXNcIjtcbmltcG9ydCB7IEF1c3RyYWxpYUluY29tZVRheFNlcnZpY2UgfSBmcm9tIFwiLi9BdXN0cmFsaWFJbmNvbWVUYXhTZXJ2aWNlXCI7XG5pbXBvcnQge1xuICAgIENvbXB1dGVkSW5jb21lVGF4VmFsdWVzLFxuICAgIEluY29tZVRheFJ1bGVzLFxuICAgIExvd0luY29tZVRheE9mZnNldCxcbiAgICBNZWRpY2FyZUxldnlSdWxlcyxcbn0gZnJvbSBcIi4vZG9tYWluL3R5cGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBBdXN0cmFsaWFJbmNvbWVUYXhTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIEF1c3RyYWxpYUluY29tZVRheFNlcnZpY2Uge1xuICAgIHByaXZhdGUgX2luY29tZTogbnVtYmVyO1xuICAgIHByaXZhdGUgX3J1bGVzOiBJbmNvbWVUYXhSdWxlcztcbiAgICBwcml2YXRlIF9pc1Jlc2lkZW50OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoaW5jb21lOiBudW1iZXIsIHJ1bGVzOiBJbmNvbWVUYXhSdWxlcywgaXNSZXNpZGVudDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5faW5jb21lID0gaW5jb21lO1xuICAgICAgICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuICAgICAgICB0aGlzLl9pc1Jlc2lkZW50ID0gaXNSZXNpZGVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FsY3VsYXRlTmV0SW5jb21lKCk6IENvbXB1dGVkSW5jb21lVGF4VmFsdWVzIHtcbiAgICAgICAgY29uc3QgeyBncm9zc1RheCwgYnJhY2tldEJyZWFrZG93biB9ID0gdGhpcy5jb21wdXRlVGF4QnJhY2tldEJyZWFrZG93bihcbiAgICAgICAgICAgIHRoaXMuX2luY29tZSxcbiAgICAgICAgICAgIHRoaXMuX3J1bGVzLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGxpdG8gPSB0aGlzLmNvbXB1dGVMb3dJbmNvbWVUYXhPZmZzZXQoXG4gICAgICAgICAgICB0aGlzLl9pbmNvbWUsXG4gICAgICAgICAgICB0aGlzLl9ydWxlcy5sb3dJbmNvbWVUYXhPZmZzZXQsXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaW5jb21lVGF4ID0gTWF0aC5tYXgoMCwgZ3Jvc3NUYXggLSBsaXRvKTtcbiAgICAgICAgY29uc3QgbWVkaWNhcmVMZXZ5ID0gdGhpcy5jb21wdXRlTWVkaWNhcmVMZXZ5KFxuICAgICAgICAgICAgdGhpcy5faW5jb21lLFxuICAgICAgICAgICAgdGhpcy5fcnVsZXMubWVkaWNhcmVMZXZ5LFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHRvdGFsRGVkdWN0aW9ucyA9IGluY29tZVRheCArIG1lZGljYXJlTGV2eTtcbiAgICAgICAgY29uc3QgbmV0SW5jb21lID0gdGhpcy5faW5jb21lIC0gdG90YWxEZWR1Y3Rpb25zO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBncm9zc0luY29tZTogdGhpcy5faW5jb21lLFxuICAgICAgICAgICAgaW5jb21lVGF4OiB0aGlzLnJvdW5kKGluY29tZVRheCksXG4gICAgICAgICAgICBtZWRpY2FyZUxldnk6IHRoaXMucm91bmQobWVkaWNhcmVMZXZ5KSxcbiAgICAgICAgICAgIGxvd0luY29tZVRheE9mZnNldDogdGhpcy5yb3VuZChsaXRvKSxcbiAgICAgICAgICAgIHRvdGFsRGVkdWN0aW9uczogdGhpcy5yb3VuZCh0b3RhbERlZHVjdGlvbnMpLFxuICAgICAgICAgICAgbmV0SW5jb21lOiB0aGlzLnJvdW5kKG5ldEluY29tZSksXG4gICAgICAgICAgICBlZmZlY3RpdmVUYXhSYXRlOiB0aGlzLl9pbmNvbWUgPiAwID8gdGhpcy5yb3VuZChpbmNvbWVUYXggLyB0aGlzLl9pbmNvbWUsIDQpIDogMCxcbiAgICAgICAgICAgIHRheEJyYWNrZXRCcmVha2Rvd246IGJyYWNrZXRCcmVha2Rvd24sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wdXRlVGF4QnJhY2tldEJyZWFrZG93bihcbiAgICAgICAgaW5jb21lOiBudW1iZXIsXG4gICAgICAgIHJ1bGVzOiBJbmNvbWVUYXhSdWxlcyxcbiAgICApOiB7IGdyb3NzVGF4OiBudW1iZXI7IGJyYWNrZXRCcmVha2Rvd246IEJyYWNrZXRBbGxvY2F0aW9uW10gfSB7XG4gICAgICAgIGxldCB0YXggPSAwO1xuICAgICAgICBjb25zdCBicmFja2V0QnJlYWtkb3duOiBCcmFja2V0QWxsb2NhdGlvbltdID0gW107XG5cbiAgICAgICAgY29uc3QgYXBwbGljYWJsZUJyYWNrZXRzID0gdGhpcy5faXNSZXNpZGVudCA/IHJ1bGVzLnRheEJyYWNrZXRzIDogcnVsZXMubm9uUmVzaWRlbnRUYXhCcmFja2V0cztcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFwcGxpY2FibGVCcmFja2V0cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJyYWNrZXQgPSBhcHBsaWNhYmxlQnJhY2tldHNbaW5kZXhdO1xuXG4gICAgICAgICAgICBpZiAoaW5jb21lIDw9IGJyYWNrZXQuZnJvbSkge1xuICAgICAgICAgICAgICAgIGJyYWNrZXRCcmVha2Rvd24ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGJyYWNrZXRJbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGJyYWNrZXROYW1lOiBgQnJhY2tldCAke2luZGV4ICsgMX1gLFxuICAgICAgICAgICAgICAgICAgICBmcm9tOiBicmFja2V0LmZyb20sXG4gICAgICAgICAgICAgICAgICAgIHRvOiBicmFja2V0LnRvID8/IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHJhdGU6IGJyYWNrZXQucmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50SW5CcmFja2V0OiAwLFxuICAgICAgICAgICAgICAgICAgICB0YXhPbkFtb3VudDogMCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdXBwZXIgPSBicmFja2V0LnRvID8/IGluY29tZTtcbiAgICAgICAgICAgIGNvbnN0IHRheGFibGVBbW91bnQgPSBNYXRoLm1pbih1cHBlciwgaW5jb21lKSAtIGJyYWNrZXQuZnJvbTtcblxuICAgICAgICAgICAgaWYgKHRheGFibGVBbW91bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGF4T25BbW91bnQgPSB0YXhhYmxlQW1vdW50ICogYnJhY2tldC5yYXRlO1xuICAgICAgICAgICAgICAgIHRheCArPSB0YXhPbkFtb3VudDtcbiAgICAgICAgICAgICAgICBicmFja2V0QnJlYWtkb3duLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBicmFja2V0SW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICBicmFja2V0TmFtZTogYEJyYWNrZXQgJHtpbmRleCArIDF9YCxcbiAgICAgICAgICAgICAgICAgICAgZnJvbTogYnJhY2tldC5mcm9tLFxuICAgICAgICAgICAgICAgICAgICB0bzogYnJhY2tldC50byA/PyBudWxsLFxuICAgICAgICAgICAgICAgICAgICByYXRlOiBicmFja2V0LnJhdGUsXG4gICAgICAgICAgICAgICAgICAgIGFtb3VudEluQnJhY2tldDogdGF4YWJsZUFtb3VudCxcbiAgICAgICAgICAgICAgICAgICAgdGF4T25BbW91bnQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyYWNrZXRCcmVha2Rvd24ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGJyYWNrZXRJbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGJyYWNrZXROYW1lOiBgQnJhY2tldCAke2luZGV4ICsgMX1gLFxuICAgICAgICAgICAgICAgICAgICBmcm9tOiBicmFja2V0LmZyb20sXG4gICAgICAgICAgICAgICAgICAgIHRvOiBicmFja2V0LnRvID8/IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHJhdGU6IGJyYWNrZXQucmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50SW5CcmFja2V0OiAwLFxuICAgICAgICAgICAgICAgICAgICB0YXhPbkFtb3VudDogMCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGdyb3NzVGF4OiB0YXgsIGJyYWNrZXRCcmVha2Rvd24gfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXB1dGVMb3dJbmNvbWVUYXhPZmZzZXQoaW5jb21lOiBudW1iZXIsIGxpdG86IExvd0luY29tZVRheE9mZnNldCk6IG51bWJlciB7XG4gICAgICAgIGlmIChpbmNvbWUgPD0gbGl0by5waGFzZU91dFN0YXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4gbGl0by5tYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5jb21lID49IGxpdG8ucGhhc2VPdXRFbmQpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVkdWN0aW9uID0gKGluY29tZSAtIGxpdG8ucGhhc2VPdXRTdGFydCkgKiBsaXRvLnBoYXNlT3V0UmF0ZTtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIGxpdG8ubWF4T2Zmc2V0IC0gcmVkdWN0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXB1dGVNZWRpY2FyZUxldnkoaW5jb21lOiBudW1iZXIsIG1lZGljYXJlOiBNZWRpY2FyZUxldnlSdWxlcyk6IG51bWJlciB7XG4gICAgICAgIGlmIChpbmNvbWUgPD0gbWVkaWNhcmUuc2hhZGluZ0luVGhyZXNob2xkKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmNvbWUgPD0gbWVkaWNhcmUuZnVsbExldnlUaHJlc2hvbGQpIHtcbiAgICAgICAgICAgIHJldHVybiAoaW5jb21lIC0gbWVkaWNhcmUuc2hhZGluZ0luVGhyZXNob2xkKSAqIG1lZGljYXJlLnJlZHVjdGlvblJhdGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5jb21lICogbWVkaWNhcmUucmF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJvdW5kKHZhbHVlOiBudW1iZXIsIGRlY2ltYWxzID0gMik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUudG9GaXhlZChkZWNpbWFscykpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5jb21lLXRheC9hdXN0cmFsaWEvZG9tYWluL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmFja2V0QWxsb2NhdGlvbiwgVGF4QnJhY2tldCB9IGZyb20gXCIuLi8uLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJbmNvbWVUYXhSdWxlcyB7XG4gICAgdGF4QnJhY2tldHM6IFRheEJyYWNrZXRbXTtcbiAgICBub25SZXNpZGVudFRheEJyYWNrZXRzOiBUYXhCcmFja2V0W107XG4gICAgbWVkaWNhcmVMZXZ5OiBNZWRpY2FyZUxldnlSdWxlcztcbiAgICBsb3dJbmNvbWVUYXhPZmZzZXQ6IExvd0luY29tZVRheE9mZnNldDtcbiAgICBsb3dBbmRNaWRkbGVJbmNvbWVUYXhPZmZzZXQ/OiBMb3dBbmRNaWRkbGVJbmNvbWVUYXhPZmZzZXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWNhcmVMZXZ5UnVsZXMge1xuICAgIHJhdGU6IG51bWJlcjtcbiAgICBzaGFkaW5nSW5UaHJlc2hvbGQ6IG51bWJlcjtcbiAgICBmdWxsTGV2eVRocmVzaG9sZDogbnVtYmVyO1xuICAgIHJlZHVjdGlvblJhdGU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb3dJbmNvbWVUYXhPZmZzZXQge1xuICAgIG1heE9mZnNldDogbnVtYmVyO1xuICAgIHBoYXNlT3V0U3RhcnQ6IG51bWJlcjtcbiAgICBwaGFzZU91dEVuZDogbnVtYmVyO1xuICAgIHBoYXNlT3V0UmF0ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvd0FuZE1pZGRsZUluY29tZVRheE9mZnNldCB7XG4gICAgbWF4T2Zmc2V0OiBudW1iZXI7XG4gICAgcGhhc2VPdXRTdGFydDogbnVtYmVyO1xuICAgIHBoYXNlT3V0RW5kOiBudW1iZXI7XG4gICAgcGhhc2VPdXRSYXRlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZWRJbmNvbWVUYXhWYWx1ZXMge1xuICAgIGdyb3NzSW5jb21lOiBudW1iZXI7XG4gICAgaW5jb21lVGF4OiBudW1iZXI7XG4gICAgbWVkaWNhcmVMZXZ5OiBudW1iZXI7XG4gICAgbG93SW5jb21lVGF4T2Zmc2V0OiBudW1iZXI7XG4gICAgdG90YWxEZWR1Y3Rpb25zOiBudW1iZXI7XG4gICAgbmV0SW5jb21lOiBudW1iZXI7XG4gICAgZWZmZWN0aXZlVGF4UmF0ZTogbnVtYmVyO1xuICAgIHRheEJyYWNrZXRCcmVha2Rvd246IEJyYWNrZXRBbGxvY2F0aW9uW107XG59XG4iXX0=
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.SouthAfricaCorporateTaxService = exports.SouthAfricaMortgageService = exports.SouthAfricaIncomeTaxService = exports.FranceCorporateTaxService = exports.FranceMortgageService = exports.FranceIncomeTaxService = exports.CanadaCorporateTaxService = exports.CanadaMortgageService = exports.CanadaIncomeTaxService = exports.CalculatorType = void 0;
|
|
17
|
+
exports.AustraliaCorporateTaxService = exports.AustraliaMortgageService = exports.AustraliaIncomeTaxService = exports.SouthAfricaCorporateTaxService = exports.SouthAfricaMortgageService = exports.SouthAfricaIncomeTaxService = exports.FranceCorporateTaxService = exports.FranceMortgageService = exports.FranceIncomeTaxService = exports.CanadaCorporateTaxService = exports.CanadaMortgageService = exports.CanadaIncomeTaxService = exports.CalculatorType = void 0;
|
|
18
18
|
var types_1 = require("./shared/domain/types");
|
|
19
19
|
Object.defineProperty(exports, "CalculatorType", { enumerable: true, get: function () { return types_1.CalculatorType; } });
|
|
20
20
|
// Canada
|
|
@@ -38,5 +38,12 @@ var SouthAfricaMortgageServiceImpl_1 = require("./mortgage/south-africa/SouthAfr
|
|
|
38
38
|
Object.defineProperty(exports, "SouthAfricaMortgageService", { enumerable: true, get: function () { return SouthAfricaMortgageServiceImpl_1.SouthAfricaMortgageServiceImpl; } });
|
|
39
39
|
var SouthAfricaCorporateTaxServiceImpl_1 = require("./corporate/south-africa/SouthAfricaCorporateTaxServiceImpl");
|
|
40
40
|
Object.defineProperty(exports, "SouthAfricaCorporateTaxService", { enumerable: true, get: function () { return SouthAfricaCorporateTaxServiceImpl_1.SouthAfricaCorporateTaxServiceImpl; } });
|
|
41
|
+
// Australia
|
|
42
|
+
var AustraliaIncomeTaxServiceImpl_1 = require("./income-tax/australia/AustraliaIncomeTaxServiceImpl");
|
|
43
|
+
Object.defineProperty(exports, "AustraliaIncomeTaxService", { enumerable: true, get: function () { return AustraliaIncomeTaxServiceImpl_1.AustraliaIncomeTaxServiceImpl; } });
|
|
44
|
+
var AustraliaMortgageServiceImpl_1 = require("./mortgage/australia/AustraliaMortgageServiceImpl");
|
|
45
|
+
Object.defineProperty(exports, "AustraliaMortgageService", { enumerable: true, get: function () { return AustraliaMortgageServiceImpl_1.AustraliaMortgageServiceImpl; } });
|
|
46
|
+
var AustraliaCorporateTaxServiceImpl_1 = require("./corporate/australia/AustraliaCorporateTaxServiceImpl");
|
|
47
|
+
Object.defineProperty(exports, "AustraliaCorporateTaxService", { enumerable: true, get: function () { return AustraliaCorporateTaxServiceImpl_1.AustraliaCorporateTaxServiceImpl; } });
|
|
41
48
|
__exportStar(require("./income-tax/domain/types"), exports);
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBdUQ7QUFBOUMsdUdBQUEsY0FBYyxPQUFBO0FBRXZCLFNBQVM7QUFDVCw2RkFBc0g7QUFBN0csb0lBQUEsMEJBQTBCLE9BQTBCO0FBQzdELHlGQUFpSDtBQUF4RyxrSUFBQSx5QkFBeUIsT0FBeUI7QUFXM0Qsa0dBQThIO0FBQXJILDBJQUFBLDZCQUE2QixPQUE2QjtBQU9uRSxTQUFTO0FBQ1QsNkZBQXNIO0FBQTdHLG9JQUFBLDBCQUEwQixPQUEwQjtBQUM3RCx5RkFBaUg7QUFBeEcsa0lBQUEseUJBQXlCLE9BQXlCO0FBVzNELGtHQUE4SDtBQUFySCwwSUFBQSw2QkFBNkIsT0FBNkI7QUFPbkUsZUFBZTtBQUNmLDZHQUEySTtBQUFsSSw4SUFBQSwrQkFBK0IsT0FBK0I7QUFDdkUseUdBQXNJO0FBQTdILDRJQUFBLDhCQUE4QixPQUE4QjtBQVdyRSxrSEFBbUo7QUFBMUksb0pBQUEsa0NBQWtDLE9BQWtDO0FBTzdFLFlBQVk7QUFDWixzR0FBa0k7QUFBekgsMElBQUEsNkJBQTZCLE9BQTZCO0FBTW5FLGtHQUE2SDtBQUFwSCx3SUFBQSw0QkFBNEIsT0FBNEI7QUFPakUsMkdBQTBJO0FBQWpJLGdKQUFBLGdDQUFnQyxPQUFnQztBQVF6RSw0REFBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBDYWxjdWxhdG9yVHlwZSB9IGZyb20gJy4vc2hhcmVkL2RvbWFpbi90eXBlcyc7XG5cbi8vIENhbmFkYVxuZXhwb3J0IHsgQ2FuYWRhSW5jb21lVGF4U2VydmljZUltcGwgYXMgQ2FuYWRhSW5jb21lVGF4U2VydmljZSB9IGZyb20gJy4vaW5jb21lLXRheC9jYW5hZGEvQ2FuYWRhSW5jb21lVGF4U2VydmljZUltcGwnO1xuZXhwb3J0IHsgQ2FuYWRhTW9ydGdhZ2VTZXJ2aWNlSW1wbCBhcyBDYW5hZGFNb3J0Z2FnZVNlcnZpY2UgfSBmcm9tICcuL21vcnRnYWdlL2NhbmFkYS9DYW5hZGFNb3J0Z2FnZVNlcnZpY2VJbXBsJztcbmV4cG9ydCB7XG4gICAgQ29tcHV0ZWRJbmNvbWVUYXhWYWx1ZXMgYXMgQ2FuYWRhQ29tcHV0ZWRJbmNvbWVUYXhWYWx1ZXMsXG4gICAgSW5jb21lVGF4UnVsZXMgYXMgQ2FuYWRhSW5jb21lVGF4UnVsZXMsXG59IGZyb20gJy4vaW5jb21lLXRheC9jYW5hZGEvZG9tYWluL3R5cGVzJztcbmV4cG9ydCB7XG4gICAgTW9ydGdhZ2VSdWxlcyBhcyBDYW5hZGFNb3J0Z2FnZVJ1bGVzLFxuICAgIE1vcnRnYWdlQ2FsY3VsYXRpb25JbnB1dCBhcyBDYW5hZGFNb3J0Z2FnZUNhbGN1bGF0aW9uSW5wdXQsXG4gICAgTW9ydGdhZ2VDYWxjdWxhdGlvblJlc3VsdCBhcyBDYW5hZGFNb3J0Z2FnZUNhbGN1bGF0aW9uUmVzdWx0LFxufSBmcm9tICcuL21vcnRnYWdlL2NhbmFkYS9kb21haW4vdHlwZXMnO1xuXG5leHBvcnQgeyBDYW5hZGFDb3Jwb3JhdGVUYXhTZXJ2aWNlSW1wbCBhcyBDYW5hZGFDb3Jwb3JhdGVUYXhTZXJ2aWNlIH0gZnJvbSAnLi9jb3Jwb3JhdGUvY2FuYWRhL0NhbmFkYUNvcnBvcmF0ZVRheFNlcnZpY2VJbXBsJztcbmV4cG9ydCB7XG4gICAgSW5wdXQgYXMgQ2FuYWRhQ29ycG9yYXRlVGF4SW5wdXQsXG4gICAgUnVsZXMgYXMgQ2FuYWRhQ29ycG9yYXRlVGF4UnVsZXMsXG4gICAgUmVzdWx0IGFzIENhbmFkYUNvcnBvcmF0ZVRheFJlc3VsdCxcbn0gZnJvbSAnLi9jb3Jwb3JhdGUvY2FuYWRhL2RvbWFpbi90eXBlcyc7XG5cbi8vIEZyYW5jZVxuZXhwb3J0IHsgRnJhbmNlSW5jb21lVGF4U2VydmljZUltcGwgYXMgRnJhbmNlSW5jb21lVGF4U2VydmljZSB9IGZyb20gJy4vaW5jb21lLXRheC9mcmFuY2UvRnJhbmNlSW5jb21lVGF4U2VydmljZUltcGwnO1xuZXhwb3J0IHsgRnJhbmNlTW9ydGdhZ2VTZXJ2aWNlSW1wbCBhcyBGcmFuY2VNb3J0Z2FnZVNlcnZpY2UgfSBmcm9tICcuL21vcnRnYWdlL2ZyYW5jZS9GcmFuY2VNb3J0Z2FnZVNlcnZpY2VJbXBsJztcbmV4cG9ydCB7IFxuICAgIENvbXB1dGVkSW5jb21lVGF4VmFsdWVzIGFzIEZyYW5jZUNvbXB1dGVkSW5jb21lVGF4VmFsdWVzLFxuICAgIEluY29tZVRheFJ1bGVzIGFzIEZyYW5jZUluY29tZVRheFJ1bGVzLFxufSBmcm9tICcuL2luY29tZS10YXgvZnJhbmNlL2RvbWFpbi90eXBlcyc7XG5leHBvcnQge1xuICAgIE1vcnRnYWdlUnVsZXMgYXMgRnJhbmNlTW9ydGdhZ2VSdWxlcyxcbiAgICBNb3J0Z2FnZUlucHV0IGFzIEZyYW5jZU1vcnRnYWdlSW5wdXQsXG4gICAgTW9ydGdhZ2VPdXRwdXQgYXMgRnJhbmNlTW9ydGdhZ2VDYWxjdWxhdGlvblJlc3VsdCxcbn0gZnJvbSAnLi9tb3J0Z2FnZS9mcmFuY2UvZG9tYWluL3R5cGVzJztcblxuZXhwb3J0IHsgRnJhbmNlQ29ycG9yYXRlVGF4U2VydmljZUltcGwgYXMgRnJhbmNlQ29ycG9yYXRlVGF4U2VydmljZSB9IGZyb20gJy4vY29ycG9yYXRlL2ZyYW5jZS9GcmFuY2VDb3Jwb3JhdGVUYXhTZXJ2aWNlSW1wbCc7XG5leHBvcnQge1xuICAgIElucHV0IGFzIEZyYW5jZUNvcnBvcmF0ZVRheElucHV0LFxuICAgIFJ1bGVzIGFzIEZyYW5jZUNvcnBvcmF0ZVRheFJ1bGVzLFxuICAgIFJlc3VsdCBhcyBGcmFuY2VDb3Jwb3JhdGVUYXhSZXN1bHQsXG59IGZyb20gJy4vY29ycG9yYXRlL2ZyYW5jZS9kb21haW4vdHlwZXMnO1xuXG4vLyBTb3V0aCBBZnJpY2FcbmV4cG9ydCB7IFNvdXRoQWZyaWNhSW5jb21lVGF4U2VydmljZUltcGwgYXMgU291dGhBZnJpY2FJbmNvbWVUYXhTZXJ2aWNlIH0gZnJvbSAnLi9pbmNvbWUtdGF4L3NvdXRoLWFmcmljYS9Tb3V0aEFmcmljYUluY29tZVRheFNlcnZpY2VJbXBsJztcbmV4cG9ydCB7IFNvdXRoQWZyaWNhTW9ydGdhZ2VTZXJ2aWNlSW1wbCBhcyBTb3V0aEFmcmljYU1vcnRnYWdlU2VydmljZSB9IGZyb20gJy4vbW9ydGdhZ2Uvc291dGgtYWZyaWNhL1NvdXRoQWZyaWNhTW9ydGdhZ2VTZXJ2aWNlSW1wbCc7XG5leHBvcnQge1xuICAgIENvbXB1dGVkSW5jb21lVGF4VmFsdWVzIGFzIFNvdXRoQWZyaWNhQ29tcHV0ZWRJbmNvbWVUYXhWYWx1ZXMsXG4gICAgSW5jb21lVGF4UnVsZXMgYXMgU291dGhBZnJpY2FJbmNvbWVUYXhSdWxlcyxcbn0gZnJvbSAnLi9pbmNvbWUtdGF4L3NvdXRoLWFmcmljYS9kb21haW4vdHlwZXMnO1xuZXhwb3J0IHtcbiAgICBNb3J0Z2FnZVJ1bGVzIGFzIFNvdXRoQWZyaWNhTW9ydGdhZ2VSdWxlcyxcbiAgICBNb3J0Z2FnZUlucHV0IGFzIFNvdXRoQWZyaWNhTW9ydGdhZ2VJbnB1dCxcbiAgICBNb3J0Z2FnZU91dHB1dCBhcyBTb3V0aEFmcmljYU1vcnRnYWdlT3V0cHV0LFxufSBmcm9tICcuL21vcnRnYWdlL3NvdXRoLWFmcmljYS9kb21haW4vdHlwZXMnO1xuXG5leHBvcnQgeyBTb3V0aEFmcmljYUNvcnBvcmF0ZVRheFNlcnZpY2VJbXBsIGFzIFNvdXRoQWZyaWNhQ29ycG9yYXRlVGF4U2VydmljZSB9IGZyb20gJy4vY29ycG9yYXRlL3NvdXRoLWFmcmljYS9Tb3V0aEFmcmljYUNvcnBvcmF0ZVRheFNlcnZpY2VJbXBsJztcbmV4cG9ydCB7XG4gICAgUnVsZXMgYXMgU291dGhBZnJpY2FDb3Jwb3JhdGVUYXhSdWxlcyxcbiAgICBJbnB1dCBhcyBTb3V0aEFmcmljYUNvcnBvcmF0ZVRheElucHV0LFxuICAgIFJlc3VsdCBhcyBTb3V0aEFmcmljYUNvcnBvcmF0ZVRheFJlc3VsdCxcbn0gZnJvbSAnLi9jb3Jwb3JhdGUvc291dGgtYWZyaWNhL2RvbWFpbi90eXBlcyc7XG5cbi8vIEF1c3RyYWxpYVxuZXhwb3J0IHsgQXVzdHJhbGlhSW5jb21lVGF4U2VydmljZUltcGwgYXMgQXVzdHJhbGlhSW5jb21lVGF4U2VydmljZSB9IGZyb20gJy4vaW5jb21lLXRheC9hdXN0cmFsaWEvQXVzdHJhbGlhSW5jb21lVGF4U2VydmljZUltcGwnO1xuZXhwb3J0IHtcbiAgICBDb21wdXRlZEluY29tZVRheFZhbHVlcyBhcyBBdXN0cmFsaWFDb21wdXRlZEluY29tZVRheFZhbHVlcyxcbiAgICBJbmNvbWVUYXhSdWxlcyBhcyBBdXN0cmFsaWFJbmNvbWVUYXhSdWxlcyxcbn0gZnJvbSAnLi9pbmNvbWUtdGF4L2F1c3RyYWxpYS9kb21haW4vdHlwZXMnO1xuXG5leHBvcnQgeyBBdXN0cmFsaWFNb3J0Z2FnZVNlcnZpY2VJbXBsIGFzIEF1c3RyYWxpYU1vcnRnYWdlU2VydmljZSB9IGZyb20gJy4vbW9ydGdhZ2UvYXVzdHJhbGlhL0F1c3RyYWxpYU1vcnRnYWdlU2VydmljZUltcGwnO1xuZXhwb3J0IHtcbiAgICBNb3J0Z2FnZVJ1bGVzIGFzIEF1c3RyYWxpYU1vcnRnYWdlUnVsZXMsXG4gICAgTW9ydGdhZ2VJbnB1dCBhcyBBdXN0cmFsaWFNb3J0Z2FnZUlucHV0LFxuICAgIE1vcnRnYWdlT3V0cHV0IGFzIEF1c3RyYWxpYU1vcnRnYWdlT3V0cHV0LFxufSBmcm9tICcuL21vcnRnYWdlL2F1c3RyYWxpYS9kb21haW4vdHlwZXMnO1xuXG5leHBvcnQgeyBBdXN0cmFsaWFDb3Jwb3JhdGVUYXhTZXJ2aWNlSW1wbCBhcyBBdXN0cmFsaWFDb3Jwb3JhdGVUYXhTZXJ2aWNlIH0gZnJvbSAnLi9jb3Jwb3JhdGUvYXVzdHJhbGlhL0F1c3RyYWxpYUNvcnBvcmF0ZVRheFNlcnZpY2VJbXBsJztcbmV4cG9ydCB7XG4gICAgSW5wdXQgYXMgQXVzdHJhbGlhQ29ycG9yYXRlVGF4SW5wdXQsXG4gICAgUnVsZXMgYXMgQXVzdHJhbGlhQ29ycG9yYXRlVGF4UnVsZXMsXG4gICAgUmVzdWx0IGFzIEF1c3RyYWxpYUNvcnBvcmF0ZVRheFJlc3VsdCxcbn0gZnJvbSAnLi9jb3Jwb3JhdGUvYXVzdHJhbGlhL2RvbWFpbi90eXBlcyc7XG5cbmV4cG9ydCB7IEluY29tZVRheENhbGN1bGF0b3JTY2hlbWEgfSBmcm9tICcuL2luY29tZS10YXgvZG9tYWluL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vaW5jb21lLXRheC9kb21haW4vdHlwZXMnOyJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVzdHJhbGlhTW9ydGdhZ2VTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vcnRnYWdlL2F1c3RyYWxpYS9BdXN0cmFsaWFNb3J0Z2FnZVNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vcnRnYWdlSW5wdXQsIE1vcnRnYWdlT3V0cHV0LCBNb3J0Z2FnZVJ1bGVzIH0gZnJvbSBcIi4vZG9tYWluL3R5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVzdHJhbGlhTW9ydGdhZ2VTZXJ2aWNlIHtcbiAgICBjYWxjdWxhdGUoaW5wdXQ6IE1vcnRnYWdlSW5wdXQsIHJ1bGVzOiBNb3J0Z2FnZVJ1bGVzKTogTW9ydGdhZ2VPdXRwdXQ7XG59XG4iXX0=
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AustraliaMortgageServiceImpl = void 0;
|
|
4
|
+
const PAYMENT_FREQUENCY_PAYMENTS_PER_YEAR = {
|
|
5
|
+
MONTHLY: 12,
|
|
6
|
+
FORTNIGHTLY: 26,
|
|
7
|
+
WEEKLY: 52,
|
|
8
|
+
};
|
|
9
|
+
class AustraliaMortgageServiceImpl {
|
|
10
|
+
calculate(input, rules) {
|
|
11
|
+
const loanAmount = input.propertyPrice - input.downPayment;
|
|
12
|
+
if (loanAmount <= 0) {
|
|
13
|
+
throw new Error('Invalid loan amount: down payment must be less than property price');
|
|
14
|
+
}
|
|
15
|
+
const lvr = loanAmount / input.propertyPrice;
|
|
16
|
+
const lmiPremium = this.computeLmi(loanAmount, lvr, rules);
|
|
17
|
+
const totalMortgage = rules.lendersMortgageInsurance.premiumAddedToLoan
|
|
18
|
+
? loanAmount + lmiPremium
|
|
19
|
+
: loanAmount;
|
|
20
|
+
const paymentsPerYear = PAYMENT_FREQUENCY_PAYMENTS_PER_YEAR[input.paymentFrequency];
|
|
21
|
+
const totalPayments = input.amortizationYears * paymentsPerYear;
|
|
22
|
+
const periodicRate = (input.annualInterestRate / 100) / paymentsPerYear;
|
|
23
|
+
const paymentAmount = this.calculatePayment(totalMortgage, periodicRate, totalPayments);
|
|
24
|
+
const totalPaid = paymentAmount * totalPayments;
|
|
25
|
+
const totalInterestPaid = totalPaid - totalMortgage;
|
|
26
|
+
const stampDuty = this.calculateStampDuty(input.propertyPrice, rules.stampDuty);
|
|
27
|
+
const amortizationSchedule = this.calculateAmortizationSchedule(totalMortgage, periodicRate, paymentAmount, totalPayments, input.amortizationYears, paymentsPerYear);
|
|
28
|
+
return {
|
|
29
|
+
loanAmount,
|
|
30
|
+
lmiPremium,
|
|
31
|
+
totalMortgage,
|
|
32
|
+
monthlyPayment: paymentAmount,
|
|
33
|
+
totalInterestPaid,
|
|
34
|
+
totalPaid,
|
|
35
|
+
stampDuty,
|
|
36
|
+
amortizationSchedule,
|
|
37
|
+
otherFees: {
|
|
38
|
+
notaryFees: {
|
|
39
|
+
value: stampDuty,
|
|
40
|
+
label: 'STAMP_DUTY',
|
|
41
|
+
},
|
|
42
|
+
bankFees: {
|
|
43
|
+
value: 0,
|
|
44
|
+
label: 'BANK_FEES',
|
|
45
|
+
},
|
|
46
|
+
monthlyInsuranceFees: {
|
|
47
|
+
value: lmiPremium,
|
|
48
|
+
label: 'LMI_PREMIUM',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
computeLmi(loanAmount, lvr, rules) {
|
|
54
|
+
if (lvr <= rules.lendersMortgageInsurance.requiredAboveLvr) {
|
|
55
|
+
return 0;
|
|
56
|
+
}
|
|
57
|
+
const premiumRule = rules.lendersMortgageInsurance.premiumRates
|
|
58
|
+
.find(r => lvr <= r.maxLvr);
|
|
59
|
+
if (!premiumRule) {
|
|
60
|
+
throw new Error('LVR exceeds maximum insurable limit');
|
|
61
|
+
}
|
|
62
|
+
return loanAmount * premiumRule.rate;
|
|
63
|
+
}
|
|
64
|
+
calculateStampDuty(propertyPrice, stampDuty) {
|
|
65
|
+
let duty = 0;
|
|
66
|
+
let previousLimit = 0;
|
|
67
|
+
for (const bracket of stampDuty.brackets) {
|
|
68
|
+
if (bracket.upTo !== undefined && propertyPrice > previousLimit) {
|
|
69
|
+
const taxable = Math.min(propertyPrice, bracket.upTo) - previousLimit;
|
|
70
|
+
duty += taxable * bracket.rate;
|
|
71
|
+
previousLimit = bracket.upTo;
|
|
72
|
+
}
|
|
73
|
+
if (bracket.above !== undefined && propertyPrice > bracket.above) {
|
|
74
|
+
duty += (propertyPrice - bracket.above) * bracket.rate;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return duty;
|
|
79
|
+
}
|
|
80
|
+
calculateAmortizationSchedule(principal, periodicRate, paymentAmount, totalPayments, amortizationYears, paymentsPerYear) {
|
|
81
|
+
const schedule = [];
|
|
82
|
+
let balance = principal;
|
|
83
|
+
for (let year = 1; year <= amortizationYears; year++) {
|
|
84
|
+
let yearlyPrincipal = 0;
|
|
85
|
+
let yearlyInterest = 0;
|
|
86
|
+
const paymentsInYear = Math.min(paymentsPerYear, totalPayments - (year - 1) * paymentsPerYear);
|
|
87
|
+
for (let payment = 1; payment <= paymentsInYear; payment++) {
|
|
88
|
+
const interestPayment = balance * periodicRate;
|
|
89
|
+
const principalPayment = paymentAmount - interestPayment;
|
|
90
|
+
yearlyInterest += interestPayment;
|
|
91
|
+
yearlyPrincipal += principalPayment;
|
|
92
|
+
balance -= principalPayment;
|
|
93
|
+
}
|
|
94
|
+
schedule.push({
|
|
95
|
+
year,
|
|
96
|
+
principal: yearlyPrincipal,
|
|
97
|
+
interest: yearlyInterest,
|
|
98
|
+
balance: Math.max(0, balance),
|
|
99
|
+
});
|
|
100
|
+
if (balance <= 0)
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
return schedule;
|
|
104
|
+
}
|
|
105
|
+
calculatePayment(principal, rate, periods) {
|
|
106
|
+
if (rate === 0) {
|
|
107
|
+
return principal / periods;
|
|
108
|
+
}
|
|
109
|
+
return principal *
|
|
110
|
+
(rate * Math.pow(1 + rate, periods)) /
|
|
111
|
+
(Math.pow(1 + rate, periods) - 1);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
exports.AustraliaMortgageServiceImpl = AustraliaMortgageServiceImpl;
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVzdHJhbGlhTW9ydGdhZ2VTZXJ2aWNlSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb3J0Z2FnZS9hdXN0cmFsaWEvQXVzdHJhbGlhTW9ydGdhZ2VTZXJ2aWNlSW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFTQSxNQUFNLG1DQUFtQyxHQUEyQjtJQUNoRSxPQUFPLEVBQUUsRUFBRTtJQUNYLFdBQVcsRUFBRSxFQUFFO0lBQ2YsTUFBTSxFQUFFLEVBQUU7Q0FDYixDQUFDO0FBRUYsTUFBYSw0QkFBNEI7SUFFOUIsU0FBUyxDQUFDLEtBQW9CLEVBQUUsS0FBb0I7UUFDdkQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBRTNELElBQUksVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsVUFBVSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFFN0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxrQkFBa0I7WUFDbkUsQ0FBQyxDQUFDLFVBQVUsR0FBRyxVQUFVO1lBQ3pCLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFFakIsTUFBTSxlQUFlLEdBQUcsbUNBQW1DLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDcEYsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixHQUFHLGVBQWUsQ0FBQztRQUNoRSxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUM7UUFFeEUsTUFBTSxh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QixDQUFDO1FBRUQsT0FBTyxTQUFTO1lBQ1osQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDSjtBQWhKRCxvRUFnSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXN0cmFsaWFNb3J0Z2FnZVNlcnZpY2UgfSBmcm9tIFwiLi9BdXN0cmFsaWFNb3J0Z2FnZVNlcnZpY2VcIjtcbmltcG9ydCB7XG4gICAgQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtLFxuICAgIE1vcnRnYWdlSW5wdXQsXG4gICAgTW9ydGdhZ2VPdXRwdXQsXG4gICAgTW9ydGdhZ2VSdWxlcyxcbiAgICBTdGFtcER1dHlSdWxlcyxcbn0gZnJvbSBcIi4vZG9tYWluL3R5cGVzXCI7XG5cbmNvbnN0IFBBWU1FTlRfRlJFUVVFTkNZX1BBWU1FTlRTX1BFUl9ZRUFSOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge1xuICAgIE1PTlRITFk6IDEyLFxuICAgIEZPUlROSUdIVExZOiAyNixcbiAgICBXRUVLTFk6IDUyLFxufTtcblxuZXhwb3J0IGNsYXNzIEF1c3RyYWxpYU1vcnRnYWdlU2VydmljZUltcGwgaW1wbGVtZW50cyBBdXN0cmFsaWFNb3J0Z2FnZVNlcnZpY2Uge1xuXG4gICAgcHVibGljIGNhbGN1bGF0ZShpbnB1dDogTW9ydGdhZ2VJbnB1dCwgcnVsZXM6IE1vcnRnYWdlUnVsZXMpOiBNb3J0Z2FnZU91dHB1dCB7XG4gICAgICAgIGNvbnN0IGxvYW5BbW91bnQgPSBpbnB1dC5wcm9wZXJ0eVByaWNlIC0gaW5wdXQuZG93blBheW1lbnQ7XG5cbiAgICAgICAgaWYgKGxvYW5BbW91bnQgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGxvYW4gYW1vdW50OiBkb3duIHBheW1lbnQgbXVzdCBiZSBsZXNzIHRoYW4gcHJvcGVydHkgcHJpY2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGx2ciA9IGxvYW5BbW91bnQgLyBpbnB1dC5wcm9wZXJ0eVByaWNlO1xuXG4gICAgICAgIGNvbnN0IGxtaVByZW1pdW0gPSB0aGlzLmNvbXB1dGVMbWkobG9hbkFtb3VudCwgbHZyLCBydWxlcyk7XG4gICAgICAgIGNvbnN0IHRvdGFsTW9ydGdhZ2UgPSBydWxlcy5sZW5kZXJzTW9ydGdhZ2VJbnN1cmFuY2UucHJlbWl1bUFkZGVkVG9Mb2FuXG4gICAgICAgICAgICA/IGxvYW5BbW91bnQgKyBsbWlQcmVtaXVtXG4gICAgICAgICAgICA6IGxvYW5BbW91bnQ7XG5cbiAgICAgICAgY29uc3QgcGF5bWVudHNQZXJZZWFyID0gUEFZTUVOVF9GUkVRVUVOQ1lfUEFZTUVOVFNfUEVSX1lFQVJbaW5wdXQucGF5bWVudEZyZXF1ZW5jeV07XG4gICAgICAgIGNvbnN0IHRvdGFsUGF5bWVudHMgPSBpbnB1dC5hbW9ydGl6YXRpb25ZZWFycyAqIHBheW1lbnRzUGVyWWVhcjtcbiAgICAgICAgY29uc3QgcGVyaW9kaWNSYXRlID0gKGlucHV0LmFubnVhbEludGVyZXN0UmF0ZSAvIDEwMCkgLyBwYXltZW50c1BlclllYXI7XG5cbiAgICAgICAgY29uc3QgcGF5bWVudEFtb3VudCA9IHRoaXMuY2FsY3VsYXRlUGF5bWVudCh0b3RhbE1vcnRnYWdlLCBwZXJpb2RpY1JhdGUsIHRvdGFsUGF5bWVudHMpO1xuICAgICAgICBjb25zdCB0b3RhbFBhaWQgPSBwYXltZW50QW1vdW50ICogdG90YWxQYXltZW50cztcbiAgICAgICAgY29uc3QgdG90YWxJbnRlcmVzdFBhaWQgPSB0b3RhbFBhaWQgLSB0b3RhbE1vcnRnYWdlO1xuXG4gICAgICAgIGNvbnN0IHN0YW1wRHV0eSA9IHRoaXMuY2FsY3VsYXRlU3RhbXBEdXR5KGlucHV0LnByb3BlcnR5UHJpY2UsIHJ1bGVzLnN0YW1wRHV0eSk7XG5cbiAgICAgICAgY29uc3QgYW1vcnRpemF0aW9uU2NoZWR1bGUgPSB0aGlzLmNhbGN1bGF0ZUFtb3J0aXphdGlvblNjaGVkdWxlKFxuICAgICAgICAgICAgdG90YWxNb3J0Z2FnZSxcbiAgICAgICAgICAgIHBlcmlvZGljUmF0ZSxcbiAgICAgICAgICAgIHBheW1lbnRBbW91bnQsXG4gICAgICAgICAgICB0b3RhbFBheW1lbnRzLFxuICAgICAgICAgICAgaW5wdXQuYW1vcnRpemF0aW9uWWVhcnMsXG4gICAgICAgICAgICBwYXltZW50c1BlclllYXIsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvYW5BbW91bnQsXG4gICAgICAgICAgICBsbWlQcmVtaXVtLFxuICAgICAgICAgICAgdG90YWxNb3J0Z2FnZSxcbiAgICAgICAgICAgIG1vbnRobHlQYXltZW50OiBwYXltZW50QW1vdW50LFxuICAgICAgICAgICAgdG90YWxJbnRlcmVzdFBhaWQsXG4gICAgICAgICAgICB0b3RhbFBhaWQsXG4gICAgICAgICAgICBzdGFtcER1dHksXG4gICAgICAgICAgICBhbW9ydGl6YXRpb25TY2hlZHVsZSxcbiAgICAgICAgICAgIG90aGVyRmVlczoge1xuICAgICAgICAgICAgICAgIG5vdGFyeUZlZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0YW1wRHV0eSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdTVEFNUF9EVVRZJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJhbmtGZWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0JBTktfRkVFUycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtb250aGx5SW5zdXJhbmNlRmVlczoge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbG1pUHJlbWl1bSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdMTUlfUFJFTUlVTScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wdXRlTG1pKGxvYW5BbW91bnQ6IG51bWJlciwgbHZyOiBudW1iZXIsIHJ1bGVzOiBNb3J0Z2FnZVJ1bGVzKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGx2ciA8PSBydWxlcy5sZW5kZXJzTW9ydGdhZ2VJbnN1cmFuY2UucmVxdWlyZWRBYm92ZUx2cikge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmVtaXVtUnVsZSA9IHJ1bGVzLmxlbmRlcnNNb3J0Z2FnZUluc3VyYW5jZS5wcmVtaXVtUmF0ZXNcbiAgICAgICAgICAgIC5maW5kKHIgPT4gbHZyIDw9IHIubWF4THZyKTtcblxuICAgICAgICBpZiAoIXByZW1pdW1SdWxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xWUiBleGNlZWRzIG1heGltdW0gaW5zdXJhYmxlIGxpbWl0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbG9hbkFtb3VudCAqIHByZW1pdW1SdWxlLnJhdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVTdGFtcER1dHkocHJvcGVydHlQcmljZTogbnVtYmVyLCBzdGFtcER1dHk6IFN0YW1wRHV0eVJ1bGVzKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGR1dHkgPSAwO1xuICAgICAgICBsZXQgcHJldmlvdXNMaW1pdCA9IDA7XG5cbiAgICAgICAgZm9yIChjb25zdCBicmFja2V0IG9mIHN0YW1wRHV0eS5icmFja2V0cykge1xuICAgICAgICAgICAgaWYgKGJyYWNrZXQudXBUbyAhPT0gdW5kZWZpbmVkICYmIHByb3BlcnR5UHJpY2UgPiBwcmV2aW91c0xpbWl0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGF4YWJsZSA9IE1hdGgubWluKHByb3BlcnR5UHJpY2UsIGJyYWNrZXQudXBUbykgLSBwcmV2aW91c0xpbWl0O1xuICAgICAgICAgICAgICAgIGR1dHkgKz0gdGF4YWJsZSAqIGJyYWNrZXQucmF0ZTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0xpbWl0ID0gYnJhY2tldC51cFRvO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYnJhY2tldC5hYm92ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BlcnR5UHJpY2UgPiBicmFja2V0LmFib3ZlKSB7XG4gICAgICAgICAgICAgICAgZHV0eSArPSAocHJvcGVydHlQcmljZSAtIGJyYWNrZXQuYWJvdmUpICogYnJhY2tldC5yYXRlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGR1dHk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVBbW9ydGl6YXRpb25TY2hlZHVsZShcbiAgICAgICAgcHJpbmNpcGFsOiBudW1iZXIsXG4gICAgICAgIHBlcmlvZGljUmF0ZTogbnVtYmVyLFxuICAgICAgICBwYXltZW50QW1vdW50OiBudW1iZXIsXG4gICAgICAgIHRvdGFsUGF5bWVudHM6IG51bWJlcixcbiAgICAgICAgYW1vcnRpemF0aW9uWWVhcnM6IG51bWJlcixcbiAgICAgICAgcGF5bWVudHNQZXJZZWFyOiBudW1iZXIsXG4gICAgKTogQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtW10ge1xuICAgICAgICBjb25zdCBzY2hlZHVsZTogQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtW10gPSBbXTtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSBwcmluY2lwYWw7XG5cbiAgICAgICAgZm9yIChsZXQgeWVhciA9IDE7IHllYXIgPD0gYW1vcnRpemF0aW9uWWVhcnM7IHllYXIrKykge1xuICAgICAgICAgICAgbGV0IHllYXJseVByaW5jaXBhbCA9IDA7XG4gICAgICAgICAgICBsZXQgeWVhcmx5SW50ZXJlc3QgPSAwO1xuXG4gICAgICAgICAgICBjb25zdCBwYXltZW50c0luWWVhciA9IE1hdGgubWluKHBheW1lbnRzUGVyWWVhciwgdG90YWxQYXltZW50cyAtICh5ZWFyIC0gMSkgKiBwYXltZW50c1BlclllYXIpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBwYXltZW50ID0gMTsgcGF5bWVudCA8PSBwYXltZW50c0luWWVhcjsgcGF5bWVudCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJlc3RQYXltZW50ID0gYmFsYW5jZSAqIHBlcmlvZGljUmF0ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmluY2lwYWxQYXltZW50ID0gcGF5bWVudEFtb3VudCAtIGludGVyZXN0UGF5bWVudDtcblxuICAgICAgICAgICAgICAgIHllYXJseUludGVyZXN0ICs9IGludGVyZXN0UGF5bWVudDtcbiAgICAgICAgICAgICAgICB5ZWFybHlQcmluY2lwYWwgKz0gcHJpbmNpcGFsUGF5bWVudDtcbiAgICAgICAgICAgICAgICBiYWxhbmNlIC09IHByaW5jaXBhbFBheW1lbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjaGVkdWxlLnB1c2goe1xuICAgICAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICAgICAgcHJpbmNpcGFsOiB5ZWFybHlQcmluY2lwYWwsXG4gICAgICAgICAgICAgICAgaW50ZXJlc3Q6IHllYXJseUludGVyZXN0LFxuICAgICAgICAgICAgICAgIGJhbGFuY2U6IE1hdGgubWF4KDAsIGJhbGFuY2UpLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChiYWxhbmNlIDw9IDApIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlUGF5bWVudChwcmluY2lwYWw6IG51bWJlciwgcmF0ZTogbnVtYmVyLCBwZXJpb2RzOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBpZiAocmF0ZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHByaW5jaXBhbCAvIHBlcmlvZHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJpbmNpcGFsICpcbiAgICAgICAgICAgIChyYXRlICogTWF0aC5wb3coMSArIHJhdGUsIHBlcmlvZHMpKSAvXG4gICAgICAgICAgICAoTWF0aC5wb3coMSArIHJhdGUsIHBlcmlvZHMpIC0gMSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbW9ydGdhZ2UvYXVzdHJhbGlhL2RvbWFpbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3RoZXJGZWVzIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vcnRnYWdlUnVsZXMge1xuICAgIGxvYW5Db25zdHJhaW50czogTG9hbkNvbnN0cmFpbnRzO1xuICAgIGxlbmRlcnNNb3J0Z2FnZUluc3VyYW5jZTogTGVuZGVyc01vcnRnYWdlSW5zdXJhbmNlUnVsZXM7XG4gICAgaW50ZXJlc3Q6IEludGVyZXN0UnVsZXM7XG4gICAgc3RhbXBEdXR5OiBTdGFtcER1dHlSdWxlcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2FuQ29uc3RyYWludHMge1xuICAgIG1heEx2cjogbnVtYmVyO1xuICAgIG1heEFtb3J0aXphdGlvblllYXJzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGVuZGVyc01vcnRnYWdlSW5zdXJhbmNlUmF0ZSB7XG4gICAgbWF4THZyOiBudW1iZXI7XG4gICAgcmF0ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlbmRlcnNNb3J0Z2FnZUluc3VyYW5jZVJ1bGVzIHtcbiAgICByZXF1aXJlZEFib3ZlTHZyOiBudW1iZXI7XG4gICAgcHJlbWl1bVJhdGVzOiBMZW5kZXJzTW9ydGdhZ2VJbnN1cmFuY2VSYXRlW107XG4gICAgcHJlbWl1bUFkZGVkVG9Mb2FuOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVyZXN0UnVsZXMge1xuICAgIGNvbXBvdW5kaW5nOiAnTU9OVEhMWSc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbXBEdXR5QnJhY2tldCB7XG4gICAgdXBUbz86IG51bWJlcjtcbiAgICBhYm92ZT86IG51bWJlcjtcbiAgICByYXRlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbXBEdXR5UnVsZXMge1xuICAgIGJyYWNrZXRzOiBTdGFtcER1dHlCcmFja2V0W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtIHtcbiAgICB5ZWFyOiBudW1iZXI7XG4gICAgcHJpbmNpcGFsOiBudW1iZXI7XG4gICAgaW50ZXJlc3Q6IG51bWJlcjtcbiAgICBiYWxhbmNlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ydGdhZ2VJbnB1dCB7XG4gICAgcHJvcGVydHlQcmljZTogbnVtYmVyO1xuICAgIGRvd25QYXltZW50OiBudW1iZXI7XG4gICAgYW5udWFsSW50ZXJlc3RSYXRlOiBudW1iZXI7XG4gICAgYW1vcnRpemF0aW9uWWVhcnM6IG51bWJlcjtcbiAgICBwYXltZW50RnJlcXVlbmN5OiAnTU9OVEhMWScgfCAnRk9SVE5JR0hUTFknIHwgJ1dFRUtMWSc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ydGdhZ2VPdXRwdXQge1xuICAgIGxvYW5BbW91bnQ6IG51bWJlcjtcbiAgICBsbWlQcmVtaXVtOiBudW1iZXI7XG4gICAgdG90YWxNb3J0Z2FnZTogbnVtYmVyO1xuICAgIG1vbnRobHlQYXltZW50OiBudW1iZXI7XG4gICAgdG90YWxJbnRlcmVzdFBhaWQ6IG51bWJlcjtcbiAgICB0b3RhbFBhaWQ6IG51bWJlcjtcbiAgICBzdGFtcER1dHk6IG51bWJlcjtcbiAgICBhbW9ydGl6YXRpb25TY2hlZHVsZTogQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtW107XG4gICAgb3RoZXJGZWVzOiBPdGhlckZlZXM7XG59XG4iXX0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AustraliaCorporateTaxService } from "./AustraliaCorporateTaxService";
|
|
2
|
+
import { Input, Result, Rules } from "./domain/types";
|
|
3
|
+
export declare class AustraliaCorporateTaxServiceImpl implements AustraliaCorporateTaxService {
|
|
4
|
+
private _input;
|
|
5
|
+
private _rules;
|
|
6
|
+
constructor(input: Input, rules: Rules);
|
|
7
|
+
calculate(): Result;
|
|
8
|
+
private calculateProgressiveTax;
|
|
9
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Breakdown } from "../../domain/types";
|
|
2
|
+
export interface FlatTaxRule {
|
|
3
|
+
type: 'flat';
|
|
4
|
+
rate: number;
|
|
5
|
+
conditions?: {
|
|
6
|
+
maxTurnover?: number;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export interface ProgressiveTaxBracket {
|
|
10
|
+
from: number;
|
|
11
|
+
to: number | null;
|
|
12
|
+
rate: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ProgressiveTaxRule {
|
|
15
|
+
type: 'progressive';
|
|
16
|
+
brackets: ProgressiveTaxBracket[];
|
|
17
|
+
conditions?: {
|
|
18
|
+
maxTurnover?: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export type TaxRule = FlatTaxRule | ProgressiveTaxRule;
|
|
22
|
+
export interface Rules {
|
|
23
|
+
regimes: Record<string, TaxRule>;
|
|
24
|
+
}
|
|
25
|
+
export interface Input {
|
|
26
|
+
taxableIncome: number;
|
|
27
|
+
annualTurnover: number;
|
|
28
|
+
isSmallBusiness: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface Result {
|
|
31
|
+
corporateTax: number;
|
|
32
|
+
effectiveTaxRate: number;
|
|
33
|
+
breakdowns: Breakdown[];
|
|
34
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AustraliaIncomeTaxService } from "./AustraliaIncomeTaxService";
|
|
2
|
+
import { ComputedIncomeTaxValues, IncomeTaxRules } from "./domain/types";
|
|
3
|
+
export declare class AustraliaIncomeTaxServiceImpl implements AustraliaIncomeTaxService {
|
|
4
|
+
private _income;
|
|
5
|
+
private _rules;
|
|
6
|
+
private _isResident;
|
|
7
|
+
constructor(income: number, rules: IncomeTaxRules, isResident?: boolean);
|
|
8
|
+
calculateNetIncome(): ComputedIncomeTaxValues;
|
|
9
|
+
private computeTaxBracketBreakdown;
|
|
10
|
+
private computeLowIncomeTaxOffset;
|
|
11
|
+
private computeMedicareLevy;
|
|
12
|
+
private round;
|
|
13
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { BracketAllocation, TaxBracket } from "../../domain/types";
|
|
2
|
+
export interface IncomeTaxRules {
|
|
3
|
+
taxBrackets: TaxBracket[];
|
|
4
|
+
nonResidentTaxBrackets: TaxBracket[];
|
|
5
|
+
medicareLevy: MedicareLevyRules;
|
|
6
|
+
lowIncomeTaxOffset: LowIncomeTaxOffset;
|
|
7
|
+
lowAndMiddleIncomeTaxOffset?: LowAndMiddleIncomeTaxOffset;
|
|
8
|
+
}
|
|
9
|
+
export interface MedicareLevyRules {
|
|
10
|
+
rate: number;
|
|
11
|
+
shadingInThreshold: number;
|
|
12
|
+
fullLevyThreshold: number;
|
|
13
|
+
reductionRate: number;
|
|
14
|
+
}
|
|
15
|
+
export interface LowIncomeTaxOffset {
|
|
16
|
+
maxOffset: number;
|
|
17
|
+
phaseOutStart: number;
|
|
18
|
+
phaseOutEnd: number;
|
|
19
|
+
phaseOutRate: number;
|
|
20
|
+
}
|
|
21
|
+
export interface LowAndMiddleIncomeTaxOffset {
|
|
22
|
+
maxOffset: number;
|
|
23
|
+
phaseOutStart: number;
|
|
24
|
+
phaseOutEnd: number;
|
|
25
|
+
phaseOutRate: number;
|
|
26
|
+
}
|
|
27
|
+
export interface ComputedIncomeTaxValues {
|
|
28
|
+
grossIncome: number;
|
|
29
|
+
incomeTax: number;
|
|
30
|
+
medicareLevy: number;
|
|
31
|
+
lowIncomeTaxOffset: number;
|
|
32
|
+
totalDeductions: number;
|
|
33
|
+
netIncome: number;
|
|
34
|
+
effectiveTaxRate: number;
|
|
35
|
+
taxBracketBreakdown: BracketAllocation[];
|
|
36
|
+
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -17,5 +17,11 @@ export { ComputedIncomeTaxValues as SouthAfricaComputedIncomeTaxValues, IncomeTa
|
|
|
17
17
|
export { MortgageRules as SouthAfricaMortgageRules, MortgageInput as SouthAfricaMortgageInput, MortgageOutput as SouthAfricaMortgageOutput, } from './mortgage/south-africa/domain/types';
|
|
18
18
|
export { SouthAfricaCorporateTaxServiceImpl as SouthAfricaCorporateTaxService } from './corporate/south-africa/SouthAfricaCorporateTaxServiceImpl';
|
|
19
19
|
export { Rules as SouthAfricaCorporateTaxRules, Input as SouthAfricaCorporateTaxInput, Result as SouthAfricaCorporateTaxResult, } from './corporate/south-africa/domain/types';
|
|
20
|
+
export { AustraliaIncomeTaxServiceImpl as AustraliaIncomeTaxService } from './income-tax/australia/AustraliaIncomeTaxServiceImpl';
|
|
21
|
+
export { ComputedIncomeTaxValues as AustraliaComputedIncomeTaxValues, IncomeTaxRules as AustraliaIncomeTaxRules, } from './income-tax/australia/domain/types';
|
|
22
|
+
export { AustraliaMortgageServiceImpl as AustraliaMortgageService } from './mortgage/australia/AustraliaMortgageServiceImpl';
|
|
23
|
+
export { MortgageRules as AustraliaMortgageRules, MortgageInput as AustraliaMortgageInput, MortgageOutput as AustraliaMortgageOutput, } from './mortgage/australia/domain/types';
|
|
24
|
+
export { AustraliaCorporateTaxServiceImpl as AustraliaCorporateTaxService } from './corporate/australia/AustraliaCorporateTaxServiceImpl';
|
|
25
|
+
export { Input as AustraliaCorporateTaxInput, Rules as AustraliaCorporateTaxRules, Result as AustraliaCorporateTaxResult, } from './corporate/australia/domain/types';
|
|
20
26
|
export { IncomeTaxCalculatorSchema } from './income-tax/domain/types';
|
|
21
27
|
export * from './income-tax/domain/types';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AustraliaMortgageService } from "./AustraliaMortgageService";
|
|
2
|
+
import { MortgageInput, MortgageOutput, MortgageRules } from "./domain/types";
|
|
3
|
+
export declare class AustraliaMortgageServiceImpl implements AustraliaMortgageService {
|
|
4
|
+
calculate(input: MortgageInput, rules: MortgageRules): MortgageOutput;
|
|
5
|
+
private computeLmi;
|
|
6
|
+
private calculateStampDuty;
|
|
7
|
+
private calculateAmortizationSchedule;
|
|
8
|
+
private calculatePayment;
|
|
9
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { OtherFees } from "../../domain/types";
|
|
2
|
+
export interface MortgageRules {
|
|
3
|
+
loanConstraints: LoanConstraints;
|
|
4
|
+
lendersMortgageInsurance: LendersMortgageInsuranceRules;
|
|
5
|
+
interest: InterestRules;
|
|
6
|
+
stampDuty: StampDutyRules;
|
|
7
|
+
}
|
|
8
|
+
export interface LoanConstraints {
|
|
9
|
+
maxLvr: number;
|
|
10
|
+
maxAmortizationYears: number;
|
|
11
|
+
}
|
|
12
|
+
export interface LendersMortgageInsuranceRate {
|
|
13
|
+
maxLvr: number;
|
|
14
|
+
rate: number;
|
|
15
|
+
}
|
|
16
|
+
export interface LendersMortgageInsuranceRules {
|
|
17
|
+
requiredAboveLvr: number;
|
|
18
|
+
premiumRates: LendersMortgageInsuranceRate[];
|
|
19
|
+
premiumAddedToLoan: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface InterestRules {
|
|
22
|
+
compounding: 'MONTHLY';
|
|
23
|
+
}
|
|
24
|
+
export interface StampDutyBracket {
|
|
25
|
+
upTo?: number;
|
|
26
|
+
above?: number;
|
|
27
|
+
rate: number;
|
|
28
|
+
}
|
|
29
|
+
export interface StampDutyRules {
|
|
30
|
+
brackets: StampDutyBracket[];
|
|
31
|
+
}
|
|
32
|
+
export interface AmortizationScheduleItem {
|
|
33
|
+
year: number;
|
|
34
|
+
principal: number;
|
|
35
|
+
interest: number;
|
|
36
|
+
balance: number;
|
|
37
|
+
}
|
|
38
|
+
export interface MortgageInput {
|
|
39
|
+
propertyPrice: number;
|
|
40
|
+
downPayment: number;
|
|
41
|
+
annualInterestRate: number;
|
|
42
|
+
amortizationYears: number;
|
|
43
|
+
paymentFrequency: 'MONTHLY' | 'FORTNIGHTLY' | 'WEEKLY';
|
|
44
|
+
}
|
|
45
|
+
export interface MortgageOutput {
|
|
46
|
+
loanAmount: number;
|
|
47
|
+
lmiPremium: number;
|
|
48
|
+
totalMortgage: number;
|
|
49
|
+
monthlyPayment: number;
|
|
50
|
+
totalInterestPaid: number;
|
|
51
|
+
totalPaid: number;
|
|
52
|
+
stampDuty: number;
|
|
53
|
+
amortizationSchedule: AmortizationScheduleItem[];
|
|
54
|
+
otherFees: OtherFees;
|
|
55
|
+
}
|