@invaro/opentax 0.10.1 → 0.11.0

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