@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.
Files changed (278) hide show
  1. package/dist/capital-gains/brazil/BrazilCapitalGainsService.js +3 -0
  2. package/dist/capital-gains/brazil/BrazilCapitalGainsServiceImpl.js +56 -0
  3. package/dist/capital-gains/brazil/domain/types.js +3 -0
  4. package/dist/capital-gains/canada/CanadaCapitalGainsServiceImpl.js +29 -17
  5. package/dist/capital-gains/index.js +14 -2
  6. package/dist/capital-gains/india/IndiaCapitalGainsService.js +3 -0
  7. package/dist/capital-gains/india/IndiaCapitalGainsServiceImpl.js +58 -0
  8. package/dist/capital-gains/india/domain/types.js +3 -0
  9. package/dist/capital-gains/japan/JapanCapitalGainsService.js +3 -0
  10. package/dist/capital-gains/japan/JapanCapitalGainsServiceImpl.js +41 -0
  11. package/dist/capital-gains/japan/domain/types.js +3 -0
  12. package/dist/capital-gains/spain/SpainCapitalGainsService.js +3 -0
  13. package/dist/capital-gains/spain/SpainCapitalGainsServiceImpl.js +56 -0
  14. package/dist/capital-gains/spain/domain/types.js +3 -0
  15. package/dist/corporate/brazil/BrazilCorporateTaxService.js +3 -0
  16. package/dist/corporate/brazil/BrazilCorporateTaxServiceImpl.js +33 -0
  17. package/dist/corporate/brazil/domain/types.js +3 -0
  18. package/dist/corporate/index.js +10 -2
  19. package/dist/corporate/india/IndiaCorporateTaxService.js +3 -0
  20. package/dist/corporate/india/IndiaCorporateTaxServiceImpl.js +29 -0
  21. package/dist/corporate/india/domain/types.js +3 -0
  22. package/dist/corporate/japan/JapanCorporateTaxService.js +3 -0
  23. package/dist/corporate/japan/JapanCorporateTaxServiceImpl.js +29 -0
  24. package/dist/corporate/japan/domain/types.js +3 -0
  25. package/dist/corporate/spain/SpainCorporateTaxService.js +3 -0
  26. package/dist/corporate/spain/SpainCorporateTaxServiceImpl.js +29 -0
  27. package/dist/corporate/spain/domain/types.js +3 -0
  28. package/dist/income-tax/brazil/BrazilIncomeTaxService.js +3 -0
  29. package/dist/income-tax/brazil/BrazilIncomeTaxServiceImpl.js +78 -0
  30. package/dist/income-tax/brazil/domain/types.js +3 -0
  31. package/dist/income-tax/index.js +14 -2
  32. package/dist/income-tax/india/IndiaIncomeTaxService.js +3 -0
  33. package/dist/income-tax/india/IndiaIncomeTaxServiceImpl.js +75 -0
  34. package/dist/income-tax/india/domain/types.js +3 -0
  35. package/dist/income-tax/japan/JapanIncomeTaxService.js +3 -0
  36. package/dist/income-tax/japan/JapanIncomeTaxServiceImpl.js +75 -0
  37. package/dist/income-tax/japan/domain/types.js +3 -0
  38. package/dist/income-tax/spain/SpainIncomeTaxService.js +3 -0
  39. package/dist/income-tax/spain/SpainIncomeTaxServiceImpl.js +62 -0
  40. package/dist/income-tax/spain/domain/types.js +3 -0
  41. package/dist/index.js +3 -2
  42. package/dist/inheritance-tax/australia/AustraliaInheritanceTaxService.js +3 -0
  43. package/dist/inheritance-tax/australia/AustraliaInheritanceTaxServiceImpl.js +19 -0
  44. package/dist/inheritance-tax/australia/domain/types.js +3 -0
  45. package/dist/inheritance-tax/canada/CanadaInheritanceTaxService.js +3 -0
  46. package/dist/inheritance-tax/canada/CanadaInheritanceTaxServiceImpl.js +51 -0
  47. package/dist/inheritance-tax/canada/domain/types.js +3 -0
  48. package/dist/inheritance-tax/domain/types.js +3 -0
  49. package/dist/inheritance-tax/france/FranceInheritanceTaxService.js +3 -0
  50. package/dist/inheritance-tax/france/FranceInheritanceTaxServiceImpl.js +52 -0
  51. package/dist/inheritance-tax/france/domain/types.js +3 -0
  52. package/dist/inheritance-tax/germany/GermanyInheritanceTaxService.js +3 -0
  53. package/dist/inheritance-tax/germany/GermanyInheritanceTaxServiceImpl.js +52 -0
  54. package/dist/inheritance-tax/germany/domain/types.js +3 -0
  55. package/dist/inheritance-tax/index.js +31 -0
  56. package/dist/inheritance-tax/japan/JapanInheritanceTaxService.js +3 -0
  57. package/dist/inheritance-tax/japan/JapanInheritanceTaxServiceImpl.js +53 -0
  58. package/dist/inheritance-tax/japan/domain/types.js +3 -0
  59. package/dist/inheritance-tax/south-africa/SouthAfricaInheritanceTaxService.js +3 -0
  60. package/dist/inheritance-tax/south-africa/SouthAfricaInheritanceTaxServiceImpl.js +52 -0
  61. package/dist/inheritance-tax/south-africa/domain/types.js +3 -0
  62. package/dist/inheritance-tax/spain/SpainInheritanceTaxService.js +3 -0
  63. package/dist/inheritance-tax/spain/SpainInheritanceTaxServiceImpl.js +51 -0
  64. package/dist/inheritance-tax/spain/domain/types.js +3 -0
  65. package/dist/inheritance-tax/uk/UKInheritanceTaxService.js +3 -0
  66. package/dist/inheritance-tax/uk/UKInheritanceTaxServiceImpl.js +39 -0
  67. package/dist/inheritance-tax/uk/domain/types.js +3 -0
  68. package/dist/inheritance-tax/usa/USAInheritanceTaxService.js +3 -0
  69. package/dist/inheritance-tax/usa/USAInheritanceTaxServiceImpl.js +51 -0
  70. package/dist/inheritance-tax/usa/domain/types.js +3 -0
  71. package/dist/mortgage/brazil/BrazilMortgageService.js +3 -0
  72. package/dist/mortgage/brazil/BrazilMortgageServiceImpl.js +76 -0
  73. package/dist/mortgage/brazil/domain/types.js +3 -0
  74. package/dist/mortgage/index.js +14 -2
  75. package/dist/mortgage/india/IndiaMortgageService.js +3 -0
  76. package/dist/mortgage/india/IndiaMortgageServiceImpl.js +76 -0
  77. package/dist/mortgage/india/domain/types.js +3 -0
  78. package/dist/mortgage/japan/JapanMortgageService.js +3 -0
  79. package/dist/mortgage/japan/JapanMortgageServiceImpl.js +76 -0
  80. package/dist/mortgage/japan/domain/types.js +3 -0
  81. package/dist/mortgage/spain/SpainMortgageService.js +3 -0
  82. package/dist/mortgage/spain/SpainMortgageServiceImpl.js +96 -0
  83. package/dist/mortgage/spain/domain/types.js +3 -0
  84. package/dist/shared/domain/types.js +2 -1
  85. package/dist/types/capital-gains/brazil/BrazilCapitalGainsService.d.ts +4 -0
  86. package/dist/types/capital-gains/brazil/BrazilCapitalGainsServiceImpl.d.ts +10 -0
  87. package/dist/types/capital-gains/brazil/domain/types.d.ts +11 -0
  88. package/dist/types/capital-gains/canada/CanadaCapitalGainsServiceImpl.d.ts +1 -1
  89. package/dist/types/capital-gains/index.d.ts +9 -1
  90. package/dist/types/capital-gains/india/IndiaCapitalGainsService.d.ts +4 -0
  91. package/dist/types/capital-gains/india/IndiaCapitalGainsServiceImpl.d.ts +9 -0
  92. package/dist/types/capital-gains/india/domain/types.d.ts +9 -0
  93. package/dist/types/capital-gains/japan/JapanCapitalGainsService.d.ts +4 -0
  94. package/dist/types/capital-gains/japan/JapanCapitalGainsServiceImpl.d.ts +9 -0
  95. package/dist/types/capital-gains/japan/domain/types.d.ts +6 -0
  96. package/dist/types/capital-gains/spain/SpainCapitalGainsService.d.ts +4 -0
  97. package/dist/types/capital-gains/spain/SpainCapitalGainsServiceImpl.d.ts +10 -0
  98. package/dist/types/capital-gains/spain/domain/types.d.ts +11 -0
  99. package/dist/types/corporate/brazil/BrazilCorporateTaxService.d.ts +4 -0
  100. package/dist/types/corporate/brazil/BrazilCorporateTaxServiceImpl.d.ts +8 -0
  101. package/dist/types/corporate/brazil/domain/types.d.ts +19 -0
  102. package/dist/types/corporate/index.d.ts +9 -1
  103. package/dist/types/corporate/india/IndiaCorporateTaxService.d.ts +4 -0
  104. package/dist/types/corporate/india/IndiaCorporateTaxServiceImpl.d.ts +8 -0
  105. package/dist/types/corporate/india/domain/types.d.ts +15 -0
  106. package/dist/types/corporate/japan/JapanCorporateTaxService.d.ts +4 -0
  107. package/dist/types/corporate/japan/JapanCorporateTaxServiceImpl.d.ts +8 -0
  108. package/dist/types/corporate/japan/domain/types.d.ts +15 -0
  109. package/dist/types/corporate/spain/SpainCorporateTaxService.d.ts +4 -0
  110. package/dist/types/corporate/spain/SpainCorporateTaxServiceImpl.d.ts +8 -0
  111. package/dist/types/corporate/spain/domain/types.d.ts +15 -0
  112. package/dist/types/income-tax/brazil/BrazilIncomeTaxService.d.ts +4 -0
  113. package/dist/types/income-tax/brazil/BrazilIncomeTaxServiceImpl.d.ts +11 -0
  114. package/dist/types/income-tax/brazil/domain/types.d.ts +18 -0
  115. package/dist/types/income-tax/index.d.ts +9 -1
  116. package/dist/types/income-tax/india/IndiaIncomeTaxService.d.ts +4 -0
  117. package/dist/types/income-tax/india/IndiaIncomeTaxServiceImpl.d.ts +10 -0
  118. package/dist/types/income-tax/india/domain/types.d.ts +16 -0
  119. package/dist/types/income-tax/japan/JapanIncomeTaxService.d.ts +4 -0
  120. package/dist/types/income-tax/japan/JapanIncomeTaxServiceImpl.d.ts +10 -0
  121. package/dist/types/income-tax/japan/domain/types.d.ts +16 -0
  122. package/dist/types/income-tax/spain/SpainIncomeTaxService.d.ts +4 -0
  123. package/dist/types/income-tax/spain/SpainIncomeTaxServiceImpl.d.ts +10 -0
  124. package/dist/types/income-tax/spain/domain/types.d.ts +16 -0
  125. package/dist/types/index.d.ts +1 -0
  126. package/dist/types/inheritance-tax/australia/AustraliaInheritanceTaxService.d.ts +4 -0
  127. package/dist/types/inheritance-tax/australia/AustraliaInheritanceTaxServiceImpl.d.ts +8 -0
  128. package/dist/types/inheritance-tax/australia/domain/types.d.ts +13 -0
  129. package/dist/types/inheritance-tax/canada/CanadaInheritanceTaxService.d.ts +4 -0
  130. package/dist/types/inheritance-tax/canada/CanadaInheritanceTaxServiceImpl.d.ts +9 -0
  131. package/dist/types/inheritance-tax/canada/domain/types.d.ts +20 -0
  132. package/dist/types/inheritance-tax/domain/types.d.ts +17 -0
  133. package/dist/types/inheritance-tax/france/FranceInheritanceTaxService.d.ts +4 -0
  134. package/dist/types/inheritance-tax/france/FranceInheritanceTaxServiceImpl.d.ts +9 -0
  135. package/dist/types/inheritance-tax/france/domain/types.d.ts +29 -0
  136. package/dist/types/inheritance-tax/germany/GermanyInheritanceTaxService.d.ts +4 -0
  137. package/dist/types/inheritance-tax/germany/GermanyInheritanceTaxServiceImpl.d.ts +9 -0
  138. package/dist/types/inheritance-tax/germany/domain/types.d.ts +28 -0
  139. package/dist/types/inheritance-tax/index.d.ts +19 -0
  140. package/dist/types/inheritance-tax/japan/JapanInheritanceTaxService.d.ts +4 -0
  141. package/dist/types/inheritance-tax/japan/JapanInheritanceTaxServiceImpl.d.ts +9 -0
  142. package/dist/types/inheritance-tax/japan/domain/types.d.ts +21 -0
  143. package/dist/types/inheritance-tax/south-africa/SouthAfricaInheritanceTaxService.d.ts +4 -0
  144. package/dist/types/inheritance-tax/south-africa/SouthAfricaInheritanceTaxServiceImpl.d.ts +9 -0
  145. package/dist/types/inheritance-tax/south-africa/domain/types.d.ts +20 -0
  146. package/dist/types/inheritance-tax/spain/SpainInheritanceTaxService.d.ts +4 -0
  147. package/dist/types/inheritance-tax/spain/SpainInheritanceTaxServiceImpl.d.ts +9 -0
  148. package/dist/types/inheritance-tax/spain/domain/types.d.ts +19 -0
  149. package/dist/types/inheritance-tax/uk/UKInheritanceTaxService.d.ts +4 -0
  150. package/dist/types/inheritance-tax/uk/UKInheritanceTaxServiceImpl.d.ts +8 -0
  151. package/dist/types/inheritance-tax/uk/domain/types.d.ts +17 -0
  152. package/dist/types/inheritance-tax/usa/USAInheritanceTaxService.d.ts +4 -0
  153. package/dist/types/inheritance-tax/usa/USAInheritanceTaxServiceImpl.d.ts +9 -0
  154. package/dist/types/inheritance-tax/usa/domain/types.d.ts +19 -0
  155. package/dist/types/mortgage/brazil/BrazilMortgageService.d.ts +4 -0
  156. package/dist/types/mortgage/brazil/BrazilMortgageServiceImpl.d.ts +7 -0
  157. package/dist/types/mortgage/brazil/domain/types.d.ts +39 -0
  158. package/dist/types/mortgage/index.d.ts +9 -1
  159. package/dist/types/mortgage/india/IndiaMortgageService.d.ts +4 -0
  160. package/dist/types/mortgage/india/IndiaMortgageServiceImpl.d.ts +7 -0
  161. package/dist/types/mortgage/india/domain/types.d.ts +39 -0
  162. package/dist/types/mortgage/japan/JapanMortgageService.d.ts +4 -0
  163. package/dist/types/mortgage/japan/JapanMortgageServiceImpl.d.ts +7 -0
  164. package/dist/types/mortgage/japan/domain/types.d.ts +39 -0
  165. package/dist/types/mortgage/spain/SpainMortgageService.d.ts +4 -0
  166. package/dist/types/mortgage/spain/SpainMortgageServiceImpl.d.ts +8 -0
  167. package/dist/types/mortgage/spain/domain/types.d.ts +44 -0
  168. package/dist/types/shared/domain/types.d.ts +2 -1
  169. package/package.json +1 -1
  170. package/src/capital-gains/brazil/BrazilCapitalGainsService.ts +5 -0
  171. package/src/capital-gains/brazil/BrazilCapitalGainsServiceImpl.ts +69 -0
  172. package/src/capital-gains/brazil/domain/types.ts +15 -0
  173. package/src/capital-gains/canada/CanadaCapitalGainsServiceImpl.ts +34 -21
  174. package/src/capital-gains/index.ts +40 -0
  175. package/src/capital-gains/india/IndiaCapitalGainsService.ts +5 -0
  176. package/src/capital-gains/india/IndiaCapitalGainsServiceImpl.ts +64 -0
  177. package/src/capital-gains/india/domain/types.ts +12 -0
  178. package/src/capital-gains/japan/JapanCapitalGainsService.ts +5 -0
  179. package/src/capital-gains/japan/JapanCapitalGainsServiceImpl.ts +47 -0
  180. package/src/capital-gains/japan/domain/types.ts +9 -0
  181. package/src/capital-gains/spain/SpainCapitalGainsService.ts +5 -0
  182. package/src/capital-gains/spain/SpainCapitalGainsServiceImpl.ts +69 -0
  183. package/src/capital-gains/spain/domain/types.ts +15 -0
  184. package/src/corporate/brazil/BrazilCorporateTaxService.ts +5 -0
  185. package/src/corporate/brazil/BrazilCorporateTaxServiceImpl.ts +40 -0
  186. package/src/corporate/brazil/domain/types.ts +16 -0
  187. package/src/corporate/index.ts +45 -1
  188. package/src/corporate/india/IndiaCorporateTaxService.ts +5 -0
  189. package/src/corporate/india/IndiaCorporateTaxServiceImpl.ts +35 -0
  190. package/src/corporate/india/domain/types.ts +15 -0
  191. package/src/corporate/japan/JapanCorporateTaxService.ts +5 -0
  192. package/src/corporate/japan/JapanCorporateTaxServiceImpl.ts +35 -0
  193. package/src/corporate/japan/domain/types.ts +15 -0
  194. package/src/corporate/spain/SpainCorporateTaxService.ts +5 -0
  195. package/src/corporate/spain/SpainCorporateTaxServiceImpl.ts +35 -0
  196. package/src/corporate/spain/domain/types.ts +15 -0
  197. package/src/income-tax/brazil/BrazilIncomeTaxService.ts +5 -0
  198. package/src/income-tax/brazil/BrazilIncomeTaxServiceImpl.ts +91 -0
  199. package/src/income-tax/brazil/domain/types.ts +21 -0
  200. package/src/income-tax/index.ts +40 -0
  201. package/src/income-tax/india/IndiaIncomeTaxService.ts +5 -0
  202. package/src/income-tax/india/IndiaIncomeTaxServiceImpl.ts +87 -0
  203. package/src/income-tax/india/domain/types.ts +16 -0
  204. package/src/income-tax/japan/JapanIncomeTaxService.ts +5 -0
  205. package/src/income-tax/japan/JapanIncomeTaxServiceImpl.ts +87 -0
  206. package/src/income-tax/japan/domain/types.ts +16 -0
  207. package/src/income-tax/spain/SpainIncomeTaxService.ts +5 -0
  208. package/src/income-tax/spain/SpainIncomeTaxServiceImpl.ts +75 -0
  209. package/src/income-tax/spain/domain/types.ts +16 -0
  210. package/src/index.ts +1 -0
  211. package/src/inheritance-tax/australia/AustraliaInheritanceTaxService.ts +5 -0
  212. package/src/inheritance-tax/australia/AustraliaInheritanceTaxServiceImpl.ts +21 -0
  213. package/src/inheritance-tax/australia/domain/types.ts +16 -0
  214. package/src/inheritance-tax/canada/CanadaInheritanceTaxService.ts +5 -0
  215. package/src/inheritance-tax/canada/CanadaInheritanceTaxServiceImpl.ts +65 -0
  216. package/src/inheritance-tax/canada/domain/types.ts +24 -0
  217. package/src/inheritance-tax/domain/types.ts +19 -0
  218. package/src/inheritance-tax/france/FranceInheritanceTaxService.ts +5 -0
  219. package/src/inheritance-tax/france/FranceInheritanceTaxServiceImpl.ts +66 -0
  220. package/src/inheritance-tax/france/domain/types.ts +35 -0
  221. package/src/inheritance-tax/germany/GermanyInheritanceTaxService.ts +5 -0
  222. package/src/inheritance-tax/germany/GermanyInheritanceTaxServiceImpl.ts +66 -0
  223. package/src/inheritance-tax/germany/domain/types.ts +34 -0
  224. package/src/inheritance-tax/index.ts +110 -0
  225. package/src/inheritance-tax/japan/JapanInheritanceTaxService.ts +5 -0
  226. package/src/inheritance-tax/japan/JapanInheritanceTaxServiceImpl.ts +67 -0
  227. package/src/inheritance-tax/japan/domain/types.ts +25 -0
  228. package/src/inheritance-tax/south-africa/SouthAfricaInheritanceTaxService.ts +5 -0
  229. package/src/inheritance-tax/south-africa/SouthAfricaInheritanceTaxServiceImpl.ts +66 -0
  230. package/src/inheritance-tax/south-africa/domain/types.ts +24 -0
  231. package/src/inheritance-tax/spain/SpainInheritanceTaxService.ts +5 -0
  232. package/src/inheritance-tax/spain/SpainInheritanceTaxServiceImpl.ts +65 -0
  233. package/src/inheritance-tax/spain/domain/types.ts +23 -0
  234. package/src/inheritance-tax/uk/UKInheritanceTaxService.ts +5 -0
  235. package/src/inheritance-tax/uk/UKInheritanceTaxServiceImpl.ts +46 -0
  236. package/src/inheritance-tax/uk/domain/types.ts +20 -0
  237. package/src/inheritance-tax/usa/USAInheritanceTaxService.ts +5 -0
  238. package/src/inheritance-tax/usa/USAInheritanceTaxServiceImpl.ts +65 -0
  239. package/src/inheritance-tax/usa/domain/types.ts +23 -0
  240. package/src/mortgage/brazil/BrazilMortgageService.ts +5 -0
  241. package/src/mortgage/brazil/BrazilMortgageServiceImpl.ts +101 -0
  242. package/src/mortgage/brazil/domain/types.ts +46 -0
  243. package/src/mortgage/index.ts +49 -1
  244. package/src/mortgage/india/IndiaMortgageService.ts +5 -0
  245. package/src/mortgage/india/IndiaMortgageServiceImpl.ts +101 -0
  246. package/src/mortgage/india/domain/types.ts +46 -0
  247. package/src/mortgage/japan/JapanMortgageService.ts +5 -0
  248. package/src/mortgage/japan/JapanMortgageServiceImpl.ts +101 -0
  249. package/src/mortgage/japan/domain/types.ts +46 -0
  250. package/src/mortgage/spain/SpainMortgageService.ts +5 -0
  251. package/src/mortgage/spain/SpainMortgageServiceImpl.ts +130 -0
  252. package/src/mortgage/spain/domain/types.ts +52 -0
  253. package/src/shared/domain/types.ts +1 -0
  254. package/test/australia-inheritance-tax.test.ts +35 -0
  255. package/test/brazil-capital-gains.test.ts +65 -0
  256. package/test/brazil-corporate-tax.test.ts +63 -0
  257. package/test/brazil-income-tax.test.ts +85 -0
  258. package/test/brazil-mortgage.test.ts +70 -0
  259. package/test/canada-inheritance-tax.test.ts +62 -0
  260. package/test/france-inheritance-tax.test.ts +101 -0
  261. package/test/germany-inheritance-tax.test.ts +100 -0
  262. package/test/india-capital-gains.test.ts +71 -0
  263. package/test/india-corporate-tax.test.ts +54 -0
  264. package/test/india-income-tax.test.ts +78 -0
  265. package/test/india-mortgage.test.ts +70 -0
  266. package/test/japan-capital-gains.test.ts +55 -0
  267. package/test/japan-corporate-tax.test.ts +54 -0
  268. package/test/japan-income-tax.test.ts +76 -0
  269. package/test/japan-inheritance-tax.test.ts +74 -0
  270. package/test/japan-mortgage.test.ts +69 -0
  271. package/test/south-africa-inheritance-tax.test.ts +81 -0
  272. package/test/spain-capital-gains.test.ts +66 -0
  273. package/test/spain-corporate-tax.test.ts +54 -0
  274. package/test/spain-income-tax.test.ts +84 -0
  275. package/test/spain-inheritance-tax.test.ts +78 -0
  276. package/test/spain-mortgage.test.ts +70 -0
  277. package/test/uk-inheritance-tax.test.ts +72 -0
  278. 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