@helpu/headless-loan-calculator 1.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.
@@ -0,0 +1,93 @@
1
+ export declare const VAT_RATES: {
2
+ readonly NoVat: {
3
+ readonly rate: 0;
4
+ readonly label: 'No VAT';
5
+ };
6
+ readonly DE: {
7
+ readonly rate: 0.19;
8
+ readonly label: 'Germany (19%)';
9
+ };
10
+ readonly UK: {
11
+ readonly rate: 0.2;
12
+ readonly label: 'UK (20%)';
13
+ };
14
+ readonly FR: {
15
+ readonly rate: 0.2;
16
+ readonly label: 'France (20%)';
17
+ };
18
+ readonly EU: {
19
+ readonly rate: 0.21;
20
+ readonly label: 'EU Standard (21%)';
21
+ };
22
+ readonly IT: {
23
+ readonly rate: 0.22;
24
+ readonly label: 'Italy (22%)';
25
+ };
26
+ readonly ES: {
27
+ readonly rate: 0.21;
28
+ readonly label: 'Spain (21%)';
29
+ };
30
+ readonly HU: {
31
+ readonly rate: 0.27;
32
+ readonly label: 'Hungary (27%)';
33
+ };
34
+ readonly Custom: {
35
+ readonly rate: 0;
36
+ readonly label: 'Custom Rate';
37
+ };
38
+ };
39
+ export type VATRateKey = keyof typeof VAT_RATES;
40
+ export type PriceMode = 'gross' | 'net';
41
+ export type LoanType = 'closed' | 'open';
42
+ export type Currency = 'HUF' | 'EUR' | 'USD' | 'GBP' | 'JPY' | 'CNY' | 'AUD' | 'CAD' | 'CHF' | 'NZD' | 'SEK' | 'NOK' | 'DKK' | 'SGD' | 'HKD' | 'KRW' | 'MXN' | 'BRL' | 'INR' | 'RUB' | 'ZAR' | 'PLN' | 'TRY' | 'AED' | 'SAR' | 'THB' | 'MYR' | 'IDR' | 'PHP' | 'CZK' | 'ILS' | 'RON' | 'CLP' | 'ARS' | 'COP' | 'PEN';
43
+ export interface MonthlyPayment {
44
+ month: number;
45
+ netAmount: number;
46
+ vatAmount: number;
47
+ grossAmount: number;
48
+ interestAmount: number;
49
+ monthlyPayment: number;
50
+ principalBalance: number;
51
+ }
52
+ export interface CurrencyConfig {
53
+ symbol: string;
54
+ code: string;
55
+ name?: string;
56
+ position: 'before' | 'after';
57
+ decimalPlaces: number;
58
+ thousandsSeparator: string;
59
+ decimalSeparator: string;
60
+ region?: 'Europe' | 'Americas' | 'Asia' | 'Middle East and Africa' | 'Oceania' | 'Other';
61
+ }
62
+ export interface LoanCalculationInput {
63
+ price: number;
64
+ loanTermMonths: number;
65
+ apr: number;
66
+ initialPayment?: number;
67
+ residualValue?: number;
68
+ loanType: LoanType;
69
+ priceMode: PriceMode;
70
+ vatRate: number;
71
+ }
72
+ export interface LoanCalculationResult {
73
+ totalFinancedAmount: number;
74
+ totalInterestAmount: number;
75
+ totalVatAmount: number;
76
+ totalRepayment: number;
77
+ monthlyPayment: number;
78
+ paymentSchedule: MonthlyPayment[];
79
+ input: LoanCalculationInput;
80
+ }
81
+ export interface LoanCalculationError {
82
+ code: 'INVALID_PRICE' | 'INVALID_TERM' | 'INVALID_APR' | 'INITIAL_PAYMENT_TOO_HIGH' | 'RESIDUAL_VALUE_TOO_HIGH' | 'INVALID_INPUT';
83
+ message: string;
84
+ field?: string;
85
+ }
86
+ export type LoanCalculationResultOrError = {
87
+ success: true;
88
+ data: LoanCalculationResult;
89
+ } | {
90
+ success: false;
91
+ error: LoanCalculationError;
92
+ };
93
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "@helpu/headless-loan-calculator",
3
+ "version": "1.0.0",
4
+ "description": "A headless, framework-agnostic loan calculator with support for VAT, multiple currencies, and amortization schedules",
5
+ "keywords": [
6
+ "loan",
7
+ "calculator",
8
+ "finance",
9
+ "amortization",
10
+ "mortgage",
11
+ "leasing",
12
+ "vat",
13
+ "currency",
14
+ "headless"
15
+ ],
16
+ "author": "HelpU Finance",
17
+ "license": "PolyForm-Noncommercial-1.0.0",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/helpufinance/headless-loan-calculator.git"
21
+ },
22
+ "homepage": "https://github.com/helpufinance/headless-loan-calculator#readme",
23
+ "bugs": {
24
+ "url": "https://github.com/helpufinance/headless-loan-calculator/issues"
25
+ },
26
+ "type": "module",
27
+ "main": "./dist/index.cjs",
28
+ "module": "./dist/index.js",
29
+ "types": "./dist/index.d.ts",
30
+ "exports": {
31
+ ".": {
32
+ "import": {
33
+ "types": "./dist/index.d.ts",
34
+ "default": "./dist/index.js"
35
+ },
36
+ "require": {
37
+ "types": "./dist/index.d.cts",
38
+ "default": "./dist/index.cjs"
39
+ }
40
+ }
41
+ },
42
+ "files": [
43
+ "dist",
44
+ "README.md",
45
+ "LICENSE",
46
+ "COMMERCIAL-LICENSING.md"
47
+ ],
48
+ "sideEffects": false,
49
+ "engines": {
50
+ "node": ">=18.0.0"
51
+ },
52
+ "scripts": {
53
+ "build": "rolldown -c rolldown.config.ts && tsc --emitDeclarationOnly --declaration --outDir dist",
54
+ "dev": "rolldown -c rolldown.config.ts --watch",
55
+ "typecheck": "tsc --noEmit",
56
+ "test": "vitest run",
57
+ "test:coverage": "vitest run --coverage",
58
+ "test:watch": "vitest",
59
+ "lint": "oxlint src/*.ts tests/*.ts",
60
+ "lint:fix": "oxlint --fix src/*.ts tests/*.ts",
61
+ "format": "oxfmt src/*.ts tests/*.ts rolldown.config.ts vitest.config.ts",
62
+ "format:check": "oxfmt --check src/*.ts tests/*.ts rolldown.config.ts vitest.config.ts",
63
+ "clean": "rm -rf dist",
64
+ "prepublishOnly": "npm run clean && npm run build"
65
+ },
66
+ "devDependencies": {
67
+ "@types/node": "^26.4.1",
68
+ "@vitest/coverage-v8": "^5.0.0",
69
+ "oxfmt": "^0.67.0",
70
+ "oxlint": "^1.82.0",
71
+ "rolldown": "^1.2.8",
72
+ "typescript": "^7.0.2",
73
+ "vitest": "^5.0.0"
74
+ }
75
+ }