@novha/calc-engines 5.0.0 → 6.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 (92) hide show
  1. package/dist/capital-gains/australia/AustraliaCapitalGainsService.js +1 -1
  2. package/dist/capital-gains/australia/AustraliaCapitalGainsServiceImpl.js +14 -3
  3. package/dist/capital-gains/australia/domain/types.js +1 -1
  4. package/dist/capital-gains/canada/CanadaCapitalGainsService.js +1 -1
  5. package/dist/capital-gains/canada/CanadaCapitalGainsServiceImpl.js +14 -3
  6. package/dist/capital-gains/canada/domain/types.js +1 -1
  7. package/dist/capital-gains/domain/types.js +1 -1
  8. package/dist/capital-gains/france/FranceCapitalGainsService.js +1 -1
  9. package/dist/capital-gains/france/FranceCapitalGainsServiceImpl.js +16 -6
  10. package/dist/capital-gains/france/domain/types.js +1 -1
  11. package/dist/capital-gains/germany/GermanyCapitalGainsService.js +1 -1
  12. package/dist/capital-gains/germany/GermanyCapitalGainsServiceImpl.js +15 -12
  13. package/dist/capital-gains/germany/domain/types.js +1 -1
  14. package/dist/capital-gains/index.js +25 -0
  15. package/dist/capital-gains/south-africa/SouthAfricaCapitalGainsService.js +1 -1
  16. package/dist/capital-gains/south-africa/SouthAfricaCapitalGainsServiceImpl.js +18 -4
  17. package/dist/capital-gains/south-africa/domain/types.js +1 -1
  18. package/dist/capital-gains/uk/UKCapitalGainsService.js +1 -1
  19. package/dist/capital-gains/uk/UKCapitalGainsServiceImpl.js +18 -4
  20. package/dist/capital-gains/uk/domain/types.js +1 -1
  21. package/dist/capital-gains/usa/USACapitalGainsService.js +1 -1
  22. package/dist/capital-gains/usa/USACapitalGainsServiceImpl.js +13 -3
  23. package/dist/corporate/index.js +18 -0
  24. package/dist/income-tax/index.js +24 -0
  25. package/dist/index.js +18 -72
  26. package/dist/mortgage/france/FranceMortgageService.js +1 -1
  27. package/dist/mortgage/france/FranceMortgageServiceImpl.js +1 -1
  28. package/dist/mortgage/index.js +25 -0
  29. package/dist/types/capital-gains/australia/AustraliaCapitalGainsService.d.ts +1 -1
  30. package/dist/types/capital-gains/australia/AustraliaCapitalGainsServiceImpl.d.ts +2 -1
  31. package/dist/types/capital-gains/australia/domain/types.d.ts +0 -7
  32. package/dist/types/capital-gains/canada/CanadaCapitalGainsService.d.ts +1 -1
  33. package/dist/types/capital-gains/canada/CanadaCapitalGainsServiceImpl.d.ts +2 -1
  34. package/dist/types/capital-gains/canada/domain/types.d.ts +0 -7
  35. package/dist/types/capital-gains/domain/types.d.ts +9 -0
  36. package/dist/types/capital-gains/france/FranceCapitalGainsService.d.ts +1 -1
  37. package/dist/types/capital-gains/france/FranceCapitalGainsServiceImpl.d.ts +2 -1
  38. package/dist/types/capital-gains/france/domain/types.d.ts +0 -8
  39. package/dist/types/capital-gains/germany/GermanyCapitalGainsService.d.ts +1 -1
  40. package/dist/types/capital-gains/germany/GermanyCapitalGainsServiceImpl.d.ts +2 -1
  41. package/dist/types/capital-gains/germany/domain/types.d.ts +0 -9
  42. package/dist/types/capital-gains/index.d.ts +15 -0
  43. package/dist/types/capital-gains/south-africa/SouthAfricaCapitalGainsService.d.ts +1 -1
  44. package/dist/types/capital-gains/south-africa/SouthAfricaCapitalGainsServiceImpl.d.ts +2 -1
  45. package/dist/types/capital-gains/south-africa/domain/types.d.ts +0 -7
  46. package/dist/types/capital-gains/uk/UKCapitalGainsService.d.ts +1 -1
  47. package/dist/types/capital-gains/uk/UKCapitalGainsServiceImpl.d.ts +2 -1
  48. package/dist/types/capital-gains/uk/domain/types.d.ts +0 -7
  49. package/dist/types/capital-gains/usa/USACapitalGainsService.d.ts +1 -1
  50. package/dist/types/capital-gains/usa/USACapitalGainsServiceImpl.d.ts +2 -1
  51. package/dist/types/corporate/index.d.ts +15 -0
  52. package/dist/types/income-tax/index.d.ts +15 -0
  53. package/dist/types/index.d.ts +4 -56
  54. package/dist/types/mortgage/france/FranceMortgageService.d.ts +1 -1
  55. package/dist/types/mortgage/france/FranceMortgageServiceImpl.d.ts +1 -1
  56. package/dist/types/mortgage/index.d.ts +15 -0
  57. package/package.json +1 -1
  58. package/src/capital-gains/australia/AustraliaCapitalGainsService.ts +1 -1
  59. package/src/capital-gains/australia/AustraliaCapitalGainsServiceImpl.ts +15 -4
  60. package/src/capital-gains/australia/domain/types.ts +0 -9
  61. package/src/capital-gains/canada/CanadaCapitalGainsService.ts +1 -1
  62. package/src/capital-gains/canada/CanadaCapitalGainsServiceImpl.ts +15 -4
  63. package/src/capital-gains/canada/domain/types.ts +0 -9
  64. package/src/capital-gains/domain/types.ts +9 -0
  65. package/src/capital-gains/france/FranceCapitalGainsService.ts +1 -1
  66. package/src/capital-gains/france/FranceCapitalGainsServiceImpl.ts +17 -7
  67. package/src/capital-gains/france/domain/types.ts +1 -11
  68. package/src/capital-gains/germany/GermanyCapitalGainsService.ts +1 -1
  69. package/src/capital-gains/germany/GermanyCapitalGainsServiceImpl.ts +16 -13
  70. package/src/capital-gains/germany/domain/types.ts +0 -10
  71. package/src/capital-gains/index.ts +72 -0
  72. package/src/capital-gains/south-africa/SouthAfricaCapitalGainsService.ts +1 -1
  73. package/src/capital-gains/south-africa/SouthAfricaCapitalGainsServiceImpl.ts +19 -5
  74. package/src/capital-gains/south-africa/domain/types.ts +0 -9
  75. package/src/capital-gains/uk/UKCapitalGainsService.ts +1 -1
  76. package/src/capital-gains/uk/UKCapitalGainsServiceImpl.ts +19 -5
  77. package/src/capital-gains/uk/domain/types.ts +0 -9
  78. package/src/capital-gains/usa/USACapitalGainsService.ts +1 -1
  79. package/src/capital-gains/usa/USACapitalGainsServiceImpl.ts +14 -4
  80. package/src/corporate/index.ts +79 -0
  81. package/src/income-tax/index.ts +72 -0
  82. package/src/index.ts +6 -202
  83. package/src/mortgage/france/FranceMortgageService.ts +1 -1
  84. package/src/mortgage/france/FranceMortgageServiceImpl.ts +1 -1
  85. package/src/mortgage/index.ts +87 -0
  86. package/test/australia-capital-gains.test.ts +5 -5
  87. package/test/canada-capital-gains.test.ts +5 -5
  88. package/test/france-capital-gains.test.ts +1 -1
  89. package/test/germany-capital-gains.test.ts +4 -4
  90. package/test/south-africa-capital-gains.test.ts +6 -6
  91. package/test/uk-capital-gains.test.ts +7 -7
  92. package/test/usa-capital-gains.test.ts +4 -4
@@ -29,7 +29,7 @@ describe('CanadaCapitalGainsServiceImpl', () => {
29
29
 
30
30
  // Taxable gain = 20000, all in first bracket (15%)
31
31
  expect(result.taxableGain).toBe(20000);
32
- expect(result.capitalGainsTax).toBe(20000 * 0.15);
32
+ expect(result.capitalGainTax).toBe(20000 * 0.15);
33
33
  });
34
34
 
35
35
  it('returns zero for zero gain', () => {
@@ -37,7 +37,7 @@ describe('CanadaCapitalGainsServiceImpl', () => {
37
37
  const service = new CanadaCapitalGainsServiceImpl(input, canadaCapitalGainsRules);
38
38
  const result = service.calculate();
39
39
 
40
- expect(result.capitalGainsTax).toBe(0);
40
+ expect(result.capitalGainTax).toBe(0);
41
41
  expect(result.taxableGain).toBe(0);
42
42
  expect(result.breakdowns).toHaveLength(0);
43
43
  });
@@ -47,7 +47,7 @@ describe('CanadaCapitalGainsServiceImpl', () => {
47
47
  const service = new CanadaCapitalGainsServiceImpl(input, canadaCapitalGainsRules);
48
48
  const result = service.calculate();
49
49
 
50
- expect(result.capitalGainsTax).toBe(0);
50
+ expect(result.capitalGainTax).toBe(0);
51
51
  });
52
52
 
53
53
  it('calculates effective rate based on full gain', () => {
@@ -55,7 +55,7 @@ describe('CanadaCapitalGainsServiceImpl', () => {
55
55
  const service = new CanadaCapitalGainsServiceImpl(input, canadaCapitalGainsRules);
56
56
  const result = service.calculate();
57
57
 
58
- expect(result.effectiveRate).toBe((result.capitalGainsTax / 100000) * 100);
58
+ expect(result.effectiveRate).toBe((result.capitalGainTax / 100000) * 100);
59
59
  });
60
60
 
61
61
  it('stacks gain on top of other income', () => {
@@ -66,6 +66,6 @@ describe('CanadaCapitalGainsServiceImpl', () => {
66
66
  // Other income = 50000, taxable gain = 10000
67
67
  // 10000 falls in first bracket (50000-55867 = 5867 at 15%, rest at 20.5%)
68
68
  expect(result.taxableGain).toBe(10000);
69
- expect(result.capitalGainsTax).toBeGreaterThan(0);
69
+ expect(result.capitalGainTax).toBeGreaterThan(0);
70
70
  });
71
71
  });
@@ -13,7 +13,7 @@ describe('FranceCapitalGainsServiceImpl', () => {
13
13
  const service = new FranceCapitalGainsServiceImpl(input, franceCapitalGainsRules);
14
14
  const result = service.calculate();
15
15
 
16
- expect(result.incomeTax).toBe(12800);
16
+ expect(result.capitalGainTax).toBe(12800);
17
17
  expect(result.socialContributions).toBe(17200);
18
18
  expect(result.totalTax).toBe(30000);
19
19
  });
@@ -28,8 +28,8 @@ describe('GermanyCapitalGainsServiceImpl', () => {
28
28
  // Solidarity = 2500 * 5.5% = 137.5
29
29
  // Total = 2637.5
30
30
  expect(result.taxableGain).toBe(10000);
31
- expect(result.capitalGainsTax).toBe(2500);
32
- expect(result.solidaritySurcharge).toBe(137.5);
31
+ expect(result.capitalGainTax).toBe(2500);
32
+ expect(result.socialContributions).toBe(137.5);
33
33
  expect(result.totalTax).toBe(2637.5);
34
34
  });
35
35
 
@@ -78,8 +78,8 @@ describe('GermanyCapitalGainsServiceImpl', () => {
78
78
  const cgt = taxable * 0.25;
79
79
  const soli = cgt * 0.055;
80
80
  expect(result.taxableGain).toBe(taxable);
81
- expect(result.capitalGainsTax).toBe(cgt);
82
- expect(result.solidaritySurcharge).toBeCloseTo(soli, 2);
81
+ expect(result.capitalGainTax).toBe(cgt);
82
+ expect(result.socialContributions).toBeCloseTo(soli, 2);
83
83
  expect(result.totalTax).toBeCloseTo(cgt + soli, 2);
84
84
  });
85
85
  });
@@ -23,7 +23,7 @@ describe('SouthAfricaCapitalGainsServiceImpl', () => {
23
23
  const result = service.calculate();
24
24
 
25
25
  expect(result.taxableGain).toBe(0);
26
- expect(result.capitalGainsTax).toBe(0);
26
+ expect(result.capitalGainTax).toBe(0);
27
27
  });
28
28
 
29
29
  it('applies 40% inclusion rate after exclusion', () => {
@@ -42,7 +42,7 @@ describe('SouthAfricaCapitalGainsServiceImpl', () => {
42
42
  const result = service.calculate();
43
43
 
44
44
  // Taxable gain = 40000, first bracket rate 18%
45
- expect(result.capitalGainsTax).toBe(40000 * 0.18);
45
+ expect(result.capitalGainTax).toBe(40000 * 0.18);
46
46
  });
47
47
 
48
48
  it('returns zero for zero gain', () => {
@@ -50,7 +50,7 @@ describe('SouthAfricaCapitalGainsServiceImpl', () => {
50
50
  const service = new SouthAfricaCapitalGainsServiceImpl(input, southAfricaCapitalGainsRules);
51
51
  const result = service.calculate();
52
52
 
53
- expect(result.capitalGainsTax).toBe(0);
53
+ expect(result.capitalGainTax).toBe(0);
54
54
  expect(result.breakdowns).toHaveLength(0);
55
55
  });
56
56
 
@@ -59,7 +59,7 @@ describe('SouthAfricaCapitalGainsServiceImpl', () => {
59
59
  const service = new SouthAfricaCapitalGainsServiceImpl(input, southAfricaCapitalGainsRules);
60
60
  const result = service.calculate();
61
61
 
62
- expect(result.capitalGainsTax).toBe(0);
62
+ expect(result.capitalGainTax).toBe(0);
63
63
  });
64
64
 
65
65
  it('calculates effective rate based on full gain', () => {
@@ -67,7 +67,7 @@ describe('SouthAfricaCapitalGainsServiceImpl', () => {
67
67
  const service = new SouthAfricaCapitalGainsServiceImpl(input, southAfricaCapitalGainsRules);
68
68
  const result = service.calculate();
69
69
 
70
- expect(result.effectiveRate).toBe((result.capitalGainsTax / 140000) * 100);
70
+ expect(result.effectiveRate).toBe((result.capitalGainTax / 140000) * 100);
71
71
  });
72
72
 
73
73
  it('stacks included gain on other income', () => {
@@ -79,6 +79,6 @@ describe('SouthAfricaCapitalGainsServiceImpl', () => {
79
79
  // Taxable gain = 500000 * 0.40 = 200000
80
80
  // Other income = 300000
81
81
  expect(result.taxableGain).toBe(200000);
82
- expect(result.capitalGainsTax).toBeGreaterThan(0);
82
+ expect(result.capitalGainTax).toBeGreaterThan(0);
83
83
  });
84
84
  });
@@ -16,7 +16,7 @@ describe('UKCapitalGainsServiceImpl', () => {
16
16
  const result = service.calculate();
17
17
 
18
18
  expect(result.taxableGain).toBe(0);
19
- expect(result.capitalGainsTax).toBe(0);
19
+ expect(result.capitalGainTax).toBe(0);
20
20
  });
21
21
 
22
22
  it('applies basic rate for basic-rate taxpayer', () => {
@@ -27,7 +27,7 @@ describe('UKCapitalGainsServiceImpl', () => {
27
27
  // Taxable gain = 13000 - 3000 = 10000
28
28
  // Basic rate remaining = 37700 - 20000 = 17700 (enough for all)
29
29
  expect(result.taxableGain).toBe(10000);
30
- expect(result.capitalGainsTax).toBe(10000 * 0.10);
30
+ expect(result.capitalGainTax).toBe(10000 * 0.10);
31
31
  });
32
32
 
33
33
  it('applies higher rate for higher-rate taxpayer', () => {
@@ -37,7 +37,7 @@ describe('UKCapitalGainsServiceImpl', () => {
37
37
 
38
38
  // Taxable gain = 53000 - 3000 = 50000, all at higher rate (income > basic rate limit)
39
39
  expect(result.taxableGain).toBe(50000);
40
- expect(result.capitalGainsTax).toBe(50000 * 0.20);
40
+ expect(result.capitalGainTax).toBe(50000 * 0.20);
41
41
  });
42
42
 
43
43
  it('splits between basic and higher rate', () => {
@@ -49,7 +49,7 @@ describe('UKCapitalGainsServiceImpl', () => {
49
49
  // Basic rate remaining = 37700 - 30000 = 7700
50
50
  // 7700 at 10% = 770, 12300 at 20% = 2460
51
51
  expect(result.taxableGain).toBe(20000);
52
- expect(result.capitalGainsTax).toBe(7700 * 0.10 + 12300 * 0.20);
52
+ expect(result.capitalGainTax).toBe(7700 * 0.10 + 12300 * 0.20);
53
53
  });
54
54
 
55
55
  it('returns zero for zero gain', () => {
@@ -57,7 +57,7 @@ describe('UKCapitalGainsServiceImpl', () => {
57
57
  const service = new UKCapitalGainsServiceImpl(input, ukCapitalGainsRules);
58
58
  const result = service.calculate();
59
59
 
60
- expect(result.capitalGainsTax).toBe(0);
60
+ expect(result.capitalGainTax).toBe(0);
61
61
  expect(result.breakdowns).toHaveLength(0);
62
62
  });
63
63
 
@@ -66,7 +66,7 @@ describe('UKCapitalGainsServiceImpl', () => {
66
66
  const service = new UKCapitalGainsServiceImpl(input, ukCapitalGainsRules);
67
67
  const result = service.calculate();
68
68
 
69
- expect(result.capitalGainsTax).toBe(0);
69
+ expect(result.capitalGainTax).toBe(0);
70
70
  });
71
71
 
72
72
  it('calculates effective rate based on full gain', () => {
@@ -74,6 +74,6 @@ describe('UKCapitalGainsServiceImpl', () => {
74
74
  const service = new UKCapitalGainsServiceImpl(input, ukCapitalGainsRules);
75
75
  const result = service.calculate();
76
76
 
77
- expect(result.effectiveRate).toBe((result.capitalGainsTax / 53000) * 100);
77
+ expect(result.effectiveRate).toBe((result.capitalGainTax / 53000) * 100);
78
78
  });
79
79
  });
@@ -26,7 +26,7 @@ describe('USACapitalGainsServiceImpl', () => {
26
26
  const service = new USACapitalGainsServiceImpl(input, usaCapitalGainsRules);
27
27
  const result = service.calculate();
28
28
 
29
- expect(result.capitalGainsTax).toBe(0);
29
+ expect(result.capitalGainTax).toBe(0);
30
30
  expect(result.netInvestmentIncomeTax).toBe(0);
31
31
  expect(result.totalTax).toBe(0);
32
32
  });
@@ -37,7 +37,7 @@ describe('USACapitalGainsServiceImpl', () => {
37
37
  const result = service.calculate();
38
38
 
39
39
  // Other income = 50000, gain falls in 50000-100000 range, all at 15%
40
- expect(result.capitalGainsTax).toBe(50000 * 0.15);
40
+ expect(result.capitalGainTax).toBe(50000 * 0.15);
41
41
  expect(result.netInvestmentIncomeTax).toBe(0);
42
42
  });
43
43
 
@@ -47,7 +47,7 @@ describe('USACapitalGainsServiceImpl', () => {
47
47
  const result = service.calculate();
48
48
 
49
49
  expect(result.netInvestmentIncomeTax).toBe(100000 * 0.038);
50
- expect(result.totalTax).toBe(result.capitalGainsTax + result.netInvestmentIncomeTax);
50
+ expect(result.totalTax).toBe(result.capitalGainTax + result.netInvestmentIncomeTax);
51
51
  });
52
52
 
53
53
  it('applies short-term rates for gains held <= 12 months', () => {
@@ -56,7 +56,7 @@ describe('USACapitalGainsServiceImpl', () => {
56
56
  const result = service.calculate();
57
57
 
58
58
  // Short-term gain taxed as ordinary income from 0-50000
59
- expect(result.capitalGainsTax).toBeGreaterThan(0);
59
+ expect(result.capitalGainTax).toBeGreaterThan(0);
60
60
  expect(result.breakdowns.length).toBeGreaterThan(0);
61
61
  });
62
62