calcuris-mcp 0.1.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/CHANGELOG.md +29 -0
- package/LICENSE +21 -0
- package/README.md +110 -0
- package/dist/index.js +303 -0
- package/dist/lib/au-income-tax-data.js +17 -0
- package/dist/lib/au-income-tax-math.js +110 -0
- package/dist/lib/au-stamp-duty-data.js +22 -0
- package/dist/lib/au-stamp-duty-math.js +129 -0
- package/dist/lib/ca-income-tax-data.js +49 -0
- package/dist/lib/ca-income-tax-math.js +95 -0
- package/dist/lib/income-tax-math.js +54 -0
- package/dist/lib/paycheck-math.js +52 -0
- package/dist/lib/property-tax-math.js +16 -0
- package/dist/lib/uk-dividend-tax-data.js +22 -0
- package/dist/lib/uk-dividend-tax-math.js +110 -0
- package/dist/lib/us-federal-tax-data.js +65 -0
- package/dist/lib/us-fica-data.js +23 -0
- package/dist/lib/us-state-income-brackets-2026.js +191 -0
- package/dist/lib/us-state-property-tax-2026.js +58 -0
- package/dist/lib/us-state-tax-data.js +101 -0
- package/dist/lib/us-tax-engine.js +44 -0
- package/package.json +52 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
export const STATE_BRACKETS_2026 = {
|
|
2
|
+
AL: {
|
|
3
|
+
single: [{ rate: 0.02, lower: 0, upper: 500 }, { rate: 0.04, lower: 500, upper: 3000 }, { rate: 0.05, lower: 3000, upper: null }],
|
|
4
|
+
mfj: [{ rate: 0.02, lower: 0, upper: 1000 }, { rate: 0.04, lower: 1000, upper: 6000 }, { rate: 0.05, lower: 6000, upper: null }],
|
|
5
|
+
stdDeduction: { single: 3000, mfj: 8500 },
|
|
6
|
+
personalExemption: { single: 1500, mfj: 3000, dependent: 1000 },
|
|
7
|
+
notes: "Standard deduction shown is the maximum (single $3,000 / MFJ $8,500); it phases down by $25 per $500 of AGI above $25,499 (single) / $25,999 (MFJ), not below $2,500/$5,000 (footnote c). Dependent exemption $1,000 reduces to $500 for AGI>$50,000 and $300 for AGI>$100,000 (footnote uu). Federal income tax paid is partly deductible (footnote b). Some localities levy a local income tax (~0.07% avg).",
|
|
8
|
+
},
|
|
9
|
+
AR: {
|
|
10
|
+
single: [{ rate: 0.02, lower: 0, upper: 4600 }, { rate: 0.039, lower: 4600, upper: null }],
|
|
11
|
+
mfj: [{ rate: 0.02, lower: 0, upper: 4600 }, { rate: 0.039, lower: 4600, upper: null }],
|
|
12
|
+
stdDeduction: { single: 2470, mfj: 4940 },
|
|
13
|
+
personalExemption: { single: 0, mfj: 0, dependent: 0 },
|
|
14
|
+
notes: "Personal exemptions are structured as credits, not income deductions: $29 (single), $58 (MFJ), $29 per dependent (footnote h). The headline brackets shown (2.00% / 3.90% over $4,600) apply to individuals with net income > $92,300; a SEPARATE lower-income tax table applies to income <= $92,300 with rates 2% (>=$5,500), 3% (>=$10,900), 3.4% (>=$15,600), 3.9% (>$25,700) — 2025 amounts (footnote g). A bracket-adjustment phase-in applies for net income $89,601-$92,700 (footnote kk). MFJ thresholds equal single.",
|
|
15
|
+
},
|
|
16
|
+
CA: {
|
|
17
|
+
single: [{ rate: 0.01, lower: 0, upper: 11079 }, { rate: 0.02, lower: 11079, upper: 26264 }, { rate: 0.04, lower: 26264, upper: 41452 }, { rate: 0.06, lower: 41452, upper: 57542 }, { rate: 0.08, lower: 57542, upper: 72724 }, { rate: 0.093, lower: 72724, upper: 371479 }, { rate: 0.103, lower: 371479, upper: 445771 }, { rate: 0.113, lower: 445771, upper: 742953 }, { rate: 0.123, lower: 742953, upper: 1000000 }, { rate: 0.133, lower: 1000000, upper: null }],
|
|
18
|
+
mfj: [{ rate: 0.01, lower: 0, upper: 22158 }, { rate: 0.02, lower: 22158, upper: 52528 }, { rate: 0.04, lower: 52528, upper: 82904 }, { rate: 0.06, lower: 82904, upper: 115084 }, { rate: 0.08, lower: 115084, upper: 145448 }, { rate: 0.093, lower: 145448, upper: 742958 }, { rate: 0.103, lower: 742958, upper: 891542 }, { rate: 0.113, lower: 891542, upper: 1000000 }, { rate: 0.123, lower: 1000000, upper: 1485906 }, { rate: 0.133, lower: 1485906, upper: null }],
|
|
19
|
+
stdDeduction: { single: 5540, mfj: 11080 },
|
|
20
|
+
personalExemption: { single: 0, mfj: 0, dependent: 0 },
|
|
21
|
+
notes: "MFJ thresholds are NOT a simple 2x of single at the top (13.30% starts at $1,485,906 MFJ vs $1,000,000 single). The top 13.30% rate includes a 1% mental-health-services surtax on income over $1M (footnote l). Personal/dependent exemptions are credits ($153 single / $306 MFJ / $153 per dependent), which phase out for high AGI (footnotes h, k). Brackets indexed to inflation but top brackets not fully indexed (footnote nn). Excludes a 1.3% disability-insurance payroll tax (no wage ceiling), pushing top wage rate to ~14.6%.",
|
|
22
|
+
},
|
|
23
|
+
CT: {
|
|
24
|
+
single: [{ rate: 0.02, lower: 0, upper: 10000 }, { rate: 0.045, lower: 10000, upper: 50000 }, { rate: 0.055, lower: 50000, upper: 100000 }, { rate: 0.06, lower: 100000, upper: 200000 }, { rate: 0.065, lower: 200000, upper: 250000 }, { rate: 0.069, lower: 250000, upper: 500000 }, { rate: 0.0699, lower: 500000, upper: null }],
|
|
25
|
+
mfj: [{ rate: 0.02, lower: 0, upper: 20000 }, { rate: 0.045, lower: 20000, upper: 100000 }, { rate: 0.055, lower: 100000, upper: 200000 }, { rate: 0.06, lower: 200000, upper: 400000 }, { rate: 0.065, lower: 400000, upper: 500000 }, { rate: 0.069, lower: 500000, upper: 1000000 }, { rate: 0.0699, lower: 1000000, upper: null }],
|
|
26
|
+
personalExemption: { single: 15000, mfj: 24000, dependent: 0 },
|
|
27
|
+
notes: "No state standard deduction (n.a.). Personal exemption $15,000 (single) / $24,000 (MFJ) phases out by $1,000 per $1,000 of AGI above $30,000 (single) / $48,000 (MFJ) (footnote r). RECAPTURE/tax-benefit-recapture surtax: high-income taxpayers effectively pay the top rate on all income via complex phaseouts of the 2%/3% rate bands and added recapture payments (footnotes i, p) — base brackets captured here, recapture NOT modeled. Additional 1-75% personal tax credits by AGI (footnote q).",
|
|
28
|
+
},
|
|
29
|
+
DE: {
|
|
30
|
+
single: [{ rate: 0.022, lower: 2000, upper: 5000 }, { rate: 0.039, lower: 5000, upper: 10000 }, { rate: 0.048, lower: 10000, upper: 20000 }, { rate: 0.052, lower: 20000, upper: 25000 }, { rate: 0.0555, lower: 25000, upper: 60000 }, { rate: 0.066, lower: 60000, upper: null }],
|
|
31
|
+
mfj: [{ rate: 0.022, lower: 2000, upper: 5000 }, { rate: 0.039, lower: 5000, upper: 10000 }, { rate: 0.048, lower: 10000, upper: 20000 }, { rate: 0.052, lower: 20000, upper: 25000 }, { rate: 0.0555, lower: 25000, upper: 60000 }, { rate: 0.066, lower: 60000, upper: null }],
|
|
32
|
+
stdDeduction: { single: 3250, mfj: 6500 },
|
|
33
|
+
personalExemption: { single: 0, mfj: 0, dependent: 0 },
|
|
34
|
+
notes: "First $2,000 of income is exempt (0%); lowest taxed bracket starts at $2,000. Personal/dependent exemptions are credits ($110 single / $220 MFJ / $110 per dependent) (footnote h). MFJ thresholds equal single (no doubling). Delaware also imposes a separate tax on lump-sum distributions (footnote s). Some localities (e.g., Wilmington) levy a flat wage tax.",
|
|
35
|
+
},
|
|
36
|
+
HI: {
|
|
37
|
+
single: [{ rate: 0.014, lower: 0, upper: 9600 }, { rate: 0.032, lower: 9600, upper: 14400 }, { rate: 0.055, lower: 14400, upper: 19200 }, { rate: 0.064, lower: 19200, upper: 24000 }, { rate: 0.068, lower: 24000, upper: 36000 }, { rate: 0.072, lower: 36000, upper: 48000 }, { rate: 0.076, lower: 48000, upper: 125000 }, { rate: 0.079, lower: 125000, upper: 175000 }, { rate: 0.0825, lower: 175000, upper: 225000 }, { rate: 0.09, lower: 225000, upper: 275000 }, { rate: 0.1, lower: 275000, upper: 325000 }, { rate: 0.11, lower: 325000, upper: null }],
|
|
38
|
+
mfj: [{ rate: 0.014, lower: 0, upper: 19200 }, { rate: 0.032, lower: 19200, upper: 28800 }, { rate: 0.055, lower: 28800, upper: 38400 }, { rate: 0.064, lower: 38400, upper: 48000 }, { rate: 0.068, lower: 48000, upper: 72000 }, { rate: 0.072, lower: 72000, upper: 96000 }, { rate: 0.076, lower: 96000, upper: 250000 }, { rate: 0.079, lower: 250000, upper: 350000 }, { rate: 0.0825, lower: 350000, upper: 450000 }, { rate: 0.09, lower: 450000, upper: 550000 }, { rate: 0.1, lower: 550000, upper: 650000 }, { rate: 0.11, lower: 650000, upper: null }],
|
|
39
|
+
stdDeduction: { single: 4400, mfj: 8800 },
|
|
40
|
+
personalExemption: { single: 1144, mfj: 2288, dependent: 1144 },
|
|
41
|
+
notes: "MFJ thresholds are exactly 2x single. Personal exemption $1,144 per exemption (single/each spouse/dependent). 2026 inflation adjustment for std deduction/exemption not yet published — 2025 amounts shown (footnote n).",
|
|
42
|
+
},
|
|
43
|
+
KS: {
|
|
44
|
+
single: [{ rate: 0.052, lower: 0, upper: 23000 }, { rate: 0.0558, lower: 23000, upper: null }],
|
|
45
|
+
mfj: [{ rate: 0.052, lower: 0, upper: 46000 }, { rate: 0.0558, lower: 46000, upper: null }],
|
|
46
|
+
stdDeduction: { single: 3605, mfj: 8240 },
|
|
47
|
+
personalExemption: { single: 9160, mfj: 18320, dependent: 2320 },
|
|
48
|
+
notes: "MFJ threshold is exactly 2x single ($46,000 vs $23,000). Personal exemption $9,160 (single) / $18,320 (MFJ) plus $2,320 per dependent. Some Kansas localities levy interest/dividend taxes.",
|
|
49
|
+
},
|
|
50
|
+
ME: {
|
|
51
|
+
single: [{ rate: 0.058, lower: 0, upper: 27399 }, { rate: 0.0675, lower: 27399, upper: 64849 }, { rate: 0.0715, lower: 64849, upper: null }],
|
|
52
|
+
mfj: [{ rate: 0.058, lower: 0, upper: 54849 }, { rate: 0.0675, lower: 54849, upper: 129749 }, { rate: 0.0715, lower: 129749, upper: null }],
|
|
53
|
+
stdDeduction: { single: 5300, mfj: 10600 },
|
|
54
|
+
personalExemption: { single: 5300, mfj: 10600, dependent: 0 },
|
|
55
|
+
notes: "MFJ thresholds are 2x single. Standard deduction phases out for income over $100,000 (single) / $200,050 (MFJ); personal exemption ($5,300) phases out over $333,450 (single) / $400,100 (MFJ) (footnote y). Dependents: refundable credit of $305 (age 6+) / $610 (age 5 and under) instead of an exemption (footnote ww), so dependent exemption set to 0. Std deduction conforms to pre-OBBBA federal amount (footnote vv: $8,350/$16,700 noted there, but ME uses its own $5,300/$10,600 std).",
|
|
56
|
+
},
|
|
57
|
+
MD: {
|
|
58
|
+
single: [{ rate: 0.02, lower: 0, upper: 1000 }, { rate: 0.03, lower: 1000, upper: 2000 }, { rate: 0.04, lower: 2000, upper: 3000 }, { rate: 0.0475, lower: 3000, upper: 100000 }, { rate: 0.05, lower: 100000, upper: 125000 }, { rate: 0.0525, lower: 125000, upper: 150000 }, { rate: 0.055, lower: 150000, upper: 250000 }, { rate: 0.0575, lower: 250000, upper: 500000 }, { rate: 0.0625, lower: 500000, upper: 1000000 }, { rate: 0.065, lower: 1000000, upper: null }],
|
|
59
|
+
mfj: [{ rate: 0.02, lower: 0, upper: 1000 }, { rate: 0.03, lower: 1000, upper: 2000 }, { rate: 0.04, lower: 2000, upper: 3000 }, { rate: 0.0475, lower: 3000, upper: 150000 }, { rate: 0.05, lower: 150000, upper: 175000 }, { rate: 0.0525, lower: 175000, upper: 225000 }, { rate: 0.055, lower: 225000, upper: 300000 }, { rate: 0.0575, lower: 300000, upper: 600000 }, { rate: 0.0625, lower: 600000, upper: 1200000 }, { rate: 0.065, lower: 1200000, upper: null }],
|
|
60
|
+
stdDeduction: { single: 3350, mfj: 6700 },
|
|
61
|
+
personalExemption: { single: 3200, mfj: 6400, dependent: 3200 },
|
|
62
|
+
notes: "MFJ thresholds differ from single in the upper brackets (not a simple 2x). Two new top brackets (6.25%, 6.50%) added retroactive to 2025. Personal/dependent exemption $3,200 phases out above $100,000/$150,000 (single) and $150,000/$200,000 (MFJ), zero above the top threshold (footnote aa). Additional 2% surtax on capital-gains income for AGI > $350,000 (footnote x) — NOT modeled. Significant local (county/Baltimore) income taxes apply (~2.4% avg) on top of state.",
|
|
63
|
+
},
|
|
64
|
+
MA: {
|
|
65
|
+
single: [{ rate: 0.05, lower: 0, upper: 1083150 }, { rate: 0.09, lower: 1083150, upper: null }],
|
|
66
|
+
mfj: [{ rate: 0.05, lower: 0, upper: 1083150 }, { rate: 0.09, lower: 1083150, upper: null }],
|
|
67
|
+
personalExemption: { single: 4400, mfj: 8800, dependent: 1000 },
|
|
68
|
+
notes: "Flat 5% plus a 4-point 'millionaire surtax' (total 9%) on income over $1,083,150; the $1,083,150 threshold is the SAME for single and MFJ (not doubled) (footnote rr). No standard deduction (n.a.); personal exemption $4,400 (single) / $8,800 (MFJ), $1,000 per dependent. Excludes the paid family/medical leave payroll tax.",
|
|
69
|
+
},
|
|
70
|
+
MN: {
|
|
71
|
+
single: [{ rate: 0.0535, lower: 0, upper: 33310 }, { rate: 0.068, lower: 33310, upper: 109430 }, { rate: 0.0785, lower: 109430, upper: 203150 }, { rate: 0.0985, lower: 203150, upper: null }],
|
|
72
|
+
mfj: [{ rate: 0.0535, lower: 0, upper: 48700 }, { rate: 0.068, lower: 48700, upper: 193480 }, { rate: 0.0785, lower: 193480, upper: 337930 }, { rate: 0.0985, lower: 337930, upper: null }],
|
|
73
|
+
stdDeduction: { single: 15300, mfj: 30600 },
|
|
74
|
+
personalExemption: { single: 0, mfj: 0, dependent: 5300 },
|
|
75
|
+
notes: "MFJ thresholds differ from single (not a simple 2x). No personal exemption for filer/spouse, but $5,300 per dependent. Standard deduction phases down for high AGI (footnote cc). 1% surtax on net investment income over $1M (footnote oo) — NOT modeled.",
|
|
76
|
+
},
|
|
77
|
+
MO: {
|
|
78
|
+
single: [{ rate: 0.02, lower: 1348, upper: 2696 }, { rate: 0.025, lower: 2696, upper: 4044 }, { rate: 0.03, lower: 4044, upper: 5392 }, { rate: 0.035, lower: 5392, upper: 6740 }, { rate: 0.04, lower: 6740, upper: 8088 }, { rate: 0.045, lower: 8088, upper: 9436 }, { rate: 0.047, lower: 9436, upper: null }],
|
|
79
|
+
mfj: [{ rate: 0.02, lower: 1348, upper: 2696 }, { rate: 0.025, lower: 2696, upper: 4044 }, { rate: 0.03, lower: 4044, upper: 5392 }, { rate: 0.035, lower: 5392, upper: 6740 }, { rate: 0.04, lower: 6740, upper: 8088 }, { rate: 0.045, lower: 8088, upper: 9436 }, { rate: 0.047, lower: 9436, upper: null }],
|
|
80
|
+
stdDeduction: { single: 16100, mfj: 32200 },
|
|
81
|
+
personalExemption: { single: 0, mfj: 0, dependent: 0 },
|
|
82
|
+
notes: "First $1,348 of income is exempt (0%); taxation begins at $1,348. MFJ thresholds equal single. Brackets indexed for inflation (footnote bb). Standard deduction tied to federal amount. Federal income tax paid is partly deductible (footnote b). Some localities (Kansas City, St. Louis) levy a 1% earnings tax.",
|
|
83
|
+
},
|
|
84
|
+
MT: {
|
|
85
|
+
single: [{ rate: 0.047, lower: 0, upper: 47500 }, { rate: 0.0565, lower: 47500, upper: null }],
|
|
86
|
+
mfj: [{ rate: 0.047, lower: 0, upper: 95000 }, { rate: 0.0565, lower: 95000, upper: null }],
|
|
87
|
+
stdDeduction: { single: 16100, mfj: 32200 },
|
|
88
|
+
personalExemption: { single: 0, mfj: 0, dependent: 0 },
|
|
89
|
+
notes: "MFJ threshold is 2x single ($95,000 vs $47,500). Top rate reduced from 5.9% to 5.65% in 2026 (further cut to 5.4% in 2027). Standard deduction tied to federal (footnote u/o); Montana includes the federal standard deduction in its income starting point. Brackets indexed for inflation (footnote bb).",
|
|
90
|
+
},
|
|
91
|
+
NE: {
|
|
92
|
+
single: [{ rate: 0.0246, lower: 0, upper: 4130 }, { rate: 0.0351, lower: 4130, upper: 24760 }, { rate: 0.0455, lower: 24760, upper: null }],
|
|
93
|
+
mfj: [{ rate: 0.0246, lower: 0, upper: 8250 }, { rate: 0.0351, lower: 8250, upper: 49530 }, { rate: 0.0455, lower: 49530, upper: null }],
|
|
94
|
+
stdDeduction: { single: 8850, mfj: 17700 },
|
|
95
|
+
personalExemption: { single: 176, mfj: 352, dependent: 176 },
|
|
96
|
+
notes: "MFJ thresholds ~2x single. Top rate cut from 5.2% to 4.55% in 2026 (phasedown to 3.99% by 2027). Personal/dependent exemptions are credits ($176 single / $352 MFJ / $176 per dependent) (footnote h). Brackets indexed for inflation (footnote bb).",
|
|
97
|
+
},
|
|
98
|
+
NJ: {
|
|
99
|
+
single: [{ rate: 0.014, lower: 0, upper: 20000 }, { rate: 0.0175, lower: 20000, upper: 35000 }, { rate: 0.035, lower: 35000, upper: 40000 }, { rate: 0.0553, lower: 40000, upper: 75000 }, { rate: 0.0637, lower: 75000, upper: 500000 }, { rate: 0.0897, lower: 500000, upper: 1000000 }, { rate: 0.1075, lower: 1000000, upper: null }],
|
|
100
|
+
mfj: [{ rate: 0.014, lower: 0, upper: 20000 }, { rate: 0.0175, lower: 20000, upper: 50000 }, { rate: 0.0245, lower: 50000, upper: 70000 }, { rate: 0.035, lower: 70000, upper: 80000 }, { rate: 0.0553, lower: 80000, upper: 150000 }, { rate: 0.0637, lower: 150000, upper: 500000 }, { rate: 0.0897, lower: 500000, upper: 1000000 }, { rate: 0.1075, lower: 1000000, upper: null }],
|
|
101
|
+
personalExemption: { single: 1000, mfj: 2000, dependent: 1500 },
|
|
102
|
+
notes: "MFJ schedule is DIFFERENT from single and has one extra bracket (an additional 2.45% band $50,000-$70,000 that single filers do not have); thresholds are NOT a doubling of single. No standard deduction (n.a.). Personal exemption $1,000 (single) / $2,000 (MFJ), $1,500 per dependent.",
|
|
103
|
+
},
|
|
104
|
+
NM: {
|
|
105
|
+
single: [{ rate: 0.015, lower: 0, upper: 5500 }, { rate: 0.032, lower: 5500, upper: 16500 }, { rate: 0.043, lower: 16500, upper: 33500 }, { rate: 0.047, lower: 33500, upper: 66500 }, { rate: 0.049, lower: 66500, upper: 210000 }, { rate: 0.059, lower: 210000, upper: null }],
|
|
106
|
+
mfj: [{ rate: 0.015, lower: 0, upper: 8000 }, { rate: 0.032, lower: 8000, upper: 25000 }, { rate: 0.043, lower: 25000, upper: 50000 }, { rate: 0.047, lower: 50000, upper: 100000 }, { rate: 0.049, lower: 100000, upper: 315000 }, { rate: 0.059, lower: 315000, upper: null }],
|
|
107
|
+
stdDeduction: { single: 16100, mfj: 32200 },
|
|
108
|
+
personalExemption: { single: 0, mfj: 0, dependent: 4000 },
|
|
109
|
+
notes: "MFJ thresholds differ from single (not a clean 2x). Standard deduction tied to federal (footnote u/o). No personal exemption for filer/spouse, but a $4,000 deduction for all but one dependent in lieu of the suspended personal exemption (footnote jj). Brackets adjusted for inflation.",
|
|
110
|
+
},
|
|
111
|
+
NY: {
|
|
112
|
+
single: [{ rate: 0.039, lower: 0, upper: 8500 }, { rate: 0.044, lower: 8500, upper: 11700 }, { rate: 0.0515, lower: 11700, upper: 13900 }, { rate: 0.054, lower: 13900, upper: 80650 }, { rate: 0.059, lower: 80650, upper: 215400 }, { rate: 0.0685, lower: 215400, upper: 1077550 }, { rate: 0.0965, lower: 1077550, upper: 5000000 }, { rate: 0.103, lower: 5000000, upper: 25000000 }, { rate: 0.109, lower: 25000000, upper: null }],
|
|
113
|
+
mfj: [{ rate: 0.039, lower: 0, upper: 17150 }, { rate: 0.044, lower: 17150, upper: 23600 }, { rate: 0.0515, lower: 23600, upper: 27900 }, { rate: 0.054, lower: 27900, upper: 161550 }, { rate: 0.059, lower: 161550, upper: 323200 }, { rate: 0.0685, lower: 323200, upper: 2155350 }, { rate: 0.0965, lower: 2155350, upper: 5000000 }, { rate: 0.103, lower: 5000000, upper: 25000000 }, { rate: 0.109, lower: 25000000, upper: null }],
|
|
114
|
+
stdDeduction: { single: 8000, mfj: 16050 },
|
|
115
|
+
personalExemption: { single: 0, mfj: 0, dependent: 1000 },
|
|
116
|
+
notes: "MFJ thresholds differ from single in the lower/mid brackets (not a clean 2x; top two brackets $5M and $25M are identical for both). No personal exemption for filer/spouse, $1,000 per dependent. RECAPTURE: 'tax benefit recapture' makes many high-income taxpayers pay the top rate on ALL income, plus there is a supplemental tax (footnote i) — base brackets captured, recapture/supplemental NOT modeled. Some localities (NYC, Yonkers) levy a substantial separate local income tax (~1.6% avg).",
|
|
117
|
+
},
|
|
118
|
+
ND: {
|
|
119
|
+
single: [{ rate: 0, lower: 0, upper: 48475 }, { rate: 0.0195, lower: 48475, upper: 244825 }, { rate: 0.025, lower: 244825, upper: null }],
|
|
120
|
+
mfj: [{ rate: 0, lower: 0, upper: 80975 }, { rate: 0.0195, lower: 80975, upper: 298075 }, { rate: 0.025, lower: 298075, upper: null }],
|
|
121
|
+
stdDeduction: { single: 16100, mfj: 32200 },
|
|
122
|
+
personalExemption: { single: 0, mfj: 0, dependent: 0 },
|
|
123
|
+
notes: "First bracket is 0% (single up to $48,475 / MFJ up to $80,975); the Tax Foundation table omits the leading 0% row but it is part of the schedule (confirmed via ND Office of State Tax Commissioner / ND Income Tax Calculator). MFJ thresholds differ from single (not 2x). Standard deduction tied to federal (footnotes o, u); ND includes the federal standard deduction in its income starting point. Brackets indexed for inflation.",
|
|
124
|
+
},
|
|
125
|
+
OK: {
|
|
126
|
+
single: [{ rate: 0.0025, lower: 0, upper: 1000 }, { rate: 0.0075, lower: 1000, upper: 2500 }, { rate: 0.0175, lower: 2500, upper: 3750 }, { rate: 0.0275, lower: 3750, upper: 4900 }, { rate: 0.035, lower: 4900, upper: 7200 }, { rate: 0.045, lower: 7200, upper: null }],
|
|
127
|
+
mfj: [{ rate: 0.0025, lower: 0, upper: 2000 }, { rate: 0.0075, lower: 2000, upper: 5000 }, { rate: 0.0175, lower: 5000, upper: 7500 }, { rate: 0.0275, lower: 7500, upper: 9800 }, { rate: 0.035, lower: 9800, upper: 14400 }, { rate: 0.045, lower: 14400, upper: null }],
|
|
128
|
+
stdDeduction: { single: 6350, mfj: 12700 },
|
|
129
|
+
personalExemption: { single: 1000, mfj: 2000, dependent: 1000 },
|
|
130
|
+
notes: "The Tax Foundation 2026 table shows only the top three brackets (2.50% > $3,750 single / $7,500 MFJ; 3.50%; 4.50%) as headline rates. Oklahoma's full statutory schedule has six brackets starting at 0.25%; the lower three (0.25% > $0, 0.75% > $1,000, 1.75% > $2,500 for single — doubled for MFJ) are included here from the OK Tax Commission schedule for completeness. VERIFY against OK 2026 withholding tables before production use. MFJ thresholds are 2x single. Personal exemption $1,000 per exemption.",
|
|
131
|
+
},
|
|
132
|
+
OR: {
|
|
133
|
+
single: [{ rate: 0.0475, lower: 0, upper: 4550 }, { rate: 0.0675, lower: 4550, upper: 11400 }, { rate: 0.0875, lower: 11400, upper: 125000 }, { rate: 0.099, lower: 125000, upper: null }],
|
|
134
|
+
mfj: [{ rate: 0.0475, lower: 0, upper: 9100 }, { rate: 0.0675, lower: 9100, upper: 22800 }, { rate: 0.0875, lower: 22800, upper: 250000 }, { rate: 0.099, lower: 250000, upper: null }],
|
|
135
|
+
stdDeduction: { single: 2910, mfj: 5820 },
|
|
136
|
+
personalExemption: { single: 0, mfj: 0, dependent: 0 },
|
|
137
|
+
notes: "MFJ thresholds are 2x single in lower brackets and 2x at the top ($250,000 vs $125,000). Personal/dependent exemptions are credits ($256 single / $512 MFJ / $256 per dependent), disallowed if federal AGI > $100,000 single / $200,000 MFJ (footnotes h, ee). Top brackets not fully indexed (footnote nn). Some localities and the state have payroll/wage taxes.",
|
|
138
|
+
},
|
|
139
|
+
RI: {
|
|
140
|
+
single: [{ rate: 0.0375, lower: 0, upper: 82050 }, { rate: 0.0475, lower: 82050, upper: 186450 }, { rate: 0.0599, lower: 186450, upper: null }],
|
|
141
|
+
mfj: [{ rate: 0.0375, lower: 0, upper: 82050 }, { rate: 0.0475, lower: 82050, upper: 186450 }, { rate: 0.0599, lower: 186450, upper: null }],
|
|
142
|
+
stdDeduction: { single: 11200, mfj: 22400 },
|
|
143
|
+
personalExemption: { single: 5250, mfj: 10500, dependent: 5250 },
|
|
144
|
+
notes: "MFJ thresholds EQUAL single (the brackets are not doubled). Standard deduction, personal exemption, and dependency exemption all phase out between modified federal AGI $261,000 and $290,800, eliminated above $290,800 (footnote ff). Brackets indexed for inflation.",
|
|
145
|
+
},
|
|
146
|
+
SC: {
|
|
147
|
+
single: [{ rate: 0, lower: 0, upper: 3640 }, { rate: 0.03, lower: 3640, upper: 18230 }, { rate: 0.06, lower: 18230, upper: null }],
|
|
148
|
+
mfj: [{ rate: 0, lower: 0, upper: 3640 }, { rate: 0.03, lower: 3640, upper: 18230 }, { rate: 0.06, lower: 18230, upper: null }],
|
|
149
|
+
stdDeduction: { single: 8350, mfj: 16700 },
|
|
150
|
+
personalExemption: { single: 0, mfj: 0, dependent: 4930 },
|
|
151
|
+
notes: "First bracket is 0% (income up to $3,640). MFJ thresholds EQUAL single (not doubled). Top marginal rate shown is 6.00%; it is SCHEDULED TO REVERT to 6.2% on July 1, 2026 (footnote qq) — so the published 2026 top rate is 6.0% but mid-year it becomes 6.2%. Standard deduction tied to federal/pre-OBBBA ($8,350/$16,700, footnotes o, u, vv). No personal exemption for filer/spouse; $4,930 deduction per dependent. Brackets indexed for inflation.",
|
|
152
|
+
},
|
|
153
|
+
VT: {
|
|
154
|
+
single: [{ rate: 0.0335, lower: 0, upper: 49400 }, { rate: 0.066, lower: 49400, upper: 119700 }, { rate: 0.076, lower: 119700, upper: 249700 }, { rate: 0.0875, lower: 249700, upper: null }],
|
|
155
|
+
mfj: [{ rate: 0.0335, lower: 0, upper: 82500 }, { rate: 0.066, lower: 82500, upper: 199450 }, { rate: 0.076, lower: 199450, upper: 304000 }, { rate: 0.0875, lower: 304000, upper: null }],
|
|
156
|
+
stdDeduction: { single: 7650, mfj: 15300 },
|
|
157
|
+
personalExemption: { single: 5300, mfj: 10600, dependent: 5300 },
|
|
158
|
+
notes: "MFJ thresholds differ from single (not a clean 2x). Personal exemption $5,300 per exemption (single/each spouse/dependent). For federal AGI > $150,000, taxpayer pays the greater of state income tax or 3% of federal AGI (footnote hh). Additional $1,250 deduction per federal Form 1040 std-deduction box checked (footnote mm). Brackets indexed for inflation.",
|
|
159
|
+
},
|
|
160
|
+
VA: {
|
|
161
|
+
single: [{ rate: 0.02, lower: 0, upper: 3000 }, { rate: 0.03, lower: 3000, upper: 5000 }, { rate: 0.05, lower: 5000, upper: 17000 }, { rate: 0.0575, lower: 17000, upper: null }],
|
|
162
|
+
mfj: [{ rate: 0.02, lower: 0, upper: 3000 }, { rate: 0.03, lower: 3000, upper: 5000 }, { rate: 0.05, lower: 5000, upper: 17000 }, { rate: 0.0575, lower: 17000, upper: null }],
|
|
163
|
+
stdDeduction: { single: 8750, mfj: 17500 },
|
|
164
|
+
personalExemption: { single: 930, mfj: 1860, dependent: 930 },
|
|
165
|
+
notes: "MFJ thresholds EQUAL single (brackets not doubled). Personal exemption $930 per exemption. Standard deduction $8,750 (single) / $17,500 (MFJ).",
|
|
166
|
+
},
|
|
167
|
+
WV: {
|
|
168
|
+
single: [{ rate: 0.0222, lower: 0, upper: 10000 }, { rate: 0.0296, lower: 10000, upper: 25000 }, { rate: 0.0333, lower: 25000, upper: 40000 }, { rate: 0.0444, lower: 40000, upper: 60000 }, { rate: 0.0482, lower: 60000, upper: null }],
|
|
169
|
+
mfj: [{ rate: 0.0222, lower: 0, upper: 10000 }, { rate: 0.0296, lower: 10000, upper: 25000 }, { rate: 0.0333, lower: 25000, upper: 40000 }, { rate: 0.0444, lower: 40000, upper: 60000 }, { rate: 0.0482, lower: 60000, upper: null }],
|
|
170
|
+
personalExemption: { single: 2000, mfj: 4000, dependent: 2000 },
|
|
171
|
+
notes: "MFJ thresholds EQUAL single (brackets not doubled). No standard deduction (n.a.). Personal exemption $2,000 per exemption ($2,000 single / $4,000 MFJ / $2,000 per dependent). Some localities levy a flat municipal service/wage fee.",
|
|
172
|
+
},
|
|
173
|
+
WI: {
|
|
174
|
+
single: [{ rate: 0.035, lower: 0, upper: 15110 }, { rate: 0.044, lower: 15110, upper: 51950 }, { rate: 0.053, lower: 51950, upper: 332720 }, { rate: 0.0765, lower: 332720, upper: null }],
|
|
175
|
+
mfj: [{ rate: 0.035, lower: 0, upper: 20150 }, { rate: 0.044, lower: 20150, upper: 69260 }, { rate: 0.053, lower: 69260, upper: 443630 }, { rate: 0.0765, lower: 443630, upper: null }],
|
|
176
|
+
stdDeduction: { single: 13960, mfj: 25840 },
|
|
177
|
+
personalExemption: { single: 700, mfj: 1400, dependent: 700 },
|
|
178
|
+
notes: "MFJ thresholds differ from single (not a clean 2x). Standard deduction is a sliding/phase-out amount: $13,960 max (single) phasing out from $20,119 to $0 at $136,453; MFJ $25,840 phasing out from $29,039 to $0 at $159,690 (footnote ii) — max amounts shown. Personal exemption $700 per exemption. Brackets indexed for inflation.",
|
|
179
|
+
},
|
|
180
|
+
DC: {
|
|
181
|
+
single: [{ rate: 0.04, lower: 0, upper: 10000 }, { rate: 0.06, lower: 10000, upper: 40000 }, { rate: 0.065, lower: 40000, upper: 60000 }, { rate: 0.085, lower: 60000, upper: 250000 }, { rate: 0.0925, lower: 250000, upper: 500000 }, { rate: 0.0975, lower: 500000, upper: 1000000 }, { rate: 0.1075, lower: 1000000, upper: null }],
|
|
182
|
+
mfj: [{ rate: 0.04, lower: 0, upper: 10000 }, { rate: 0.06, lower: 10000, upper: 40000 }, { rate: 0.065, lower: 40000, upper: 60000 }, { rate: 0.085, lower: 60000, upper: 250000 }, { rate: 0.0925, lower: 250000, upper: 500000 }, { rate: 0.0975, lower: 500000, upper: 1000000 }, { rate: 0.1075, lower: 1000000, upper: null }],
|
|
183
|
+
stdDeduction: { single: 16100, mfj: 32200 },
|
|
184
|
+
personalExemption: { single: 0, mfj: 0, dependent: 0 },
|
|
185
|
+
notes: "MFJ thresholds EQUAL single (DC brackets are not doubled for joint filers). Standard deduction tied to federal amount ($16,100 single / $32,200 MFJ, footnote u). No DC personal exemption (suspended). Top rate 10.75% on income over $1M.",
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
export const STATE_INCOME_TAX_SOURCE = {
|
|
189
|
+
label: "Tax Foundation — State Individual Income Tax Rates and Brackets, 2026 (as of January 1, 2026)",
|
|
190
|
+
url: "https://taxfoundation.org/data/all/state/state-income-tax-rates-2026/",
|
|
191
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// 51 juridictions (50 états + DC).
|
|
2
|
+
export const STATE_PROPERTY_TAX_2026 = {
|
|
3
|
+
AK: { effRatePct: 0.94, medianTaxUsd: 3901, medianHomeUsd: 266070 },
|
|
4
|
+
AL: { effRatePct: 0.37, medianTaxUsd: 788, medianHomeUsd: 182264 },
|
|
5
|
+
AR: { effRatePct: 0.56, medianTaxUsd: 1040, medianHomeUsd: 168761 },
|
|
6
|
+
AZ: { effRatePct: 0.48, medianTaxUsd: 1879, medianHomeUsd: 274792 },
|
|
7
|
+
CA: { effRatePct: 0.7, medianTaxUsd: 5124, medianHomeUsd: 788920 },
|
|
8
|
+
CO: { effRatePct: 0.5, medianTaxUsd: 2602, medianHomeUsd: 551854 },
|
|
9
|
+
CT: { effRatePct: 1.54, medianTaxUsd: 6575, medianHomeUsd: 414183 },
|
|
10
|
+
DC: { effRatePct: 0.58, medianTaxUsd: 4312, medianHomeUsd: 715000 },
|
|
11
|
+
DE: { effRatePct: 0.54, medianTaxUsd: 1768, medianHomeUsd: 389974 },
|
|
12
|
+
FL: { effRatePct: 0.78, medianTaxUsd: 2730, medianHomeUsd: 387464 },
|
|
13
|
+
GA: { effRatePct: 0.79, medianTaxUsd: 2341, medianHomeUsd: 329110 },
|
|
14
|
+
HI: { effRatePct: 0.29, medianTaxUsd: 2239, medianHomeUsd: 841274 },
|
|
15
|
+
IA: { effRatePct: 1.33, medianTaxUsd: 2897, medianHomeUsd: 219987 },
|
|
16
|
+
ID: { effRatePct: 0.5, medianTaxUsd: 2038, medianHomeUsd: 462014 },
|
|
17
|
+
IL: { effRatePct: 1.88, medianTaxUsd: 5298, medianHomeUsd: 273186 },
|
|
18
|
+
IN: { effRatePct: 0.76, medianTaxUsd: 1614, medianHomeUsd: 244855 },
|
|
19
|
+
KS: { effRatePct: 1.21, medianTaxUsd: 2798, medianHomeUsd: 230884 },
|
|
20
|
+
KY: { effRatePct: 0.74, medianTaxUsd: 1544, medianHomeUsd: 217447 },
|
|
21
|
+
LA: { effRatePct: 0.55, medianTaxUsd: 1180, medianHomeUsd: 201100 },
|
|
22
|
+
MA: { effRatePct: 1, medianTaxUsd: 5992, medianHomeUsd: 635252 },
|
|
23
|
+
MD: { effRatePct: 0.92, medianTaxUsd: 4093, medianHomeUsd: 425692 },
|
|
24
|
+
ME: { effRatePct: 0.98, medianTaxUsd: 3036, medianHomeUsd: 400642 },
|
|
25
|
+
MI: { effRatePct: 1.19, medianTaxUsd: 2904, medianHomeUsd: 248560 },
|
|
26
|
+
MN: { effRatePct: 1, medianTaxUsd: 3357, medianHomeUsd: 337891 },
|
|
27
|
+
MO: { effRatePct: 0.89, medianTaxUsd: 1948, medianHomeUsd: 251663 },
|
|
28
|
+
MS: { effRatePct: 0.58, medianTaxUsd: 1215, medianHomeUsd: 181232 },
|
|
29
|
+
MT: { effRatePct: 0.61, medianTaxUsd: 2693, medianHomeUsd: 459370 },
|
|
30
|
+
NC: { effRatePct: 0.66, medianTaxUsd: 1896, medianHomeUsd: 331761 },
|
|
31
|
+
ND: { effRatePct: 0.92, medianTaxUsd: 2468, medianHomeUsd: 269509 },
|
|
32
|
+
NE: { effRatePct: 1.44, medianTaxUsd: 3549, medianHomeUsd: 264859 },
|
|
33
|
+
NH: { effRatePct: 1.5, medianTaxUsd: 6667, medianHomeUsd: 487482 },
|
|
34
|
+
NJ: { effRatePct: 1.88, medianTaxUsd: 9590, medianHomeUsd: 548338 },
|
|
35
|
+
NM: { effRatePct: 0.63, medianTaxUsd: 1731, medianHomeUsd: 308031 },
|
|
36
|
+
NV: { effRatePct: 0.5, medianTaxUsd: 2027, medianHomeUsd: 448322 },
|
|
37
|
+
NY: { effRatePct: 1.3, medianTaxUsd: 6582, medianHomeUsd: 485932 },
|
|
38
|
+
OH: { effRatePct: 1.36, medianTaxUsd: 2822, medianHomeUsd: 234906 },
|
|
39
|
+
OK: { effRatePct: 0.79, medianTaxUsd: 1599, medianHomeUsd: 208281 },
|
|
40
|
+
OR: { effRatePct: 0.81, medianTaxUsd: 3876, medianHomeUsd: 500850 },
|
|
41
|
+
PA: { effRatePct: 1.26, medianTaxUsd: 3311, medianHomeUsd: 272299 },
|
|
42
|
+
RI: { effRatePct: 1.12, medianTaxUsd: 4900, medianHomeUsd: 475865 },
|
|
43
|
+
SC: { effRatePct: 0.49, medianTaxUsd: 1251, medianHomeUsd: 298029 },
|
|
44
|
+
SD: { effRatePct: 1, medianTaxUsd: 2724, medianHomeUsd: 308842 },
|
|
45
|
+
TN: { effRatePct: 0.52, medianTaxUsd: 1442, medianHomeUsd: 319167 },
|
|
46
|
+
TX: { effRatePct: 1.4, medianTaxUsd: 4232, medianHomeUsd: 303321 },
|
|
47
|
+
UT: { effRatePct: 0.48, medianTaxUsd: 2525, medianHomeUsd: 530787 },
|
|
48
|
+
VA: { effRatePct: 0.78, medianTaxUsd: 2790, medianHomeUsd: 400201 },
|
|
49
|
+
VT: { effRatePct: 1.51, medianTaxUsd: 5039, medianHomeUsd: 388919 },
|
|
50
|
+
WA: { effRatePct: 0.75, medianTaxUsd: 4556, medianHomeUsd: 603837 },
|
|
51
|
+
WI: { effRatePct: 1.32, medianTaxUsd: 3792, medianHomeUsd: 312361 },
|
|
52
|
+
WV: { effRatePct: 0.51, medianTaxUsd: 865, medianHomeUsd: 167589 },
|
|
53
|
+
WY: { effRatePct: 0.53, medianTaxUsd: 1767, medianHomeUsd: 357698 },
|
|
54
|
+
};
|
|
55
|
+
export const STATE_PROPERTY_TAX_SOURCE = {
|
|
56
|
+
label: "Tax Foundation (effective property tax rate by state, 2024) as republished by Rocket Mortgage (Jun 2026) and WorldPopulationReview; median annual property tax = US Census ACS 2023 1-year medians (via WorldPopulationReview); median home value = state median home value (Rocket Mortgage, 2024-2025).",
|
|
57
|
+
url: "https://taxfoundation.org/data/all/state/property-taxes-by-state-county/",
|
|
58
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { STATE_BRACKETS_2026 } from "./us-state-income-brackets-2026.js";
|
|
2
|
+
export const US_STATE_TAX_AS_OF = "2026-06-23";
|
|
3
|
+
// Source unique de classification (depuis l'audit paycheck stagé). Noms = pour le sélecteur.
|
|
4
|
+
export const US_STATE_TAX = [
|
|
5
|
+
{ code: "AL", name: "Alabama", kind: "progressive" },
|
|
6
|
+
{ code: "AK", name: "Alaska", kind: "none" },
|
|
7
|
+
{ code: "AZ", name: "Arizona", kind: "flat", flatRatePct: 2.5 },
|
|
8
|
+
{ code: "AR", name: "Arkansas", kind: "progressive" },
|
|
9
|
+
{ code: "CA", name: "California", kind: "progressive" },
|
|
10
|
+
{ code: "CO", name: "Colorado", kind: "flat", flatRatePct: 4.4 },
|
|
11
|
+
{ code: "CT", name: "Connecticut", kind: "progressive", note: "Base brackets; CT recapture/3% phase-out not modeled." },
|
|
12
|
+
{ code: "DE", name: "Delaware", kind: "progressive" },
|
|
13
|
+
{ code: "DC", name: "District of Columbia", kind: "progressive" },
|
|
14
|
+
{ code: "FL", name: "Florida", kind: "none" },
|
|
15
|
+
{ code: "GA", name: "Georgia", kind: "flat", flatRatePct: 5.19 },
|
|
16
|
+
{ code: "HI", name: "Hawaii", kind: "progressive" },
|
|
17
|
+
{ code: "ID", name: "Idaho", kind: "flat", flatRatePct: 5.3 },
|
|
18
|
+
{ code: "IL", name: "Illinois", kind: "flat", flatRatePct: 4.95 },
|
|
19
|
+
{ code: "IN", name: "Indiana", kind: "flat", flatRatePct: 2.95 },
|
|
20
|
+
{ code: "IA", name: "Iowa", kind: "flat", flatRatePct: 3.8 },
|
|
21
|
+
{ code: "KS", name: "Kansas", kind: "progressive" },
|
|
22
|
+
{ code: "KY", name: "Kentucky", kind: "flat", flatRatePct: 3.5 },
|
|
23
|
+
{ code: "LA", name: "Louisiana", kind: "flat", flatRatePct: 3.0 },
|
|
24
|
+
{ code: "ME", name: "Maine", kind: "progressive" },
|
|
25
|
+
{ code: "MD", name: "Maryland", kind: "progressive", note: "State brackets only; county local income tax not modeled." },
|
|
26
|
+
{ code: "MA", name: "Massachusetts", kind: "progressive", note: "5% flat + 4% millionaire surtax over $1M (modeled as 2 brackets)." },
|
|
27
|
+
{ code: "MI", name: "Michigan", kind: "flat", flatRatePct: 4.25 },
|
|
28
|
+
{ code: "MN", name: "Minnesota", kind: "progressive" },
|
|
29
|
+
{ code: "MS", name: "Mississippi", kind: "flat", flatRatePct: 4.0 },
|
|
30
|
+
{ code: "MO", name: "Missouri", kind: "progressive" },
|
|
31
|
+
{ code: "MT", name: "Montana", kind: "progressive" },
|
|
32
|
+
{ code: "NE", name: "Nebraska", kind: "progressive" },
|
|
33
|
+
{ code: "NV", name: "Nevada", kind: "none" },
|
|
34
|
+
{ code: "NH", name: "New Hampshire", kind: "none", note: "No tax on wages (interest & dividends tax repealed 2025)." },
|
|
35
|
+
{ code: "NJ", name: "New Jersey", kind: "progressive" },
|
|
36
|
+
{ code: "NM", name: "New Mexico", kind: "progressive" },
|
|
37
|
+
{ code: "NY", name: "New York", kind: "progressive", note: "State brackets only; NYC/Yonkers local tax not modeled." },
|
|
38
|
+
{ code: "NC", name: "North Carolina", kind: "flat", flatRatePct: 3.99 },
|
|
39
|
+
{ code: "ND", name: "North Dakota", kind: "progressive" },
|
|
40
|
+
{ code: "OH", name: "Ohio", kind: "flat", flatRatePct: 2.75, flatThreshold: 26050, note: "Flat 2.75% on nonbusiness income over $26,050 (below is untaxed)." },
|
|
41
|
+
{ code: "OK", name: "Oklahoma", kind: "progressive" },
|
|
42
|
+
{ code: "OR", name: "Oregon", kind: "progressive" },
|
|
43
|
+
{ code: "PA", name: "Pennsylvania", kind: "flat", flatRatePct: 3.07 },
|
|
44
|
+
{ code: "RI", name: "Rhode Island", kind: "progressive" },
|
|
45
|
+
{ code: "SC", name: "South Carolina", kind: "progressive", note: "Top rate reverts to 6.2% July 1, 2026." },
|
|
46
|
+
{ code: "SD", name: "South Dakota", kind: "none" },
|
|
47
|
+
{ code: "TN", name: "Tennessee", kind: "none" },
|
|
48
|
+
{ code: "TX", name: "Texas", kind: "none" },
|
|
49
|
+
{ code: "UT", name: "Utah", kind: "flat", flatRatePct: 4.5 },
|
|
50
|
+
{ code: "VT", name: "Vermont", kind: "progressive" },
|
|
51
|
+
{ code: "VA", name: "Virginia", kind: "progressive" },
|
|
52
|
+
{ code: "WA", name: "Washington", kind: "none", note: "Taxes capital gains only, not wages." },
|
|
53
|
+
{ code: "WV", name: "West Virginia", kind: "progressive" },
|
|
54
|
+
{ code: "WI", name: "Wisconsin", kind: "progressive" },
|
|
55
|
+
{ code: "WY", name: "Wyoming", kind: "none" },
|
|
56
|
+
];
|
|
57
|
+
// Merge des barèmes progressifs collectés (Étape 0) sur les lignes correspondantes.
|
|
58
|
+
for (const row of US_STATE_TAX) {
|
|
59
|
+
if (row.kind === "progressive") {
|
|
60
|
+
const b = STATE_BRACKETS_2026[row.code];
|
|
61
|
+
if (b)
|
|
62
|
+
row.brackets = b;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export const STATE_TAX_BY_CODE = Object.fromEntries(US_STATE_TAX.map((s) => [s.code, s]));
|
|
66
|
+
// Compteurs (garde-fou : doit donner 9 / 15 / 27 = 51).
|
|
67
|
+
export const STATE_TAX_COUNTS = {
|
|
68
|
+
none: US_STATE_TAX.filter((s) => s.kind === "none").length,
|
|
69
|
+
flat: US_STATE_TAX.filter((s) => s.kind === "flat").length,
|
|
70
|
+
progressive: US_STATE_TAX.filter((s) => s.kind === "progressive").length,
|
|
71
|
+
};
|
|
72
|
+
// Impôt d'état estimé. Base = "state AGI" (revenu après contributions pré-tax, AVANT déduction),
|
|
73
|
+
// la déduction standard d'état étant retranchée ici pour les barèmes progressifs quand elle est publiée.
|
|
74
|
+
// Honnête : estimation (crédits/exemptions/local non modélisés ; le fédéral, lui, est exact).
|
|
75
|
+
export function estimateStateTax(row, stateAgi, status) {
|
|
76
|
+
if (row.kind === "none")
|
|
77
|
+
return 0;
|
|
78
|
+
const base = Math.max(stateAgi, 0);
|
|
79
|
+
if (row.kind === "flat") {
|
|
80
|
+
const taxable = row.flatThreshold ? Math.max(base - row.flatThreshold, 0) : base;
|
|
81
|
+
return taxable * ((row.flatRatePct ?? 0) / 100);
|
|
82
|
+
}
|
|
83
|
+
// progressive
|
|
84
|
+
if (row.brackets) {
|
|
85
|
+
const set = status === "mfj" ? row.brackets.mfj : row.brackets.single;
|
|
86
|
+
const stdState = row.brackets.stdDeduction
|
|
87
|
+
? (status === "mfj" ? row.brackets.stdDeduction.mfj : row.brackets.stdDeduction.single)
|
|
88
|
+
: 0;
|
|
89
|
+
const stateTaxable = Math.max(base - stdState, 0);
|
|
90
|
+
let tax = 0;
|
|
91
|
+
for (const br of set) {
|
|
92
|
+
if (stateTaxable <= br.lower)
|
|
93
|
+
break;
|
|
94
|
+
const top = Math.min(stateTaxable, br.upper ?? Infinity);
|
|
95
|
+
if (top > br.lower)
|
|
96
|
+
tax += (top - br.lower) * br.rate;
|
|
97
|
+
}
|
|
98
|
+
return tax;
|
|
99
|
+
}
|
|
100
|
+
return 0; // barème non encore disponible → estimation 0 (signalé dans l'UI)
|
|
101
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Cœur fiscal PARTAGÉ — logique pure, AUCUNE donnée. Réutilisé par income-tax + paycheck.
|
|
2
|
+
// Point unique où se joue "taux marginal vs taux effectif" : une seule implémentation testable.
|
|
3
|
+
// Application progressive correcte : chaque tranche ne taxe que la part du revenu qui y tombe.
|
|
4
|
+
// Suppose des tranches triées par `lower` croissant et contiguës (cas des barèmes IRS/états).
|
|
5
|
+
export function applyBrackets(taxableIncome, brackets) {
|
|
6
|
+
const base = Math.max(taxableIncome, 0);
|
|
7
|
+
let tax = 0;
|
|
8
|
+
let marginalRate = 0;
|
|
9
|
+
const slices = [];
|
|
10
|
+
for (const b of brackets) {
|
|
11
|
+
if (base <= b.lower)
|
|
12
|
+
break; // le revenu n'atteint pas cette tranche
|
|
13
|
+
const top = Math.min(base, b.upper ?? Infinity); // borne haute effective
|
|
14
|
+
const taxableInThis = top - b.lower;
|
|
15
|
+
if (taxableInThis <= 0)
|
|
16
|
+
continue;
|
|
17
|
+
const taxInThis = taxableInThis * b.rate;
|
|
18
|
+
tax += taxInThis;
|
|
19
|
+
marginalRate = b.rate; // dernière tranche touchée
|
|
20
|
+
slices.push({ rate: b.rate, lower: b.lower, upper: top, taxableInThis, taxInThis });
|
|
21
|
+
}
|
|
22
|
+
return { tax, marginalRate, slices };
|
|
23
|
+
}
|
|
24
|
+
// Taux effectif = impôt total / base (toujours < marginal en système progressif). 0 si base nulle.
|
|
25
|
+
export function effectiveRate(tax, base) {
|
|
26
|
+
return base > 0 ? tax / base : 0;
|
|
27
|
+
}
|
|
28
|
+
// Fréquences de paie → nombre de périodes par an. Sert à annualiser AVANT d'appliquer les barèmes.
|
|
29
|
+
export const PERIODS_PER_YEAR = { weekly: 52, biweekly: 26, semimonthly: 24, monthly: 12 };
|
|
30
|
+
export function annualize(perPeriodValue, periodsPerYear) {
|
|
31
|
+
return perPeriodValue * periodsPerYear;
|
|
32
|
+
}
|
|
33
|
+
export function perPeriod(annual, periodsPerYear) {
|
|
34
|
+
return periodsPerYear > 0 ? annual / periodsPerYear : 0;
|
|
35
|
+
}
|
|
36
|
+
// Paiement amortissable mensuel (réutilisé par auto-loan ; gère taux = 0 → capital / n).
|
|
37
|
+
export function pmt(principal, monthlyRate, months) {
|
|
38
|
+
if (months <= 0)
|
|
39
|
+
return 0;
|
|
40
|
+
if (monthlyRate === 0)
|
|
41
|
+
return principal / months;
|
|
42
|
+
const f = Math.pow(1 + monthlyRate, months);
|
|
43
|
+
return (principal * monthlyRate * f) / (f - 1);
|
|
44
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "calcuris-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server exposing the Calcuris tax engines — US income tax & paycheck, US property tax, Canadian provincial income tax, Australian stamp duty & income tax, UK dividend tax. Real 2026 rates, no API key.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"calcuris-mcp": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"engines": {
|
|
11
|
+
"node": ">=18"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://calcuris.com",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/tresor4k/calcuris-mcp.git"
|
|
17
|
+
},
|
|
18
|
+
"bugs": {
|
|
19
|
+
"url": "https://github.com/tresor4k/calcuris-mcp/issues"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"mcp",
|
|
23
|
+
"model-context-protocol",
|
|
24
|
+
"tax-calculator",
|
|
25
|
+
"income-tax",
|
|
26
|
+
"property-tax",
|
|
27
|
+
"stamp-duty",
|
|
28
|
+
"take-home-pay",
|
|
29
|
+
"calcuris"
|
|
30
|
+
],
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"author": "tresor4k",
|
|
33
|
+
"files": [
|
|
34
|
+
"dist",
|
|
35
|
+
"README.md",
|
|
36
|
+
"CHANGELOG.md",
|
|
37
|
+
"LICENSE"
|
|
38
|
+
],
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
41
|
+
"zod": "^3.23.0"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@types/node": "^26.1.0",
|
|
45
|
+
"typescript": "^5.5.0"
|
|
46
|
+
},
|
|
47
|
+
"scripts": {
|
|
48
|
+
"build": "tsc",
|
|
49
|
+
"test": "node test/smoke.mjs",
|
|
50
|
+
"prepublishOnly": "npm run build && npm test"
|
|
51
|
+
}
|
|
52
|
+
}
|