Repository navigation
Clarify shared self-employment gross/net inputs and plan program adoption #9682
Description
Problem and scope
Existing self-employment income variables represent net profit, while some benefit rules start from gross business income and apply their own deductions. We need clear shared definitions and a careful adoption plan before changing those programs. Simply adding another deduction to an existing net amount can double-count expenses; replacing net income everywhere would also affect taxes, datasets, and API callers.
PR #9665 preserves a proposed shared-variable addition for later work: one expense input and one derived gross-income variable, with tests and a changelog. It is closed without merging, with its branch retained so it can be reopened. This issue tracks the unresolved design and later program adoption; the proposal is not a settled universal accounting or benefit-policy interface.
The all-state LIHEAP implementation proceeds independently. LIHEAP, including Kansas (#9663), will not adopt these new variables as part of that effort and is not blocked on this issue or #9665.
Proposed shared design
Preserve the names, formulas, defaults, data mappings, and behavior of existing net-income variables. Clarifying their descriptions is a future metadata task, not a change to their accounting meaning.
| Variable | Proposed treatment |
|---|---|
self_employment_income |
Existing non-farm, non-SSTB net income, including labor-supply responses. Preserve it and its _before_lsr input. |
sstb_self_employment_income |
Existing SSTB net income, including labor-supply responses. Preserve it and its _before_lsr input. |
farm_operations_income |
Preserve existing active-farm net income. |
self_employment_expense |
New annual person-level empty input, ordinary zero default. Matching business expenses already deducted from the three net amounts above, excluding cost of goods sold, employee work expenses, and personal income and self-employment taxes. |
self_employment_gross_income |
New annual person-level calculation: add matching expenses back to those net amounts, subject to the proposed fallback floor below. Represents income after cost of goods sold, not gross receipts before those costs. |
The intended questionnaire asks for net self-employment income after business expenses and before personal taxes, plus one matching expense answer covering the same businesses and reporting period. Gross income is derived; a third independent gross-income question and detailed expense-category inputs are not required by this proposal. Employee wages remain separate.
The dependency is one-way: net income and expenses produce gross income. A direct gross override does not infer net profit or expenses. Existing net-income variables must not depend on gross, which would introduce a cycle.
Accounting reference and example
The tax year 2025 forms illustrate the definition: Schedule C gross income on line 7 equals net profit on line 31 plus expenses on lines 28 and 30, before any applicable tax loss limitations; Schedule F gross income on line 9 equals net profit on line 34 plus expenses on line 33. Cost of goods sold stays excluded, including the accrual-method adjustment in Schedule F Part III. These references explain tax accounting, not benefit-program allowable deductions.
For example, $15,000 net profit plus $25,000 of matching expenses reconstructs $40,000 gross income after cost of goods sold. A hypothetical program allowing a 25% standard deduction would then count $30,000 before any further disregards. It must not subtract the original $25,000 again as well as that standard deduction.
Decisions to resolve before release or adoption
- Losses and missing expenses: Add shared self-employment expenses and derive gross self-employment income #9665 floors the result at the sum of the three net-income categories individually floored at zero. With $6,000 regular profit, a $10,000 farm loss, and no reported expenses, it returns $6,000. This is a modeling fallback, not an IRS rule or a program's loss rule. Actual tax-reported gross income can be negative. Evaluate this choice before release. Zero remains the input default; an omitted answer does not establish zero actual expenses.
- Coverage: the aggregate excludes separately reported partnership self-employment earnings and loses farm/non-farm gross detail. Its floor applies per income category, not per individual business. Decide whether a concrete consumer needs a different base or more information; do not add speculative inputs.
- Time and behavioral basis: annual reporting and monthly conversion do not settle program-specific averaging. Some benefit consumers use
_before_lsrincome; the proposed non-farm reconstruction uses income after labor-supply responses. Resolve that difference before adoption. - Expense definition and entity: accounting add-backs are not universal allowable program expenses. For example, the person-level input is not interchangeable with the existing SPM-unit SNAP actual-expense input. Review allowable costs, actual-versus-standard elections, household composition, and loss treatment for each program.
- Data and uprating: assess expense uprating against the existing net-income series. Datasets with only net profit do not establish expenses or true gross income. Keep data construction and calibration decisions explicit, and assess microsimulation and API effects separately.
Staged roadmap
- Reopen Add shared self-employment expenses and derive gross self-employment income #9665 when work resumes. Settle the shared definitions and fallback, retain ordinary zero defaults and explicit addition, and keep the shared-variable PR free of program migrations. Restore a concise usage guide in a suitable follow-up once the design is settled.
- Clarify existing net-income and
_before_lsrdescriptions without changing their semantics, formulas, or data mappings. - Inventory consumers through Python formulas, parameter-defined income-source lists, and indirect aggregates. Classify each as tax net profit, gross receipts, gross after cost of goods sold, or a program-specific amount, and record its labor-supply basis.
- Audit SNAP separately, including its current use of net
_before_lsrsources as the starting base, state standard deductions, actual-expense inputs, and farm-loss treatment. Coordinate with SNAP: count farm self-employment income and apply the farm-loss offset #9673 rather than duplicating its work. - Review TANF state by state, starting with the California and Texas paths inspected during this design work and the existing Illinois issue Deduct self-employment business expenses from TANF IL countable income #337. Check business deductions before combining self-employment income with wages and applying later earned-income disregards. Existing net inputs may already reflect some allowed costs.
- Review child care and other affected benefit consumers, excluding LIHEAP, based on the inventory. Oregon ERDC and South Dakota child care are initial paths to inspect; their separate self-employment handling alone is not evidence of a defect.
- Preserve tax and other consumers that require net income. Change a consumer only after establishing its policy need.
For every program migration, record dated legal references, income basis, allowable expenses or standard rates, elections, losses, averaging, household basis, and later disregards. Include a before/after household example, relevant YAML tests, unaffected-calculation regressions, and an explanation of API and microsimulation effects. Keep partner fixtures unchanged. Use separate program PRs and small shared calculations justified by actual consumers.
Before eventually merging the shared variables, verify defaults, matched add-backs, missing/partial expenses, losses, mixed farm/SSTB income, multiple people, direct overrides, and monthly conversion. Verify existing net income, wages, and self-employment taxes remain unchanged; include the code-health guard against built-in sum over entity calls. Validate the final published revision with the relevant local and CI suites when work resumes.
Related work
- Add shared self-employment expenses and derive gross self-employment income #9665 — shared-variable proposal retained for reopening.
- SNAP: count farm self-employment income and apply the farm-loss offset #9673 — SNAP farm income and farm-loss offset.
- Deduct self-employment business expenses from TANF IL countable income #337 — Illinois TANF self-employment business expenses.
- Social Security, pensions and self-employment grow per record at aggregate rates #9666 — per-record income uprating, including self-employment income.
These related issues have their own scope; this roadmap does not declare all existing consumers incorrect or authorize wholesale replacement of their inputs.
Activity