@novha/calc-engines 6.2.0 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/capital-gains/canada/CanadaCapitalGainsServiceImpl.js +29 -17
- package/dist/index.js +3 -2
- package/dist/inheritance-tax/australia/AustraliaInheritanceTaxService.js +3 -0
- package/dist/inheritance-tax/australia/AustraliaInheritanceTaxServiceImpl.js +19 -0
- package/dist/inheritance-tax/australia/domain/types.js +3 -0
- package/dist/inheritance-tax/canada/CanadaInheritanceTaxService.js +3 -0
- package/dist/inheritance-tax/canada/CanadaInheritanceTaxServiceImpl.js +51 -0
- package/dist/inheritance-tax/canada/domain/types.js +3 -0
- package/dist/inheritance-tax/domain/types.js +3 -0
- package/dist/inheritance-tax/france/FranceInheritanceTaxService.js +3 -0
- package/dist/inheritance-tax/france/FranceInheritanceTaxServiceImpl.js +52 -0
- package/dist/inheritance-tax/france/domain/types.js +3 -0
- package/dist/inheritance-tax/germany/GermanyInheritanceTaxService.js +3 -0
- package/dist/inheritance-tax/germany/GermanyInheritanceTaxServiceImpl.js +52 -0
- package/dist/inheritance-tax/germany/domain/types.js +3 -0
- package/dist/inheritance-tax/index.js +25 -0
- package/dist/inheritance-tax/south-africa/SouthAfricaInheritanceTaxService.js +3 -0
- package/dist/inheritance-tax/south-africa/SouthAfricaInheritanceTaxServiceImpl.js +52 -0
- package/dist/inheritance-tax/south-africa/domain/types.js +3 -0
- package/dist/inheritance-tax/uk/UKInheritanceTaxService.js +3 -0
- package/dist/inheritance-tax/uk/UKInheritanceTaxServiceImpl.js +39 -0
- package/dist/inheritance-tax/uk/domain/types.js +3 -0
- package/dist/inheritance-tax/usa/USAInheritanceTaxService.js +3 -0
- package/dist/inheritance-tax/usa/USAInheritanceTaxServiceImpl.js +51 -0
- package/dist/inheritance-tax/usa/domain/types.js +3 -0
- package/dist/shared/domain/types.js +2 -1
- package/dist/types/capital-gains/canada/CanadaCapitalGainsServiceImpl.d.ts +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/inheritance-tax/australia/AustraliaInheritanceTaxService.d.ts +4 -0
- package/dist/types/inheritance-tax/australia/AustraliaInheritanceTaxServiceImpl.d.ts +8 -0
- package/dist/types/inheritance-tax/australia/domain/types.d.ts +13 -0
- package/dist/types/inheritance-tax/canada/CanadaInheritanceTaxService.d.ts +4 -0
- package/dist/types/inheritance-tax/canada/CanadaInheritanceTaxServiceImpl.d.ts +9 -0
- package/dist/types/inheritance-tax/canada/domain/types.d.ts +20 -0
- package/dist/types/inheritance-tax/domain/types.d.ts +17 -0
- package/dist/types/inheritance-tax/france/FranceInheritanceTaxService.d.ts +4 -0
- package/dist/types/inheritance-tax/france/FranceInheritanceTaxServiceImpl.d.ts +9 -0
- package/dist/types/inheritance-tax/france/domain/types.d.ts +29 -0
- package/dist/types/inheritance-tax/germany/GermanyInheritanceTaxService.d.ts +4 -0
- package/dist/types/inheritance-tax/germany/GermanyInheritanceTaxServiceImpl.d.ts +9 -0
- package/dist/types/inheritance-tax/germany/domain/types.d.ts +28 -0
- package/dist/types/inheritance-tax/index.d.ts +15 -0
- package/dist/types/inheritance-tax/south-africa/SouthAfricaInheritanceTaxService.d.ts +4 -0
- package/dist/types/inheritance-tax/south-africa/SouthAfricaInheritanceTaxServiceImpl.d.ts +9 -0
- package/dist/types/inheritance-tax/south-africa/domain/types.d.ts +20 -0
- package/dist/types/inheritance-tax/uk/UKInheritanceTaxService.d.ts +4 -0
- package/dist/types/inheritance-tax/uk/UKInheritanceTaxServiceImpl.d.ts +8 -0
- package/dist/types/inheritance-tax/uk/domain/types.d.ts +17 -0
- package/dist/types/inheritance-tax/usa/USAInheritanceTaxService.d.ts +4 -0
- package/dist/types/inheritance-tax/usa/USAInheritanceTaxServiceImpl.d.ts +9 -0
- package/dist/types/inheritance-tax/usa/domain/types.d.ts +19 -0
- package/dist/types/shared/domain/types.d.ts +2 -1
- package/package.json +1 -1
- package/src/capital-gains/canada/CanadaCapitalGainsServiceImpl.ts +34 -21
- package/src/index.ts +1 -0
- package/src/inheritance-tax/australia/AustraliaInheritanceTaxService.ts +5 -0
- package/src/inheritance-tax/australia/AustraliaInheritanceTaxServiceImpl.ts +21 -0
- package/src/inheritance-tax/australia/domain/types.ts +16 -0
- package/src/inheritance-tax/canada/CanadaInheritanceTaxService.ts +5 -0
- package/src/inheritance-tax/canada/CanadaInheritanceTaxServiceImpl.ts +65 -0
- package/src/inheritance-tax/canada/domain/types.ts +24 -0
- package/src/inheritance-tax/domain/types.ts +19 -0
- package/src/inheritance-tax/france/FranceInheritanceTaxService.ts +5 -0
- package/src/inheritance-tax/france/FranceInheritanceTaxServiceImpl.ts +66 -0
- package/src/inheritance-tax/france/domain/types.ts +35 -0
- package/src/inheritance-tax/germany/GermanyInheritanceTaxService.ts +5 -0
- package/src/inheritance-tax/germany/GermanyInheritanceTaxServiceImpl.ts +66 -0
- package/src/inheritance-tax/germany/domain/types.ts +34 -0
- package/src/inheritance-tax/index.ts +86 -0
- package/src/inheritance-tax/south-africa/SouthAfricaInheritanceTaxService.ts +5 -0
- package/src/inheritance-tax/south-africa/SouthAfricaInheritanceTaxServiceImpl.ts +66 -0
- package/src/inheritance-tax/south-africa/domain/types.ts +24 -0
- package/src/inheritance-tax/uk/UKInheritanceTaxService.ts +5 -0
- package/src/inheritance-tax/uk/UKInheritanceTaxServiceImpl.ts +46 -0
- package/src/inheritance-tax/uk/domain/types.ts +20 -0
- package/src/inheritance-tax/usa/USAInheritanceTaxService.ts +5 -0
- package/src/inheritance-tax/usa/USAInheritanceTaxServiceImpl.ts +65 -0
- package/src/inheritance-tax/usa/domain/types.ts +23 -0
- package/src/shared/domain/types.ts +1 -0
- package/test/australia-inheritance-tax.test.ts +35 -0
- package/test/canada-inheritance-tax.test.ts +62 -0
- package/test/france-inheritance-tax.test.ts +101 -0
- package/test/germany-inheritance-tax.test.ts +100 -0
- package/test/south-africa-inheritance-tax.test.ts +81 -0
- package/test/uk-inheritance-tax.test.ts +72 -0
- package/test/usa-inheritance-tax.test.ts +90 -0
|
@@ -20,35 +20,47 @@ class CanadaCapitalGainsServiceImpl {
|
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
22
|
const taxableGain = gain * this._rules.inclusionRate;
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
const incomeWithGain = baseIncome + taxableGain;
|
|
26
|
-
const baseTax = this.calculateProgressiveTax(baseIncome, this._rules.taxBrackets);
|
|
27
|
-
const taxWithGain = this.calculateProgressiveTax(incomeWithGain, this._rules.taxBrackets);
|
|
28
|
-
const capitalGainTax = taxWithGain - baseTax;
|
|
23
|
+
const otherIncome = this._input.totalTaxableIncome - gain;
|
|
24
|
+
const { tax, breakdowns } = this.applyBrackets(taxableGain, otherIncome, this._rules.taxBrackets);
|
|
29
25
|
return {
|
|
30
26
|
taxableGain,
|
|
31
|
-
capitalGainTax,
|
|
27
|
+
capitalGainTax: tax,
|
|
32
28
|
socialContributions: 0,
|
|
33
29
|
netInvestmentIncomeTax: 0,
|
|
34
|
-
totalTax:
|
|
35
|
-
effectiveRate: gain > 0 ? (
|
|
36
|
-
breakdowns
|
|
30
|
+
totalTax: tax,
|
|
31
|
+
effectiveRate: gain > 0 ? (tax / gain) * 100 : 0,
|
|
32
|
+
breakdowns,
|
|
37
33
|
};
|
|
38
34
|
}
|
|
39
|
-
|
|
35
|
+
applyBrackets(taxableGain, otherIncome, brackets) {
|
|
40
36
|
let tax = 0;
|
|
37
|
+
const breakdowns = [];
|
|
38
|
+
let remaining = taxableGain;
|
|
39
|
+
let incomeUsed = otherIncome;
|
|
41
40
|
for (const bracket of brackets) {
|
|
42
|
-
|
|
43
|
-
if (income <= bracket.from)
|
|
41
|
+
if (remaining <= 0)
|
|
44
42
|
break;
|
|
45
|
-
const
|
|
43
|
+
const upper = bracket.to ?? Infinity;
|
|
44
|
+
if (incomeUsed >= upper)
|
|
45
|
+
continue;
|
|
46
|
+
const bracketStart = Math.max(bracket.from, incomeUsed);
|
|
47
|
+
const bracketSpace = upper - bracketStart;
|
|
48
|
+
const taxable = Math.min(bracketSpace, remaining);
|
|
46
49
|
if (taxable > 0) {
|
|
47
|
-
|
|
50
|
+
const bracketTax = taxable * bracket.rate;
|
|
51
|
+
tax += bracketTax;
|
|
52
|
+
remaining -= taxable;
|
|
53
|
+
incomeUsed += taxable;
|
|
54
|
+
breakdowns.push({
|
|
55
|
+
from: `${bracket.from}`,
|
|
56
|
+
to: `${bracket.to ?? 'Above'}`,
|
|
57
|
+
rate: bracket.rate,
|
|
58
|
+
amount: bracketTax,
|
|
59
|
+
});
|
|
48
60
|
}
|
|
49
61
|
}
|
|
50
|
-
return tax;
|
|
62
|
+
return { tax, breakdowns };
|
|
51
63
|
}
|
|
52
64
|
}
|
|
53
65
|
exports.CanadaCapitalGainsServiceImpl = CanadaCapitalGainsServiceImpl;
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FuYWRhQ2FwaXRhbEdhaW5zU2VydmljZUltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2FwaXRhbC1nYWlucy9jYW5hZGEvQ2FuYWRhQ2FwaXRhbEdhaW5zU2VydmljZUltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsTUFBYSw2QkFBNkI7SUFJdEMsWUFBWSxLQUFZLEVBQUUsS0FBWTtRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBRXJDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ1osT0FBTztnQkFDSCxXQUFXLEVBQUUsQ0FBQztnQkFDZCxjQUFjLEVBQUUsQ0FBQztnQkFDakIsbUJBQW1CLEVBQUUsQ0FBQztnQkFDdEIsc0JBQXNCLEVBQUUsQ0FBQztnQkFDekIsUUFBUSxFQUFFLENBQUM7Z0JBQ1gsYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLFVBQVUsRUFBRSxFQUFFO2FBQ2pCLENBQUM7UUFDTixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQ3JELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQzFELE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFbEcsT0FBTztZQUNILFdBQVc7WUFDWCxjQUFjLEVBQUUsR0FBRztZQUNuQixtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLHNCQUFzQixFQUFFLENBQUM7WUFDekIsUUFBUSxFQUFFLEdBQUc7WUFDYixhQUFhLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hELFVBQVU7U0FDYixDQUFDO0lBQ04sQ0FBQztJQUVPLGFBQWEsQ0FDakIsV0FBbUIsRUFDbkIsV0FBbUIsRUFDbkIsUUFBc0I7UUFFdEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osTUFBTSxVQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLFNBQVMsR0FBRyxXQUFXLENBQUM7UUFDNUIsSUFBSSxVQUFVLEdBQUcsV0FBVyxDQUFDO1FBRTdCLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7WUFDN0IsSUFBSSxTQUFTLElBQUksQ0FBQztnQkFBRSxNQUFNO1lBRTFCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDO1lBRXJDLElBQUksVUFBVSxJQUFJLEtBQUs7Z0JBQUUsU0FBUztZQUVsQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDeEQsTUFBTSxZQUFZLEdBQUcsS0FBSyxHQUFHLFlBQVksQ0FBQztZQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUVsRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDZCxNQUFNLFVBQVUsR0FBRyxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDMUMsR0FBRyxJQUFJLFVBQVUsQ0FBQztnQkFDbEIsU0FBUyxJQUFJLE9BQU8sQ0FBQztnQkFDckIsVUFBVSxJQUFJLE9BQU8sQ0FBQztnQkFFdEIsVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDWixJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFO29CQUN2QixFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxJQUFJLE9BQU8sRUFBRTtvQkFDOUIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO29CQUNsQixNQUFNLEVBQUUsVUFBVTtpQkFDckIsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQy9CLENBQUM7Q0FDSjtBQTdFRCxzRUE2RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha2Rvd24sIFJlc3VsdCB9IGZyb20gXCIuLi9kb21haW4vdHlwZXNcIjtcbmltcG9ydCB7IENhbmFkYUNhcGl0YWxHYWluc1NlcnZpY2UgfSBmcm9tIFwiLi9DYW5hZGFDYXBpdGFsR2FpbnNTZXJ2aWNlXCI7XG5pbXBvcnQgeyBJbnB1dCwgUnVsZXMsIFRheEJyYWNrZXQgfSBmcm9tIFwiLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGNsYXNzIENhbmFkYUNhcGl0YWxHYWluc1NlcnZpY2VJbXBsIGltcGxlbWVudHMgQ2FuYWRhQ2FwaXRhbEdhaW5zU2VydmljZSB7XG4gICAgcHJpdmF0ZSBfaW5wdXQ6IElucHV0O1xuICAgIHByaXZhdGUgX3J1bGVzOiBSdWxlcztcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0OiBJbnB1dCwgcnVsZXM6IFJ1bGVzKSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX3J1bGVzID0gcnVsZXM7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlKCk6IFJlc3VsdCB7XG4gICAgICAgIGNvbnN0IGdhaW4gPSB0aGlzLl9pbnB1dC5jYXBpdGFsR2FpbjtcblxuICAgICAgICBpZiAoZ2FpbiA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRheGFibGVHYWluOiAwLFxuICAgICAgICAgICAgICAgIGNhcGl0YWxHYWluVGF4OiAwLFxuICAgICAgICAgICAgICAgIHNvY2lhbENvbnRyaWJ1dGlvbnM6IDAsXG4gICAgICAgICAgICAgICAgbmV0SW52ZXN0bWVudEluY29tZVRheDogMCxcbiAgICAgICAgICAgICAgICB0b3RhbFRheDogMCxcbiAgICAgICAgICAgICAgICBlZmZlY3RpdmVSYXRlOiAwLFxuICAgICAgICAgICAgICAgIGJyZWFrZG93bnM6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGF4YWJsZUdhaW4gPSBnYWluICogdGhpcy5fcnVsZXMuaW5jbHVzaW9uUmF0ZTtcbiAgICAgICAgY29uc3Qgb3RoZXJJbmNvbWUgPSB0aGlzLl9pbnB1dC50b3RhbFRheGFibGVJbmNvbWUgLSBnYWluO1xuICAgICAgICBjb25zdCB7IHRheCwgYnJlYWtkb3ducyB9ID0gdGhpcy5hcHBseUJyYWNrZXRzKHRheGFibGVHYWluLCBvdGhlckluY29tZSwgdGhpcy5fcnVsZXMudGF4QnJhY2tldHMpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0YXhhYmxlR2FpbixcbiAgICAgICAgICAgIGNhcGl0YWxHYWluVGF4OiB0YXgsXG4gICAgICAgICAgICBzb2NpYWxDb250cmlidXRpb25zOiAwLFxuICAgICAgICAgICAgbmV0SW52ZXN0bWVudEluY29tZVRheDogMCxcbiAgICAgICAgICAgIHRvdGFsVGF4OiB0YXgsXG4gICAgICAgICAgICBlZmZlY3RpdmVSYXRlOiBnYWluID4gMCA/ICh0YXggLyBnYWluKSAqIDEwMCA6IDAsXG4gICAgICAgICAgICBicmVha2Rvd25zLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlCcmFja2V0cyhcbiAgICAgICAgdGF4YWJsZUdhaW46IG51bWJlcixcbiAgICAgICAgb3RoZXJJbmNvbWU6IG51bWJlcixcbiAgICAgICAgYnJhY2tldHM6IFRheEJyYWNrZXRbXSxcbiAgICApOiB7IHRheDogbnVtYmVyOyBicmVha2Rvd25zOiBCcmVha2Rvd25bXSB9IHtcbiAgICAgICAgbGV0IHRheCA9IDA7XG4gICAgICAgIGNvbnN0IGJyZWFrZG93bnM6IEJyZWFrZG93bltdID0gW107XG4gICAgICAgIGxldCByZW1haW5pbmcgPSB0YXhhYmxlR2FpbjtcbiAgICAgICAgbGV0IGluY29tZVVzZWQgPSBvdGhlckluY29tZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGJyYWNrZXQgb2YgYnJhY2tldHMpIHtcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPD0gMCkgYnJlYWs7XG5cbiAgICAgICAgICAgIGNvbnN0IHVwcGVyID0gYnJhY2tldC50byA/PyBJbmZpbml0eTtcblxuICAgICAgICAgICAgaWYgKGluY29tZVVzZWQgPj0gdXBwZXIpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBicmFja2V0U3RhcnQgPSBNYXRoLm1heChicmFja2V0LmZyb20sIGluY29tZVVzZWQpO1xuICAgICAgICAgICAgY29uc3QgYnJhY2tldFNwYWNlID0gdXBwZXIgLSBicmFja2V0U3RhcnQ7XG4gICAgICAgICAgICBjb25zdCB0YXhhYmxlID0gTWF0aC5taW4oYnJhY2tldFNwYWNlLCByZW1haW5pbmcpO1xuXG4gICAgICAgICAgICBpZiAodGF4YWJsZSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBicmFja2V0VGF4ID0gdGF4YWJsZSAqIGJyYWNrZXQucmF0ZTtcbiAgICAgICAgICAgICAgICB0YXggKz0gYnJhY2tldFRheDtcbiAgICAgICAgICAgICAgICByZW1haW5pbmcgLT0gdGF4YWJsZTtcbiAgICAgICAgICAgICAgICBpbmNvbWVVc2VkICs9IHRheGFibGU7XG5cbiAgICAgICAgICAgICAgICBicmVha2Rvd25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBmcm9tOiBgJHticmFja2V0LmZyb219YCxcbiAgICAgICAgICAgICAgICAgICAgdG86IGAke2JyYWNrZXQudG8gPz8gJ0Fib3ZlJ31gLFxuICAgICAgICAgICAgICAgICAgICByYXRlOiBicmFja2V0LnJhdGUsXG4gICAgICAgICAgICAgICAgICAgIGFtb3VudDogYnJhY2tldFRheCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHRheCwgYnJlYWtkb3ducyB9O1xuICAgIH1cbn1cbiJdfQ==
|
package/dist/index.js
CHANGED
|
@@ -26,7 +26,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
26
26
|
return result;
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.Mortgage = exports.CapitalGain = exports.CorporateTax = exports.IncomeTax = exports.CalculatorType = void 0;
|
|
29
|
+
exports.InheritanceTax = exports.Mortgage = exports.CapitalGain = exports.CorporateTax = exports.IncomeTax = exports.CalculatorType = void 0;
|
|
30
30
|
var types_1 = require("./shared/domain/types");
|
|
31
31
|
Object.defineProperty(exports, "CalculatorType", { enumerable: true, get: function () { return types_1.CalculatorType; } });
|
|
32
32
|
__exportStar(require("./income-tax/domain/types"), exports);
|
|
@@ -34,4 +34,5 @@ exports.IncomeTax = __importStar(require("./income-tax"));
|
|
|
34
34
|
exports.CorporateTax = __importStar(require("./corporate"));
|
|
35
35
|
exports.CapitalGain = __importStar(require("./capital-gains"));
|
|
36
36
|
exports.Mortgage = __importStar(require("./mortgage"));
|
|
37
|
-
|
|
37
|
+
exports.InheritanceTax = __importStar(require("./inheritance-tax"));
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBdUQ7QUFBOUMsdUdBQUEsY0FBYyxPQUFBO0FBRXZCLDREQUEwQztBQUUxQywwREFBMEM7QUFDMUMsNERBQTRDO0FBQzVDLCtEQUErQztBQUMvQyx1REFBdUM7QUFDdkMsb0VBQW9EIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgQ2FsY3VsYXRvclR5cGUgfSBmcm9tICcuL3NoYXJlZC9kb21haW4vdHlwZXMnO1xuZXhwb3J0IHsgSW5jb21lVGF4Q2FsY3VsYXRvclNjaGVtYSB9IGZyb20gJy4vaW5jb21lLXRheC9kb21haW4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbmNvbWUtdGF4L2RvbWFpbi90eXBlcyc7XG5cbmV4cG9ydCAqIGFzIEluY29tZVRheCBmcm9tICcuL2luY29tZS10YXgnO1xuZXhwb3J0ICogYXMgQ29ycG9yYXRlVGF4IGZyb20gJy4vY29ycG9yYXRlJztcbmV4cG9ydCAqIGFzIENhcGl0YWxHYWluIGZyb20gJy4vY2FwaXRhbC1nYWlucyc7XG5leHBvcnQgKiBhcyBNb3J0Z2FnZSBmcm9tICcuL21vcnRnYWdlJztcbmV4cG9ydCAqIGFzIEluaGVyaXRhbmNlVGF4IGZyb20gJy4vaW5oZXJpdGFuY2UtdGF4JztcbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVzdHJhbGlhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luaGVyaXRhbmNlLXRheC9hdXN0cmFsaWEvQXVzdHJhbGlhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdXN0cmFsaWFJbmhlcml0YW5jZVRheFNlcnZpY2Uge1xuICAgIGNhbGN1bGF0ZSgpOiBSZXN1bHQ7XG59XG4iXX0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AustraliaInheritanceTaxServiceImpl = void 0;
|
|
4
|
+
class AustraliaInheritanceTaxServiceImpl {
|
|
5
|
+
constructor(input, rules) {
|
|
6
|
+
this._input = input;
|
|
7
|
+
this._rules = rules;
|
|
8
|
+
}
|
|
9
|
+
calculate() {
|
|
10
|
+
return {
|
|
11
|
+
taxableEstate: 0,
|
|
12
|
+
inheritanceTax: 0,
|
|
13
|
+
effectiveRate: 0,
|
|
14
|
+
breakdowns: [],
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.AustraliaInheritanceTaxServiceImpl = AustraliaInheritanceTaxServiceImpl;
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVzdHJhbGlhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbmhlcml0YW5jZS10YXgvYXVzdHJhbGlhL0F1c3RyYWxpYUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsTUFBYSxrQ0FBa0M7SUFJM0MsWUFBWSxLQUFZLEVBQUUsS0FBWTtRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNMLE9BQU87WUFDSCxhQUFhLEVBQUUsQ0FBQztZQUNoQixjQUFjLEVBQUUsQ0FBQztZQUNqQixhQUFhLEVBQUUsQ0FBQztZQUNoQixVQUFVLEVBQUUsRUFBRTtTQUNqQixDQUFDO0lBQ04sQ0FBQztDQUNKO0FBakJELGdGQWlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1c3RyYWxpYUluaGVyaXRhbmNlVGF4U2VydmljZSB9IGZyb20gXCIuL0F1c3RyYWxpYUluaGVyaXRhbmNlVGF4U2VydmljZVwiO1xuaW1wb3J0IHsgSW5wdXQsIFJlc3VsdCwgUnVsZXMgfSBmcm9tIFwiLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGNsYXNzIEF1c3RyYWxpYUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwgaW1wbGVtZW50cyBBdXN0cmFsaWFJbmhlcml0YW5jZVRheFNlcnZpY2Uge1xuICAgIHByaXZhdGUgX2lucHV0OiBJbnB1dDtcbiAgICBwcml2YXRlIF9ydWxlczogUnVsZXM7XG5cbiAgICBjb25zdHJ1Y3RvcihpbnB1dDogSW5wdXQsIHJ1bGVzOiBSdWxlcykge1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZSgpOiBSZXN1bHQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGF4YWJsZUVzdGF0ZTogMCxcbiAgICAgICAgICAgIGluaGVyaXRhbmNlVGF4OiAwLFxuICAgICAgICAgICAgZWZmZWN0aXZlUmF0ZTogMCxcbiAgICAgICAgICAgIGJyZWFrZG93bnM6IFtdLFxuICAgICAgICB9O1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L2F1c3RyYWxpYS9kb21haW4vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrZG93biB9IGZyb20gXCIuLi8uLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSdWxlcyB7XG4gICAgYXBwbGljYWJsZTogZmFsc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXQge1xuICAgIGVzdGF0ZVZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdWx0IHtcbiAgICB0YXhhYmxlRXN0YXRlOiBudW1iZXI7XG4gICAgaW5oZXJpdGFuY2VUYXg6IG51bWJlcjtcbiAgICBlZmZlY3RpdmVSYXRlOiBudW1iZXI7XG4gICAgYnJlYWtkb3duczogQnJlYWtkb3duW107XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FuYWRhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luaGVyaXRhbmNlLXRheC9jYW5hZGEvQ2FuYWRhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDYW5hZGFJbmhlcml0YW5jZVRheFNlcnZpY2Uge1xuICAgIGNhbGN1bGF0ZSgpOiBSZXN1bHQ7XG59XG4iXX0=
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CanadaInheritanceTaxServiceImpl = void 0;
|
|
4
|
+
class CanadaInheritanceTaxServiceImpl {
|
|
5
|
+
constructor(input, rules) {
|
|
6
|
+
this._input = input;
|
|
7
|
+
this._rules = rules;
|
|
8
|
+
}
|
|
9
|
+
calculate() {
|
|
10
|
+
const gain = this._input.estateValue - this._input.adjustedCostBase;
|
|
11
|
+
if (gain <= 0) {
|
|
12
|
+
return {
|
|
13
|
+
taxableEstate: 0,
|
|
14
|
+
inheritanceTax: 0,
|
|
15
|
+
effectiveRate: 0,
|
|
16
|
+
breakdowns: [],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const taxableGain = gain * this._rules.inclusionRate;
|
|
20
|
+
const { tax, breakdowns } = this.applyBrackets(taxableGain, this._rules.taxBrackets);
|
|
21
|
+
return {
|
|
22
|
+
taxableEstate: taxableGain,
|
|
23
|
+
inheritanceTax: tax,
|
|
24
|
+
effectiveRate: gain > 0 ? (tax / gain) * 100 : 0,
|
|
25
|
+
breakdowns,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
applyBrackets(taxableAmount, brackets) {
|
|
29
|
+
let tax = 0;
|
|
30
|
+
const breakdowns = [];
|
|
31
|
+
for (const bracket of brackets) {
|
|
32
|
+
if (taxableAmount <= bracket.from)
|
|
33
|
+
break;
|
|
34
|
+
const upper = bracket.to ?? taxableAmount;
|
|
35
|
+
const taxable = Math.min(upper, taxableAmount) - bracket.from;
|
|
36
|
+
if (taxable > 0) {
|
|
37
|
+
const bracketTax = taxable * bracket.rate;
|
|
38
|
+
tax += bracketTax;
|
|
39
|
+
breakdowns.push({
|
|
40
|
+
from: `${bracket.from}`,
|
|
41
|
+
to: `${bracket.to ?? 'Above'}`,
|
|
42
|
+
rate: bracket.rate,
|
|
43
|
+
amount: bracketTax,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return { tax, breakdowns };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.CanadaInheritanceTaxServiceImpl = CanadaInheritanceTaxServiceImpl;
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FuYWRhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbmhlcml0YW5jZS10YXgvY2FuYWRhL0NhbmFkYUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsTUFBYSwrQkFBK0I7SUFJeEMsWUFBWSxLQUFZLEVBQUUsS0FBWTtRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFFcEUsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDWixPQUFPO2dCQUNILGFBQWEsRUFBRSxDQUFDO2dCQUNoQixjQUFjLEVBQUUsQ0FBQztnQkFDakIsYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLFVBQVUsRUFBRSxFQUFFO2FBQ2pCLENBQUM7UUFDTixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQ3JELE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVyRixPQUFPO1lBQ0gsYUFBYSxFQUFFLFdBQVc7WUFDMUIsY0FBYyxFQUFFLEdBQUc7WUFDbkIsYUFBYSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRCxVQUFVO1NBQ2IsQ0FBQztJQUNOLENBQUM7SUFFTyxhQUFhLENBQ2pCLGFBQXFCLEVBQ3JCLFFBQXNCO1FBRXRCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLE1BQU0sVUFBVSxHQUFnQixFQUFFLENBQUM7UUFFbkMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM3QixJQUFJLGFBQWEsSUFBSSxPQUFPLENBQUMsSUFBSTtnQkFBRSxNQUFNO1lBRXpDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksYUFBYSxDQUFDO1lBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFFOUQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxVQUFVLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQzFDLEdBQUcsSUFBSSxVQUFVLENBQUM7Z0JBRWxCLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ1osSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRTtvQkFDdkIsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsSUFBSSxPQUFPLEVBQUU7b0JBQzlCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDbEIsTUFBTSxFQUFFLFVBQVU7aUJBQ3JCLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUMvQixDQUFDO0NBQ0o7QUE1REQsMEVBNERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtkb3duIH0gZnJvbSBcIi4uL2RvbWFpbi90eXBlc1wiO1xuaW1wb3J0IHsgQ2FuYWRhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlIH0gZnJvbSBcIi4vQ2FuYWRhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlXCI7XG5pbXBvcnQgeyBJbnB1dCwgUmVzdWx0LCBSdWxlcywgVGF4QnJhY2tldCB9IGZyb20gXCIuL2RvbWFpbi90eXBlc1wiO1xuXG5leHBvcnQgY2xhc3MgQ2FuYWRhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIENhbmFkYUluaGVyaXRhbmNlVGF4U2VydmljZSB7XG4gICAgcHJpdmF0ZSBfaW5wdXQ6IElucHV0O1xuICAgIHByaXZhdGUgX3J1bGVzOiBSdWxlcztcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0OiBJbnB1dCwgcnVsZXM6IFJ1bGVzKSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX3J1bGVzID0gcnVsZXM7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlKCk6IFJlc3VsdCB7XG4gICAgICAgIGNvbnN0IGdhaW4gPSB0aGlzLl9pbnB1dC5lc3RhdGVWYWx1ZSAtIHRoaXMuX2lucHV0LmFkanVzdGVkQ29zdEJhc2U7XG5cbiAgICAgICAgaWYgKGdhaW4gPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0YXhhYmxlRXN0YXRlOiAwLFxuICAgICAgICAgICAgICAgIGluaGVyaXRhbmNlVGF4OiAwLFxuICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVJhdGU6IDAsXG4gICAgICAgICAgICAgICAgYnJlYWtkb3duczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGF4YWJsZUdhaW4gPSBnYWluICogdGhpcy5fcnVsZXMuaW5jbHVzaW9uUmF0ZTtcbiAgICAgICAgY29uc3QgeyB0YXgsIGJyZWFrZG93bnMgfSA9IHRoaXMuYXBwbHlCcmFja2V0cyh0YXhhYmxlR2FpbiwgdGhpcy5fcnVsZXMudGF4QnJhY2tldHMpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0YXhhYmxlRXN0YXRlOiB0YXhhYmxlR2FpbixcbiAgICAgICAgICAgIGluaGVyaXRhbmNlVGF4OiB0YXgsXG4gICAgICAgICAgICBlZmZlY3RpdmVSYXRlOiBnYWluID4gMCA/ICh0YXggLyBnYWluKSAqIDEwMCA6IDAsXG4gICAgICAgICAgICBicmVha2Rvd25zLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlCcmFja2V0cyhcbiAgICAgICAgdGF4YWJsZUFtb3VudDogbnVtYmVyLFxuICAgICAgICBicmFja2V0czogVGF4QnJhY2tldFtdLFxuICAgICk6IHsgdGF4OiBudW1iZXI7IGJyZWFrZG93bnM6IEJyZWFrZG93bltdIH0ge1xuICAgICAgICBsZXQgdGF4ID0gMDtcbiAgICAgICAgY29uc3QgYnJlYWtkb3duczogQnJlYWtkb3duW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGJyYWNrZXQgb2YgYnJhY2tldHMpIHtcbiAgICAgICAgICAgIGlmICh0YXhhYmxlQW1vdW50IDw9IGJyYWNrZXQuZnJvbSkgYnJlYWs7XG5cbiAgICAgICAgICAgIGNvbnN0IHVwcGVyID0gYnJhY2tldC50byA/PyB0YXhhYmxlQW1vdW50O1xuICAgICAgICAgICAgY29uc3QgdGF4YWJsZSA9IE1hdGgubWluKHVwcGVyLCB0YXhhYmxlQW1vdW50KSAtIGJyYWNrZXQuZnJvbTtcblxuICAgICAgICAgICAgaWYgKHRheGFibGUgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnJhY2tldFRheCA9IHRheGFibGUgKiBicmFja2V0LnJhdGU7XG4gICAgICAgICAgICAgICAgdGF4ICs9IGJyYWNrZXRUYXg7XG5cbiAgICAgICAgICAgICAgICBicmVha2Rvd25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBmcm9tOiBgJHticmFja2V0LmZyb219YCxcbiAgICAgICAgICAgICAgICAgICAgdG86IGAke2JyYWNrZXQudG8gPz8gJ0Fib3ZlJ31gLFxuICAgICAgICAgICAgICAgICAgICByYXRlOiBicmFja2V0LnJhdGUsXG4gICAgICAgICAgICAgICAgICAgIGFtb3VudDogYnJhY2tldFRheCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHRheCwgYnJlYWtkb3ducyB9O1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L2NhbmFkYS9kb21haW4vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrZG93biB9IGZyb20gXCIuLi8uLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBUYXhCcmFja2V0IHtcbiAgICBmcm9tOiBudW1iZXI7XG4gICAgdG86IG51bWJlciB8IG51bGw7XG4gICAgcmF0ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVzIHtcbiAgICBpbmNsdXNpb25SYXRlOiBudW1iZXI7XG4gICAgdGF4QnJhY2tldHM6IFRheEJyYWNrZXRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgZXN0YXRlVmFsdWU6IG51bWJlcjtcbiAgICBhZGp1c3RlZENvc3RCYXNlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdWx0IHtcbiAgICB0YXhhYmxlRXN0YXRlOiBudW1iZXI7XG4gICAgaW5oZXJpdGFuY2VUYXg6IG51bWJlcjtcbiAgICBlZmZlY3RpdmVSYXRlOiBudW1iZXI7XG4gICAgYnJlYWtkb3duczogQnJlYWtkb3duW107XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L2RvbWFpbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBUYXhCcmFja2V0IHtcbiAgICBmcm9tOiBudW1iZXI7XG4gICAgdG86IG51bWJlciB8IG51bGw7XG4gICAgcmF0ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJyZWFrZG93biB7XG4gICAgZnJvbTogc3RyaW5nO1xuICAgIHRvOiBzdHJpbmc7XG4gICAgcmF0ZTogbnVtYmVyO1xuICAgIGFtb3VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3VsdCB7XG4gICAgdGF4YWJsZUVzdGF0ZTogbnVtYmVyO1xuICAgIGluaGVyaXRhbmNlVGF4OiBudW1iZXI7XG4gICAgZWZmZWN0aXZlUmF0ZTogbnVtYmVyO1xuICAgIGJyZWFrZG93bnM6IEJyZWFrZG93bltdO1xufVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnJhbmNlSW5oZXJpdGFuY2VUYXhTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luaGVyaXRhbmNlLXRheC9mcmFuY2UvRnJhbmNlSW5oZXJpdGFuY2VUYXhTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBGcmFuY2VJbmhlcml0YW5jZVRheFNlcnZpY2Uge1xuICAgIGNhbGN1bGF0ZSgpOiBSZXN1bHQ7XG59XG4iXX0=
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FranceInheritanceTaxServiceImpl = void 0;
|
|
4
|
+
class FranceInheritanceTaxServiceImpl {
|
|
5
|
+
constructor(input, rules) {
|
|
6
|
+
this._input = input;
|
|
7
|
+
this._rules = rules;
|
|
8
|
+
}
|
|
9
|
+
calculate() {
|
|
10
|
+
const estate = this._input.estateValue;
|
|
11
|
+
const relationship = this._rules.relationships[this._input.relationship];
|
|
12
|
+
if (estate <= 0 || estate <= relationship.exemption) {
|
|
13
|
+
return {
|
|
14
|
+
taxableEstate: 0,
|
|
15
|
+
inheritanceTax: 0,
|
|
16
|
+
effectiveRate: 0,
|
|
17
|
+
breakdowns: [],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const taxableEstate = estate - relationship.exemption;
|
|
21
|
+
const { tax, breakdowns } = this.applyBrackets(taxableEstate, relationship.brackets);
|
|
22
|
+
return {
|
|
23
|
+
taxableEstate,
|
|
24
|
+
inheritanceTax: tax,
|
|
25
|
+
effectiveRate: estate > 0 ? (tax / estate) * 100 : 0,
|
|
26
|
+
breakdowns,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
applyBrackets(taxableAmount, brackets) {
|
|
30
|
+
let tax = 0;
|
|
31
|
+
const breakdowns = [];
|
|
32
|
+
for (const bracket of brackets) {
|
|
33
|
+
if (taxableAmount <= bracket.from)
|
|
34
|
+
break;
|
|
35
|
+
const upper = bracket.to ?? taxableAmount;
|
|
36
|
+
const taxable = Math.min(upper, taxableAmount) - bracket.from;
|
|
37
|
+
if (taxable > 0) {
|
|
38
|
+
const bracketTax = taxable * bracket.rate;
|
|
39
|
+
tax += bracketTax;
|
|
40
|
+
breakdowns.push({
|
|
41
|
+
from: `${bracket.from}`,
|
|
42
|
+
to: `${bracket.to ?? 'Above'}`,
|
|
43
|
+
rate: bracket.rate,
|
|
44
|
+
amount: bracketTax,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return { tax, breakdowns };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.FranceInheritanceTaxServiceImpl = FranceInheritanceTaxServiceImpl;
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnJhbmNlSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbmhlcml0YW5jZS10YXgvZnJhbmNlL0ZyYW5jZUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsTUFBYSwrQkFBK0I7SUFJeEMsWUFBWSxLQUFZLEVBQUUsS0FBWTtRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFekUsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sSUFBSSxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEQsT0FBTztnQkFDSCxhQUFhLEVBQUUsQ0FBQztnQkFDaEIsY0FBYyxFQUFFLENBQUM7Z0JBQ2pCLGFBQWEsRUFBRSxDQUFDO2dCQUNoQixVQUFVLEVBQUUsRUFBRTthQUNqQixDQUFDO1FBQ04sQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQ3RELE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXJGLE9BQU87WUFDSCxhQUFhO1lBQ2IsY0FBYyxFQUFFLEdBQUc7WUFDbkIsYUFBYSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRCxVQUFVO1NBQ2IsQ0FBQztJQUNOLENBQUM7SUFFTyxhQUFhLENBQ2pCLGFBQXFCLEVBQ3JCLFFBQXNCO1FBRXRCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLE1BQU0sVUFBVSxHQUFnQixFQUFFLENBQUM7UUFFbkMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM3QixJQUFJLGFBQWEsSUFBSSxPQUFPLENBQUMsSUFBSTtnQkFBRSxNQUFNO1lBRXpDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksYUFBYSxDQUFDO1lBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFFOUQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxVQUFVLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQzFDLEdBQUcsSUFBSSxVQUFVLENBQUM7Z0JBRWxCLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ1osSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRTtvQkFDdkIsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsSUFBSSxPQUFPLEVBQUU7b0JBQzlCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDbEIsTUFBTSxFQUFFLFVBQVU7aUJBQ3JCLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUMvQixDQUFDO0NBQ0o7QUE3REQsMEVBNkRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtkb3duIH0gZnJvbSBcIi4uL2RvbWFpbi90eXBlc1wiO1xuaW1wb3J0IHsgRnJhbmNlSW5oZXJpdGFuY2VUYXhTZXJ2aWNlIH0gZnJvbSBcIi4vRnJhbmNlSW5oZXJpdGFuY2VUYXhTZXJ2aWNlXCI7XG5pbXBvcnQgeyBJbnB1dCwgUmVzdWx0LCBSdWxlcywgVGF4QnJhY2tldCB9IGZyb20gXCIuL2RvbWFpbi90eXBlc1wiO1xuXG5leHBvcnQgY2xhc3MgRnJhbmNlSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIEZyYW5jZUluaGVyaXRhbmNlVGF4U2VydmljZSB7XG4gICAgcHJpdmF0ZSBfaW5wdXQ6IElucHV0O1xuICAgIHByaXZhdGUgX3J1bGVzOiBSdWxlcztcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0OiBJbnB1dCwgcnVsZXM6IFJ1bGVzKSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX3J1bGVzID0gcnVsZXM7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlKCk6IFJlc3VsdCB7XG4gICAgICAgIGNvbnN0IGVzdGF0ZSA9IHRoaXMuX2lucHV0LmVzdGF0ZVZhbHVlO1xuICAgICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSB0aGlzLl9ydWxlcy5yZWxhdGlvbnNoaXBzW3RoaXMuX2lucHV0LnJlbGF0aW9uc2hpcF07XG5cbiAgICAgICAgaWYgKGVzdGF0ZSA8PSAwIHx8IGVzdGF0ZSA8PSByZWxhdGlvbnNoaXAuZXhlbXB0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRheGFibGVFc3RhdGU6IDAsXG4gICAgICAgICAgICAgICAgaW5oZXJpdGFuY2VUYXg6IDAsXG4gICAgICAgICAgICAgICAgZWZmZWN0aXZlUmF0ZTogMCxcbiAgICAgICAgICAgICAgICBicmVha2Rvd25zOiBbXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXhhYmxlRXN0YXRlID0gZXN0YXRlIC0gcmVsYXRpb25zaGlwLmV4ZW1wdGlvbjtcbiAgICAgICAgY29uc3QgeyB0YXgsIGJyZWFrZG93bnMgfSA9IHRoaXMuYXBwbHlCcmFja2V0cyh0YXhhYmxlRXN0YXRlLCByZWxhdGlvbnNoaXAuYnJhY2tldHMpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0YXhhYmxlRXN0YXRlLFxuICAgICAgICAgICAgaW5oZXJpdGFuY2VUYXg6IHRheCxcbiAgICAgICAgICAgIGVmZmVjdGl2ZVJhdGU6IGVzdGF0ZSA+IDAgPyAodGF4IC8gZXN0YXRlKSAqIDEwMCA6IDAsXG4gICAgICAgICAgICBicmVha2Rvd25zLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlCcmFja2V0cyhcbiAgICAgICAgdGF4YWJsZUFtb3VudDogbnVtYmVyLFxuICAgICAgICBicmFja2V0czogVGF4QnJhY2tldFtdLFxuICAgICk6IHsgdGF4OiBudW1iZXI7IGJyZWFrZG93bnM6IEJyZWFrZG93bltdIH0ge1xuICAgICAgICBsZXQgdGF4ID0gMDtcbiAgICAgICAgY29uc3QgYnJlYWtkb3duczogQnJlYWtkb3duW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGJyYWNrZXQgb2YgYnJhY2tldHMpIHtcbiAgICAgICAgICAgIGlmICh0YXhhYmxlQW1vdW50IDw9IGJyYWNrZXQuZnJvbSkgYnJlYWs7XG5cbiAgICAgICAgICAgIGNvbnN0IHVwcGVyID0gYnJhY2tldC50byA/PyB0YXhhYmxlQW1vdW50O1xuICAgICAgICAgICAgY29uc3QgdGF4YWJsZSA9IE1hdGgubWluKHVwcGVyLCB0YXhhYmxlQW1vdW50KSAtIGJyYWNrZXQuZnJvbTtcblxuICAgICAgICAgICAgaWYgKHRheGFibGUgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnJhY2tldFRheCA9IHRheGFibGUgKiBicmFja2V0LnJhdGU7XG4gICAgICAgICAgICAgICAgdGF4ICs9IGJyYWNrZXRUYXg7XG5cbiAgICAgICAgICAgICAgICBicmVha2Rvd25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBmcm9tOiBgJHticmFja2V0LmZyb219YCxcbiAgICAgICAgICAgICAgICAgICAgdG86IGAke2JyYWNrZXQudG8gPz8gJ0Fib3ZlJ31gLFxuICAgICAgICAgICAgICAgICAgICByYXRlOiBicmFja2V0LnJhdGUsXG4gICAgICAgICAgICAgICAgICAgIGFtb3VudDogYnJhY2tldFRheCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHRheCwgYnJlYWtkb3ducyB9O1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L2ZyYW5jZS9kb21haW4vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrZG93biB9IGZyb20gXCIuLi8uLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBUYXhCcmFja2V0IHtcbiAgICBmcm9tOiBudW1iZXI7XG4gICAgdG86IG51bWJlciB8IG51bGw7XG4gICAgcmF0ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbGF0aW9uc2hpcENsYXNzIHtcbiAgICBleGVtcHRpb246IG51bWJlcjtcbiAgICBicmFja2V0czogVGF4QnJhY2tldFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVzIHtcbiAgICByZWxhdGlvbnNoaXBzOiB7XG4gICAgICAgIHNwb3VzZTogUmVsYXRpb25zaGlwQ2xhc3M7XG4gICAgICAgIGNoaWxkOiBSZWxhdGlvbnNoaXBDbGFzcztcbiAgICAgICAgc2libGluZzogUmVsYXRpb25zaGlwQ2xhc3M7XG4gICAgICAgIG90aGVyOiBSZWxhdGlvbnNoaXBDbGFzcztcbiAgICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZWxhdGlvbnNoaXBUeXBlID0gJ3Nwb3VzZScgfCAnY2hpbGQnIHwgJ3NpYmxpbmcnIHwgJ290aGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgZXN0YXRlVmFsdWU6IG51bWJlcjtcbiAgICByZWxhdGlvbnNoaXA6IFJlbGF0aW9uc2hpcFR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdWx0IHtcbiAgICB0YXhhYmxlRXN0YXRlOiBudW1iZXI7XG4gICAgaW5oZXJpdGFuY2VUYXg6IG51bWJlcjtcbiAgICBlZmZlY3RpdmVSYXRlOiBudW1iZXI7XG4gICAgYnJlYWtkb3duczogQnJlYWtkb3duW107XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VybWFueUluaGVyaXRhbmNlVGF4U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbmhlcml0YW5jZS10YXgvZ2VybWFueS9HZXJtYW55SW5oZXJpdGFuY2VUYXhTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHZXJtYW55SW5oZXJpdGFuY2VUYXhTZXJ2aWNlIHtcbiAgICBjYWxjdWxhdGUoKTogUmVzdWx0O1xufVxuIl19
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GermanyInheritanceTaxServiceImpl = void 0;
|
|
4
|
+
class GermanyInheritanceTaxServiceImpl {
|
|
5
|
+
constructor(input, rules) {
|
|
6
|
+
this._input = input;
|
|
7
|
+
this._rules = rules;
|
|
8
|
+
}
|
|
9
|
+
calculate() {
|
|
10
|
+
const estate = this._input.estateValue;
|
|
11
|
+
const taxClass = this._rules.taxClasses[this._input.taxClass];
|
|
12
|
+
if (estate <= 0 || estate <= taxClass.exemption) {
|
|
13
|
+
return {
|
|
14
|
+
taxableEstate: 0,
|
|
15
|
+
inheritanceTax: 0,
|
|
16
|
+
effectiveRate: 0,
|
|
17
|
+
breakdowns: [],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const taxableEstate = estate - taxClass.exemption;
|
|
21
|
+
const { tax, breakdowns } = this.applyBrackets(taxableEstate, taxClass.brackets);
|
|
22
|
+
return {
|
|
23
|
+
taxableEstate,
|
|
24
|
+
inheritanceTax: tax,
|
|
25
|
+
effectiveRate: estate > 0 ? (tax / estate) * 100 : 0,
|
|
26
|
+
breakdowns,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
applyBrackets(taxableAmount, brackets) {
|
|
30
|
+
let tax = 0;
|
|
31
|
+
const breakdowns = [];
|
|
32
|
+
for (const bracket of brackets) {
|
|
33
|
+
if (taxableAmount <= bracket.from)
|
|
34
|
+
break;
|
|
35
|
+
const upper = bracket.to ?? taxableAmount;
|
|
36
|
+
const taxable = Math.min(upper, taxableAmount) - bracket.from;
|
|
37
|
+
if (taxable > 0) {
|
|
38
|
+
const bracketTax = taxable * bracket.rate;
|
|
39
|
+
tax += bracketTax;
|
|
40
|
+
breakdowns.push({
|
|
41
|
+
from: `${bracket.from}`,
|
|
42
|
+
to: `${bracket.to ?? 'Above'}`,
|
|
43
|
+
rate: bracket.rate,
|
|
44
|
+
amount: bracketTax,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return { tax, breakdowns };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.GermanyInheritanceTaxServiceImpl = GermanyInheritanceTaxServiceImpl;
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VybWFueUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L2dlcm1hbnkvR2VybWFueUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsTUFBYSxnQ0FBZ0M7SUFJekMsWUFBWSxLQUFZLEVBQUUsS0FBWTtRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUQsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUMsT0FBTztnQkFDSCxhQUFhLEVBQUUsQ0FBQztnQkFDaEIsY0FBYyxFQUFFLENBQUM7Z0JBQ2pCLGFBQWEsRUFBRSxDQUFDO2dCQUNoQixVQUFVLEVBQUUsRUFBRTthQUNqQixDQUFDO1FBQ04sQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ2xELE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWpGLE9BQU87WUFDSCxhQUFhO1lBQ2IsY0FBYyxFQUFFLEdBQUc7WUFDbkIsYUFBYSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRCxVQUFVO1NBQ2IsQ0FBQztJQUNOLENBQUM7SUFFTyxhQUFhLENBQ2pCLGFBQXFCLEVBQ3JCLFFBQXNCO1FBRXRCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLE1BQU0sVUFBVSxHQUFnQixFQUFFLENBQUM7UUFFbkMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM3QixJQUFJLGFBQWEsSUFBSSxPQUFPLENBQUMsSUFBSTtnQkFBRSxNQUFNO1lBRXpDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksYUFBYSxDQUFDO1lBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFFOUQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxVQUFVLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQzFDLEdBQUcsSUFBSSxVQUFVLENBQUM7Z0JBRWxCLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ1osSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRTtvQkFDdkIsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsSUFBSSxPQUFPLEVBQUU7b0JBQzlCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDbEIsTUFBTSxFQUFFLFVBQVU7aUJBQ3JCLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUMvQixDQUFDO0NBQ0o7QUE3REQsNEVBNkRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtkb3duIH0gZnJvbSBcIi4uL2RvbWFpbi90eXBlc1wiO1xuaW1wb3J0IHsgR2VybWFueUluaGVyaXRhbmNlVGF4U2VydmljZSB9IGZyb20gXCIuL0dlcm1hbnlJbmhlcml0YW5jZVRheFNlcnZpY2VcIjtcbmltcG9ydCB7IElucHV0LCBSZXN1bHQsIFJ1bGVzLCBUYXhCcmFja2V0IH0gZnJvbSBcIi4vZG9tYWluL3R5cGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBHZXJtYW55SW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIEdlcm1hbnlJbmhlcml0YW5jZVRheFNlcnZpY2Uge1xuICAgIHByaXZhdGUgX2lucHV0OiBJbnB1dDtcbiAgICBwcml2YXRlIF9ydWxlczogUnVsZXM7XG5cbiAgICBjb25zdHJ1Y3RvcihpbnB1dDogSW5wdXQsIHJ1bGVzOiBSdWxlcykge1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZSgpOiBSZXN1bHQge1xuICAgICAgICBjb25zdCBlc3RhdGUgPSB0aGlzLl9pbnB1dC5lc3RhdGVWYWx1ZTtcbiAgICAgICAgY29uc3QgdGF4Q2xhc3MgPSB0aGlzLl9ydWxlcy50YXhDbGFzc2VzW3RoaXMuX2lucHV0LnRheENsYXNzXTtcblxuICAgICAgICBpZiAoZXN0YXRlIDw9IDAgfHwgZXN0YXRlIDw9IHRheENsYXNzLmV4ZW1wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0YXhhYmxlRXN0YXRlOiAwLFxuICAgICAgICAgICAgICAgIGluaGVyaXRhbmNlVGF4OiAwLFxuICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVJhdGU6IDAsXG4gICAgICAgICAgICAgICAgYnJlYWtkb3duczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGF4YWJsZUVzdGF0ZSA9IGVzdGF0ZSAtIHRheENsYXNzLmV4ZW1wdGlvbjtcbiAgICAgICAgY29uc3QgeyB0YXgsIGJyZWFrZG93bnMgfSA9IHRoaXMuYXBwbHlCcmFja2V0cyh0YXhhYmxlRXN0YXRlLCB0YXhDbGFzcy5icmFja2V0cyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRheGFibGVFc3RhdGUsXG4gICAgICAgICAgICBpbmhlcml0YW5jZVRheDogdGF4LFxuICAgICAgICAgICAgZWZmZWN0aXZlUmF0ZTogZXN0YXRlID4gMCA/ICh0YXggLyBlc3RhdGUpICogMTAwIDogMCxcbiAgICAgICAgICAgIGJyZWFrZG93bnMsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseUJyYWNrZXRzKFxuICAgICAgICB0YXhhYmxlQW1vdW50OiBudW1iZXIsXG4gICAgICAgIGJyYWNrZXRzOiBUYXhCcmFja2V0W10sXG4gICAgKTogeyB0YXg6IG51bWJlcjsgYnJlYWtkb3duczogQnJlYWtkb3duW10gfSB7XG4gICAgICAgIGxldCB0YXggPSAwO1xuICAgICAgICBjb25zdCBicmVha2Rvd25zOiBCcmVha2Rvd25bXSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgYnJhY2tldCBvZiBicmFja2V0cykge1xuICAgICAgICAgICAgaWYgKHRheGFibGVBbW91bnQgPD0gYnJhY2tldC5mcm9tKSBicmVhaztcblxuICAgICAgICAgICAgY29uc3QgdXBwZXIgPSBicmFja2V0LnRvID8/IHRheGFibGVBbW91bnQ7XG4gICAgICAgICAgICBjb25zdCB0YXhhYmxlID0gTWF0aC5taW4odXBwZXIsIHRheGFibGVBbW91bnQpIC0gYnJhY2tldC5mcm9tO1xuXG4gICAgICAgICAgICBpZiAodGF4YWJsZSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBicmFja2V0VGF4ID0gdGF4YWJsZSAqIGJyYWNrZXQucmF0ZTtcbiAgICAgICAgICAgICAgICB0YXggKz0gYnJhY2tldFRheDtcblxuICAgICAgICAgICAgICAgIGJyZWFrZG93bnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGZyb206IGAke2JyYWNrZXQuZnJvbX1gLFxuICAgICAgICAgICAgICAgICAgICB0bzogYCR7YnJhY2tldC50byA/PyAnQWJvdmUnfWAsXG4gICAgICAgICAgICAgICAgICAgIHJhdGU6IGJyYWNrZXQucmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50OiBicmFja2V0VGF4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgdGF4LCBicmVha2Rvd25zIH07XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L2dlcm1hbnkvZG9tYWluL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha2Rvd24gfSBmcm9tIFwiLi4vLi4vZG9tYWluL3R5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGF4QnJhY2tldCB7XG4gICAgZnJvbTogbnVtYmVyO1xuICAgIHRvOiBudW1iZXIgfCBudWxsO1xuICAgIHJhdGU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYXhDbGFzcyB7XG4gICAgZXhlbXB0aW9uOiBudW1iZXI7XG4gICAgYnJhY2tldHM6IFRheEJyYWNrZXRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdWxlcyB7XG4gICAgdGF4Q2xhc3Nlczoge1xuICAgICAgICBJOiBUYXhDbGFzcztcbiAgICAgICAgSUk6IFRheENsYXNzO1xuICAgICAgICBJSUk6IFRheENsYXNzO1xuICAgIH07XG59XG5cbmV4cG9ydCB0eXBlIFRheENsYXNzTmFtZSA9ICdJJyB8ICdJSScgfCAnSUlJJztcblxuZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgZXN0YXRlVmFsdWU6IG51bWJlcjtcbiAgICB0YXhDbGFzczogVGF4Q2xhc3NOYW1lO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3VsdCB7XG4gICAgdGF4YWJsZUVzdGF0ZTogbnVtYmVyO1xuICAgIGluaGVyaXRhbmNlVGF4OiBudW1iZXI7XG4gICAgZWZmZWN0aXZlUmF0ZTogbnVtYmVyO1xuICAgIGJyZWFrZG93bnM6IEJyZWFrZG93bltdO1xufVxuIl19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GermanyInheritanceTaxService = exports.USAInheritanceTaxService = exports.UKInheritanceTaxService = exports.AustraliaInheritanceTaxService = exports.SouthAfricaInheritanceTaxService = exports.FranceInheritanceTaxService = exports.CanadaInheritanceTaxService = void 0;
|
|
4
|
+
// Canada
|
|
5
|
+
const CanadaInheritanceTaxServiceImpl_1 = require("./canada/CanadaInheritanceTaxServiceImpl");
|
|
6
|
+
Object.defineProperty(exports, "CanadaInheritanceTaxService", { enumerable: true, get: function () { return CanadaInheritanceTaxServiceImpl_1.CanadaInheritanceTaxServiceImpl; } });
|
|
7
|
+
// France
|
|
8
|
+
const FranceInheritanceTaxServiceImpl_1 = require("./france/FranceInheritanceTaxServiceImpl");
|
|
9
|
+
Object.defineProperty(exports, "FranceInheritanceTaxService", { enumerable: true, get: function () { return FranceInheritanceTaxServiceImpl_1.FranceInheritanceTaxServiceImpl; } });
|
|
10
|
+
// South Africa
|
|
11
|
+
const SouthAfricaInheritanceTaxServiceImpl_1 = require("./south-africa/SouthAfricaInheritanceTaxServiceImpl");
|
|
12
|
+
Object.defineProperty(exports, "SouthAfricaInheritanceTaxService", { enumerable: true, get: function () { return SouthAfricaInheritanceTaxServiceImpl_1.SouthAfricaInheritanceTaxServiceImpl; } });
|
|
13
|
+
// Australia
|
|
14
|
+
const AustraliaInheritanceTaxServiceImpl_1 = require("./australia/AustraliaInheritanceTaxServiceImpl");
|
|
15
|
+
Object.defineProperty(exports, "AustraliaInheritanceTaxService", { enumerable: true, get: function () { return AustraliaInheritanceTaxServiceImpl_1.AustraliaInheritanceTaxServiceImpl; } });
|
|
16
|
+
// UK
|
|
17
|
+
const UKInheritanceTaxServiceImpl_1 = require("./uk/UKInheritanceTaxServiceImpl");
|
|
18
|
+
Object.defineProperty(exports, "UKInheritanceTaxService", { enumerable: true, get: function () { return UKInheritanceTaxServiceImpl_1.UKInheritanceTaxServiceImpl; } });
|
|
19
|
+
// USA
|
|
20
|
+
const USAInheritanceTaxServiceImpl_1 = require("./usa/USAInheritanceTaxServiceImpl");
|
|
21
|
+
Object.defineProperty(exports, "USAInheritanceTaxService", { enumerable: true, get: function () { return USAInheritanceTaxServiceImpl_1.USAInheritanceTaxServiceImpl; } });
|
|
22
|
+
// Germany
|
|
23
|
+
const GermanyInheritanceTaxServiceImpl_1 = require("./germany/GermanyInheritanceTaxServiceImpl");
|
|
24
|
+
Object.defineProperty(exports, "GermanyInheritanceTaxService", { enumerable: true, get: function () { return GermanyInheritanceTaxServiceImpl_1.GermanyInheritanceTaxServiceImpl; } });
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQVM7QUFDVCw4RkFBMEg7QUF3RHRILDRHQXhEd0MsaUVBQTJCLE9Bd0R4QztBQWpEL0IsU0FBUztBQUNULDhGQUEwSDtBQW9EdEgsNEdBcER3QyxpRUFBMkIsT0FvRHhDO0FBN0MvQixlQUFlO0FBQ2YsOEdBQStJO0FBZ0QzSSxpSEFoRDZDLDJFQUFnQyxPQWdEN0M7QUF6Q3BDLFlBQVk7QUFDWix1R0FBc0k7QUE0Q2xJLCtHQTVDMkMsdUVBQThCLE9BNEMzQztBQXJDbEMsS0FBSztBQUNMLGtGQUEwRztBQXdDdEcsd0dBeENvQyx5REFBdUIsT0F3Q3BDO0FBakMzQixNQUFNO0FBQ04scUZBQThHO0FBb0MxRyx5R0FwQ3FDLDJEQUF3QixPQW9DckM7QUE3QjVCLFVBQVU7QUFDVixpR0FBOEg7QUFnQzFILDZHQWhDeUMsbUVBQTRCLE9BZ0N6QyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENhbmFkYVxuaW1wb3J0IHsgQ2FuYWRhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCBhcyBDYW5hZGFJbmhlcml0YW5jZVRheFNlcnZpY2UgfSBmcm9tICcuL2NhbmFkYS9DYW5hZGFJbmhlcml0YW5jZVRheFNlcnZpY2VJbXBsJztcbmltcG9ydCB7XG4gICAgSW5wdXQgYXMgQ2FuYWRhSW5oZXJpdGFuY2VUYXhJbnB1dCxcbiAgICBSdWxlcyBhcyBDYW5hZGFJbmhlcml0YW5jZVRheFJ1bGVzLFxuICAgIFJlc3VsdCBhcyBDYW5hZGFJbmhlcml0YW5jZVRheFJlc3VsdCxcbn0gZnJvbSAnLi9jYW5hZGEvZG9tYWluL3R5cGVzJztcblxuLy8gRnJhbmNlXG5pbXBvcnQgeyBGcmFuY2VJbmhlcml0YW5jZVRheFNlcnZpY2VJbXBsIGFzIEZyYW5jZUluaGVyaXRhbmNlVGF4U2VydmljZSB9IGZyb20gJy4vZnJhbmNlL0ZyYW5jZUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwnO1xuaW1wb3J0IHtcbiAgICBJbnB1dCBhcyBGcmFuY2VJbmhlcml0YW5jZVRheElucHV0LFxuICAgIFJ1bGVzIGFzIEZyYW5jZUluaGVyaXRhbmNlVGF4UnVsZXMsXG4gICAgUmVzdWx0IGFzIEZyYW5jZUluaGVyaXRhbmNlVGF4UmVzdWx0LFxufSBmcm9tICcuL2ZyYW5jZS9kb21haW4vdHlwZXMnO1xuXG4vLyBTb3V0aCBBZnJpY2FcbmltcG9ydCB7IFNvdXRoQWZyaWNhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCBhcyBTb3V0aEFmcmljYUluaGVyaXRhbmNlVGF4U2VydmljZSB9IGZyb20gJy4vc291dGgtYWZyaWNhL1NvdXRoQWZyaWNhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCc7XG5pbXBvcnQge1xuICAgIElucHV0IGFzIFNvdXRoQWZyaWNhSW5oZXJpdGFuY2VUYXhJbnB1dCxcbiAgICBSdWxlcyBhcyBTb3V0aEFmcmljYUluaGVyaXRhbmNlVGF4UnVsZXMsXG4gICAgUmVzdWx0IGFzIFNvdXRoQWZyaWNhSW5oZXJpdGFuY2VUYXhSZXN1bHQsXG59IGZyb20gJy4vc291dGgtYWZyaWNhL2RvbWFpbi90eXBlcyc7XG5cbi8vIEF1c3RyYWxpYVxuaW1wb3J0IHsgQXVzdHJhbGlhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCBhcyBBdXN0cmFsaWFJbmhlcml0YW5jZVRheFNlcnZpY2UgfSBmcm9tICcuL2F1c3RyYWxpYS9BdXN0cmFsaWFJbmhlcml0YW5jZVRheFNlcnZpY2VJbXBsJztcbmltcG9ydCB7XG4gICAgSW5wdXQgYXMgQXVzdHJhbGlhSW5oZXJpdGFuY2VUYXhJbnB1dCxcbiAgICBSdWxlcyBhcyBBdXN0cmFsaWFJbmhlcml0YW5jZVRheFJ1bGVzLFxuICAgIFJlc3VsdCBhcyBBdXN0cmFsaWFJbmhlcml0YW5jZVRheFJlc3VsdCxcbn0gZnJvbSAnLi9hdXN0cmFsaWEvZG9tYWluL3R5cGVzJztcblxuLy8gVUtcbmltcG9ydCB7IFVLSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCBhcyBVS0luaGVyaXRhbmNlVGF4U2VydmljZSB9IGZyb20gJy4vdWsvVUtJbmhlcml0YW5jZVRheFNlcnZpY2VJbXBsJztcbmltcG9ydCB7XG4gICAgSW5wdXQgYXMgVUtJbmhlcml0YW5jZVRheElucHV0LFxuICAgIFJ1bGVzIGFzIFVLSW5oZXJpdGFuY2VUYXhSdWxlcyxcbiAgICBSZXN1bHQgYXMgVUtJbmhlcml0YW5jZVRheFJlc3VsdCxcbn0gZnJvbSAnLi91ay9kb21haW4vdHlwZXMnO1xuXG4vLyBVU0FcbmltcG9ydCB7IFVTQUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwgYXMgVVNBSW5oZXJpdGFuY2VUYXhTZXJ2aWNlIH0gZnJvbSAnLi91c2EvVVNBSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCc7XG5pbXBvcnQge1xuICAgIElucHV0IGFzIFVTQUluaGVyaXRhbmNlVGF4SW5wdXQsXG4gICAgUnVsZXMgYXMgVVNBSW5oZXJpdGFuY2VUYXhSdWxlcyxcbiAgICBSZXN1bHQgYXMgVVNBSW5oZXJpdGFuY2VUYXhSZXN1bHQsXG59IGZyb20gJy4vdXNhL2RvbWFpbi90eXBlcyc7XG5cbi8vIEdlcm1hbnlcbmltcG9ydCB7IEdlcm1hbnlJbmhlcml0YW5jZVRheFNlcnZpY2VJbXBsIGFzIEdlcm1hbnlJbmhlcml0YW5jZVRheFNlcnZpY2UgfSBmcm9tICcuL2dlcm1hbnkvR2VybWFueUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwnO1xuaW1wb3J0IHtcbiAgICBJbnB1dCBhcyBHZXJtYW55SW5oZXJpdGFuY2VUYXhJbnB1dCxcbiAgICBSdWxlcyBhcyBHZXJtYW55SW5oZXJpdGFuY2VUYXhSdWxlcyxcbiAgICBSZXN1bHQgYXMgR2VybWFueUluaGVyaXRhbmNlVGF4UmVzdWx0LFxufSBmcm9tICcuL2dlcm1hbnkvZG9tYWluL3R5cGVzJztcblxuZXhwb3J0IHtcbiAgICBDYW5hZGFJbmhlcml0YW5jZVRheFNlcnZpY2UsXG4gICAgQ2FuYWRhSW5oZXJpdGFuY2VUYXhJbnB1dCxcbiAgICBDYW5hZGFJbmhlcml0YW5jZVRheFJ1bGVzLFxuICAgIENhbmFkYUluaGVyaXRhbmNlVGF4UmVzdWx0LFxuICAgIEZyYW5jZUluaGVyaXRhbmNlVGF4U2VydmljZSxcbiAgICBGcmFuY2VJbmhlcml0YW5jZVRheElucHV0LFxuICAgIEZyYW5jZUluaGVyaXRhbmNlVGF4UnVsZXMsXG4gICAgRnJhbmNlSW5oZXJpdGFuY2VUYXhSZXN1bHQsXG4gICAgU291dGhBZnJpY2FJbmhlcml0YW5jZVRheFNlcnZpY2UsXG4gICAgU291dGhBZnJpY2FJbmhlcml0YW5jZVRheElucHV0LFxuICAgIFNvdXRoQWZyaWNhSW5oZXJpdGFuY2VUYXhSdWxlcyxcbiAgICBTb3V0aEFmcmljYUluaGVyaXRhbmNlVGF4UmVzdWx0LFxuICAgIEF1c3RyYWxpYUluaGVyaXRhbmNlVGF4U2VydmljZSxcbiAgICBBdXN0cmFsaWFJbmhlcml0YW5jZVRheElucHV0LFxuICAgIEF1c3RyYWxpYUluaGVyaXRhbmNlVGF4UnVsZXMsXG4gICAgQXVzdHJhbGlhSW5oZXJpdGFuY2VUYXhSZXN1bHQsXG4gICAgVUtJbmhlcml0YW5jZVRheFNlcnZpY2UsXG4gICAgVUtJbmhlcml0YW5jZVRheElucHV0LFxuICAgIFVLSW5oZXJpdGFuY2VUYXhSdWxlcyxcbiAgICBVS0luaGVyaXRhbmNlVGF4UmVzdWx0LFxuICAgIFVTQUluaGVyaXRhbmNlVGF4U2VydmljZSxcbiAgICBVU0FJbmhlcml0YW5jZVRheElucHV0LFxuICAgIFVTQUluaGVyaXRhbmNlVGF4UnVsZXMsXG4gICAgVVNBSW5oZXJpdGFuY2VUYXhSZXN1bHQsXG4gICAgR2VybWFueUluaGVyaXRhbmNlVGF4U2VydmljZSxcbiAgICBHZXJtYW55SW5oZXJpdGFuY2VUYXhJbnB1dCxcbiAgICBHZXJtYW55SW5oZXJpdGFuY2VUYXhSdWxlcyxcbiAgICBHZXJtYW55SW5oZXJpdGFuY2VUYXhSZXN1bHQsXG59O1xuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU291dGhBZnJpY2FJbmhlcml0YW5jZVRheFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L3NvdXRoLWFmcmljYS9Tb3V0aEFmcmljYUluaGVyaXRhbmNlVGF4U2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcIi4vZG9tYWluL3R5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU291dGhBZnJpY2FJbmhlcml0YW5jZVRheFNlcnZpY2Uge1xuICAgIGNhbGN1bGF0ZSgpOiBSZXN1bHQ7XG59XG4iXX0=
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SouthAfricaInheritanceTaxServiceImpl = void 0;
|
|
4
|
+
class SouthAfricaInheritanceTaxServiceImpl {
|
|
5
|
+
constructor(input, rules) {
|
|
6
|
+
this._input = input;
|
|
7
|
+
this._rules = rules;
|
|
8
|
+
}
|
|
9
|
+
calculate() {
|
|
10
|
+
const estate = this._input.estateValue;
|
|
11
|
+
const netEstate = estate - this._input.deductions;
|
|
12
|
+
if (netEstate <= 0 || netEstate <= this._rules.primaryAbatement) {
|
|
13
|
+
return {
|
|
14
|
+
taxableEstate: 0,
|
|
15
|
+
inheritanceTax: 0,
|
|
16
|
+
effectiveRate: 0,
|
|
17
|
+
breakdowns: [],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const taxableEstate = netEstate - this._rules.primaryAbatement;
|
|
21
|
+
const { tax, breakdowns } = this.applyBrackets(taxableEstate, this._rules.taxBrackets);
|
|
22
|
+
return {
|
|
23
|
+
taxableEstate,
|
|
24
|
+
inheritanceTax: tax,
|
|
25
|
+
effectiveRate: estate > 0 ? (tax / estate) * 100 : 0,
|
|
26
|
+
breakdowns,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
applyBrackets(taxableAmount, brackets) {
|
|
30
|
+
let tax = 0;
|
|
31
|
+
const breakdowns = [];
|
|
32
|
+
for (const bracket of brackets) {
|
|
33
|
+
if (taxableAmount <= bracket.from)
|
|
34
|
+
break;
|
|
35
|
+
const upper = bracket.to ?? taxableAmount;
|
|
36
|
+
const taxable = Math.min(upper, taxableAmount) - bracket.from;
|
|
37
|
+
if (taxable > 0) {
|
|
38
|
+
const bracketTax = taxable * bracket.rate;
|
|
39
|
+
tax += bracketTax;
|
|
40
|
+
breakdowns.push({
|
|
41
|
+
from: `${bracket.from}`,
|
|
42
|
+
to: `${bracket.to ?? 'Above'}`,
|
|
43
|
+
rate: bracket.rate,
|
|
44
|
+
amount: bracketTax,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return { tax, breakdowns };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.SouthAfricaInheritanceTaxServiceImpl = SouthAfricaInheritanceTaxServiceImpl;
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU291dGhBZnJpY2FJbmhlcml0YW5jZVRheFNlcnZpY2VJbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luaGVyaXRhbmNlLXRheC9zb3V0aC1hZnJpY2EvU291dGhBZnJpY2FJbmhlcml0YW5jZVRheFNlcnZpY2VJbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLE1BQWEsb0NBQW9DO0lBSTdDLFlBQVksS0FBWSxFQUFFLEtBQVk7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN2QyxNQUFNLFNBQVMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFFbEQsSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDOUQsT0FBTztnQkFDSCxhQUFhLEVBQUUsQ0FBQztnQkFDaEIsY0FBYyxFQUFFLENBQUM7Z0JBQ2pCLGFBQWEsRUFBRSxDQUFDO2dCQUNoQixVQUFVLEVBQUUsRUFBRTthQUNqQixDQUFDO1FBQ04sQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQy9ELE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV2RixPQUFPO1lBQ0gsYUFBYTtZQUNiLGNBQWMsRUFBRSxHQUFHO1lBQ25CLGFBQWEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsVUFBVTtTQUNiLENBQUM7SUFDTixDQUFDO0lBRU8sYUFBYSxDQUNqQixhQUFxQixFQUNyQixRQUFzQjtRQUV0QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixNQUFNLFVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBRW5DLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7WUFDN0IsSUFBSSxhQUFhLElBQUksT0FBTyxDQUFDLElBQUk7Z0JBQUUsTUFBTTtZQUV6QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsRUFBRSxJQUFJLGFBQWEsQ0FBQztZQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBRTlELElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNkLE1BQU0sVUFBVSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUMxQyxHQUFHLElBQUksVUFBVSxDQUFDO2dCQUVsQixVQUFVLENBQUMsSUFBSSxDQUFDO29CQUNaLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUU7b0JBQ3ZCLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksT0FBTyxFQUFFO29CQUM5QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7b0JBQ2xCLE1BQU0sRUFBRSxVQUFVO2lCQUNyQixDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNKO0FBN0RELG9GQTZEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrZG93biB9IGZyb20gXCIuLi9kb21haW4vdHlwZXNcIjtcbmltcG9ydCB7IFNvdXRoQWZyaWNhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlIH0gZnJvbSBcIi4vU291dGhBZnJpY2FJbmhlcml0YW5jZVRheFNlcnZpY2VcIjtcbmltcG9ydCB7IElucHV0LCBSZXN1bHQsIFJ1bGVzLCBUYXhCcmFja2V0IH0gZnJvbSBcIi4vZG9tYWluL3R5cGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBTb3V0aEFmcmljYUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwgaW1wbGVtZW50cyBTb3V0aEFmcmljYUluaGVyaXRhbmNlVGF4U2VydmljZSB7XG4gICAgcHJpdmF0ZSBfaW5wdXQ6IElucHV0O1xuICAgIHByaXZhdGUgX3J1bGVzOiBSdWxlcztcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0OiBJbnB1dCwgcnVsZXM6IFJ1bGVzKSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX3J1bGVzID0gcnVsZXM7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlKCk6IFJlc3VsdCB7XG4gICAgICAgIGNvbnN0IGVzdGF0ZSA9IHRoaXMuX2lucHV0LmVzdGF0ZVZhbHVlO1xuICAgICAgICBjb25zdCBuZXRFc3RhdGUgPSBlc3RhdGUgLSB0aGlzLl9pbnB1dC5kZWR1Y3Rpb25zO1xuXG4gICAgICAgIGlmIChuZXRFc3RhdGUgPD0gMCB8fCBuZXRFc3RhdGUgPD0gdGhpcy5fcnVsZXMucHJpbWFyeUFiYXRlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0YXhhYmxlRXN0YXRlOiAwLFxuICAgICAgICAgICAgICAgIGluaGVyaXRhbmNlVGF4OiAwLFxuICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVJhdGU6IDAsXG4gICAgICAgICAgICAgICAgYnJlYWtkb3duczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGF4YWJsZUVzdGF0ZSA9IG5ldEVzdGF0ZSAtIHRoaXMuX3J1bGVzLnByaW1hcnlBYmF0ZW1lbnQ7XG4gICAgICAgIGNvbnN0IHsgdGF4LCBicmVha2Rvd25zIH0gPSB0aGlzLmFwcGx5QnJhY2tldHModGF4YWJsZUVzdGF0ZSwgdGhpcy5fcnVsZXMudGF4QnJhY2tldHMpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0YXhhYmxlRXN0YXRlLFxuICAgICAgICAgICAgaW5oZXJpdGFuY2VUYXg6IHRheCxcbiAgICAgICAgICAgIGVmZmVjdGl2ZVJhdGU6IGVzdGF0ZSA+IDAgPyAodGF4IC8gZXN0YXRlKSAqIDEwMCA6IDAsXG4gICAgICAgICAgICBicmVha2Rvd25zLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlCcmFja2V0cyhcbiAgICAgICAgdGF4YWJsZUFtb3VudDogbnVtYmVyLFxuICAgICAgICBicmFja2V0czogVGF4QnJhY2tldFtdLFxuICAgICk6IHsgdGF4OiBudW1iZXI7IGJyZWFrZG93bnM6IEJyZWFrZG93bltdIH0ge1xuICAgICAgICBsZXQgdGF4ID0gMDtcbiAgICAgICAgY29uc3QgYnJlYWtkb3duczogQnJlYWtkb3duW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGJyYWNrZXQgb2YgYnJhY2tldHMpIHtcbiAgICAgICAgICAgIGlmICh0YXhhYmxlQW1vdW50IDw9IGJyYWNrZXQuZnJvbSkgYnJlYWs7XG5cbiAgICAgICAgICAgIGNvbnN0IHVwcGVyID0gYnJhY2tldC50byA/PyB0YXhhYmxlQW1vdW50O1xuICAgICAgICAgICAgY29uc3QgdGF4YWJsZSA9IE1hdGgubWluKHVwcGVyLCB0YXhhYmxlQW1vdW50KSAtIGJyYWNrZXQuZnJvbTtcblxuICAgICAgICAgICAgaWYgKHRheGFibGUgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnJhY2tldFRheCA9IHRheGFibGUgKiBicmFja2V0LnJhdGU7XG4gICAgICAgICAgICAgICAgdGF4ICs9IGJyYWNrZXRUYXg7XG5cbiAgICAgICAgICAgICAgICBicmVha2Rvd25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBmcm9tOiBgJHticmFja2V0LmZyb219YCxcbiAgICAgICAgICAgICAgICAgICAgdG86IGAke2JyYWNrZXQudG8gPz8gJ0Fib3ZlJ31gLFxuICAgICAgICAgICAgICAgICAgICByYXRlOiBicmFja2V0LnJhdGUsXG4gICAgICAgICAgICAgICAgICAgIGFtb3VudDogYnJhY2tldFRheCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHRheCwgYnJlYWtkb3ducyB9O1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L3NvdXRoLWFmcmljYS9kb21haW4vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrZG93biB9IGZyb20gXCIuLi8uLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBUYXhCcmFja2V0IHtcbiAgICBmcm9tOiBudW1iZXI7XG4gICAgdG86IG51bWJlciB8IG51bGw7XG4gICAgcmF0ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVzIHtcbiAgICBwcmltYXJ5QWJhdGVtZW50OiBudW1iZXI7XG4gICAgdGF4QnJhY2tldHM6IFRheEJyYWNrZXRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgZXN0YXRlVmFsdWU6IG51bWJlcjtcbiAgICBkZWR1Y3Rpb25zOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdWx0IHtcbiAgICB0YXhhYmxlRXN0YXRlOiBudW1iZXI7XG4gICAgaW5oZXJpdGFuY2VUYXg6IG51bWJlcjtcbiAgICBlZmZlY3RpdmVSYXRlOiBudW1iZXI7XG4gICAgYnJlYWtkb3duczogQnJlYWtkb3duW107XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVUtJbmhlcml0YW5jZVRheFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L3VrL1VLSW5oZXJpdGFuY2VUYXhTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVS0luaGVyaXRhbmNlVGF4U2VydmljZSB7XG4gICAgY2FsY3VsYXRlKCk6IFJlc3VsdDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UKInheritanceTaxServiceImpl = void 0;
|
|
4
|
+
class UKInheritanceTaxServiceImpl {
|
|
5
|
+
constructor(input, rules) {
|
|
6
|
+
this._input = input;
|
|
7
|
+
this._rules = rules;
|
|
8
|
+
}
|
|
9
|
+
calculate() {
|
|
10
|
+
const estate = this._input.estateValue;
|
|
11
|
+
if (estate <= 0 || estate <= this._rules.nilRateBand) {
|
|
12
|
+
return {
|
|
13
|
+
taxableEstate: 0,
|
|
14
|
+
inheritanceTax: 0,
|
|
15
|
+
effectiveRate: 0,
|
|
16
|
+
breakdowns: [],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const taxableEstate = estate - this._rules.nilRateBand;
|
|
20
|
+
const rate = this._input.charitableGivingPercent >= this._rules.charityThreshold
|
|
21
|
+
? this._rules.charityRate
|
|
22
|
+
: this._rules.standardRate;
|
|
23
|
+
const tax = taxableEstate * rate;
|
|
24
|
+
const breakdowns = [{
|
|
25
|
+
from: `${this._rules.nilRateBand}`,
|
|
26
|
+
to: 'Above',
|
|
27
|
+
rate,
|
|
28
|
+
amount: tax,
|
|
29
|
+
}];
|
|
30
|
+
return {
|
|
31
|
+
taxableEstate,
|
|
32
|
+
inheritanceTax: tax,
|
|
33
|
+
effectiveRate: estate > 0 ? (tax / estate) * 100 : 0,
|
|
34
|
+
breakdowns,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.UKInheritanceTaxServiceImpl = UKInheritanceTaxServiceImpl;
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVUtJbmhlcml0YW5jZVRheFNlcnZpY2VJbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luaGVyaXRhbmNlLXRheC91ay9VS0luaGVyaXRhbmNlVGF4U2VydmljZUltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsTUFBYSwyQkFBMkI7SUFJcEMsWUFBWSxLQUFZLEVBQUUsS0FBWTtRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBRXZDLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuRCxPQUFPO2dCQUNILGFBQWEsRUFBRSxDQUFDO2dCQUNoQixjQUFjLEVBQUUsQ0FBQztnQkFDakIsYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLFVBQVUsRUFBRSxFQUFFO2FBQ2pCLENBQUM7UUFDTixDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDNUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVztZQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUcsYUFBYSxHQUFHLElBQUksQ0FBQztRQUVqQyxNQUFNLFVBQVUsR0FBZ0IsQ0FBQztnQkFDN0IsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7Z0JBQ2xDLEVBQUUsRUFBRSxPQUFPO2dCQUNYLElBQUk7Z0JBQ0osTUFBTSxFQUFFLEdBQUc7YUFDZCxDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0gsYUFBYTtZQUNiLGNBQWMsRUFBRSxHQUFHO1lBQ25CLGFBQWEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsVUFBVTtTQUNiLENBQUM7SUFDTixDQUFDO0NBQ0o7QUF6Q0Qsa0VBeUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtkb3duIH0gZnJvbSBcIi4uL2RvbWFpbi90eXBlc1wiO1xuaW1wb3J0IHsgVUtJbmhlcml0YW5jZVRheFNlcnZpY2UgfSBmcm9tIFwiLi9VS0luaGVyaXRhbmNlVGF4U2VydmljZVwiO1xuaW1wb3J0IHsgSW5wdXQsIFJlc3VsdCwgUnVsZXMgfSBmcm9tIFwiLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGNsYXNzIFVLSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIFVLSW5oZXJpdGFuY2VUYXhTZXJ2aWNlIHtcbiAgICBwcml2YXRlIF9pbnB1dDogSW5wdXQ7XG4gICAgcHJpdmF0ZSBfcnVsZXM6IFJ1bGVzO1xuXG4gICAgY29uc3RydWN0b3IoaW5wdXQ6IElucHV0LCBydWxlczogUnVsZXMpIHtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fcnVsZXMgPSBydWxlcztcbiAgICB9XG5cbiAgICBjYWxjdWxhdGUoKTogUmVzdWx0IHtcbiAgICAgICAgY29uc3QgZXN0YXRlID0gdGhpcy5faW5wdXQuZXN0YXRlVmFsdWU7XG5cbiAgICAgICAgaWYgKGVzdGF0ZSA8PSAwIHx8IGVzdGF0ZSA8PSB0aGlzLl9ydWxlcy5uaWxSYXRlQmFuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0YXhhYmxlRXN0YXRlOiAwLFxuICAgICAgICAgICAgICAgIGluaGVyaXRhbmNlVGF4OiAwLFxuICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVJhdGU6IDAsXG4gICAgICAgICAgICAgICAgYnJlYWtkb3duczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGF4YWJsZUVzdGF0ZSA9IGVzdGF0ZSAtIHRoaXMuX3J1bGVzLm5pbFJhdGVCYW5kO1xuICAgICAgICBjb25zdCByYXRlID0gdGhpcy5faW5wdXQuY2hhcml0YWJsZUdpdmluZ1BlcmNlbnQgPj0gdGhpcy5fcnVsZXMuY2hhcml0eVRocmVzaG9sZFxuICAgICAgICAgICAgPyB0aGlzLl9ydWxlcy5jaGFyaXR5UmF0ZVxuICAgICAgICAgICAgOiB0aGlzLl9ydWxlcy5zdGFuZGFyZFJhdGU7XG4gICAgICAgIGNvbnN0IHRheCA9IHRheGFibGVFc3RhdGUgKiByYXRlO1xuXG4gICAgICAgIGNvbnN0IGJyZWFrZG93bnM6IEJyZWFrZG93bltdID0gW3tcbiAgICAgICAgICAgIGZyb206IGAke3RoaXMuX3J1bGVzLm5pbFJhdGVCYW5kfWAsXG4gICAgICAgICAgICB0bzogJ0Fib3ZlJyxcbiAgICAgICAgICAgIHJhdGUsXG4gICAgICAgICAgICBhbW91bnQ6IHRheCxcbiAgICAgICAgfV07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRheGFibGVFc3RhdGUsXG4gICAgICAgICAgICBpbmhlcml0YW5jZVRheDogdGF4LFxuICAgICAgICAgICAgZWZmZWN0aXZlUmF0ZTogZXN0YXRlID4gMCA/ICh0YXggLyBlc3RhdGUpICogMTAwIDogMCxcbiAgICAgICAgICAgIGJyZWFrZG93bnMsXG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L3VrL2RvbWFpbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtkb3duIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVzIHtcbiAgICBuaWxSYXRlQmFuZDogbnVtYmVyO1xuICAgIHN0YW5kYXJkUmF0ZTogbnVtYmVyO1xuICAgIGNoYXJpdHlSYXRlOiBudW1iZXI7XG4gICAgY2hhcml0eVRocmVzaG9sZDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElucHV0IHtcbiAgICBlc3RhdGVWYWx1ZTogbnVtYmVyO1xuICAgIGNoYXJpdGFibGVHaXZpbmdQZXJjZW50OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdWx0IHtcbiAgICB0YXhhYmxlRXN0YXRlOiBudW1iZXI7XG4gICAgaW5oZXJpdGFuY2VUYXg6IG51bWJlcjtcbiAgICBlZmZlY3RpdmVSYXRlOiBudW1iZXI7XG4gICAgYnJlYWtkb3duczogQnJlYWtkb3duW107XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVVNBSW5oZXJpdGFuY2VUYXhTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luaGVyaXRhbmNlLXRheC91c2EvVVNBSW5oZXJpdGFuY2VUYXhTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVU0FJbmhlcml0YW5jZVRheFNlcnZpY2Uge1xuICAgIGNhbGN1bGF0ZSgpOiBSZXN1bHQ7XG59XG4iXX0=
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.USAInheritanceTaxServiceImpl = void 0;
|
|
4
|
+
class USAInheritanceTaxServiceImpl {
|
|
5
|
+
constructor(input, rules) {
|
|
6
|
+
this._input = input;
|
|
7
|
+
this._rules = rules;
|
|
8
|
+
}
|
|
9
|
+
calculate() {
|
|
10
|
+
const estate = this._input.estateValue;
|
|
11
|
+
if (estate <= 0 || estate <= this._rules.exemption) {
|
|
12
|
+
return {
|
|
13
|
+
taxableEstate: 0,
|
|
14
|
+
inheritanceTax: 0,
|
|
15
|
+
effectiveRate: 0,
|
|
16
|
+
breakdowns: [],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const taxableEstate = estate - this._rules.exemption;
|
|
20
|
+
const { tax, breakdowns } = this.applyBrackets(taxableEstate, this._rules.taxBrackets);
|
|
21
|
+
return {
|
|
22
|
+
taxableEstate,
|
|
23
|
+
inheritanceTax: tax,
|
|
24
|
+
effectiveRate: estate > 0 ? (tax / estate) * 100 : 0,
|
|
25
|
+
breakdowns,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
applyBrackets(taxableAmount, brackets) {
|
|
29
|
+
let tax = 0;
|
|
30
|
+
const breakdowns = [];
|
|
31
|
+
for (const bracket of brackets) {
|
|
32
|
+
if (taxableAmount <= bracket.from)
|
|
33
|
+
break;
|
|
34
|
+
const upper = bracket.to ?? taxableAmount;
|
|
35
|
+
const taxable = Math.min(upper, taxableAmount) - bracket.from;
|
|
36
|
+
if (taxable > 0) {
|
|
37
|
+
const bracketTax = taxable * bracket.rate;
|
|
38
|
+
tax += bracketTax;
|
|
39
|
+
breakdowns.push({
|
|
40
|
+
from: `${bracket.from}`,
|
|
41
|
+
to: `${bracket.to ?? 'Above'}`,
|
|
42
|
+
rate: bracket.rate,
|
|
43
|
+
amount: bracketTax,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return { tax, breakdowns };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.USAInheritanceTaxServiceImpl = USAInheritanceTaxServiceImpl;
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVVNBSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbmhlcml0YW5jZS10YXgvdXNhL1VTQUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsTUFBYSw0QkFBNEI7SUFJckMsWUFBWSxLQUFZLEVBQUUsS0FBWTtRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBRXZDLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxPQUFPO2dCQUNILGFBQWEsRUFBRSxDQUFDO2dCQUNoQixjQUFjLEVBQUUsQ0FBQztnQkFDakIsYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLFVBQVUsRUFBRSxFQUFFO2FBQ2pCLENBQUM7UUFDTixDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3JELE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV2RixPQUFPO1lBQ0gsYUFBYTtZQUNiLGNBQWMsRUFBRSxHQUFHO1lBQ25CLGFBQWEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsVUFBVTtTQUNiLENBQUM7SUFDTixDQUFDO0lBRU8sYUFBYSxDQUNqQixhQUFxQixFQUNyQixRQUFzQjtRQUV0QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixNQUFNLFVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBRW5DLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7WUFDN0IsSUFBSSxhQUFhLElBQUksT0FBTyxDQUFDLElBQUk7Z0JBQUUsTUFBTTtZQUV6QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsRUFBRSxJQUFJLGFBQWEsQ0FBQztZQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBRTlELElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNkLE1BQU0sVUFBVSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUMxQyxHQUFHLElBQUksVUFBVSxDQUFDO2dCQUVsQixVQUFVLENBQUMsSUFBSSxDQUFDO29CQUNaLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUU7b0JBQ3ZCLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksT0FBTyxFQUFFO29CQUM5QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7b0JBQ2xCLE1BQU0sRUFBRSxVQUFVO2lCQUNyQixDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNKO0FBNURELG9FQTREQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrZG93biB9IGZyb20gXCIuLi9kb21haW4vdHlwZXNcIjtcbmltcG9ydCB7IFVTQUluaGVyaXRhbmNlVGF4U2VydmljZSB9IGZyb20gXCIuL1VTQUluaGVyaXRhbmNlVGF4U2VydmljZVwiO1xuaW1wb3J0IHsgSW5wdXQsIFJlc3VsdCwgUnVsZXMsIFRheEJyYWNrZXQgfSBmcm9tIFwiLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGNsYXNzIFVTQUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwgaW1wbGVtZW50cyBVU0FJbmhlcml0YW5jZVRheFNlcnZpY2Uge1xuICAgIHByaXZhdGUgX2lucHV0OiBJbnB1dDtcbiAgICBwcml2YXRlIF9ydWxlczogUnVsZXM7XG5cbiAgICBjb25zdHJ1Y3RvcihpbnB1dDogSW5wdXQsIHJ1bGVzOiBSdWxlcykge1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZSgpOiBSZXN1bHQge1xuICAgICAgICBjb25zdCBlc3RhdGUgPSB0aGlzLl9pbnB1dC5lc3RhdGVWYWx1ZTtcblxuICAgICAgICBpZiAoZXN0YXRlIDw9IDAgfHwgZXN0YXRlIDw9IHRoaXMuX3J1bGVzLmV4ZW1wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0YXhhYmxlRXN0YXRlOiAwLFxuICAgICAgICAgICAgICAgIGluaGVyaXRhbmNlVGF4OiAwLFxuICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVJhdGU6IDAsXG4gICAgICAgICAgICAgICAgYnJlYWtkb3duczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGF4YWJsZUVzdGF0ZSA9IGVzdGF0ZSAtIHRoaXMuX3J1bGVzLmV4ZW1wdGlvbjtcbiAgICAgICAgY29uc3QgeyB0YXgsIGJyZWFrZG93bnMgfSA9IHRoaXMuYXBwbHlCcmFja2V0cyh0YXhhYmxlRXN0YXRlLCB0aGlzLl9ydWxlcy50YXhCcmFja2V0cyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRheGFibGVFc3RhdGUsXG4gICAgICAgICAgICBpbmhlcml0YW5jZVRheDogdGF4LFxuICAgICAgICAgICAgZWZmZWN0aXZlUmF0ZTogZXN0YXRlID4gMCA/ICh0YXggLyBlc3RhdGUpICogMTAwIDogMCxcbiAgICAgICAgICAgIGJyZWFrZG93bnMsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseUJyYWNrZXRzKFxuICAgICAgICB0YXhhYmxlQW1vdW50OiBudW1iZXIsXG4gICAgICAgIGJyYWNrZXRzOiBUYXhCcmFja2V0W10sXG4gICAgKTogeyB0YXg6IG51bWJlcjsgYnJlYWtkb3duczogQnJlYWtkb3duW10gfSB7XG4gICAgICAgIGxldCB0YXggPSAwO1xuICAgICAgICBjb25zdCBicmVha2Rvd25zOiBCcmVha2Rvd25bXSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgYnJhY2tldCBvZiBicmFja2V0cykge1xuICAgICAgICAgICAgaWYgKHRheGFibGVBbW91bnQgPD0gYnJhY2tldC5mcm9tKSBicmVhaztcblxuICAgICAgICAgICAgY29uc3QgdXBwZXIgPSBicmFja2V0LnRvID8/IHRheGFibGVBbW91bnQ7XG4gICAgICAgICAgICBjb25zdCB0YXhhYmxlID0gTWF0aC5taW4odXBwZXIsIHRheGFibGVBbW91bnQpIC0gYnJhY2tldC5mcm9tO1xuXG4gICAgICAgICAgICBpZiAodGF4YWJsZSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBicmFja2V0VGF4ID0gdGF4YWJsZSAqIGJyYWNrZXQucmF0ZTtcbiAgICAgICAgICAgICAgICB0YXggKz0gYnJhY2tldFRheDtcblxuICAgICAgICAgICAgICAgIGJyZWFrZG93bnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGZyb206IGAke2JyYWNrZXQuZnJvbX1gLFxuICAgICAgICAgICAgICAgICAgICB0bzogYCR7YnJhY2tldC50byA/PyAnQWJvdmUnfWAsXG4gICAgICAgICAgICAgICAgICAgIHJhdGU6IGJyYWNrZXQucmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50OiBicmFja2V0VGF4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgdGF4LCBicmVha2Rvd25zIH07XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L3VzYS9kb21haW4vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrZG93biB9IGZyb20gXCIuLi8uLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBUYXhCcmFja2V0IHtcbiAgICBmcm9tOiBudW1iZXI7XG4gICAgdG86IG51bWJlciB8IG51bGw7XG4gICAgcmF0ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVzIHtcbiAgICBleGVtcHRpb246IG51bWJlcjtcbiAgICB0YXhCcmFja2V0czogVGF4QnJhY2tldFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElucHV0IHtcbiAgICBlc3RhdGVWYWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3VsdCB7XG4gICAgdGF4YWJsZUVzdGF0ZTogbnVtYmVyO1xuICAgIGluaGVyaXRhbmNlVGF4OiBudW1iZXI7XG4gICAgZWZmZWN0aXZlUmF0ZTogbnVtYmVyO1xuICAgIGJyZWFrZG93bnM6IEJyZWFrZG93bltdO1xufVxuIl19
|