Skip to content

GA retirement income exclusion ignores federal capital loss limit #7951

@PavelMakarchuk

Description

@PavelMakarchuk

Summary

PolicyEngine's Georgia retirement income exclusion uses the unlimited per-person capital_gains variable rather than the federally-limited net capital gains ($3,000 loss cap per IRC §1211(b)). For filers with large capital losses, the raw capital_gains value makes per-person "retirement income" go deeply negative, which zeros out the exclusion entirely — even when the filer would otherwise be eligible for a $45,000+ exclusion.

Root cause

policyengine_us/variables/gov/states/ga/tax/income/subtractions/retirement/ga_retirement_income_exclusion_retirement_income.py:

adds = "gov.states.ga.tax.income.agi.exclusions.retirement.sources"

parameters/gov/states/ga/tax/income/agi/exclusions/retirement/sources.yaml lists capital_gains as one of the summed sources. At the person level, capital_gains returns the unlimited sum of short_term_capital_gains + long_term_capital_gains, not the federally-limited net (which for joint filers would be max(net_cap_gains, -$3,000) split across spouses).

When the retirement income sum goes negative, ga_retirement_exclusion_person returns a negative value via min_(retirement_income, cap), and ga_subtractions ends up as 0 after the upstream max_(0, ...) clamp, so no exclusion is applied at all.

Legal reference

  • O.C.G.A. § 48-7-27(a)(5)(B) — defines retirement income eligible for exclusion
  • 2024 GA IT-511 Individual Income Tax Booklet, Schedule 1 Retirement Income Exclusion Worksheet — Line 9 "Capital Gains (Losses)" uses the amount from federal Form 1040 (post-Schedule D loss limitation): https://dor.georgia.gov/document/document/2024-it-511-individual-income-tax-booklet/download
  • Georgia Form 500 Schedule 1, Page 2, Line 9 on the TaxAct-generated form shows −$1,500 per spouse (= −$3,000 joint federal cap loss, halved)

Worked example

Input (from policyengine-taxsim #757):

  • Joint filer, primary age 69, spouse age 63
  • Wages: $123,105 (primary only)
  • Interest: $16,312
  • Short-term capital gains: −$496,221 (large loss)
  • Long-term capital gains: $105,817
  • Taxable pensions: $26,881
  • Net federal capital gains (Schedule D, post-limit): −$3,000

TaxAct result (from http://taxsim.nber.org/out2psl/757):

GA Schedule 1 Retirement Income Exclusion Worksheet:

Line Description Primary (69) Spouse (63)
1 Salary and wages 123,105 0
5 Earned income (capped at $5,000) 5,000 0
6 Interest 8,156 8,156
9 Capital gains/(losses) — federally limited −1,500 −1,500
12 Taxable pensions 26,881 0
14 Total of lines 6–13 33,537 6,656
15 Line 5 + Line 14 38,537 6,656
16 Max allowable ($65k / $35k) 65,000 35,000
17 Exclusion 38,537 6,656

Total retirement income exclusion: $45,193 (Schedule 1 Line 13)

PE current result:

  • ga_retirement_exclusion_person (p1): −$168,605
  • ga_retirement_exclusion_person (s1): −$173,605
  • ga_subtractions: $0 (clamped)
  • ga_agi: $163,297 (= federal AGI, no exclusion applied)

Suggested fix

Introduce a new person-level variable ga_retirement_exclusion_countable_capital_gains (mirroring the existing ga_retirement_exclusion_countable_earned_income pattern) that returns each person's share of the federally-limited net capital gains. Replace capital_gains with this variable in sources.yaml.

Integration test

- name: GA retirement income exclusion with large capital loss (policyengine-taxsim #757)
  absolute_error_margin: 10
  period: 2024
  input:
    people:
      primary:
        age: 69
        employment_income: 123_105
        taxable_interest_income: 8_156
        long_term_capital_gains: 52_909
        short_term_capital_gains: -248_110
        taxable_private_pension_income: 13_440
      spouse:
        age: 63
        taxable_interest_income: 8_156
        long_term_capital_gains: 52_909
        short_term_capital_gains: -248_110
        taxable_private_pension_income: 13_440
    tax_units:
      tax_unit:
        members: [primary, spouse]
    marital_units:
      marital_unit:
        members: [primary, spouse]
    families:
      family:
        members: [primary, spouse]
    spm_units:
      spm_unit:
        members: [primary, spouse]
    households:
      household:
        members: [primary, spouse]
        state_code_str: GA
  output:
    # Per 2024 GA IT-511 Schedule 1 Worksheet, each spouse's retirement income:
    # Primary: 8,156 (interest) − 1,500 (limited cap loss) + 13,440 (pension half) + 5,000 (earned income cap) = 25,096
    # Spouse:  8,156 (interest) − 1,500 (limited cap loss) + 13,440 (pension half) = 20,096
    # Total exclusion (both under their respective $65k/$35k caps): 45,192
    # (Matches TaxAct's $45,193 within rounding; TaxAct allocates all pension to primary but total matches.)
    ga_retirement_exclusion: 45_192
    # Federal AGI: 163,297; with exclusion subtracted → 118,105
    ga_agi: 118_105

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions