@invaro/opentax 0.10.1 → 0.11.1
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 +864 -55
- package/bundle/index.js +864 -55
- package/bundle/main.js +888 -63
- package/package.json +4 -4
package/bundle/index.js
CHANGED
|
@@ -28951,7 +28951,7 @@ import { homedir } from "node:os";
|
|
|
28951
28951
|
import { join } from "node:path";
|
|
28952
28952
|
|
|
28953
28953
|
// dist/version.js
|
|
28954
|
-
var COMPOSER_VERSION = "0.
|
|
28954
|
+
var COMPOSER_VERSION = "0.11.1";
|
|
28955
28955
|
|
|
28956
28956
|
// dist/phone-home.js
|
|
28957
28957
|
var ENDPOINT = "https://opentax.invaro.ai/api/t";
|
|
@@ -47536,11 +47536,17 @@ var facts = [
|
|
|
47536
47536
|
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))"
|
|
47537
47537
|
}
|
|
47538
47538
|
},
|
|
47539
|
+
{
|
|
47540
|
+
id: "businessMilesDrivenFromJuly",
|
|
47541
|
+
type: "int",
|
|
47542
|
+
min: "0",
|
|
47543
|
+
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."
|
|
47544
|
+
},
|
|
47539
47545
|
{
|
|
47540
47546
|
id: "businessMilesDriven",
|
|
47541
47547
|
type: "int",
|
|
47542
47548
|
min: "0",
|
|
47543
|
-
description: "Business miles driven for the optional standard mileage rate (70\xA2/mile for 2025 per Notice 2025-5; 72.5\xA2/mile
|
|
47549
|
+
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.",
|
|
47544
47550
|
default: {
|
|
47545
47551
|
value: "0",
|
|
47546
47552
|
rationale: "Assumed no business mileage absent contrary input"
|
|
@@ -47625,11 +47631,17 @@ var facts = [
|
|
|
47625
47631
|
rationale: "Assumed no deductible investment interest absent contrary input"
|
|
47626
47632
|
}
|
|
47627
47633
|
},
|
|
47634
|
+
{
|
|
47635
|
+
id: "gamblingWinnings",
|
|
47636
|
+
type: "money",
|
|
47637
|
+
min: "0",
|
|
47638
|
+
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."
|
|
47639
|
+
},
|
|
47628
47640
|
{
|
|
47629
47641
|
id: "gamblingLossesItemized",
|
|
47630
47642
|
type: "money",
|
|
47631
47643
|
min: "0",
|
|
47632
|
-
description: "Gambling losses
|
|
47644
|
+
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.",
|
|
47633
47645
|
default: {
|
|
47634
47646
|
value: "0",
|
|
47635
47647
|
rationale: "Assumed no deductible gambling losses absent contrary input"
|
|
@@ -47793,7 +47805,7 @@ var facts = [
|
|
|
47793
47805
|
id: "educatorExpenses",
|
|
47794
47806
|
type: "money",
|
|
47795
47807
|
min: "0",
|
|
47796
|
-
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
|
|
47808
|
+
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.",
|
|
47797
47809
|
default: {
|
|
47798
47810
|
value: "0",
|
|
47799
47811
|
rationale: "Assumed no educator expenses absent contrary input"
|
|
@@ -47803,7 +47815,7 @@ var facts = [
|
|
|
47803
47815
|
id: "spouseEducatorExpenses",
|
|
47804
47816
|
type: "money",
|
|
47805
47817
|
min: "0",
|
|
47806
|
-
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.",
|
|
47818
|
+
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.",
|
|
47807
47819
|
default: {
|
|
47808
47820
|
value: "0",
|
|
47809
47821
|
rationale: "Assumed the spouse is not an eligible educator absent contrary input"
|
|
@@ -52450,7 +52462,7 @@ function hsaRule(version2, effectiveFrom, effectiveTo, selfCents, familyCents, s
|
|
|
52450
52462
|
}
|
|
52451
52463
|
};
|
|
52452
52464
|
}
|
|
52453
|
-
function studentLoanRule(version2, effectiveFrom, effectiveTo, jointThresholdCents, jointRangeCents, source, yearLabel) {
|
|
52465
|
+
function studentLoanRule(version2, effectiveFrom, effectiveTo, jointThresholdCents, jointRangeCents, source, yearLabel, thresholdCents = "8500000") {
|
|
52454
52466
|
const magi2 = ruleRef("us.federal.agi_before_student_loan");
|
|
52455
52467
|
const threshold2 = {
|
|
52456
52468
|
kind: "if",
|
|
@@ -52485,8 +52497,7 @@ function studentLoanRule(version2, effectiveFrom, effectiveTo, jointThresholdCen
|
|
|
52485
52497
|
parameters: {
|
|
52486
52498
|
cap: { value: "250000", type: "money" },
|
|
52487
52499
|
// $2,500, not indexed
|
|
52488
|
-
threshold: { value:
|
|
52489
|
-
// $85,000
|
|
52500
|
+
threshold: { value: thresholdCents, type: "money" },
|
|
52490
52501
|
range: { value: "1500000", type: "money" },
|
|
52491
52502
|
// $15,000
|
|
52492
52503
|
thresholdJoint: { value: jointThresholdCents, type: "money" },
|
|
@@ -52574,8 +52585,33 @@ function sepRule(version2, effectiveFrom, effectiveTo, limitCents, source, yearL
|
|
|
52574
52585
|
var adjustmentRules = [
|
|
52575
52586
|
hsaRule(1, "2025-01-01", "2026-01-01", "430000", "855000", "Rev. Proc. 2024-25", "2025"),
|
|
52576
52587
|
hsaRule(2, "2026-01-01", "2027-01-01", "440000", "875000", "Rev. Proc. 2025-19", "2026"),
|
|
52588
|
+
hsaRule(3, "2027-01-01", "2028-01-01", "450000", "900000", "Rev. Proc. 2026-24 \xA7 3.01(1)", "2027"),
|
|
52577
52589
|
sepRule(1, "2025-01-01", "2026-01-01", "7000000", "Notice 2024-80", "2025", "$70,000"),
|
|
52578
52590
|
sepRule(2, "2026-01-01", "2027-01-01", "7200000", "Notice 2025-67", "2026", "$72,000"),
|
|
52591
|
+
{
|
|
52592
|
+
id: "us.federal.sep_deduction",
|
|
52593
|
+
version: 3,
|
|
52594
|
+
jurisdiction: "us.federal",
|
|
52595
|
+
title: "SEP / solo-401(k) employer contribution deduction (TY2027: the \xA7 415(c) limit is not yet published)",
|
|
52596
|
+
citation: {
|
|
52597
|
+
source: "26 U.S.C. \xA7\xA7 404(a)(8), (h), 415(c), (d)",
|
|
52598
|
+
section: "\xA7 404(h); \xA7 415(c)(1)(A), (d)",
|
|
52599
|
+
url: "https://www.law.cornell.edu/uscode/text/26/415",
|
|
52600
|
+
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."
|
|
52601
|
+
},
|
|
52602
|
+
effectiveFrom: "2027-01-01",
|
|
52603
|
+
effectiveTo: "2028-01-01",
|
|
52604
|
+
output: { type: "money" },
|
|
52605
|
+
formula: {
|
|
52606
|
+
kind: "if",
|
|
52607
|
+
cond: { kind: "cmp", op: "gt", left: fact("sepContribution"), right: zero },
|
|
52608
|
+
then: {
|
|
52609
|
+
kind: "unsupported",
|
|
52610
|
+
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"
|
|
52611
|
+
},
|
|
52612
|
+
else: zero
|
|
52613
|
+
}
|
|
52614
|
+
},
|
|
52579
52615
|
{
|
|
52580
52616
|
id: "us.federal.sehi_deduction",
|
|
52581
52617
|
version: 1,
|
|
@@ -52640,6 +52676,17 @@ var adjustmentRules = [
|
|
|
52640
52676
|
// $175,000 threshold, $30,000 range ($175k–$205k)
|
|
52641
52677
|
"Rev. Proc. 2025-32 \xA7 4.29",
|
|
52642
52678
|
"2026"
|
|
52679
|
+
),
|
|
52680
|
+
studentLoanRule(
|
|
52681
|
+
3,
|
|
52682
|
+
"2027-01-01",
|
|
52683
|
+
"2028-01-01",
|
|
52684
|
+
"18000000",
|
|
52685
|
+
"3000000",
|
|
52686
|
+
// $180,000 threshold, $30,000 range ($180k–$210k)
|
|
52687
|
+
"Rev. Proc. 2026-35 \xA7 3.31",
|
|
52688
|
+
"2027",
|
|
52689
|
+
"9000000"
|
|
52643
52690
|
)
|
|
52644
52691
|
];
|
|
52645
52692
|
|
|
@@ -52681,6 +52728,20 @@ var TY2026 = {
|
|
|
52681
52728
|
hoh: { brackets: B26.hoh, zeroMax: 66200, fifteenMax: 579600 },
|
|
52682
52729
|
mfs: { brackets: B26.mfs, zeroMax: 49450, fifteenMax: 306850 }
|
|
52683
52730
|
};
|
|
52731
|
+
var B27 = {
|
|
52732
|
+
single: table([0, 12800, 52025, 109125, 208325, 264550, 661375]),
|
|
52733
|
+
mfj: table([0, 25600, 104050, 218250, 416650, 529100, 793650]),
|
|
52734
|
+
hoh: table([0, 18250, 69650, 109100, 208300, 264550, 661350]),
|
|
52735
|
+
mfs: table([0, 12800, 52025, 109125, 208325, 264550, 396825])
|
|
52736
|
+
};
|
|
52737
|
+
var TY2027 = {
|
|
52738
|
+
single: { brackets: B27.single, zeroMax: 51050, fifteenMax: 563200 },
|
|
52739
|
+
mfj: { brackets: B27.mfj, zeroMax: 102100, fifteenMax: 633600 },
|
|
52740
|
+
qss: { brackets: B27.mfj, zeroMax: 102100, fifteenMax: 633600 },
|
|
52741
|
+
hoh: { brackets: B27.hoh, zeroMax: 68350, fifteenMax: 598400 },
|
|
52742
|
+
mfs: { brackets: B27.mfs, zeroMax: 51050, fifteenMax: 316800 }
|
|
52743
|
+
};
|
|
52744
|
+
var TABLES_BY_YEAR = { "2025": TY2025, "2026": TY2026, "2027": TY2027 };
|
|
52684
52745
|
var taxable = ruleRef2("us.federal.taxable_income");
|
|
52685
52746
|
var ordinary = ruleRef2("us.federal.ordinary_taxable_income");
|
|
52686
52747
|
function statusTax(sy) {
|
|
@@ -52884,7 +52945,7 @@ function taxTableRule(version2, effectiveFrom, effectiveTo, tables, yearLabel, m
|
|
|
52884
52945
|
};
|
|
52885
52946
|
}
|
|
52886
52947
|
function ordinaryRateTaxExpr(base, statusFactId, year) {
|
|
52887
|
-
const tables = year
|
|
52948
|
+
const tables = TABLES_BY_YEAR[year];
|
|
52888
52949
|
const perStatus = (sy) => ({
|
|
52889
52950
|
kind: "if",
|
|
52890
52951
|
cond: { kind: "cmp", op: "lt", left: base, right: money2("10000000") },
|
|
@@ -52945,8 +53006,15 @@ var incomeTaxRules = [
|
|
|
52945
53006
|
url: "https://www.irs.gov/pub/irs-drop/rp-25-32.pdf",
|
|
52946
53007
|
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."
|
|
52947
53008
|
}),
|
|
53009
|
+
incomeTaxRule(5, "2027-01-01", "2028-01-01", TY2027, "2027", {
|
|
53010
|
+
source: "26 U.S.C. \xA7 1(h), (j); Rev. Proc. 2026-35",
|
|
53011
|
+
section: "\xA7 1(j)(2), (j)(5); Rev. Proc. 2026-35 \xA7\xA7 3.01, 3.03",
|
|
53012
|
+
url: "https://www.irs.gov/pub/irs-drop/rp-26-35.pdf",
|
|
53013
|
+
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."
|
|
53014
|
+
}),
|
|
52948
53015
|
taxTableRule(1, "2025-01-01", "2026-01-01", TY2025, "2025", "Sampled entries verified against the printed 2025 Publication 1040 table."),
|
|
52949
|
-
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.")
|
|
53016
|
+
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."),
|
|
53017
|
+
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).")
|
|
52950
53018
|
];
|
|
52951
53019
|
|
|
52952
53020
|
// ../corpus-us-federal/dist/rules/amt.js
|
|
@@ -52978,6 +53046,7 @@ var line13 = ruleRef3("us.federal.amt.capital_gain_amount");
|
|
|
52978
53046
|
var qdcgLine5 = ruleRef3("us.federal.ordinary_taxable_income");
|
|
52979
53047
|
var SOURCE_2025 = "Form 6251 (2025) and instructions; Rev. Proc. 2024-40 \xA7 2.11";
|
|
52980
53048
|
var 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";
|
|
53049
|
+
var 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";
|
|
52981
53050
|
var F6251_URL = "https://www.irs.gov/pub/irs-pdf/f6251.pdf";
|
|
52982
53051
|
var Y2025 = {
|
|
52983
53052
|
year: "2025",
|
|
@@ -53019,6 +53088,26 @@ var Y2026 = {
|
|
|
53019
53088
|
cg: TY2026,
|
|
53020
53089
|
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)."
|
|
53021
53090
|
};
|
|
53091
|
+
var Y2027 = {
|
|
53092
|
+
year: "2027",
|
|
53093
|
+
from: "2027-01-01",
|
|
53094
|
+
to: "2028-01-01",
|
|
53095
|
+
source: SOURCE_2027,
|
|
53096
|
+
exemptSingle: "9300000",
|
|
53097
|
+
exemptJoint: "14470000",
|
|
53098
|
+
exemptMfs: "7235000",
|
|
53099
|
+
threshSingle: "51595000",
|
|
53100
|
+
threshJoint: "103190000",
|
|
53101
|
+
threshMfs: "51595000",
|
|
53102
|
+
phaseRate: "50",
|
|
53103
|
+
mfsZeroAt: "66065000",
|
|
53104
|
+
break28: "25250000",
|
|
53105
|
+
break28Mfs: "12625000",
|
|
53106
|
+
sub28: "505000",
|
|
53107
|
+
sub28Mfs: "252500",
|
|
53108
|
+
cg: TY2027,
|
|
53109
|
+
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)."
|
|
53110
|
+
};
|
|
53022
53111
|
var byStatus = (single, joint, mfs) => ({
|
|
53023
53112
|
kind: "match",
|
|
53024
53113
|
on: fact3("filingStatus"),
|
|
@@ -53176,8 +53265,10 @@ function tmtRule(version2, y) {
|
|
|
53176
53265
|
var amtRules = [
|
|
53177
53266
|
amtiRule(1, Y2025),
|
|
53178
53267
|
amtiRule(2, Y2026),
|
|
53268
|
+
amtiRule(3, Y2027),
|
|
53179
53269
|
exemptionRule(1, Y2025),
|
|
53180
53270
|
exemptionRule(2, Y2026),
|
|
53271
|
+
exemptionRule(3, Y2027),
|
|
53181
53272
|
{
|
|
53182
53273
|
id: "us.federal.amt.taxable_excess",
|
|
53183
53274
|
version: 1,
|
|
@@ -53210,6 +53301,7 @@ var amtRules = [
|
|
|
53210
53301
|
},
|
|
53211
53302
|
tmtRule(1, Y2025),
|
|
53212
53303
|
tmtRule(2, Y2026),
|
|
53304
|
+
tmtRule(3, Y2027),
|
|
53213
53305
|
{
|
|
53214
53306
|
id: "us.federal.amt",
|
|
53215
53307
|
version: 3,
|
|
@@ -53292,7 +53384,7 @@ function cumulative(yearFactId, periodFactId) {
|
|
|
53292
53384
|
else: zero2
|
|
53293
53385
|
};
|
|
53294
53386
|
}
|
|
53295
|
-
function quarterRule(q, year, from, to, proratedLimitCents, proratedLabel,
|
|
53387
|
+
function quarterRule(q, year, from, to, proratedLimitCents, proratedLabel, qbiMinimum) {
|
|
53296
53388
|
const cumWages = cumulative("wages", q.wagesFact);
|
|
53297
53389
|
const cumSE = cumulative("selfEmploymentNetProfit", q.seFact);
|
|
53298
53390
|
const netEarn = {
|
|
@@ -53360,11 +53452,11 @@ function quarterRule(q, year, from, to, proratedLimitCents, proratedLabel, withQ
|
|
|
53360
53452
|
{ kind: "mulRate", base: tiBeforeQbi, rate: { num: "20", den: "100" }, round: "half-up" }
|
|
53361
53453
|
]
|
|
53362
53454
|
};
|
|
53363
|
-
const qbi =
|
|
53455
|
+
const qbi = qbiMinimum ? {
|
|
53364
53456
|
kind: "if",
|
|
53365
|
-
cond: { kind: "cmp", op: "ge", left: qbiBase, right: money4(
|
|
53366
|
-
then: { kind: "max", args: [qbiCore, money4(
|
|
53367
|
-
//
|
|
53457
|
+
cond: { kind: "cmp", op: "ge", left: qbiBase, right: money4(qbiMinimum.testCents) },
|
|
53458
|
+
then: { kind: "max", args: [qbiCore, money4(qbiMinimum.deductionCents)] },
|
|
53459
|
+
// § 199A(i) minimum
|
|
53368
53460
|
else: qbiCore
|
|
53369
53461
|
} : qbiCore;
|
|
53370
53462
|
const ti = { kind: "max0", arg: { kind: "sub", left: tiBeforeQbi, right: qbi } };
|
|
@@ -53398,12 +53490,12 @@ function quarterRule(q, year, from, to, proratedLimitCents, proratedLabel, withQ
|
|
|
53398
53490
|
};
|
|
53399
53491
|
return {
|
|
53400
53492
|
id: `us.federal.estimated.annualized_installment_q${q.n}`,
|
|
53401
|
-
version:
|
|
53493
|
+
version: { "2025": 3, "2026": 4, "2027": 5 }[year],
|
|
53402
53494
|
// v1/v2 predated the per-bucket capital-loss facts in the scope guard
|
|
53403
53495
|
jurisdiction: J2,
|
|
53404
53496
|
title: `Annualized-income required installment #${q.n} (\xA7 6654(d)(2), TY${year})`,
|
|
53405
53497
|
citation: {
|
|
53406
|
-
source: `26 U.S.C. \xA7 6654(d)(2); ${year} Form 2210 Schedule AI`,
|
|
53498
|
+
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`,
|
|
53407
53499
|
section: "\xA7 6654(d)(2); Schedule AI",
|
|
53408
53500
|
url: "https://www.irs.gov/forms-pubs/about-form-2210",
|
|
53409
53501
|
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.]`
|
|
@@ -53426,9 +53518,23 @@ var P2025 = ["4402500", "7337500", "11740000", "17610000"];
|
|
|
53426
53518
|
var L2025 = ["$44,025", "$73,375", "$117,400", "$176,100"];
|
|
53427
53519
|
var P2026 = ["4612500", "7687500", "12300000", "18450000"];
|
|
53428
53520
|
var L2026 = ["$46,125 (from the $184,500 base)", "$76,875", "$123,000", "$184,500"];
|
|
53521
|
+
var P2027 = ["4807500", "8012500", "12820000", "19230000"];
|
|
53522
|
+
var L2027 = ["$48,075 (from the $192,300 base, 91 FR 67380)", "$80,125", "$128,200", "$192,300"];
|
|
53429
53523
|
var annualizedInstallmentRules = [
|
|
53430
|
-
...QUARTERS.map((q) => quarterRule(q, "2025", "2025-01-01", "2026-01-01", P2025[q.n - 1], L2025[q.n - 1],
|
|
53431
|
-
...QUARTERS.map((q) => quarterRule(q, "2026", "2026-01-01", "2027-01-01", P2026[q.n - 1], L2026[q.n - 1],
|
|
53524
|
+
...QUARTERS.map((q) => quarterRule(q, "2025", "2025-01-01", "2026-01-01", P2025[q.n - 1], L2025[q.n - 1], null)),
|
|
53525
|
+
...QUARTERS.map((q) => quarterRule(q, "2026", "2026-01-01", "2027-01-01", P2026[q.n - 1], L2026[q.n - 1], {
|
|
53526
|
+
deductionCents: "40000",
|
|
53527
|
+
// $400
|
|
53528
|
+
testCents: "100000"
|
|
53529
|
+
// $1,000
|
|
53530
|
+
})),
|
|
53531
|
+
...QUARTERS.map((q) => (
|
|
53532
|
+
// Rev. Proc. 2026-35 § 3.28(2): the minimum is $415 and the QBI test $1,030
|
|
53533
|
+
quarterRule(q, "2027", "2027-01-01", "2028-01-01", P2027[q.n - 1], L2027[q.n - 1], {
|
|
53534
|
+
deductionCents: "41500",
|
|
53535
|
+
testCents: "103000"
|
|
53536
|
+
})
|
|
53537
|
+
))
|
|
53432
53538
|
];
|
|
53433
53539
|
|
|
53434
53540
|
// ../corpus-us-federal/dist/rules/capital-losses.js
|
|
@@ -54057,7 +54163,7 @@ function section179Rule(version2, from, to, capCents, thresholdCents, capLabel,
|
|
|
54057
54163
|
source: `26 U.S.C. \xA7 179, as amended by Pub. L. 119-21 (OBBBA \xA7 70306); ${sourceLabel}`,
|
|
54058
54164
|
section: "\xA7 179(b)(1)\u2013(3)",
|
|
54059
54165
|
url: "https://www.law.cornell.edu/uscode/text/26/179",
|
|
54060
|
-
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.]`
|
|
54166
|
+
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.]`
|
|
54061
54167
|
},
|
|
54062
54168
|
effectiveFrom: from,
|
|
54063
54169
|
effectiveTo: to,
|
|
@@ -54281,10 +54387,14 @@ var corporate1120Rules = [
|
|
|
54281
54387
|
},
|
|
54282
54388
|
interestRule(1, "2025-01-01", "2026-01-01", "3100000000", "$31,000,000", "2025"),
|
|
54283
54389
|
interestRule(2, "2026-01-01", "2027-01-01", "3200000000", "$32,000,000", "2026"),
|
|
54390
|
+
interestRule(3, "2027-01-01", "2028-01-01", "3300000000", "$33,000,000", "2027"),
|
|
54391
|
+
// Rev. Proc. 2026-35 § 3.32
|
|
54284
54392
|
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)"),
|
|
54285
54393
|
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"),
|
|
54394
|
+
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"),
|
|
54286
54395
|
section179CarryforwardRule(1, "2025-01-01", "2026-01-01", "250000000", "400000000", "TY2025"),
|
|
54287
54396
|
section179CarryforwardRule(2, "2026-01-01", "2027-01-01", "256000000", "409000000", "TY2026"),
|
|
54397
|
+
section179CarryforwardRule(3, "2027-01-01", "2028-01-01", "264000000", "423000000", "TY2027"),
|
|
54288
54398
|
corpCharitableRule(7, "2025-01-01", "2026-01-01", false, "TY2025"),
|
|
54289
54399
|
corpCharitableRule(8, "2026-01-01", void 0, true, "TY2026+, permanent"),
|
|
54290
54400
|
{
|
|
@@ -54847,7 +54957,8 @@ var qsbsRules = [
|
|
|
54847
54957
|
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.]"
|
|
54848
54958
|
},
|
|
54849
54959
|
effectiveFrom: "2025-01-01",
|
|
54850
|
-
|
|
54960
|
+
effectiveTo: "2027-01-01",
|
|
54961
|
+
// § 1202(b)(5) indexes the $15,000,000 for taxable years beginning after 2026 (v2)
|
|
54851
54962
|
output: { type: "money" },
|
|
54852
54963
|
parameters: {
|
|
54853
54964
|
capNew: { value: "1500000000", type: "money" },
|
|
@@ -54861,6 +54972,33 @@ var qsbsRules = [
|
|
|
54861
54972
|
then: money12("0"),
|
|
54862
54973
|
else: tiers
|
|
54863
54974
|
}
|
|
54975
|
+
},
|
|
54976
|
+
{
|
|
54977
|
+
id: "us.federal.qsbs_exclusion",
|
|
54978
|
+
version: 2,
|
|
54979
|
+
jurisdiction: "us.federal",
|
|
54980
|
+
title: "QSBS gain exclusion \u2014 OBBBA tiers (50/75/100% at 3/4/5 years) or prior-law 100% at 5 years",
|
|
54981
|
+
citation: {
|
|
54982
|
+
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)",
|
|
54983
|
+
section: "\xA7 1202(a), (b)",
|
|
54984
|
+
url: "https://www.law.cornell.edu/uscode/text/26/1202",
|
|
54985
|
+
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.]"
|
|
54986
|
+
},
|
|
54987
|
+
effectiveFrom: "2027-01-01",
|
|
54988
|
+
effectiveTo: "2028-01-01",
|
|
54989
|
+
output: { type: "money" },
|
|
54990
|
+
parameters: {
|
|
54991
|
+
capNew: { value: "1548000000", type: "money" },
|
|
54992
|
+
// $15,480,000 (Rev. Proc. 2026-35 § 3.42(1))
|
|
54993
|
+
capOld: { value: "1000000000", type: "money" }
|
|
54994
|
+
// $10,000,000
|
|
54995
|
+
},
|
|
54996
|
+
formula: {
|
|
54997
|
+
kind: "if",
|
|
54998
|
+
cond: { kind: "cmp", op: "eq", left: fact12("qsbsGain"), right: money12("0") },
|
|
54999
|
+
then: money12("0"),
|
|
55000
|
+
else: tiers
|
|
55001
|
+
}
|
|
54864
55002
|
}
|
|
54865
55003
|
];
|
|
54866
55004
|
|
|
@@ -55146,7 +55284,7 @@ function adoptionAllowedRule(version2, from, to, maxCents, thresholdCents, yearL
|
|
|
55146
55284
|
jurisdiction: J8,
|
|
55147
55285
|
title: `Adoption credit after the MAGI phase-out (\xA7 23, ${yearLabel})`,
|
|
55148
55286
|
citation: {
|
|
55149
|
-
source: `26 U.S.C. \xA7 23, as amended by Pub. L. 119-21 (OBBBA) \xA7 70402; ${
|
|
55287
|
+
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]}`,
|
|
55150
55288
|
section: "\xA7 23(a)\u2013(b), (f)",
|
|
55151
55289
|
url: "https://www.law.cornell.edu/uscode/text/26/23",
|
|
55152
55290
|
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.`
|
|
@@ -55226,6 +55364,7 @@ var creditBlockRules = [
|
|
|
55226
55364
|
"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."
|
|
55227
55365
|
),
|
|
55228
55366
|
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."),
|
|
55367
|
+
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."),
|
|
55229
55368
|
{
|
|
55230
55369
|
id: "us.federal.cdcc",
|
|
55231
55370
|
version: 1,
|
|
@@ -55254,6 +55393,39 @@ var creditBlockRules = [
|
|
|
55254
55393
|
t20: saversTier("5250000", "3937500", "2625000"),
|
|
55255
55394
|
t10: saversTier("8050000", "6037500", "4025000")
|
|
55256
55395
|
}, "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."),
|
|
55396
|
+
{
|
|
55397
|
+
id: "us.federal.savers.tentative",
|
|
55398
|
+
version: 3,
|
|
55399
|
+
jurisdiction: J8,
|
|
55400
|
+
title: "Saver's credit before the liability limit (TY2027: ABLE contributions only; AGI limits not yet published)",
|
|
55401
|
+
citation: {
|
|
55402
|
+
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",
|
|
55403
|
+
section: "\xA7 25B(a), (b), (d)(1)",
|
|
55404
|
+
url: "https://www.law.cornell.edu/uscode/text/26/25B",
|
|
55405
|
+
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."
|
|
55406
|
+
},
|
|
55407
|
+
effectiveFrom: "2027-01-01",
|
|
55408
|
+
effectiveTo: "2028-01-01",
|
|
55409
|
+
output: { type: "money" },
|
|
55410
|
+
formula: {
|
|
55411
|
+
kind: "if",
|
|
55412
|
+
cond: {
|
|
55413
|
+
kind: "or",
|
|
55414
|
+
args: [
|
|
55415
|
+
gt03(fact13("saversContributions")),
|
|
55416
|
+
{
|
|
55417
|
+
kind: "and",
|
|
55418
|
+
args: [isStatus3("mfj"), gt03(fact13("saversContributionsSpouse"))]
|
|
55419
|
+
}
|
|
55420
|
+
]
|
|
55421
|
+
},
|
|
55422
|
+
then: {
|
|
55423
|
+
kind: "unsupported",
|
|
55424
|
+
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"
|
|
55425
|
+
},
|
|
55426
|
+
else: zero7
|
|
55427
|
+
}
|
|
55428
|
+
},
|
|
55257
55429
|
{
|
|
55258
55430
|
id: "us.federal.savers_credit",
|
|
55259
55431
|
version: 1,
|
|
@@ -55290,8 +55462,10 @@ var creditBlockRules = [
|
|
|
55290
55462
|
},
|
|
55291
55463
|
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)."),
|
|
55292
55464
|
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)."),
|
|
55465
|
+
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)."),
|
|
55293
55466
|
adoptionRefundableRule(1, "2025-01-01", "2026-01-01", "500000", "$5,000", "statutory, unindexed for 2025"),
|
|
55294
55467
|
adoptionRefundableRule(2, "2026-01-01", "2027-01-01", "512000", "$5,120", "Rev. Proc. 2025-32 \xA7 3.04(3)"),
|
|
55468
|
+
adoptionRefundableRule(3, "2027-01-01", "2028-01-01", "528000", "$5,280", "Rev. Proc. 2026-35 \xA7 3.04(3)"),
|
|
55295
55469
|
{
|
|
55296
55470
|
id: "us.federal.adoption.nonrefundable",
|
|
55297
55471
|
version: 2,
|
|
@@ -55414,6 +55588,42 @@ var ctcRules = [
|
|
|
55414
55588
|
]
|
|
55415
55589
|
}
|
|
55416
55590
|
},
|
|
55591
|
+
{
|
|
55592
|
+
id: "us.federal.ctc.tentative",
|
|
55593
|
+
version: 4,
|
|
55594
|
+
jurisdiction: J9,
|
|
55595
|
+
title: "Child tax credit + credit for other dependents, before phase-out (TY2027)",
|
|
55596
|
+
citation: {
|
|
55597
|
+
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",
|
|
55598
|
+
section: "\xA7 24(a), (h)(2), (h)(4)",
|
|
55599
|
+
url: "https://www.law.cornell.edu/uscode/text/26/24",
|
|
55600
|
+
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.]"
|
|
55601
|
+
},
|
|
55602
|
+
effectiveFrom: "2027-01-01",
|
|
55603
|
+
effectiveTo: "2028-01-01",
|
|
55604
|
+
output: { type: "money" },
|
|
55605
|
+
parameters: {
|
|
55606
|
+
perChild: { value: "230000", type: "money" },
|
|
55607
|
+
// $2,300
|
|
55608
|
+
perOtherDependent: { value: "50000", type: "money" }
|
|
55609
|
+
// $500, unindexed
|
|
55610
|
+
},
|
|
55611
|
+
formula: {
|
|
55612
|
+
kind: "add",
|
|
55613
|
+
args: [
|
|
55614
|
+
{
|
|
55615
|
+
kind: "mulInt",
|
|
55616
|
+
base: { kind: "param", name: "perChild" },
|
|
55617
|
+
count: fact14("qualifyingChildren")
|
|
55618
|
+
},
|
|
55619
|
+
{
|
|
55620
|
+
kind: "mulInt",
|
|
55621
|
+
base: { kind: "param", name: "perOtherDependent" },
|
|
55622
|
+
count: fact14("otherDependents")
|
|
55623
|
+
}
|
|
55624
|
+
]
|
|
55625
|
+
}
|
|
55626
|
+
},
|
|
55417
55627
|
{
|
|
55418
55628
|
id: "us.federal.ctc.phaseout_threshold",
|
|
55419
55629
|
version: 1,
|
|
@@ -55569,7 +55779,9 @@ var ctcRules = [
|
|
|
55569
55779
|
url: "https://www.law.cornell.edu/uscode/text/26/24",
|
|
55570
55780
|
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.]"
|
|
55571
55781
|
},
|
|
55572
|
-
|
|
55782
|
+
effectiveFrom: "2025-01-01",
|
|
55783
|
+
effectiveTo: "2027-01-01",
|
|
55784
|
+
// the $1,700 refundable amount is indexed; 2027 is v4
|
|
55573
55785
|
output: { type: "money" },
|
|
55574
55786
|
parameters: {
|
|
55575
55787
|
refundableCapPerChild: { value: "170000", type: "money" },
|
|
@@ -55632,6 +55844,81 @@ var ctcRules = [
|
|
|
55632
55844
|
]
|
|
55633
55845
|
}
|
|
55634
55846
|
},
|
|
55847
|
+
{
|
|
55848
|
+
id: "us.federal.actc",
|
|
55849
|
+
version: 4,
|
|
55850
|
+
jurisdiction: J9,
|
|
55851
|
+
title: "Additional child tax credit \u2014 refundable, TY2027 (simplified: 3+-child SS-tax alternative not modeled)",
|
|
55852
|
+
citation: {
|
|
55853
|
+
source: "26 U.S.C. \xA7 24(d), (h)(5); Rev. Proc. 2026-35 \xA7 3.05(2)",
|
|
55854
|
+
section: "\xA7 24(d)(1); \xA7 24(h)(5)",
|
|
55855
|
+
url: "https://www.law.cornell.edu/uscode/text/26/24",
|
|
55856
|
+
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.]"
|
|
55857
|
+
},
|
|
55858
|
+
effectiveFrom: "2027-01-01",
|
|
55859
|
+
effectiveTo: "2028-01-01",
|
|
55860
|
+
output: { type: "money" },
|
|
55861
|
+
parameters: {
|
|
55862
|
+
refundableCapPerChild: { value: "180000", type: "money" },
|
|
55863
|
+
// $1,800
|
|
55864
|
+
earnedIncomeFloor: { value: "250000", type: "money" }
|
|
55865
|
+
// $2,500
|
|
55866
|
+
},
|
|
55867
|
+
formula: {
|
|
55868
|
+
kind: "min",
|
|
55869
|
+
args: [
|
|
55870
|
+
// the part of the credit the liability limit left unused
|
|
55871
|
+
{
|
|
55872
|
+
kind: "max0",
|
|
55873
|
+
arg: {
|
|
55874
|
+
kind: "sub",
|
|
55875
|
+
left: ruleRef12("us.federal.ctc.after_phaseout"),
|
|
55876
|
+
right: ruleRef12("us.federal.ctc")
|
|
55877
|
+
}
|
|
55878
|
+
},
|
|
55879
|
+
// refundable cap: $1,800 per qualifying child
|
|
55880
|
+
{
|
|
55881
|
+
kind: "mulInt",
|
|
55882
|
+
base: { kind: "param", name: "refundableCapPerChild" },
|
|
55883
|
+
count: fact14("qualifyingChildren")
|
|
55884
|
+
},
|
|
55885
|
+
// 15% of earned income (wages + SE earnings net of ½ SE tax) above $2,500
|
|
55886
|
+
{
|
|
55887
|
+
kind: "mulRate",
|
|
55888
|
+
base: {
|
|
55889
|
+
kind: "max0",
|
|
55890
|
+
arg: {
|
|
55891
|
+
kind: "sub",
|
|
55892
|
+
left: {
|
|
55893
|
+
kind: "add",
|
|
55894
|
+
args: [
|
|
55895
|
+
fact14("wages"),
|
|
55896
|
+
{
|
|
55897
|
+
kind: "max0",
|
|
55898
|
+
arg: {
|
|
55899
|
+
kind: "sub",
|
|
55900
|
+
left: ruleRef12("us.federal.se_net_profit"),
|
|
55901
|
+
right: ruleRef12("us.federal.se_tax_half_deduction")
|
|
55902
|
+
}
|
|
55903
|
+
}
|
|
55904
|
+
]
|
|
55905
|
+
},
|
|
55906
|
+
right: {
|
|
55907
|
+
kind: "add",
|
|
55908
|
+
args: [
|
|
55909
|
+
{ kind: "param", name: "earnedIncomeFloor" },
|
|
55910
|
+
// Schedule C net loss reduces § 24(d) earned income too
|
|
55911
|
+
fact14("scheduleCNetLoss")
|
|
55912
|
+
]
|
|
55913
|
+
}
|
|
55914
|
+
}
|
|
55915
|
+
},
|
|
55916
|
+
rate: { num: "15", den: "100" },
|
|
55917
|
+
round: "half-up"
|
|
55918
|
+
}
|
|
55919
|
+
]
|
|
55920
|
+
}
|
|
55921
|
+
},
|
|
55635
55922
|
{
|
|
55636
55923
|
id: "us.federal.income_tax_after_credits",
|
|
55637
55924
|
version: 6,
|
|
@@ -55760,9 +56047,11 @@ var dependentRules = [
|
|
|
55760
56047
|
},
|
|
55761
56048
|
qualifyingRelativeRule(1, "2025-01-01", "2026-01-01", "520000", "2025", "Rev. Proc. 2024-40 \xA7 2.24 ($5,200)"),
|
|
55762
56049
|
qualifyingRelativeRule(2, "2026-01-01", "2027-01-01", "530000", "2026", "Rev. Proc. 2025-32 \xA7 4.23 ($5,300)"),
|
|
56050
|
+
qualifyingRelativeRule(3, "2027-01-01", "2028-01-01", "550000", "2027", "Rev. Proc. 2026-35 \xA7 3.25 ($5,500)"),
|
|
55763
56051
|
...[
|
|
55764
56052
|
{ version: 1, from: "2025-01-01", to: "2026-01-01", limit: "520000", year: "2025", revProc: "Rev. Proc. 2024-40 \xA7 2.24 ($5,200)" },
|
|
55765
|
-
{ version: 2, from: "2026-01-01", to: "2027-01-01", limit: "530000", year: "2026", revProc: "Rev. Proc. 2025-32 \xA7 4.23 ($5,300)" }
|
|
56053
|
+
{ version: 2, from: "2026-01-01", to: "2027-01-01", limit: "530000", year: "2026", revProc: "Rev. Proc. 2025-32 \xA7 4.23 ($5,300)" },
|
|
56054
|
+
{ version: 3, from: "2027-01-01", to: "2028-01-01", limit: "550000", year: "2027", revProc: "Rev. Proc. 2026-35 \xA7 3.25 ($5,500)" }
|
|
55766
56055
|
].map(({ version: version2, from, to, limit, year, revProc }) => ({
|
|
55767
56056
|
id: "us.federal.dependent.qualifying_relative.multiple_support",
|
|
55768
56057
|
version: version2,
|
|
@@ -56130,6 +56419,17 @@ var TY20262 = {
|
|
|
56130
56419
|
completedMFJ0: 26820,
|
|
56131
56420
|
investmentLimit: 12200
|
|
56132
56421
|
};
|
|
56422
|
+
var TY20272 = {
|
|
56423
|
+
eia: [8960, 13450, 18880, 18880],
|
|
56424
|
+
max: [685, 4573, 7552, 8496],
|
|
56425
|
+
thresholdOther0: 11210,
|
|
56426
|
+
thresholdMFJ0: 18730,
|
|
56427
|
+
thresholdOtherKids: 24660,
|
|
56428
|
+
thresholdMFJKids: 32170,
|
|
56429
|
+
completedOther0: 20164,
|
|
56430
|
+
completedMFJ0: 27684,
|
|
56431
|
+
investmentLimit: 12600
|
|
56432
|
+
};
|
|
56133
56433
|
var dollars = (d3) => (BigInt(d3) * 100n).toString();
|
|
56134
56434
|
var earned = {
|
|
56135
56435
|
// A Schedule C net loss reduces § 32(c)(2) earned income (Pub. 596 worksheet:
|
|
@@ -56393,6 +56693,7 @@ var eitcRules = [
|
|
|
56393
56693
|
// netted results ("capital gain net income", § 32(i)(1)(C))
|
|
56394
56694
|
eitcRule(14, "2025-01-01", "2026-01-01", TY20252, "2025", "Rev. Proc. 2024-40 \xA7 2.06"),
|
|
56395
56695
|
eitcRule(15, "2026-01-01", "2027-01-01", TY20262, "2026", "Rev. Proc. 2025-32 \xA7 4.06"),
|
|
56696
|
+
eitcRule(16, "2027-01-01", "2028-01-01", TY20272, "2027", "Rev. Proc. 2026-35 \xA7 3.06"),
|
|
56396
56697
|
// us.federal.eitc_no_age_gate (new): the same § 32(a)-(b),(f),(i) formula with
|
|
56397
56698
|
// the childless § 32(c)(1)(A)(ii) age gate removed, for state EITC statutes
|
|
56398
56699
|
// that decouple from it (35 ILCS 5/212(b-5)/(b-10), IL P.A. 102-700) — see
|
|
@@ -56408,6 +56709,12 @@ var eitcRules = [
|
|
|
56408
56709
|
ageGate: false,
|
|
56409
56710
|
titleSuffix: "Earned income credit, \xA7 32(c)(1)(A)(ii) childless age gate REMOVED (TY2026; for state decoupling statutes only)",
|
|
56410
56711
|
extraExcerpt: NO_AGE_GATE_EXCERPT
|
|
56712
|
+
}),
|
|
56713
|
+
eitcRule(5, "2027-01-01", "2028-01-01", TY20272, "2027", "Rev. Proc. 2026-35 \xA7 3.06", {
|
|
56714
|
+
ruleId: "us.federal.eitc_no_age_gate",
|
|
56715
|
+
ageGate: false,
|
|
56716
|
+
titleSuffix: "Earned income credit, \xA7 32(c)(1)(A)(ii) childless age gate REMOVED (TY2027; for state decoupling statutes only)",
|
|
56717
|
+
extraExcerpt: NO_AGE_GATE_EXCERPT
|
|
56411
56718
|
})
|
|
56412
56719
|
];
|
|
56413
56720
|
|
|
@@ -56496,9 +56803,11 @@ function feieStackingRule(version2, from, to, year) {
|
|
|
56496
56803
|
var feieRules = [
|
|
56497
56804
|
feieExclusionRule(1, "2025-01-01", "2026-01-01", "13000000", "$130,000", "Rev. Proc. 2024-40 \xA7 2.39"),
|
|
56498
56805
|
feieExclusionRule(2, "2026-01-01", "2027-01-01", "13290000", "$132,900", "Rev. Proc. 2025-32 \xA7 4.39"),
|
|
56806
|
+
feieExclusionRule(3, "2027-01-01", "2028-01-01", "13730000", "$137,300", "Rev. Proc. 2026-35 \xA7 3.41"),
|
|
56499
56807
|
// v3/v4: the preferential-income refusal guard also catches the standalone qualifiedDividends fact
|
|
56500
56808
|
feieStackingRule(3, "2025-01-01", "2026-01-01", "2025"),
|
|
56501
56809
|
feieStackingRule(4, "2026-01-01", "2027-01-01", "2026"),
|
|
56810
|
+
feieStackingRule(5, "2027-01-01", "2028-01-01", "2027"),
|
|
56502
56811
|
{
|
|
56503
56812
|
id: "us.federal.eitc.feie_denial",
|
|
56504
56813
|
version: 1,
|
|
@@ -56584,7 +56893,8 @@ function fmt(cents) {
|
|
|
56584
56893
|
}
|
|
56585
56894
|
var fiduciaryRules = [
|
|
56586
56895
|
fiduciaryRule(1, "2025-01-01", "2026-01-01", "315000", "1145000", "1565000", "TY2025", "Rev. Proc. 2024-40 \xA7 2.01"),
|
|
56587
|
-
fiduciaryRule(2, "2026-01-01", "2027-01-01", "330000", "1170000", "1600000", "TY2026", "Rev. Proc. 2025-32 \xA7 4.01")
|
|
56896
|
+
fiduciaryRule(2, "2026-01-01", "2027-01-01", "330000", "1170000", "1600000", "TY2026", "Rev. Proc. 2025-32 \xA7 4.01"),
|
|
56897
|
+
fiduciaryRule(3, "2027-01-01", "2028-01-01", "340000", "1210000", "1650000", "TY2027", "Rev. Proc. 2026-35 \xA7 3.01")
|
|
56588
56898
|
];
|
|
56589
56899
|
|
|
56590
56900
|
// ../corpus-us-federal/dist/rules/ptc.js
|
|
@@ -56699,12 +57009,14 @@ var assistanceAmount = (pctCents) => ({
|
|
|
56699
57009
|
function ptcRule(version2, from, to, fplFirstPersonCents, fplPerAdditionalCents, tiers2, above400, yearLabel, excerpt) {
|
|
56700
57010
|
const inRange = above400 === "cliff" ? {
|
|
56701
57011
|
kind: "if",
|
|
57012
|
+
// compare the income itself to 4 × the poverty line: the floored
|
|
57013
|
+
// percentage reads income a few dollars over the line as 400.00%
|
|
57014
|
+
// (Form 8962 Worksheet 2 tests line 1 against line 2 × 4.0)
|
|
56702
57015
|
cond: {
|
|
56703
57016
|
kind: "cmp",
|
|
56704
57017
|
op: "gt",
|
|
56705
|
-
left:
|
|
56706
|
-
right:
|
|
56707
|
-
// 400.00%
|
|
57018
|
+
left: householdIncome,
|
|
57019
|
+
right: { kind: "mulInt", base: povertyLine, count: { kind: "int", value: "4" } }
|
|
56708
57020
|
},
|
|
56709
57021
|
then: zero12,
|
|
56710
57022
|
else: assistanceAmount(tierChain(
|
|
@@ -56739,7 +57051,7 @@ function ptcRule(version2, from, to, fplFirstPersonCents, fplPerAdditionalCents,
|
|
|
56739
57051
|
jurisdiction: J13,
|
|
56740
57052
|
title: `Premium tax credit (\xA7 36B, ${yearLabel})`,
|
|
56741
57053
|
citation: {
|
|
56742
|
-
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)",
|
|
57054
|
+
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)",
|
|
56743
57055
|
section: "\xA7 36B(b), (c)(1), (d)",
|
|
56744
57056
|
url: "https://www.law.cornell.edu/uscode/text/26/36B",
|
|
56745
57057
|
excerpt
|
|
@@ -56800,6 +57112,15 @@ var TIERS_2025 = [
|
|
|
56800
57112
|
{ lo: "25000", hi: "30000", initial: "400", final: "600" },
|
|
56801
57113
|
{ lo: "30000", hi: "40000", initial: "600", final: "850" }
|
|
56802
57114
|
];
|
|
57115
|
+
var TIERS_2027 = [
|
|
57116
|
+
{ lo: "10000", hi: "13300", initial: "215", final: "215" },
|
|
57117
|
+
{ lo: "13300", hi: "15000", initial: "323", final: "430" },
|
|
57118
|
+
{ lo: "15000", hi: "20000", initial: "430", final: "678" },
|
|
57119
|
+
{ lo: "20000", hi: "25000", initial: "678", final: "866" },
|
|
57120
|
+
{ lo: "25000", hi: "30000", initial: "866", final: "1022" },
|
|
57121
|
+
{ lo: "30000", hi: "40001", initial: "1022", final: "1022" }
|
|
57122
|
+
// "but not more than 400%" — inclusive
|
|
57123
|
+
];
|
|
56803
57124
|
var TIERS_2026 = [
|
|
56804
57125
|
{ lo: "10000", hi: "13300", initial: "210", final: "210" },
|
|
56805
57126
|
{ lo: "13300", hi: "15000", initial: "314", final: "419" },
|
|
@@ -56888,8 +57209,8 @@ var ptcRules = [
|
|
|
56888
57209
|
`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.]`
|
|
56889
57210
|
),
|
|
56890
57211
|
ptcRule(
|
|
56891
|
-
|
|
56892
|
-
// v3 gave $0 below 100% FPL even under Reg. § 1.36B-2(b)(6) and let household income go negative
|
|
57212
|
+
6,
|
|
57213
|
+
// 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
|
|
56893
57214
|
"2026-01-01",
|
|
56894
57215
|
"2027-01-01",
|
|
56895
57216
|
"1565000",
|
|
@@ -56902,6 +57223,21 @@ var ptcRules = [
|
|
|
56902
57223
|
"TY2026: indexed statutory table, the 400% cliff returns",
|
|
56903
57224
|
"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.]"
|
|
56904
57225
|
),
|
|
57226
|
+
ptcRule(
|
|
57227
|
+
7,
|
|
57228
|
+
// the 400% cliff tests household income against 4 × the poverty line, not the floored percentage
|
|
57229
|
+
"2027-01-01",
|
|
57230
|
+
"2028-01-01",
|
|
57231
|
+
"1596000",
|
|
57232
|
+
// $15,960 (2026 guidelines, used for TY2027)
|
|
57233
|
+
"568000",
|
|
57234
|
+
// $5,680 per additional person
|
|
57235
|
+
TIERS_2027,
|
|
57236
|
+
// over 400% FPL → not an applicable taxpayer → $0 credit
|
|
57237
|
+
"cliff",
|
|
57238
|
+
"TY2027: indexed statutory table, the 400% cliff",
|
|
57239
|
+
"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.]"
|
|
57240
|
+
),
|
|
56905
57241
|
{
|
|
56906
57242
|
id: "us.federal.ptc.net",
|
|
56907
57243
|
version: 1,
|
|
@@ -57017,6 +57353,7 @@ function householdRule(version2, from, to, thresholdCents, thresholdLabel, sourc
|
|
|
57017
57353
|
var residualRules = [
|
|
57018
57354
|
householdRule(1, "2025-01-01", "2026-01-01", "280000", "$2,800", "89 FR 85276; 2025 Instructions for Schedule H"),
|
|
57019
57355
|
householdRule(2, "2026-01-01", "2027-01-01", "300000", "$3,000", "90 FR 49047"),
|
|
57356
|
+
householdRule(3, "2027-01-01", "2028-01-01", "310000", "$3,100", "91 FR 67380 (SSA, Cost-of-Living Increase and Other Determinations for 2027)"),
|
|
57020
57357
|
{
|
|
57021
57358
|
id: "us.federal.estimated.required_annual_payment.farmer",
|
|
57022
57359
|
version: 1,
|
|
@@ -57149,6 +57486,8 @@ function payrollRule(version2, from, to, wageBaseCents, yearLabel, baseLabel) {
|
|
|
57149
57486
|
var employerRules = [
|
|
57150
57487
|
payrollRule(1, "2025-01-01", "2026-01-01", "17610000", "2025", "$176,100"),
|
|
57151
57488
|
payrollRule(2, "2026-01-01", "2027-01-01", "18450000", "2026", "$184,500"),
|
|
57489
|
+
payrollRule(3, "2027-01-01", "2028-01-01", "19230000", "2027", "$192,300"),
|
|
57490
|
+
// 91 FR 67380
|
|
57152
57491
|
{
|
|
57153
57492
|
id: "us.federal.credit.research_asc",
|
|
57154
57493
|
version: 1,
|
|
@@ -57635,7 +57974,9 @@ var incomeRules = [
|
|
|
57635
57974
|
url: "https://www.law.cornell.edu/uscode/text/26/62",
|
|
57636
57975
|
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)."
|
|
57637
57976
|
},
|
|
57638
|
-
|
|
57977
|
+
effectiveFrom: "2025-01-01",
|
|
57978
|
+
effectiveTo: "2026-01-01",
|
|
57979
|
+
// the § 62(a)(2)(D) amount is indexed: $350 from 2026 (v6)
|
|
57639
57980
|
output: { type: "money" },
|
|
57640
57981
|
parameters: {
|
|
57641
57982
|
educatorCap: { value: "30000", type: "money" }
|
|
@@ -57666,6 +58007,50 @@ var incomeRules = [
|
|
|
57666
58007
|
]
|
|
57667
58008
|
}
|
|
57668
58009
|
},
|
|
58010
|
+
{
|
|
58011
|
+
id: "us.federal.above_the_line_adjustments",
|
|
58012
|
+
version: 6,
|
|
58013
|
+
// 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
|
|
58014
|
+
jurisdiction: J17,
|
|
58015
|
+
title: "Above-the-line adjustments before the student-loan deduction (\xBD SE tax + HSA + SEP + SE health insurance + educator + early-withdrawal penalty)",
|
|
58016
|
+
citation: {
|
|
58017
|
+
source: "26 U.S.C. \xA7 62(a)(1), (a)(2)(D), (a)(6), (a)(9), (a)(17), (a)(19)",
|
|
58018
|
+
section: "\xA7 62(a)",
|
|
58019
|
+
url: "https://www.law.cornell.edu/uscode/text/26/62",
|
|
58020
|
+
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)."
|
|
58021
|
+
},
|
|
58022
|
+
effectiveFrom: "2026-01-01",
|
|
58023
|
+
effectiveTo: "2028-01-01",
|
|
58024
|
+
output: { type: "money" },
|
|
58025
|
+
parameters: {
|
|
58026
|
+
educatorCap: { value: "35000", type: "money" }
|
|
58027
|
+
// $350 (2026 and 2027)
|
|
58028
|
+
},
|
|
58029
|
+
formula: {
|
|
58030
|
+
kind: "add",
|
|
58031
|
+
args: [
|
|
58032
|
+
ruleRef20("us.federal.se_tax_half_deduction"),
|
|
58033
|
+
ruleRef20("us.federal.hsa_deduction"),
|
|
58034
|
+
ruleRef20("us.federal.sep_deduction"),
|
|
58035
|
+
ruleRef20("us.federal.sehi_deduction"),
|
|
58036
|
+
{
|
|
58037
|
+
kind: "min",
|
|
58038
|
+
args: [fact25("educatorExpenses"), { kind: "param", name: "educatorCap" }]
|
|
58039
|
+
},
|
|
58040
|
+
// § 62(a)(2)(D): the $300 cap is PER eligible educator — a spouse who
|
|
58041
|
+
// is also an eligible educator gets their own cap
|
|
58042
|
+
{
|
|
58043
|
+
kind: "min",
|
|
58044
|
+
args: [fact25("spouseEducatorExpenses"), { kind: "param", name: "educatorCap" }]
|
|
58045
|
+
},
|
|
58046
|
+
fact25("earlyWithdrawalPenaltyPaid"),
|
|
58047
|
+
// pre-TCJA § 215/§ 62(a)(10): pre-2019-instrument alimony paid
|
|
58048
|
+
fact25("alimonyPaidPre2019"),
|
|
58049
|
+
// Schedule 1 lines 24a-z write-in adjustments (attested total)
|
|
58050
|
+
fact25("otherAdjustments")
|
|
58051
|
+
]
|
|
58052
|
+
}
|
|
58053
|
+
},
|
|
57669
58054
|
{
|
|
57670
58055
|
id: "us.federal.agi_before_student_loan",
|
|
57671
58056
|
version: 2,
|
|
@@ -57997,6 +58382,7 @@ var internationalAndRemainderRules = [
|
|
|
57997
58382
|
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.]"),
|
|
57998
58383
|
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"),
|
|
57999
58384
|
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)'),
|
|
58385
|
+
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)'),
|
|
58000
58386
|
{
|
|
58001
58387
|
id: "us.federal.corp.gbc_allowed",
|
|
58002
58388
|
version: 2,
|
|
@@ -58268,8 +58654,8 @@ var investmentTaxRules = [
|
|
|
58268
58654
|
},
|
|
58269
58655
|
{
|
|
58270
58656
|
id: "us.federal.additional_medicare_tax",
|
|
58271
|
-
version:
|
|
58272
|
-
// 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
|
|
58657
|
+
version: 5,
|
|
58658
|
+
// 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
|
|
58273
58659
|
jurisdiction: "us.federal",
|
|
58274
58660
|
title: "Additional Medicare Tax (0.9%; Form 8959 uses medicareWages box 5 when given, else box-1 wages)",
|
|
58275
58661
|
citation: {
|
|
@@ -58294,11 +58680,21 @@ var investmentTaxRules = [
|
|
|
58294
58680
|
round: "half-up"
|
|
58295
58681
|
});
|
|
58296
58682
|
const wagesPart = pct09({ kind: "max0", arg: { kind: "sub", left: mw, right: amThreshold } });
|
|
58683
|
+
const seIncome = (ruleId) => ({
|
|
58684
|
+
kind: "if",
|
|
58685
|
+
cond: { kind: "cmp", op: "lt", left: ruleRef22(ruleId), right: money24("40000") },
|
|
58686
|
+
then: money24("0"),
|
|
58687
|
+
else: ruleRef22(ruleId)
|
|
58688
|
+
});
|
|
58689
|
+
const line8 = {
|
|
58690
|
+
kind: "add",
|
|
58691
|
+
args: [seIncome("us.federal.se_net_earnings"), seIncome("us.federal.se_net_earnings.spouse")]
|
|
58692
|
+
};
|
|
58297
58693
|
const sePart = pct09({
|
|
58298
58694
|
kind: "max0",
|
|
58299
58695
|
arg: {
|
|
58300
58696
|
kind: "sub",
|
|
58301
|
-
left:
|
|
58697
|
+
left: line8,
|
|
58302
58698
|
right: { kind: "max0", arg: { kind: "sub", left: amThreshold, right: mw } }
|
|
58303
58699
|
}
|
|
58304
58700
|
});
|
|
@@ -58306,7 +58702,7 @@ var investmentTaxRules = [
|
|
|
58306
58702
|
kind: "max0",
|
|
58307
58703
|
arg: {
|
|
58308
58704
|
kind: "sub",
|
|
58309
|
-
left: { kind: "add", args: [mw,
|
|
58705
|
+
left: { kind: "add", args: [mw, line8] },
|
|
58310
58706
|
right: amThreshold
|
|
58311
58707
|
}
|
|
58312
58708
|
});
|
|
@@ -58565,7 +58961,31 @@ var iraRules = [
|
|
|
58565
58961
|
// $129,000
|
|
58566
58962
|
thresholdSpousal: "24200000"
|
|
58567
58963
|
// $242,000
|
|
58568
|
-
}, "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.")
|
|
58964
|
+
}, "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."),
|
|
58965
|
+
{
|
|
58966
|
+
id: "us.federal.ira_deduction",
|
|
58967
|
+
version: 4,
|
|
58968
|
+
jurisdiction: J19,
|
|
58969
|
+
title: "Traditional IRA deduction (TY2027: the \xA7 219 amounts are not yet published)",
|
|
58970
|
+
citation: {
|
|
58971
|
+
source: "26 U.S.C. \xA7 219(b)(5), (g)",
|
|
58972
|
+
section: "\xA7 219(b)(5)(C), (D); \xA7 219(g)(8)",
|
|
58973
|
+
url: "https://www.law.cornell.edu/uscode/text/26/219",
|
|
58974
|
+
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."
|
|
58975
|
+
},
|
|
58976
|
+
effectiveFrom: "2027-01-01",
|
|
58977
|
+
effectiveTo: "2028-01-01",
|
|
58978
|
+
output: { type: "money" },
|
|
58979
|
+
formula: {
|
|
58980
|
+
kind: "if",
|
|
58981
|
+
cond: { kind: "cmp", op: "gt", left: fact28("iraContribution"), right: { kind: "money", cents: "0" } },
|
|
58982
|
+
then: {
|
|
58983
|
+
kind: "unsupported",
|
|
58984
|
+
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"
|
|
58985
|
+
},
|
|
58986
|
+
else: { kind: "money", cents: "0" }
|
|
58987
|
+
}
|
|
58988
|
+
}
|
|
58569
58989
|
];
|
|
58570
58990
|
|
|
58571
58991
|
// ../corpus-us-federal/dist/rules/ira-8606.js
|
|
@@ -58770,6 +59190,14 @@ var itemizedRules = [
|
|
|
58770
59190
|
{ cap: "4040000", threshold: "50500000", thresholdMfs: "25250000" },
|
|
58771
59191
|
{ year: "2026", cap: "$40,400", capHalf: "20,200", threshold: "$505,000" }
|
|
58772
59192
|
),
|
|
59193
|
+
saltRule(
|
|
59194
|
+
5,
|
|
59195
|
+
"2027-01-01",
|
|
59196
|
+
"2028-01-01",
|
|
59197
|
+
// § 164(b)(7)(A)(iii), (B)(ii)(III): 101 percent of the 2026 amounts
|
|
59198
|
+
{ cap: "4080400", threshold: "51005000", thresholdMfs: "25502500" },
|
|
59199
|
+
{ year: "2027", cap: "$40,804", capHalf: "20,402", threshold: "$510,050" }
|
|
59200
|
+
),
|
|
58773
59201
|
{
|
|
58774
59202
|
id: "us.federal.mortgage_interest_deduction",
|
|
58775
59203
|
version: 1,
|
|
@@ -58920,17 +59348,60 @@ var itemizedRules = [
|
|
|
58920
59348
|
]
|
|
58921
59349
|
}
|
|
58922
59350
|
},
|
|
59351
|
+
{
|
|
59352
|
+
id: "us.federal.gambling_loss_deduction",
|
|
59353
|
+
version: 1,
|
|
59354
|
+
jurisdiction: J21,
|
|
59355
|
+
title: "Gambling loss deduction (\xA7 165(d), Schedule A line 16; TY2025: the attested winnings-limited amount)",
|
|
59356
|
+
citation: {
|
|
59357
|
+
source: "26 U.S.C. \xA7 165(d) (as in effect for 2025)",
|
|
59358
|
+
section: "\xA7 165(d)",
|
|
59359
|
+
url: "https://www.law.cornell.edu/uscode/text/26/165",
|
|
59360
|
+
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."
|
|
59361
|
+
},
|
|
59362
|
+
effectiveFrom: "2025-01-01",
|
|
59363
|
+
effectiveTo: "2026-01-01",
|
|
59364
|
+
output: { type: "money" },
|
|
59365
|
+
formula: fact30("gamblingLossesItemized")
|
|
59366
|
+
},
|
|
59367
|
+
{
|
|
59368
|
+
id: "us.federal.gambling_loss_deduction",
|
|
59369
|
+
version: 2,
|
|
59370
|
+
jurisdiction: J21,
|
|
59371
|
+
title: "Gambling loss deduction (\xA7 165(d) as amended by OBBBA: 90 percent of losses, limited to winnings)",
|
|
59372
|
+
citation: {
|
|
59373
|
+
source: "26 U.S.C. \xA7 165(d), as amended by Pub. L. 119-21 (OBBBA) \xA7 70114",
|
|
59374
|
+
section: "\xA7 165(d)(1)",
|
|
59375
|
+
url: "https://www.law.cornell.edu/uscode/text/26/165",
|
|
59376
|
+
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))."
|
|
59377
|
+
},
|
|
59378
|
+
effectiveFrom: "2026-01-01",
|
|
59379
|
+
// permanent: open-ended
|
|
59380
|
+
output: { type: "money" },
|
|
59381
|
+
formula: {
|
|
59382
|
+
kind: "if",
|
|
59383
|
+
cond: { kind: "cmp", op: "gt", left: fact30("gamblingLossesItemized"), right: zero18 },
|
|
59384
|
+
then: {
|
|
59385
|
+
kind: "min",
|
|
59386
|
+
args: [
|
|
59387
|
+
{ kind: "mulRate", base: fact30("gamblingLossesItemized"), rate: { num: "90", den: "100" }, round: "half-up" },
|
|
59388
|
+
fact30("gamblingWinnings")
|
|
59389
|
+
]
|
|
59390
|
+
},
|
|
59391
|
+
else: zero18
|
|
59392
|
+
}
|
|
59393
|
+
},
|
|
58923
59394
|
{
|
|
58924
59395
|
id: "us.federal.itemized_deductions_before_limitation",
|
|
58925
|
-
version:
|
|
58926
|
-
//
|
|
59396
|
+
version: 5,
|
|
59397
|
+
// 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
|
|
58927
59398
|
jurisdiction: J21,
|
|
58928
59399
|
title: "Itemized deductions before the \xA7 68 overall limitation (SALT + mortgage + charitable cash/noncash + medical + casualty + investment interest + gambling losses)",
|
|
58929
59400
|
citation: {
|
|
58930
59401
|
source: "26 U.S.C. \xA7 63(d)",
|
|
58931
59402
|
section: "\xA7 63(d)",
|
|
58932
59403
|
url: "https://www.law.cornell.edu/uscode/text/26/63",
|
|
58933
|
-
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)
|
|
59404
|
+
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.]"
|
|
58934
59405
|
},
|
|
58935
59406
|
effectiveFrom: "2025-01-01",
|
|
58936
59407
|
// structural: open-ended
|
|
@@ -58945,7 +59416,7 @@ var itemizedRules = [
|
|
|
58945
59416
|
ruleRef24("us.federal.medical_expense_deduction"),
|
|
58946
59417
|
ruleRef24("us.federal.casualty_loss_deduction"),
|
|
58947
59418
|
fact30("investmentInterestDeduction"),
|
|
58948
|
-
|
|
59419
|
+
ruleRef24("us.federal.gambling_loss_deduction"),
|
|
58949
59420
|
fact30("otherItemizedDeductions")
|
|
58950
59421
|
]
|
|
58951
59422
|
}
|
|
@@ -59053,6 +59524,93 @@ var itemizedRules = [
|
|
|
59053
59524
|
};
|
|
59054
59525
|
})()
|
|
59055
59526
|
},
|
|
59527
|
+
{
|
|
59528
|
+
id: "us.federal.itemized_deductions",
|
|
59529
|
+
version: 3,
|
|
59530
|
+
jurisdiction: J21,
|
|
59531
|
+
title: "Itemized deductions after the \xA7 68 overall limitation (TY2027: 2/37 of the amount over the 37% bracket)",
|
|
59532
|
+
citation: {
|
|
59533
|
+
source: "26 U.S.C. \xA7 68, as amended by Pub. L. 119-21 (OBBBA) \xA7 70111; Rev. Proc. 2026-35 \xA7 3.01",
|
|
59534
|
+
section: "\xA7 68(a), (b)",
|
|
59535
|
+
url: "https://www.law.cornell.edu/uscode/text/26/68",
|
|
59536
|
+
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.]"
|
|
59537
|
+
},
|
|
59538
|
+
effectiveFrom: "2027-01-01",
|
|
59539
|
+
effectiveTo: "2028-01-01",
|
|
59540
|
+
// the 37%-bracket start is indexed
|
|
59541
|
+
output: { type: "money" },
|
|
59542
|
+
formula: (() => {
|
|
59543
|
+
const itemizedPre = ruleRef24("us.federal.itemized_deductions_before_limitation");
|
|
59544
|
+
const tiIncreased = {
|
|
59545
|
+
kind: "max0",
|
|
59546
|
+
arg: {
|
|
59547
|
+
kind: "sub",
|
|
59548
|
+
left: agi,
|
|
59549
|
+
right: {
|
|
59550
|
+
kind: "add",
|
|
59551
|
+
args: [
|
|
59552
|
+
ruleRef24("us.federal.senior_deduction"),
|
|
59553
|
+
ruleRef24("us.federal.tips_deduction"),
|
|
59554
|
+
ruleRef24("us.federal.overtime_deduction"),
|
|
59555
|
+
ruleRef24("us.federal.car_loan_interest_deduction")
|
|
59556
|
+
]
|
|
59557
|
+
}
|
|
59558
|
+
}
|
|
59559
|
+
};
|
|
59560
|
+
const bracket37Start = {
|
|
59561
|
+
kind: "match",
|
|
59562
|
+
on: fact30("filingStatus"),
|
|
59563
|
+
cases: [
|
|
59564
|
+
{ when: "single", value: money27("66137500") },
|
|
59565
|
+
// $661,375
|
|
59566
|
+
{ when: "hoh", value: money27("66135000") },
|
|
59567
|
+
// $661,350
|
|
59568
|
+
{ when: "mfj", value: money27("79365000") },
|
|
59569
|
+
// $793,650
|
|
59570
|
+
{ when: "qss", value: money27("79365000") },
|
|
59571
|
+
// $793,650
|
|
59572
|
+
{ when: "mfs", value: money27("39682500") }
|
|
59573
|
+
// $396,825
|
|
59574
|
+
]
|
|
59575
|
+
};
|
|
59576
|
+
const reductionBase = {
|
|
59577
|
+
kind: "min",
|
|
59578
|
+
args: [
|
|
59579
|
+
itemizedPre,
|
|
59580
|
+
{ kind: "max0", arg: { kind: "sub", left: tiIncreased, right: bracket37Start } }
|
|
59581
|
+
]
|
|
59582
|
+
};
|
|
59583
|
+
return {
|
|
59584
|
+
kind: "if",
|
|
59585
|
+
cond: {
|
|
59586
|
+
kind: "and",
|
|
59587
|
+
args: [
|
|
59588
|
+
{
|
|
59589
|
+
kind: "cmp",
|
|
59590
|
+
op: "gt",
|
|
59591
|
+
left: ruleRef24("us.federal.se_net_profit"),
|
|
59592
|
+
right: zero18
|
|
59593
|
+
},
|
|
59594
|
+
{ kind: "cmp", op: "gt", left: reductionBase, right: zero18 }
|
|
59595
|
+
]
|
|
59596
|
+
},
|
|
59597
|
+
then: {
|
|
59598
|
+
kind: "unsupported",
|
|
59599
|
+
reason: "the \xA7 68 overall limitation and the \xA7 199A deduction interact through the taxable-income term \u2014 this combination is not modeled yet"
|
|
59600
|
+
},
|
|
59601
|
+
else: {
|
|
59602
|
+
kind: "sub",
|
|
59603
|
+
left: itemizedPre,
|
|
59604
|
+
right: {
|
|
59605
|
+
kind: "mulRate",
|
|
59606
|
+
base: reductionBase,
|
|
59607
|
+
rate: { num: "2", den: "37" },
|
|
59608
|
+
round: "half-up"
|
|
59609
|
+
}
|
|
59610
|
+
}
|
|
59611
|
+
};
|
|
59612
|
+
})()
|
|
59613
|
+
},
|
|
59056
59614
|
{
|
|
59057
59615
|
id: "us.federal.deduction_election",
|
|
59058
59616
|
version: 3,
|
|
@@ -59203,12 +59761,41 @@ var kiddieRules = [
|
|
|
59203
59761
|
]
|
|
59204
59762
|
}
|
|
59205
59763
|
},
|
|
59764
|
+
{
|
|
59765
|
+
id: "us.federal.kiddie.net_unearned_income",
|
|
59766
|
+
version: 2,
|
|
59767
|
+
jurisdiction: J22,
|
|
59768
|
+
title: "Net unearned income of a \xA7 1(g) child (TY2027)",
|
|
59769
|
+
citation: {
|
|
59770
|
+
...CITE4,
|
|
59771
|
+
section: "\xA7 1(g)(4); Rev. Proc. 2026-35 \xA7 3.02",
|
|
59772
|
+
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.]"
|
|
59773
|
+
},
|
|
59774
|
+
effectiveFrom: "2027-01-01",
|
|
59775
|
+
effectiveTo: "2028-01-01",
|
|
59776
|
+
output: { type: "money" },
|
|
59777
|
+
parameters: {
|
|
59778
|
+
threshold: { value: "280000", type: "money" }
|
|
59779
|
+
// $2,800 = 2 × $1,400
|
|
59780
|
+
},
|
|
59781
|
+
formula: {
|
|
59782
|
+
kind: "min",
|
|
59783
|
+
args: [
|
|
59784
|
+
{
|
|
59785
|
+
kind: "max0",
|
|
59786
|
+
arg: { kind: "sub", left: fact31("taxableInterest"), right: param17("threshold") }
|
|
59787
|
+
},
|
|
59788
|
+
ruleRef25("us.federal.taxable_income")
|
|
59789
|
+
]
|
|
59790
|
+
}
|
|
59791
|
+
},
|
|
59206
59792
|
// v3/v4: the § 1(g) capital-gains refusal guard also catches the standalone qualifiedDividends fact
|
|
59207
59793
|
// v5/v6: the refusal guard also catches shortTermCapitalGains/ordinaryDividends (unearned income
|
|
59208
59794
|
// the "unearned income ≈ taxable interest" approximation in net_unearned_income would otherwise drop)
|
|
59209
59795
|
// v5/v6: the refusal guard predated the per-bucket capital-loss facts and netCapitalLoss
|
|
59210
59796
|
kiddieTaxRule(7, "2025-01-01", "2026-01-01", "2025"),
|
|
59211
59797
|
kiddieTaxRule(8, "2026-01-01", "2027-01-01", "2026"),
|
|
59798
|
+
kiddieTaxRule(9, "2027-01-01", "2028-01-01", "2027"),
|
|
59212
59799
|
{
|
|
59213
59800
|
id: "us.federal.income_tax_before_credits.kiddie",
|
|
59214
59801
|
version: 1,
|
|
@@ -59225,6 +59812,23 @@ var kiddieRules = [
|
|
|
59225
59812
|
applicability: fact31("isSubjectToKiddieTax"),
|
|
59226
59813
|
formula: ruleRef25("us.federal.kiddie_tax"),
|
|
59227
59814
|
overrides: { ruleId: "us.federal.income_tax_before_credits", priority: 20 }
|
|
59815
|
+
},
|
|
59816
|
+
{
|
|
59817
|
+
id: "us.federal.income_tax_before_credits.kiddie",
|
|
59818
|
+
version: 2,
|
|
59819
|
+
jurisdiction: J22,
|
|
59820
|
+
title: "\xA7 1(g) override: a kiddie child's income tax is the Form 8615 tax",
|
|
59821
|
+
citation: {
|
|
59822
|
+
...CITE4,
|
|
59823
|
+
section: "\xA7 1(g)(1)",
|
|
59824
|
+
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)."
|
|
59825
|
+
},
|
|
59826
|
+
effectiveFrom: "2027-01-01",
|
|
59827
|
+
effectiveTo: "2028-01-01",
|
|
59828
|
+
output: { type: "money" },
|
|
59829
|
+
applicability: fact31("isSubjectToKiddieTax"),
|
|
59830
|
+
formula: ruleRef25("us.federal.kiddie_tax"),
|
|
59831
|
+
overrides: { ruleId: "us.federal.income_tax_before_credits", priority: 20 }
|
|
59228
59832
|
}
|
|
59229
59833
|
];
|
|
59230
59834
|
|
|
@@ -59471,7 +60075,66 @@ function mileageRule(version2, from, to, rateNum, rateLabel, noticeLabel) {
|
|
|
59471
60075
|
}
|
|
59472
60076
|
var mileageRules = [
|
|
59473
60077
|
mileageRule(1, "2025-01-01", "2026-01-01", "700", "70 cents", "Notice 2025-5"),
|
|
59474
|
-
|
|
60078
|
+
{
|
|
60079
|
+
id: "us.federal.vehicle_standard_mileage",
|
|
60080
|
+
version: 3,
|
|
60081
|
+
// v2 applied 72.5¢ to every 2026 mile; Announcement 2026-11 raised the rate to 76¢ from July 1, 2026
|
|
60082
|
+
jurisdiction: J23,
|
|
60083
|
+
title: "Business standard mileage deduction (2026: 72.5 cents/mile through June 30, 76 cents/mile from July 1)",
|
|
60084
|
+
citation: {
|
|
60085
|
+
source: "Notice 2026-10; Announcement 2026-11 (2026-29 I.R.B.); Rev. Proc. 2019-46",
|
|
60086
|
+
section: "Announcement 2026-11",
|
|
60087
|
+
url: "https://www.irs.gov/irb/2026-29_irb",
|
|
60088
|
+
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.]"
|
|
60089
|
+
},
|
|
60090
|
+
effectiveFrom: "2026-01-01",
|
|
60091
|
+
effectiveTo: "2027-01-01",
|
|
60092
|
+
output: { type: "money" },
|
|
60093
|
+
formula: {
|
|
60094
|
+
kind: "if",
|
|
60095
|
+
cond: {
|
|
60096
|
+
kind: "cmp",
|
|
60097
|
+
op: "gt",
|
|
60098
|
+
left: fact32("businessMilesDriven"),
|
|
60099
|
+
right: { kind: "int", value: "0" }
|
|
60100
|
+
},
|
|
60101
|
+
then: {
|
|
60102
|
+
kind: "if",
|
|
60103
|
+
cond: {
|
|
60104
|
+
kind: "cmp",
|
|
60105
|
+
op: "gt",
|
|
60106
|
+
left: fact32("businessMilesDrivenFromJuly"),
|
|
60107
|
+
right: fact32("businessMilesDriven")
|
|
60108
|
+
},
|
|
60109
|
+
then: {
|
|
60110
|
+
kind: "unsupported",
|
|
60111
|
+
reason: "businessMilesDrivenFromJuly is part of businessMilesDriven and cannot exceed it"
|
|
60112
|
+
},
|
|
60113
|
+
else: {
|
|
60114
|
+
kind: "add",
|
|
60115
|
+
args: [
|
|
60116
|
+
{
|
|
60117
|
+
kind: "mulRate",
|
|
60118
|
+
base: {
|
|
60119
|
+
kind: "mulInt",
|
|
60120
|
+
base: money29("100"),
|
|
60121
|
+
count: { kind: "sub", left: fact32("businessMilesDriven"), right: fact32("businessMilesDrivenFromJuly") }
|
|
60122
|
+
},
|
|
60123
|
+
rate: { num: "725", den: "1000" },
|
|
60124
|
+
round: "half-up"
|
|
60125
|
+
},
|
|
60126
|
+
{
|
|
60127
|
+
kind: "mulRate",
|
|
60128
|
+
base: { kind: "mulInt", base: money29("100"), count: fact32("businessMilesDrivenFromJuly") },
|
|
60129
|
+
rate: { num: "760", den: "1000" },
|
|
60130
|
+
round: "half-up"
|
|
60131
|
+
}
|
|
60132
|
+
]
|
|
60133
|
+
}
|
|
60134
|
+
},
|
|
60135
|
+
else: money29("0")
|
|
60136
|
+
}
|
|
60137
|
+
}
|
|
59475
60138
|
];
|
|
59476
60139
|
|
|
59477
60140
|
// ../corpus-us-federal/dist/rules/pension.js
|
|
@@ -59788,7 +60451,9 @@ var actcMaximum = {
|
|
|
59788
60451
|
url: "https://www.irs.gov/instructions/i1040s8",
|
|
59789
60452
|
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.]"
|
|
59790
60453
|
},
|
|
59791
|
-
|
|
60454
|
+
effectiveFrom: "2025-01-01",
|
|
60455
|
+
effectiveTo: "2027-01-01",
|
|
60456
|
+
// the § 24(h)(5) amount is indexed: $1,800 for 2027 (v2)
|
|
59792
60457
|
output: { type: "money" },
|
|
59793
60458
|
parameters: {
|
|
59794
60459
|
refundableCapPerChild: { value: "170000", type: "money" },
|
|
@@ -59803,6 +60468,33 @@ var actcMaximum = {
|
|
|
59803
60468
|
round: "half-up"
|
|
59804
60469
|
})
|
|
59805
60470
|
};
|
|
60471
|
+
var actcMaximum2027 = {
|
|
60472
|
+
id: `${J26}.actc.maximum`,
|
|
60473
|
+
version: 2,
|
|
60474
|
+
jurisdiction: J26,
|
|
60475
|
+
title: "Maximum additional child tax credit (Schedule 8812 Credit Limit Worksheet B, line 13; TY2027)",
|
|
60476
|
+
citation: {
|
|
60477
|
+
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",
|
|
60478
|
+
section: "\xA7 24(d)(1)(B)(i); \xA7 24(h)(5)",
|
|
60479
|
+
url: "https://www.irs.gov/instructions/i1040s8",
|
|
60480
|
+
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.]"
|
|
60481
|
+
},
|
|
60482
|
+
effectiveFrom: "2027-01-01",
|
|
60483
|
+
effectiveTo: "2028-01-01",
|
|
60484
|
+
output: { type: "money" },
|
|
60485
|
+
parameters: {
|
|
60486
|
+
refundableCapPerChild: { value: "180000", type: "money" },
|
|
60487
|
+
// $1,800 (2027)
|
|
60488
|
+
earnedIncomeFloor: { value: "250000", type: "money" }
|
|
60489
|
+
// $2,500
|
|
60490
|
+
},
|
|
60491
|
+
formula: min4({ kind: "mulInt", base: param18("refundableCapPerChild"), count: fact35("qualifyingChildren") }, {
|
|
60492
|
+
kind: "mulRate",
|
|
60493
|
+
base: max06(sub4(add4(fact35("wages"), max06(sub4(ruleRef30("us.federal.se_net_profit"), ruleRef30("us.federal.se_tax_half_deduction")))), add4(param18("earnedIncomeFloor"), fact35("scheduleCNetLoss")))),
|
|
60494
|
+
rate: { num: "15", den: "100" },
|
|
60495
|
+
round: "half-up"
|
|
60496
|
+
})
|
|
60497
|
+
};
|
|
59806
60498
|
var worksheetBApplies = {
|
|
59807
60499
|
id: `${J26}.energy.clean.worksheet_b_applies`,
|
|
59808
60500
|
version: 1,
|
|
@@ -59882,6 +60574,7 @@ var residentialEnergyRules = [
|
|
|
59882
60574
|
excerpt: "Line 13: 'Add lines 6b, 11, and 12'."
|
|
59883
60575
|
}, add4(ruleRef30(`${J26}.energy.clean.line6b`), ruleRef30(`${J26}.energy.clean.line11`), ruleRef30(`${J26}.energy.clean.line12`))),
|
|
59884
60576
|
actcMaximum,
|
|
60577
|
+
actcMaximum2027,
|
|
59885
60578
|
worksheetBApplies,
|
|
59886
60579
|
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)", {
|
|
59887
60580
|
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",
|
|
@@ -73193,6 +73886,32 @@ var thresholdRules = [
|
|
|
73193
73886
|
]
|
|
73194
73887
|
}
|
|
73195
73888
|
},
|
|
73889
|
+
{
|
|
73890
|
+
id: `${J29}.qbi.threshold`,
|
|
73891
|
+
version: 3,
|
|
73892
|
+
jurisdiction: J29,
|
|
73893
|
+
title: "\xA7 199A threshold amount (TY2027)",
|
|
73894
|
+
citation: {
|
|
73895
|
+
source: "26 U.S.C. \xA7 199A(e)(2); Rev. Proc. 2026-35 \xA7 3.28(1)",
|
|
73896
|
+
section: "\xA7 199A(e)(2)",
|
|
73897
|
+
url: CORNELL,
|
|
73898
|
+
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))."
|
|
73899
|
+
},
|
|
73900
|
+
effectiveFrom: "2027-01-01",
|
|
73901
|
+
effectiveTo: "2028-01-01",
|
|
73902
|
+
output: { type: "money" },
|
|
73903
|
+
formula: {
|
|
73904
|
+
kind: "match",
|
|
73905
|
+
on: fact39("filingStatus"),
|
|
73906
|
+
cases: [
|
|
73907
|
+
{ when: "mfj", value: money36("41660000") },
|
|
73908
|
+
{ when: "mfs", value: money36("20832500") },
|
|
73909
|
+
{ when: "single", value: money36("20830000") },
|
|
73910
|
+
{ when: "hoh", value: money36("20830000") },
|
|
73911
|
+
{ when: "qss", value: money36("20830000") }
|
|
73912
|
+
]
|
|
73913
|
+
}
|
|
73914
|
+
},
|
|
73196
73915
|
{
|
|
73197
73916
|
id: `${J29}.qbi.phase_in_range`,
|
|
73198
73917
|
version: 1,
|
|
@@ -73225,6 +73944,22 @@ var thresholdRules = [
|
|
|
73225
73944
|
output: { type: "money" },
|
|
73226
73945
|
formula: iff23(isStatus32("mfj"), money36("15000000"), money36("7500000"))
|
|
73227
73946
|
},
|
|
73947
|
+
{
|
|
73948
|
+
id: `${J29}.qbi.phase_in_range`,
|
|
73949
|
+
version: 3,
|
|
73950
|
+
jurisdiction: J29,
|
|
73951
|
+
title: "\xA7 199A phase-in range (TY2027: $75,000, $150,000 joint \u2014 OBBBA \xA7 70105)",
|
|
73952
|
+
citation: {
|
|
73953
|
+
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)",
|
|
73954
|
+
section: "\xA7 199A(b)(3)(B)(ii)(II)",
|
|
73955
|
+
url: CORNELL,
|
|
73956
|
+
excerpt: "For taxable years beginning after December 31, 2025, the phase-in range is $75,000 ($150,000 for a joint return)."
|
|
73957
|
+
},
|
|
73958
|
+
effectiveFrom: "2027-01-01",
|
|
73959
|
+
effectiveTo: "2028-01-01",
|
|
73960
|
+
output: { type: "money" },
|
|
73961
|
+
formula: iff23(isStatus32("mfj"), money36("15000000"), money36("7500000"))
|
|
73962
|
+
},
|
|
73228
73963
|
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", max028(sub28(ruleRef33(`${J29}.taxable_income_before_qbi`), ruleRef33(`${J29}.qbi.threshold`))))
|
|
73229
73964
|
];
|
|
73230
73965
|
function scheduleA(u, amount) {
|
|
@@ -73340,7 +74075,7 @@ var hasBusinessIncome = {
|
|
|
73340
74075
|
]
|
|
73341
74076
|
};
|
|
73342
74077
|
var taxableBeforeQbi = ruleRef34("us.federal.taxable_income_before_qbi");
|
|
73343
|
-
function qbiRule(version2, effectiveFrom, effectiveTo, yearLabel, source,
|
|
74078
|
+
function qbiRule(version2, effectiveFrom, effectiveTo, yearLabel, source, minimum) {
|
|
73344
74079
|
const overall = pctOf3("20", "100", {
|
|
73345
74080
|
kind: "max0",
|
|
73346
74081
|
arg: {
|
|
@@ -73353,8 +74088,8 @@ function qbiRule(version2, effectiveFrom, effectiveTo, yearLabel, source, withMi
|
|
|
73353
74088
|
}
|
|
73354
74089
|
});
|
|
73355
74090
|
const limited = { kind: "min", args: [ruleRef34("us.federal.qbi.total_component"), overall] };
|
|
73356
|
-
const withFloor =
|
|
73357
|
-
// OBBBA § 70105:
|
|
74091
|
+
const withFloor = minimum ? {
|
|
74092
|
+
// OBBBA § 70105: the § 199A(i) minimum (TY2026+; indexed after 2026)
|
|
73358
74093
|
kind: "if",
|
|
73359
74094
|
cond: { kind: "cmp", op: "ge", left: ruleRef34("us.federal.qbi.active_total"), right: param23("minQbiFloor") },
|
|
73360
74095
|
then: { kind: "max", args: [limited, param23("minDeduction")] },
|
|
@@ -73369,16 +74104,14 @@ function qbiRule(version2, effectiveFrom, effectiveTo, yearLabel, source, withMi
|
|
|
73369
74104
|
source: `26 U.S.C. \xA7 199A; ${source}`,
|
|
73370
74105
|
section: "\xA7 199A(a)\u2013(d)",
|
|
73371
74106
|
url: "https://www.law.cornell.edu/uscode/text/26/199A",
|
|
73372
|
-
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.${
|
|
74107
|
+
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.]`
|
|
73373
74108
|
},
|
|
73374
74109
|
effectiveFrom,
|
|
73375
74110
|
effectiveTo,
|
|
73376
74111
|
output: { type: "money" },
|
|
73377
|
-
parameters:
|
|
73378
|
-
minDeduction: { value:
|
|
73379
|
-
|
|
73380
|
-
minQbiFloor: { value: "100000", type: "money" }
|
|
73381
|
-
// $1,000
|
|
74112
|
+
parameters: minimum ? {
|
|
74113
|
+
minDeduction: { value: minimum.deductionCents, type: "money" },
|
|
74114
|
+
minQbiFloor: { value: minimum.testCents, type: "money" }
|
|
73382
74115
|
} : {},
|
|
73383
74116
|
formula: {
|
|
73384
74117
|
kind: "if",
|
|
@@ -73396,7 +74129,7 @@ var qbiRules = [
|
|
|
73396
74129
|
"2026-01-01",
|
|
73397
74130
|
"2025",
|
|
73398
74131
|
"Rev. Proc. 2024-40 \xA7 2.27",
|
|
73399
|
-
|
|
74132
|
+
null
|
|
73400
74133
|
),
|
|
73401
74134
|
qbiRule(
|
|
73402
74135
|
14,
|
|
@@ -73405,8 +74138,9 @@ var qbiRules = [
|
|
|
73405
74138
|
"2027-01-01",
|
|
73406
74139
|
"2026",
|
|
73407
74140
|
"Rev. Proc. 2025-32 \xA7 4.26; OBBBA \xA7 70105 (range + $400 minimum)",
|
|
73408
|
-
|
|
74141
|
+
{ deductionCents: "40000", testCents: "100000" }
|
|
73409
74142
|
),
|
|
74143
|
+
qbiRule(15, "2027-01-01", "2028-01-01", "2027", "Rev. Proc. 2026-35 \xA7 3.28; OBBBA \xA7 70105", { deductionCents: "41500", testCents: "103000" }),
|
|
73410
74144
|
...qbiBusinessRules
|
|
73411
74145
|
];
|
|
73412
74146
|
|
|
@@ -73608,8 +74342,11 @@ var selfEmploymentRules = [
|
|
|
73608
74342
|
// $176,100
|
|
73609
74343
|
seTaxRule(taxpayer, 2, "2026-01-01", "2027-01-01", "18450000", "2026"),
|
|
73610
74344
|
// $184,500
|
|
74345
|
+
seTaxRule(taxpayer, 3, "2027-01-01", "2028-01-01", "19230000", "2027"),
|
|
74346
|
+
// $192,300 (91 FR 67380)
|
|
73611
74347
|
seTaxRule(spouse, 1, "2025-01-01", "2026-01-01", "17610000", "2025"),
|
|
73612
74348
|
seTaxRule(spouse, 2, "2026-01-01", "2027-01-01", "18450000", "2026"),
|
|
74349
|
+
seTaxRule(spouse, 3, "2027-01-01", "2028-01-01", "19230000", "2027"),
|
|
73613
74350
|
{
|
|
73614
74351
|
id: "us.federal.se_tax",
|
|
73615
74352
|
version: 7,
|
|
@@ -74037,6 +74774,37 @@ var standardDeductionRules = [
|
|
|
74037
74774
|
]
|
|
74038
74775
|
}
|
|
74039
74776
|
},
|
|
74777
|
+
{
|
|
74778
|
+
id: "us.federal.standard_deduction.base_amount",
|
|
74779
|
+
version: 4,
|
|
74780
|
+
jurisdiction: J30,
|
|
74781
|
+
title: "Basic standard deduction amount by filing status (TY2027)",
|
|
74782
|
+
citation: {
|
|
74783
|
+
source: "26 U.S.C. \xA7 63(c); Rev. Proc. 2026-35",
|
|
74784
|
+
section: "Rev. Proc. 2026-35 \xA7 3.15(1)",
|
|
74785
|
+
url: "https://www.irs.gov/pub/irs-drop/rp-26-35.pdf",
|
|
74786
|
+
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)."
|
|
74787
|
+
},
|
|
74788
|
+
effectiveFrom: "2027-01-01",
|
|
74789
|
+
effectiveTo: "2028-01-01",
|
|
74790
|
+
output: { type: "money" },
|
|
74791
|
+
formula: {
|
|
74792
|
+
kind: "match",
|
|
74793
|
+
on: fact44("filingStatus"),
|
|
74794
|
+
cases: [
|
|
74795
|
+
{ when: "single", value: money41("1660000") },
|
|
74796
|
+
// $16,600
|
|
74797
|
+
{ when: "mfs", value: money41("1660000") },
|
|
74798
|
+
// $16,600
|
|
74799
|
+
{ when: "mfj", value: money41("3320000") },
|
|
74800
|
+
// $33,200
|
|
74801
|
+
{ when: "qss", value: money41("3320000") },
|
|
74802
|
+
// $33,200 (surviving spouse)
|
|
74803
|
+
{ when: "hoh", value: money41("2492500") }
|
|
74804
|
+
// $24,925
|
|
74805
|
+
]
|
|
74806
|
+
}
|
|
74807
|
+
},
|
|
74040
74808
|
{
|
|
74041
74809
|
id: "us.federal.standard_deduction.base",
|
|
74042
74810
|
version: 1,
|
|
@@ -74088,6 +74856,39 @@ var standardDeductionRules = [
|
|
|
74088
74856
|
},
|
|
74089
74857
|
overrides: { ruleId: "us.federal.standard_deduction.base", priority: 10 }
|
|
74090
74858
|
},
|
|
74859
|
+
{
|
|
74860
|
+
id: "us.federal.standard_deduction.dependent_limit",
|
|
74861
|
+
version: 2,
|
|
74862
|
+
jurisdiction: J30,
|
|
74863
|
+
title: "Limitation on basic standard deduction of a dependent (TY2027)",
|
|
74864
|
+
citation: {
|
|
74865
|
+
source: "26 U.S.C. \xA7 63(c)(5); Rev. Proc. 2026-35 \xA7 3.15(2)",
|
|
74866
|
+
section: "\xA7 63(c)(5)",
|
|
74867
|
+
url: "https://www.irs.gov/pub/irs-drop/rp-26-35.pdf",
|
|
74868
|
+
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."
|
|
74869
|
+
},
|
|
74870
|
+
effectiveFrom: "2027-01-01",
|
|
74871
|
+
effectiveTo: "2028-01-01",
|
|
74872
|
+
output: { type: "money" },
|
|
74873
|
+
applicability: fact44("isClaimedAsDependent"),
|
|
74874
|
+
// min(normal base amount, max($1,400, earned income + $500)); earned income ≈ wages
|
|
74875
|
+
formula: {
|
|
74876
|
+
kind: "min",
|
|
74877
|
+
args: [
|
|
74878
|
+
ruleRef38("us.federal.standard_deduction.base_amount"),
|
|
74879
|
+
{
|
|
74880
|
+
kind: "max",
|
|
74881
|
+
args: [
|
|
74882
|
+
money41("140000"),
|
|
74883
|
+
// $1,400
|
|
74884
|
+
{ kind: "add", args: [fact44("wages"), money41("50000")] }
|
|
74885
|
+
// + $500
|
|
74886
|
+
]
|
|
74887
|
+
}
|
|
74888
|
+
]
|
|
74889
|
+
},
|
|
74890
|
+
overrides: { ruleId: "us.federal.standard_deduction.base", priority: 10 }
|
|
74891
|
+
},
|
|
74091
74892
|
{
|
|
74092
74893
|
id: "us.federal.standard_deduction.mfs_spouse_itemizes",
|
|
74093
74894
|
version: 1,
|
|
@@ -74127,6 +74928,12 @@ var standardDeductionRules = [
|
|
|
74127
74928
|
married: "$1,650",
|
|
74128
74929
|
unmarried: "$2,050"
|
|
74129
74930
|
}),
|
|
74931
|
+
additionalRule(3, "2027-01-01", "2028-01-01", "170000", "210000", {
|
|
74932
|
+
sourceRevProc: "Rev. Proc. 2026-35 \xA7 3.15(3)",
|
|
74933
|
+
year: "2027",
|
|
74934
|
+
married: "$1,700",
|
|
74935
|
+
unmarried: "$2,100"
|
|
74936
|
+
}),
|
|
74130
74937
|
{
|
|
74131
74938
|
id: "us.federal.standard_deduction",
|
|
74132
74939
|
version: 1,
|
|
@@ -74391,7 +75198,7 @@ var tipsOvertimeRules = [
|
|
|
74391
75198
|
// ../corpus-us-federal/dist/index.js
|
|
74392
75199
|
var corpusInput = {
|
|
74393
75200
|
name: "@invaro/opentax-corpus-us-federal",
|
|
74394
|
-
version: "0.
|
|
75201
|
+
version: "0.45.0",
|
|
74395
75202
|
rules: [
|
|
74396
75203
|
...corporateRules,
|
|
74397
75204
|
...corporate1120Rules,
|
|
@@ -74969,6 +75776,7 @@ var INDIVIDUAL_GROUPS = {
|
|
|
74969
75776
|
"selfEmployedHealthPremiums",
|
|
74970
75777
|
"homeOfficeSquareFeet",
|
|
74971
75778
|
"businessMilesDriven",
|
|
75779
|
+
"businessMilesDrivenFromJuly",
|
|
74972
75780
|
"aggregateBusinessLoss"
|
|
74973
75781
|
],
|
|
74974
75782
|
adjustments: [
|
|
@@ -74999,6 +75807,7 @@ var INDIVIDUAL_GROUPS = {
|
|
|
74999
75807
|
"noncashCharitableContributions",
|
|
75000
75808
|
"investmentInterestDeduction",
|
|
75001
75809
|
"gamblingLossesItemized",
|
|
75810
|
+
"gamblingWinnings",
|
|
75002
75811
|
"otherItemizedDeductions",
|
|
75003
75812
|
"casualtyFederalDisasterLosses",
|
|
75004
75813
|
"casualtyQualifiedDisasterLosses",
|