@novha/calc-engines 3.0.0 → 5.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 +3 -0
- package/dist/capital-gains/australia/AustraliaCapitalGainsServiceImpl.js +56 -0
- package/dist/capital-gains/australia/domain/types.js +3 -0
- package/dist/capital-gains/canada/CanadaCapitalGainsService.js +3 -0
- package/dist/capital-gains/canada/CanadaCapitalGainsServiceImpl.js +55 -0
- package/dist/capital-gains/canada/domain/types.js +3 -0
- package/dist/capital-gains/domain/types.js +3 -0
- package/dist/capital-gains/france/FranceCapitalGainsService.js +3 -0
- package/dist/capital-gains/france/FranceCapitalGainsServiceImpl.js +41 -0
- package/dist/capital-gains/france/domain/types.js +3 -0
- package/dist/capital-gains/germany/GermanyCapitalGainsService.js +3 -0
- package/dist/capital-gains/germany/GermanyCapitalGainsServiceImpl.js +65 -0
- package/dist/capital-gains/germany/domain/types.js +3 -0
- package/dist/capital-gains/south-africa/SouthAfricaCapitalGainsService.js +3 -0
- package/dist/capital-gains/south-africa/SouthAfricaCapitalGainsServiceImpl.js +69 -0
- package/dist/capital-gains/south-africa/domain/types.js +3 -0
- package/dist/capital-gains/uk/UKCapitalGainsService.js +3 -0
- package/dist/capital-gains/uk/UKCapitalGainsServiceImpl.js +72 -0
- package/dist/capital-gains/uk/domain/types.js +3 -0
- package/dist/capital-gains/usa/USACapitalGainsService.js +3 -0
- package/dist/capital-gains/usa/USACapitalGainsServiceImpl.js +67 -0
- package/dist/capital-gains/usa/domain/types.js +3 -0
- package/dist/corporate/germany/GermanyCorporateTaxService.js +3 -0
- package/dist/corporate/germany/GermanyCorporateTaxServiceImpl.js +56 -0
- package/dist/corporate/germany/domain/types.js +3 -0
- package/dist/corporate/usa/USACorporateTaxService.js +3 -0
- package/dist/corporate/usa/USACorporateTaxServiceImpl.js +29 -0
- package/dist/corporate/usa/domain/types.js +3 -0
- package/dist/income-tax/germany/GermanyIncomeTaxService.js +3 -0
- package/dist/income-tax/germany/GermanyIncomeTaxServiceImpl.js +86 -0
- package/dist/income-tax/germany/domain/types.js +3 -0
- package/dist/income-tax/usa/USAIncomeTaxService.js +3 -0
- package/dist/income-tax/usa/USAIncomeTaxServiceImpl.js +87 -0
- package/dist/income-tax/usa/domain/types.js +3 -0
- package/dist/index.js +37 -2
- package/dist/mortgage/germany/GermanyMortgageService.js +3 -0
- package/dist/mortgage/germany/GermanyMortgageServiceImpl.js +80 -0
- package/dist/mortgage/germany/domain/types.js +3 -0
- package/dist/mortgage/usa/USAMortgageService.js +3 -0
- package/dist/mortgage/usa/USAMortgageServiceImpl.js +92 -0
- package/dist/mortgage/usa/domain/types.js +3 -0
- package/dist/shared/domain/types.js +2 -1
- package/dist/types/capital-gains/australia/AustraliaCapitalGainsService.d.ts +4 -0
- package/dist/types/capital-gains/australia/AustraliaCapitalGainsServiceImpl.d.ts +9 -0
- package/dist/types/capital-gains/australia/domain/types.d.ts +22 -0
- package/dist/types/capital-gains/canada/CanadaCapitalGainsService.d.ts +4 -0
- package/dist/types/capital-gains/canada/CanadaCapitalGainsServiceImpl.d.ts +9 -0
- package/dist/types/capital-gains/canada/domain/types.d.ts +20 -0
- package/dist/types/capital-gains/domain/types.d.ts +6 -0
- package/dist/types/capital-gains/france/FranceCapitalGainsService.d.ts +4 -0
- package/dist/types/capital-gains/france/FranceCapitalGainsServiceImpl.d.ts +8 -0
- package/dist/types/capital-gains/france/domain/types.d.ts +15 -0
- package/dist/types/capital-gains/germany/GermanyCapitalGainsService.d.ts +4 -0
- package/dist/types/capital-gains/germany/GermanyCapitalGainsServiceImpl.d.ts +8 -0
- package/dist/types/capital-gains/germany/domain/types.d.ts +17 -0
- package/dist/types/capital-gains/south-africa/SouthAfricaCapitalGainsService.d.ts +4 -0
- package/dist/types/capital-gains/south-africa/SouthAfricaCapitalGainsServiceImpl.d.ts +9 -0
- package/dist/types/capital-gains/south-africa/domain/types.d.ts +21 -0
- package/dist/types/capital-gains/uk/UKCapitalGainsService.d.ts +4 -0
- package/dist/types/capital-gains/uk/UKCapitalGainsServiceImpl.d.ts +8 -0
- package/dist/types/capital-gains/uk/domain/types.d.ts +17 -0
- package/dist/types/capital-gains/usa/USACapitalGainsService.d.ts +4 -0
- package/dist/types/capital-gains/usa/USACapitalGainsServiceImpl.d.ts +9 -0
- package/dist/types/capital-gains/usa/domain/types.d.ts +26 -0
- package/dist/types/corporate/germany/GermanyCorporateTaxService.d.ts +4 -0
- package/dist/types/corporate/germany/GermanyCorporateTaxServiceImpl.d.ts +8 -0
- package/dist/types/corporate/germany/domain/types.d.ts +24 -0
- package/dist/types/corporate/usa/USACorporateTaxService.d.ts +4 -0
- package/dist/types/corporate/usa/USACorporateTaxServiceImpl.d.ts +8 -0
- package/dist/types/corporate/usa/domain/types.d.ts +15 -0
- package/dist/types/income-tax/germany/GermanyIncomeTaxService.d.ts +4 -0
- package/dist/types/income-tax/germany/GermanyIncomeTaxServiceImpl.d.ts +12 -0
- package/dist/types/income-tax/germany/domain/types.d.ts +23 -0
- package/dist/types/income-tax/usa/USAIncomeTaxService.d.ts +4 -0
- package/dist/types/income-tax/usa/USAIncomeTaxServiceImpl.d.ts +11 -0
- package/dist/types/income-tax/usa/domain/types.d.ts +30 -0
- package/dist/types/index.d.ts +26 -0
- package/dist/types/mortgage/germany/GermanyMortgageService.d.ts +4 -0
- package/dist/types/mortgage/germany/GermanyMortgageServiceImpl.d.ts +7 -0
- package/dist/types/mortgage/germany/domain/types.d.ts +42 -0
- package/dist/types/mortgage/usa/USAMortgageService.d.ts +4 -0
- package/dist/types/mortgage/usa/USAMortgageServiceImpl.d.ts +8 -0
- package/dist/types/mortgage/usa/domain/types.d.ts +44 -0
- package/dist/types/shared/domain/types.d.ts +2 -1
- package/package.json +1 -1
- package/src/capital-gains/australia/AustraliaCapitalGainsService.ts +5 -0
- package/src/capital-gains/australia/AustraliaCapitalGainsServiceImpl.ts +73 -0
- package/src/capital-gains/australia/domain/types.ts +26 -0
- package/src/capital-gains/canada/CanadaCapitalGainsService.ts +5 -0
- package/src/capital-gains/canada/CanadaCapitalGainsServiceImpl.ts +71 -0
- package/src/capital-gains/canada/domain/types.ts +24 -0
- package/src/capital-gains/domain/types.ts +6 -0
- package/src/capital-gains/france/FranceCapitalGainsService.ts +5 -0
- package/src/capital-gains/france/FranceCapitalGainsServiceImpl.ts +48 -0
- package/src/capital-gains/france/domain/types.ts +18 -0
- package/src/capital-gains/germany/GermanyCapitalGainsService.ts +5 -0
- package/src/capital-gains/germany/GermanyCapitalGainsServiceImpl.ts +74 -0
- package/src/capital-gains/germany/domain/types.ts +20 -0
- package/src/capital-gains/south-africa/SouthAfricaCapitalGainsService.ts +5 -0
- package/src/capital-gains/south-africa/SouthAfricaCapitalGainsServiceImpl.ts +87 -0
- package/src/capital-gains/south-africa/domain/types.ts +25 -0
- package/src/capital-gains/uk/UKCapitalGainsService.ts +5 -0
- package/src/capital-gains/uk/UKCapitalGainsServiceImpl.ts +84 -0
- package/src/capital-gains/uk/domain/types.ts +20 -0
- package/src/capital-gains/usa/USACapitalGainsService.ts +5 -0
- package/src/capital-gains/usa/USACapitalGainsServiceImpl.ts +86 -0
- package/src/capital-gains/usa/domain/types.ts +27 -0
- package/src/corporate/germany/GermanyCorporateTaxService.ts +5 -0
- package/src/corporate/germany/GermanyCorporateTaxServiceImpl.ts +64 -0
- package/src/corporate/germany/domain/types.ts +20 -0
- package/src/corporate/usa/USACorporateTaxService.ts +5 -0
- package/src/corporate/usa/USACorporateTaxServiceImpl.ts +35 -0
- package/src/corporate/usa/domain/types.ts +15 -0
- package/src/income-tax/germany/GermanyIncomeTaxService.ts +5 -0
- package/src/income-tax/germany/GermanyIncomeTaxServiceImpl.ts +121 -0
- package/src/income-tax/germany/domain/types.ts +27 -0
- package/src/income-tax/usa/USAIncomeTaxService.ts +5 -0
- package/src/income-tax/usa/USAIncomeTaxServiceImpl.ts +113 -0
- package/src/income-tax/usa/domain/types.ts +24 -0
- package/src/index.ts +98 -0
- package/src/mortgage/germany/GermanyMortgageService.ts +5 -0
- package/src/mortgage/germany/GermanyMortgageServiceImpl.ts +111 -0
- package/src/mortgage/germany/domain/types.ts +49 -0
- package/src/mortgage/usa/USAMortgageService.ts +5 -0
- package/src/mortgage/usa/USAMortgageServiceImpl.ts +134 -0
- package/src/mortgage/usa/domain/types.ts +52 -0
- package/src/shared/domain/types.ts +1 -0
- package/test/australia-capital-gains.test.ts +80 -0
- package/test/canada-capital-gains.test.ts +71 -0
- package/test/france-capital-gains.test.ts +66 -0
- package/test/germany-capital-gains.test.ts +85 -0
- package/test/germany-corporate-tax.test.ts +77 -0
- package/test/germany-income-tax.test.ts +114 -0
- package/test/germany-mortgage.test.ts +105 -0
- package/test/south-africa-capital-gains.test.ts +84 -0
- package/test/uk-capital-gains.test.ts +79 -0
- package/test/usa-capital-gains.test.ts +88 -0
- package/test/usa-corporate-tax.test.ts +59 -0
- package/test/usa-income-tax.test.ts +138 -0
- package/test/usa-mortgage.test.ts +97 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.USAMortgageServiceImpl = void 0;
|
|
4
|
+
class USAMortgageServiceImpl {
|
|
5
|
+
calculate(input, rules) {
|
|
6
|
+
const loanAmount = input.propertyPrice - input.downPayment;
|
|
7
|
+
if (loanAmount <= 0) {
|
|
8
|
+
throw new Error('Invalid loan amount: down payment must be less than property price');
|
|
9
|
+
}
|
|
10
|
+
const totalPayments = input.amortizationYears * 12;
|
|
11
|
+
const monthlyRate = (input.annualInterestRate / 100) / 12;
|
|
12
|
+
const monthlyPayment = this.calculatePayment(loanAmount, monthlyRate, totalPayments);
|
|
13
|
+
const totalPaid = monthlyPayment * totalPayments;
|
|
14
|
+
const totalInterestPaid = totalPaid - loanAmount;
|
|
15
|
+
const transferTax = this.calculateTransferTax(input.propertyPrice, rules.transferTax.brackets);
|
|
16
|
+
const amortizationSchedule = this.calculateAmortizationSchedule(loanAmount, monthlyRate, monthlyPayment, totalPayments, input.amortizationYears);
|
|
17
|
+
return {
|
|
18
|
+
loanAmount,
|
|
19
|
+
totalMortgage: loanAmount,
|
|
20
|
+
monthlyPayment,
|
|
21
|
+
totalInterestPaid,
|
|
22
|
+
totalPaid,
|
|
23
|
+
transferTax,
|
|
24
|
+
amortizationSchedule,
|
|
25
|
+
otherFees: {
|
|
26
|
+
notaryFees: {
|
|
27
|
+
value: transferTax,
|
|
28
|
+
label: 'TRANSFER_TAX',
|
|
29
|
+
},
|
|
30
|
+
bankFees: {
|
|
31
|
+
value: 0,
|
|
32
|
+
label: 'BANK_FEES',
|
|
33
|
+
},
|
|
34
|
+
monthlyInsuranceFees: {
|
|
35
|
+
value: 0,
|
|
36
|
+
label: 'MONTHLY_INSURANCE_FEES',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
calculateTransferTax(propertyPrice, brackets) {
|
|
42
|
+
let tax = 0;
|
|
43
|
+
let previousLimit = 0;
|
|
44
|
+
for (const bracket of brackets) {
|
|
45
|
+
if (bracket.upTo !== undefined && propertyPrice > previousLimit) {
|
|
46
|
+
const taxable = Math.min(propertyPrice, bracket.upTo) - previousLimit;
|
|
47
|
+
tax += taxable * bracket.rate;
|
|
48
|
+
previousLimit = bracket.upTo;
|
|
49
|
+
}
|
|
50
|
+
if (bracket.above !== undefined && propertyPrice > bracket.above) {
|
|
51
|
+
tax += (propertyPrice - bracket.above) * bracket.rate;
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return tax;
|
|
56
|
+
}
|
|
57
|
+
calculateAmortizationSchedule(principal, monthlyRate, monthlyPayment, totalPayments, amortizationYears) {
|
|
58
|
+
const schedule = [];
|
|
59
|
+
let balance = principal;
|
|
60
|
+
for (let year = 1; year <= amortizationYears; year++) {
|
|
61
|
+
let yearlyPrincipal = 0;
|
|
62
|
+
let yearlyInterest = 0;
|
|
63
|
+
const paymentsInYear = Math.min(12, totalPayments - (year - 1) * 12);
|
|
64
|
+
for (let payment = 1; payment <= paymentsInYear; payment++) {
|
|
65
|
+
const interestPayment = balance * monthlyRate;
|
|
66
|
+
const principalPayment = monthlyPayment - interestPayment;
|
|
67
|
+
yearlyInterest += interestPayment;
|
|
68
|
+
yearlyPrincipal += principalPayment;
|
|
69
|
+
balance -= principalPayment;
|
|
70
|
+
}
|
|
71
|
+
schedule.push({
|
|
72
|
+
year,
|
|
73
|
+
principal: yearlyPrincipal,
|
|
74
|
+
interest: yearlyInterest,
|
|
75
|
+
balance: Math.max(0, balance),
|
|
76
|
+
});
|
|
77
|
+
if (balance <= 0)
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
return schedule;
|
|
81
|
+
}
|
|
82
|
+
calculatePayment(principal, rate, periods) {
|
|
83
|
+
if (rate === 0) {
|
|
84
|
+
return principal / periods;
|
|
85
|
+
}
|
|
86
|
+
return principal *
|
|
87
|
+
(rate * Math.pow(1 + rate, periods)) /
|
|
88
|
+
(Math.pow(1 + rate, periods) - 1);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.USAMortgageServiceImpl = USAMortgageServiceImpl;
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVVNBTW9ydGdhZ2VTZXJ2aWNlSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb3J0Z2FnZS91c2EvVVNBTW9ydGdhZ2VTZXJ2aWNlSW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFTQSxNQUFhLHNCQUFzQjtJQUV4QixTQUFTLENBQUMsS0FBb0IsRUFBRSxLQUFvQjtRQUN2RCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFFM0QsSUFBSSxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO1FBQzFGLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQ25ELE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUUxRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNyRixNQUFNLFNBQVMsR0FBRyxjQUFjLEdBQUcsYUFBYSxDQUFDO1FBQ2pELE1BQU0saUJBQWlCLEdBQUcsU0FBUyxHQUFHLFVBQVUsQ0FBQztRQUVqRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQ3pDLEtBQUssQ0FBQyxhQUFhLEVBQ25CLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUM3QixDQUFDO1FBRUYsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQzNELFVBQVUsRUFDVixXQUFXLEVBQ1gsY0FBYyxFQUNkLGFBQWEsRUFDYixLQUFLLENBQUMsaUJBQWlCLENBQzFCLENBQUM7UUFFRixPQUFPO1lBQ0gsVUFBVTtZQUNWLGFBQWEsRUFBRSxVQUFVO1lB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QUFFLE9BQWU7UUFDckUsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDYixPQUFPLFNBQVMsR0FBRyxPQUFPLENBQUM7UUFDL0IsQ0FBQztRQUVELE9BQU8sU0FBUztZQUNaLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ0o7QUE1SEQsd0RBNEhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVVNBTW9ydGdhZ2VTZXJ2aWNlIH0gZnJvbSBcIi4vVVNBTW9ydGdhZ2VTZXJ2aWNlXCI7XG5pbXBvcnQge1xuICAgIEFtb3J0aXphdGlvblNjaGVkdWxlSXRlbSxcbiAgICBNb3J0Z2FnZUlucHV0LFxuICAgIE1vcnRnYWdlT3V0cHV0LFxuICAgIE1vcnRnYWdlUnVsZXMsXG4gICAgVHJhbnNmZXJUYXhCcmFja2V0LFxufSBmcm9tIFwiLi9kb21haW4vdHlwZXNcIjtcblxuZXhwb3J0IGNsYXNzIFVTQU1vcnRnYWdlU2VydmljZUltcGwgaW1wbGVtZW50cyBVU0FNb3J0Z2FnZVNlcnZpY2Uge1xuXG4gICAgcHVibGljIGNhbGN1bGF0ZShpbnB1dDogTW9ydGdhZ2VJbnB1dCwgcnVsZXM6IE1vcnRnYWdlUnVsZXMpOiBNb3J0Z2FnZU91dHB1dCB7XG4gICAgICAgIGNvbnN0IGxvYW5BbW91bnQgPSBpbnB1dC5wcm9wZXJ0eVByaWNlIC0gaW5wdXQuZG93blBheW1lbnQ7XG5cbiAgICAgICAgaWYgKGxvYW5BbW91bnQgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGxvYW4gYW1vdW50OiBkb3duIHBheW1lbnQgbXVzdCBiZSBsZXNzIHRoYW4gcHJvcGVydHkgcHJpY2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRvdGFsUGF5bWVudHMgPSBpbnB1dC5hbW9ydGl6YXRpb25ZZWFycyAqIDEyO1xuICAgICAgICBjb25zdCBtb250aGx5UmF0ZSA9IChpbnB1dC5hbm51YWxJbnRlcmVzdFJhdGUgLyAxMDApIC8gMTI7XG5cbiAgICAgICAgY29uc3QgbW9udGhseVBheW1lbnQgPSB0aGlzLmNhbGN1bGF0ZVBheW1lbnQobG9hbkFtb3VudCwgbW9udGhseVJhdGUsIHRvdGFsUGF5bWVudHMpO1xuICAgICAgICBjb25zdCB0b3RhbFBhaWQgPSBtb250aGx5UGF5bWVudCAqIHRvdGFsUGF5bWVudHM7XG4gICAgICAgIGNvbnN0IHRvdGFsSW50ZXJlc3RQYWlkID0gdG90YWxQYWlkIC0gbG9hbkFtb3VudDtcblxuICAgICAgICBjb25zdCB0cmFuc2ZlclRheCA9IHRoaXMuY2FsY3VsYXRlVHJhbnNmZXJUYXgoXG4gICAgICAgICAgICBpbnB1dC5wcm9wZXJ0eVByaWNlLFxuICAgICAgICAgICAgcnVsZXMudHJhbnNmZXJUYXguYnJhY2tldHMsXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgYW1vcnRpemF0aW9uU2NoZWR1bGUgPSB0aGlzLmNhbGN1bGF0ZUFtb3J0aXphdGlvblNjaGVkdWxlKFxuICAgICAgICAgICAgbG9hbkFtb3VudCxcbiAgICAgICAgICAgIG1vbnRobHlSYXRlLFxuICAgICAgICAgICAgbW9udGhseVBheW1lbnQsXG4gICAgICAgICAgICB0b3RhbFBheW1lbnRzLFxuICAgICAgICAgICAgaW5wdXQuYW1vcnRpemF0aW9uWWVhcnMsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvYW5BbW91bnQsXG4gICAgICAgICAgICB0b3RhbE1vcnRnYWdlOiBsb2FuQW1vdW50LFxuICAgICAgICAgICAgbW9udGhseVBheW1lbnQsXG4gICAgICAgICAgICB0b3RhbEludGVyZXN0UGFpZCxcbiAgICAgICAgICAgIHRvdGFsUGFpZCxcbiAgICAgICAgICAgIHRyYW5zZmVyVGF4LFxuICAgICAgICAgICAgYW1vcnRpemF0aW9uU2NoZWR1bGUsXG4gICAgICAgICAgICBvdGhlckZlZXM6IHtcbiAgICAgICAgICAgICAgICBub3RhcnlGZWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cmFuc2ZlclRheCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdUUkFOU0ZFUl9UQVgnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmFua0ZlZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQkFOS19GRUVTJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1vbnRobHlJbnN1cmFuY2VGZWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ01PTlRITFlfSU5TVVJBTkNFX0ZFRVMnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlVHJhbnNmZXJUYXgoXG4gICAgICAgIHByb3BlcnR5UHJpY2U6IG51bWJlcixcbiAgICAgICAgYnJhY2tldHM6IFRyYW5zZmVyVGF4QnJhY2tldFtdLFxuICAgICk6IG51bWJlciB7XG4gICAgICAgIGxldCB0YXggPSAwO1xuICAgICAgICBsZXQgcHJldmlvdXNMaW1pdCA9IDA7XG5cbiAgICAgICAgZm9yIChjb25zdCBicmFja2V0IG9mIGJyYWNrZXRzKSB7XG4gICAgICAgICAgICBpZiAoYnJhY2tldC51cFRvICE9PSB1bmRlZmluZWQgJiYgcHJvcGVydHlQcmljZSA+IHByZXZpb3VzTGltaXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXhhYmxlID0gTWF0aC5taW4ocHJvcGVydHlQcmljZSwgYnJhY2tldC51cFRvKSAtIHByZXZpb3VzTGltaXQ7XG4gICAgICAgICAgICAgICAgdGF4ICs9IHRheGFibGUgKiBicmFja2V0LnJhdGU7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNMaW1pdCA9IGJyYWNrZXQudXBUbztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGJyYWNrZXQuYWJvdmUgIT09IHVuZGVmaW5lZCAmJiBwcm9wZXJ0eVByaWNlID4gYnJhY2tldC5hYm92ZSkge1xuICAgICAgICAgICAgICAgIHRheCArPSAocHJvcGVydHlQcmljZSAtIGJyYWNrZXQuYWJvdmUpICogYnJhY2tldC5yYXRlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRheDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZUFtb3J0aXphdGlvblNjaGVkdWxlKFxuICAgICAgICBwcmluY2lwYWw6IG51bWJlcixcbiAgICAgICAgbW9udGhseVJhdGU6IG51bWJlcixcbiAgICAgICAgbW9udGhseVBheW1lbnQ6IG51bWJlcixcbiAgICAgICAgdG90YWxQYXltZW50czogbnVtYmVyLFxuICAgICAgICBhbW9ydGl6YXRpb25ZZWFyczogbnVtYmVyLFxuICAgICk6IEFtb3J0aXphdGlvblNjaGVkdWxlSXRlbVtdIHtcbiAgICAgICAgY29uc3Qgc2NoZWR1bGU6IEFtb3J0aXphdGlvblNjaGVkdWxlSXRlbVtdID0gW107XG4gICAgICAgIGxldCBiYWxhbmNlID0gcHJpbmNpcGFsO1xuXG4gICAgICAgIGZvciAobGV0IHllYXIgPSAxOyB5ZWFyIDw9IGFtb3J0aXphdGlvblllYXJzOyB5ZWFyKyspIHtcbiAgICAgICAgICAgIGxldCB5ZWFybHlQcmluY2lwYWwgPSAwO1xuICAgICAgICAgICAgbGV0IHllYXJseUludGVyZXN0ID0gMDtcblxuICAgICAgICAgICAgY29uc3QgcGF5bWVudHNJblllYXIgPSBNYXRoLm1pbigxMiwgdG90YWxQYXltZW50cyAtICh5ZWFyIC0gMSkgKiAxMik7XG5cbiAgICAgICAgICAgIGZvciAobGV0IHBheW1lbnQgPSAxOyBwYXltZW50IDw9IHBheW1lbnRzSW5ZZWFyOyBwYXltZW50KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcmVzdFBheW1lbnQgPSBiYWxhbmNlICogbW9udGhseVJhdGU7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJpbmNpcGFsUGF5bWVudCA9IG1vbnRobHlQYXltZW50IC0gaW50ZXJlc3RQYXltZW50O1xuXG4gICAgICAgICAgICAgICAgeWVhcmx5SW50ZXJlc3QgKz0gaW50ZXJlc3RQYXltZW50O1xuICAgICAgICAgICAgICAgIHllYXJseVByaW5jaXBhbCArPSBwcmluY2lwYWxQYXltZW50O1xuICAgICAgICAgICAgICAgIGJhbGFuY2UgLT0gcHJpbmNpcGFsUGF5bWVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NoZWR1bGUucHVzaCh7XG4gICAgICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgICAgICBwcmluY2lwYWw6IHllYXJseVByaW5jaXBhbCxcbiAgICAgICAgICAgICAgICBpbnRlcmVzdDogeWVhcmx5SW50ZXJlc3QsXG4gICAgICAgICAgICAgICAgYmFsYW5jZTogTWF0aC5tYXgoMCwgYmFsYW5jZSksXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGJhbGFuY2UgPD0gMCkgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2NoZWR1bGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVQYXltZW50KHByaW5jaXBhbDogbnVtYmVyLCByYXRlOiBudW1iZXIsIHBlcmlvZHM6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmIChyYXRlID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJpbmNpcGFsIC8gcGVyaW9kcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwcmluY2lwYWwgKlxuICAgICAgICAgICAgKHJhdGUgKiBNYXRoLnBvdygxICsgcmF0ZSwgcGVyaW9kcykpIC9cbiAgICAgICAgICAgIChNYXRoLnBvdygxICsgcmF0ZSwgcGVyaW9kcykgLSAxKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbW9ydGdhZ2UvdXNhL2RvbWFpbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3RoZXJGZWVzIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vcnRnYWdlUnVsZXMge1xuICAgIGxvYW5Db25zdHJhaW50czogTG9hbkNvbnN0cmFpbnRzO1xuICAgIGludGVyZXN0OiBJbnRlcmVzdFJ1bGVzO1xuICAgIHRyYW5zZmVyVGF4OiBUcmFuc2ZlclRheFJ1bGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvYW5Db25zdHJhaW50cyB7XG4gICAgbWF4THR2UGVyY2VudDogbnVtYmVyO1xuICAgIG1heEFtb3J0aXphdGlvblllYXJzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJlc3RSdWxlcyB7XG4gICAgY29tcG91bmRpbmc6ICdNT05USExZJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2ZlclRheEJyYWNrZXQge1xuICAgIHVwVG8/OiBudW1iZXI7XG4gICAgYWJvdmU/OiBudW1iZXI7XG4gICAgcmF0ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZmVyVGF4UnVsZXMge1xuICAgIGJyYWNrZXRzOiBUcmFuc2ZlclRheEJyYWNrZXRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbW9ydGl6YXRpb25TY2hlZHVsZUl0ZW0ge1xuICAgIHllYXI6IG51bWJlcjtcbiAgICBwcmluY2lwYWw6IG51bWJlcjtcbiAgICBpbnRlcmVzdDogbnVtYmVyO1xuICAgIGJhbGFuY2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZUlucHV0IHtcbiAgICBwcm9wZXJ0eVByaWNlOiBudW1iZXI7XG4gICAgZG93blBheW1lbnQ6IG51bWJlcjtcbiAgICBhbm51YWxJbnRlcmVzdFJhdGU6IG51bWJlcjtcbiAgICBhbW9ydGl6YXRpb25ZZWFyczogbnVtYmVyO1xuICAgIGlzRmlyc3RUaW1lQnV5ZXI6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ydGdhZ2VPdXRwdXQge1xuICAgIGxvYW5BbW91bnQ6IG51bWJlcjtcbiAgICB0b3RhbE1vcnRnYWdlOiBudW1iZXI7XG4gICAgbW9udGhseVBheW1lbnQ6IG51bWJlcjtcbiAgICB0b3RhbEludGVyZXN0UGFpZDogbnVtYmVyO1xuICAgIHRvdGFsUGFpZDogbnVtYmVyO1xuICAgIHRyYW5zZmVyVGF4OiBudW1iZXI7XG4gICAgYW1vcnRpemF0aW9uU2NoZWR1bGU6IEFtb3J0aXphdGlvblNjaGVkdWxlSXRlbVtdO1xuICAgIG90aGVyRmVlczogT3RoZXJGZWVzO1xufVxuIl19
|
|
@@ -7,5 +7,6 @@ var CalculatorType;
|
|
|
7
7
|
CalculatorType["MORTGAGE"] = "MORTGAGE";
|
|
8
8
|
CalculatorType["LOAN"] = "LOAN";
|
|
9
9
|
CalculatorType["CORPORATE_TAX"] = "CORPORATE_TAX";
|
|
10
|
+
CalculatorType["CAPITAL_GAINS"] = "CAPITAL_GAINS";
|
|
10
11
|
})(CalculatorType || (exports.CalculatorType = CalculatorType = {}));
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2hhcmVkL2RvbWFpbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLGNBTVg7QUFORCxXQUFZLGNBQWM7SUFDdEIsMkNBQXlCLENBQUE7SUFDekIsdUNBQXFCLENBQUE7SUFDckIsK0JBQWEsQ0FBQTtJQUNiLGlEQUErQixDQUFBO0lBQy9CLGlEQUErQixDQUFBO0FBQ25DLENBQUMsRUFOVyxjQUFjLDhCQUFkLGNBQWMsUUFNekIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBDYWxjdWxhdG9yVHlwZSB7XG4gICAgSU5DT01FX1RBWCA9ICdJTkNPTUVfVEFYJyxcbiAgICBNT1JUR0FHRSA9ICdNT1JUR0FHRScsXG4gICAgTE9BTiA9ICdMT0FOJyxcbiAgICBDT1JQT1JBVEVfVEFYID0gJ0NPUlBPUkFURV9UQVgnLFxuICAgIENBUElUQUxfR0FJTlMgPSAnQ0FQSVRBTF9HQUlOUycsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZU1ldGEge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY291bnRyeTogc3RyaW5nO1xuICAgIHJlZ2lvbjogc3RyaW5nO1xuICAgIGNhbGN1bGF0b3I6IENhbGN1bGF0b3JUeXBlO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBlZmZlY3RpdmVmcm9tOiBzdHJpbmc7XG4gICAgZWZmZWN0aXZldG86IHN0cmluZyB8IG51bGw7XG4gICAgc291cmNlPzogUnVsZVNvdXJjZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVTb3VyY2Uge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB1cmw6IHN0cmluZztcbn0iXX0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AustraliaCapitalGainsService } from "./AustraliaCapitalGainsService";
|
|
2
|
+
import { Input, Result, Rules } from "./domain/types";
|
|
3
|
+
export declare class AustraliaCapitalGainsServiceImpl implements AustraliaCapitalGainsService {
|
|
4
|
+
private _input;
|
|
5
|
+
private _rules;
|
|
6
|
+
constructor(input: Input, rules: Rules);
|
|
7
|
+
calculate(): Result;
|
|
8
|
+
private applyBrackets;
|
|
9
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Breakdown } from "../../domain/types";
|
|
2
|
+
export interface TaxBracket {
|
|
3
|
+
from: number;
|
|
4
|
+
to: number | null;
|
|
5
|
+
rate: number;
|
|
6
|
+
}
|
|
7
|
+
export interface Rules {
|
|
8
|
+
cgtDiscount: number;
|
|
9
|
+
cgtDiscountMinMonths: number;
|
|
10
|
+
taxBrackets: TaxBracket[];
|
|
11
|
+
}
|
|
12
|
+
export interface Input {
|
|
13
|
+
capitalGain: number;
|
|
14
|
+
totalTaxableIncome: number;
|
|
15
|
+
holdingPeriodMonths: number;
|
|
16
|
+
}
|
|
17
|
+
export interface Result {
|
|
18
|
+
taxableGain: number;
|
|
19
|
+
capitalGainsTax: number;
|
|
20
|
+
effectiveRate: number;
|
|
21
|
+
breakdowns: Breakdown[];
|
|
22
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CanadaCapitalGainsService } from "./CanadaCapitalGainsService";
|
|
2
|
+
import { Input, Result, Rules } from "./domain/types";
|
|
3
|
+
export declare class CanadaCapitalGainsServiceImpl implements CanadaCapitalGainsService {
|
|
4
|
+
private _input;
|
|
5
|
+
private _rules;
|
|
6
|
+
constructor(input: Input, rules: Rules);
|
|
7
|
+
calculate(): Result;
|
|
8
|
+
private applyBrackets;
|
|
9
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Breakdown } from "../../domain/types";
|
|
2
|
+
export interface Rules {
|
|
3
|
+
inclusionRate: number;
|
|
4
|
+
taxBrackets: TaxBracket[];
|
|
5
|
+
}
|
|
6
|
+
export interface TaxBracket {
|
|
7
|
+
from: number;
|
|
8
|
+
to: number | null;
|
|
9
|
+
rate: number;
|
|
10
|
+
}
|
|
11
|
+
export interface Input {
|
|
12
|
+
capitalGain: number;
|
|
13
|
+
totalTaxableIncome: number;
|
|
14
|
+
}
|
|
15
|
+
export interface Result {
|
|
16
|
+
taxableGain: number;
|
|
17
|
+
capitalGainsTax: number;
|
|
18
|
+
effectiveRate: number;
|
|
19
|
+
breakdowns: Breakdown[];
|
|
20
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FranceCapitalGainsService } from "./FranceCapitalGainsService";
|
|
2
|
+
import { Input, Result, Rules } from "./domain/types";
|
|
3
|
+
export declare class FranceCapitalGainsServiceImpl implements FranceCapitalGainsService {
|
|
4
|
+
private _input;
|
|
5
|
+
private _rules;
|
|
6
|
+
constructor(input: Input, rules: Rules);
|
|
7
|
+
calculate(): Result;
|
|
8
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Breakdown } from "../../domain/types";
|
|
2
|
+
export interface Rules {
|
|
3
|
+
flatTaxRate: number;
|
|
4
|
+
socialContributionsRate: number;
|
|
5
|
+
}
|
|
6
|
+
export interface Input {
|
|
7
|
+
capitalGain: number;
|
|
8
|
+
}
|
|
9
|
+
export interface Result {
|
|
10
|
+
incomeTax: number;
|
|
11
|
+
socialContributions: number;
|
|
12
|
+
totalTax: number;
|
|
13
|
+
effectiveRate: number;
|
|
14
|
+
breakdowns: Breakdown[];
|
|
15
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { GermanyCapitalGainsService } from "./GermanyCapitalGainsService";
|
|
2
|
+
import { Input, Result, Rules } from "./domain/types";
|
|
3
|
+
export declare class GermanyCapitalGainsServiceImpl implements GermanyCapitalGainsService {
|
|
4
|
+
private _input;
|
|
5
|
+
private _rules;
|
|
6
|
+
constructor(input: Input, rules: Rules);
|
|
7
|
+
calculate(): Result;
|
|
8
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Breakdown } from "../../domain/types";
|
|
2
|
+
export interface Rules {
|
|
3
|
+
flatTaxRate: number;
|
|
4
|
+
solidaritySurchargeRate: number;
|
|
5
|
+
annualExemption: number;
|
|
6
|
+
}
|
|
7
|
+
export interface Input {
|
|
8
|
+
capitalGain: number;
|
|
9
|
+
}
|
|
10
|
+
export interface Result {
|
|
11
|
+
taxableGain: number;
|
|
12
|
+
capitalGainsTax: number;
|
|
13
|
+
solidaritySurcharge: number;
|
|
14
|
+
totalTax: number;
|
|
15
|
+
effectiveRate: number;
|
|
16
|
+
breakdowns: Breakdown[];
|
|
17
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SouthAfricaCapitalGainsService } from "./SouthAfricaCapitalGainsService";
|
|
2
|
+
import { Input, Result, Rules } from "./domain/types";
|
|
3
|
+
export declare class SouthAfricaCapitalGainsServiceImpl implements SouthAfricaCapitalGainsService {
|
|
4
|
+
private _input;
|
|
5
|
+
private _rules;
|
|
6
|
+
constructor(input: Input, rules: Rules);
|
|
7
|
+
calculate(): Result;
|
|
8
|
+
private applyBrackets;
|
|
9
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Breakdown } from "../../domain/types";
|
|
2
|
+
export interface TaxBracket {
|
|
3
|
+
from: number;
|
|
4
|
+
to: number | null;
|
|
5
|
+
rate: number;
|
|
6
|
+
}
|
|
7
|
+
export interface Rules {
|
|
8
|
+
inclusionRate: number;
|
|
9
|
+
annualExclusion: number;
|
|
10
|
+
taxBrackets: TaxBracket[];
|
|
11
|
+
}
|
|
12
|
+
export interface Input {
|
|
13
|
+
capitalGain: number;
|
|
14
|
+
totalTaxableIncome: number;
|
|
15
|
+
}
|
|
16
|
+
export interface Result {
|
|
17
|
+
taxableGain: number;
|
|
18
|
+
capitalGainsTax: number;
|
|
19
|
+
effectiveRate: number;
|
|
20
|
+
breakdowns: Breakdown[];
|
|
21
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { UKCapitalGainsService } from "./UKCapitalGainsService";
|
|
2
|
+
import { Input, Result, Rules } from "./domain/types";
|
|
3
|
+
export declare class UKCapitalGainsServiceImpl implements UKCapitalGainsService {
|
|
4
|
+
private _input;
|
|
5
|
+
private _rules;
|
|
6
|
+
constructor(input: Input, rules: Rules);
|
|
7
|
+
calculate(): Result;
|
|
8
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Breakdown } from "../../domain/types";
|
|
2
|
+
export interface Rules {
|
|
3
|
+
annualExemption: number;
|
|
4
|
+
basicRate: number;
|
|
5
|
+
higherRate: number;
|
|
6
|
+
basicRateLimit: number;
|
|
7
|
+
}
|
|
8
|
+
export interface Input {
|
|
9
|
+
capitalGain: number;
|
|
10
|
+
totalTaxableIncome: number;
|
|
11
|
+
}
|
|
12
|
+
export interface Result {
|
|
13
|
+
taxableGain: number;
|
|
14
|
+
capitalGainsTax: number;
|
|
15
|
+
effectiveRate: number;
|
|
16
|
+
breakdowns: Breakdown[];
|
|
17
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { USACapitalGainsService } from "./USACapitalGainsService";
|
|
2
|
+
import { Input, Result, Rules } from "./domain/types";
|
|
3
|
+
export declare class USACapitalGainsServiceImpl implements USACapitalGainsService {
|
|
4
|
+
private _input;
|
|
5
|
+
private _rules;
|
|
6
|
+
constructor(input: Input, rules: Rules);
|
|
7
|
+
calculate(): Result;
|
|
8
|
+
private applyBrackets;
|
|
9
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Breakdown } from "../../domain/types";
|
|
2
|
+
export interface LongTermBracket {
|
|
3
|
+
from: number;
|
|
4
|
+
to: number | null;
|
|
5
|
+
rate: number;
|
|
6
|
+
}
|
|
7
|
+
export interface Rules {
|
|
8
|
+
longTermBrackets: LongTermBracket[];
|
|
9
|
+
shortTermBrackets: LongTermBracket[];
|
|
10
|
+
netInvestmentIncomeTax: {
|
|
11
|
+
rate: number;
|
|
12
|
+
threshold: number;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export interface Input {
|
|
16
|
+
capitalGain: number;
|
|
17
|
+
totalTaxableIncome: number;
|
|
18
|
+
holdingPeriodMonths: number;
|
|
19
|
+
}
|
|
20
|
+
export interface Result {
|
|
21
|
+
capitalGainsTax: number;
|
|
22
|
+
netInvestmentIncomeTax: number;
|
|
23
|
+
totalTax: number;
|
|
24
|
+
effectiveRate: number;
|
|
25
|
+
breakdowns: Breakdown[];
|
|
26
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { GermanyCorporateTaxService } from "./GermanyCorporateTaxService";
|
|
2
|
+
import { Input, Result, Rules } from "./domain/types";
|
|
3
|
+
export declare class GermanyCorporateTaxServiceImpl implements GermanyCorporateTaxService {
|
|
4
|
+
private _input;
|
|
5
|
+
private _rules;
|
|
6
|
+
constructor(input: Input, rules: Rules);
|
|
7
|
+
calculate(): Result;
|
|
8
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Breakdown } from "../../domain/types";
|
|
2
|
+
export interface Rules {
|
|
3
|
+
corporateIncomeTax: {
|
|
4
|
+
rate: number;
|
|
5
|
+
};
|
|
6
|
+
solidaritySurcharge: {
|
|
7
|
+
rate: number;
|
|
8
|
+
};
|
|
9
|
+
tradeTax: {
|
|
10
|
+
multiplier: number;
|
|
11
|
+
assessmentRate: number;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export interface Input {
|
|
15
|
+
taxableIncome: number;
|
|
16
|
+
}
|
|
17
|
+
export interface Result {
|
|
18
|
+
corporateTax: number;
|
|
19
|
+
solidaritySurcharge: number;
|
|
20
|
+
tradeTax: number;
|
|
21
|
+
totalTax: number;
|
|
22
|
+
effectiveTaxRate: number;
|
|
23
|
+
breakdowns: Breakdown[];
|
|
24
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { USACorporateTaxService } from "./USACorporateTaxService";
|
|
2
|
+
import { Input, Result, Rules } from "./domain/types";
|
|
3
|
+
export declare class USACorporateTaxServiceImpl implements USACorporateTaxService {
|
|
4
|
+
private _input;
|
|
5
|
+
private _rules;
|
|
6
|
+
constructor(input: Input, rules: Rules);
|
|
7
|
+
calculate(): Result;
|
|
8
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Breakdown } from "../../domain/types";
|
|
2
|
+
export interface Rules {
|
|
3
|
+
regime: {
|
|
4
|
+
type: 'flat';
|
|
5
|
+
rate: number;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export interface Input {
|
|
9
|
+
taxableIncome: number;
|
|
10
|
+
}
|
|
11
|
+
export interface Result {
|
|
12
|
+
corporateTax: number;
|
|
13
|
+
effectiveTaxRate: number;
|
|
14
|
+
breakdowns: Breakdown[];
|
|
15
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { GermanyIncomeTaxService } from "./GermanyIncomeTaxService";
|
|
2
|
+
import { ComputedIncomeTaxValues, IncomeTaxRules } from "./domain/types";
|
|
3
|
+
export declare class GermanyIncomeTaxServiceImpl implements GermanyIncomeTaxService {
|
|
4
|
+
private _income;
|
|
5
|
+
private _rules;
|
|
6
|
+
constructor(income: number, rules: IncomeTaxRules);
|
|
7
|
+
calculateNetIncome(): ComputedIncomeTaxValues;
|
|
8
|
+
private computeTaxBrackets;
|
|
9
|
+
private computeSolidaritySurcharge;
|
|
10
|
+
private computeSocialContributions;
|
|
11
|
+
private round;
|
|
12
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BracketAllocation, TaxBracket } from "../../domain/types";
|
|
2
|
+
export interface IncomeTaxRules {
|
|
3
|
+
taxBrackets: TaxBracket[];
|
|
4
|
+
solidaritySurcharge: SolidaritySurchargeRules;
|
|
5
|
+
socialContributions: SocialContributionRules;
|
|
6
|
+
}
|
|
7
|
+
export interface SolidaritySurchargeRules {
|
|
8
|
+
rate: number;
|
|
9
|
+
exemptionThreshold: number;
|
|
10
|
+
}
|
|
11
|
+
export interface SocialContributionRules {
|
|
12
|
+
rate: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ComputedIncomeTaxValues {
|
|
15
|
+
grossIncome: number;
|
|
16
|
+
incomeTax: number;
|
|
17
|
+
solidaritySurcharge: number;
|
|
18
|
+
socialContributions: number;
|
|
19
|
+
totalDeductions: number;
|
|
20
|
+
netIncome: number;
|
|
21
|
+
effectiveTaxRate: number;
|
|
22
|
+
taxBracketBreakdown: BracketAllocation[];
|
|
23
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { USAIncomeTaxService } from "./USAIncomeTaxService";
|
|
2
|
+
import { ComputedIncomeTaxValues, IncomeTaxRules } from "./domain/types";
|
|
3
|
+
export declare class USAIncomeTaxServiceImpl implements USAIncomeTaxService {
|
|
4
|
+
private _income;
|
|
5
|
+
private _rules;
|
|
6
|
+
constructor(income: number, rules: IncomeTaxRules);
|
|
7
|
+
calculateNetIncome(): ComputedIncomeTaxValues;
|
|
8
|
+
private computeTaxBrackets;
|
|
9
|
+
private computeFICA;
|
|
10
|
+
private round;
|
|
11
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { BracketAllocation, TaxBracket } from "../../domain/types";
|
|
2
|
+
export interface IncomeTaxRules {
|
|
3
|
+
taxBrackets: TaxBracket[];
|
|
4
|
+
standardDeduction: {
|
|
5
|
+
amount: number;
|
|
6
|
+
};
|
|
7
|
+
fica: FICAContributionRules;
|
|
8
|
+
}
|
|
9
|
+
export interface FICAContributionRules {
|
|
10
|
+
socialSecurity: {
|
|
11
|
+
rate: number;
|
|
12
|
+
wageBase: number;
|
|
13
|
+
};
|
|
14
|
+
medicare: {
|
|
15
|
+
rate: number;
|
|
16
|
+
additionalRate: number;
|
|
17
|
+
additionalThreshold: number;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export interface ComputedIncomeTaxValues {
|
|
21
|
+
grossIncome: number;
|
|
22
|
+
incomeTax: number;
|
|
23
|
+
socialSecurity: number;
|
|
24
|
+
medicare: number;
|
|
25
|
+
standardDeduction: number;
|
|
26
|
+
totalDeductions: number;
|
|
27
|
+
netIncome: number;
|
|
28
|
+
effectiveTaxRate: number;
|
|
29
|
+
taxBracketBreakdown: BracketAllocation[];
|
|
30
|
+
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -29,5 +29,31 @@ export { UKCorporateTaxServiceImpl as UKCorporateTaxService } from './corporate/
|
|
|
29
29
|
export { Input as UKCorporateTaxInput, Rules as UKCorporateTaxRules, Result as UKCorporateTaxResult, } from './corporate/uk/domain/types';
|
|
30
30
|
export { UKMortgageServiceImpl as UKMortgageService } from './mortgage/uk/UKMortgageServiceImpl';
|
|
31
31
|
export { MortgageRules as UKMortgageRules, MortgageInput as UKMortgageInput, MortgageOutput as UKMortgageOutput, } from './mortgage/uk/domain/types';
|
|
32
|
+
export { USAIncomeTaxServiceImpl as USAIncomeTaxService } from './income-tax/usa/USAIncomeTaxServiceImpl';
|
|
33
|
+
export { ComputedIncomeTaxValues as USAComputedIncomeTaxValues, IncomeTaxRules as USAIncomeTaxRules, } from './income-tax/usa/domain/types';
|
|
34
|
+
export { USAMortgageServiceImpl as USAMortgageService } from './mortgage/usa/USAMortgageServiceImpl';
|
|
35
|
+
export { MortgageRules as USAMortgageRules, MortgageInput as USAMortgageInput, MortgageOutput as USAMortgageOutput, } from './mortgage/usa/domain/types';
|
|
36
|
+
export { USACorporateTaxServiceImpl as USACorporateTaxService } from './corporate/usa/USACorporateTaxServiceImpl';
|
|
37
|
+
export { Input as USACorporateTaxInput, Rules as USACorporateTaxRules, Result as USACorporateTaxResult, } from './corporate/usa/domain/types';
|
|
38
|
+
export { GermanyIncomeTaxServiceImpl as GermanyIncomeTaxService } from './income-tax/germany/GermanyIncomeTaxServiceImpl';
|
|
39
|
+
export { ComputedIncomeTaxValues as GermanyComputedIncomeTaxValues, IncomeTaxRules as GermanyIncomeTaxRules, } from './income-tax/germany/domain/types';
|
|
40
|
+
export { GermanyMortgageServiceImpl as GermanyMortgageService } from './mortgage/germany/GermanyMortgageServiceImpl';
|
|
41
|
+
export { MortgageRules as GermanyMortgageRules, MortgageInput as GermanyMortgageInput, MortgageOutput as GermanyMortgageOutput, } from './mortgage/germany/domain/types';
|
|
42
|
+
export { GermanyCorporateTaxServiceImpl as GermanyCorporateTaxService } from './corporate/germany/GermanyCorporateTaxServiceImpl';
|
|
43
|
+
export { Input as GermanyCorporateTaxInput, Rules as GermanyCorporateTaxRules, Result as GermanyCorporateTaxResult, } from './corporate/germany/domain/types';
|
|
44
|
+
export { CanadaCapitalGainsServiceImpl as CanadaCapitalGainsService } from './capital-gains/canada/CanadaCapitalGainsServiceImpl';
|
|
45
|
+
export { Input as CanadaCapitalGainsInput, Rules as CanadaCapitalGainsRules, Result as CanadaCapitalGainsResult, } from './capital-gains/canada/domain/types';
|
|
46
|
+
export { FranceCapitalGainsServiceImpl as FranceCapitalGainsService } from './capital-gains/france/FranceCapitalGainsServiceImpl';
|
|
47
|
+
export { Input as FranceCapitalGainsInput, Rules as FranceCapitalGainsRules, Result as FranceCapitalGainsResult, } from './capital-gains/france/domain/types';
|
|
48
|
+
export { SouthAfricaCapitalGainsServiceImpl as SouthAfricaCapitalGainsService } from './capital-gains/south-africa/SouthAfricaCapitalGainsServiceImpl';
|
|
49
|
+
export { Input as SouthAfricaCapitalGainsInput, Rules as SouthAfricaCapitalGainsRules, Result as SouthAfricaCapitalGainsResult, } from './capital-gains/south-africa/domain/types';
|
|
50
|
+
export { AustraliaCapitalGainsServiceImpl as AustraliaCapitalGainsService } from './capital-gains/australia/AustraliaCapitalGainsServiceImpl';
|
|
51
|
+
export { Input as AustraliaCapitalGainsInput, Rules as AustraliaCapitalGainsRules, Result as AustraliaCapitalGainsResult, } from './capital-gains/australia/domain/types';
|
|
52
|
+
export { UKCapitalGainsServiceImpl as UKCapitalGainsService } from './capital-gains/uk/UKCapitalGainsServiceImpl';
|
|
53
|
+
export { Input as UKCapitalGainsInput, Rules as UKCapitalGainsRules, Result as UKCapitalGainsResult, } from './capital-gains/uk/domain/types';
|
|
54
|
+
export { USACapitalGainsServiceImpl as USACapitalGainsService } from './capital-gains/usa/USACapitalGainsServiceImpl';
|
|
55
|
+
export { Input as USACapitalGainsInput, Rules as USACapitalGainsRules, Result as USACapitalGainsResult, } from './capital-gains/usa/domain/types';
|
|
56
|
+
export { GermanyCapitalGainsServiceImpl as GermanyCapitalGainsService } from './capital-gains/germany/GermanyCapitalGainsServiceImpl';
|
|
57
|
+
export { Input as GermanyCapitalGainsInput, Rules as GermanyCapitalGainsRules, Result as GermanyCapitalGainsResult, } from './capital-gains/germany/domain/types';
|
|
32
58
|
export { IncomeTaxCalculatorSchema } from './income-tax/domain/types';
|
|
33
59
|
export * from './income-tax/domain/types';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { GermanyMortgageService } from "./GermanyMortgageService";
|
|
2
|
+
import { MortgageInput, MortgageOutput, MortgageRules } from "./domain/types";
|
|
3
|
+
export declare class GermanyMortgageServiceImpl implements GermanyMortgageService {
|
|
4
|
+
calculate(input: MortgageInput, rules: MortgageRules): MortgageOutput;
|
|
5
|
+
private calculateAmortizationSchedule;
|
|
6
|
+
private calculatePayment;
|
|
7
|
+
}
|