Form 8960 lines 7, 9a and 9b always compute as zero. No node writes line7_other_modifications, line9a_investment_interest_expense or line9b_state_local_tax (they exist only in the form8960 schema and the PDF/MeF mappers), and form8960 is not an input node, so a user cannot supply them either. Net investment income is therefore overstated whenever any of the three applies, and line 17 NIIT with it.
Found while re-running a real TY2025 return against the TurboTax-filed original on v2.0.4. After #39 and #40, every other line of that return matched, and the entire remaining total-tax difference was this form: 8959 matched to the dollar, and 8960 line 12 was high by exactly (9a + 9b − line 7).
Repro (v2.0.4)
R=$(opentax return create --year 2025 | grep -o '[0-9a-f-]\{36\}' | head -1)
opentax form add --returnId $R --node_type general '{"filing_status":"single"}'
opentax form add --returnId $R --node_type w2 '{"box1_wages":300000,"box2_fed_withheld":60000,"box15_state":"CA","box17_state_withheld":25000}'
opentax form add --returnId $R --node_type f1099div '{"payerName":"Example Broker","box1a":50000,"box1b":0,"box11":false,"isNominee":false}'
opentax form add --returnId $R --node_type f1099m '{"payer_name":"Example Broker","payer_tin":"123456789","recipient_tin":"987654321","box8_substitute_payments":1000}'
opentax form add --returnId $R --node_type schedule_a '{"line_9_investment_interest":5000,"line_8a_mortgage_interest_1098":20000}'
opentax form add --returnId $R --node_type form8960 '{"filing_status":"single","magi":351000,"line9a_investment_interest_expense":5000}'
opentax return export --returnId $R --type pdf --force --output out.pdf
The form8960 add fails with Node type form8960 is not a valid input for f1040/2025. The exported Form 8960 shows line 2 = 50,000, line 8 = 50,000, lines 7, 9a, 9b and 11 blank, line 12 = 50,000, line 17 = 1,900.
Expected
- Line 7: the 1,000 of substitute payments in lieu of dividends (1099-MISC box 8) is investment income. It already reaches Form 1040 line 8 via Schedule 1, but not 8960.
- Line 9a: the deductible investment interest already on Schedule A line 9 (5,000 here) should flow to 9a.
- Line 9b: the portion of state income tax allocable to investment income. The instructions allow any reasonable method; a common one is state tax × (NII ÷ AGI). This one needs either a computed default or an input.
In this repro that means line 12 should be at most 46,000 even before 9b, not 50,000.
Suggested fix
Wire schedule_a line 9 to form8960 9a and the f1099m box 8 amount to line 7. For 9b, compute a ratable allocation by default, and consider allowing a user override, since the allocation method is the taxpayer's choice.
Form 8960 lines 7, 9a and 9b always compute as zero. No node writes
line7_other_modifications,line9a_investment_interest_expenseorline9b_state_local_tax(they exist only in theform8960schema and the PDF/MeF mappers), andform8960is not an input node, so a user cannot supply them either. Net investment income is therefore overstated whenever any of the three applies, and line 17 NIIT with it.Found while re-running a real TY2025 return against the TurboTax-filed original on v2.0.4. After #39 and #40, every other line of that return matched, and the entire remaining total-tax difference was this form: 8959 matched to the dollar, and 8960 line 12 was high by exactly (9a + 9b − line 7).
Repro (v2.0.4)
The
form8960add fails withNode type form8960 is not a valid input for f1040/2025. The exported Form 8960 shows line 2 = 50,000, line 8 = 50,000, lines 7, 9a, 9b and 11 blank, line 12 = 50,000, line 17 = 1,900.Expected
In this repro that means line 12 should be at most 46,000 even before 9b, not 50,000.
Suggested fix
Wire
schedule_aline 9 toform89609a and thef1099mbox 8 amount to line 7. For 9b, compute a ratable allocation by default, and consider allowing a user override, since the allocation method is the taxpayer's choice.