@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.
- package/dist/capital-gains/australia/AustraliaCapitalGainsService.js +1 -1
- package/dist/capital-gains/australia/AustraliaCapitalGainsServiceImpl.js +14 -3
- package/dist/capital-gains/australia/domain/types.js +1 -1
- package/dist/capital-gains/canada/CanadaCapitalGainsService.js +1 -1
- package/dist/capital-gains/canada/CanadaCapitalGainsServiceImpl.js +14 -3
- package/dist/capital-gains/canada/domain/types.js +1 -1
- package/dist/capital-gains/domain/types.js +1 -1
- package/dist/capital-gains/france/FranceCapitalGainsService.js +1 -1
- package/dist/capital-gains/france/FranceCapitalGainsServiceImpl.js +16 -6
- package/dist/capital-gains/france/domain/types.js +1 -1
- package/dist/capital-gains/germany/GermanyCapitalGainsService.js +1 -1
- package/dist/capital-gains/germany/GermanyCapitalGainsServiceImpl.js +15 -12
- package/dist/capital-gains/germany/domain/types.js +1 -1
- package/dist/capital-gains/index.js +25 -0
- package/dist/capital-gains/south-africa/SouthAfricaCapitalGainsService.js +1 -1
- package/dist/capital-gains/south-africa/SouthAfricaCapitalGainsServiceImpl.js +18 -4
- package/dist/capital-gains/south-africa/domain/types.js +1 -1
- package/dist/capital-gains/uk/UKCapitalGainsService.js +1 -1
- package/dist/capital-gains/uk/UKCapitalGainsServiceImpl.js +18 -4
- package/dist/capital-gains/uk/domain/types.js +1 -1
- package/dist/capital-gains/usa/USACapitalGainsService.js +1 -1
- package/dist/capital-gains/usa/USACapitalGainsServiceImpl.js +13 -3
- package/dist/corporate/index.js +18 -0
- package/dist/income-tax/index.js +24 -0
- package/dist/index.js +18 -72
- package/dist/mortgage/france/FranceMortgageService.js +1 -1
- package/dist/mortgage/france/FranceMortgageServiceImpl.js +1 -1
- package/dist/mortgage/index.js +25 -0
- package/dist/types/capital-gains/australia/AustraliaCapitalGainsService.d.ts +1 -1
- package/dist/types/capital-gains/australia/AustraliaCapitalGainsServiceImpl.d.ts +2 -1
- package/dist/types/capital-gains/australia/domain/types.d.ts +0 -7
- package/dist/types/capital-gains/canada/CanadaCapitalGainsService.d.ts +1 -1
- package/dist/types/capital-gains/canada/CanadaCapitalGainsServiceImpl.d.ts +2 -1
- package/dist/types/capital-gains/canada/domain/types.d.ts +0 -7
- package/dist/types/capital-gains/domain/types.d.ts +9 -0
- package/dist/types/capital-gains/france/FranceCapitalGainsService.d.ts +1 -1
- package/dist/types/capital-gains/france/FranceCapitalGainsServiceImpl.d.ts +2 -1
- package/dist/types/capital-gains/france/domain/types.d.ts +0 -8
- package/dist/types/capital-gains/germany/GermanyCapitalGainsService.d.ts +1 -1
- package/dist/types/capital-gains/germany/GermanyCapitalGainsServiceImpl.d.ts +2 -1
- package/dist/types/capital-gains/germany/domain/types.d.ts +0 -9
- package/dist/types/capital-gains/index.d.ts +15 -0
- package/dist/types/capital-gains/south-africa/SouthAfricaCapitalGainsService.d.ts +1 -1
- package/dist/types/capital-gains/south-africa/SouthAfricaCapitalGainsServiceImpl.d.ts +2 -1
- package/dist/types/capital-gains/south-africa/domain/types.d.ts +0 -7
- package/dist/types/capital-gains/uk/UKCapitalGainsService.d.ts +1 -1
- package/dist/types/capital-gains/uk/UKCapitalGainsServiceImpl.d.ts +2 -1
- package/dist/types/capital-gains/uk/domain/types.d.ts +0 -7
- package/dist/types/capital-gains/usa/USACapitalGainsService.d.ts +1 -1
- package/dist/types/capital-gains/usa/USACapitalGainsServiceImpl.d.ts +2 -1
- package/dist/types/corporate/index.d.ts +15 -0
- package/dist/types/income-tax/index.d.ts +15 -0
- package/dist/types/index.d.ts +4 -56
- package/dist/types/mortgage/france/FranceMortgageService.d.ts +1 -1
- package/dist/types/mortgage/france/FranceMortgageServiceImpl.d.ts +1 -1
- package/dist/types/mortgage/index.d.ts +15 -0
- package/package.json +1 -1
- package/src/capital-gains/australia/AustraliaCapitalGainsService.ts +1 -1
- package/src/capital-gains/australia/AustraliaCapitalGainsServiceImpl.ts +15 -4
- package/src/capital-gains/australia/domain/types.ts +0 -9
- package/src/capital-gains/canada/CanadaCapitalGainsService.ts +1 -1
- package/src/capital-gains/canada/CanadaCapitalGainsServiceImpl.ts +15 -4
- package/src/capital-gains/canada/domain/types.ts +0 -9
- package/src/capital-gains/domain/types.ts +9 -0
- package/src/capital-gains/france/FranceCapitalGainsService.ts +1 -1
- package/src/capital-gains/france/FranceCapitalGainsServiceImpl.ts +17 -7
- package/src/capital-gains/france/domain/types.ts +1 -11
- package/src/capital-gains/germany/GermanyCapitalGainsService.ts +1 -1
- package/src/capital-gains/germany/GermanyCapitalGainsServiceImpl.ts +16 -13
- package/src/capital-gains/germany/domain/types.ts +0 -10
- package/src/capital-gains/index.ts +72 -0
- package/src/capital-gains/south-africa/SouthAfricaCapitalGainsService.ts +1 -1
- package/src/capital-gains/south-africa/SouthAfricaCapitalGainsServiceImpl.ts +19 -5
- package/src/capital-gains/south-africa/domain/types.ts +0 -9
- package/src/capital-gains/uk/UKCapitalGainsService.ts +1 -1
- package/src/capital-gains/uk/UKCapitalGainsServiceImpl.ts +19 -5
- package/src/capital-gains/uk/domain/types.ts +0 -9
- package/src/capital-gains/usa/USACapitalGainsService.ts +1 -1
- package/src/capital-gains/usa/USACapitalGainsServiceImpl.ts +14 -4
- package/src/corporate/index.ts +79 -0
- package/src/income-tax/index.ts +72 -0
- package/src/index.ts +6 -202
- package/src/mortgage/france/FranceMortgageService.ts +1 -1
- package/src/mortgage/france/FranceMortgageServiceImpl.ts +1 -1
- package/src/mortgage/index.ts +87 -0
- package/test/australia-capital-gains.test.ts +5 -5
- package/test/canada-capital-gains.test.ts +5 -5
- package/test/france-capital-gains.test.ts +1 -1
- package/test/germany-capital-gains.test.ts +4 -4
- package/test/south-africa-capital-gains.test.ts +6 -6
- package/test/uk-capital-gains.test.ts +7 -7
- package/test/usa-capital-gains.test.ts +4 -4
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { Breakdown } from "../../domain/types";
|
|
2
|
-
|
|
3
1
|
export interface TaxBracket {
|
|
4
2
|
from: number;
|
|
5
3
|
to: number | null;
|
|
@@ -16,10 +14,3 @@ export interface Input {
|
|
|
16
14
|
capitalGain: number;
|
|
17
15
|
totalTaxableIncome: number;
|
|
18
16
|
}
|
|
19
|
-
|
|
20
|
-
export interface Result {
|
|
21
|
-
taxableGain: number;
|
|
22
|
-
capitalGainsTax: number;
|
|
23
|
-
effectiveRate: number;
|
|
24
|
-
breakdowns: Breakdown[];
|
|
25
|
-
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Breakdown } from "../domain/types";
|
|
1
|
+
import { Breakdown, Result } from "../domain/types";
|
|
2
2
|
import { UKCapitalGainsService } from "./UKCapitalGainsService";
|
|
3
|
-
import { Input,
|
|
3
|
+
import { Input, Rules } from "./domain/types";
|
|
4
4
|
|
|
5
5
|
export class UKCapitalGainsServiceImpl implements UKCapitalGainsService {
|
|
6
6
|
private _input: Input;
|
|
@@ -15,7 +15,15 @@ export class UKCapitalGainsServiceImpl implements UKCapitalGainsService {
|
|
|
15
15
|
const gain = this._input.capitalGain;
|
|
16
16
|
|
|
17
17
|
if (gain <= 0) {
|
|
18
|
-
return {
|
|
18
|
+
return {
|
|
19
|
+
taxableGain: 0,
|
|
20
|
+
capitalGainTax: 0,
|
|
21
|
+
socialContributions: 0,
|
|
22
|
+
netInvestmentIncomeTax: 0,
|
|
23
|
+
totalTax: 0,
|
|
24
|
+
effectiveRate: 0,
|
|
25
|
+
breakdowns: []
|
|
26
|
+
};
|
|
19
27
|
}
|
|
20
28
|
|
|
21
29
|
const taxableGain = Math.max(0, gain - this._rules.annualExemption);
|
|
@@ -23,7 +31,10 @@ export class UKCapitalGainsServiceImpl implements UKCapitalGainsService {
|
|
|
23
31
|
if (taxableGain <= 0) {
|
|
24
32
|
return {
|
|
25
33
|
taxableGain: 0,
|
|
26
|
-
|
|
34
|
+
capitalGainTax: 0,
|
|
35
|
+
socialContributions: 0,
|
|
36
|
+
netInvestmentIncomeTax: 0,
|
|
37
|
+
totalTax: 0,
|
|
27
38
|
effectiveRate: 0,
|
|
28
39
|
breakdowns: [{
|
|
29
40
|
from: '0',
|
|
@@ -76,7 +87,10 @@ export class UKCapitalGainsServiceImpl implements UKCapitalGainsService {
|
|
|
76
87
|
|
|
77
88
|
return {
|
|
78
89
|
taxableGain,
|
|
79
|
-
|
|
90
|
+
capitalGainTax: tax,
|
|
91
|
+
socialContributions: 0,
|
|
92
|
+
netInvestmentIncomeTax: 0,
|
|
93
|
+
totalTax: tax,
|
|
80
94
|
effectiveRate: gain > 0 ? (tax / gain) * 100 : 0,
|
|
81
95
|
breakdowns,
|
|
82
96
|
};
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { Breakdown } from "../../domain/types";
|
|
2
|
-
|
|
3
1
|
export interface Rules {
|
|
4
2
|
annualExemption: number;
|
|
5
3
|
basicRate: number;
|
|
@@ -11,10 +9,3 @@ export interface Input {
|
|
|
11
9
|
capitalGain: number;
|
|
12
10
|
totalTaxableIncome: number;
|
|
13
11
|
}
|
|
14
|
-
|
|
15
|
-
export interface Result {
|
|
16
|
-
taxableGain: number;
|
|
17
|
-
capitalGainsTax: number;
|
|
18
|
-
effectiveRate: number;
|
|
19
|
-
breakdowns: Breakdown[];
|
|
20
|
-
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Breakdown } from "../domain/types";
|
|
1
|
+
import { Breakdown, Result } from "../domain/types";
|
|
2
2
|
import { USACapitalGainsService } from "./USACapitalGainsService";
|
|
3
|
-
import { Input, LongTermBracket,
|
|
3
|
+
import { Input, LongTermBracket, Rules } from "./domain/types";
|
|
4
4
|
|
|
5
5
|
export class USACapitalGainsServiceImpl implements USACapitalGainsService {
|
|
6
6
|
private _input: Input;
|
|
@@ -15,7 +15,15 @@ export class USACapitalGainsServiceImpl implements USACapitalGainsService {
|
|
|
15
15
|
const gain = this._input.capitalGain;
|
|
16
16
|
|
|
17
17
|
if (gain <= 0) {
|
|
18
|
-
return {
|
|
18
|
+
return {
|
|
19
|
+
taxableGain: 0,
|
|
20
|
+
capitalGainTax: 0,
|
|
21
|
+
socialContributions: 0,
|
|
22
|
+
netInvestmentIncomeTax: 0,
|
|
23
|
+
totalTax: 0,
|
|
24
|
+
effectiveRate: 0,
|
|
25
|
+
breakdowns: []
|
|
26
|
+
};
|
|
19
27
|
}
|
|
20
28
|
|
|
21
29
|
const isLongTerm = this._input.holdingPeriodMonths > 12;
|
|
@@ -37,7 +45,9 @@ export class USACapitalGainsServiceImpl implements USACapitalGainsService {
|
|
|
37
45
|
const totalTax = tax + niit;
|
|
38
46
|
|
|
39
47
|
return {
|
|
40
|
-
|
|
48
|
+
taxableGain: gain,
|
|
49
|
+
capitalGainTax: tax,
|
|
50
|
+
socialContributions: 0,
|
|
41
51
|
netInvestmentIncomeTax: niit,
|
|
42
52
|
totalTax,
|
|
43
53
|
effectiveRate: gain > 0 ? (totalTax / gain) * 100 : 0,
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { USACorporateTaxServiceImpl as USACorporateTaxService } from './usa/USACorporateTaxServiceImpl';
|
|
2
|
+
import {
|
|
3
|
+
Input as USACorporateTaxInput,
|
|
4
|
+
Rules as USACorporateTaxRules,
|
|
5
|
+
Result as USACorporateTaxResult,
|
|
6
|
+
} from './usa/domain/types';
|
|
7
|
+
|
|
8
|
+
import { GermanyCorporateTaxServiceImpl as GermanyCorporateTaxService } from './germany/GermanyCorporateTaxServiceImpl';
|
|
9
|
+
import {
|
|
10
|
+
Input as GermanyCorporateTaxInput,
|
|
11
|
+
Rules as GermanyCorporateTaxRules,
|
|
12
|
+
Result as GermanyCorporateTaxResult,
|
|
13
|
+
} from './germany/domain/types';
|
|
14
|
+
|
|
15
|
+
import { UKCorporateTaxServiceImpl as UKCorporateTaxService } from './uk/UKCorporateTaxServiceImpl';
|
|
16
|
+
import {
|
|
17
|
+
Input as UKCorporateTaxInput,
|
|
18
|
+
Rules as UKCorporateTaxRules,
|
|
19
|
+
Result as UKCorporateTaxResult,
|
|
20
|
+
} from './uk/domain/types';
|
|
21
|
+
|
|
22
|
+
import { AustraliaCorporateTaxServiceImpl as AustraliaCorporateTaxService } from './australia/AustraliaCorporateTaxServiceImpl';
|
|
23
|
+
import {
|
|
24
|
+
Input as AustraliaCorporateTaxInput,
|
|
25
|
+
Rules as AustraliaCorporateTaxRules,
|
|
26
|
+
Result as AustraliaCorporateTaxResult,
|
|
27
|
+
} from './australia/domain/types';
|
|
28
|
+
|
|
29
|
+
import { SouthAfricaCorporateTaxServiceImpl as SouthAfricaCorporateTaxService } from './south-africa/SouthAfricaCorporateTaxServiceImpl';
|
|
30
|
+
import {
|
|
31
|
+
Rules as SouthAfricaCorporateTaxRules,
|
|
32
|
+
Input as SouthAfricaCorporateTaxInput,
|
|
33
|
+
Result as SouthAfricaCorporateTaxResult,
|
|
34
|
+
} from './south-africa/domain/types';
|
|
35
|
+
|
|
36
|
+
import { FranceCorporateTaxServiceImpl as FranceCorporateTaxService } from './france/FranceCorporateTaxServiceImpl';
|
|
37
|
+
import {
|
|
38
|
+
Input as FranceCorporateTaxInput,
|
|
39
|
+
Rules as FranceCorporateTaxRules,
|
|
40
|
+
Result as FranceCorporateTaxResult,
|
|
41
|
+
} from './france/domain/types';
|
|
42
|
+
|
|
43
|
+
import { CanadaCorporateTaxServiceImpl as CanadaCorporateTaxService } from './canada/CanadaCorporateTaxServiceImpl';
|
|
44
|
+
import {
|
|
45
|
+
Input as CanadaCorporateTaxInput,
|
|
46
|
+
Rules as CanadaCorporateTaxRules,
|
|
47
|
+
Result as CanadaCorporateTaxResult,
|
|
48
|
+
} from './canada/domain/types';
|
|
49
|
+
|
|
50
|
+
export {
|
|
51
|
+
USACorporateTaxService,
|
|
52
|
+
USACorporateTaxInput,
|
|
53
|
+
USACorporateTaxRules,
|
|
54
|
+
USACorporateTaxResult,
|
|
55
|
+
GermanyCorporateTaxService,
|
|
56
|
+
GermanyCorporateTaxInput,
|
|
57
|
+
GermanyCorporateTaxRules,
|
|
58
|
+
GermanyCorporateTaxResult,
|
|
59
|
+
UKCorporateTaxService,
|
|
60
|
+
UKCorporateTaxInput,
|
|
61
|
+
UKCorporateTaxRules,
|
|
62
|
+
UKCorporateTaxResult,
|
|
63
|
+
AustraliaCorporateTaxService,
|
|
64
|
+
AustraliaCorporateTaxInput,
|
|
65
|
+
AustraliaCorporateTaxRules,
|
|
66
|
+
AustraliaCorporateTaxResult,
|
|
67
|
+
SouthAfricaCorporateTaxService,
|
|
68
|
+
SouthAfricaCorporateTaxInput,
|
|
69
|
+
SouthAfricaCorporateTaxRules,
|
|
70
|
+
SouthAfricaCorporateTaxResult,
|
|
71
|
+
FranceCorporateTaxService,
|
|
72
|
+
FranceCorporateTaxInput,
|
|
73
|
+
FranceCorporateTaxRules,
|
|
74
|
+
FranceCorporateTaxResult,
|
|
75
|
+
CanadaCorporateTaxService,
|
|
76
|
+
CanadaCorporateTaxInput,
|
|
77
|
+
CanadaCorporateTaxRules,
|
|
78
|
+
CanadaCorporateTaxResult
|
|
79
|
+
};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// Canada
|
|
2
|
+
import { CanadaIncomeTaxServiceImpl as CanadaIncomeTaxService } from './canada/CanadaIncomeTaxServiceImpl';
|
|
3
|
+
import {
|
|
4
|
+
ComputedIncomeTaxValues as CanadaComputedIncomeTaxValues,
|
|
5
|
+
IncomeTaxRules as CanadaIncomeTaxRules,
|
|
6
|
+
} from './canada/domain/types';
|
|
7
|
+
import { FranceIncomeTaxServiceImpl as FranceIncomeTaxService } from './france/FranceIncomeTaxServiceImpl';
|
|
8
|
+
|
|
9
|
+
// France
|
|
10
|
+
import {
|
|
11
|
+
ComputedIncomeTaxValues as FranceComputedIncomeTaxValues,
|
|
12
|
+
IncomeTaxRules as FranceIncomeTaxRules,
|
|
13
|
+
} from './france/domain/types';
|
|
14
|
+
|
|
15
|
+
// South Africa
|
|
16
|
+
import { SouthAfricaIncomeTaxServiceImpl as SouthAfricaIncomeTaxService } from './south-africa/SouthAfricaIncomeTaxServiceImpl';
|
|
17
|
+
import {
|
|
18
|
+
ComputedIncomeTaxValues as SouthAfricaComputedIncomeTaxValues,
|
|
19
|
+
IncomeTaxRules as SouthAfricaIncomeTaxRules,
|
|
20
|
+
} from './south-africa/domain/types';
|
|
21
|
+
|
|
22
|
+
// Australia
|
|
23
|
+
import { AustraliaIncomeTaxServiceImpl as AustraliaIncomeTaxService } from './australia/AustraliaIncomeTaxServiceImpl';
|
|
24
|
+
import {
|
|
25
|
+
ComputedIncomeTaxValues as AustraliaComputedIncomeTaxValues,
|
|
26
|
+
IncomeTaxRules as AustraliaIncomeTaxRules,
|
|
27
|
+
} from './australia/domain/types';
|
|
28
|
+
|
|
29
|
+
// UK
|
|
30
|
+
import { UKIncomeTaxServiceImpl as UKIncomeTaxService } from './uk/UKIncomeTaxServiceImpl';
|
|
31
|
+
import {
|
|
32
|
+
ComputedIncomeTaxValues as UKComputedIncomeTaxValues,
|
|
33
|
+
IncomeTaxRules as UKIncomeTaxRules,
|
|
34
|
+
} from './uk/domain/types';
|
|
35
|
+
|
|
36
|
+
// USA
|
|
37
|
+
import { USAIncomeTaxServiceImpl as USAIncomeTaxService } from './usa/USAIncomeTaxServiceImpl';
|
|
38
|
+
import {
|
|
39
|
+
ComputedIncomeTaxValues as USAComputedIncomeTaxValues,
|
|
40
|
+
IncomeTaxRules as USAIncomeTaxRules,
|
|
41
|
+
} from './usa/domain/types';
|
|
42
|
+
|
|
43
|
+
// Germany
|
|
44
|
+
import { GermanyIncomeTaxServiceImpl as GermanyIncomeTaxService } from './germany/GermanyIncomeTaxServiceImpl';
|
|
45
|
+
import {
|
|
46
|
+
ComputedIncomeTaxValues as GermanyComputedIncomeTaxValues,
|
|
47
|
+
IncomeTaxRules as GermanyIncomeTaxRules,
|
|
48
|
+
} from './germany/domain/types';
|
|
49
|
+
|
|
50
|
+
export {
|
|
51
|
+
CanadaIncomeTaxService,
|
|
52
|
+
CanadaComputedIncomeTaxValues,
|
|
53
|
+
CanadaIncomeTaxRules,
|
|
54
|
+
FranceIncomeTaxService,
|
|
55
|
+
FranceComputedIncomeTaxValues,
|
|
56
|
+
FranceIncomeTaxRules,
|
|
57
|
+
SouthAfricaIncomeTaxService,
|
|
58
|
+
SouthAfricaComputedIncomeTaxValues,
|
|
59
|
+
SouthAfricaIncomeTaxRules,
|
|
60
|
+
AustraliaIncomeTaxService,
|
|
61
|
+
AustraliaComputedIncomeTaxValues,
|
|
62
|
+
AustraliaIncomeTaxRules,
|
|
63
|
+
UKIncomeTaxService,
|
|
64
|
+
UKComputedIncomeTaxValues,
|
|
65
|
+
UKIncomeTaxRules,
|
|
66
|
+
USAIncomeTaxService,
|
|
67
|
+
USAComputedIncomeTaxValues,
|
|
68
|
+
USAIncomeTaxRules,
|
|
69
|
+
GermanyIncomeTaxService,
|
|
70
|
+
GermanyComputedIncomeTaxValues,
|
|
71
|
+
GermanyIncomeTaxRules,
|
|
72
|
+
};
|
package/src/index.ts
CHANGED
|
@@ -1,204 +1,8 @@
|
|
|
1
1
|
export { CalculatorType } from './shared/domain/types';
|
|
2
|
-
|
|
3
|
-
// Canada
|
|
4
|
-
export { CanadaIncomeTaxServiceImpl as CanadaIncomeTaxService } from './income-tax/canada/CanadaIncomeTaxServiceImpl';
|
|
5
|
-
export { CanadaMortgageServiceImpl as CanadaMortgageService } from './mortgage/canada/CanadaMortgageServiceImpl';
|
|
6
|
-
export {
|
|
7
|
-
ComputedIncomeTaxValues as CanadaComputedIncomeTaxValues,
|
|
8
|
-
IncomeTaxRules as CanadaIncomeTaxRules,
|
|
9
|
-
} from './income-tax/canada/domain/types';
|
|
10
|
-
export {
|
|
11
|
-
MortgageRules as CanadaMortgageRules,
|
|
12
|
-
MortgageCalculationInput as CanadaMortgageCalculationInput,
|
|
13
|
-
MortgageCalculationResult as CanadaMortgageCalculationResult,
|
|
14
|
-
} from './mortgage/canada/domain/types';
|
|
15
|
-
|
|
16
|
-
export { CanadaCorporateTaxServiceImpl as CanadaCorporateTaxService } from './corporate/canada/CanadaCorporateTaxServiceImpl';
|
|
17
|
-
export {
|
|
18
|
-
Input as CanadaCorporateTaxInput,
|
|
19
|
-
Rules as CanadaCorporateTaxRules,
|
|
20
|
-
Result as CanadaCorporateTaxResult,
|
|
21
|
-
} from './corporate/canada/domain/types';
|
|
22
|
-
|
|
23
|
-
// France
|
|
24
|
-
export { FranceIncomeTaxServiceImpl as FranceIncomeTaxService } from './income-tax/france/FranceIncomeTaxServiceImpl';
|
|
25
|
-
export { FranceMortgageServiceImpl as FranceMortgageService } from './mortgage/france/FranceMortgageServiceImpl';
|
|
26
|
-
export {
|
|
27
|
-
ComputedIncomeTaxValues as FranceComputedIncomeTaxValues,
|
|
28
|
-
IncomeTaxRules as FranceIncomeTaxRules,
|
|
29
|
-
} from './income-tax/france/domain/types';
|
|
30
|
-
export {
|
|
31
|
-
MortgageRules as FranceMortgageRules,
|
|
32
|
-
MortgageInput as FranceMortgageInput,
|
|
33
|
-
MortgageOutput as FranceMortgageCalculationResult,
|
|
34
|
-
} from './mortgage/france/domain/types';
|
|
35
|
-
|
|
36
|
-
export { FranceCorporateTaxServiceImpl as FranceCorporateTaxService } from './corporate/france/FranceCorporateTaxServiceImpl';
|
|
37
|
-
export {
|
|
38
|
-
Input as FranceCorporateTaxInput,
|
|
39
|
-
Rules as FranceCorporateTaxRules,
|
|
40
|
-
Result as FranceCorporateTaxResult,
|
|
41
|
-
} from './corporate/france/domain/types';
|
|
42
|
-
|
|
43
|
-
// South Africa
|
|
44
|
-
export { SouthAfricaIncomeTaxServiceImpl as SouthAfricaIncomeTaxService } from './income-tax/south-africa/SouthAfricaIncomeTaxServiceImpl';
|
|
45
|
-
export { SouthAfricaMortgageServiceImpl as SouthAfricaMortgageService } from './mortgage/south-africa/SouthAfricaMortgageServiceImpl';
|
|
46
|
-
export {
|
|
47
|
-
ComputedIncomeTaxValues as SouthAfricaComputedIncomeTaxValues,
|
|
48
|
-
IncomeTaxRules as SouthAfricaIncomeTaxRules,
|
|
49
|
-
} from './income-tax/south-africa/domain/types';
|
|
50
|
-
export {
|
|
51
|
-
MortgageRules as SouthAfricaMortgageRules,
|
|
52
|
-
MortgageInput as SouthAfricaMortgageInput,
|
|
53
|
-
MortgageOutput as SouthAfricaMortgageOutput,
|
|
54
|
-
} from './mortgage/south-africa/domain/types';
|
|
55
|
-
|
|
56
|
-
export { SouthAfricaCorporateTaxServiceImpl as SouthAfricaCorporateTaxService } from './corporate/south-africa/SouthAfricaCorporateTaxServiceImpl';
|
|
57
|
-
export {
|
|
58
|
-
Rules as SouthAfricaCorporateTaxRules,
|
|
59
|
-
Input as SouthAfricaCorporateTaxInput,
|
|
60
|
-
Result as SouthAfricaCorporateTaxResult,
|
|
61
|
-
} from './corporate/south-africa/domain/types';
|
|
62
|
-
|
|
63
|
-
// Australia
|
|
64
|
-
export { AustraliaIncomeTaxServiceImpl as AustraliaIncomeTaxService } from './income-tax/australia/AustraliaIncomeTaxServiceImpl';
|
|
65
|
-
export {
|
|
66
|
-
ComputedIncomeTaxValues as AustraliaComputedIncomeTaxValues,
|
|
67
|
-
IncomeTaxRules as AustraliaIncomeTaxRules,
|
|
68
|
-
} from './income-tax/australia/domain/types';
|
|
69
|
-
|
|
70
|
-
export { AustraliaMortgageServiceImpl as AustraliaMortgageService } from './mortgage/australia/AustraliaMortgageServiceImpl';
|
|
71
|
-
export {
|
|
72
|
-
MortgageRules as AustraliaMortgageRules,
|
|
73
|
-
MortgageInput as AustraliaMortgageInput,
|
|
74
|
-
MortgageOutput as AustraliaMortgageOutput,
|
|
75
|
-
} from './mortgage/australia/domain/types';
|
|
76
|
-
|
|
77
|
-
export { AustraliaCorporateTaxServiceImpl as AustraliaCorporateTaxService } from './corporate/australia/AustraliaCorporateTaxServiceImpl';
|
|
78
|
-
export {
|
|
79
|
-
Input as AustraliaCorporateTaxInput,
|
|
80
|
-
Rules as AustraliaCorporateTaxRules,
|
|
81
|
-
Result as AustraliaCorporateTaxResult,
|
|
82
|
-
} from './corporate/australia/domain/types';
|
|
83
|
-
|
|
84
|
-
// United Kingdom
|
|
85
|
-
export { UKIncomeTaxServiceImpl as UKIncomeTaxService } from './income-tax/uk/UKIncomeTaxServiceImpl';
|
|
86
|
-
export {
|
|
87
|
-
ComputedIncomeTaxValues as UKComputedIncomeTaxValues,
|
|
88
|
-
IncomeTaxRules as UKIncomeTaxRules,
|
|
89
|
-
} from './income-tax/uk/domain/types';
|
|
90
|
-
|
|
91
|
-
export { UKCorporateTaxServiceImpl as UKCorporateTaxService } from './corporate/uk/UKCorporateTaxServiceImpl';
|
|
92
|
-
export {
|
|
93
|
-
Input as UKCorporateTaxInput,
|
|
94
|
-
Rules as UKCorporateTaxRules,
|
|
95
|
-
Result as UKCorporateTaxResult,
|
|
96
|
-
} from './corporate/uk/domain/types';
|
|
97
|
-
|
|
98
|
-
export { UKMortgageServiceImpl as UKMortgageService } from './mortgage/uk/UKMortgageServiceImpl';
|
|
99
|
-
export {
|
|
100
|
-
MortgageRules as UKMortgageRules,
|
|
101
|
-
MortgageInput as UKMortgageInput,
|
|
102
|
-
MortgageOutput as UKMortgageOutput,
|
|
103
|
-
} from './mortgage/uk/domain/types';
|
|
104
|
-
|
|
105
|
-
// USA
|
|
106
|
-
export { USAIncomeTaxServiceImpl as USAIncomeTaxService } from './income-tax/usa/USAIncomeTaxServiceImpl';
|
|
107
|
-
export {
|
|
108
|
-
ComputedIncomeTaxValues as USAComputedIncomeTaxValues,
|
|
109
|
-
IncomeTaxRules as USAIncomeTaxRules,
|
|
110
|
-
} from './income-tax/usa/domain/types';
|
|
111
|
-
|
|
112
|
-
export { USAMortgageServiceImpl as USAMortgageService } from './mortgage/usa/USAMortgageServiceImpl';
|
|
113
|
-
export {
|
|
114
|
-
MortgageRules as USAMortgageRules,
|
|
115
|
-
MortgageInput as USAMortgageInput,
|
|
116
|
-
MortgageOutput as USAMortgageOutput,
|
|
117
|
-
} from './mortgage/usa/domain/types';
|
|
118
|
-
|
|
119
|
-
export { USACorporateTaxServiceImpl as USACorporateTaxService } from './corporate/usa/USACorporateTaxServiceImpl';
|
|
120
|
-
export {
|
|
121
|
-
Input as USACorporateTaxInput,
|
|
122
|
-
Rules as USACorporateTaxRules,
|
|
123
|
-
Result as USACorporateTaxResult,
|
|
124
|
-
} from './corporate/usa/domain/types';
|
|
125
|
-
|
|
126
|
-
// Germany
|
|
127
|
-
export { GermanyIncomeTaxServiceImpl as GermanyIncomeTaxService } from './income-tax/germany/GermanyIncomeTaxServiceImpl';
|
|
128
|
-
export {
|
|
129
|
-
ComputedIncomeTaxValues as GermanyComputedIncomeTaxValues,
|
|
130
|
-
IncomeTaxRules as GermanyIncomeTaxRules,
|
|
131
|
-
} from './income-tax/germany/domain/types';
|
|
132
|
-
|
|
133
|
-
export { GermanyMortgageServiceImpl as GermanyMortgageService } from './mortgage/germany/GermanyMortgageServiceImpl';
|
|
134
|
-
export {
|
|
135
|
-
MortgageRules as GermanyMortgageRules,
|
|
136
|
-
MortgageInput as GermanyMortgageInput,
|
|
137
|
-
MortgageOutput as GermanyMortgageOutput,
|
|
138
|
-
} from './mortgage/germany/domain/types';
|
|
139
|
-
|
|
140
|
-
export { GermanyCorporateTaxServiceImpl as GermanyCorporateTaxService } from './corporate/germany/GermanyCorporateTaxServiceImpl';
|
|
141
|
-
export {
|
|
142
|
-
Input as GermanyCorporateTaxInput,
|
|
143
|
-
Rules as GermanyCorporateTaxRules,
|
|
144
|
-
Result as GermanyCorporateTaxResult,
|
|
145
|
-
} from './corporate/germany/domain/types';
|
|
146
|
-
|
|
147
|
-
// Capital Gains - Canada
|
|
148
|
-
export { CanadaCapitalGainsServiceImpl as CanadaCapitalGainsService } from './capital-gains/canada/CanadaCapitalGainsServiceImpl';
|
|
149
|
-
export {
|
|
150
|
-
Input as CanadaCapitalGainsInput,
|
|
151
|
-
Rules as CanadaCapitalGainsRules,
|
|
152
|
-
Result as CanadaCapitalGainsResult,
|
|
153
|
-
} from './capital-gains/canada/domain/types';
|
|
154
|
-
|
|
155
|
-
// Capital Gains - France
|
|
156
|
-
export { FranceCapitalGainsServiceImpl as FranceCapitalGainsService } from './capital-gains/france/FranceCapitalGainsServiceImpl';
|
|
157
|
-
export {
|
|
158
|
-
Input as FranceCapitalGainsInput,
|
|
159
|
-
Rules as FranceCapitalGainsRules,
|
|
160
|
-
Result as FranceCapitalGainsResult,
|
|
161
|
-
} from './capital-gains/france/domain/types';
|
|
162
|
-
|
|
163
|
-
// Capital Gains - South Africa
|
|
164
|
-
export { SouthAfricaCapitalGainsServiceImpl as SouthAfricaCapitalGainsService } from './capital-gains/south-africa/SouthAfricaCapitalGainsServiceImpl';
|
|
165
|
-
export {
|
|
166
|
-
Input as SouthAfricaCapitalGainsInput,
|
|
167
|
-
Rules as SouthAfricaCapitalGainsRules,
|
|
168
|
-
Result as SouthAfricaCapitalGainsResult,
|
|
169
|
-
} from './capital-gains/south-africa/domain/types';
|
|
170
|
-
|
|
171
|
-
// Capital Gains - Australia
|
|
172
|
-
export { AustraliaCapitalGainsServiceImpl as AustraliaCapitalGainsService } from './capital-gains/australia/AustraliaCapitalGainsServiceImpl';
|
|
173
|
-
export {
|
|
174
|
-
Input as AustraliaCapitalGainsInput,
|
|
175
|
-
Rules as AustraliaCapitalGainsRules,
|
|
176
|
-
Result as AustraliaCapitalGainsResult,
|
|
177
|
-
} from './capital-gains/australia/domain/types';
|
|
178
|
-
|
|
179
|
-
// Capital Gains - UK
|
|
180
|
-
export { UKCapitalGainsServiceImpl as UKCapitalGainsService } from './capital-gains/uk/UKCapitalGainsServiceImpl';
|
|
181
|
-
export {
|
|
182
|
-
Input as UKCapitalGainsInput,
|
|
183
|
-
Rules as UKCapitalGainsRules,
|
|
184
|
-
Result as UKCapitalGainsResult,
|
|
185
|
-
} from './capital-gains/uk/domain/types';
|
|
186
|
-
|
|
187
|
-
// Capital Gains - USA
|
|
188
|
-
export { USACapitalGainsServiceImpl as USACapitalGainsService } from './capital-gains/usa/USACapitalGainsServiceImpl';
|
|
189
|
-
export {
|
|
190
|
-
Input as USACapitalGainsInput,
|
|
191
|
-
Rules as USACapitalGainsRules,
|
|
192
|
-
Result as USACapitalGainsResult,
|
|
193
|
-
} from './capital-gains/usa/domain/types';
|
|
194
|
-
|
|
195
|
-
// Capital Gains - Germany
|
|
196
|
-
export { GermanyCapitalGainsServiceImpl as GermanyCapitalGainsService } from './capital-gains/germany/GermanyCapitalGainsServiceImpl';
|
|
197
|
-
export {
|
|
198
|
-
Input as GermanyCapitalGainsInput,
|
|
199
|
-
Rules as GermanyCapitalGainsRules,
|
|
200
|
-
Result as GermanyCapitalGainsResult,
|
|
201
|
-
} from './capital-gains/germany/domain/types';
|
|
202
|
-
|
|
203
2
|
export { IncomeTaxCalculatorSchema } from './income-tax/domain/types';
|
|
204
|
-
export * from './income-tax/domain/types';
|
|
3
|
+
export * from './income-tax/domain/types';
|
|
4
|
+
|
|
5
|
+
export * as IncomeTax from './income-tax';
|
|
6
|
+
export * as CorporateTax from './corporate';
|
|
7
|
+
export * as CapitalGain from './capital-gains';
|
|
8
|
+
export * as Mortgage from './mortgage';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FranceMortgageService } from '
|
|
1
|
+
import { FranceMortgageService } from './FranceMortgageService';
|
|
2
2
|
import { MortgageRules, MortgageInput, MortgageOutput, AmortizationScheduleItem } from './domain/types';
|
|
3
3
|
|
|
4
4
|
export class FranceMortgageServiceImpl implements FranceMortgageService {
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// Canada
|
|
2
|
+
import { CanadaMortgageServiceImpl as CanadaMortgageService } from './canada/CanadaMortgageServiceImpl';
|
|
3
|
+
import {
|
|
4
|
+
MortgageRules as CanadaMortgageRules,
|
|
5
|
+
MortgageCalculationInput as CanadaMortgageCalculationInput,
|
|
6
|
+
MortgageCalculationResult as CanadaMortgageCalculationResult,
|
|
7
|
+
} from './canada/domain/types';
|
|
8
|
+
|
|
9
|
+
// France
|
|
10
|
+
import { FranceMortgageServiceImpl as FranceMortgageService } from './france/FranceMortgageServiceImpl';
|
|
11
|
+
import {
|
|
12
|
+
MortgageRules as FranceMortgageRules,
|
|
13
|
+
MortgageInput as FranceMortgageInput,
|
|
14
|
+
MortgageOutput as FranceMortgageCalculationResult,
|
|
15
|
+
} from './france/domain/types';
|
|
16
|
+
|
|
17
|
+
// South Africa
|
|
18
|
+
import { SouthAfricaMortgageServiceImpl as SouthAfricaMortgageService } from './south-africa/SouthAfricaMortgageServiceImpl';
|
|
19
|
+
import {
|
|
20
|
+
MortgageRules as SouthAfricaMortgageRules,
|
|
21
|
+
MortgageInput as SouthAfricaMortgageInput,
|
|
22
|
+
MortgageOutput as SouthAfricaMortgageOutput,
|
|
23
|
+
} from './south-africa/domain/types';
|
|
24
|
+
|
|
25
|
+
// Australia
|
|
26
|
+
import { AustraliaMortgageServiceImpl as AustraliaMortgageService } from './australia/AustraliaMortgageServiceImpl';
|
|
27
|
+
import {
|
|
28
|
+
MortgageRules as AustraliaMortgageRules,
|
|
29
|
+
MortgageInput as AustraliaMortgageInput,
|
|
30
|
+
MortgageOutput as AustraliaMortgageOutput,
|
|
31
|
+
} from './australia/domain/types';
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
// United Kingdom
|
|
35
|
+
import { UKMortgageServiceImpl as UKMortgageService } from './uk/UKMortgageServiceImpl';
|
|
36
|
+
import {
|
|
37
|
+
MortgageRules as UKMortgageRules,
|
|
38
|
+
MortgageInput as UKMortgageInput,
|
|
39
|
+
MortgageOutput as UKMortgageOutput,
|
|
40
|
+
} from './uk/domain/types';
|
|
41
|
+
|
|
42
|
+
// USA
|
|
43
|
+
import { USAMortgageServiceImpl as USAMortgageService } from './usa/USAMortgageServiceImpl';
|
|
44
|
+
import {
|
|
45
|
+
MortgageRules as USAMortgageRules,
|
|
46
|
+
MortgageInput as USAMortgageInput,
|
|
47
|
+
MortgageOutput as USAMortgageOutput,
|
|
48
|
+
} from './usa/domain/types';
|
|
49
|
+
|
|
50
|
+
// Germany
|
|
51
|
+
import { GermanyMortgageServiceImpl as GermanyMortgageService } from './germany/GermanyMortgageServiceImpl';
|
|
52
|
+
import {
|
|
53
|
+
MortgageRules as GermanyMortgageRules,
|
|
54
|
+
MortgageInput as GermanyMortgageInput,
|
|
55
|
+
MortgageOutput as GermanyMortgageOutput,
|
|
56
|
+
} from './germany/domain/types';
|
|
57
|
+
|
|
58
|
+
export {
|
|
59
|
+
CanadaMortgageService,
|
|
60
|
+
CanadaMortgageRules,
|
|
61
|
+
CanadaMortgageCalculationInput,
|
|
62
|
+
CanadaMortgageCalculationResult,
|
|
63
|
+
FranceMortgageService,
|
|
64
|
+
FranceMortgageRules,
|
|
65
|
+
FranceMortgageInput,
|
|
66
|
+
FranceMortgageCalculationResult,
|
|
67
|
+
SouthAfricaMortgageService,
|
|
68
|
+
SouthAfricaMortgageRules,
|
|
69
|
+
SouthAfricaMortgageInput,
|
|
70
|
+
SouthAfricaMortgageOutput,
|
|
71
|
+
AustraliaMortgageService,
|
|
72
|
+
AustraliaMortgageRules,
|
|
73
|
+
AustraliaMortgageInput,
|
|
74
|
+
AustraliaMortgageOutput,
|
|
75
|
+
UKMortgageService,
|
|
76
|
+
UKMortgageRules,
|
|
77
|
+
UKMortgageInput,
|
|
78
|
+
UKMortgageOutput,
|
|
79
|
+
USAMortgageService,
|
|
80
|
+
USAMortgageRules,
|
|
81
|
+
USAMortgageInput,
|
|
82
|
+
USAMortgageOutput,
|
|
83
|
+
GermanyMortgageService,
|
|
84
|
+
GermanyMortgageRules,
|
|
85
|
+
GermanyMortgageInput,
|
|
86
|
+
GermanyMortgageOutput
|
|
87
|
+
};
|
|
@@ -39,7 +39,7 @@ describe('AustraliaCapitalGainsServiceImpl', () => {
|
|
|
39
39
|
// Taxable gain = 20000, no other income
|
|
40
40
|
// 18200 at 0% = 0, 1800 at 16% = 288
|
|
41
41
|
expect(result.taxableGain).toBe(20000);
|
|
42
|
-
expect(result.
|
|
42
|
+
expect(result.capitalGainTax).toBeCloseTo(288, 2);
|
|
43
43
|
});
|
|
44
44
|
|
|
45
45
|
it('returns zero for zero gain', () => {
|
|
@@ -47,7 +47,7 @@ describe('AustraliaCapitalGainsServiceImpl', () => {
|
|
|
47
47
|
const service = new AustraliaCapitalGainsServiceImpl(input, australiaCapitalGainsRules);
|
|
48
48
|
const result = service.calculate();
|
|
49
49
|
|
|
50
|
-
expect(result.
|
|
50
|
+
expect(result.capitalGainTax).toBe(0);
|
|
51
51
|
expect(result.breakdowns).toHaveLength(0);
|
|
52
52
|
});
|
|
53
53
|
|
|
@@ -56,7 +56,7 @@ describe('AustraliaCapitalGainsServiceImpl', () => {
|
|
|
56
56
|
const service = new AustraliaCapitalGainsServiceImpl(input, australiaCapitalGainsRules);
|
|
57
57
|
const result = service.calculate();
|
|
58
58
|
|
|
59
|
-
expect(result.
|
|
59
|
+
expect(result.capitalGainTax).toBe(0);
|
|
60
60
|
});
|
|
61
61
|
|
|
62
62
|
it('stacks gain on top of other income', () => {
|
|
@@ -67,7 +67,7 @@ describe('AustraliaCapitalGainsServiceImpl', () => {
|
|
|
67
67
|
// Other income = 50000, taxable gain = 10000 (50% discount)
|
|
68
68
|
// Gain falls in 50000-60000 range, all at 30%
|
|
69
69
|
expect(result.taxableGain).toBe(10000);
|
|
70
|
-
expect(result.
|
|
70
|
+
expect(result.capitalGainTax).toBe(10000 * 0.30);
|
|
71
71
|
});
|
|
72
72
|
|
|
73
73
|
it('calculates effective rate based on full gain', () => {
|
|
@@ -75,6 +75,6 @@ describe('AustraliaCapitalGainsServiceImpl', () => {
|
|
|
75
75
|
const service = new AustraliaCapitalGainsServiceImpl(input, australiaCapitalGainsRules);
|
|
76
76
|
const result = service.calculate();
|
|
77
77
|
|
|
78
|
-
expect(result.effectiveRate).toBe((result.
|
|
78
|
+
expect(result.effectiveRate).toBe((result.capitalGainTax / 20000) * 100);
|
|
79
79
|
});
|
|
80
80
|
});
|