@invaro/opentax 0.10.0 → 0.11.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/bundle/http.js +865 -56
- package/bundle/index.js +865 -56
- package/bundle/main.js +889 -64
- package/package.json +3 -3
package/bundle/main.js
CHANGED
|
@@ -28320,11 +28320,17 @@ var init_facts = __esm({
|
|
|
28320
28320
|
rationale: "A rental is passive unless the taxpayer shows otherwise (\xA7 469(c)(2)); passive rental income is net investment income (\xA7 1411(c)(1)(A)(i), (c)(2)(A))"
|
|
28321
28321
|
}
|
|
28322
28322
|
},
|
|
28323
|
+
{
|
|
28324
|
+
id: "businessMilesDrivenFromJuly",
|
|
28325
|
+
type: "int",
|
|
28326
|
+
min: "0",
|
|
28327
|
+
description: "TY2026 only: the part of businessMilesDriven driven on or after July 1, 2026, which takes the 76\xA2/mile rate of Announcement 2026-11 (the earlier miles take 72.5\xA2, Notice 2026-10). Asked only for 2026 when businessMilesDriven is entered."
|
|
28328
|
+
},
|
|
28323
28329
|
{
|
|
28324
28330
|
id: "businessMilesDriven",
|
|
28325
28331
|
type: "int",
|
|
28326
28332
|
min: "0",
|
|
28327
|
-
description: "Business miles driven for the optional standard mileage rate (70\xA2/mile for 2025 per Notice 2025-5; 72.5\xA2/mile
|
|
28333
|
+
description: "Business miles driven during the year for the optional standard mileage rate (70\xA2/mile for 2025 per Notice 2025-5; for 2026, 72.5\xA2/mile through June 30 per Notice 2026-10 and 76\xA2/mile from July 1 per Announcement 2026-11 \u2014 give the July\u2013December miles in businessMilesDrivenFromJuly) \u2014 the standalone target us.federal.vehicle_standard_mileage computes the deduction; subtract it from your Schedule C profit yourself.",
|
|
28328
28334
|
default: {
|
|
28329
28335
|
value: "0",
|
|
28330
28336
|
rationale: "Assumed no business mileage absent contrary input"
|
|
@@ -28409,11 +28415,17 @@ var init_facts = __esm({
|
|
|
28409
28415
|
rationale: "Assumed no deductible investment interest absent contrary input"
|
|
28410
28416
|
}
|
|
28411
28417
|
},
|
|
28418
|
+
{
|
|
28419
|
+
id: "gamblingWinnings",
|
|
28420
|
+
type: "money",
|
|
28421
|
+
min: "0",
|
|
28422
|
+
description: "Gains from wagering transactions for the year (Form W-2G and all other gambling winnings) \u2014 the \xA7 165(d)(1)(B) limit on the TY2026+ gambling loss deduction. Used only for that limit: the winnings themselves must also be included in income (for example in otherOrdinaryIncome). Asked only for TY2026 and later when gamblingLossesItemized is entered. In dollars."
|
|
28423
|
+
},
|
|
28412
28424
|
{
|
|
28413
28425
|
id: "gamblingLossesItemized",
|
|
28414
28426
|
type: "money",
|
|
28415
28427
|
min: "0",
|
|
28416
|
-
description: "Gambling losses
|
|
28428
|
+
description: "Gambling losses for the \xA7 165(d) itemized deduction (Schedule A line 16). TY2025: enter min(losses paid, winnings reported) \u2014 the full limited amount deducts. TY2026 and later: enter the TOTAL wagering losses for the year (including any deduction incurred in carrying on a wagering transaction, \xA7 165(d)(2)); the engine allows 90 percent of them, limited to gamblingWinnings (\xA7 165(d)(1) as amended by OBBBA \xA7 70114). Itemized-only; never reduces winnings directly. In dollars.",
|
|
28417
28429
|
default: {
|
|
28418
28430
|
value: "0",
|
|
28419
28431
|
rationale: "Assumed no deductible gambling losses absent contrary input"
|
|
@@ -28577,7 +28589,7 @@ var init_facts = __esm({
|
|
|
28577
28589
|
id: "educatorExpenses",
|
|
28578
28590
|
type: "money",
|
|
28579
28591
|
min: "0",
|
|
28580
|
-
description: "TAXPAYER's eligible educator classroom expenses (\xA7 62(a)(2)(D)) \u2014 capped at $300 for 2025 (indexed). K-12 teachers/counselors/aides with 900+ hours (attested). A spouse who is ALSO an eligible educator gets a separate
|
|
28592
|
+
description: "TAXPAYER's eligible educator classroom expenses (\xA7 62(a)(2)(D)) \u2014 capped at $300 for 2025 and $350 for 2026 and 2027 (indexed). K-12 teachers/counselors/aides with 900+ hours (attested). A spouse who is ALSO an eligible educator gets a separate cap: put the spouse's expenses in spouseEducatorExpenses, never summed here. In dollars.",
|
|
28581
28593
|
default: {
|
|
28582
28594
|
value: "0",
|
|
28583
28595
|
rationale: "Assumed no educator expenses absent contrary input"
|
|
@@ -28587,7 +28599,7 @@ var init_facts = __esm({
|
|
|
28587
28599
|
id: "spouseEducatorExpenses",
|
|
28588
28600
|
type: "money",
|
|
28589
28601
|
min: "0",
|
|
28590
|
-
description: "SPOUSE's eligible educator classroom expenses (\xA7 62(a)(2)(D)) \u2014 separately capped at $300 for 2025 (per-educator cap; an MFJ couple of two educators deducts up to $600 total). In dollars.",
|
|
28602
|
+
description: "SPOUSE's eligible educator classroom expenses (\xA7 62(a)(2)(D)) \u2014 separately capped at $300 for 2025 and $350 for 2026 and 2027 (per-educator cap; an MFJ couple of two educators deducts up to $600 / $700 total). In dollars.",
|
|
28591
28603
|
default: {
|
|
28592
28604
|
value: "0",
|
|
28593
28605
|
rationale: "Assumed the spouse is not an eligible educator absent contrary input"
|
|
@@ -33225,7 +33237,7 @@ function hsaRule(version2, effectiveFrom, effectiveTo, selfCents, familyCents, s
|
|
|
33225
33237
|
}
|
|
33226
33238
|
};
|
|
33227
33239
|
}
|
|
33228
|
-
function studentLoanRule(version2, effectiveFrom, effectiveTo, jointThresholdCents, jointRangeCents, source, yearLabel) {
|
|
33240
|
+
function studentLoanRule(version2, effectiveFrom, effectiveTo, jointThresholdCents, jointRangeCents, source, yearLabel, thresholdCents = "8500000") {
|
|
33229
33241
|
const magi2 = ruleRef("us.federal.agi_before_student_loan");
|
|
33230
33242
|
const threshold2 = {
|
|
33231
33243
|
kind: "if",
|
|
@@ -33260,8 +33272,7 @@ function studentLoanRule(version2, effectiveFrom, effectiveTo, jointThresholdCen
|
|
|
33260
33272
|
parameters: {
|
|
33261
33273
|
cap: { value: "250000", type: "money" },
|
|
33262
33274
|
// $2,500, not indexed
|
|
33263
|
-
threshold: { value:
|
|
33264
|
-
// $85,000
|
|
33275
|
+
threshold: { value: thresholdCents, type: "money" },
|
|
33265
33276
|
range: { value: "1500000", type: "money" },
|
|
33266
33277
|
// $15,000
|
|
33267
33278
|
thresholdJoint: { value: jointThresholdCents, type: "money" },
|
|
@@ -33364,8 +33375,33 @@ var init_adjustments = __esm({
|
|
|
33364
33375
|
adjustmentRules = [
|
|
33365
33376
|
hsaRule(1, "2025-01-01", "2026-01-01", "430000", "855000", "Rev. Proc. 2024-25", "2025"),
|
|
33366
33377
|
hsaRule(2, "2026-01-01", "2027-01-01", "440000", "875000", "Rev. Proc. 2025-19", "2026"),
|
|
33378
|
+
hsaRule(3, "2027-01-01", "2028-01-01", "450000", "900000", "Rev. Proc. 2026-24 \xA7 3.01(1)", "2027"),
|
|
33367
33379
|
sepRule(1, "2025-01-01", "2026-01-01", "7000000", "Notice 2024-80", "2025", "$70,000"),
|
|
33368
33380
|
sepRule(2, "2026-01-01", "2027-01-01", "7200000", "Notice 2025-67", "2026", "$72,000"),
|
|
33381
|
+
{
|
|
33382
|
+
id: "us.federal.sep_deduction",
|
|
33383
|
+
version: 3,
|
|
33384
|
+
jurisdiction: "us.federal",
|
|
33385
|
+
title: "SEP / solo-401(k) employer contribution deduction (TY2027: the \xA7 415(c) limit is not yet published)",
|
|
33386
|
+
citation: {
|
|
33387
|
+
source: "26 U.S.C. \xA7\xA7 404(a)(8), (h), 415(c), (d)",
|
|
33388
|
+
section: "\xA7 404(h); \xA7 415(c)(1)(A), (d)",
|
|
33389
|
+
url: "https://www.law.cornell.edu/uscode/text/26/415",
|
|
33390
|
+
excerpt: "The deduction is limited by the \xA7 415(c)(1)(A) annual addition limit, which \xA7 415(d) adjusts each year; the IRS publishes the 2027 amount in its annual retirement-plan cost-of-living notice, which is not yet out. A 2027 return with a SEP or solo-401(k) employer contribution refuses rather than guess; with none, the deduction is $0."
|
|
33391
|
+
},
|
|
33392
|
+
effectiveFrom: "2027-01-01",
|
|
33393
|
+
effectiveTo: "2028-01-01",
|
|
33394
|
+
output: { type: "money" },
|
|
33395
|
+
formula: {
|
|
33396
|
+
kind: "if",
|
|
33397
|
+
cond: { kind: "cmp", op: "gt", left: fact("sepContribution"), right: zero },
|
|
33398
|
+
then: {
|
|
33399
|
+
kind: "unsupported",
|
|
33400
|
+
reason: "the 2027 \xA7 415(c) annual addition limit is not yet published by the IRS \u2014 a 2027 SEP or solo-401(k) employer contribution is not modeled until it is"
|
|
33401
|
+
},
|
|
33402
|
+
else: zero
|
|
33403
|
+
}
|
|
33404
|
+
},
|
|
33369
33405
|
{
|
|
33370
33406
|
id: "us.federal.sehi_deduction",
|
|
33371
33407
|
version: 1,
|
|
@@ -33430,6 +33466,17 @@ var init_adjustments = __esm({
|
|
|
33430
33466
|
// $175,000 threshold, $30,000 range ($175k–$205k)
|
|
33431
33467
|
"Rev. Proc. 2025-32 \xA7 4.29",
|
|
33432
33468
|
"2026"
|
|
33469
|
+
),
|
|
33470
|
+
studentLoanRule(
|
|
33471
|
+
3,
|
|
33472
|
+
"2027-01-01",
|
|
33473
|
+
"2028-01-01",
|
|
33474
|
+
"18000000",
|
|
33475
|
+
"3000000",
|
|
33476
|
+
// $180,000 threshold, $30,000 range ($180k–$210k)
|
|
33477
|
+
"Rev. Proc. 2026-35 \xA7 3.31",
|
|
33478
|
+
"2027",
|
|
33479
|
+
"9000000"
|
|
33433
33480
|
)
|
|
33434
33481
|
];
|
|
33435
33482
|
}
|
|
@@ -33643,7 +33690,7 @@ function taxTableRule(version2, effectiveFrom, effectiveTo, tables, yearLabel, m
|
|
|
33643
33690
|
};
|
|
33644
33691
|
}
|
|
33645
33692
|
function ordinaryRateTaxExpr(base, statusFactId, year) {
|
|
33646
|
-
const tables = year
|
|
33693
|
+
const tables = TABLES_BY_YEAR[year];
|
|
33647
33694
|
const perStatus = (sy) => ({
|
|
33648
33695
|
kind: "if",
|
|
33649
33696
|
cond: { kind: "cmp", op: "lt", left: base, right: money2("10000000") },
|
|
@@ -33664,7 +33711,7 @@ function ordinaryRateTaxExpr(base, statusFactId, year) {
|
|
|
33664
33711
|
}))
|
|
33665
33712
|
};
|
|
33666
33713
|
}
|
|
33667
|
-
var fact2, money2, ruleRef2, RATES, d, B25, TY2025, B26, TY2026, taxable, ordinary, incomeTaxRules;
|
|
33714
|
+
var fact2, money2, ruleRef2, RATES, d, B25, TY2025, B26, TY2026, B27, TY2027, TABLES_BY_YEAR, taxable, ordinary, incomeTaxRules;
|
|
33668
33715
|
var init_income_tax = __esm({
|
|
33669
33716
|
"../corpus-us-federal/dist/rules/income-tax.js"() {
|
|
33670
33717
|
"use strict";
|
|
@@ -33699,6 +33746,20 @@ var init_income_tax = __esm({
|
|
|
33699
33746
|
hoh: { brackets: B26.hoh, zeroMax: 66200, fifteenMax: 579600 },
|
|
33700
33747
|
mfs: { brackets: B26.mfs, zeroMax: 49450, fifteenMax: 306850 }
|
|
33701
33748
|
};
|
|
33749
|
+
B27 = {
|
|
33750
|
+
single: table([0, 12800, 52025, 109125, 208325, 264550, 661375]),
|
|
33751
|
+
mfj: table([0, 25600, 104050, 218250, 416650, 529100, 793650]),
|
|
33752
|
+
hoh: table([0, 18250, 69650, 109100, 208300, 264550, 661350]),
|
|
33753
|
+
mfs: table([0, 12800, 52025, 109125, 208325, 264550, 396825])
|
|
33754
|
+
};
|
|
33755
|
+
TY2027 = {
|
|
33756
|
+
single: { brackets: B27.single, zeroMax: 51050, fifteenMax: 563200 },
|
|
33757
|
+
mfj: { brackets: B27.mfj, zeroMax: 102100, fifteenMax: 633600 },
|
|
33758
|
+
qss: { brackets: B27.mfj, zeroMax: 102100, fifteenMax: 633600 },
|
|
33759
|
+
hoh: { brackets: B27.hoh, zeroMax: 68350, fifteenMax: 598400 },
|
|
33760
|
+
mfs: { brackets: B27.mfs, zeroMax: 51050, fifteenMax: 316800 }
|
|
33761
|
+
};
|
|
33762
|
+
TABLES_BY_YEAR = { "2025": TY2025, "2026": TY2026, "2027": TY2027 };
|
|
33702
33763
|
taxable = ruleRef2("us.federal.taxable_income");
|
|
33703
33764
|
ordinary = ruleRef2("us.federal.ordinary_taxable_income");
|
|
33704
33765
|
incomeTaxRules = [
|
|
@@ -33741,8 +33802,15 @@ var init_income_tax = __esm({
|
|
|
33741
33802
|
url: "https://www.irs.gov/pub/irs-drop/rp-25-32.pdf",
|
|
33742
33803
|
excerpt: "2026 ordinary rate tables (10\u201337%); maximum zero rate amounts $49,450/$98,900/$66,200/$49,450 and maximum 15% rate amounts $545,500/$613,700/$579,600/$306,850 by filing status. Qualified Dividends and Capital Gain Tax Worksheet line 22: tax on the ordinary part from the Tax Table if it is less than $100,000, otherwise the Tax Computation Worksheet."
|
|
33743
33804
|
}),
|
|
33805
|
+
incomeTaxRule(5, "2027-01-01", "2028-01-01", TY2027, "2027", {
|
|
33806
|
+
source: "26 U.S.C. \xA7 1(h), (j); Rev. Proc. 2026-35",
|
|
33807
|
+
section: "\xA7 1(j)(2), (j)(5); Rev. Proc. 2026-35 \xA7\xA7 3.01, 3.03",
|
|
33808
|
+
url: "https://www.irs.gov/pub/irs-drop/rp-26-35.pdf",
|
|
33809
|
+
excerpt: "2027 ordinary rate tables (10\u201337%): single 10% to $12,800, 12% to $52,025, 22% to $109,125, 24% to $208,325, 32% to $264,550, 35% to $661,375, 37% above ($396,825 MFS; joint $25,600 / $104,050 / $218,250 / $416,650 / $529,100 / $793,650; head of household $18,250 / $69,650 / $109,100 / $208,300 / $264,550 / $661,350). Maximum zero rate amounts $51,050/$102,100/$68,350/$51,050 and maximum 15% rate amounts $563,200/$633,600/$598,400/$316,800 (single/joint/head of household/MFS). Qualified Dividends and Capital Gain Tax Worksheet line 22: tax on the ordinary part from the Tax Table if it is less than $100,000, otherwise the Tax Computation Worksheet."
|
|
33810
|
+
}),
|
|
33744
33811
|
taxTableRule(1, "2025-01-01", "2026-01-01", TY2025, "2025", "Sampled entries verified against the printed 2025 Publication 1040 table."),
|
|
33745
|
-
taxTableRule(2, "2026-01-01", "2027-01-01", TY2026, "2026", "The official 2026 table publishes with the 2026 filing season; entries here are computed by the same published method over the 2026 brackets.")
|
|
33812
|
+
taxTableRule(2, "2026-01-01", "2027-01-01", TY2026, "2026", "The official 2026 table publishes with the 2026 filing season; entries here are computed by the same published method over the 2026 brackets."),
|
|
33813
|
+
taxTableRule(3, "2027-01-01", "2028-01-01", TY2027, "2027", "The official 2027 table publishes with the 2027 filing season; entries here are computed by the same published method over the 2027 brackets (Rev. Proc. 2026-35 \xA7 3.01).")
|
|
33746
33814
|
];
|
|
33747
33815
|
}
|
|
33748
33816
|
});
|
|
@@ -33846,7 +33914,7 @@ function tmtRule(version2, y) {
|
|
|
33846
33914
|
formula: min(line38, tax2628(line12))
|
|
33847
33915
|
};
|
|
33848
33916
|
}
|
|
33849
|
-
var J, fact3, money3, ruleRef3, param2, d2, add, sub, max02, min, pct, isMfs, amti, line12, line13, qdcgLine5, SOURCE_2025, SOURCE_2026, F6251_URL, Y2025, Y2026, byStatus, tax2628, itemizing, line1b, line4BeforeMfs, amtRules;
|
|
33917
|
+
var J, fact3, money3, ruleRef3, param2, d2, add, sub, max02, min, pct, isMfs, amti, line12, line13, qdcgLine5, SOURCE_2025, SOURCE_2026, SOURCE_2027, F6251_URL, Y2025, Y2026, Y2027, byStatus, tax2628, itemizing, line1b, line4BeforeMfs, amtRules;
|
|
33850
33918
|
var init_amt = __esm({
|
|
33851
33919
|
"../corpus-us-federal/dist/rules/amt.js"() {
|
|
33852
33920
|
"use strict";
|
|
@@ -33879,6 +33947,7 @@ var init_amt = __esm({
|
|
|
33879
33947
|
qdcgLine5 = ruleRef3("us.federal.ordinary_taxable_income");
|
|
33880
33948
|
SOURCE_2025 = "Form 6251 (2025) and instructions; Rev. Proc. 2024-40 \xA7 2.11";
|
|
33881
33949
|
SOURCE_2026 = "Form 6251 (2026, draft created 5/26/26); Rev. Proc. 2025-32 \xA7\xA7 3.10\u20133.11; Pub. L. 119-21 (OBBBA) \xA7 70107";
|
|
33950
|
+
SOURCE_2027 = "Rev. Proc. 2026-35 \xA7\xA7 3.03, 3.11; Form 6251 line structure as on the 2026 draft (the 2027 form is not yet published); Pub. L. 119-21 (OBBBA) \xA7 70107";
|
|
33882
33951
|
F6251_URL = "https://www.irs.gov/pub/irs-pdf/f6251.pdf";
|
|
33883
33952
|
Y2025 = {
|
|
33884
33953
|
year: "2025",
|
|
@@ -33920,6 +33989,26 @@ var init_amt = __esm({
|
|
|
33920
33989
|
cg: TY2026,
|
|
33921
33990
|
amountsNote: "For 2026: exemptions $90,100 ($140,200 joint/QSS; $70,100 MFS) phasing out at 50% of AMTI over $500,000 ($1,000,000 joint/QSS; $500,000 MFS); 26% up to $244,500 ($122,250 MFS), above that 28% less $4,890 ($2,445 MFS)."
|
|
33922
33991
|
};
|
|
33992
|
+
Y2027 = {
|
|
33993
|
+
year: "2027",
|
|
33994
|
+
from: "2027-01-01",
|
|
33995
|
+
to: "2028-01-01",
|
|
33996
|
+
source: SOURCE_2027,
|
|
33997
|
+
exemptSingle: "9300000",
|
|
33998
|
+
exemptJoint: "14470000",
|
|
33999
|
+
exemptMfs: "7235000",
|
|
34000
|
+
threshSingle: "51595000",
|
|
34001
|
+
threshJoint: "103190000",
|
|
34002
|
+
threshMfs: "51595000",
|
|
34003
|
+
phaseRate: "50",
|
|
34004
|
+
mfsZeroAt: "66065000",
|
|
34005
|
+
break28: "25250000",
|
|
34006
|
+
break28Mfs: "12625000",
|
|
34007
|
+
sub28: "505000",
|
|
34008
|
+
sub28Mfs: "252500",
|
|
34009
|
+
cg: TY2027,
|
|
34010
|
+
amountsNote: "For 2027: exemptions $93,000 ($144,700 joint/QSS; $72,350 MFS) phasing out at 50% of AMTI over $515,950 ($1,031,900 joint/QSS; $515,950 MFS), completely phased out at $701,950 / $1,321,300 / $660,650; 26% up to $252,500 ($126,250 MFS), above that 28% less $5,050 ($2,525 MFS)."
|
|
34011
|
+
};
|
|
33923
34012
|
byStatus = (single, joint, mfs) => ({
|
|
33924
34013
|
kind: "match",
|
|
33925
34014
|
on: fact3("filingStatus"),
|
|
@@ -33979,8 +34068,10 @@ var init_amt = __esm({
|
|
|
33979
34068
|
amtRules = [
|
|
33980
34069
|
amtiRule(1, Y2025),
|
|
33981
34070
|
amtiRule(2, Y2026),
|
|
34071
|
+
amtiRule(3, Y2027),
|
|
33982
34072
|
exemptionRule(1, Y2025),
|
|
33983
34073
|
exemptionRule(2, Y2026),
|
|
34074
|
+
exemptionRule(3, Y2027),
|
|
33984
34075
|
{
|
|
33985
34076
|
id: "us.federal.amt.taxable_excess",
|
|
33986
34077
|
version: 1,
|
|
@@ -34013,6 +34104,7 @@ var init_amt = __esm({
|
|
|
34013
34104
|
},
|
|
34014
34105
|
tmtRule(1, Y2025),
|
|
34015
34106
|
tmtRule(2, Y2026),
|
|
34107
|
+
tmtRule(3, Y2027),
|
|
34016
34108
|
{
|
|
34017
34109
|
id: "us.federal.amt",
|
|
34018
34110
|
version: 3,
|
|
@@ -34049,7 +34141,7 @@ function cumulative(yearFactId, periodFactId) {
|
|
|
34049
34141
|
else: zero2
|
|
34050
34142
|
};
|
|
34051
34143
|
}
|
|
34052
|
-
function quarterRule(q, year, from, to, proratedLimitCents, proratedLabel,
|
|
34144
|
+
function quarterRule(q, year, from, to, proratedLimitCents, proratedLabel, qbiMinimum) {
|
|
34053
34145
|
const cumWages = cumulative("wages", q.wagesFact);
|
|
34054
34146
|
const cumSE = cumulative("selfEmploymentNetProfit", q.seFact);
|
|
34055
34147
|
const netEarn = {
|
|
@@ -34117,11 +34209,11 @@ function quarterRule(q, year, from, to, proratedLimitCents, proratedLabel, withQ
|
|
|
34117
34209
|
{ kind: "mulRate", base: tiBeforeQbi, rate: { num: "20", den: "100" }, round: "half-up" }
|
|
34118
34210
|
]
|
|
34119
34211
|
};
|
|
34120
|
-
const qbi =
|
|
34212
|
+
const qbi = qbiMinimum ? {
|
|
34121
34213
|
kind: "if",
|
|
34122
|
-
cond: { kind: "cmp", op: "ge", left: qbiBase, right: money4(
|
|
34123
|
-
then: { kind: "max", args: [qbiCore, money4(
|
|
34124
|
-
//
|
|
34214
|
+
cond: { kind: "cmp", op: "ge", left: qbiBase, right: money4(qbiMinimum.testCents) },
|
|
34215
|
+
then: { kind: "max", args: [qbiCore, money4(qbiMinimum.deductionCents)] },
|
|
34216
|
+
// § 199A(i) minimum
|
|
34125
34217
|
else: qbiCore
|
|
34126
34218
|
} : qbiCore;
|
|
34127
34219
|
const ti = { kind: "max0", arg: { kind: "sub", left: tiBeforeQbi, right: qbi } };
|
|
@@ -34155,12 +34247,12 @@ function quarterRule(q, year, from, to, proratedLimitCents, proratedLabel, withQ
|
|
|
34155
34247
|
};
|
|
34156
34248
|
return {
|
|
34157
34249
|
id: `us.federal.estimated.annualized_installment_q${q.n}`,
|
|
34158
|
-
version:
|
|
34250
|
+
version: { "2025": 3, "2026": 4, "2027": 5 }[year],
|
|
34159
34251
|
// v1/v2 predated the per-bucket capital-loss facts in the scope guard
|
|
34160
34252
|
jurisdiction: J2,
|
|
34161
34253
|
title: `Annualized-income required installment #${q.n} (\xA7 6654(d)(2), TY${year})`,
|
|
34162
34254
|
citation: {
|
|
34163
|
-
source: `26 U.S.C. \xA7 6654(d)(2); ${year} Form 2210 Schedule AI`,
|
|
34255
|
+
source: year === "2027" ? "26 U.S.C. \xA7 6654(d)(2); Form 2210 Schedule AI as printed for 2025 (the 2027 form is not yet published); Rev. Proc. 2026-35; 91 FR 67380" : `26 U.S.C. \xA7 6654(d)(2); ${year} Form 2210 Schedule AI`,
|
|
34164
34256
|
section: "\xA7 6654(d)(2); Schedule AI",
|
|
34165
34257
|
url: "https://www.irs.gov/forms-pubs/about-form-2210",
|
|
34166
34258
|
excerpt: `Installment #${q.n}: annualize the period's income by ${q.num === q.den ? "1" : Number(q.num) / Number(q.den)} (Schedule AI line 2), standard deduction in full (line 7), annualized SE tax per Part II (prorated social security limit ${proratedLabel}; printed factor-embedded rates), take ${Number(q.pct.num) / (Number(q.pct.den) / 100)}% of the resulting tax (line 20), subtract earlier columns' installments, and cap at 25% of the required annual payment plus amounts saved in earlier columns (lines 22\u201327). [Scope: the wage + self-employment core; anything else refuses. Per-column credits (line 18) not modeled \u2014 can only overstate an installment, conservative. Exact cents; the paper form's whole-dollar rounding may differ by small amounts. Cumulative period facts are demanded only for nonzero year amounts.]`
|
|
@@ -34179,7 +34271,7 @@ function quarterRule(q, year, from, to, proratedLimitCents, proratedLabel, withQ
|
|
|
34179
34271
|
}
|
|
34180
34272
|
};
|
|
34181
34273
|
}
|
|
34182
|
-
var J2, fact4, money4, ruleRef4, zero2, gt0, OUT_OF_SCOPE, QUARTERS, P2025, L2025, P2026, L2026, annualizedInstallmentRules;
|
|
34274
|
+
var J2, fact4, money4, ruleRef4, zero2, gt0, OUT_OF_SCOPE, QUARTERS, P2025, L2025, P2026, L2026, P2027, L2027, annualizedInstallmentRules;
|
|
34183
34275
|
var init_annualized_installments = __esm({
|
|
34184
34276
|
"../corpus-us-federal/dist/rules/annualized-installments.js"() {
|
|
34185
34277
|
"use strict";
|
|
@@ -34236,9 +34328,23 @@ var init_annualized_installments = __esm({
|
|
|
34236
34328
|
L2025 = ["$44,025", "$73,375", "$117,400", "$176,100"];
|
|
34237
34329
|
P2026 = ["4612500", "7687500", "12300000", "18450000"];
|
|
34238
34330
|
L2026 = ["$46,125 (from the $184,500 base)", "$76,875", "$123,000", "$184,500"];
|
|
34331
|
+
P2027 = ["4807500", "8012500", "12820000", "19230000"];
|
|
34332
|
+
L2027 = ["$48,075 (from the $192,300 base, 91 FR 67380)", "$80,125", "$128,200", "$192,300"];
|
|
34239
34333
|
annualizedInstallmentRules = [
|
|
34240
|
-
...QUARTERS.map((q) => quarterRule(q, "2025", "2025-01-01", "2026-01-01", P2025[q.n - 1], L2025[q.n - 1],
|
|
34241
|
-
...QUARTERS.map((q) => quarterRule(q, "2026", "2026-01-01", "2027-01-01", P2026[q.n - 1], L2026[q.n - 1],
|
|
34334
|
+
...QUARTERS.map((q) => quarterRule(q, "2025", "2025-01-01", "2026-01-01", P2025[q.n - 1], L2025[q.n - 1], null)),
|
|
34335
|
+
...QUARTERS.map((q) => quarterRule(q, "2026", "2026-01-01", "2027-01-01", P2026[q.n - 1], L2026[q.n - 1], {
|
|
34336
|
+
deductionCents: "40000",
|
|
34337
|
+
// $400
|
|
34338
|
+
testCents: "100000"
|
|
34339
|
+
// $1,000
|
|
34340
|
+
})),
|
|
34341
|
+
...QUARTERS.map((q) => (
|
|
34342
|
+
// Rev. Proc. 2026-35 § 3.28(2): the minimum is $415 and the QBI test $1,030
|
|
34343
|
+
quarterRule(q, "2027", "2027-01-01", "2028-01-01", P2027[q.n - 1], L2027[q.n - 1], {
|
|
34344
|
+
deductionCents: "41500",
|
|
34345
|
+
testCents: "103000"
|
|
34346
|
+
})
|
|
34347
|
+
))
|
|
34242
34348
|
];
|
|
34243
34349
|
}
|
|
34244
34350
|
});
|
|
@@ -34832,7 +34938,7 @@ function section179Rule(version2, from, to, capCents, thresholdCents, capLabel,
|
|
|
34832
34938
|
source: `26 U.S.C. \xA7 179, as amended by Pub. L. 119-21 (OBBBA \xA7 70306); ${sourceLabel}`,
|
|
34833
34939
|
section: "\xA7 179(b)(1)\u2013(3)",
|
|
34834
34940
|
url: "https://www.law.cornell.edu/uscode/text/26/179",
|
|
34835
|
-
excerpt: `"The aggregate cost which may be taken into account under subsection (a) for any taxable year shall not exceed ${capLabel}" \u2014 "reduced (but not below zero) by the amount by which the cost of section 179 property placed in service during such taxable year exceeds ${thresholdLabel}" (${yearLabel}; the OBBBA amounts apply to taxable years beginning after December 31, 2024). The \xA7 179(b)(3)(A) limit caps the deduction at taxable income from the active conduct of a trade or business computed without \xA7 179 \u2014 approximated here as gross income less ordinary/depreciation/research/interest deductions, capital gains excluded (enter active amounts only if this limit binds); the excess carries forward (\xA7 179(b)(3)(B), its own target). [The \xA7 179(b)(5) SUV cap ($32,000 for 2026, Rev. Proc. 2025-32 \xA7 3.24) and the \xA7 280F passenger-auto interaction are not modeled \u2014 exclude vehicles; primary use: qualified real property that \xA7 168(k) cannot reach.]`
|
|
34941
|
+
excerpt: `"The aggregate cost which may be taken into account under subsection (a) for any taxable year shall not exceed ${capLabel}" \u2014 "reduced (but not below zero) by the amount by which the cost of section 179 property placed in service during such taxable year exceeds ${thresholdLabel}" (${yearLabel}; the OBBBA amounts apply to taxable years beginning after December 31, 2024). The \xA7 179(b)(3)(A) limit caps the deduction at taxable income from the active conduct of a trade or business computed without \xA7 179 \u2014 approximated here as gross income less ordinary/depreciation/research/interest deductions, capital gains excluded (enter active amounts only if this limit binds); the excess carries forward (\xA7 179(b)(3)(B), its own target). [The \xA7 179(b)(5) SUV cap (${{ TY2025: "$31,300 for 2025, Rev. Proc. 2024-40 \xA7 2.25", TY2026: "$32,000 for 2026, Rev. Proc. 2025-32 \xA7 3.24", TY2027: "$33,100 for 2027, Rev. Proc. 2026-35 \xA7 3.26" }[yearLabel]}) and the \xA7 280F passenger-auto interaction are not modeled \u2014 exclude vehicles; primary use: qualified real property that \xA7 168(k) cannot reach.]`
|
|
34836
34942
|
},
|
|
34837
34943
|
effectiveFrom: from,
|
|
34838
34944
|
effectiveTo: to,
|
|
@@ -35121,10 +35227,14 @@ var init_corporate_1120 = __esm({
|
|
|
35121
35227
|
},
|
|
35122
35228
|
interestRule(1, "2025-01-01", "2026-01-01", "3100000000", "$31,000,000", "2025"),
|
|
35123
35229
|
interestRule(2, "2026-01-01", "2027-01-01", "3200000000", "$32,000,000", "2026"),
|
|
35230
|
+
interestRule(3, "2027-01-01", "2028-01-01", "3300000000", "$33,000,000", "2027"),
|
|
35231
|
+
// Rev. Proc. 2026-35 § 3.32
|
|
35124
35232
|
section179Rule(1, "2025-01-01", "2026-01-01", "250000000", "400000000", "$2,500,000", "$4,000,000", "TY2025", "Rev. Proc. 2025-32 \xA7 2.10 (OBBBA statutory amounts)"),
|
|
35125
35233
|
section179Rule(2, "2026-01-01", "2027-01-01", "256000000", "409000000", "$2,560,000", "$4,090,000", "TY2026", "Rev. Proc. 2025-32 \xA7 3.24, verbatim"),
|
|
35234
|
+
section179Rule(3, "2027-01-01", "2028-01-01", "264000000", "423000000", "$2,640,000", "$4,230,000", "TY2027", "Rev. Proc. 2026-35 \xA7 3.26, verbatim"),
|
|
35126
35235
|
section179CarryforwardRule(1, "2025-01-01", "2026-01-01", "250000000", "400000000", "TY2025"),
|
|
35127
35236
|
section179CarryforwardRule(2, "2026-01-01", "2027-01-01", "256000000", "409000000", "TY2026"),
|
|
35237
|
+
section179CarryforwardRule(3, "2027-01-01", "2028-01-01", "264000000", "423000000", "TY2027"),
|
|
35128
35238
|
corpCharitableRule(7, "2025-01-01", "2026-01-01", false, "TY2025"),
|
|
35129
35239
|
corpCharitableRule(8, "2026-01-01", void 0, true, "TY2026+, permanent"),
|
|
35130
35240
|
{
|
|
@@ -35705,7 +35815,8 @@ var init_qsbs = __esm({
|
|
|
35705
35815
|
excerpt: "For qualified small business stock acquired after July 4, 2025: 50 percent of gain excluded after a 3-year holding period, 75 percent after 4 years, 100 percent after 5 years; per-issuer limit the greater of $15,000,000 (indexed after 2026) or 10 times basis [the 10\xD7-basis alternative is not modeled \u2014 the flat cap is conservative]; issuer aggregate gross assets must not exceed $75,000,000. For stock acquired after September 27, 2010 and on or before July 4, 2025: 100 percent excluded after 5 years, $10,000,000 cap. [Assumed and disclosed: original issuance for money/services, active qualified trade or business, and the asset test; earlier-vintage stock (50%/75% legacy with \xA7 1(h)(4) 28%-rate gain and the 7% AMT preference) REFUSES. The non-excluded remainder of the new 50%/75% tiers is likewise 28%-rate gain \u2014 do not enter it as longTermCapitalGains; this target answers the exclusion amount only.]"
|
|
35706
35816
|
},
|
|
35707
35817
|
effectiveFrom: "2025-01-01",
|
|
35708
|
-
|
|
35818
|
+
effectiveTo: "2027-01-01",
|
|
35819
|
+
// § 1202(b)(5) indexes the $15,000,000 for taxable years beginning after 2026 (v2)
|
|
35709
35820
|
output: { type: "money" },
|
|
35710
35821
|
parameters: {
|
|
35711
35822
|
capNew: { value: "1500000000", type: "money" },
|
|
@@ -35719,6 +35830,33 @@ var init_qsbs = __esm({
|
|
|
35719
35830
|
then: money12("0"),
|
|
35720
35831
|
else: tiers
|
|
35721
35832
|
}
|
|
35833
|
+
},
|
|
35834
|
+
{
|
|
35835
|
+
id: "us.federal.qsbs_exclusion",
|
|
35836
|
+
version: 2,
|
|
35837
|
+
jurisdiction: "us.federal",
|
|
35838
|
+
title: "QSBS gain exclusion \u2014 OBBBA tiers (50/75/100% at 3/4/5 years) or prior-law 100% at 5 years",
|
|
35839
|
+
citation: {
|
|
35840
|
+
source: "26 U.S.C. \xA7 1202, as amended by Pub. L. 119-21 (OBBBA); Rev. Proc. 2026-35 \xA7 3.42(1) (the $15,000,000 limit is $15,480,000 for 2027)",
|
|
35841
|
+
section: "\xA7 1202(a), (b)",
|
|
35842
|
+
url: "https://www.law.cornell.edu/uscode/text/26/1202",
|
|
35843
|
+
excerpt: "For qualified small business stock acquired after July 4, 2025: 50 percent of gain excluded after a 3-year holding period, 75 percent after 4 years, 100 percent after 5 years; per-issuer limit the greater of $15,000,000 (indexed after 2026) or 10 times basis [the 10\xD7-basis alternative is not modeled \u2014 the flat cap is conservative]; issuer aggregate gross assets must not exceed $77,390,000 for 2027 (the $75,000,000 amount as adjusted, Rev. Proc. 2026-35 \xA7 3.42(2)). For stock acquired after September 27, 2010 and on or before July 4, 2025: 100 percent excluded after 5 years, $10,000,000 cap. [Assumed and disclosed: original issuance for money/services, active qualified trade or business, and the asset test; earlier-vintage stock (50%/75% legacy with \xA7 1(h)(4) 28%-rate gain and the 7% AMT preference) REFUSES. The non-excluded remainder of the new 50%/75% tiers is likewise 28%-rate gain \u2014 do not enter it as longTermCapitalGains; this target answers the exclusion amount only.]"
|
|
35844
|
+
},
|
|
35845
|
+
effectiveFrom: "2027-01-01",
|
|
35846
|
+
effectiveTo: "2028-01-01",
|
|
35847
|
+
output: { type: "money" },
|
|
35848
|
+
parameters: {
|
|
35849
|
+
capNew: { value: "1548000000", type: "money" },
|
|
35850
|
+
// $15,480,000 (Rev. Proc. 2026-35 § 3.42(1))
|
|
35851
|
+
capOld: { value: "1000000000", type: "money" }
|
|
35852
|
+
// $10,000,000
|
|
35853
|
+
},
|
|
35854
|
+
formula: {
|
|
35855
|
+
kind: "if",
|
|
35856
|
+
cond: { kind: "cmp", op: "eq", left: fact12("qsbsGain"), right: money12("0") },
|
|
35857
|
+
then: money12("0"),
|
|
35858
|
+
else: tiers
|
|
35859
|
+
}
|
|
35722
35860
|
}
|
|
35723
35861
|
];
|
|
35724
35862
|
}
|
|
@@ -35732,7 +35870,7 @@ function cdccTentativeRule(version2, from, to, pctExpr, yearLabel, mechanicsExce
|
|
|
35732
35870
|
jurisdiction: J8,
|
|
35733
35871
|
title: `Child and dependent care credit before the liability limit (${yearLabel})`,
|
|
35734
35872
|
citation: {
|
|
35735
|
-
source:
|
|
35873
|
+
source: from >= "2026-01-01" ? "26 U.S.C. \xA7 21, as amended by Pub. L. 119-21 (OBBBA) \xA7 70405" : "26 U.S.C. \xA7 21 (pre-OBBBA text, per the \xA7 70405(b) effective date)",
|
|
35736
35874
|
section: "\xA7 21(a)\u2013(e)",
|
|
35737
35875
|
url: "https://www.law.cornell.edu/uscode/text/26/21",
|
|
35738
35876
|
excerpt: mechanicsExcerpt
|
|
@@ -35856,7 +35994,7 @@ function adoptionAllowedRule(version2, from, to, maxCents, thresholdCents, yearL
|
|
|
35856
35994
|
jurisdiction: J8,
|
|
35857
35995
|
title: `Adoption credit after the MAGI phase-out (\xA7 23, ${yearLabel})`,
|
|
35858
35996
|
citation: {
|
|
35859
|
-
source: `26 U.S.C. \xA7 23, as amended by Pub. L. 119-21 (OBBBA) \xA7 70402; ${
|
|
35997
|
+
source: `26 U.S.C. \xA7 23, as amended by Pub. L. 119-21 (OBBBA) \xA7 70402; ${{ TY2025: "Rev. Proc. 2024-40 \xA7 2.04", TY2026: "Rev. Proc. 2025-32 \xA7 3.04", TY2027: "Rev. Proc. 2026-35 \xA7 3.04" }[yearLabel]}`,
|
|
35860
35998
|
section: "\xA7 23(a)\u2013(b), (f)",
|
|
35861
35999
|
url: "https://www.law.cornell.edu/uscode/text/26/23",
|
|
35862
36000
|
excerpt: `${amountsExcerpt} A special-needs adoption is treated as having paid the maximum regardless of actual expenses (\xA7 23(a)(3)). The credit is reduced by the ratio of the MAGI excess over the threshold to $40,000 (\xA7 23(b)(2)(A) \u2014 the $40,000 span is NOT indexed; MAGI is AGI without \xA7\xA7 911/931/933, \xA7 23(b)(2)(B) \u2014 MAGI \u2248 AGI here, disclosed). Married taxpayers only on a joint return (\xA7 23(f)(1), rules similar to \xA7 21(e)(2)) \u2014 MFS: $0; the living-apart exception is not modeled (conservative). The \xA7 23(a)(2) expense-timing rules (year after payment for pre-final years; foreign adoptions only when final) are attested by the input.`
|
|
@@ -36090,6 +36228,7 @@ var init_credits = __esm({
|
|
|
36090
36228
|
"The applicable percentage is '35 percent reduced (but not below 20 percent) by 1 percentage point for each $2,000 (or fraction thereof) by which the taxpayer's adjusted gross income for the taxable year exceeds $15,000' (pre-OBBBA text, in force for taxable years beginning before 2026 per OBBBA \xA7 70405(b)). Expenses capped at $3,000 (one qualifying individual) / $6,000 (two or more), \xA7 21(c), net of the \xA7 129 exclusion (netted by the input); limited to earned income \u2014 on a joint return, to the lesser spouse's earned income (\xA7 21(d)(1)). Married only on a joint return (\xA7 21(e)(2)) \u2014 MFS: $0; the \xA7 21(e)(4) living-apart exception and \xA7 21(d)(2) deemed student-spouse income are not modeled (conservative). Qualifying-individual status (\xA7 21(b)(1): dependent under 13, or incapable of self-care) is attested by the count input."
|
|
36091
36229
|
),
|
|
36092
36230
|
cdccTentativeRule(4, "2026-01-01", "2027-01-01", pct2026, "TY2026: OBBBA 50% \u2192 35% \u2192 20%", "OBBBA \xA7 70405 (taxable years beginning after December 31, 2025): the applicable percentage 'means 50 percent\u2014 (A) reduced (but not below 35 percent) by 1 percentage point for each $2,000 or fraction thereof by which the taxpayer's adjusted gross income for the taxable year exceeds $15,000, and (B) further reduced (but not below 20 percent) by 1 percentage point for each $2,000 ($4,000 in the case of a joint return) or fraction thereof by which the taxpayer's adjusted gross income for the taxable year exceeds $75,000 ($150,000 in the case of a joint return).' Expense caps $3,000/$6,000 (\xA7 21(c), unindexed, unchanged by the OBBBA), limited to earned income \u2014 joint returns to the lesser spouse's earned income (\xA7 21(d)(1)). Married only on a joint return (\xA7 21(e)(2)) \u2014 MFS: $0; \xA7 21(e)(4) and \xA7 21(d)(2) not modeled (conservative). Qualifying-individual status attested by the count input."),
|
|
36231
|
+
cdccTentativeRule(5, "2027-01-01", "2028-01-01", pct2026, "TY2027: OBBBA 50% \u2192 35% \u2192 20%", "OBBBA \xA7 70405 (taxable years beginning after December 31, 2025): the applicable percentage 'means 50 percent\u2014 (A) reduced (but not below 35 percent) by 1 percentage point for each $2,000 or fraction thereof by which the taxpayer's adjusted gross income for the taxable year exceeds $15,000, and (B) further reduced (but not below 20 percent) by 1 percentage point for each $2,000 ($4,000 in the case of a joint return) or fraction thereof by which the taxpayer's adjusted gross income for the taxable year exceeds $75,000 ($150,000 in the case of a joint return).' None of these amounts is indexed (Rev. Proc. 2026-35 lists no \xA7 21 item), so 2027 applies them unchanged. Expense caps $3,000/$6,000 (\xA7 21(c)), limited to earned income \u2014 joint returns to the lesser spouse's earned income (\xA7 21(d)(1)). Married only on a joint return (\xA7 21(e)(2)) \u2014 MFS: $0; \xA7 21(e)(4) and \xA7 21(d)(2) not modeled (conservative). Qualifying-individual status attested by the count input."),
|
|
36093
36232
|
{
|
|
36094
36233
|
id: "us.federal.cdcc",
|
|
36095
36234
|
version: 1,
|
|
@@ -36118,6 +36257,39 @@ var init_credits = __esm({
|
|
|
36118
36257
|
t20: saversTier("5250000", "3937500", "2625000"),
|
|
36119
36258
|
t10: saversTier("8050000", "6037500", "4025000")
|
|
36120
36259
|
}, "TY2026", "Notice 2025-67", "For 2026 (Notice 2025-67): joint 50% to $48,500, 20% to $52,500, 10% to $80,500; head of household $36,375/$39,375/$60,375; all other statuses $24,250/$26,250/$40,250 \u2014 zero above."),
|
|
36260
|
+
{
|
|
36261
|
+
id: "us.federal.savers.tentative",
|
|
36262
|
+
version: 3,
|
|
36263
|
+
jurisdiction: J8,
|
|
36264
|
+
title: "Saver's credit before the liability limit (TY2027: ABLE contributions only; AGI limits not yet published)",
|
|
36265
|
+
citation: {
|
|
36266
|
+
source: "26 U.S.C. \xA7 25B(a), (d)(1), as amended by Pub. L. 117-328 (SECURE 2.0) \xA7 103 and Pub. L. 119-21 (OBBBA) \xA7 70116",
|
|
36267
|
+
section: "\xA7 25B(a), (b), (d)(1)",
|
|
36268
|
+
url: "https://www.law.cornell.edu/uscode/text/26/25B",
|
|
36269
|
+
excerpt: "From 2027, qualified retirement savings contributions are 'the amount of contributions made by the eligible individual during such taxable year to the ABLE account (within the meaning of section 529A) of which such individual is the designated beneficiary'; IRA contributions and elective deferrals count only 'in the case of any taxable year beginning before January 1, 2027' (\xA7 25B(d)(1); SECURE 2.0 \xA7 103 replaces them with the \xA7 6433 Saver's Match). The per-person cap becomes $2,100 for taxable years beginning after December 31, 2026 (OBBBA \xA7 70116(b)). The 2027 \xA7 25B(b) AGI limits are inflation-adjusted in the IRS's annual retirement-plan notice, which is not yet published \u2014 so a 2027 return with saver's contributions refuses rather than guess; with none, the credit is $0."
|
|
36270
|
+
},
|
|
36271
|
+
effectiveFrom: "2027-01-01",
|
|
36272
|
+
effectiveTo: "2028-01-01",
|
|
36273
|
+
output: { type: "money" },
|
|
36274
|
+
formula: {
|
|
36275
|
+
kind: "if",
|
|
36276
|
+
cond: {
|
|
36277
|
+
kind: "or",
|
|
36278
|
+
args: [
|
|
36279
|
+
gt03(fact13("saversContributions")),
|
|
36280
|
+
{
|
|
36281
|
+
kind: "and",
|
|
36282
|
+
args: [isStatus3("mfj"), gt03(fact13("saversContributionsSpouse"))]
|
|
36283
|
+
}
|
|
36284
|
+
]
|
|
36285
|
+
},
|
|
36286
|
+
then: {
|
|
36287
|
+
kind: "unsupported",
|
|
36288
|
+
reason: "the 2027 saver's credit counts only ABLE-account contributions (\xA7 25B(d)(1) after SECURE 2.0 \xA7 103), up to $2,100, and its 2027 AGI limits are not yet published by the IRS \u2014 not modeled for 2027"
|
|
36289
|
+
},
|
|
36290
|
+
else: zero7
|
|
36291
|
+
}
|
|
36292
|
+
},
|
|
36121
36293
|
{
|
|
36122
36294
|
id: "us.federal.savers_credit",
|
|
36123
36295
|
version: 1,
|
|
@@ -36154,8 +36326,10 @@ var init_credits = __esm({
|
|
|
36154
36326
|
},
|
|
36155
36327
|
adoptionAllowedRule(1, "2025-01-01", "2026-01-01", "1728000", "25919000", "TY2025", "For taxable years beginning in 2025, the credit allowed for an adoption of a child with special needs is $17,280; the maximum credit allowed for other adoptions is the amount of qualified adoption expenses up to $17,280; phase-out begins at modified adjusted gross income in excess of $259,190 and is complete at $299,190 (Rev. Proc. 2024-40 \xA7 2.04, verbatim)."),
|
|
36156
36328
|
adoptionAllowedRule(2, "2026-01-01", "2027-01-01", "1767000", "26508000", "TY2026", "For taxable years beginning in 2026, the credit allowed for an adoption of a child with special needs is $17,670; the maximum credit allowed for other adoptions is the amount of qualified adoption expenses up to $17,670; phase-out begins at modified adjusted gross income in excess of $265,080 and is complete at $305,080 (Rev. Proc. 2025-32 \xA7 3.04, verbatim)."),
|
|
36329
|
+
adoptionAllowedRule(3, "2027-01-01", "2028-01-01", "1825000", "27368000", "TY2027", "For taxable years beginning in 2027, under \xA7 23(a)(3), the credit allowed for an adoption of a child with special needs is $18,250. Under \xA7 23(b)(1), the maximum credit allowed for other adoptions is the amount of qualified adoption expenses up to $18,250. The available adoption credit begins to phase out under \xA7 23(b)(2)(A) for taxpayers with modified adjusted gross income in excess of $273,680 and is completely phased out for taxpayers with modified adjusted gross income of $313,680 or more (Rev. Proc. 2026-35 \xA7 3.04)."),
|
|
36157
36330
|
adoptionRefundableRule(1, "2025-01-01", "2026-01-01", "500000", "$5,000", "statutory, unindexed for 2025"),
|
|
36158
36331
|
adoptionRefundableRule(2, "2026-01-01", "2027-01-01", "512000", "$5,120", "Rev. Proc. 2025-32 \xA7 3.04(3)"),
|
|
36332
|
+
adoptionRefundableRule(3, "2027-01-01", "2028-01-01", "528000", "$5,280", "Rev. Proc. 2026-35 \xA7 3.04(3)"),
|
|
36159
36333
|
{
|
|
36160
36334
|
id: "us.federal.adoption.nonrefundable",
|
|
36161
36335
|
version: 2,
|
|
@@ -36284,6 +36458,42 @@ var init_ctc = __esm({
|
|
|
36284
36458
|
]
|
|
36285
36459
|
}
|
|
36286
36460
|
},
|
|
36461
|
+
{
|
|
36462
|
+
id: "us.federal.ctc.tentative",
|
|
36463
|
+
version: 4,
|
|
36464
|
+
jurisdiction: J9,
|
|
36465
|
+
title: "Child tax credit + credit for other dependents, before phase-out (TY2027)",
|
|
36466
|
+
citation: {
|
|
36467
|
+
source: "26 U.S.C. \xA7 24(a), (h)(4), as amended by Pub. L. 119-21 (OBBBA) \xA7 70104; Rev. Proc. 2026-35 \xA7 3.05",
|
|
36468
|
+
section: "\xA7 24(a), (h)(2), (h)(4)",
|
|
36469
|
+
url: "https://www.law.cornell.edu/uscode/text/26/24",
|
|
36470
|
+
excerpt: "For taxable years beginning in 2027, the maximum amount of the credit allowed under \xA7 24(a) is $2,300 (Rev. Proc. 2026-35 \xA7 3.05(1)). \xA7 24(h)(4): 'The credit determined under subsection (a) (after the application of paragraph (2)) shall be increased by $500 for each dependent of the taxpayer (as defined in section 152) other than a qualifying child' \u2014 unindexed, never refundable (the \xA7 24(d)(1)(A) ACTC cross-reference excludes it via (h)(5)'s per-child cap), subject to the same \xA7 24(b) phase-out as part of the combined credit (Schedule 8812 line 8). [\xA7 24(h)(4)(B) noncitizen exception and the dependent's TIN requirement (\xA7 24(e)) attested by the count.]"
|
|
36471
|
+
},
|
|
36472
|
+
effectiveFrom: "2027-01-01",
|
|
36473
|
+
effectiveTo: "2028-01-01",
|
|
36474
|
+
output: { type: "money" },
|
|
36475
|
+
parameters: {
|
|
36476
|
+
perChild: { value: "230000", type: "money" },
|
|
36477
|
+
// $2,300
|
|
36478
|
+
perOtherDependent: { value: "50000", type: "money" }
|
|
36479
|
+
// $500, unindexed
|
|
36480
|
+
},
|
|
36481
|
+
formula: {
|
|
36482
|
+
kind: "add",
|
|
36483
|
+
args: [
|
|
36484
|
+
{
|
|
36485
|
+
kind: "mulInt",
|
|
36486
|
+
base: { kind: "param", name: "perChild" },
|
|
36487
|
+
count: fact14("qualifyingChildren")
|
|
36488
|
+
},
|
|
36489
|
+
{
|
|
36490
|
+
kind: "mulInt",
|
|
36491
|
+
base: { kind: "param", name: "perOtherDependent" },
|
|
36492
|
+
count: fact14("otherDependents")
|
|
36493
|
+
}
|
|
36494
|
+
]
|
|
36495
|
+
}
|
|
36496
|
+
},
|
|
36287
36497
|
{
|
|
36288
36498
|
id: "us.federal.ctc.phaseout_threshold",
|
|
36289
36499
|
version: 1,
|
|
@@ -36439,7 +36649,9 @@ var init_ctc = __esm({
|
|
|
36439
36649
|
url: "https://www.law.cornell.edu/uscode/text/26/24",
|
|
36440
36650
|
excerpt: "The credit is refundable up to $1,700 per qualifying child (2025 and 2026, as adjusted), limited to 15 percent of so much of earned income as exceeds $2,500, and to the portion of the credit not used against tax. [The \xA7 24(d)(1)(B)(ii) alternative for taxpayers with 3+ children (social security taxes minus EIC) is NOT modeled \u2014 it can only increase the refund at very low earned income; disclosed. Earned income approximated as wages.]"
|
|
36441
36651
|
},
|
|
36442
|
-
|
|
36652
|
+
effectiveFrom: "2025-01-01",
|
|
36653
|
+
effectiveTo: "2027-01-01",
|
|
36654
|
+
// the $1,700 refundable amount is indexed; 2027 is v4
|
|
36443
36655
|
output: { type: "money" },
|
|
36444
36656
|
parameters: {
|
|
36445
36657
|
refundableCapPerChild: { value: "170000", type: "money" },
|
|
@@ -36502,6 +36714,81 @@ var init_ctc = __esm({
|
|
|
36502
36714
|
]
|
|
36503
36715
|
}
|
|
36504
36716
|
},
|
|
36717
|
+
{
|
|
36718
|
+
id: "us.federal.actc",
|
|
36719
|
+
version: 4,
|
|
36720
|
+
jurisdiction: J9,
|
|
36721
|
+
title: "Additional child tax credit \u2014 refundable, TY2027 (simplified: 3+-child SS-tax alternative not modeled)",
|
|
36722
|
+
citation: {
|
|
36723
|
+
source: "26 U.S.C. \xA7 24(d), (h)(5); Rev. Proc. 2026-35 \xA7 3.05(2)",
|
|
36724
|
+
section: "\xA7 24(d)(1); \xA7 24(h)(5)",
|
|
36725
|
+
url: "https://www.law.cornell.edu/uscode/text/26/24",
|
|
36726
|
+
excerpt: "The credit is refundable up to $1,800 per qualifying child (2027, as adjusted \u2014 Rev. Proc. 2026-35 \xA7 3.05(2)), limited to 15 percent of so much of earned income as exceeds $2,500, and to the portion of the credit not used against tax. [The \xA7 24(d)(1)(B)(ii) alternative for taxpayers with 3+ children (social security taxes minus EIC) is NOT modeled \u2014 it can only increase the refund at very low earned income; disclosed. Earned income approximated as wages.]"
|
|
36727
|
+
},
|
|
36728
|
+
effectiveFrom: "2027-01-01",
|
|
36729
|
+
effectiveTo: "2028-01-01",
|
|
36730
|
+
output: { type: "money" },
|
|
36731
|
+
parameters: {
|
|
36732
|
+
refundableCapPerChild: { value: "180000", type: "money" },
|
|
36733
|
+
// $1,800
|
|
36734
|
+
earnedIncomeFloor: { value: "250000", type: "money" }
|
|
36735
|
+
// $2,500
|
|
36736
|
+
},
|
|
36737
|
+
formula: {
|
|
36738
|
+
kind: "min",
|
|
36739
|
+
args: [
|
|
36740
|
+
// the part of the credit the liability limit left unused
|
|
36741
|
+
{
|
|
36742
|
+
kind: "max0",
|
|
36743
|
+
arg: {
|
|
36744
|
+
kind: "sub",
|
|
36745
|
+
left: ruleRef12("us.federal.ctc.after_phaseout"),
|
|
36746
|
+
right: ruleRef12("us.federal.ctc")
|
|
36747
|
+
}
|
|
36748
|
+
},
|
|
36749
|
+
// refundable cap: $1,800 per qualifying child
|
|
36750
|
+
{
|
|
36751
|
+
kind: "mulInt",
|
|
36752
|
+
base: { kind: "param", name: "refundableCapPerChild" },
|
|
36753
|
+
count: fact14("qualifyingChildren")
|
|
36754
|
+
},
|
|
36755
|
+
// 15% of earned income (wages + SE earnings net of ½ SE tax) above $2,500
|
|
36756
|
+
{
|
|
36757
|
+
kind: "mulRate",
|
|
36758
|
+
base: {
|
|
36759
|
+
kind: "max0",
|
|
36760
|
+
arg: {
|
|
36761
|
+
kind: "sub",
|
|
36762
|
+
left: {
|
|
36763
|
+
kind: "add",
|
|
36764
|
+
args: [
|
|
36765
|
+
fact14("wages"),
|
|
36766
|
+
{
|
|
36767
|
+
kind: "max0",
|
|
36768
|
+
arg: {
|
|
36769
|
+
kind: "sub",
|
|
36770
|
+
left: ruleRef12("us.federal.se_net_profit"),
|
|
36771
|
+
right: ruleRef12("us.federal.se_tax_half_deduction")
|
|
36772
|
+
}
|
|
36773
|
+
}
|
|
36774
|
+
]
|
|
36775
|
+
},
|
|
36776
|
+
right: {
|
|
36777
|
+
kind: "add",
|
|
36778
|
+
args: [
|
|
36779
|
+
{ kind: "param", name: "earnedIncomeFloor" },
|
|
36780
|
+
// Schedule C net loss reduces § 24(d) earned income too
|
|
36781
|
+
fact14("scheduleCNetLoss")
|
|
36782
|
+
]
|
|
36783
|
+
}
|
|
36784
|
+
}
|
|
36785
|
+
},
|
|
36786
|
+
rate: { num: "15", den: "100" },
|
|
36787
|
+
round: "half-up"
|
|
36788
|
+
}
|
|
36789
|
+
]
|
|
36790
|
+
}
|
|
36791
|
+
},
|
|
36505
36792
|
{
|
|
36506
36793
|
id: "us.federal.income_tax_after_credits",
|
|
36507
36794
|
version: 6,
|
|
@@ -36636,9 +36923,11 @@ var init_dependents = __esm({
|
|
|
36636
36923
|
},
|
|
36637
36924
|
qualifyingRelativeRule(1, "2025-01-01", "2026-01-01", "520000", "2025", "Rev. Proc. 2024-40 \xA7 2.24 ($5,200)"),
|
|
36638
36925
|
qualifyingRelativeRule(2, "2026-01-01", "2027-01-01", "530000", "2026", "Rev. Proc. 2025-32 \xA7 4.23 ($5,300)"),
|
|
36926
|
+
qualifyingRelativeRule(3, "2027-01-01", "2028-01-01", "550000", "2027", "Rev. Proc. 2026-35 \xA7 3.25 ($5,500)"),
|
|
36639
36927
|
...[
|
|
36640
36928
|
{ version: 1, from: "2025-01-01", to: "2026-01-01", limit: "520000", year: "2025", revProc: "Rev. Proc. 2024-40 \xA7 2.24 ($5,200)" },
|
|
36641
|
-
{ version: 2, from: "2026-01-01", to: "2027-01-01", limit: "530000", year: "2026", revProc: "Rev. Proc. 2025-32 \xA7 4.23 ($5,300)" }
|
|
36929
|
+
{ version: 2, from: "2026-01-01", to: "2027-01-01", limit: "530000", year: "2026", revProc: "Rev. Proc. 2025-32 \xA7 4.23 ($5,300)" },
|
|
36930
|
+
{ version: 3, from: "2027-01-01", to: "2028-01-01", limit: "550000", year: "2027", revProc: "Rev. Proc. 2026-35 \xA7 3.25 ($5,500)" }
|
|
36642
36931
|
].map(({ version: version2, from, to, limit, year, revProc }) => ({
|
|
36643
36932
|
id: "us.federal.dependent.qualifying_relative.multiple_support",
|
|
36644
36933
|
version: version2,
|
|
@@ -37194,7 +37483,7 @@ function eitcRule(version2, effectiveFrom, effectiveTo, p, yearLabel, revProc, o
|
|
|
37194
37483
|
}
|
|
37195
37484
|
};
|
|
37196
37485
|
}
|
|
37197
|
-
var fact17, money16, ruleRef14, param8, intLit2, zero9, isStatus5, PHASE_IN, PHASE_OUT, TY20252, TY20262, dollars, earned, phaseoutIncome, NO_AGE_GATE_EXCERPT, eitcRules;
|
|
37486
|
+
var fact17, money16, ruleRef14, param8, intLit2, zero9, isStatus5, PHASE_IN, PHASE_OUT, TY20252, TY20262, TY20272, dollars, earned, phaseoutIncome, NO_AGE_GATE_EXCERPT, eitcRules;
|
|
37198
37487
|
var init_eitc = __esm({
|
|
37199
37488
|
"../corpus-us-federal/dist/rules/eitc.js"() {
|
|
37200
37489
|
"use strict";
|
|
@@ -37244,6 +37533,17 @@ var init_eitc = __esm({
|
|
|
37244
37533
|
completedMFJ0: 26820,
|
|
37245
37534
|
investmentLimit: 12200
|
|
37246
37535
|
};
|
|
37536
|
+
TY20272 = {
|
|
37537
|
+
eia: [8960, 13450, 18880, 18880],
|
|
37538
|
+
max: [685, 4573, 7552, 8496],
|
|
37539
|
+
thresholdOther0: 11210,
|
|
37540
|
+
thresholdMFJ0: 18730,
|
|
37541
|
+
thresholdOtherKids: 24660,
|
|
37542
|
+
thresholdMFJKids: 32170,
|
|
37543
|
+
completedOther0: 20164,
|
|
37544
|
+
completedMFJ0: 27684,
|
|
37545
|
+
investmentLimit: 12600
|
|
37546
|
+
};
|
|
37247
37547
|
dollars = (d3) => (BigInt(d3) * 100n).toString();
|
|
37248
37548
|
earned = {
|
|
37249
37549
|
// A Schedule C net loss reduces § 32(c)(2) earned income (Pub. 596 worksheet:
|
|
@@ -37281,6 +37581,7 @@ var init_eitc = __esm({
|
|
|
37281
37581
|
// netted results ("capital gain net income", § 32(i)(1)(C))
|
|
37282
37582
|
eitcRule(14, "2025-01-01", "2026-01-01", TY20252, "2025", "Rev. Proc. 2024-40 \xA7 2.06"),
|
|
37283
37583
|
eitcRule(15, "2026-01-01", "2027-01-01", TY20262, "2026", "Rev. Proc. 2025-32 \xA7 4.06"),
|
|
37584
|
+
eitcRule(16, "2027-01-01", "2028-01-01", TY20272, "2027", "Rev. Proc. 2026-35 \xA7 3.06"),
|
|
37284
37585
|
// us.federal.eitc_no_age_gate (new): the same § 32(a)-(b),(f),(i) formula with
|
|
37285
37586
|
// the childless § 32(c)(1)(A)(ii) age gate removed, for state EITC statutes
|
|
37286
37587
|
// that decouple from it (35 ILCS 5/212(b-5)/(b-10), IL P.A. 102-700) — see
|
|
@@ -37296,6 +37597,12 @@ var init_eitc = __esm({
|
|
|
37296
37597
|
ageGate: false,
|
|
37297
37598
|
titleSuffix: "Earned income credit, \xA7 32(c)(1)(A)(ii) childless age gate REMOVED (TY2026; for state decoupling statutes only)",
|
|
37298
37599
|
extraExcerpt: NO_AGE_GATE_EXCERPT
|
|
37600
|
+
}),
|
|
37601
|
+
eitcRule(5, "2027-01-01", "2028-01-01", TY20272, "2027", "Rev. Proc. 2026-35 \xA7 3.06", {
|
|
37602
|
+
ruleId: "us.federal.eitc_no_age_gate",
|
|
37603
|
+
ageGate: false,
|
|
37604
|
+
titleSuffix: "Earned income credit, \xA7 32(c)(1)(A)(ii) childless age gate REMOVED (TY2027; for state decoupling statutes only)",
|
|
37605
|
+
extraExcerpt: NO_AGE_GATE_EXCERPT
|
|
37299
37606
|
})
|
|
37300
37607
|
];
|
|
37301
37608
|
}
|
|
@@ -37391,9 +37698,11 @@ var init_feie = __esm({
|
|
|
37391
37698
|
feieRules = [
|
|
37392
37699
|
feieExclusionRule(1, "2025-01-01", "2026-01-01", "13000000", "$130,000", "Rev. Proc. 2024-40 \xA7 2.39"),
|
|
37393
37700
|
feieExclusionRule(2, "2026-01-01", "2027-01-01", "13290000", "$132,900", "Rev. Proc. 2025-32 \xA7 4.39"),
|
|
37701
|
+
feieExclusionRule(3, "2027-01-01", "2028-01-01", "13730000", "$137,300", "Rev. Proc. 2026-35 \xA7 3.41"),
|
|
37394
37702
|
// v3/v4: the preferential-income refusal guard also catches the standalone qualifiedDividends fact
|
|
37395
37703
|
feieStackingRule(3, "2025-01-01", "2026-01-01", "2025"),
|
|
37396
37704
|
feieStackingRule(4, "2026-01-01", "2027-01-01", "2026"),
|
|
37705
|
+
feieStackingRule(5, "2027-01-01", "2028-01-01", "2027"),
|
|
37397
37706
|
{
|
|
37398
37707
|
id: "us.federal.eitc.feie_denial",
|
|
37399
37708
|
version: 1,
|
|
@@ -37485,7 +37794,8 @@ var init_fiduciary = __esm({
|
|
|
37485
37794
|
};
|
|
37486
37795
|
fiduciaryRules = [
|
|
37487
37796
|
fiduciaryRule(1, "2025-01-01", "2026-01-01", "315000", "1145000", "1565000", "TY2025", "Rev. Proc. 2024-40 \xA7 2.01"),
|
|
37488
|
-
fiduciaryRule(2, "2026-01-01", "2027-01-01", "330000", "1170000", "1600000", "TY2026", "Rev. Proc. 2025-32 \xA7 4.01")
|
|
37797
|
+
fiduciaryRule(2, "2026-01-01", "2027-01-01", "330000", "1170000", "1600000", "TY2026", "Rev. Proc. 2025-32 \xA7 4.01"),
|
|
37798
|
+
fiduciaryRule(3, "2027-01-01", "2028-01-01", "340000", "1210000", "1650000", "TY2027", "Rev. Proc. 2026-35 \xA7 3.01")
|
|
37489
37799
|
];
|
|
37490
37800
|
}
|
|
37491
37801
|
});
|
|
@@ -37526,12 +37836,14 @@ function tierChain(fplPct, tiers2, above400) {
|
|
|
37526
37836
|
function ptcRule(version2, from, to, fplFirstPersonCents, fplPerAdditionalCents, tiers2, above400, yearLabel, excerpt) {
|
|
37527
37837
|
const inRange = above400 === "cliff" ? {
|
|
37528
37838
|
kind: "if",
|
|
37839
|
+
// compare the income itself to 4 × the poverty line: the floored
|
|
37840
|
+
// percentage reads income a few dollars over the line as 400.00%
|
|
37841
|
+
// (Form 8962 Worksheet 2 tests line 1 against line 2 × 4.0)
|
|
37529
37842
|
cond: {
|
|
37530
37843
|
kind: "cmp",
|
|
37531
37844
|
op: "gt",
|
|
37532
|
-
left:
|
|
37533
|
-
right:
|
|
37534
|
-
// 400.00%
|
|
37845
|
+
left: householdIncome,
|
|
37846
|
+
right: { kind: "mulInt", base: povertyLine, count: { kind: "int", value: "4" } }
|
|
37535
37847
|
},
|
|
37536
37848
|
then: zero12,
|
|
37537
37849
|
else: assistanceAmount(tierChain(
|
|
@@ -37566,7 +37878,7 @@ function ptcRule(version2, from, to, fplFirstPersonCents, fplPerAdditionalCents,
|
|
|
37566
37878
|
jurisdiction: J13,
|
|
37567
37879
|
title: `Premium tax credit (\xA7 36B, ${yearLabel})`,
|
|
37568
37880
|
citation: {
|
|
37569
|
-
source: from >= "2026-01-01" ? "26 U.S.C. \xA7 36B (post-ARPA-sunset); Rev. Proc. 2025-25 \xA7 3.01; 90 FR 5917 (2025 HHS poverty guidelines)" : "26 U.S.C. \xA7 36B(b)(3)(A)(iii), (c)(1)(E) (ARPA/IRA, sunset before 2026); Rev. Proc. 2024-35 \xA7 2.01; 89 FR 2961 (2024 HHS poverty guidelines)",
|
|
37881
|
+
source: from >= "2027-01-01" ? "26 U.S.C. \xA7 36B, as amended by Pub. L. 119-21 (OBBBA) \xA7\xA7 71301, 71302, 71305; Rev. Proc. 2026-26 \xA7 3.01; 91 FR 1797 (2026 HHS poverty guidelines)" : from >= "2026-01-01" ? "26 U.S.C. \xA7 36B (post-ARPA-sunset); Rev. Proc. 2025-25 \xA7 3.01; 90 FR 5917 (2025 HHS poverty guidelines)" : "26 U.S.C. \xA7 36B(b)(3)(A)(iii), (c)(1)(E) (ARPA/IRA, sunset before 2026); Rev. Proc. 2024-35 \xA7 2.01; 89 FR 2961 (2024 HHS poverty guidelines)",
|
|
37570
37882
|
section: "\xA7 36B(b), (c)(1), (d)",
|
|
37571
37883
|
url: "https://www.law.cornell.edu/uscode/text/26/36B",
|
|
37572
37884
|
excerpt
|
|
@@ -37682,7 +37994,7 @@ function repayment2025() {
|
|
|
37682
37994
|
}
|
|
37683
37995
|
};
|
|
37684
37996
|
}
|
|
37685
|
-
var J13, fact20, money19, ruleRef16, param10, zero12, gt06, isStatus6, householdIncome, povertyLine, fplPercentCents, contribution, assistanceAmount, TIERS_2025, TIERS_2026, ptcRules;
|
|
37997
|
+
var J13, fact20, money19, ruleRef16, param10, zero12, gt06, isStatus6, householdIncome, povertyLine, fplPercentCents, contribution, assistanceAmount, TIERS_2025, TIERS_2027, TIERS_2026, ptcRules;
|
|
37686
37998
|
var init_ptc = __esm({
|
|
37687
37999
|
"../corpus-us-federal/dist/rules/ptc.js"() {
|
|
37688
38000
|
"use strict";
|
|
@@ -37769,6 +38081,15 @@ var init_ptc = __esm({
|
|
|
37769
38081
|
{ lo: "25000", hi: "30000", initial: "400", final: "600" },
|
|
37770
38082
|
{ lo: "30000", hi: "40000", initial: "600", final: "850" }
|
|
37771
38083
|
];
|
|
38084
|
+
TIERS_2027 = [
|
|
38085
|
+
{ lo: "10000", hi: "13300", initial: "215", final: "215" },
|
|
38086
|
+
{ lo: "13300", hi: "15000", initial: "323", final: "430" },
|
|
38087
|
+
{ lo: "15000", hi: "20000", initial: "430", final: "678" },
|
|
38088
|
+
{ lo: "20000", hi: "25000", initial: "678", final: "866" },
|
|
38089
|
+
{ lo: "25000", hi: "30000", initial: "866", final: "1022" },
|
|
38090
|
+
{ lo: "30000", hi: "40001", initial: "1022", final: "1022" }
|
|
38091
|
+
// "but not more than 400%" — inclusive
|
|
38092
|
+
];
|
|
37772
38093
|
TIERS_2026 = [
|
|
37773
38094
|
{ lo: "10000", hi: "13300", initial: "210", final: "210" },
|
|
37774
38095
|
{ lo: "13300", hi: "15000", initial: "314", final: "419" },
|
|
@@ -37795,8 +38116,8 @@ var init_ptc = __esm({
|
|
|
37795
38116
|
`For taxable years beginning after December 31, 2020, and before January 1, 2026, the enhanced table applies (\xA7 36B(b)(3)(A)(iii); Rev. Proc. 2024-35: 0% to 150% FPL, rising linearly to 8.5% at 300\u2013400%) and subparagraph (A) is applied 'without regard to "but does not exceed 400 percent"' (\xA7 36B(c)(1)(E)) \u2014 8.5% with NO income cliff. Premium assistance is the lesser of enrollment premiums or the excess of the SLCSP benchmark over the applicable percentage of household income (\xA7 36B(b)(2)). Household income = MAGI + tax-exempt interest + the \xA7 911 exclusion + nontaxable social security (\xA7 36B(d)(2)(B)); poverty line per the 2024 HHS guidelines (89 FR 2961: $15,060 + $5,380/person, 48 contiguous states \u2014 Alaska/Hawaii's higher guidelines not modeled, conservative). Below 100% FPL: not an applicable taxpayer \u2014 $0 (\xA7 36B(c)(1)(A); the (c)(1)(B) immigrant special rule not modeled, conservative) \u2014 unless the Marketplace estimated at enrollment that household income would be at least 100% FPL and advance payments were made (Reg. \xA7 1.36B-2(b)(6); 2025 Form 8962 instructions, 'Estimated household income at least 100% of the federal poverty line'), when the 0% first-tier percentage applies. Household income below zero counts as zero (Form 8962 line 3). Married filing separately: $0 (\xA7 36B(c)(1)(C); the abuse/abandonment exception not modeled). [Monthly computation annualized; dependents' MAGI and the \xA7 36B(c)(2) employer-coverage/affordability disqualifications attested by the inputs; Form 8962's whole-percent and 4-decimal table rounding may differ sub-dollar \u2014 statutory linear interpolation encoded.]`
|
|
37796
38117
|
),
|
|
37797
38118
|
ptcRule(
|
|
37798
|
-
|
|
37799
|
-
// v3 gave $0 below 100% FPL even under Reg. § 1.36B-2(b)(6) and let household income go negative
|
|
38119
|
+
6,
|
|
38120
|
+
// v5 tested the 400% cliff on the floored percentage, so income just over 4 × the poverty line kept the credit; v3 gave $0 below 100% FPL even under Reg. § 1.36B-2(b)(6) and let household income go negative
|
|
37800
38121
|
"2026-01-01",
|
|
37801
38122
|
"2027-01-01",
|
|
37802
38123
|
"1565000",
|
|
@@ -37809,6 +38130,21 @@ var init_ptc = __esm({
|
|
|
37809
38130
|
"TY2026: indexed statutory table, the 400% cliff returns",
|
|
37810
38131
|
"For taxable years beginning in 2026 the ARPA/IRA enhancements have sunset by their own terms: the applicable percentage comes from the indexed statutory table (Rev. Proc. 2025-25 \xA7 3.01: 2.10% under 133% FPL; 3.14\u21924.19 at 133\u2013150; 4.19\u21926.60 at 150\u2013200; 6.60\u21928.44 at 200\u2013250; 8.44\u21929.96 at 250\u2013300; 9.96 at 300\u2013400), and the term 'applicable taxpayer' again requires household income that 'does not exceed 400 percent of\u2026 the poverty line' (\xA7 36B(c)(1)(A)) \u2014 one dollar past 400% FPL destroys the entire credit. Premium assistance is the lesser of enrollment premiums or the SLCSP benchmark minus the applicable percentage of household income (\xA7 36B(b)(2)). Household income = MAGI + tax-exempt interest + the \xA7 911 exclusion + nontaxable social security (\xA7 36B(d)(2)(B)); poverty line per the 2025 HHS guidelines (90 FR 5917: $15,650 + $5,500/person, 48 contiguous states \u2014 AK/HI not modeled, conservative). Below 100% FPL: $0 (\xA7 36B(c)(1)(A); OBBBA \xA7 71302 struck the (c)(1)(B) special rule) \u2014 unless the Marketplace estimated at enrollment that household income would be at least 100% but no more than 400% FPL and advance payments were made (Reg. \xA7 1.36B-2(b)(6); 2026 draft Form 8962 instructions), when the 2.10% first-tier percentage applies. Household income below zero counts as zero (Form 8962 line 3). MFS: $0 (\xA7 36B(c)(1)(C)). [Monthly computation annualized; dependents' MAGI and employer-coverage disqualifications attested; Form 8962 rounding may differ sub-dollar.]"
|
|
37811
38132
|
),
|
|
38133
|
+
ptcRule(
|
|
38134
|
+
7,
|
|
38135
|
+
// the 400% cliff tests household income against 4 × the poverty line, not the floored percentage
|
|
38136
|
+
"2027-01-01",
|
|
38137
|
+
"2028-01-01",
|
|
38138
|
+
"1596000",
|
|
38139
|
+
// $15,960 (2026 guidelines, used for TY2027)
|
|
38140
|
+
"568000",
|
|
38141
|
+
// $5,680 per additional person
|
|
38142
|
+
TIERS_2027,
|
|
38143
|
+
// over 400% FPL → not an applicable taxpayer → $0 credit
|
|
38144
|
+
"cliff",
|
|
38145
|
+
"TY2027: indexed statutory table, the 400% cliff",
|
|
38146
|
+
"For taxable years beginning in 2027 the applicable percentage comes from the indexed statutory table (Rev. Proc. 2026-26 \xA7 3.01: 2.15% under 133% FPL; 3.23\u21924.30 at 133\u2013150; 4.30\u21926.78 at 150\u2013200; 6.78\u21928.66 at 200\u2013250; 8.66\u219210.22 at 250\u2013300; 10.22 at 300\u2013400), and the term 'applicable taxpayer' requires household income that 'does not exceed 400 percent of\u2026 the poverty line' (\xA7 36B(c)(1)(A)). Premium assistance is the lesser of enrollment premiums or the SLCSP benchmark minus the applicable percentage of household income (\xA7 36B(b)(2)). Household income = MAGI + tax-exempt interest + the \xA7 911 exclusion + nontaxable social security (\xA7 36B(d)(2)(B)); poverty line per the 2026 HHS guidelines (91 FR 1797: $15,960 + $5,680/person, 48 contiguous states \u2014 AK/HI not modeled, conservative). Below 100% FPL: $0 (\xA7 36B(c)(1)(A)) \u2014 unless the Marketplace estimated at enrollment that household income would be at least 100% but no more than 400% FPL and advance payments were made (Reg. \xA7 1.36B-2(b)(6)), when the 2.15% first-tier percentage applies. Household income below zero counts as zero (Form 8962 line 3). MFS: $0 (\xA7 36B(c)(1)(C)). From 2027 (OBBBA \xA7 71301, effective for taxable years beginning after December 31, 2026) the credit is limited to eligible individuals as that section defines them (citizens, lawful permanent residents and the other listed groups); the inputs attest that every covered individual qualifies. Excess advance payments are repaid in full (OBBBA \xA7 71305). [Monthly computation annualized; dependents' MAGI and employer-coverage disqualifications attested; Form 8962 rounding may differ sub-dollar; the 2027 Form 8962 is not yet published.]"
|
|
38147
|
+
),
|
|
37812
38148
|
{
|
|
37813
38149
|
id: "us.federal.ptc.net",
|
|
37814
38150
|
version: 1,
|
|
@@ -37933,6 +38269,7 @@ var init_residual = __esm({
|
|
|
37933
38269
|
residualRules = [
|
|
37934
38270
|
householdRule(1, "2025-01-01", "2026-01-01", "280000", "$2,800", "89 FR 85276; 2025 Instructions for Schedule H"),
|
|
37935
38271
|
householdRule(2, "2026-01-01", "2027-01-01", "300000", "$3,000", "90 FR 49047"),
|
|
38272
|
+
householdRule(3, "2027-01-01", "2028-01-01", "310000", "$3,100", "91 FR 67380 (SSA, Cost-of-Living Increase and Other Determinations for 2027)"),
|
|
37936
38273
|
{
|
|
37937
38274
|
id: "us.federal.estimated.required_annual_payment.farmer",
|
|
37938
38275
|
version: 1,
|
|
@@ -38068,6 +38405,8 @@ var init_employer = __esm({
|
|
|
38068
38405
|
employerRules = [
|
|
38069
38406
|
payrollRule(1, "2025-01-01", "2026-01-01", "17610000", "2025", "$176,100"),
|
|
38070
38407
|
payrollRule(2, "2026-01-01", "2027-01-01", "18450000", "2026", "$184,500"),
|
|
38408
|
+
payrollRule(3, "2027-01-01", "2028-01-01", "19230000", "2027", "$192,300"),
|
|
38409
|
+
// 91 FR 67380
|
|
38071
38410
|
{
|
|
38072
38411
|
id: "us.federal.credit.research_asc",
|
|
38073
38412
|
version: 1,
|
|
@@ -38572,7 +38911,9 @@ var init_income = __esm({
|
|
|
38572
38911
|
url: "https://www.law.cornell.edu/uscode/text/26/62",
|
|
38573
38912
|
excerpt: "adjusted gross income means gross income minus\u2026 the deduction allowed by section 164(f) [half of SE tax]\u2026 the deduction allowed by section 223 [HSA]\u2026 the deductions allowed by section 404 [self-employed retirement plans]\u2026 the deduction allowed by section 162(l) [self-employed health insurance]\u2026 the deductions\u2026 [for] expenses\u2026 of eligible educators (\xA7 62(a)(2)(D) \u2014 $300 cap PER ELIGIBLE EDUCATOR for 2025 (an MFJ couple of two educators deducts up to $600: use educatorExpenses for the taxpayer and spouseEducatorExpenses for the spouse, each capped separately), the 2025 indexed amount)\u2026 [and] penalties forfeited because of premature withdrawal of funds from time savings accounts or deposits (\xA7 62(a)(9), uncapped)."
|
|
38574
38913
|
},
|
|
38575
|
-
|
|
38914
|
+
effectiveFrom: "2025-01-01",
|
|
38915
|
+
effectiveTo: "2026-01-01",
|
|
38916
|
+
// the § 62(a)(2)(D) amount is indexed: $350 from 2026 (v6)
|
|
38576
38917
|
output: { type: "money" },
|
|
38577
38918
|
parameters: {
|
|
38578
38919
|
educatorCap: { value: "30000", type: "money" }
|
|
@@ -38603,6 +38944,50 @@ var init_income = __esm({
|
|
|
38603
38944
|
]
|
|
38604
38945
|
}
|
|
38605
38946
|
},
|
|
38947
|
+
{
|
|
38948
|
+
id: "us.federal.above_the_line_adjustments",
|
|
38949
|
+
version: 6,
|
|
38950
|
+
// v5 kept the 2025 $300 educator amount in 2026; Rev. Proc. 2025-32 § 4.12 sets $350 for 2026 and Rev. Proc. 2026-35 § 3.13 keeps $350 for 2027
|
|
38951
|
+
jurisdiction: J17,
|
|
38952
|
+
title: "Above-the-line adjustments before the student-loan deduction (\xBD SE tax + HSA + SEP + SE health insurance + educator + early-withdrawal penalty)",
|
|
38953
|
+
citation: {
|
|
38954
|
+
source: "26 U.S.C. \xA7 62(a)(1), (a)(2)(D), (a)(6), (a)(9), (a)(17), (a)(19)",
|
|
38955
|
+
section: "\xA7 62(a)",
|
|
38956
|
+
url: "https://www.law.cornell.edu/uscode/text/26/62",
|
|
38957
|
+
excerpt: "adjusted gross income means gross income minus\u2026 the deduction allowed by section 164(f) [half of SE tax]\u2026 the deduction allowed by section 223 [HSA]\u2026 the deductions allowed by section 404 [self-employed retirement plans]\u2026 the deduction allowed by section 162(l) [self-employed health insurance]\u2026 the deductions\u2026 [for] expenses\u2026 of eligible educators (\xA7 62(a)(2)(D) \u2014 $350 cap PER ELIGIBLE EDUCATOR for 2026 and 2027 (Rev. Proc. 2025-32 \xA7 4.12; Rev. Proc. 2026-35 \xA7 3.13 \u2014 an MFJ couple of two educators deducts up to $700: use educatorExpenses for the taxpayer and spouseEducatorExpenses for the spouse, each capped separately))\u2026 [and] penalties forfeited because of premature withdrawal of funds from time savings accounts or deposits (\xA7 62(a)(9), uncapped)."
|
|
38958
|
+
},
|
|
38959
|
+
effectiveFrom: "2026-01-01",
|
|
38960
|
+
effectiveTo: "2028-01-01",
|
|
38961
|
+
output: { type: "money" },
|
|
38962
|
+
parameters: {
|
|
38963
|
+
educatorCap: { value: "35000", type: "money" }
|
|
38964
|
+
// $350 (2026 and 2027)
|
|
38965
|
+
},
|
|
38966
|
+
formula: {
|
|
38967
|
+
kind: "add",
|
|
38968
|
+
args: [
|
|
38969
|
+
ruleRef20("us.federal.se_tax_half_deduction"),
|
|
38970
|
+
ruleRef20("us.federal.hsa_deduction"),
|
|
38971
|
+
ruleRef20("us.federal.sep_deduction"),
|
|
38972
|
+
ruleRef20("us.federal.sehi_deduction"),
|
|
38973
|
+
{
|
|
38974
|
+
kind: "min",
|
|
38975
|
+
args: [fact25("educatorExpenses"), { kind: "param", name: "educatorCap" }]
|
|
38976
|
+
},
|
|
38977
|
+
// § 62(a)(2)(D): the $300 cap is PER eligible educator — a spouse who
|
|
38978
|
+
// is also an eligible educator gets their own cap
|
|
38979
|
+
{
|
|
38980
|
+
kind: "min",
|
|
38981
|
+
args: [fact25("spouseEducatorExpenses"), { kind: "param", name: "educatorCap" }]
|
|
38982
|
+
},
|
|
38983
|
+
fact25("earlyWithdrawalPenaltyPaid"),
|
|
38984
|
+
// pre-TCJA § 215/§ 62(a)(10): pre-2019-instrument alimony paid
|
|
38985
|
+
fact25("alimonyPaidPre2019"),
|
|
38986
|
+
// Schedule 1 lines 24a-z write-in adjustments (attested total)
|
|
38987
|
+
fact25("otherAdjustments")
|
|
38988
|
+
]
|
|
38989
|
+
}
|
|
38990
|
+
},
|
|
38606
38991
|
{
|
|
38607
38992
|
id: "us.federal.agi_before_student_loan",
|
|
38608
38993
|
version: 2,
|
|
@@ -38941,6 +39326,7 @@ var init_international = __esm({
|
|
|
38941
39326
|
section250Rule(2, "2026-01-01", void 0, { num: "3334", den: "10000" }, { num: "40", den: "100" }, "TY2026+: 33.34% of FDDEI + 40% of NCTI (OBBBA)", "For taxable years beginning after December 31, 2025 (OBBBA): FDII becomes FOREIGN-DERIVED DEDUCTION ELIGIBLE INCOME and GILTI becomes NET CFC TESTED INCOME, QBAI (the 10% deemed tangible return) is ABOLISHED, and the deduction is 33.34 percent of FDDEI plus 40 percent of NCTI (effective rates 14% and 12.6\u201314%), limited by \xA7 250(a)(2) pro-rata scaling against taxable income computed without this section. [Include the \xA7 78 gross-up in the NCTI input; the 90% NCTI foreign-tax-credit allowance and \xA7 59A BEAT (10.5% from 2026) are not modeled \u2014 disclosed.]"),
|
|
38942
39327
|
eblRule(1, "2025-01-01", "2026-01-01", "31300000", "62600000", "2025 Instructions for Form 461", "2025", "$313,000 ($626,000 for joint returns) for 2025"),
|
|
38943
39328
|
eblRule(2, "2026-01-01", "2027-01-01", "25600000", "51200000", "Rev. Proc. 2025-32 \xA7 3.31", "2026", '"$256,000 ($512,000 for joint returns)" for 2026 (Rev. Proc. 2025-32 \xA7 3.31, verbatim \u2014 a DECREASE from 2025)'),
|
|
39329
|
+
eblRule(3, "2027-01-01", "2028-01-01", "26400000", "52800000", "Rev. Proc. 2026-35 \xA7 3.33", "2027", '"$264,000 ($528,000 for joint returns)" for 2027 (Rev. Proc. 2026-35 \xA7 3.33, verbatim)'),
|
|
38944
39330
|
{
|
|
38945
39331
|
id: "us.federal.corp.gbc_allowed",
|
|
38946
39332
|
version: 2,
|
|
@@ -39218,8 +39604,8 @@ var init_investment_taxes = __esm({
|
|
|
39218
39604
|
},
|
|
39219
39605
|
{
|
|
39220
39606
|
id: "us.federal.additional_medicare_tax",
|
|
39221
|
-
version:
|
|
39222
|
-
// v3 had one self-employed person; Form 8959 line 8 combines both spouses' Schedule SE line 6 on a joint return. v2 rounded once combined; the printed Form 8959 rounds Parts I and II per line
|
|
39607
|
+
version: 5,
|
|
39608
|
+
// v4 counted net earnings under $400, which are not self-employment income (§ 1402(b); Schedule SE line 6 is blank when line 4c is under $400). v3 had one self-employed person; Form 8959 line 8 combines both spouses' Schedule SE line 6 on a joint return. v2 rounded once combined; the printed Form 8959 rounds Parts I and II per line
|
|
39223
39609
|
jurisdiction: "us.federal",
|
|
39224
39610
|
title: "Additional Medicare Tax (0.9%; Form 8959 uses medicareWages box 5 when given, else box-1 wages)",
|
|
39225
39611
|
citation: {
|
|
@@ -39244,11 +39630,21 @@ var init_investment_taxes = __esm({
|
|
|
39244
39630
|
round: "half-up"
|
|
39245
39631
|
});
|
|
39246
39632
|
const wagesPart = pct09({ kind: "max0", arg: { kind: "sub", left: mw, right: amThreshold } });
|
|
39633
|
+
const seIncome = (ruleId) => ({
|
|
39634
|
+
kind: "if",
|
|
39635
|
+
cond: { kind: "cmp", op: "lt", left: ruleRef22(ruleId), right: money24("40000") },
|
|
39636
|
+
then: money24("0"),
|
|
39637
|
+
else: ruleRef22(ruleId)
|
|
39638
|
+
});
|
|
39639
|
+
const line8 = {
|
|
39640
|
+
kind: "add",
|
|
39641
|
+
args: [seIncome("us.federal.se_net_earnings"), seIncome("us.federal.se_net_earnings.spouse")]
|
|
39642
|
+
};
|
|
39247
39643
|
const sePart = pct09({
|
|
39248
39644
|
kind: "max0",
|
|
39249
39645
|
arg: {
|
|
39250
39646
|
kind: "sub",
|
|
39251
|
-
left:
|
|
39647
|
+
left: line8,
|
|
39252
39648
|
right: { kind: "max0", arg: { kind: "sub", left: amThreshold, right: mw } }
|
|
39253
39649
|
}
|
|
39254
39650
|
});
|
|
@@ -39256,7 +39652,7 @@ var init_investment_taxes = __esm({
|
|
|
39256
39652
|
kind: "max0",
|
|
39257
39653
|
arg: {
|
|
39258
39654
|
kind: "sub",
|
|
39259
|
-
left: { kind: "add", args: [mw,
|
|
39655
|
+
left: { kind: "add", args: [mw, line8] },
|
|
39260
39656
|
right: amThreshold
|
|
39261
39657
|
}
|
|
39262
39658
|
});
|
|
@@ -39521,7 +39917,31 @@ var init_ira = __esm({
|
|
|
39521
39917
|
// $129,000
|
|
39522
39918
|
thresholdSpousal: "24200000"
|
|
39523
39919
|
// $242,000
|
|
39524
|
-
}, "Notice 2025-67", "For 2026 the deductible amount rises to $7,500 ($8,600 if age 50+ \u2014 the $1,100 catch-up is the first indexed increase under \xA7 219(b)(5)(C)); phase-out ranges $81,000\u2013$91,000 (single/HoH), $129,000\u2013$149,000 (joint/QSS), $0\u2013$10,000 (MFS \u2014 but \xA7 219(g)(4): an MFS filer who lived apart from the spouse at ALL times during the year is not treated as married, so the single range applies and no spousal attribution occurs; set mfsLivedApartAllYear); $242,000\u2013$252,000 where only the spouse participates.")
|
|
39920
|
+
}, "Notice 2025-67", "For 2026 the deductible amount rises to $7,500 ($8,600 if age 50+ \u2014 the $1,100 catch-up is the first indexed increase under \xA7 219(b)(5)(C)); phase-out ranges $81,000\u2013$91,000 (single/HoH), $129,000\u2013$149,000 (joint/QSS), $0\u2013$10,000 (MFS \u2014 but \xA7 219(g)(4): an MFS filer who lived apart from the spouse at ALL times during the year is not treated as married, so the single range applies and no spousal attribution occurs; set mfsLivedApartAllYear); $242,000\u2013$252,000 where only the spouse participates."),
|
|
39921
|
+
{
|
|
39922
|
+
id: "us.federal.ira_deduction",
|
|
39923
|
+
version: 4,
|
|
39924
|
+
jurisdiction: J19,
|
|
39925
|
+
title: "Traditional IRA deduction (TY2027: the \xA7 219 amounts are not yet published)",
|
|
39926
|
+
citation: {
|
|
39927
|
+
source: "26 U.S.C. \xA7 219(b)(5), (g)",
|
|
39928
|
+
section: "\xA7 219(b)(5)(C), (D); \xA7 219(g)(8)",
|
|
39929
|
+
url: "https://www.law.cornell.edu/uscode/text/26/219",
|
|
39930
|
+
excerpt: "The deductible amount, its catch-up and the active-participant phase-out ranges are inflation-adjusted each year (\xA7 219(b)(5)(C)\u2013(D), (g)(8)); the IRS publishes the 2027 amounts in its annual retirement-plan cost-of-living notice, which is not yet out. A 2027 return with a traditional IRA contribution refuses rather than guess; with none, the deduction is $0."
|
|
39931
|
+
},
|
|
39932
|
+
effectiveFrom: "2027-01-01",
|
|
39933
|
+
effectiveTo: "2028-01-01",
|
|
39934
|
+
output: { type: "money" },
|
|
39935
|
+
formula: {
|
|
39936
|
+
kind: "if",
|
|
39937
|
+
cond: { kind: "cmp", op: "gt", left: fact28("iraContribution"), right: { kind: "money", cents: "0" } },
|
|
39938
|
+
then: {
|
|
39939
|
+
kind: "unsupported",
|
|
39940
|
+
reason: "the 2027 IRA deduction limits and phase-out ranges are not yet published by the IRS \u2014 a 2027 traditional IRA contribution is not modeled until they are"
|
|
39941
|
+
},
|
|
39942
|
+
else: { kind: "money", cents: "0" }
|
|
39943
|
+
}
|
|
39944
|
+
}
|
|
39525
39945
|
];
|
|
39526
39946
|
}
|
|
39527
39947
|
});
|
|
@@ -39738,6 +40158,14 @@ var init_itemized = __esm({
|
|
|
39738
40158
|
{ cap: "4040000", threshold: "50500000", thresholdMfs: "25250000" },
|
|
39739
40159
|
{ year: "2026", cap: "$40,400", capHalf: "20,200", threshold: "$505,000" }
|
|
39740
40160
|
),
|
|
40161
|
+
saltRule(
|
|
40162
|
+
5,
|
|
40163
|
+
"2027-01-01",
|
|
40164
|
+
"2028-01-01",
|
|
40165
|
+
// § 164(b)(7)(A)(iii), (B)(ii)(III): 101 percent of the 2026 amounts
|
|
40166
|
+
{ cap: "4080400", threshold: "51005000", thresholdMfs: "25502500" },
|
|
40167
|
+
{ year: "2027", cap: "$40,804", capHalf: "20,402", threshold: "$510,050" }
|
|
40168
|
+
),
|
|
39741
40169
|
{
|
|
39742
40170
|
id: "us.federal.mortgage_interest_deduction",
|
|
39743
40171
|
version: 1,
|
|
@@ -39888,17 +40316,60 @@ var init_itemized = __esm({
|
|
|
39888
40316
|
]
|
|
39889
40317
|
}
|
|
39890
40318
|
},
|
|
40319
|
+
{
|
|
40320
|
+
id: "us.federal.gambling_loss_deduction",
|
|
40321
|
+
version: 1,
|
|
40322
|
+
jurisdiction: J21,
|
|
40323
|
+
title: "Gambling loss deduction (\xA7 165(d), Schedule A line 16; TY2025: the attested winnings-limited amount)",
|
|
40324
|
+
citation: {
|
|
40325
|
+
source: "26 U.S.C. \xA7 165(d) (as in effect for 2025)",
|
|
40326
|
+
section: "\xA7 165(d)",
|
|
40327
|
+
url: "https://www.law.cornell.edu/uscode/text/26/165",
|
|
40328
|
+
excerpt: "'Losses from wagering transactions shall be allowed only to the extent of the gains from such transactions' (\xA7 165(d) before OBBBA \xA7 70114, which applies to taxable years beginning after December 31, 2025). The input attests the winnings-limited amount."
|
|
40329
|
+
},
|
|
40330
|
+
effectiveFrom: "2025-01-01",
|
|
40331
|
+
effectiveTo: "2026-01-01",
|
|
40332
|
+
output: { type: "money" },
|
|
40333
|
+
formula: fact30("gamblingLossesItemized")
|
|
40334
|
+
},
|
|
40335
|
+
{
|
|
40336
|
+
id: "us.federal.gambling_loss_deduction",
|
|
40337
|
+
version: 2,
|
|
40338
|
+
jurisdiction: J21,
|
|
40339
|
+
title: "Gambling loss deduction (\xA7 165(d) as amended by OBBBA: 90 percent of losses, limited to winnings)",
|
|
40340
|
+
citation: {
|
|
40341
|
+
source: "26 U.S.C. \xA7 165(d), as amended by Pub. L. 119-21 (OBBBA) \xA7 70114",
|
|
40342
|
+
section: "\xA7 165(d)(1)",
|
|
40343
|
+
url: "https://www.law.cornell.edu/uscode/text/26/165",
|
|
40344
|
+
excerpt: "For purposes of losses from wagering transactions, the amount allowed as a deduction for any taxable year\u2014 '(A) shall be equal to 90 percent of the amount of such losses during such taxable year, and (B) shall be allowed only to the extent of the gains from such transactions during such taxable year' (\xA7 165(d)(1)); 'losses from wagering transactions' includes any deduction otherwise allowable incurred in carrying on any wagering transaction (\xA7 165(d)(2)). Effective for taxable years beginning after December 31, 2025 (OBBBA \xA7 70114(b))."
|
|
40345
|
+
},
|
|
40346
|
+
effectiveFrom: "2026-01-01",
|
|
40347
|
+
// permanent: open-ended
|
|
40348
|
+
output: { type: "money" },
|
|
40349
|
+
formula: {
|
|
40350
|
+
kind: "if",
|
|
40351
|
+
cond: { kind: "cmp", op: "gt", left: fact30("gamblingLossesItemized"), right: zero18 },
|
|
40352
|
+
then: {
|
|
40353
|
+
kind: "min",
|
|
40354
|
+
args: [
|
|
40355
|
+
{ kind: "mulRate", base: fact30("gamblingLossesItemized"), rate: { num: "90", den: "100" }, round: "half-up" },
|
|
40356
|
+
fact30("gamblingWinnings")
|
|
40357
|
+
]
|
|
40358
|
+
},
|
|
40359
|
+
else: zero18
|
|
40360
|
+
}
|
|
40361
|
+
},
|
|
39891
40362
|
{
|
|
39892
40363
|
id: "us.federal.itemized_deductions_before_limitation",
|
|
39893
|
-
version:
|
|
39894
|
-
//
|
|
40364
|
+
version: 5,
|
|
40365
|
+
// v4 added the attested gambling loss fact at 100% in every year; v5 takes us.federal.gambling_loss_deduction (90% from 2026). v2 lacked investment interest (§ 163(d)) and noncash charitable
|
|
39895
40366
|
jurisdiction: J21,
|
|
39896
40367
|
title: "Itemized deductions before the \xA7 68 overall limitation (SALT + mortgage + charitable cash/noncash + medical + casualty + investment interest + gambling losses)",
|
|
39897
40368
|
citation: {
|
|
39898
40369
|
source: "26 U.S.C. \xA7 63(d)",
|
|
39899
40370
|
section: "\xA7 63(d)",
|
|
39900
40371
|
url: "https://www.law.cornell.edu/uscode/text/26/63",
|
|
39901
|
-
excerpt: "'Itemized deductions' means the deductions allowable under this chapter other than (1) the deductions allowable in arriving at adjusted gross income, and (2) any deduction referred to in any paragraph of subsection (b). [Modeled Schedule A lines: taxes (\xA7 164), home mortgage interest (\xA7 163(h)), gifts to charity (\xA7 170) \u2014 cash via the limited charitable rule, noncash as the attested-allowed Form 8283 amount \u2014 medical (\xA7 213), casualty losses (\xA7 165(h), Form 4684), investment interest (\xA7 163(d)) as the attested post-Form-4952 allowed amount, and gambling losses (\xA7 165(d), Schedule A line 16)
|
|
40372
|
+
excerpt: "'Itemized deductions' means the deductions allowable under this chapter other than (1) the deductions allowable in arriving at adjusted gross income, and (2) any deduction referred to in any paragraph of subsection (b). [Modeled Schedule A lines: taxes (\xA7 164), home mortgage interest (\xA7 163(h)), gifts to charity (\xA7 170) \u2014 cash via the limited charitable rule, noncash as the attested-allowed Form 8283 amount \u2014 medical (\xA7 213), casualty losses (\xA7 165(h), Form 4684), investment interest (\xA7 163(d)) as the attested post-Form-4952 allowed amount, and gambling losses (\xA7 165(d), Schedule A line 16) from us.federal.gambling_loss_deduction (TY2025: the attested winnings-limited amount; TY2026+: 90 percent of the losses, limited to the winnings). Other miscellaneous itemized deductions are not modeled \u2014 conservative.]"
|
|
39902
40373
|
},
|
|
39903
40374
|
effectiveFrom: "2025-01-01",
|
|
39904
40375
|
// structural: open-ended
|
|
@@ -39913,7 +40384,7 @@ var init_itemized = __esm({
|
|
|
39913
40384
|
ruleRef24("us.federal.medical_expense_deduction"),
|
|
39914
40385
|
ruleRef24("us.federal.casualty_loss_deduction"),
|
|
39915
40386
|
fact30("investmentInterestDeduction"),
|
|
39916
|
-
|
|
40387
|
+
ruleRef24("us.federal.gambling_loss_deduction"),
|
|
39917
40388
|
fact30("otherItemizedDeductions")
|
|
39918
40389
|
]
|
|
39919
40390
|
}
|
|
@@ -40021,6 +40492,93 @@ var init_itemized = __esm({
|
|
|
40021
40492
|
};
|
|
40022
40493
|
})()
|
|
40023
40494
|
},
|
|
40495
|
+
{
|
|
40496
|
+
id: "us.federal.itemized_deductions",
|
|
40497
|
+
version: 3,
|
|
40498
|
+
jurisdiction: J21,
|
|
40499
|
+
title: "Itemized deductions after the \xA7 68 overall limitation (TY2027: 2/37 of the amount over the 37% bracket)",
|
|
40500
|
+
citation: {
|
|
40501
|
+
source: "26 U.S.C. \xA7 68, as amended by Pub. L. 119-21 (OBBBA) \xA7 70111; Rev. Proc. 2026-35 \xA7 3.01",
|
|
40502
|
+
section: "\xA7 68(a), (b)",
|
|
40503
|
+
url: "https://www.law.cornell.edu/uscode/text/26/68",
|
|
40504
|
+
excerpt: "For taxable years beginning after December 31, 2025, itemized deductions are reduced by 2/37 of the lesser of (1) such amount of itemized deductions, or (2) so much of the taxable income of the taxpayer for the taxable year (determined without regard to this section and increased by such amount of itemized deductions) as exceeds the dollar amount at which the 37 percent rate bracket under section 1 begins (Rev. Proc. 2026-35 \xA7 3.01: $661,375 single, $661,350 head of household, $793,650 MFJ/QSS, $396,825 MFS for 2027); applied after the application of any other limitation (\xA7 68(b)). [The taxable-income term nets out every deduction except the itemized deductions themselves; the \xA7 199A interaction is NOT modeled \u2014 when both would apply, this rule refuses rather than guess.]"
|
|
40505
|
+
},
|
|
40506
|
+
effectiveFrom: "2027-01-01",
|
|
40507
|
+
effectiveTo: "2028-01-01",
|
|
40508
|
+
// the 37%-bracket start is indexed
|
|
40509
|
+
output: { type: "money" },
|
|
40510
|
+
formula: (() => {
|
|
40511
|
+
const itemizedPre = ruleRef24("us.federal.itemized_deductions_before_limitation");
|
|
40512
|
+
const tiIncreased = {
|
|
40513
|
+
kind: "max0",
|
|
40514
|
+
arg: {
|
|
40515
|
+
kind: "sub",
|
|
40516
|
+
left: agi,
|
|
40517
|
+
right: {
|
|
40518
|
+
kind: "add",
|
|
40519
|
+
args: [
|
|
40520
|
+
ruleRef24("us.federal.senior_deduction"),
|
|
40521
|
+
ruleRef24("us.federal.tips_deduction"),
|
|
40522
|
+
ruleRef24("us.federal.overtime_deduction"),
|
|
40523
|
+
ruleRef24("us.federal.car_loan_interest_deduction")
|
|
40524
|
+
]
|
|
40525
|
+
}
|
|
40526
|
+
}
|
|
40527
|
+
};
|
|
40528
|
+
const bracket37Start = {
|
|
40529
|
+
kind: "match",
|
|
40530
|
+
on: fact30("filingStatus"),
|
|
40531
|
+
cases: [
|
|
40532
|
+
{ when: "single", value: money27("66137500") },
|
|
40533
|
+
// $661,375
|
|
40534
|
+
{ when: "hoh", value: money27("66135000") },
|
|
40535
|
+
// $661,350
|
|
40536
|
+
{ when: "mfj", value: money27("79365000") },
|
|
40537
|
+
// $793,650
|
|
40538
|
+
{ when: "qss", value: money27("79365000") },
|
|
40539
|
+
// $793,650
|
|
40540
|
+
{ when: "mfs", value: money27("39682500") }
|
|
40541
|
+
// $396,825
|
|
40542
|
+
]
|
|
40543
|
+
};
|
|
40544
|
+
const reductionBase = {
|
|
40545
|
+
kind: "min",
|
|
40546
|
+
args: [
|
|
40547
|
+
itemizedPre,
|
|
40548
|
+
{ kind: "max0", arg: { kind: "sub", left: tiIncreased, right: bracket37Start } }
|
|
40549
|
+
]
|
|
40550
|
+
};
|
|
40551
|
+
return {
|
|
40552
|
+
kind: "if",
|
|
40553
|
+
cond: {
|
|
40554
|
+
kind: "and",
|
|
40555
|
+
args: [
|
|
40556
|
+
{
|
|
40557
|
+
kind: "cmp",
|
|
40558
|
+
op: "gt",
|
|
40559
|
+
left: ruleRef24("us.federal.se_net_profit"),
|
|
40560
|
+
right: zero18
|
|
40561
|
+
},
|
|
40562
|
+
{ kind: "cmp", op: "gt", left: reductionBase, right: zero18 }
|
|
40563
|
+
]
|
|
40564
|
+
},
|
|
40565
|
+
then: {
|
|
40566
|
+
kind: "unsupported",
|
|
40567
|
+
reason: "the \xA7 68 overall limitation and the \xA7 199A deduction interact through the taxable-income term \u2014 this combination is not modeled yet"
|
|
40568
|
+
},
|
|
40569
|
+
else: {
|
|
40570
|
+
kind: "sub",
|
|
40571
|
+
left: itemizedPre,
|
|
40572
|
+
right: {
|
|
40573
|
+
kind: "mulRate",
|
|
40574
|
+
base: reductionBase,
|
|
40575
|
+
rate: { num: "2", den: "37" },
|
|
40576
|
+
round: "half-up"
|
|
40577
|
+
}
|
|
40578
|
+
}
|
|
40579
|
+
};
|
|
40580
|
+
})()
|
|
40581
|
+
},
|
|
40024
40582
|
{
|
|
40025
40583
|
id: "us.federal.deduction_election",
|
|
40026
40584
|
version: 3,
|
|
@@ -40178,12 +40736,41 @@ var init_kiddie = __esm({
|
|
|
40178
40736
|
]
|
|
40179
40737
|
}
|
|
40180
40738
|
},
|
|
40739
|
+
{
|
|
40740
|
+
id: "us.federal.kiddie.net_unearned_income",
|
|
40741
|
+
version: 2,
|
|
40742
|
+
jurisdiction: J22,
|
|
40743
|
+
title: "Net unearned income of a \xA7 1(g) child (TY2027)",
|
|
40744
|
+
citation: {
|
|
40745
|
+
...CITE4,
|
|
40746
|
+
section: "\xA7 1(g)(4); Rev. Proc. 2026-35 \xA7 3.02",
|
|
40747
|
+
excerpt: "\u2026the excess of the portion of adjusted gross income\u2026 not attributable to earned income, over the sum of the amount in effect under section 63(c)(5)(A) ($1,400 for taxable years beginning in 2027 \u2014 Rev. Proc. 2026-35 \xA7 3.02: 'the amount in \xA7 1(g)(4)(A)(ii)(I)\u2026 is $1,400') plus the greater of that amount or the itemized deductions directly connected \u2014 $2,800 with none such (child itemized deductions not modeled); shall not exceed the child's taxable income. [Unearned income \u2248 taxable interest \u2014 the child's capital gains refuse in the tax rule; disclosed.]"
|
|
40748
|
+
},
|
|
40749
|
+
effectiveFrom: "2027-01-01",
|
|
40750
|
+
effectiveTo: "2028-01-01",
|
|
40751
|
+
output: { type: "money" },
|
|
40752
|
+
parameters: {
|
|
40753
|
+
threshold: { value: "280000", type: "money" }
|
|
40754
|
+
// $2,800 = 2 × $1,400
|
|
40755
|
+
},
|
|
40756
|
+
formula: {
|
|
40757
|
+
kind: "min",
|
|
40758
|
+
args: [
|
|
40759
|
+
{
|
|
40760
|
+
kind: "max0",
|
|
40761
|
+
arg: { kind: "sub", left: fact31("taxableInterest"), right: param17("threshold") }
|
|
40762
|
+
},
|
|
40763
|
+
ruleRef25("us.federal.taxable_income")
|
|
40764
|
+
]
|
|
40765
|
+
}
|
|
40766
|
+
},
|
|
40181
40767
|
// v3/v4: the § 1(g) capital-gains refusal guard also catches the standalone qualifiedDividends fact
|
|
40182
40768
|
// v5/v6: the refusal guard also catches shortTermCapitalGains/ordinaryDividends (unearned income
|
|
40183
40769
|
// the "unearned income ≈ taxable interest" approximation in net_unearned_income would otherwise drop)
|
|
40184
40770
|
// v5/v6: the refusal guard predated the per-bucket capital-loss facts and netCapitalLoss
|
|
40185
40771
|
kiddieTaxRule(7, "2025-01-01", "2026-01-01", "2025"),
|
|
40186
40772
|
kiddieTaxRule(8, "2026-01-01", "2027-01-01", "2026"),
|
|
40773
|
+
kiddieTaxRule(9, "2027-01-01", "2028-01-01", "2027"),
|
|
40187
40774
|
{
|
|
40188
40775
|
id: "us.federal.income_tax_before_credits.kiddie",
|
|
40189
40776
|
version: 1,
|
|
@@ -40200,6 +40787,23 @@ var init_kiddie = __esm({
|
|
|
40200
40787
|
applicability: fact31("isSubjectToKiddieTax"),
|
|
40201
40788
|
formula: ruleRef25("us.federal.kiddie_tax"),
|
|
40202
40789
|
overrides: { ruleId: "us.federal.income_tax_before_credits", priority: 20 }
|
|
40790
|
+
},
|
|
40791
|
+
{
|
|
40792
|
+
id: "us.federal.income_tax_before_credits.kiddie",
|
|
40793
|
+
version: 2,
|
|
40794
|
+
jurisdiction: J22,
|
|
40795
|
+
title: "\xA7 1(g) override: a kiddie child's income tax is the Form 8615 tax",
|
|
40796
|
+
citation: {
|
|
40797
|
+
...CITE4,
|
|
40798
|
+
section: "\xA7 1(g)(1)",
|
|
40799
|
+
excerpt: "In the case of any child to whom this subsection applies, the tax imposed by this section shall be equal to the greater of [the regular tax or the Form 8615 sum] \u2014 this override replaces the ordinary income-tax computation (including the Tax Table method, which the Form 8615 computation applies internally)."
|
|
40800
|
+
},
|
|
40801
|
+
effectiveFrom: "2027-01-01",
|
|
40802
|
+
effectiveTo: "2028-01-01",
|
|
40803
|
+
output: { type: "money" },
|
|
40804
|
+
applicability: fact31("isSubjectToKiddieTax"),
|
|
40805
|
+
formula: ruleRef25("us.federal.kiddie_tax"),
|
|
40806
|
+
overrides: { ruleId: "us.federal.income_tax_before_credits", priority: 20 }
|
|
40203
40807
|
}
|
|
40204
40808
|
];
|
|
40205
40809
|
}
|
|
@@ -40458,7 +41062,66 @@ var init_passive_losses = __esm({
|
|
|
40458
41062
|
];
|
|
40459
41063
|
mileageRules = [
|
|
40460
41064
|
mileageRule(1, "2025-01-01", "2026-01-01", "700", "70 cents", "Notice 2025-5"),
|
|
40461
|
-
|
|
41065
|
+
{
|
|
41066
|
+
id: "us.federal.vehicle_standard_mileage",
|
|
41067
|
+
version: 3,
|
|
41068
|
+
// v2 applied 72.5¢ to every 2026 mile; Announcement 2026-11 raised the rate to 76¢ from July 1, 2026
|
|
41069
|
+
jurisdiction: J23,
|
|
41070
|
+
title: "Business standard mileage deduction (2026: 72.5 cents/mile through June 30, 76 cents/mile from July 1)",
|
|
41071
|
+
citation: {
|
|
41072
|
+
source: "Notice 2026-10; Announcement 2026-11 (2026-29 I.R.B.); Rev. Proc. 2019-46",
|
|
41073
|
+
section: "Announcement 2026-11",
|
|
41074
|
+
url: "https://www.irs.gov/irb/2026-29_irb",
|
|
41075
|
+
excerpt: "Notice 2026-10 set the 2026 business standard mileage rate at 72.5 cents per mile. Announcement 2026-11 revised it: 'The revised standard mileage rates are: (1) Business 76 cents per mile' and they 'apply to deductible transportation expenses paid or incurred for business\u2026 on or after July 1, 2026'; 'The standard mileage rates set forth in Notice 2026-10 continue to apply to deductible transportation expenses paid or incurred\u2026 before July 1, 2026.' [A STANDALONE determination in lieu of actual vehicle expenses (Rev. Proc. 2019-46 rules attested): subtract the result from your Schedule C profit yourself \u2014 it changes SE tax and QBI.]"
|
|
41076
|
+
},
|
|
41077
|
+
effectiveFrom: "2026-01-01",
|
|
41078
|
+
effectiveTo: "2027-01-01",
|
|
41079
|
+
output: { type: "money" },
|
|
41080
|
+
formula: {
|
|
41081
|
+
kind: "if",
|
|
41082
|
+
cond: {
|
|
41083
|
+
kind: "cmp",
|
|
41084
|
+
op: "gt",
|
|
41085
|
+
left: fact32("businessMilesDriven"),
|
|
41086
|
+
right: { kind: "int", value: "0" }
|
|
41087
|
+
},
|
|
41088
|
+
then: {
|
|
41089
|
+
kind: "if",
|
|
41090
|
+
cond: {
|
|
41091
|
+
kind: "cmp",
|
|
41092
|
+
op: "gt",
|
|
41093
|
+
left: fact32("businessMilesDrivenFromJuly"),
|
|
41094
|
+
right: fact32("businessMilesDriven")
|
|
41095
|
+
},
|
|
41096
|
+
then: {
|
|
41097
|
+
kind: "unsupported",
|
|
41098
|
+
reason: "businessMilesDrivenFromJuly is part of businessMilesDriven and cannot exceed it"
|
|
41099
|
+
},
|
|
41100
|
+
else: {
|
|
41101
|
+
kind: "add",
|
|
41102
|
+
args: [
|
|
41103
|
+
{
|
|
41104
|
+
kind: "mulRate",
|
|
41105
|
+
base: {
|
|
41106
|
+
kind: "mulInt",
|
|
41107
|
+
base: money29("100"),
|
|
41108
|
+
count: { kind: "sub", left: fact32("businessMilesDriven"), right: fact32("businessMilesDrivenFromJuly") }
|
|
41109
|
+
},
|
|
41110
|
+
rate: { num: "725", den: "1000" },
|
|
41111
|
+
round: "half-up"
|
|
41112
|
+
},
|
|
41113
|
+
{
|
|
41114
|
+
kind: "mulRate",
|
|
41115
|
+
base: { kind: "mulInt", base: money29("100"), count: fact32("businessMilesDrivenFromJuly") },
|
|
41116
|
+
rate: { num: "760", den: "1000" },
|
|
41117
|
+
round: "half-up"
|
|
41118
|
+
}
|
|
41119
|
+
]
|
|
41120
|
+
}
|
|
41121
|
+
},
|
|
41122
|
+
else: money29("0")
|
|
41123
|
+
}
|
|
41124
|
+
}
|
|
40462
41125
|
];
|
|
40463
41126
|
}
|
|
40464
41127
|
});
|
|
@@ -40719,7 +41382,7 @@ var init_rental = __esm({
|
|
|
40719
41382
|
});
|
|
40720
41383
|
|
|
40721
41384
|
// ../corpus-us-federal/dist/rules/residential-energy.js
|
|
40722
|
-
var J26, FROM15, TY20253, TERMINATED, fact35, money32, ruleRef30, param18, zero23, gt09, add4, sub4, min3, max05, pctOf2, limitBase2, F5695_2025, URL_25D, URL_25C, URL_I5695, line, cleanRate, improvementRate, actcMaximum, worksheetBApplies, residentialEnergyRules;
|
|
41385
|
+
var J26, FROM15, TY20253, TERMINATED, fact35, money32, ruleRef30, param18, zero23, gt09, add4, sub4, min3, max05, pctOf2, limitBase2, F5695_2025, URL_25D, URL_25C, URL_I5695, line, cleanRate, improvementRate, actcMaximum, actcMaximum2027, worksheetBApplies, residentialEnergyRules;
|
|
40723
41386
|
var init_residential_energy = __esm({
|
|
40724
41387
|
"../corpus-us-federal/dist/rules/residential-energy.js"() {
|
|
40725
41388
|
"use strict";
|
|
@@ -40793,7 +41456,9 @@ var init_residential_energy = __esm({
|
|
|
40793
41456
|
url: "https://www.irs.gov/instructions/i1040s8",
|
|
40794
41457
|
excerpt: "Worksheet B line 2: number of qualifying children under age 17 with the required social security number \xD7 $1,700; line 4: earned income over $2,500; line 5: 15% of line 4; line 13: the smaller of line 2 or line 12. [Line 12 is the larger of line 5 and the 3+-child social security tax alternative (lines 6\u201311), which is NOT modeled \u2014 it can only raise the maximum at very low earned income; disclosed. Earned income approximated as wages + self-employment earnings net of the \xBD SE deduction, less a Schedule C net loss.]"
|
|
40795
41458
|
},
|
|
40796
|
-
|
|
41459
|
+
effectiveFrom: "2025-01-01",
|
|
41460
|
+
effectiveTo: "2027-01-01",
|
|
41461
|
+
// the § 24(h)(5) amount is indexed: $1,800 for 2027 (v2)
|
|
40797
41462
|
output: { type: "money" },
|
|
40798
41463
|
parameters: {
|
|
40799
41464
|
refundableCapPerChild: { value: "170000", type: "money" },
|
|
@@ -40808,6 +41473,33 @@ var init_residential_energy = __esm({
|
|
|
40808
41473
|
round: "half-up"
|
|
40809
41474
|
})
|
|
40810
41475
|
};
|
|
41476
|
+
actcMaximum2027 = {
|
|
41477
|
+
id: `${J26}.actc.maximum`,
|
|
41478
|
+
version: 2,
|
|
41479
|
+
jurisdiction: J26,
|
|
41480
|
+
title: "Maximum additional child tax credit (Schedule 8812 Credit Limit Worksheet B, line 13; TY2027)",
|
|
41481
|
+
citation: {
|
|
41482
|
+
source: "26 U.S.C. \xA7 24(d)(1), (h)(5); Rev. Proc. 2026-35 \xA7 3.05(2); Credit Limit Worksheet B as in the 2025 Instructions for Schedule 8812",
|
|
41483
|
+
section: "\xA7 24(d)(1)(B)(i); \xA7 24(h)(5)",
|
|
41484
|
+
url: "https://www.irs.gov/instructions/i1040s8",
|
|
41485
|
+
excerpt: "Worksheet B line 2: number of qualifying children under age 17 with the required social security number \xD7 $1,800 (the 2027 \xA7 24(d)(1)(A) amount, Rev. Proc. 2026-35 \xA7 3.05(2)); line 4: earned income over $2,500; line 5: 15% of line 4; line 13: the smaller of line 2 or line 12. [Line 12 is the larger of line 5 and the 3+-child social security tax alternative (lines 6\u201311), which is NOT modeled \u2014 it can only raise the maximum at very low earned income; disclosed. Earned income approximated as wages + self-employment earnings net of the \xBD SE deduction, less a Schedule C net loss.]"
|
|
41486
|
+
},
|
|
41487
|
+
effectiveFrom: "2027-01-01",
|
|
41488
|
+
effectiveTo: "2028-01-01",
|
|
41489
|
+
output: { type: "money" },
|
|
41490
|
+
parameters: {
|
|
41491
|
+
refundableCapPerChild: { value: "180000", type: "money" },
|
|
41492
|
+
// $1,800 (2027)
|
|
41493
|
+
earnedIncomeFloor: { value: "250000", type: "money" }
|
|
41494
|
+
// $2,500
|
|
41495
|
+
},
|
|
41496
|
+
formula: min3({ kind: "mulInt", base: param18("refundableCapPerChild"), count: fact35("qualifyingChildren") }, {
|
|
41497
|
+
kind: "mulRate",
|
|
41498
|
+
base: max05(sub4(add4(fact35("wages"), max05(sub4(ruleRef30("us.federal.se_net_profit"), ruleRef30("us.federal.se_tax_half_deduction")))), add4(param18("earnedIncomeFloor"), fact35("scheduleCNetLoss")))),
|
|
41499
|
+
rate: { num: "15", den: "100" },
|
|
41500
|
+
round: "half-up"
|
|
41501
|
+
})
|
|
41502
|
+
};
|
|
40811
41503
|
worksheetBApplies = {
|
|
40812
41504
|
id: `${J26}.energy.clean.worksheet_b_applies`,
|
|
40813
41505
|
version: 1,
|
|
@@ -40887,6 +41579,7 @@ var init_residential_energy = __esm({
|
|
|
40887
41579
|
excerpt: "Line 13: 'Add lines 6b, 11, and 12'."
|
|
40888
41580
|
}, add4(ruleRef30(`${J26}.energy.clean.line6b`), ruleRef30(`${J26}.energy.clean.line11`), ruleRef30(`${J26}.energy.clean.line12`))),
|
|
40889
41581
|
actcMaximum,
|
|
41582
|
+
actcMaximum2027,
|
|
40890
41583
|
worksheetBApplies,
|
|
40891
41584
|
line("clean.ctc_for_limit", "Child tax credit amount subtracted in the Form 5695 line 14 and Form 8839 line 17 worksheets (Form 1040 line 19, or Schedule 8812 Worksheet B line 14)", {
|
|
40892
41585
|
source: "2025 Instructions for Form 5695, Residential Clean Energy Credit Limit Worksheet\u2014Line 14, footnote; 2025 Instructions for Schedule 8812, Credit Limit Worksheet B line 14",
|
|
@@ -54549,6 +55242,32 @@ var init_qbi_businesses = __esm({
|
|
|
54549
55242
|
]
|
|
54550
55243
|
}
|
|
54551
55244
|
},
|
|
55245
|
+
{
|
|
55246
|
+
id: `${J29}.qbi.threshold`,
|
|
55247
|
+
version: 3,
|
|
55248
|
+
jurisdiction: J29,
|
|
55249
|
+
title: "\xA7 199A threshold amount (TY2027)",
|
|
55250
|
+
citation: {
|
|
55251
|
+
source: "26 U.S.C. \xA7 199A(e)(2); Rev. Proc. 2026-35 \xA7 3.28(1)",
|
|
55252
|
+
section: "\xA7 199A(e)(2)",
|
|
55253
|
+
url: CORNELL,
|
|
55254
|
+
excerpt: "For taxable years beginning in 2027, the threshold amounts under \xA7 199A(e)(2) are $416,600 (married filing jointly), $208,325 (married filing separately) and $208,300 (all other returns); the phase-in range ends at $566,600, $283,325 and $283,300 (Rev. Proc. 2026-35 \xA7 3.28(1))."
|
|
55255
|
+
},
|
|
55256
|
+
effectiveFrom: "2027-01-01",
|
|
55257
|
+
effectiveTo: "2028-01-01",
|
|
55258
|
+
output: { type: "money" },
|
|
55259
|
+
formula: {
|
|
55260
|
+
kind: "match",
|
|
55261
|
+
on: fact39("filingStatus"),
|
|
55262
|
+
cases: [
|
|
55263
|
+
{ when: "mfj", value: money36("41660000") },
|
|
55264
|
+
{ when: "mfs", value: money36("20832500") },
|
|
55265
|
+
{ when: "single", value: money36("20830000") },
|
|
55266
|
+
{ when: "hoh", value: money36("20830000") },
|
|
55267
|
+
{ when: "qss", value: money36("20830000") }
|
|
55268
|
+
]
|
|
55269
|
+
}
|
|
55270
|
+
},
|
|
54552
55271
|
{
|
|
54553
55272
|
id: `${J29}.qbi.phase_in_range`,
|
|
54554
55273
|
version: 1,
|
|
@@ -54581,6 +55300,22 @@ var init_qbi_businesses = __esm({
|
|
|
54581
55300
|
output: { type: "money" },
|
|
54582
55301
|
formula: iff23(isStatus32("mfj"), money36("15000000"), money36("7500000"))
|
|
54583
55302
|
},
|
|
55303
|
+
{
|
|
55304
|
+
id: `${J29}.qbi.phase_in_range`,
|
|
55305
|
+
version: 3,
|
|
55306
|
+
jurisdiction: J29,
|
|
55307
|
+
title: "\xA7 199A phase-in range (TY2027: $75,000, $150,000 joint \u2014 OBBBA \xA7 70105)",
|
|
55308
|
+
citation: {
|
|
55309
|
+
source: "26 U.S.C. \xA7 199A(b)(3)(B), (d)(3) as amended by OBBBA \xA7 70105; Rev. Proc. 2026-35 \xA7 3.28(1)",
|
|
55310
|
+
section: "\xA7 199A(b)(3)(B)(ii)(II)",
|
|
55311
|
+
url: CORNELL,
|
|
55312
|
+
excerpt: "For taxable years beginning after December 31, 2025, the phase-in range is $75,000 ($150,000 for a joint return)."
|
|
55313
|
+
},
|
|
55314
|
+
effectiveFrom: "2027-01-01",
|
|
55315
|
+
effectiveTo: "2028-01-01",
|
|
55316
|
+
output: { type: "money" },
|
|
55317
|
+
formula: iff23(isStatus32("mfj"), money36("15000000"), money36("7500000"))
|
|
55318
|
+
},
|
|
54584
55319
|
rule(`${J29}.qbi.excess_over_threshold`, "Taxable income before the QBI deduction over the \xA7 199A threshold (Form 8995-A line 22)", "\xA7 199A(b)(3)(B)", CORNELL, "Form 8995-A Part III line 22: subtract line 21 (threshold) from line 20 (taxable income before qualified business income deduction). [Zero at or below the threshold.]", "money", max027(sub28(ruleRef33(`${J29}.taxable_income_before_qbi`), ruleRef33(`${J29}.qbi.threshold`))))
|
|
54585
55320
|
];
|
|
54586
55321
|
scheduleALines = [
|
|
@@ -54628,7 +55363,7 @@ var init_qbi_businesses = __esm({
|
|
|
54628
55363
|
});
|
|
54629
55364
|
|
|
54630
55365
|
// ../corpus-us-federal/dist/rules/qbi.js
|
|
54631
|
-
function qbiRule(version2, effectiveFrom, effectiveTo, yearLabel, source,
|
|
55366
|
+
function qbiRule(version2, effectiveFrom, effectiveTo, yearLabel, source, minimum) {
|
|
54632
55367
|
const overall = pctOf3("20", "100", {
|
|
54633
55368
|
kind: "max0",
|
|
54634
55369
|
arg: {
|
|
@@ -54641,8 +55376,8 @@ function qbiRule(version2, effectiveFrom, effectiveTo, yearLabel, source, withMi
|
|
|
54641
55376
|
}
|
|
54642
55377
|
});
|
|
54643
55378
|
const limited = { kind: "min", args: [ruleRef34("us.federal.qbi.total_component"), overall] };
|
|
54644
|
-
const withFloor =
|
|
54645
|
-
// OBBBA § 70105:
|
|
55379
|
+
const withFloor = minimum ? {
|
|
55380
|
+
// OBBBA § 70105: the § 199A(i) minimum (TY2026+; indexed after 2026)
|
|
54646
55381
|
kind: "if",
|
|
54647
55382
|
cond: { kind: "cmp", op: "ge", left: ruleRef34("us.federal.qbi.active_total"), right: param23("minQbiFloor") },
|
|
54648
55383
|
then: { kind: "max", args: [limited, param23("minDeduction")] },
|
|
@@ -54657,16 +55392,14 @@ function qbiRule(version2, effectiveFrom, effectiveTo, yearLabel, source, withMi
|
|
|
54657
55392
|
source: `26 U.S.C. \xA7 199A; ${source}`,
|
|
54658
55393
|
section: "\xA7 199A(a)\u2013(d)",
|
|
54659
55394
|
url: "https://www.law.cornell.edu/uscode/text/26/199A",
|
|
54660
|
-
excerpt: `The lesser of the combined qualified business income amount \u2014 20 percent of each business's QBI, limited above the \xA7 199A(e)(2) threshold by that business's W-2 wages and UBIA and phased in over the ${yearLabel === "2025" ? "$50,000 ($100,000 joint) range" : "OBBBA-widened $75,000 ($150,000 joint) range (\xA7 70105, taxable years after 2025)"}, after the SSTB applicable percentage, aggregation and loss netting (us.federal.qbi.total_component) \u2014 or 20 percent of taxable income (without this deduction) less net capital gain.${
|
|
55395
|
+
excerpt: `The lesser of the combined qualified business income amount \u2014 20 percent of each business's QBI, limited above the \xA7 199A(e)(2) threshold by that business's W-2 wages and UBIA and phased in over the ${yearLabel === "2025" ? "$50,000 ($100,000 joint) range" : "OBBBA-widened $75,000 ($150,000 joint) range (\xA7 70105, taxable years after 2025)"}, after the SSTB applicable percentage, aggregation and loss netting (us.federal.qbi.total_component) \u2014 or 20 percent of taxable income (without this deduction) less net capital gain.${minimum ? ` OBBBA \xA7 70105 minimum deduction of $${Number(minimum.deductionCents) / 100} with at least $${(Number(minimum.testCents) / 100).toLocaleString("en-US")} of QBI from qualified businesses (active participation assumed \u2014 disclosed).` : ""} [No REIT/PTP component or cooperative patron reduction; W-2 wages and UBIA default to $0, which is conservative; exact ratios where Form 8995-A rounds percentages \u2014 disclosed.]`
|
|
54661
55396
|
},
|
|
54662
55397
|
effectiveFrom,
|
|
54663
55398
|
effectiveTo,
|
|
54664
55399
|
output: { type: "money" },
|
|
54665
|
-
parameters:
|
|
54666
|
-
minDeduction: { value:
|
|
54667
|
-
|
|
54668
|
-
minQbiFloor: { value: "100000", type: "money" }
|
|
54669
|
-
// $1,000
|
|
55400
|
+
parameters: minimum ? {
|
|
55401
|
+
minDeduction: { value: minimum.deductionCents, type: "money" },
|
|
55402
|
+
minQbiFloor: { value: minimum.testCents, type: "money" }
|
|
54670
55403
|
} : {},
|
|
54671
55404
|
formula: {
|
|
54672
55405
|
kind: "if",
|
|
@@ -54708,7 +55441,7 @@ var init_qbi = __esm({
|
|
|
54708
55441
|
"2026-01-01",
|
|
54709
55442
|
"2025",
|
|
54710
55443
|
"Rev. Proc. 2024-40 \xA7 2.27",
|
|
54711
|
-
|
|
55444
|
+
null
|
|
54712
55445
|
),
|
|
54713
55446
|
qbiRule(
|
|
54714
55447
|
14,
|
|
@@ -54717,8 +55450,9 @@ var init_qbi = __esm({
|
|
|
54717
55450
|
"2027-01-01",
|
|
54718
55451
|
"2026",
|
|
54719
55452
|
"Rev. Proc. 2025-32 \xA7 4.26; OBBBA \xA7 70105 (range + $400 minimum)",
|
|
54720
|
-
|
|
55453
|
+
{ deductionCents: "40000", testCents: "100000" }
|
|
54721
55454
|
),
|
|
55455
|
+
qbiRule(15, "2027-01-01", "2028-01-01", "2027", "Rev. Proc. 2026-35 \xA7 3.28; OBBBA \xA7 70105", { deductionCents: "41500", testCents: "103000" }),
|
|
54722
55456
|
...qbiBusinessRules
|
|
54723
55457
|
];
|
|
54724
55458
|
}
|
|
@@ -54926,8 +55660,11 @@ var init_self_employment = __esm({
|
|
|
54926
55660
|
// $176,100
|
|
54927
55661
|
seTaxRule(taxpayer, 2, "2026-01-01", "2027-01-01", "18450000", "2026"),
|
|
54928
55662
|
// $184,500
|
|
55663
|
+
seTaxRule(taxpayer, 3, "2027-01-01", "2028-01-01", "19230000", "2027"),
|
|
55664
|
+
// $192,300 (91 FR 67380)
|
|
54929
55665
|
seTaxRule(spouse, 1, "2025-01-01", "2026-01-01", "17610000", "2025"),
|
|
54930
55666
|
seTaxRule(spouse, 2, "2026-01-01", "2027-01-01", "18450000", "2026"),
|
|
55667
|
+
seTaxRule(spouse, 3, "2027-01-01", "2028-01-01", "19230000", "2027"),
|
|
54931
55668
|
{
|
|
54932
55669
|
id: "us.federal.se_tax",
|
|
54933
55670
|
version: 7,
|
|
@@ -55428,6 +56165,37 @@ var init_standard_deduction = __esm({
|
|
|
55428
56165
|
]
|
|
55429
56166
|
}
|
|
55430
56167
|
},
|
|
56168
|
+
{
|
|
56169
|
+
id: "us.federal.standard_deduction.base_amount",
|
|
56170
|
+
version: 4,
|
|
56171
|
+
jurisdiction: J30,
|
|
56172
|
+
title: "Basic standard deduction amount by filing status (TY2027)",
|
|
56173
|
+
citation: {
|
|
56174
|
+
source: "26 U.S.C. \xA7 63(c); Rev. Proc. 2026-35",
|
|
56175
|
+
section: "Rev. Proc. 2026-35 \xA7 3.15(1)",
|
|
56176
|
+
url: "https://www.irs.gov/pub/irs-drop/rp-26-35.pdf",
|
|
56177
|
+
excerpt: "For taxable years beginning in 2027, the standard deduction amounts under \xA7 63(c)(2) are as follows: $33,200 (married individuals filing joint returns and surviving spouses), $24,925 (heads of households), $16,600 (unmarried individuals other than surviving spouses and heads of households), $16,600 (married individuals filing separate returns)."
|
|
56178
|
+
},
|
|
56179
|
+
effectiveFrom: "2027-01-01",
|
|
56180
|
+
effectiveTo: "2028-01-01",
|
|
56181
|
+
output: { type: "money" },
|
|
56182
|
+
formula: {
|
|
56183
|
+
kind: "match",
|
|
56184
|
+
on: fact44("filingStatus"),
|
|
56185
|
+
cases: [
|
|
56186
|
+
{ when: "single", value: money41("1660000") },
|
|
56187
|
+
// $16,600
|
|
56188
|
+
{ when: "mfs", value: money41("1660000") },
|
|
56189
|
+
// $16,600
|
|
56190
|
+
{ when: "mfj", value: money41("3320000") },
|
|
56191
|
+
// $33,200
|
|
56192
|
+
{ when: "qss", value: money41("3320000") },
|
|
56193
|
+
// $33,200 (surviving spouse)
|
|
56194
|
+
{ when: "hoh", value: money41("2492500") }
|
|
56195
|
+
// $24,925
|
|
56196
|
+
]
|
|
56197
|
+
}
|
|
56198
|
+
},
|
|
55431
56199
|
{
|
|
55432
56200
|
id: "us.federal.standard_deduction.base",
|
|
55433
56201
|
version: 1,
|
|
@@ -55479,6 +56247,39 @@ var init_standard_deduction = __esm({
|
|
|
55479
56247
|
},
|
|
55480
56248
|
overrides: { ruleId: "us.federal.standard_deduction.base", priority: 10 }
|
|
55481
56249
|
},
|
|
56250
|
+
{
|
|
56251
|
+
id: "us.federal.standard_deduction.dependent_limit",
|
|
56252
|
+
version: 2,
|
|
56253
|
+
jurisdiction: J30,
|
|
56254
|
+
title: "Limitation on basic standard deduction of a dependent (TY2027)",
|
|
56255
|
+
citation: {
|
|
56256
|
+
source: "26 U.S.C. \xA7 63(c)(5); Rev. Proc. 2026-35 \xA7 3.15(2)",
|
|
56257
|
+
section: "\xA7 63(c)(5)",
|
|
56258
|
+
url: "https://www.irs.gov/pub/irs-drop/rp-26-35.pdf",
|
|
56259
|
+
excerpt: "For taxable years beginning in 2027, the standard deduction amount under \xA7 63(c)(5) for an individual who may be claimed as a dependent by another taxpayer cannot exceed the greater of (1) $1,400, or (2) the sum of $500 and the individual's earned income."
|
|
56260
|
+
},
|
|
56261
|
+
effectiveFrom: "2027-01-01",
|
|
56262
|
+
effectiveTo: "2028-01-01",
|
|
56263
|
+
output: { type: "money" },
|
|
56264
|
+
applicability: fact44("isClaimedAsDependent"),
|
|
56265
|
+
// min(normal base amount, max($1,400, earned income + $500)); earned income ≈ wages
|
|
56266
|
+
formula: {
|
|
56267
|
+
kind: "min",
|
|
56268
|
+
args: [
|
|
56269
|
+
ruleRef38("us.federal.standard_deduction.base_amount"),
|
|
56270
|
+
{
|
|
56271
|
+
kind: "max",
|
|
56272
|
+
args: [
|
|
56273
|
+
money41("140000"),
|
|
56274
|
+
// $1,400
|
|
56275
|
+
{ kind: "add", args: [fact44("wages"), money41("50000")] }
|
|
56276
|
+
// + $500
|
|
56277
|
+
]
|
|
56278
|
+
}
|
|
56279
|
+
]
|
|
56280
|
+
},
|
|
56281
|
+
overrides: { ruleId: "us.federal.standard_deduction.base", priority: 10 }
|
|
56282
|
+
},
|
|
55482
56283
|
{
|
|
55483
56284
|
id: "us.federal.standard_deduction.mfs_spouse_itemizes",
|
|
55484
56285
|
version: 1,
|
|
@@ -55518,6 +56319,12 @@ var init_standard_deduction = __esm({
|
|
|
55518
56319
|
married: "$1,650",
|
|
55519
56320
|
unmarried: "$2,050"
|
|
55520
56321
|
}),
|
|
56322
|
+
additionalRule(3, "2027-01-01", "2028-01-01", "170000", "210000", {
|
|
56323
|
+
sourceRevProc: "Rev. Proc. 2026-35 \xA7 3.15(3)",
|
|
56324
|
+
year: "2027",
|
|
56325
|
+
married: "$1,700",
|
|
56326
|
+
unmarried: "$2,100"
|
|
56327
|
+
}),
|
|
55521
56328
|
{
|
|
55522
56329
|
id: "us.federal.standard_deduction",
|
|
55523
56330
|
version: 1,
|
|
@@ -55819,7 +56626,7 @@ var init_dist2 = __esm({
|
|
|
55819
56626
|
init_occupations();
|
|
55820
56627
|
corpusInput = {
|
|
55821
56628
|
name: "@invaro/opentax-corpus-us-federal",
|
|
55822
|
-
version: "0.
|
|
56629
|
+
version: "0.44.0",
|
|
55823
56630
|
rules: [
|
|
55824
56631
|
...corporateRules,
|
|
55825
56632
|
...corporate1120Rules,
|
|
@@ -63934,7 +64741,7 @@ var COMPOSER_VERSION;
|
|
|
63934
64741
|
var init_version = __esm({
|
|
63935
64742
|
"dist/version.js"() {
|
|
63936
64743
|
"use strict";
|
|
63937
|
-
COMPOSER_VERSION = "0.
|
|
64744
|
+
COMPOSER_VERSION = "0.11.0";
|
|
63938
64745
|
}
|
|
63939
64746
|
});
|
|
63940
64747
|
|
|
@@ -80853,6 +81660,7 @@ var init_schema = __esm({
|
|
|
80853
81660
|
"selfEmployedHealthPremiums",
|
|
80854
81661
|
"homeOfficeSquareFeet",
|
|
80855
81662
|
"businessMilesDriven",
|
|
81663
|
+
"businessMilesDrivenFromJuly",
|
|
80856
81664
|
"aggregateBusinessLoss"
|
|
80857
81665
|
],
|
|
80858
81666
|
adjustments: [
|
|
@@ -80883,6 +81691,7 @@ var init_schema = __esm({
|
|
|
80883
81691
|
"noncashCharitableContributions",
|
|
80884
81692
|
"investmentInterestDeduction",
|
|
80885
81693
|
"gamblingLossesItemized",
|
|
81694
|
+
"gamblingWinnings",
|
|
80886
81695
|
"otherItemizedDeductions",
|
|
80887
81696
|
"casualtyFederalDisasterLosses",
|
|
80888
81697
|
"casualtyQualifiedDisasterLosses",
|
|
@@ -89098,7 +89907,15 @@ var FACT_FLAGS = [
|
|
|
89098
89907
|
option: "--business-miles <n>",
|
|
89099
89908
|
key: "businessMiles",
|
|
89100
89909
|
group: "Business owner:",
|
|
89101
|
-
help: "business miles for the standard mileage rate (70\xA2 2025
|
|
89910
|
+
help: "business miles for the standard mileage rate (70\xA2 2025; 2026: 72.5\xA2 to June 30, 76\xA2 from July 1; standalone target)",
|
|
89911
|
+
boolean: false
|
|
89912
|
+
},
|
|
89913
|
+
{
|
|
89914
|
+
factId: "businessMilesDrivenFromJuly",
|
|
89915
|
+
option: "--business-miles-from-july <n>",
|
|
89916
|
+
key: "businessMilesFromJuly",
|
|
89917
|
+
group: "Business owner:",
|
|
89918
|
+
help: "TY2026: the business miles driven on or after July 1 (76\xA2/mile, Announcement 2026-11)",
|
|
89102
89919
|
boolean: false
|
|
89103
89920
|
},
|
|
89104
89921
|
{
|
|
@@ -89122,7 +89939,15 @@ var FACT_FLAGS = [
|
|
|
89122
89939
|
option: "--gambling-losses <dollars>",
|
|
89123
89940
|
key: "gamblingLosses",
|
|
89124
89941
|
group: "Deductions & savings:",
|
|
89125
|
-
help: "gambling losses (\xA7 165(d), Schedule A line 16) \u2014 already limited to winnings
|
|
89942
|
+
help: "gambling losses (\xA7 165(d), Schedule A line 16) \u2014 TY2025: already limited to winnings; TY2026+: total losses (90% allowed, up to --gambling-winnings)",
|
|
89943
|
+
boolean: false
|
|
89944
|
+
},
|
|
89945
|
+
{
|
|
89946
|
+
factId: "gamblingWinnings",
|
|
89947
|
+
option: "--gambling-winnings <dollars>",
|
|
89948
|
+
key: "gamblingWinnings",
|
|
89949
|
+
group: "Deductions & savings:",
|
|
89950
|
+
help: "gambling winnings for the year \u2014 the TY2026+ \xA7 165(d) limit on the loss deduction (include the winnings in income too)",
|
|
89126
89951
|
boolean: false
|
|
89127
89952
|
},
|
|
89128
89953
|
{
|