Skip to content

Leave dependents' tips and overtime out of Georgia's HB463 exclusions - #10405

Open
MaxGhenis wants to merge 1 commit into
mainfrom
fix-ga-tips-overtime-dependents
Open

MaxGhenis wants to merge 1 commit into
mainfrom
fix-ga-tips-overtime-dependents

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Problem

ga_cash_tip_exclusion and ga_qualified_overtime_exclusion summed tip_income and fsla_overtime_premium over every tax-unit member, dependents included. Both are Georgia AGI subtractions for 2026-2028 (parameters/gov/states/ga/tax/income/subtractions/subtractions.yaml). A dependent's tips and overtime are the dependent's own income and never enter the filer's federal AGI: irs_gross_income masks dependents with ~is_tax_unit_dependent. So a parent's Georgia AGI fell by tips and overtime that were never in it.

This is the Georgia sibling of #10396, which fixes the same defect in the federal tips and overtime deductions (26 U.S.C. 224 and 225).

Probe, TY2026: a Georgia head of household with $60,000 of wages and a 17-year-old dependent with $6,000 of tips (Treasury tipped occupation code 102) and $1,000 of overtime premium.

main c5837fb00b this PR
ga_cash_tip_exclusion 1,750 0
ga_qualified_overtime_exclusion 1,000 0
ga_agi 57,250 60,000
ga_income_tax 1,858.78 1,996.00

A joint return where the head has $4,000 of tips, the spouse $1,000 of overtime and a dependent $6,000 of tips and $1,000 of overtime goes from 3,500 / 2,000 to 1,750 / 1,000. A joint return without dependents is unchanged.

Law

  • O.C.G.A. § 48-7-27(a) (lead-in as restated by HB463 § 2-3): "Georgia taxable net income of an individual shall be the taxpayer's federal adjusted gross income, as defined in the United States Internal Revenue Code of 1986, less:" the listed subtractions. HB463, p. 4
  • (16)(A), added by HB463 § 2-4: "any amount of qualified overtime compensation, as such term is defined in Section 225 of the Internal Revenue Code, up to $1,750.00 received by a full-time employee paid by an hourly wage." (17)(A): "any amount up to $1,750.00 received in cash tips." pp. 6-7
  • 26 U.S.C. 73(a): "Amounts received in respect of the services of a child shall be included in his gross income and not in the gross income of the parent".
  • Georgia DOR, 2026 Employer's Withholding Tax Guide (revised June 2026), p. 4: employers report the full amounts, and "the $1,750 limitation ... applies when the employee files the Georgia individual income tax return."

So the subtraction belongs to amounts in the taxpayer's own federal AGI: the taxpayer's, and on a joint return the spouse's. A dependent's tips and overtime go on the dependent's own return, where the dependent can take the exclusion (a case below).

What the PR checked and leaves alone:

  • Per employee. (16)(A) caps the overtime "received by a full-time employee". (17)(A) doesn't name the recipient. Main already applies both caps per recipient (two spouses with tips can exclude up to $3,500), which matches (16)'s structure and the DOR's "when the employee files". This PR keeps that reading.
  • No SSN rule. (16)(A) adopts only § 225(c)'s definition of qualified overtime compensation. Section 225(d)'s SSN requirement and 225(e)'s joint-return rule are conditions on the federal deduction, and (17) has no SSN language. Georgia's exclusions need no SSN, and the model applies none, before or after this PR.

Fix

Each formula multiplies the person's amount by ~person("is_tax_unit_dependent", period), the mask irs_gross_income uses and the one #10396's review settled on (rather than a head-or-spouse test, which the role inference can disagree with). The AL HB527 contrib reform's overtime deduction already masks dependents this way.

Invariants

Stated for every input and tested in policyengine_us/tests/core/test_ga_tip_overtime_exclusion_dependent_invariants.py. Hypothesis draws batches of Georgia tax units (single, head of household with dependents, joint with and without dependents), and a seeded population of 150 units adds breadth. Each batch runs as one simulation twice: with the dependents' tips, occupation codes and overtime as drawn, and with them zeroed.

  1. Dependent invariance. A dependent's tips, occupation code and overtime never change either exclusion, ga_subtractions, ga_agi, ga_taxable_income or ga_income_tax.
  2. Differential. Each exclusion equals an independent numpy sum, over the head and spouse only, of their own amount (tips only from a Treasury tipped occupation) capped at $1,750 each, with the cap restated from the statute rather than read from the parameter. For units without dependents this equals the old all-member sum, so they see no change.
  3. Bounds. Each exclusion is between 0 and $1,750 times the number of filers.

The seeded test also asserts that at least 10 of its units have dependents whose amounts the old all-member sum would have counted, so 1 and 2 aren't vacuous.

Tests

New YAML cases in the variable-named files ga_cash_tip_exclusion.yaml and ga_qualified_overtime_exclusion.yaml. In each: a dependent's amount with explicit roles, the same with roles left to inference, a joint return with a dependent (only the spouses' capped amounts count), and a 17-year-old filing their own return, who keeps the exclusion.

Local runs at head ce5c4d14b5, each file in its own process under the hub heavy lock. "Main's formulas" is a copy of this branch with only the two variable files taken from main c5837fb00b, to confirm the new tests catch the defect.

File This PR Main's formulas
ga_cash_tip_exclusion.yaml (new) 4 passed 3 failed, 1 passed (the teen filing their own return)
ga_qualified_overtime_exclusion.yaml (new) 4 passed 3 failed, 1 passed (the same case)
test_ga_tip_overtime_exclusion_dependent_invariants.py (new) 3 passed 3 failed, all on dependent invariance. Hypothesis shrank the overtime case to a $1 difference; the seeded population's tip exclusion differs in 35 of 150 units, by up to $3,500
ga_hb463_integration.yaml 19 passed
gov/states/ga/tax/income/integration.yaml 4 passed
all of tests/policy/baseline/gov/states/ga 495 passed

Impact

These are real microsimulation runs on the default dataset for 2026, 2027 and 2028, the years the exclusions apply. They compare main at the merge base c5837fb00b with this PR's head ce5c4d14b5. The runs went one at a time under the shared heavy-job lock (hub impact_queue.sh). Sums are weighted; records are tax units, and households for net income.

Output 2026 2027 2028 Records changed (weighted), 2026
ga_cash_tip_exclusion -29.77M -31.05M -32.33M 3 (23,066)
ga_qualified_overtime_exclusion -769 -774 -777 2 (0.4)
ga_subtractions -29.77M -31.05M -32.33M 5 (23,066)
ga_agi +29.77M +31.05M +32.33M 5 (23,066)
state_income_tax +0.73M +0.76M +0.79M 4 (11,277)
income_tax +0 +0 +0 0 (0)
household_net_income -0.73M -0.76M -0.79M 4 (11,277)
household_benefits +0 +0 +0 0 (0)
  • Every change runs one way in every year: the exclusions only fall, and Georgia AGI and tax only rise. The record counts and weights are nearly the same in 2027 and 2028.
  • The largest change in any unit's Georgia tax is $87.33, which is $1,750 at Georgia's 4.99% rate. One of the five units whose Georgia AGI rises (about 11,800 weighted) sees no change in Georgia tax.
  • In the baseline, dependents' tips made up 60% of the modelled cash tip exclusion in 2026 ($29.8M of $49.5M). The dataset carries almost no overtime premium on dependents, so the overtime fix moves less than $1,000 a year.
  • Federal income tax and benefits don't change.

Comparison files: fixes/10405-impact/ (compare.<year>.json, heads.txt) on the hub host.

axiom: us-ga:statutes/48/48-7-27 TheAxiomFoundation/rulespec-us#1885 queued

Review

GPT-6.1 Sol (Subfleet job 20261023-072022-ga10405-r1) reviewed head ce5c4d14b5 against c5837fb00b: VERDICT: APPROVE, with no findings. It checked:

  • The law reading. Georgia starts from the taxpayer's federal AGI, and section 73 assigns a child's service income to the child. Form 8814 moves only a child's interest, dividends and capital gain distributions onto a parent's return. It found no Georgia rule that attributes a dependent's earnings to the parent. It agreed with the no-SSN reading.
  • The mask under five role setups: inferred roles, an older explicit dependent, explicit head, spouse and dependent, a teen filer claimed elsewhere, and a person marked both head and dependent. It matches irs_gross_income in each.
  • The tests. It ran the three new files on its own lane (4, 4 and 3 passed). It also checked ruff 0.15.5 formatting.
  • Downstream readers. The GA SB520 and CTC contrib reforms inherit the fix, and no partner files are touched.

🤖 Generated with Claude Code

O.C.G.A. 48-7-27(a)(16) and (17) subtract qualified overtime and cash tips
from the taxpayer's federal AGI. A dependent's tips and overtime are the
dependent's own income (26 U.S.C. 73(a)), not in the filer's federal AGI,
so ga_cash_tip_exclusion and ga_qualified_overtime_exclusion now mask
dependents with ~is_tax_unit_dependent, the mask irs_gross_income uses.

Adds YAML cases in variable-named test files and a Hypothesis invariant
test (dependents' amounts never change the exclusions or GA tax; a numpy
differential over head and spouse; per-filer bounds).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@codecov

codecov Bot commented Oct 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (909176a) to head (ce5c4d1).
⚠️ Report is 610 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main    #10405   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            4         2    -2     
  Lines           76        32   -44     
  Branches         2         0    -2     
=========================================
- Hits            76        32   -44     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant