@novha/calc-engines 6.3.0 → 8.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/brazil/BrazilCapitalGainsService.js +3 -0
- package/dist/capital-gains/brazil/BrazilCapitalGainsServiceImpl.js +56 -0
- package/dist/capital-gains/brazil/domain/types.js +3 -0
- package/dist/capital-gains/canada/CanadaCapitalGainsServiceImpl.js +29 -17
- package/dist/capital-gains/index.js +14 -2
- package/dist/capital-gains/india/IndiaCapitalGainsService.js +3 -0
- package/dist/capital-gains/india/IndiaCapitalGainsServiceImpl.js +58 -0
- package/dist/capital-gains/india/domain/types.js +3 -0
- package/dist/capital-gains/japan/JapanCapitalGainsService.js +3 -0
- package/dist/capital-gains/japan/JapanCapitalGainsServiceImpl.js +41 -0
- package/dist/capital-gains/japan/domain/types.js +3 -0
- package/dist/capital-gains/spain/SpainCapitalGainsService.js +3 -0
- package/dist/capital-gains/spain/SpainCapitalGainsServiceImpl.js +56 -0
- package/dist/capital-gains/spain/domain/types.js +3 -0
- package/dist/corporate/brazil/BrazilCorporateTaxService.js +3 -0
- package/dist/corporate/brazil/BrazilCorporateTaxServiceImpl.js +33 -0
- package/dist/corporate/brazil/domain/types.js +3 -0
- package/dist/corporate/index.js +10 -2
- package/dist/corporate/india/IndiaCorporateTaxService.js +3 -0
- package/dist/corporate/india/IndiaCorporateTaxServiceImpl.js +29 -0
- package/dist/corporate/india/domain/types.js +3 -0
- package/dist/corporate/japan/JapanCorporateTaxService.js +3 -0
- package/dist/corporate/japan/JapanCorporateTaxServiceImpl.js +29 -0
- package/dist/corporate/japan/domain/types.js +3 -0
- package/dist/corporate/spain/SpainCorporateTaxService.js +3 -0
- package/dist/corporate/spain/SpainCorporateTaxServiceImpl.js +29 -0
- package/dist/corporate/spain/domain/types.js +3 -0
- package/dist/income-tax/brazil/BrazilIncomeTaxService.js +3 -0
- package/dist/income-tax/brazil/BrazilIncomeTaxServiceImpl.js +78 -0
- package/dist/income-tax/brazil/domain/types.js +3 -0
- package/dist/income-tax/index.js +14 -2
- package/dist/income-tax/india/IndiaIncomeTaxService.js +3 -0
- package/dist/income-tax/india/IndiaIncomeTaxServiceImpl.js +75 -0
- package/dist/income-tax/india/domain/types.js +3 -0
- package/dist/income-tax/japan/JapanIncomeTaxService.js +3 -0
- package/dist/income-tax/japan/JapanIncomeTaxServiceImpl.js +75 -0
- package/dist/income-tax/japan/domain/types.js +3 -0
- package/dist/income-tax/spain/SpainIncomeTaxService.js +3 -0
- package/dist/income-tax/spain/SpainIncomeTaxServiceImpl.js +62 -0
- package/dist/income-tax/spain/domain/types.js +3 -0
- 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 +31 -0
- package/dist/inheritance-tax/japan/JapanInheritanceTaxService.js +3 -0
- package/dist/inheritance-tax/japan/JapanInheritanceTaxServiceImpl.js +53 -0
- package/dist/inheritance-tax/japan/domain/types.js +3 -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/spain/SpainInheritanceTaxService.js +3 -0
- package/dist/inheritance-tax/spain/SpainInheritanceTaxServiceImpl.js +51 -0
- package/dist/inheritance-tax/spain/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/mortgage/brazil/BrazilMortgageService.js +3 -0
- package/dist/mortgage/brazil/BrazilMortgageServiceImpl.js +76 -0
- package/dist/mortgage/brazil/domain/types.js +3 -0
- package/dist/mortgage/index.js +14 -2
- package/dist/mortgage/india/IndiaMortgageService.js +3 -0
- package/dist/mortgage/india/IndiaMortgageServiceImpl.js +76 -0
- package/dist/mortgage/india/domain/types.js +3 -0
- package/dist/mortgage/japan/JapanMortgageService.js +3 -0
- package/dist/mortgage/japan/JapanMortgageServiceImpl.js +76 -0
- package/dist/mortgage/japan/domain/types.js +3 -0
- package/dist/mortgage/spain/SpainMortgageService.js +3 -0
- package/dist/mortgage/spain/SpainMortgageServiceImpl.js +96 -0
- package/dist/mortgage/spain/domain/types.js +3 -0
- package/dist/shared/domain/types.js +2 -1
- package/dist/types/capital-gains/brazil/BrazilCapitalGainsService.d.ts +4 -0
- package/dist/types/capital-gains/brazil/BrazilCapitalGainsServiceImpl.d.ts +10 -0
- package/dist/types/capital-gains/brazil/domain/types.d.ts +11 -0
- package/dist/types/capital-gains/canada/CanadaCapitalGainsServiceImpl.d.ts +1 -1
- package/dist/types/capital-gains/index.d.ts +9 -1
- package/dist/types/capital-gains/india/IndiaCapitalGainsService.d.ts +4 -0
- package/dist/types/capital-gains/india/IndiaCapitalGainsServiceImpl.d.ts +9 -0
- package/dist/types/capital-gains/india/domain/types.d.ts +9 -0
- package/dist/types/capital-gains/japan/JapanCapitalGainsService.d.ts +4 -0
- package/dist/types/capital-gains/japan/JapanCapitalGainsServiceImpl.d.ts +9 -0
- package/dist/types/capital-gains/japan/domain/types.d.ts +6 -0
- package/dist/types/capital-gains/spain/SpainCapitalGainsService.d.ts +4 -0
- package/dist/types/capital-gains/spain/SpainCapitalGainsServiceImpl.d.ts +10 -0
- package/dist/types/capital-gains/spain/domain/types.d.ts +11 -0
- package/dist/types/corporate/brazil/BrazilCorporateTaxService.d.ts +4 -0
- package/dist/types/corporate/brazil/BrazilCorporateTaxServiceImpl.d.ts +8 -0
- package/dist/types/corporate/brazil/domain/types.d.ts +19 -0
- package/dist/types/corporate/index.d.ts +9 -1
- package/dist/types/corporate/india/IndiaCorporateTaxService.d.ts +4 -0
- package/dist/types/corporate/india/IndiaCorporateTaxServiceImpl.d.ts +8 -0
- package/dist/types/corporate/india/domain/types.d.ts +15 -0
- package/dist/types/corporate/japan/JapanCorporateTaxService.d.ts +4 -0
- package/dist/types/corporate/japan/JapanCorporateTaxServiceImpl.d.ts +8 -0
- package/dist/types/corporate/japan/domain/types.d.ts +15 -0
- package/dist/types/corporate/spain/SpainCorporateTaxService.d.ts +4 -0
- package/dist/types/corporate/spain/SpainCorporateTaxServiceImpl.d.ts +8 -0
- package/dist/types/corporate/spain/domain/types.d.ts +15 -0
- package/dist/types/income-tax/brazil/BrazilIncomeTaxService.d.ts +4 -0
- package/dist/types/income-tax/brazil/BrazilIncomeTaxServiceImpl.d.ts +11 -0
- package/dist/types/income-tax/brazil/domain/types.d.ts +18 -0
- package/dist/types/income-tax/index.d.ts +9 -1
- package/dist/types/income-tax/india/IndiaIncomeTaxService.d.ts +4 -0
- package/dist/types/income-tax/india/IndiaIncomeTaxServiceImpl.d.ts +10 -0
- package/dist/types/income-tax/india/domain/types.d.ts +16 -0
- package/dist/types/income-tax/japan/JapanIncomeTaxService.d.ts +4 -0
- package/dist/types/income-tax/japan/JapanIncomeTaxServiceImpl.d.ts +10 -0
- package/dist/types/income-tax/japan/domain/types.d.ts +16 -0
- package/dist/types/income-tax/spain/SpainIncomeTaxService.d.ts +4 -0
- package/dist/types/income-tax/spain/SpainIncomeTaxServiceImpl.d.ts +10 -0
- package/dist/types/income-tax/spain/domain/types.d.ts +16 -0
- 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 +19 -0
- package/dist/types/inheritance-tax/japan/JapanInheritanceTaxService.d.ts +4 -0
- package/dist/types/inheritance-tax/japan/JapanInheritanceTaxServiceImpl.d.ts +9 -0
- package/dist/types/inheritance-tax/japan/domain/types.d.ts +21 -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/spain/SpainInheritanceTaxService.d.ts +4 -0
- package/dist/types/inheritance-tax/spain/SpainInheritanceTaxServiceImpl.d.ts +9 -0
- package/dist/types/inheritance-tax/spain/domain/types.d.ts +19 -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/mortgage/brazil/BrazilMortgageService.d.ts +4 -0
- package/dist/types/mortgage/brazil/BrazilMortgageServiceImpl.d.ts +7 -0
- package/dist/types/mortgage/brazil/domain/types.d.ts +39 -0
- package/dist/types/mortgage/index.d.ts +9 -1
- package/dist/types/mortgage/india/IndiaMortgageService.d.ts +4 -0
- package/dist/types/mortgage/india/IndiaMortgageServiceImpl.d.ts +7 -0
- package/dist/types/mortgage/india/domain/types.d.ts +39 -0
- package/dist/types/mortgage/japan/JapanMortgageService.d.ts +4 -0
- package/dist/types/mortgage/japan/JapanMortgageServiceImpl.d.ts +7 -0
- package/dist/types/mortgage/japan/domain/types.d.ts +39 -0
- package/dist/types/mortgage/spain/SpainMortgageService.d.ts +4 -0
- package/dist/types/mortgage/spain/SpainMortgageServiceImpl.d.ts +8 -0
- package/dist/types/mortgage/spain/domain/types.d.ts +44 -0
- package/dist/types/shared/domain/types.d.ts +2 -1
- package/package.json +1 -1
- package/src/capital-gains/brazil/BrazilCapitalGainsService.ts +5 -0
- package/src/capital-gains/brazil/BrazilCapitalGainsServiceImpl.ts +69 -0
- package/src/capital-gains/brazil/domain/types.ts +15 -0
- package/src/capital-gains/canada/CanadaCapitalGainsServiceImpl.ts +34 -21
- package/src/capital-gains/index.ts +40 -0
- package/src/capital-gains/india/IndiaCapitalGainsService.ts +5 -0
- package/src/capital-gains/india/IndiaCapitalGainsServiceImpl.ts +64 -0
- package/src/capital-gains/india/domain/types.ts +12 -0
- package/src/capital-gains/japan/JapanCapitalGainsService.ts +5 -0
- package/src/capital-gains/japan/JapanCapitalGainsServiceImpl.ts +47 -0
- package/src/capital-gains/japan/domain/types.ts +9 -0
- package/src/capital-gains/spain/SpainCapitalGainsService.ts +5 -0
- package/src/capital-gains/spain/SpainCapitalGainsServiceImpl.ts +69 -0
- package/src/capital-gains/spain/domain/types.ts +15 -0
- package/src/corporate/brazil/BrazilCorporateTaxService.ts +5 -0
- package/src/corporate/brazil/BrazilCorporateTaxServiceImpl.ts +40 -0
- package/src/corporate/brazil/domain/types.ts +16 -0
- package/src/corporate/index.ts +45 -1
- package/src/corporate/india/IndiaCorporateTaxService.ts +5 -0
- package/src/corporate/india/IndiaCorporateTaxServiceImpl.ts +35 -0
- package/src/corporate/india/domain/types.ts +15 -0
- package/src/corporate/japan/JapanCorporateTaxService.ts +5 -0
- package/src/corporate/japan/JapanCorporateTaxServiceImpl.ts +35 -0
- package/src/corporate/japan/domain/types.ts +15 -0
- package/src/corporate/spain/SpainCorporateTaxService.ts +5 -0
- package/src/corporate/spain/SpainCorporateTaxServiceImpl.ts +35 -0
- package/src/corporate/spain/domain/types.ts +15 -0
- package/src/income-tax/brazil/BrazilIncomeTaxService.ts +5 -0
- package/src/income-tax/brazil/BrazilIncomeTaxServiceImpl.ts +91 -0
- package/src/income-tax/brazil/domain/types.ts +21 -0
- package/src/income-tax/index.ts +40 -0
- package/src/income-tax/india/IndiaIncomeTaxService.ts +5 -0
- package/src/income-tax/india/IndiaIncomeTaxServiceImpl.ts +87 -0
- package/src/income-tax/india/domain/types.ts +16 -0
- package/src/income-tax/japan/JapanIncomeTaxService.ts +5 -0
- package/src/income-tax/japan/JapanIncomeTaxServiceImpl.ts +87 -0
- package/src/income-tax/japan/domain/types.ts +16 -0
- package/src/income-tax/spain/SpainIncomeTaxService.ts +5 -0
- package/src/income-tax/spain/SpainIncomeTaxServiceImpl.ts +75 -0
- package/src/income-tax/spain/domain/types.ts +16 -0
- 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 +110 -0
- package/src/inheritance-tax/japan/JapanInheritanceTaxService.ts +5 -0
- package/src/inheritance-tax/japan/JapanInheritanceTaxServiceImpl.ts +67 -0
- package/src/inheritance-tax/japan/domain/types.ts +25 -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/spain/SpainInheritanceTaxService.ts +5 -0
- package/src/inheritance-tax/spain/SpainInheritanceTaxServiceImpl.ts +65 -0
- package/src/inheritance-tax/spain/domain/types.ts +23 -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/mortgage/brazil/BrazilMortgageService.ts +5 -0
- package/src/mortgage/brazil/BrazilMortgageServiceImpl.ts +101 -0
- package/src/mortgage/brazil/domain/types.ts +46 -0
- package/src/mortgage/index.ts +49 -1
- package/src/mortgage/india/IndiaMortgageService.ts +5 -0
- package/src/mortgage/india/IndiaMortgageServiceImpl.ts +101 -0
- package/src/mortgage/india/domain/types.ts +46 -0
- package/src/mortgage/japan/JapanMortgageService.ts +5 -0
- package/src/mortgage/japan/JapanMortgageServiceImpl.ts +101 -0
- package/src/mortgage/japan/domain/types.ts +46 -0
- package/src/mortgage/spain/SpainMortgageService.ts +5 -0
- package/src/mortgage/spain/SpainMortgageServiceImpl.ts +130 -0
- package/src/mortgage/spain/domain/types.ts +52 -0
- package/src/shared/domain/types.ts +1 -0
- package/test/australia-inheritance-tax.test.ts +35 -0
- package/test/brazil-capital-gains.test.ts +65 -0
- package/test/brazil-corporate-tax.test.ts +63 -0
- package/test/brazil-income-tax.test.ts +85 -0
- package/test/brazil-mortgage.test.ts +70 -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/india-capital-gains.test.ts +71 -0
- package/test/india-corporate-tax.test.ts +54 -0
- package/test/india-income-tax.test.ts +78 -0
- package/test/india-mortgage.test.ts +70 -0
- package/test/japan-capital-gains.test.ts +55 -0
- package/test/japan-corporate-tax.test.ts +54 -0
- package/test/japan-income-tax.test.ts +76 -0
- package/test/japan-inheritance-tax.test.ts +74 -0
- package/test/japan-mortgage.test.ts +69 -0
- package/test/south-africa-inheritance-tax.test.ts +81 -0
- package/test/spain-capital-gains.test.ts +66 -0
- package/test/spain-corporate-tax.test.ts +54 -0
- package/test/spain-income-tax.test.ts +84 -0
- package/test/spain-inheritance-tax.test.ts +78 -0
- package/test/spain-mortgage.test.ts +70 -0
- package/test/uk-inheritance-tax.test.ts +72 -0
- package/test/usa-inheritance-tax.test.ts +90 -0
|
@@ -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,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JapanInheritanceTaxService = exports.SpainInheritanceTaxService = 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
|
+
// Spain
|
|
26
|
+
const SpainInheritanceTaxServiceImpl_1 = require("./spain/SpainInheritanceTaxServiceImpl");
|
|
27
|
+
Object.defineProperty(exports, "SpainInheritanceTaxService", { enumerable: true, get: function () { return SpainInheritanceTaxServiceImpl_1.SpainInheritanceTaxServiceImpl; } });
|
|
28
|
+
// Japan
|
|
29
|
+
const JapanInheritanceTaxServiceImpl_1 = require("./japan/JapanInheritanceTaxServiceImpl");
|
|
30
|
+
Object.defineProperty(exports, "JapanInheritanceTaxService", { enumerable: true, get: function () { return JapanInheritanceTaxServiceImpl_1.JapanInheritanceTaxServiceImpl; } });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQVM7QUFDVCw4RkFBMEg7QUF3RXRILDRHQXhFd0MsaUVBQTJCLE9Bd0V4QztBQWpFL0IsU0FBUztBQUNULDhGQUEwSDtBQW9FdEgsNEdBcEV3QyxpRUFBMkIsT0FvRXhDO0FBN0QvQixlQUFlO0FBQ2YsOEdBQStJO0FBZ0UzSSxpSEFoRTZDLDJFQUFnQyxPQWdFN0M7QUF6RHBDLFlBQVk7QUFDWix1R0FBc0k7QUE0RGxJLCtHQTVEMkMsdUVBQThCLE9BNEQzQztBQXJEbEMsS0FBSztBQUNMLGtGQUEwRztBQXdEdEcsd0dBeERvQyx5REFBdUIsT0F3RHBDO0FBakQzQixNQUFNO0FBQ04scUZBQThHO0FBb0QxRyx5R0FwRHFDLDJEQUF3QixPQW9EckM7QUE3QzVCLFVBQVU7QUFDVixpR0FBOEg7QUFnRDFILDZHQWhEeUMsbUVBQTRCLE9BZ0R6QztBQXpDaEMsUUFBUTtBQUNSLDJGQUFzSDtBQTRDbEgsMkdBNUN1QywrREFBMEIsT0E0Q3ZDO0FBckM5QixRQUFRO0FBQ1IsMkZBQXNIO0FBd0NsSCwyR0F4Q3VDLCtEQUEwQixPQXdDdkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDYW5hZGFcbmltcG9ydCB7IENhbmFkYUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwgYXMgQ2FuYWRhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlIH0gZnJvbSAnLi9jYW5hZGEvQ2FuYWRhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCc7XG5pbXBvcnQge1xuICAgIElucHV0IGFzIENhbmFkYUluaGVyaXRhbmNlVGF4SW5wdXQsXG4gICAgUnVsZXMgYXMgQ2FuYWRhSW5oZXJpdGFuY2VUYXhSdWxlcyxcbiAgICBSZXN1bHQgYXMgQ2FuYWRhSW5oZXJpdGFuY2VUYXhSZXN1bHQsXG59IGZyb20gJy4vY2FuYWRhL2RvbWFpbi90eXBlcyc7XG5cbi8vIEZyYW5jZVxuaW1wb3J0IHsgRnJhbmNlSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCBhcyBGcmFuY2VJbmhlcml0YW5jZVRheFNlcnZpY2UgfSBmcm9tICcuL2ZyYW5jZS9GcmFuY2VJbmhlcml0YW5jZVRheFNlcnZpY2VJbXBsJztcbmltcG9ydCB7XG4gICAgSW5wdXQgYXMgRnJhbmNlSW5oZXJpdGFuY2VUYXhJbnB1dCxcbiAgICBSdWxlcyBhcyBGcmFuY2VJbmhlcml0YW5jZVRheFJ1bGVzLFxuICAgIFJlc3VsdCBhcyBGcmFuY2VJbmhlcml0YW5jZVRheFJlc3VsdCxcbn0gZnJvbSAnLi9mcmFuY2UvZG9tYWluL3R5cGVzJztcblxuLy8gU291dGggQWZyaWNhXG5pbXBvcnQgeyBTb3V0aEFmcmljYUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwgYXMgU291dGhBZnJpY2FJbmhlcml0YW5jZVRheFNlcnZpY2UgfSBmcm9tICcuL3NvdXRoLWFmcmljYS9Tb3V0aEFmcmljYUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwnO1xuaW1wb3J0IHtcbiAgICBJbnB1dCBhcyBTb3V0aEFmcmljYUluaGVyaXRhbmNlVGF4SW5wdXQsXG4gICAgUnVsZXMgYXMgU291dGhBZnJpY2FJbmhlcml0YW5jZVRheFJ1bGVzLFxuICAgIFJlc3VsdCBhcyBTb3V0aEFmcmljYUluaGVyaXRhbmNlVGF4UmVzdWx0LFxufSBmcm9tICcuL3NvdXRoLWFmcmljYS9kb21haW4vdHlwZXMnO1xuXG4vLyBBdXN0cmFsaWFcbmltcG9ydCB7IEF1c3RyYWxpYUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwgYXMgQXVzdHJhbGlhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlIH0gZnJvbSAnLi9hdXN0cmFsaWEvQXVzdHJhbGlhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCc7XG5pbXBvcnQge1xuICAgIElucHV0IGFzIEF1c3RyYWxpYUluaGVyaXRhbmNlVGF4SW5wdXQsXG4gICAgUnVsZXMgYXMgQXVzdHJhbGlhSW5oZXJpdGFuY2VUYXhSdWxlcyxcbiAgICBSZXN1bHQgYXMgQXVzdHJhbGlhSW5oZXJpdGFuY2VUYXhSZXN1bHQsXG59IGZyb20gJy4vYXVzdHJhbGlhL2RvbWFpbi90eXBlcyc7XG5cbi8vIFVLXG5pbXBvcnQgeyBVS0luaGVyaXRhbmNlVGF4U2VydmljZUltcGwgYXMgVUtJbmhlcml0YW5jZVRheFNlcnZpY2UgfSBmcm9tICcuL3VrL1VLSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCc7XG5pbXBvcnQge1xuICAgIElucHV0IGFzIFVLSW5oZXJpdGFuY2VUYXhJbnB1dCxcbiAgICBSdWxlcyBhcyBVS0luaGVyaXRhbmNlVGF4UnVsZXMsXG4gICAgUmVzdWx0IGFzIFVLSW5oZXJpdGFuY2VUYXhSZXN1bHQsXG59IGZyb20gJy4vdWsvZG9tYWluL3R5cGVzJztcblxuLy8gVVNBXG5pbXBvcnQgeyBVU0FJbmhlcml0YW5jZVRheFNlcnZpY2VJbXBsIGFzIFVTQUluaGVyaXRhbmNlVGF4U2VydmljZSB9IGZyb20gJy4vdXNhL1VTQUluaGVyaXRhbmNlVGF4U2VydmljZUltcGwnO1xuaW1wb3J0IHtcbiAgICBJbnB1dCBhcyBVU0FJbmhlcml0YW5jZVRheElucHV0LFxuICAgIFJ1bGVzIGFzIFVTQUluaGVyaXRhbmNlVGF4UnVsZXMsXG4gICAgUmVzdWx0IGFzIFVTQUluaGVyaXRhbmNlVGF4UmVzdWx0LFxufSBmcm9tICcuL3VzYS9kb21haW4vdHlwZXMnO1xuXG4vLyBHZXJtYW55XG5pbXBvcnQgeyBHZXJtYW55SW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCBhcyBHZXJtYW55SW5oZXJpdGFuY2VUYXhTZXJ2aWNlIH0gZnJvbSAnLi9nZXJtYW55L0dlcm1hbnlJbmhlcml0YW5jZVRheFNlcnZpY2VJbXBsJztcbmltcG9ydCB7XG4gICAgSW5wdXQgYXMgR2VybWFueUluaGVyaXRhbmNlVGF4SW5wdXQsXG4gICAgUnVsZXMgYXMgR2VybWFueUluaGVyaXRhbmNlVGF4UnVsZXMsXG4gICAgUmVzdWx0IGFzIEdlcm1hbnlJbmhlcml0YW5jZVRheFJlc3VsdCxcbn0gZnJvbSAnLi9nZXJtYW55L2RvbWFpbi90eXBlcyc7XG5cbi8vIFNwYWluXG5pbXBvcnQgeyBTcGFpbkluaGVyaXRhbmNlVGF4U2VydmljZUltcGwgYXMgU3BhaW5Jbmhlcml0YW5jZVRheFNlcnZpY2UgfSBmcm9tICcuL3NwYWluL1NwYWluSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCc7XG5pbXBvcnQge1xuICAgIElucHV0IGFzIFNwYWluSW5oZXJpdGFuY2VUYXhJbnB1dCxcbiAgICBSdWxlcyBhcyBTcGFpbkluaGVyaXRhbmNlVGF4UnVsZXMsXG4gICAgUmVzdWx0IGFzIFNwYWluSW5oZXJpdGFuY2VUYXhSZXN1bHQsXG59IGZyb20gJy4vc3BhaW4vZG9tYWluL3R5cGVzJztcblxuLy8gSmFwYW5cbmltcG9ydCB7IEphcGFuSW5oZXJpdGFuY2VUYXhTZXJ2aWNlSW1wbCBhcyBKYXBhbkluaGVyaXRhbmNlVGF4U2VydmljZSB9IGZyb20gJy4vamFwYW4vSmFwYW5Jbmhlcml0YW5jZVRheFNlcnZpY2VJbXBsJztcbmltcG9ydCB7XG4gICAgSW5wdXQgYXMgSmFwYW5Jbmhlcml0YW5jZVRheElucHV0LFxuICAgIFJ1bGVzIGFzIEphcGFuSW5oZXJpdGFuY2VUYXhSdWxlcyxcbiAgICBSZXN1bHQgYXMgSmFwYW5Jbmhlcml0YW5jZVRheFJlc3VsdCxcbn0gZnJvbSAnLi9qYXBhbi9kb21haW4vdHlwZXMnO1xuXG5leHBvcnQge1xuICAgIENhbmFkYUluaGVyaXRhbmNlVGF4U2VydmljZSxcbiAgICBDYW5hZGFJbmhlcml0YW5jZVRheElucHV0LFxuICAgIENhbmFkYUluaGVyaXRhbmNlVGF4UnVsZXMsXG4gICAgQ2FuYWRhSW5oZXJpdGFuY2VUYXhSZXN1bHQsXG4gICAgRnJhbmNlSW5oZXJpdGFuY2VUYXhTZXJ2aWNlLFxuICAgIEZyYW5jZUluaGVyaXRhbmNlVGF4SW5wdXQsXG4gICAgRnJhbmNlSW5oZXJpdGFuY2VUYXhSdWxlcyxcbiAgICBGcmFuY2VJbmhlcml0YW5jZVRheFJlc3VsdCxcbiAgICBTb3V0aEFmcmljYUluaGVyaXRhbmNlVGF4U2VydmljZSxcbiAgICBTb3V0aEFmcmljYUluaGVyaXRhbmNlVGF4SW5wdXQsXG4gICAgU291dGhBZnJpY2FJbmhlcml0YW5jZVRheFJ1bGVzLFxuICAgIFNvdXRoQWZyaWNhSW5oZXJpdGFuY2VUYXhSZXN1bHQsXG4gICAgQXVzdHJhbGlhSW5oZXJpdGFuY2VUYXhTZXJ2aWNlLFxuICAgIEF1c3RyYWxpYUluaGVyaXRhbmNlVGF4SW5wdXQsXG4gICAgQXVzdHJhbGlhSW5oZXJpdGFuY2VUYXhSdWxlcyxcbiAgICBBdXN0cmFsaWFJbmhlcml0YW5jZVRheFJlc3VsdCxcbiAgICBVS0luaGVyaXRhbmNlVGF4U2VydmljZSxcbiAgICBVS0luaGVyaXRhbmNlVGF4SW5wdXQsXG4gICAgVUtJbmhlcml0YW5jZVRheFJ1bGVzLFxuICAgIFVLSW5oZXJpdGFuY2VUYXhSZXN1bHQsXG4gICAgVVNBSW5oZXJpdGFuY2VUYXhTZXJ2aWNlLFxuICAgIFVTQUluaGVyaXRhbmNlVGF4SW5wdXQsXG4gICAgVVNBSW5oZXJpdGFuY2VUYXhSdWxlcyxcbiAgICBVU0FJbmhlcml0YW5jZVRheFJlc3VsdCxcbiAgICBHZXJtYW55SW5oZXJpdGFuY2VUYXhTZXJ2aWNlLFxuICAgIEdlcm1hbnlJbmhlcml0YW5jZVRheElucHV0LFxuICAgIEdlcm1hbnlJbmhlcml0YW5jZVRheFJ1bGVzLFxuICAgIEdlcm1hbnlJbmhlcml0YW5jZVRheFJlc3VsdCxcbiAgICBTcGFpbkluaGVyaXRhbmNlVGF4U2VydmljZSxcbiAgICBTcGFpbkluaGVyaXRhbmNlVGF4SW5wdXQsXG4gICAgU3BhaW5Jbmhlcml0YW5jZVRheFJ1bGVzLFxuICAgIFNwYWluSW5oZXJpdGFuY2VUYXhSZXN1bHQsXG4gICAgSmFwYW5Jbmhlcml0YW5jZVRheFNlcnZpY2UsXG4gICAgSmFwYW5Jbmhlcml0YW5jZVRheElucHV0LFxuICAgIEphcGFuSW5oZXJpdGFuY2VUYXhSdWxlcyxcbiAgICBKYXBhbkluaGVyaXRhbmNlVGF4UmVzdWx0LFxufTtcbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSmFwYW5Jbmhlcml0YW5jZVRheFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L2phcGFuL0phcGFuSW5oZXJpdGFuY2VUYXhTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBKYXBhbkluaGVyaXRhbmNlVGF4U2VydmljZSB7XG4gICAgY2FsY3VsYXRlKCk6IFJlc3VsdDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JapanInheritanceTaxServiceImpl = void 0;
|
|
4
|
+
class JapanInheritanceTaxServiceImpl {
|
|
5
|
+
constructor(input, rules) {
|
|
6
|
+
this._input = input;
|
|
7
|
+
this._rules = rules;
|
|
8
|
+
}
|
|
9
|
+
calculate() {
|
|
10
|
+
const estate = this._input.estateValue;
|
|
11
|
+
const heirs = Math.max(1, this._input.numberOfStatutoryHeirs);
|
|
12
|
+
const exemption = this._rules.baseExemption + this._rules.perHeirExemption * heirs;
|
|
13
|
+
if (estate <= 0 || estate <= exemption) {
|
|
14
|
+
return {
|
|
15
|
+
taxableEstate: 0,
|
|
16
|
+
inheritanceTax: 0,
|
|
17
|
+
effectiveRate: 0,
|
|
18
|
+
breakdowns: [],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
const taxableEstate = estate - exemption;
|
|
22
|
+
const { tax, breakdowns } = this.applyBrackets(taxableEstate, this._rules.taxBrackets);
|
|
23
|
+
return {
|
|
24
|
+
taxableEstate,
|
|
25
|
+
inheritanceTax: tax,
|
|
26
|
+
effectiveRate: estate > 0 ? (tax / estate) * 100 : 0,
|
|
27
|
+
breakdowns,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
applyBrackets(taxableAmount, brackets) {
|
|
31
|
+
let tax = 0;
|
|
32
|
+
const breakdowns = [];
|
|
33
|
+
for (const bracket of brackets) {
|
|
34
|
+
if (taxableAmount <= bracket.from)
|
|
35
|
+
break;
|
|
36
|
+
const upper = bracket.to ?? taxableAmount;
|
|
37
|
+
const taxable = Math.min(upper, taxableAmount) - bracket.from;
|
|
38
|
+
if (taxable > 0) {
|
|
39
|
+
const bracketTax = taxable * bracket.rate;
|
|
40
|
+
tax += bracketTax;
|
|
41
|
+
breakdowns.push({
|
|
42
|
+
from: `${bracket.from}`,
|
|
43
|
+
to: `${bracket.to ?? 'Above'}`,
|
|
44
|
+
rate: bracket.rate,
|
|
45
|
+
amount: bracketTax,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return { tax, breakdowns };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.JapanInheritanceTaxServiceImpl = JapanInheritanceTaxServiceImpl;
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSmFwYW5Jbmhlcml0YW5jZVRheFNlcnZpY2VJbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luaGVyaXRhbmNlLXRheC9qYXBhbi9KYXBhbkluaGVyaXRhbmNlVGF4U2VydmljZUltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsTUFBYSw4QkFBOEI7SUFJdkMsWUFBWSxLQUFZLEVBQUUsS0FBWTtRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUM5RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUVuRixJQUFJLE1BQU0sSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLE9BQU87Z0JBQ0gsYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLGNBQWMsRUFBRSxDQUFDO2dCQUNqQixhQUFhLEVBQUUsQ0FBQztnQkFDaEIsVUFBVSxFQUFFLEVBQUU7YUFDakIsQ0FBQztRQUNOLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQ3pDLE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV2RixPQUFPO1lBQ0gsYUFBYTtZQUNiLGNBQWMsRUFBRSxHQUFHO1lBQ25CLGFBQWEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsVUFBVTtTQUNiLENBQUM7SUFDTixDQUFDO0lBRU8sYUFBYSxDQUNqQixhQUFxQixFQUNyQixRQUFzQjtRQUV0QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixNQUFNLFVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBRW5DLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7WUFDN0IsSUFBSSxhQUFhLElBQUksT0FBTyxDQUFDLElBQUk7Z0JBQUUsTUFBTTtZQUV6QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsRUFBRSxJQUFJLGFBQWEsQ0FBQztZQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBRTlELElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNkLE1BQU0sVUFBVSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUMxQyxHQUFHLElBQUksVUFBVSxDQUFDO2dCQUVsQixVQUFVLENBQUMsSUFBSSxDQUFDO29CQUNaLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUU7b0JBQ3ZCLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksT0FBTyxFQUFFO29CQUM5QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7b0JBQ2xCLE1BQU0sRUFBRSxVQUFVO2lCQUNyQixDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNKO0FBOURELHdFQThEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrZG93biB9IGZyb20gXCIuLi9kb21haW4vdHlwZXNcIjtcbmltcG9ydCB7IEphcGFuSW5oZXJpdGFuY2VUYXhTZXJ2aWNlIH0gZnJvbSBcIi4vSmFwYW5Jbmhlcml0YW5jZVRheFNlcnZpY2VcIjtcbmltcG9ydCB7IElucHV0LCBSZXN1bHQsIFJ1bGVzLCBUYXhCcmFja2V0IH0gZnJvbSBcIi4vZG9tYWluL3R5cGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBKYXBhbkluaGVyaXRhbmNlVGF4U2VydmljZUltcGwgaW1wbGVtZW50cyBKYXBhbkluaGVyaXRhbmNlVGF4U2VydmljZSB7XG4gICAgcHJpdmF0ZSBfaW5wdXQ6IElucHV0O1xuICAgIHByaXZhdGUgX3J1bGVzOiBSdWxlcztcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0OiBJbnB1dCwgcnVsZXM6IFJ1bGVzKSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX3J1bGVzID0gcnVsZXM7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlKCk6IFJlc3VsdCB7XG4gICAgICAgIGNvbnN0IGVzdGF0ZSA9IHRoaXMuX2lucHV0LmVzdGF0ZVZhbHVlO1xuICAgICAgICBjb25zdCBoZWlycyA9IE1hdGgubWF4KDEsIHRoaXMuX2lucHV0Lm51bWJlck9mU3RhdHV0b3J5SGVpcnMpO1xuICAgICAgICBjb25zdCBleGVtcHRpb24gPSB0aGlzLl9ydWxlcy5iYXNlRXhlbXB0aW9uICsgdGhpcy5fcnVsZXMucGVySGVpckV4ZW1wdGlvbiAqIGhlaXJzO1xuXG4gICAgICAgIGlmIChlc3RhdGUgPD0gMCB8fCBlc3RhdGUgPD0gZXhlbXB0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRheGFibGVFc3RhdGU6IDAsXG4gICAgICAgICAgICAgICAgaW5oZXJpdGFuY2VUYXg6IDAsXG4gICAgICAgICAgICAgICAgZWZmZWN0aXZlUmF0ZTogMCxcbiAgICAgICAgICAgICAgICBicmVha2Rvd25zOiBbXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXhhYmxlRXN0YXRlID0gZXN0YXRlIC0gZXhlbXB0aW9uO1xuICAgICAgICBjb25zdCB7IHRheCwgYnJlYWtkb3ducyB9ID0gdGhpcy5hcHBseUJyYWNrZXRzKHRheGFibGVFc3RhdGUsIHRoaXMuX3J1bGVzLnRheEJyYWNrZXRzKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGF4YWJsZUVzdGF0ZSxcbiAgICAgICAgICAgIGluaGVyaXRhbmNlVGF4OiB0YXgsXG4gICAgICAgICAgICBlZmZlY3RpdmVSYXRlOiBlc3RhdGUgPiAwID8gKHRheCAvIGVzdGF0ZSkgKiAxMDAgOiAwLFxuICAgICAgICAgICAgYnJlYWtkb3ducyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5QnJhY2tldHMoXG4gICAgICAgIHRheGFibGVBbW91bnQ6IG51bWJlcixcbiAgICAgICAgYnJhY2tldHM6IFRheEJyYWNrZXRbXSxcbiAgICApOiB7IHRheDogbnVtYmVyOyBicmVha2Rvd25zOiBCcmVha2Rvd25bXSB9IHtcbiAgICAgICAgbGV0IHRheCA9IDA7XG4gICAgICAgIGNvbnN0IGJyZWFrZG93bnM6IEJyZWFrZG93bltdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBicmFja2V0IG9mIGJyYWNrZXRzKSB7XG4gICAgICAgICAgICBpZiAodGF4YWJsZUFtb3VudCA8PSBicmFja2V0LmZyb20pIGJyZWFrO1xuXG4gICAgICAgICAgICBjb25zdCB1cHBlciA9IGJyYWNrZXQudG8gPz8gdGF4YWJsZUFtb3VudDtcbiAgICAgICAgICAgIGNvbnN0IHRheGFibGUgPSBNYXRoLm1pbih1cHBlciwgdGF4YWJsZUFtb3VudCkgLSBicmFja2V0LmZyb207XG5cbiAgICAgICAgICAgIGlmICh0YXhhYmxlID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJyYWNrZXRUYXggPSB0YXhhYmxlICogYnJhY2tldC5yYXRlO1xuICAgICAgICAgICAgICAgIHRheCArPSBicmFja2V0VGF4O1xuXG4gICAgICAgICAgICAgICAgYnJlYWtkb3ducy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbTogYCR7YnJhY2tldC5mcm9tfWAsXG4gICAgICAgICAgICAgICAgICAgIHRvOiBgJHticmFja2V0LnRvID8/ICdBYm92ZSd9YCxcbiAgICAgICAgICAgICAgICAgICAgcmF0ZTogYnJhY2tldC5yYXRlLFxuICAgICAgICAgICAgICAgICAgICBhbW91bnQ6IGJyYWNrZXRUYXgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyB0YXgsIGJyZWFrZG93bnMgfTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L2phcGFuL2RvbWFpbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtkb3duIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRheEJyYWNrZXQge1xuICAgIGZyb206IG51bWJlcjtcbiAgICB0bzogbnVtYmVyIHwgbnVsbDtcbiAgICByYXRlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZXMge1xuICAgIGJhc2VFeGVtcHRpb246IG51bWJlcjtcbiAgICBwZXJIZWlyRXhlbXB0aW9uOiBudW1iZXI7XG4gICAgdGF4QnJhY2tldHM6IFRheEJyYWNrZXRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgZXN0YXRlVmFsdWU6IG51bWJlcjtcbiAgICBudW1iZXJPZlN0YXR1dG9yeUhlaXJzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdWx0IHtcbiAgICB0YXhhYmxlRXN0YXRlOiBudW1iZXI7XG4gICAgaW5oZXJpdGFuY2VUYXg6IG51bWJlcjtcbiAgICBlZmZlY3RpdmVSYXRlOiBudW1iZXI7XG4gICAgYnJlYWtkb3duczogQnJlYWtkb3duW107XG59XG4iXX0=
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhaW5Jbmhlcml0YW5jZVRheFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L3NwYWluL1NwYWluSW5oZXJpdGFuY2VUYXhTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTcGFpbkluaGVyaXRhbmNlVGF4U2VydmljZSB7XG4gICAgY2FsY3VsYXRlKCk6IFJlc3VsdDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SpainInheritanceTaxServiceImpl = void 0;
|
|
4
|
+
class SpainInheritanceTaxServiceImpl {
|
|
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.SpainInheritanceTaxServiceImpl = SpainInheritanceTaxServiceImpl;
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhaW5Jbmhlcml0YW5jZVRheFNlcnZpY2VJbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luaGVyaXRhbmNlLXRheC9zcGFpbi9TcGFpbkluaGVyaXRhbmNlVGF4U2VydmljZUltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsTUFBYSw4QkFBOEI7SUFJdkMsWUFBWSxLQUFZLEVBQUUsS0FBWTtRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBRXZDLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxPQUFPO2dCQUNILGFBQWEsRUFBRSxDQUFDO2dCQUNoQixjQUFjLEVBQUUsQ0FBQztnQkFDakIsYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLFVBQVUsRUFBRSxFQUFFO2FBQ2pCLENBQUM7UUFDTixDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3JELE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV2RixPQUFPO1lBQ0gsYUFBYTtZQUNiLGNBQWMsRUFBRSxHQUFHO1lBQ25CLGFBQWEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsVUFBVTtTQUNiLENBQUM7SUFDTixDQUFDO0lBRU8sYUFBYSxDQUNqQixhQUFxQixFQUNyQixRQUFzQjtRQUV0QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixNQUFNLFVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBRW5DLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7WUFDN0IsSUFBSSxhQUFhLElBQUksT0FBTyxDQUFDLElBQUk7Z0JBQUUsTUFBTTtZQUV6QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsRUFBRSxJQUFJLGFBQWEsQ0FBQztZQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBRTlELElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNkLE1BQU0sVUFBVSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUMxQyxHQUFHLElBQUksVUFBVSxDQUFDO2dCQUVsQixVQUFVLENBQUMsSUFBSSxDQUFDO29CQUNaLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUU7b0JBQ3ZCLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksT0FBTyxFQUFFO29CQUM5QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7b0JBQ2xCLE1BQU0sRUFBRSxVQUFVO2lCQUNyQixDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNKO0FBNURELHdFQTREQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrZG93biB9IGZyb20gXCIuLi9kb21haW4vdHlwZXNcIjtcbmltcG9ydCB7IFNwYWluSW5oZXJpdGFuY2VUYXhTZXJ2aWNlIH0gZnJvbSBcIi4vU3BhaW5Jbmhlcml0YW5jZVRheFNlcnZpY2VcIjtcbmltcG9ydCB7IElucHV0LCBSZXN1bHQsIFJ1bGVzLCBUYXhCcmFja2V0IH0gZnJvbSBcIi4vZG9tYWluL3R5cGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBTcGFpbkluaGVyaXRhbmNlVGF4U2VydmljZUltcGwgaW1wbGVtZW50cyBTcGFpbkluaGVyaXRhbmNlVGF4U2VydmljZSB7XG4gICAgcHJpdmF0ZSBfaW5wdXQ6IElucHV0O1xuICAgIHByaXZhdGUgX3J1bGVzOiBSdWxlcztcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0OiBJbnB1dCwgcnVsZXM6IFJ1bGVzKSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX3J1bGVzID0gcnVsZXM7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlKCk6IFJlc3VsdCB7XG4gICAgICAgIGNvbnN0IGVzdGF0ZSA9IHRoaXMuX2lucHV0LmVzdGF0ZVZhbHVlO1xuXG4gICAgICAgIGlmIChlc3RhdGUgPD0gMCB8fCBlc3RhdGUgPD0gdGhpcy5fcnVsZXMuZXhlbXB0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRheGFibGVFc3RhdGU6IDAsXG4gICAgICAgICAgICAgICAgaW5oZXJpdGFuY2VUYXg6IDAsXG4gICAgICAgICAgICAgICAgZWZmZWN0aXZlUmF0ZTogMCxcbiAgICAgICAgICAgICAgICBicmVha2Rvd25zOiBbXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXhhYmxlRXN0YXRlID0gZXN0YXRlIC0gdGhpcy5fcnVsZXMuZXhlbXB0aW9uO1xuICAgICAgICBjb25zdCB7IHRheCwgYnJlYWtkb3ducyB9ID0gdGhpcy5hcHBseUJyYWNrZXRzKHRheGFibGVFc3RhdGUsIHRoaXMuX3J1bGVzLnRheEJyYWNrZXRzKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGF4YWJsZUVzdGF0ZSxcbiAgICAgICAgICAgIGluaGVyaXRhbmNlVGF4OiB0YXgsXG4gICAgICAgICAgICBlZmZlY3RpdmVSYXRlOiBlc3RhdGUgPiAwID8gKHRheCAvIGVzdGF0ZSkgKiAxMDAgOiAwLFxuICAgICAgICAgICAgYnJlYWtkb3ducyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5QnJhY2tldHMoXG4gICAgICAgIHRheGFibGVBbW91bnQ6IG51bWJlcixcbiAgICAgICAgYnJhY2tldHM6IFRheEJyYWNrZXRbXSxcbiAgICApOiB7IHRheDogbnVtYmVyOyBicmVha2Rvd25zOiBCcmVha2Rvd25bXSB9IHtcbiAgICAgICAgbGV0IHRheCA9IDA7XG4gICAgICAgIGNvbnN0IGJyZWFrZG93bnM6IEJyZWFrZG93bltdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBicmFja2V0IG9mIGJyYWNrZXRzKSB7XG4gICAgICAgICAgICBpZiAodGF4YWJsZUFtb3VudCA8PSBicmFja2V0LmZyb20pIGJyZWFrO1xuXG4gICAgICAgICAgICBjb25zdCB1cHBlciA9IGJyYWNrZXQudG8gPz8gdGF4YWJsZUFtb3VudDtcbiAgICAgICAgICAgIGNvbnN0IHRheGFibGUgPSBNYXRoLm1pbih1cHBlciwgdGF4YWJsZUFtb3VudCkgLSBicmFja2V0LmZyb207XG5cbiAgICAgICAgICAgIGlmICh0YXhhYmxlID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJyYWNrZXRUYXggPSB0YXhhYmxlICogYnJhY2tldC5yYXRlO1xuICAgICAgICAgICAgICAgIHRheCArPSBicmFja2V0VGF4O1xuXG4gICAgICAgICAgICAgICAgYnJlYWtkb3ducy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbTogYCR7YnJhY2tldC5mcm9tfWAsXG4gICAgICAgICAgICAgICAgICAgIHRvOiBgJHticmFja2V0LnRvID8/ICdBYm92ZSd9YCxcbiAgICAgICAgICAgICAgICAgICAgcmF0ZTogYnJhY2tldC5yYXRlLFxuICAgICAgICAgICAgICAgICAgICBhbW91bnQ6IGJyYWNrZXRUYXgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyB0YXgsIGJyZWFrZG93bnMgfTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5oZXJpdGFuY2UtdGF4L3NwYWluL2RvbWFpbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtkb3duIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRheEJyYWNrZXQge1xuICAgIGZyb206IG51bWJlcjtcbiAgICB0bzogbnVtYmVyIHwgbnVsbDtcbiAgICByYXRlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZXMge1xuICAgIGV4ZW1wdGlvbjogbnVtYmVyO1xuICAgIHRheEJyYWNrZXRzOiBUYXhCcmFja2V0W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXQge1xuICAgIGVzdGF0ZVZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdWx0IHtcbiAgICB0YXhhYmxlRXN0YXRlOiBudW1iZXI7XG4gICAgaW5oZXJpdGFuY2VUYXg6IG51bWJlcjtcbiAgICBlZmZlY3RpdmVSYXRlOiBudW1iZXI7XG4gICAgYnJlYWtkb3duczogQnJlYWtkb3duW107XG59XG4iXX0=
|
|
@@ -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
|