diff --git a/changelog.d/claimable-filer-dc-ga-id.fixed.md b/changelog.d/claimable-filer-dc-ga-id.fixed.md
new file mode 100644
index 00000000000..4dca18f34c0
--- /dev/null
+++ b/changelog.d/claimable-filer-dc-ga-id.fixed.md
@@ -0,0 +1 @@
+Apply District of Columbia, Georgia and Idaho rules for filers who can be claimed as dependents. Calculate DC property tax credits from each eligible claimant's own payments, retain the childless EITC bar and remove the expired 2026 child tax credit amount. Apply Georgia's dependent exemption, low income credit and surplus refund rules, and allow otherwise qualifying children with ITINs to receive Georgia's child credit. Apply Idaho's per-person food tax credit, dependent care deduction and rebate rules, excluding nonqualifying child-only daycare even when a disabled adult qualifies for care.
diff --git a/policyengine_us/parameters/gov/states/dc/tax/income/credits/ctc/amount.yaml b/policyengine_us/parameters/gov/states/dc/tax/income/credits/ctc/amount.yaml
index f81265612d3..d8e360d67ea 100644
--- a/policyengine_us/parameters/gov/states/dc/tax/income/credits/ctc/amount.yaml
+++ b/policyengine_us/parameters/gov/states/dc/tax/income/credits/ctc/amount.yaml
@@ -9,8 +9,16 @@ metadata:
type: downwards
interval: 5
reference:
- - title: Code of the District of Columbia § 47-1806.17(b)(1)(A)
- href: https://code.dccouncil.gov/us/dc/council/code/sections/47-1806.17#(b)(1)
+ - title: D.C. Law 26-55, sections 7062 and 7063
+ href: https://code.dccouncil.gov/us/dc/council/laws/26-55
+ - title: D.C. Law 26-89, sections 2(j) and 6(b)
+ href: https://code.dccouncil.gov/us/dc/council/laws/26-89
+ - title: D.C. Act 26-418 (Law 26-189), section 7112
+ href: https://lims.dccouncil.gov/downloads/LIMS/61627/Signed_Act/B26-0661-Signed_Act.pdf?Id=244269
+ - title: DC Attorney General, February 24, 2026, pages 1-2
+ href: https://oag.dc.gov/sites/default/files/2026-02/AG-Opinion-Decoupling-Retroactivity-and-Validity-.pdf
values:
- 2026-01-01: 1_000
+ # The Council repealed the credit, then revived it temporarily. The temporary
+ # act expired on September 25, 2026, before the calendar tax year ended.
+ 2026-01-01: 0
diff --git a/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/dependent_claimant_min_age.yaml b/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/dependent_claimant_min_age.yaml
new file mode 100644
index 00000000000..e9838a442fe
--- /dev/null
+++ b/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/dependent_claimant_min_age.yaml
@@ -0,0 +1,10 @@
+description: The District of Columbia allows a person who was a dependent under an income tax law to claim the property tax credit only at or above this age.
+values:
+ 2021-01-01: 65
+metadata:
+ unit: year
+ label: DC property tax credit minimum age for a dependent claimant
+ period: year
+ reference:
+ - title: Code of the District of Columbia § 47–1806.06 (k)
+ href: https://code.dccouncil.gov/us/dc/council/code/sections/47-1806.06
diff --git a/policyengine_us/reforms/dc_kccatc.py b/policyengine_us/reforms/dc_kccatc.py
index db3a3563abc..39d1bfaa4eb 100644
--- a/policyengine_us/reforms/dc_kccatc.py
+++ b/policyengine_us/reforms/dc_kccatc.py
@@ -56,7 +56,15 @@ def formula(tax_unit, period, parameters):
income_eligible = taxinc <= p.kccatc.income_limit[filing_status]
# determine count of KCCATC age eligible children
person = tax_unit.members
- is_dependent = person("is_tax_unit_dependent", period)
+ # As in the baseline formula: no dependents on a return whose
+ # filer (or, if joint, either spouse) can be claimed.
+ filer_is_dependent = person.tax_unit(
+ "head_or_spouse_is_dependent_elsewhere_without_filing_exception",
+ period,
+ )
+ is_dependent = (
+ person("is_tax_unit_dependent", period) & ~filer_is_dependent
+ )
age = person("age", period)
kccatc_age_eligible = is_dependent & (age <= p.kccatc.max_age)
kccatc_eligible_count = tax_unit.sum(kccatc_age_eligible)
diff --git a/policyengine_us/reforms/states/dc/property_tax/dc_property_tax_reform.py b/policyengine_us/reforms/states/dc/property_tax/dc_property_tax_reform.py
index 8bc8b12666c..575409634c0 100644
--- a/policyengine_us/reforms/states/dc/property_tax/dc_property_tax_reform.py
+++ b/policyengine_us/reforms/states/dc/property_tax/dc_property_tax_reform.py
@@ -22,12 +22,15 @@ def formula(tax_unit, period, parameters):
# Income based eligibility criteria does not apply when the credit
# is phased out.
eligible = tax_unit("dc_ptc_eligible", period)
+ # The reform keeps D.C. Code 47-1806.06(k): no credit through a
+ # claimant who was a dependent, unless 65 or older.
+ has_claimant = tax_unit("dc_ptc_has_eligible_claimant", period)
if p.phase_out.applies:
income_limit = tax_unit("dc_ptc_income_limit", period)
income = tax_unit("adjusted_gross_income", period)
income_excess = max_(0, income - income_limit)
- return max_(0, amount - p.phase_out.rate * income_excess)
- return amount * eligible
+ return max_(0, amount - p.phase_out.rate * income_excess) * has_claimant
+ return amount * eligible * has_claimant
class dc_ptc_eligible(Variable):
value_type = bool
diff --git a/policyengine_us/reforms/states/ga/dependent_exemption/ga_dependent_exemption_reform.py b/policyengine_us/reforms/states/ga/dependent_exemption/ga_dependent_exemption_reform.py
index a481f29abd6..68fea999af8 100644
--- a/policyengine_us/reforms/states/ga/dependent_exemption/ga_dependent_exemption_reform.py
+++ b/policyengine_us/reforms/states/ga/dependent_exemption/ga_dependent_exemption_reform.py
@@ -15,7 +15,13 @@ def formula(tax_unit, period, parameters):
person = tax_unit.members
age = person("age", period)
- is_dependent = person("is_tax_unit_dependent", period)
+ # A return on which the filer (or, if joint, either spouse) can be
+ # claimed as a dependent has no dependents (IRC 152(b)(1)), as in
+ # the baseline formula.
+ filer_is_dependent = person.tax_unit(
+ "head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
+ )
+ is_dependent = person("is_tax_unit_dependent", period) & ~filer_is_dependent
# Apply age limit if in effect.
if p.age_limit.in_effect:
diff --git a/policyengine_us/tests/core/test_claimable_filer_dc_ga_id_invariants.py b/policyengine_us/tests/core/test_claimable_filer_dc_ga_id_invariants.py
new file mode 100644
index 00000000000..e35b5b59378
--- /dev/null
+++ b/policyengine_us/tests/core/test_claimable_filer_dc_ga_id_invariants.py
@@ -0,0 +1,215 @@
+"""District of Columbia, Georgia and Idaho rules for a filer who can be claimed
+as a dependent.
+
+A return on which the filer, or on a joint return either spouse, can be claimed
+as a dependent outside the filing exception has no dependents (IRC 152(b)(1)).
+DC's property tax credit needs a claimant who was not a dependent or is 65 or
+older; Georgia's low income credit and 2023 surplus refund need one filer who
+qualifies; Idaho's food tax credit leaves out each filer who can be claimed.
+
+For couples drawn by Hypothesis and a seeded population in these states,
+claimability, actual claims and the filing exception vary independently,
+subject to an actual claim requiring claimability and excluding the exception:
+
+1. Swap invariance: each output is the same under either head/spouse
+ labelling.
+2. Monotonicity: marking another filer as claimed, with fallback claimability
+ and no filing exception, never raises the outputs in MONOTONE (amounts not
+ capped by a tax liability that the claim can raise).
+3. Identities: a return with a claimable filer outside the filing exception has
+ no DC keep child care affordable credit or child tax credit and its Idaho
+ food tax credit is at most one filer's amount; a return on which every
+ filer can be claimed has no Georgia low income credit.
+
+Hypothesis batches check 1 and 3; the seeded population checks 1, 2 and 3.
+"""
+
+import gc
+
+import numpy as np
+import pytest
+from hypothesis import HealthCheck, given, settings
+from hypothesis import strategies as st
+
+from policyengine_us.tests.core.test_claimable_filer_federal_invariants import (
+ check_monotone,
+ check_swap,
+)
+from policyengine_us.tests.core.test_dependent_elsewhere_head_spouse_swap_invariance import (
+ CLAIM_PATTERNS,
+ _calc,
+ _crafted_cases,
+ _seeded_couples,
+ adults,
+ dependents,
+)
+
+STATES = ["DC", "GA", "ID"]
+YEARS = [2021, 2023, 2025, 2026]
+MONOTONE = [
+ "dc_ptc",
+ "dc_eitc",
+ "dc_kccatc",
+ "dc_ctc",
+ "ga_exemptions",
+ "ga_low_income_credit_potential",
+ "ga_ctc_potential",
+ "id_grocery_credit",
+ "id_household_and_dependent_care_expense_deduction",
+]
+OUTPUTS = MONOTONE + ["ga_surplus_tax_rebate", "id_2022_rebate"]
+
+
+def _run_check(check, *args):
+ try:
+ check(*args)
+ finally:
+ # Simulations contain reference cycles; collect them between checks.
+ gc.collect()
+
+
+@st.composite
+def couples(draw):
+ claimable = draw(st.sampled_from(CLAIM_PATTERNS))
+ claimed = tuple(can_claim and draw(st.booleans()) for can_claim in claimable)
+ return {
+ "state": draw(st.sampled_from(STATES)),
+ "adults": [draw(adults()), draw(adults())],
+ "dependents": draw(st.lists(dependents(), max_size=2)),
+ "claimed": claimed,
+ "claimable": claimable,
+ "exception": tuple(
+ not is_claimed and draw(st.booleans()) for is_claimed in claimed
+ ),
+ }
+
+
+def _identities(sim, year):
+ blocked_filer = (
+ _calc(
+ sim, "head_or_spouse_is_dependent_elsewhere_without_filing_exception", year
+ )
+ > 0
+ )
+ for name in ("dc_kccatc", "dc_ctc"):
+ assert not _calc(sim, name, year)[blocked_filer].any(), (
+ f"{name} in {year} is positive on a return with a claimable filer "
+ "outside the filing exception"
+ )
+ # The expired aggregate amount must not make the child predicate vacuous.
+ blocked_people = sim.populations["tax_unit"].project(blocked_filer)
+ assert not _calc(sim, "dc_ctc_eligible_child", year)[blocked_people].any()
+ # Georgia's low income credit needs one filer who cannot be claimed.
+ every_filer = _calc(sim, "every_filer_is_dependent_elsewhere", year) > 0
+ assert not _calc(sim, "ga_low_income_credit_potential", year)[every_filer].any()
+ # Outside the filing exception, at most the independent filer keeps a
+ # food tax credit; no dependent child qualifies.
+ one_filer = _one_filer_food_amount(sim, year)
+ grocery = _calc(sim, "id_grocery_credit", year)
+ assert (grocery[blocked_filer] <= one_filer + 0.01).all()
+
+
+def _one_filer_food_amount(sim, year):
+ p = sim.tax_benefit_system.parameters(f"{year}-01-01").gov.states.id.tax.income
+ amount = p.credits.grocery.base.amount
+ if p.credits.grocery.aged.in_effect:
+ amount += p.credits.grocery.aged.amount
+ return amount
+
+
+def _with_independent_claim_inputs(units):
+ rng = np.random.default_rng(20261018)
+ result = []
+ for unit in units:
+ claimable = CLAIM_PATTERNS[int(rng.integers(len(CLAIM_PATTERNS)))]
+ claimed = tuple(can_claim and bool(rng.integers(2)) for can_claim in claimable)
+ exception = tuple(
+ not is_claimed and bool(rng.integers(2)) for is_claimed in claimed
+ )
+ result.append(
+ {
+ **unit,
+ "claimable": claimable,
+ "claimed": claimed,
+ "exception": exception,
+ }
+ )
+ return result
+
+
+@pytest.mark.parametrize(
+ "year,state,expected",
+ [
+ (2025, "ID", {"id_grocery_credit": 310}),
+ (2026, "DC", {"dc_kccatc": 1_000, "dc_ctc": 0}),
+ ],
+)
+def test_dc_id_filing_exception_restores_children_under_both_labels(
+ year, state, expected
+):
+ # The claimable adult keeps the exception and the independent spouse and
+ # child keep their eligibility when either adult is labelled head. Idaho still
+ # excludes the claimable adult's own $155 food tax credit. DC has no
+ # 2026 child tax credit after the temporary revival expires.
+ units = [
+ {
+ "state": state,
+ "adults": [{"age": 26, "employment_income": 2_000}, {"age": 30}],
+ "dependents": [{"age": 2, "pre_subsidy_childcare_expenses": 1_000}],
+ "claimed": (False, False),
+ "claimable": (True, False),
+ "exception": (True, False),
+ }
+ ]
+ if state == "ID":
+ # Isolate the dependency rule from SNAP and other month exclusions.
+ for person in units[0]["adults"] + units[0]["dependents"]:
+ person["id_grocery_credit_qualified_months"] = 12
+
+ def exception_identities(sim, year):
+ for name, amount in expected.items():
+ np.testing.assert_allclose(_calc(sim, name, year), [amount, amount])
+ if state == "DC":
+ children = sim.populations["tax_unit"].sum(
+ _calc(sim, "dc_ctc_eligible_child", year)
+ )
+ np.testing.assert_array_equal(children, [1, 1])
+ _identities(sim, year)
+
+ _run_check(check_swap, units, year, OUTPUTS, exception_identities)
+
+
+@settings(
+ max_examples=2,
+ deadline=None,
+ derandomize=True,
+ suppress_health_check=[HealthCheck.too_slow, HealthCheck.data_too_large],
+)
+@given(st.sampled_from(YEARS), st.lists(couples(), min_size=6, max_size=12))
+def test_dc_ga_id_claimable_filer_rules_are_label_free(year, units):
+ _run_check(check_swap, units, year, OUTPUTS, _identities)
+
+
+@pytest.mark.parametrize("year", YEARS)
+def test_dc_ga_id_claimable_filer_rules_seeded_population(year):
+ seeded = _seeded_couples(STATES, per_state=3)
+ crafted = _crafted_cases(STATES)
+ # Core fills omitted people with input defaults once any person supplies
+ # claimability, so express the crafted cases' legacy values explicitly in
+ # the swap simulation. The monotonicity simulation retains their fallback.
+ explicit_crafted = [
+ {**unit, "claimable": unit["claimed"], "exception": (False, False)}
+ for unit in crafted
+ ]
+ _run_check(
+ check_swap,
+ _with_independent_claim_inputs(seeded) + explicit_crafted,
+ year,
+ OUTPUTS,
+ _identities,
+ )
+ # The shared monotonicity helper toggles actual claims while keeping any
+ # explicit claimability and exception inputs fixed. Retain the legacy
+ # population here so every variant is valid and claimability changes with
+ # the actual claim; the swap population independently exercises all inputs.
+ _run_check(check_monotone, seeded + crafted, year, MONOTONE, _identities)
diff --git a/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/ctc/dc_ctc.yaml b/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/ctc/dc_ctc.yaml
index e0ff28b43e9..a41152d02ce 100644
--- a/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/ctc/dc_ctc.yaml
+++ b/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/ctc/dc_ctc.yaml
@@ -1,6 +1,30 @@
-- name: 2026 single filer below threshold with 2 children
+- name: 2026 temporary child tax credit expires before the calendar year ends
period: 2026
input:
+ people:
+ parent:
+ age: 35
+ employment_income: 30_000
+ child:
+ age: 5
+ is_tax_unit_dependent: true
+ tax_units:
+ tax_unit:
+ members: [parent, child]
+ filing_status: SINGLE
+ households:
+ household:
+ members: [parent, child]
+ state_code: DC
+ output:
+ dc_ctc_eligible_child: [false, true]
+ # One otherwise qualifying child * $0 after the temporary act expires = $0.
+ dc_ctc: 0
+
+- name: 2026 single filer below threshold with 2 children under a $1000 amount reform
+ period: 2026
+ input:
+ gov.states.dc.tax.income.credits.ctc.amount: 1_000
people:
parent:
age: 35
@@ -20,11 +44,13 @@
members: [parent, child1, child2]
state_code: DC
output:
+ # Two qualifying children * $1,000 = $2,000.
dc_ctc: 2_000
-- name: 2026 single filer with phase-out
+- name: 2026 single filer with phase-out under a $1000 amount reform
period: 2026
input:
+ gov.states.dc.tax.income.credits.ctc.amount: 1_000
people:
parent:
age: 35
@@ -44,13 +70,14 @@
members: [parent, child1, child2]
state_code: DC
output:
- # $3,000 excess over $55,000 threshold = 3 increments * $50 = $150 phase-out
- # $2,000 base - $150 = $1,850
+ # $3,000 excess / $1,000 = 3 increments; 3 * $50 = $150 phase-out.
+ # Two children * $1,000 - $150 = $1,850.
dc_ctc: 1_850
-- name: 2026 joint filer below threshold with 3 children
+- name: 2026 joint filer below threshold with 3 children under a $1000 amount reform
period: 2026
input:
+ gov.states.dc.tax.income.credits.ctc.amount: 1_000
people:
parent1:
age: 35
@@ -75,11 +102,13 @@
members: [parent1, parent2, child1, child2, child3]
state_code: DC
output:
+ # Three qualifying children * $1,000 = $3,000.
dc_ctc: 3_000
-- name: 2026 joint filer with phase-out
+- name: 2026 joint filer with phase-out under a $1000 amount reform
period: 2026
input:
+ gov.states.dc.tax.income.credits.ctc.amount: 1_000
people:
parent1:
age: 35
@@ -101,13 +130,14 @@
members: [parent1, parent2, child1, child2]
state_code: DC
output:
- # $5,000 excess over $70,000 threshold = 5 increments * $50 = $250 phase-out
- # $2,000 base - $250 = $1,750
+ # $5,000 excess / $1,000 = 5 increments; 5 * $50 = $250 phase-out.
+ # Two children * $1,000 - $250 = $1,750.
dc_ctc: 1_750
-- name: 2026 separate filer with phase-out
+- name: 2026 separate filer with phase-out under a $1000 amount reform
period: 2026
input:
+ gov.states.dc.tax.income.credits.ctc.amount: 1_000
people:
parent:
age: 35
@@ -124,13 +154,14 @@
members: [parent, child]
state_code: DC
output:
- # $2,500 excess over $35,000 threshold = 3 increments * $50 = $150 phase-out
- # $1,000 base - $150 = $850
+ # $2,500 excess / $1,000 rounds up to 3 increments; 3 * $50 = $150.
+ # One child * $1,000 - $150 = $850.
dc_ctc: 850
-- name: 2026 income fully phases out credit
+- name: 2026 income fully phases out credit under a $1000 amount reform
period: 2026
input:
+ gov.states.dc.tax.income.credits.ctc.amount: 1_000
people:
parent:
age: 35
@@ -147,12 +178,14 @@
members: [parent, child]
state_code: DC
output:
- # $45,000 excess = 45 increments * $50 = $2,250 phase-out exceeds $1,000 base
+ # $45,000 excess / $1,000 = 45 increments; 45 * $50 = $2,250.
+ # max($1,000 - $2,250, $0) = $0.
dc_ctc: 0
-- name: 2026 non-DC household with otherwise-qualifying children gets no DC CTC
+- name: 2026 non-DC household receives no DC CTC under a $1000 amount reform
period: 2026
input:
+ gov.states.dc.tax.income.credits.ctc.amount: 1_000
people:
parent:
age: 30
@@ -177,7 +210,7 @@
# umbrella must be zero (guards against ungated components).
taxsim_state_ctc: 0
-- name: 2026 DC household credit flows through the state CTC umbrella
+- name: 2026 DC household receives no state child tax credit after temporary expiry
period: 2026
input:
people:
@@ -199,12 +232,14 @@
members: [parent, child1, child2]
state_code: DC
output:
- dc_ctc: 2_000
- taxsim_state_ctc: 2_000
+ # Two otherwise qualifying children * $0 = $0, including the umbrella.
+ dc_ctc: 0
+ taxsim_state_ctc: 0
-- name: 2026 child over 18 not eligible
+- name: 2026 child over 18 fails the child test under a $1000 amount reform
period: 2026
input:
+ gov.states.dc.tax.income.credits.ctc.amount: 1_000
people:
parent:
age: 45
@@ -224,5 +259,6 @@
members: [parent, child1, child2]
state_code: DC
output:
- # Only child1 (age 17) is eligible
+ dc_ctc_eligible_child: [false, true, false]
+ # Only child1 meets the child test; one child * $1,000 = $1,000.
dc_ctc: 1_000
diff --git a/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/ctc/dc_ctc_eligible_child.yaml b/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/ctc/dc_ctc_eligible_child.yaml
index a6538e05a6a..88eb59e804f 100644
--- a/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/ctc/dc_ctc_eligible_child.yaml
+++ b/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/ctc/dc_ctc_eligible_child.yaml
@@ -33,3 +33,140 @@
state_code: DC
output:
dc_ctc_eligible_child: false
+
+
+- name: 2026 single filer who can be claimed as a dependent, no DC child tax credit child
+ period: 2026
+ input:
+ people:
+ filer:
+ age: 30
+ employment_income: 10_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 3
+ tax_units:
+ tax_unit:
+ members: [filer, child]
+ households:
+ household:
+ members: [filer, child]
+ state_code: DC
+ output:
+ # 47-1806.17(a): a child for whom the taxpayer is allowed a
+ # deduction under IRC 151; IRC 152(b)(1).
+ dc_ctc_eligible_child: [false, false]
+
+- name: 2026 joint return with one spouse who can be claimed as a dependent, no DC child tax credit child (the claimable spouse is the head)
+ period: 2026
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 3
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: DC
+ output:
+ dc_ctc_eligible_child: [false, false, false]
+
+- name: 2026 joint return with one spouse who can be claimed as a dependent, no DC child tax credit child (the claimable spouse is the spouse)
+ period: 2026
+ input:
+ people:
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 3
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_b, person_a, child]
+ state_code: DC
+ output:
+ dc_ctc_eligible_child: [false, false, false]
+
+- name: 2026 joint return with both spouses claimable as dependents, no DC child tax credit child
+ period: 2026
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 3
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: DC
+ output:
+ dc_ctc_eligible_child: [false, false, false]
+
+- name: 2026 joint return with neither spouse claimable, no DC child tax credit child
+ period: 2026
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 3
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: DC
+ output:
+ dc_ctc_eligible_child: [false, false, true]
diff --git a/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_cdcc.yaml b/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_cdcc.yaml
index 0bb0bf9a5ba..4a058e8b001 100644
--- a/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_cdcc.yaml
+++ b/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_cdcc.yaml
@@ -77,3 +77,145 @@
# 2021 D-40 line 21: federal Form 2441 line 10 * 32% = 1_120.
# https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/52926_D-40_12.21.21_Final_Rev011122.pdf#page=36
dc_cdcc_potential: 1_120
+
+- name: 2025 single filer who can be claimed as a dependent, no DC child care credit for a child under 13
+ period: 2025
+ input:
+ people:
+ filer:
+ age: 30
+ employment_income: 50_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 2
+ tax_units:
+ tax_unit:
+ members: [filer, child]
+ tax_unit_childcare_expenses: 1_000
+ households:
+ household:
+ members: [filer, child]
+ state_code: DC
+ output:
+ # Already zero through the federal child care credit, which no
+ # longer counts a child under 13 on such a return.
+ dc_cdcc_potential: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, no DC child care credit for a child under 13 (the claimable spouse is the head)
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 25_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 25_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 2
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ tax_unit_childcare_expenses: 1_000
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: DC
+ output:
+ dc_cdcc_potential: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, no DC child care credit for a child under 13 (the claimable spouse is the spouse)
+ period: 2025
+ input:
+ people:
+ person_b:
+ age: 30
+ employment_income: 25_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_a:
+ age: 30
+ employment_income: 25_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 2
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a, child]
+ filing_status: JOINT
+ tax_unit_childcare_expenses: 1_000
+ households:
+ household:
+ members: [person_b, person_a, child]
+ state_code: DC
+ output:
+ dc_cdcc_potential: 0
+
+- name: 2025 joint return with both spouses claimable as dependents, no DC child care credit for a child under 13
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 25_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 25_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 2
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ tax_unit_childcare_expenses: 1_000
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: DC
+ output:
+ dc_cdcc_potential: 0
+
+- name: 2025 joint return with neither spouse claimable, no DC child care credit for a child under 13
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 25_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_b:
+ age: 30
+ employment_income: 25_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 2
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ tax_unit_childcare_expenses: 1_000
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: DC
+ output:
+ # Federal 20% x 1,000 = 200; DC 32% match = 64.
+ dc_cdcc_potential: 64
diff --git a/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_eitc.yaml b/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_eitc.yaml
index f450ae8a65b..1471acf47e6 100644
--- a/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_eitc.yaml
+++ b/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_eitc.yaml
@@ -815,3 +815,157 @@
dc_eitc_with_qualifying_child: 0
dc_eitc_without_qualifying_child: 600
dc_eitc: 600
+
+
+- name: 2025 single filer who can be claimed as a dependent, no DC EITC without a qualifying child
+ period: 2025
+ absolute_error_margin: 0.01
+ input:
+ people:
+ filer:
+ age: 30
+ employment_income: 1_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ tax_units:
+ tax_unit:
+ members: [filer]
+ spm_units:
+ spm_unit:
+ members: [filer]
+ households:
+ household:
+ members: [filer]
+ state_code: DC
+ output:
+ # 47-1806.04(f) keeps the IRC 32(c)(1)(A)(ii)(III) bar on a
+ # childless filer who can be claimed; on a joint return either
+ # spouse (Publication 596).
+ dc_eitc_without_qualifying_child: 0
+ dc_eitc: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, no DC EITC without a qualifying child (the claimable spouse is the head)
+ period: 2025
+ absolute_error_margin: 0.01
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 500
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 500
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b]
+ filing_status: JOINT
+ spm_units:
+ spm_unit:
+ members: [person_a, person_b]
+ households:
+ household:
+ members: [person_a, person_b]
+ state_code: DC
+ output:
+ dc_eitc_without_qualifying_child: 0
+ dc_eitc: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, no DC EITC without a qualifying child (the claimable spouse is the spouse)
+ period: 2025
+ absolute_error_margin: 0.01
+ input:
+ people:
+ person_b:
+ age: 30
+ employment_income: 500
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_a:
+ age: 30
+ employment_income: 500
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a]
+ filing_status: JOINT
+ spm_units:
+ spm_unit:
+ members: [person_b, person_a]
+ households:
+ household:
+ members: [person_b, person_a]
+ state_code: DC
+ output:
+ dc_eitc_without_qualifying_child: 0
+ dc_eitc: 0
+
+- name: 2025 joint return with both spouses claimable as dependents, no DC EITC without a qualifying child
+ period: 2025
+ absolute_error_margin: 0.01
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 500
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 500
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b]
+ filing_status: JOINT
+ spm_units:
+ spm_unit:
+ members: [person_a, person_b]
+ households:
+ household:
+ members: [person_a, person_b]
+ state_code: DC
+ output:
+ dc_eitc_without_qualifying_child: 0
+ dc_eitc: 0
+
+- name: 2025 joint return with neither spouse claimable, no DC EITC without a qualifying child
+ period: 2025
+ absolute_error_margin: 0.01
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 500
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_b:
+ age: 30
+ employment_income: 500
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b]
+ filing_status: JOINT
+ spm_units:
+ spm_unit:
+ members: [person_a, person_b]
+ households:
+ household:
+ members: [person_a, person_b]
+ state_code: DC
+ output:
+ # 0.0765 x 1,000 = 76.50
+ dc_eitc_without_qualifying_child: 76.5
+ dc_eitc: 76.5
diff --git a/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_kccatc.yaml b/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_kccatc.yaml
index 486339bc3bf..7c841a4ae0d 100644
--- a/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_kccatc.yaml
+++ b/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_kccatc.yaml
@@ -183,3 +183,176 @@
state_code: DC
output:
dc_kccatc: 800
+
+
+- name: 2025 single filer who can be claimed as a dependent, no keep child care affordable credit
+ period: 2025
+ input:
+ people:
+ filer:
+ age: 30
+ employment_income: 10_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 2
+ tax_units:
+ tax_unit:
+ members: [filer, child]
+ tax_unit_childcare_expenses: 2_000
+ households:
+ household:
+ members: [filer, child]
+ state_code: DC
+ output:
+ # 47-1806.15(d)(1): the child must be claimed as a dependent on
+ # the federal and District returns; a return with a claimable
+ # filer has no dependents.
+ dc_kccatc: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, no keep child care affordable credit (the claimable spouse is the head)
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 2
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ tax_unit_childcare_expenses: 2_000
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: DC
+ output:
+ dc_kccatc: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, no keep child care affordable credit (the claimable spouse is the spouse)
+ period: 2025
+ input:
+ people:
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 2
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a, child]
+ filing_status: JOINT
+ tax_unit_childcare_expenses: 2_000
+ households:
+ household:
+ members: [person_b, person_a, child]
+ state_code: DC
+ output:
+ dc_kccatc: 0
+
+- name: 2025 joint return with both spouses claimable as dependents, no keep child care affordable credit
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 2
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ tax_unit_childcare_expenses: 2_000
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: DC
+ output:
+ dc_kccatc: 0
+
+- name: 2025 joint return with neither spouse claimable, no keep child care affordable credit
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 2
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ tax_unit_childcare_expenses: 2_000
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: DC
+ output:
+ # min(2,000, 1,200)
+ dc_kccatc: 1_200
+
+- name: 2025 two returns in one household, only the return whose filer can be claimed loses the keep child care affordable credit
+ period: 2025
+ input:
+ people:
+ parent_claimed:
+ age: 20
+ employment_income: 5_000
+ claimed_as_dependent_on_another_return: true
+ child_a:
+ age: 2
+ parent:
+ age: 30
+ employment_income: 5_000
+ child_b:
+ age: 2
+ tax_units:
+ claimed_return:
+ members: [parent_claimed, child_a]
+ tax_unit_childcare_expenses: 2_000
+ other_return:
+ members: [parent, child_b]
+ tax_unit_childcare_expenses: 2_000
+ households:
+ household:
+ members: [parent_claimed, child_a, parent, child_b]
+ state_code: DC
+ output:
+ dc_kccatc: [0, 1_200]
diff --git a/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_ptc.yaml b/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_ptc.yaml
index 0738982c778..dc042ca67dc 100644
--- a/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_ptc.yaml
+++ b/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_ptc.yaml
@@ -27,7 +27,8 @@
state_code: DC
output:
adjusted_gross_income: 40_000
- dc_ptc: 800 # = 12000 * 20% - 40000 * 4%
+ # One claimant: max(8,000 * 20% - 40,000 * 4%, 0) = 0.
+ dc_ptc: 0
- name: dc_ptc unit test 2
absolute_error_margin: 0.01
@@ -58,7 +59,9 @@
state_code: DC
output:
adjusted_gross_income: 40_000
- dc_ptc: 1_200 # = 12000 * 20% - 40000 * 3%
+ # Age 69: 8,000 * 20% - 40,000 * 4% = 0.
+ # Age 70: max(4,000 * 20% - 40,000 * 3%, 0) = 0.
+ dc_ptc: 0
- name: dc_ptc unit test 3
absolute_error_margin: 0.01
@@ -120,7 +123,8 @@
state_code: DC
output:
adjusted_gross_income: 56_200
- dc_ptc: 1_190 # = 12000 * 20% - 56_200 * 5%
+ # Either claimant: max(10,000 * 20% - 56,200 * 5%, 0) = 0.
+ dc_ptc: 0
- name: dc_ptc unit test 5 (same as test 4 except an extra dollar of income)
absolute_error_margin: 0.01
@@ -182,7 +186,8 @@
state_code: DC
output:
adjusted_gross_income: 57_600
- dc_ptc: 1_120 # = 20000 * 20% - 57_600 * 5%
+ # Either claimant: max(10,000 * 20% - 57,600 * 5%, 0) = 0.
+ dc_ptc: 0
- name: dc_ptc unit test 7 (same as test 6 except an extra dollar of income)
absolute_error_margin: 0.01
@@ -242,7 +247,7 @@
members: [person1, person2, person3]
state_code: DC
output:
- dc_ptc: 1_250 # = min(1250, 20000 * 20% - 0 * 5%)
+ dc_ptc: 1_250 # min(1,250, 10,000 * 20% - 0 * 3%) = 1,250.
- name: dc_ptc unit test 9 (negative AGI with no rent or property taxes)
absolute_error_margin: 0.01
@@ -290,3 +295,290 @@
state_code: MN
output:
dc_ptc: 0
+
+
+- name: 2025 single filer who can be claimed as a dependent, property tax credit only through a claimant who is not a dependent
+ period: 2025
+ input:
+ people:
+ filer:
+ age: 30
+ employment_income: 10_000
+ rent: 10_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ tax_units:
+ tax_unit:
+ members: [filer]
+ households:
+ household:
+ members: [filer]
+ state_code: DC
+ output:
+ # D.C. Code 47-1806.06(k) bars a claimant who was a dependent,
+ # unless 65 or older: 1,425 before the claimant bar, then 0.
+ dc_ptc: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, property tax credit only through a claimant who is not a dependent (the claimable spouse is the head)
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 5_000
+ rent: 10_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b]
+ state_code: DC
+ output:
+ dc_ptc: 1_425
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, property tax credit only through a claimant who is not a dependent (the claimable spouse is the spouse)
+ period: 2025
+ input:
+ people:
+ person_b:
+ age: 30
+ employment_income: 5_000
+ rent: 10_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_b, person_a]
+ state_code: DC
+ output:
+ dc_ptc: 1_425
+
+- name: 2025 joint return with both spouses claimable as dependents, property tax credit only through a claimant who is not a dependent
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 5_000
+ rent: 10_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b]
+ state_code: DC
+ output:
+ dc_ptc: 0
+
+- name: 2025 joint return with neither spouse claimable, property tax credit only through a claimant who is not a dependent
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_b:
+ age: 30
+ employment_income: 5_000
+ rent: 10_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b]
+ state_code: DC
+ output:
+ dc_ptc: 1_425
+
+- name: 2025 single filer aged 65 who can be claimed as a dependent claims the property tax credit
+ period: 2025
+ input:
+ people:
+ filer:
+ age: 65
+ employment_income: 10_000
+ rent: 10_000
+ is_tax_unit_head: true
+ claimed_as_dependent_on_another_return: true
+ tax_units:
+ tax_unit:
+ members: [filer]
+ households:
+ household:
+ members: [filer]
+ state_code: DC
+ output:
+ # The dependent bar does not apply at 65 or older; the
+ # elderly fractions start at 70.
+ dc_ptc: 1_425
+
+
+- name: 2025 claimable filer under 65 cannot claim Schedule H through the federal filing exception
+ period: 2025
+ input:
+ people:
+ filer:
+ age: 30
+ is_tax_unit_head: true
+ employment_income: 10_000
+ rent: 10_000
+ claimable_as_dependent_on_another_return: true
+ dependent_claimant_filing_exception: true
+ tax_units:
+ tax_unit:
+ members: [filer]
+ households:
+ household:
+ members: [filer]
+ state_code: DC
+ output:
+ # Section 47-1801.04(13) incorporates IRC 152 dependent status.
+ # The filing exception permits claiming one's own dependents.
+ # min(1,425, 10,000 * 20% - 10,000 * 3%) = 1,425;
+ # section 47-1806.06(k) still bars this claimant, giving 0.
+ dc_ptc_has_eligible_claimant: false
+ dc_ptc: 0
+
+- name: 2025 single filer who can be claimed but is not claimed cannot claim Schedule H
+ period: 2025
+ input:
+ people:
+ filer:
+ age: 30
+ is_tax_unit_head: true
+ employment_income: 10_000
+ rent: 10_000
+ claimable_as_dependent_on_another_return: true
+ claimed_as_dependent_on_another_return: false
+ tax_units:
+ tax_unit:
+ members: [filer]
+ households:
+ household:
+ members: [filer]
+ state_code: DC
+ output:
+ # 47-1806.06(k) turns on being a dependent, not on an
+ # actual claim.
+ dc_ptc: 0
+
+- name: 2025 Schedule H uses the eligible spouse's own rent when the head can be claimed
+ period: 2025
+ input:
+ people:
+ head:
+ age: 30
+ employment_income: 5_000
+ rent: 5_000
+ is_tax_unit_head: true
+ claimable_as_dependent_on_another_return: true
+ spouse:
+ age: 30
+ employment_income: 5_000
+ rent: 5_000
+ is_tax_unit_spouse: true
+ tax_units:
+ tax_unit:
+ members: [head, spouse]
+ filing_status: JOINT
+ households:
+ household:
+ members: [head, spouse]
+ state_code: DC
+ output:
+ # Sections 47-1806.06(b)(4), (b)(8): one claimant's rent.
+ # min(1,425, 5,000 * 20% - 10,000 * 3%) = 700.
+ dc_ptc: 700
+
+- name: 2025 Schedule H uses the eligible head's own rent when the spouse can be claimed
+ period: 2025
+ input:
+ people:
+ spouse:
+ age: 30
+ employment_income: 5_000
+ rent: 5_000
+ is_tax_unit_spouse: true
+ claimable_as_dependent_on_another_return: true
+ head:
+ age: 30
+ employment_income: 5_000
+ rent: 5_000
+ is_tax_unit_head: true
+ tax_units:
+ tax_unit:
+ members: [head, spouse]
+ filing_status: JOINT
+ households:
+ household:
+ members: [head, spouse]
+ state_code: DC
+ output:
+ # min(1,425, 5,000 * 20% - 10,000 * 3%) = 700.
+ dc_ptc: 700
+
+- name: 2025 Schedule H applies each eligible claimant's own age to their rent
+ period: 2025
+ input:
+ people:
+ head:
+ age: 69
+ employment_income: 20_000
+ rent: 12_000
+ is_tax_unit_head: true
+ spouse:
+ age: 70
+ employment_income: 20_000
+ rent: 1_000
+ is_tax_unit_spouse: true
+ tax_units:
+ tax_unit:
+ members: [head, spouse]
+ filing_status: JOINT
+ households:
+ household:
+ members: [head, spouse]
+ state_code: DC
+ output:
+ # Age 69: 12,000 * 20% - 40,000 * 4% = 800.
+ # Age 70: max(1,000 * 20% - 40,000 * 3%, 0) = 0.
+ # The couple chooses the eligible claimant with the larger credit: 800.
+ dc_ptc: 800
diff --git a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/dependent_care_credit/ga_cdcc.yaml b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/dependent_care_credit/ga_cdcc.yaml
index c4d8f0cf859..b4a6c0e7dd1 100644
--- a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/dependent_care_credit/ga_cdcc.yaml
+++ b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/dependent_care_credit/ga_cdcc.yaml
@@ -55,3 +55,144 @@
# 2021 IND-CR 202 lines 1-3: 3_500 federal credit * 30% = 1_050.
# https://dor.georgia.gov/document/booklet/2021-it-511-individual-income-tax-booklet/download#page=38
ga_cdcc_potential: 1_050
+
+- name: 2025 single filer who can be claimed as a dependent, no Georgia child care credit for a child under 13
+ period: 2025
+ input:
+ people:
+ filer:
+ age: 30
+ employment_income: 50_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 2
+ tax_units:
+ tax_unit:
+ members: [filer, child]
+ tax_unit_childcare_expenses: 1_000
+ households:
+ household:
+ members: [filer, child]
+ state_code: GA
+ output:
+ # Already zero through the federal credit claimed and allowed.
+ ga_cdcc_potential: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, no Georgia child care credit for a child under 13 (the claimable spouse is the head)
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 25_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 25_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 2
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ tax_unit_childcare_expenses: 1_000
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: GA
+ output:
+ ga_cdcc_potential: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, no Georgia child care credit for a child under 13 (the claimable spouse is the spouse)
+ period: 2025
+ input:
+ people:
+ person_b:
+ age: 30
+ employment_income: 25_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_a:
+ age: 30
+ employment_income: 25_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 2
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a, child]
+ filing_status: JOINT
+ tax_unit_childcare_expenses: 1_000
+ households:
+ household:
+ members: [person_b, person_a, child]
+ state_code: GA
+ output:
+ ga_cdcc_potential: 0
+
+- name: 2025 joint return with both spouses claimable as dependents, no Georgia child care credit for a child under 13
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 25_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 25_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 2
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ tax_unit_childcare_expenses: 1_000
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: GA
+ output:
+ ga_cdcc_potential: 0
+
+- name: 2025 joint return with neither spouse claimable, no Georgia child care credit for a child under 13
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 25_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_b:
+ age: 30
+ employment_income: 25_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 2
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ tax_unit_childcare_expenses: 1_000
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: GA
+ output:
+ # Federal 20% x 1,000 = 200; Georgia 50% match = 100.
+ ga_cdcc_potential: 100
diff --git a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_ctc.yaml b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_ctc.yaml
index 0690ba455ca..7d1796e7d31 100644
--- a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_ctc.yaml
+++ b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_ctc.yaml
@@ -21,6 +21,33 @@
state_code: GA
output:
ga_ctc: 250
+- name: Georgia credits a resident child with an ITIN under section 24(c)
+ period: 2026
+ input:
+ people:
+ parent:
+ age: 30
+ child:
+ age: 2
+ ssn_card_type: NONE
+ has_tin: true
+ immigration_status: UNDOCUMENTED
+ tax_units:
+ tax_unit:
+ members: [parent, child]
+ filing_status: SINGLE
+ ga_income_tax_before_non_refundable_credits: 10_000
+ households:
+ household:
+ members: [parent, child]
+ state_code: GA
+ output:
+ # Georgia lawmakers adopted IRC 24(c), without 24(h)(7)'s SSN gate,
+ # in O.C.G.A. 48-7-29.27.
+ # One qualifying child yields min(1 * $250, $10,000 liability) = $250.
+ ga_ctc_eligible_child: [false, true]
+ ga_ctc_potential: 250
+ ga_ctc: 250
- name: GA CTC - no credit due to age (too old)
period: 2026
input:
@@ -141,3 +168,141 @@
# Georgia uses the IRC 24(c) qualifying-child definition only; whether IRC
# 152(b)(1) reaches it is not settled, so the child test is kept.
ga_ctc: 250
+
+
+- name: 2026 single filer who can be claimed as a dependent, Georgia child tax credit kept for an IRC 24(c) qualifying child
+ period: 2026
+ input:
+ people:
+ filer:
+ age: 25
+ employment_income: 10_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 3
+ tax_units:
+ tax_unit:
+ members: [filer, child]
+ households:
+ household:
+ members: [filer, child]
+ state_code: GA
+ output:
+ # O.C.G.A. 48-7-29.27 uses the IRC 24(c) qualifying child only,
+ # with its own one-claimant rule; it does not require the child
+ # to be the taxpayer's dependent.
+ ga_ctc_potential: 250
+
+- name: 2026 joint return with one spouse who can be claimed as a dependent, Georgia child tax credit kept for an IRC 24(c) qualifying child (the claimable spouse is the head)
+ period: 2026
+ input:
+ people:
+ person_a:
+ age: 25
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 25
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 3
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: GA
+ output:
+ ga_ctc_potential: 250
+
+- name: 2026 joint return with one spouse who can be claimed as a dependent, Georgia child tax credit kept for an IRC 24(c) qualifying child (the claimable spouse is the spouse)
+ period: 2026
+ input:
+ people:
+ person_b:
+ age: 25
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_a:
+ age: 25
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 3
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_b, person_a, child]
+ state_code: GA
+ output:
+ ga_ctc_potential: 250
+
+- name: 2026 joint return with both spouses claimable as dependents, Georgia child tax credit kept for an IRC 24(c) qualifying child
+ period: 2026
+ input:
+ people:
+ person_a:
+ age: 25
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 25
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 3
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: GA
+ output:
+ ga_ctc_potential: 250
+
+- name: 2026 joint return with neither spouse claimable, Georgia child tax credit kept for an IRC 24(c) qualifying child
+ period: 2026
+ input:
+ people:
+ person_a:
+ age: 25
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_b:
+ age: 25
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 3
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: GA
+ output:
+ ga_ctc_potential: 250
diff --git a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_low_income_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_low_income_credit.yaml
index 2a410aa94df..9d877af5a50 100644
--- a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_low_income_credit.yaml
+++ b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_low_income_credit.yaml
@@ -86,3 +86,167 @@
ga_income_tax_before_non_refundable_credits: 1000000
output:
ga_low_income_credit: 16
+
+
+- name: 2025 single filer who can be claimed as a dependent, low income credit only through a spouse who cannot be claimed, with no child units
+ period: 2025
+ input:
+ people:
+ filer:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [filer, child]
+ households:
+ household:
+ members: [filer, child]
+ state_code: GA
+ output:
+ # O.C.G.A. 48-7A-3(a): each resident taxpayer who is not claimed
+ # or eligible to be claimed may claim it, and joint spouses are
+ # each deemed a unit; a return with a claimable filer has no
+ # dependents (IRC 152(b)(1)): 2 x 26 at federal AGI 5,000.
+ ga_low_income_credit_potential: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, low income credit only through a spouse who cannot be claimed, with no child units (the claimable spouse is the head)
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 2_500
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 2_500
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: GA
+ output:
+ ga_low_income_credit_potential: 52
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, low income credit only through a spouse who cannot be claimed, with no child units (the claimable spouse is the spouse)
+ period: 2025
+ input:
+ people:
+ person_b:
+ age: 30
+ employment_income: 2_500
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_a:
+ age: 30
+ employment_income: 2_500
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_b, person_a, child]
+ state_code: GA
+ output:
+ ga_low_income_credit_potential: 52
+
+- name: 2025 joint return with both spouses claimable as dependents, low income credit only through a spouse who cannot be claimed, with no child units
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 2_500
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 2_500
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: GA
+ output:
+ ga_low_income_credit_potential: 0
+
+- name: 2025 joint return with neither spouse claimable, low income credit only through a spouse who cannot be claimed, with no child units
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 2_500
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_b:
+ age: 30
+ employment_income: 2_500
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: GA
+ output:
+ # 3 units x 26
+ ga_low_income_credit_potential: 78
+
+
+- name: 2025 single filer who can be claimed but is not claimed gets no low income credit
+ period: 2025
+ input:
+ people:
+ filer:
+ age: 30
+ is_tax_unit_head: true
+ employment_income: 5_000
+ claimable_as_dependent_on_another_return: true
+ claimed_as_dependent_on_another_return: false
+ tax_units:
+ tax_unit:
+ members: [filer]
+ filing_status: SINGLE
+ households:
+ household:
+ members: [filer]
+ state_code: GA
+ output:
+ # 48-7A-3(a): not claimed or otherwise eligible to be
+ # claimed.
+ ga_low_income_credit_potential: 0
diff --git a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_surplus_tax_rebate.yaml b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_surplus_tax_rebate.yaml
index f276f210152..f25a5525283 100644
--- a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_surplus_tax_rebate.yaml
+++ b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_surplus_tax_rebate.yaml
@@ -123,3 +123,351 @@
ga_surplus_tax_rebate: 200
ga_refundable_credits: 200
ga_income_tax: 0
+
+
+- name: 2021 single filer who can be claimed as a dependent, surplus tax rebate only through a spouse who qualifies when the claimed filer had no earned income
+ period: 2021
+ input:
+ people:
+ filer:
+ age: 30
+ taxable_interest_income: 1_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ tax_units:
+ tax_unit:
+ members: [filer]
+ ga_income_tax_before_non_refundable_credits: 600
+ households:
+ household:
+ members: [filer]
+ state_code: GA
+ output:
+ # O.C.G.A. 48-7-20.2(a)(1)(B): an individual claimed as a
+ # dependent for 2021 is not a qualified taxpayer unless that
+ # individual had earned income ((a)(2)); the other spouse
+ # qualifies, and the joint amount is min(500, 600).
+ ga_surplus_tax_rebate: 0
+
+- name: 2021 joint return with one spouse who can be claimed as a dependent, surplus tax rebate only through a spouse who qualifies when the claimed filer had no earned income (the claimable spouse is the head)
+ period: 2021
+ input:
+ people:
+ person_a:
+ age: 30
+ taxable_interest_income: 1_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 10_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b]
+ filing_status: JOINT
+ ga_income_tax_before_non_refundable_credits: 600
+ households:
+ household:
+ members: [person_a, person_b]
+ state_code: GA
+ output:
+ ga_surplus_tax_rebate: 500
+
+- name: 2021 joint return with one spouse who can be claimed as a dependent, surplus tax rebate only through a spouse who qualifies when the claimed filer had no earned income (the claimable spouse is the spouse)
+ period: 2021
+ input:
+ people:
+ person_b:
+ age: 30
+ employment_income: 10_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_a:
+ age: 30
+ taxable_interest_income: 1_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a]
+ filing_status: JOINT
+ ga_income_tax_before_non_refundable_credits: 600
+ households:
+ household:
+ members: [person_b, person_a]
+ state_code: GA
+ output:
+ ga_surplus_tax_rebate: 500
+
+- name: 2021 joint return with both spouses claimable as dependents, surplus tax rebate only through a spouse who qualifies when the claimed filer had no earned income
+ period: 2021
+ input:
+ people:
+ person_a:
+ age: 30
+ taxable_interest_income: 1_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 10_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b]
+ filing_status: JOINT
+ ga_income_tax_before_non_refundable_credits: 600
+ households:
+ household:
+ members: [person_a, person_b]
+ state_code: GA
+ output:
+ ga_surplus_tax_rebate: 500
+
+- name: 2021 joint return with both spouses claimed and only the head earning income keeps the surplus tax rebate
+ period: 2021
+ input:
+ people:
+ person_b:
+ age: 30
+ employment_income: 10_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_a:
+ age: 30
+ taxable_interest_income: 1_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a]
+ filing_status: JOINT
+ ga_income_tax_before_non_refundable_credits: 600
+ households:
+ household:
+ members: [person_b, person_a]
+ state_code: GA
+ output:
+ ga_surplus_tax_rebate: 500
+
+- name: 2021 joint return with neither spouse claimable, surplus tax rebate only through a spouse who qualifies when the claimed filer had no earned income
+ period: 2021
+ input:
+ people:
+ person_a:
+ age: 30
+ taxable_interest_income: 1_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_b:
+ age: 30
+ employment_income: 10_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b]
+ filing_status: JOINT
+ ga_income_tax_before_non_refundable_credits: 600
+ households:
+ household:
+ members: [person_a, person_b]
+ state_code: GA
+ output:
+ # min(500, 600)
+ ga_surplus_tax_rebate: 500
+
+- name: 2021 single filer who can be claimed as a dependent, surplus tax rebate kept when the claimed filer had earned income
+ period: 2021
+ input:
+ people:
+ filer:
+ age: 30
+ employment_income: 1_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ tax_units:
+ tax_unit:
+ members: [filer]
+ ga_income_tax_before_non_refundable_credits: 600
+ households:
+ household:
+ members: [filer]
+ state_code: GA
+ output:
+ # (a)(2) restores an individual with 2021 earned income.
+ ga_surplus_tax_rebate: 250
+
+- name: 2021 joint return with one spouse who can be claimed as a dependent, surplus tax rebate kept when the claimed filer had earned income (the claimable spouse is the head)
+ period: 2021
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 1_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 1_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b]
+ filing_status: JOINT
+ ga_income_tax_before_non_refundable_credits: 600
+ households:
+ household:
+ members: [person_a, person_b]
+ state_code: GA
+ output:
+ ga_surplus_tax_rebate: 500
+
+- name: 2021 joint return with one spouse who can be claimed as a dependent, surplus tax rebate kept when the claimed filer had earned income (the claimable spouse is the spouse)
+ period: 2021
+ input:
+ people:
+ person_b:
+ age: 30
+ employment_income: 1_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_a:
+ age: 30
+ employment_income: 1_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a]
+ filing_status: JOINT
+ ga_income_tax_before_non_refundable_credits: 600
+ households:
+ household:
+ members: [person_b, person_a]
+ state_code: GA
+ output:
+ ga_surplus_tax_rebate: 500
+
+- name: 2021 joint return with both spouses claimable as dependents, surplus tax rebate kept when the claimed filer had earned income
+ period: 2021
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 1_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 1_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b]
+ filing_status: JOINT
+ ga_income_tax_before_non_refundable_credits: 600
+ households:
+ household:
+ members: [person_a, person_b]
+ state_code: GA
+ output:
+ ga_surplus_tax_rebate: 500
+
+- name: 2021 joint return with neither spouse claimable, surplus tax rebate kept when the claimed filer had earned income
+ period: 2021
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 1_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_b:
+ age: 30
+ employment_income: 1_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b]
+ filing_status: JOINT
+ ga_income_tax_before_non_refundable_credits: 600
+ households:
+ household:
+ members: [person_a, person_b]
+ state_code: GA
+ output:
+ ga_surplus_tax_rebate: 500
+
+
+- name: 2021 joint return with both spouses claimed and neither with earned income gets no surplus tax rebate
+ period: 2021
+ input:
+ people:
+ person_a:
+ age: 30
+ taxable_interest_income: 1_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ taxable_interest_income: 1_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b]
+ filing_status: JOINT
+ ga_income_tax_before_non_refundable_credits: 600
+ households:
+ household:
+ members: [person_a, person_b]
+ state_code: GA
+ output:
+ # Neither spouse is a qualified taxpayer.
+ ga_surplus_tax_rebate: 0
+
+
+- name: 2021 single filer who can be claimed but is not claimed and has no earned income keeps the surplus tax rebate
+ period: 2021
+ input:
+ people:
+ filer:
+ age: 30
+ is_tax_unit_head: true
+ taxable_interest_income: 1_000
+ claimable_as_dependent_on_another_return: true
+ claimed_as_dependent_on_another_return: false
+ tax_units:
+ tax_unit:
+ members: [filer]
+ filing_status: SINGLE
+ ga_income_tax_before_non_refundable_credits: 600
+ households:
+ household:
+ members: [filer]
+ state_code: GA
+ output:
+ # O.C.G.A. 48-7-20.2(a)(1)(B) excludes an individual who
+ # was claimed: min(250, 600).
+ ga_surplus_tax_rebate: 250
diff --git a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/exemptions/ga_exemptions.yaml b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/exemptions/ga_exemptions.yaml
index 61cf87aaaec..a0c1513ecd7 100644
--- a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/exemptions/ga_exemptions.yaml
+++ b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/exemptions/ga_exemptions.yaml
@@ -60,3 +60,275 @@
state_code: GA
output:
ga_exemptions: 4_000
+
+
+- name: 2025 single filer who can be claimed as a dependent, no dependent exemption
+ period: 2025
+ input:
+ people:
+ filer:
+ age: 30
+ employment_income: 10_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [filer, child]
+ households:
+ household:
+ members: [filer, child]
+ state_code: GA
+ output:
+ # Georgia follows the federal rules for qualified dependents;
+ # a return with a claimable filer has none (IRC 152(b)(1)).
+ ga_exemptions: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, no dependent exemption (the claimable spouse is the head)
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: GA
+ output:
+ ga_exemptions: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, no dependent exemption (the claimable spouse is the spouse)
+ period: 2025
+ input:
+ people:
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_b, person_a, child]
+ state_code: GA
+ output:
+ ga_exemptions: 0
+
+- name: 2025 joint return with both spouses claimable as dependents, no dependent exemption
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: GA
+ output:
+ ga_exemptions: 0
+
+- name: 2025 joint return with neither spouse claimable, no dependent exemption
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: GA
+ output:
+ ga_exemptions: 4_000
+
+- name: 2023 single filer who can be claimed as a dependent, the personal exemption stays but no dependent exemption
+ period: 2023
+ input:
+ people:
+ filer:
+ age: 30
+ employment_income: 10_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [filer, child]
+ households:
+ household:
+ members: [filer, child]
+ state_code: GA
+ output:
+ ga_exemptions: 2_700
+
+- name: 2023 joint return with one spouse who can be claimed as a dependent, the personal exemption stays but no dependent exemption (the claimable spouse is the head)
+ period: 2023
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: GA
+ output:
+ ga_exemptions: 7_400
+
+- name: 2023 joint return with one spouse who can be claimed as a dependent, the personal exemption stays but no dependent exemption (the claimable spouse is the spouse)
+ period: 2023
+ input:
+ people:
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_b, person_a, child]
+ state_code: GA
+ output:
+ ga_exemptions: 7_400
+
+- name: 2023 joint return with both spouses claimable as dependents, the personal exemption stays but no dependent exemption
+ period: 2023
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: GA
+ output:
+ ga_exemptions: 7_400
+
+- name: 2023 joint return with neither spouse claimable, the personal exemption stays but no dependent exemption
+ period: 2023
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: GA
+ output:
+ # 7,400 joint personal exemption + 3,000 for the child
+ ga_exemptions: 10_400
diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/grocery/id_grocery_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/grocery/id_grocery_credit.yaml
index e2f37dd5a10..8a204227e23 100644
--- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/grocery/id_grocery_credit.yaml
+++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/grocery/id_grocery_credit.yaml
@@ -94,3 +94,180 @@
snap: 0
output:
id_grocery_credit: 310
+
+
+- name: 2025 single filer who can be claimed as a dependent, food tax credit only for filers who cannot be claimed
+ period: 2025
+ input:
+ people:
+ filer:
+ age: 30
+ employment_income: 10_000
+ id_grocery_credit_qualified_months: 12
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ id_grocery_credit_qualified_months: 12
+ tax_units:
+ tax_unit:
+ members: [filer, child]
+ households:
+ household:
+ members: [filer, child]
+ state_code: ID
+ output:
+ # Idaho Code 63-3024A: a credit per taxpayer, spouse and claimed
+ # dependent; a filer who can be claimed gets none and the return
+ # has no dependents (IRC 152(b)(1)). The other spouse keeps 155.
+ id_grocery_credit: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, food tax credit only for filers who cannot be claimed (the claimable spouse is the head)
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ id_grocery_credit_qualified_months: 12
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 5_000
+ id_grocery_credit_qualified_months: 12
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 5
+ id_grocery_credit_qualified_months: 12
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: ID
+ output:
+ id_grocery_credit: 155
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, food tax credit only for filers who cannot be claimed (the claimable spouse is the spouse)
+ period: 2025
+ input:
+ people:
+ person_b:
+ age: 30
+ employment_income: 5_000
+ id_grocery_credit_qualified_months: 12
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_a:
+ age: 30
+ employment_income: 5_000
+ id_grocery_credit_qualified_months: 12
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ id_grocery_credit_qualified_months: 12
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_b, person_a, child]
+ state_code: ID
+ output:
+ id_grocery_credit: 155
+
+- name: 2025 joint return with both spouses claimable as dependents, food tax credit only for filers who cannot be claimed
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ id_grocery_credit_qualified_months: 12
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 5_000
+ id_grocery_credit_qualified_months: 12
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ id_grocery_credit_qualified_months: 12
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: ID
+ output:
+ id_grocery_credit: 0
+
+- name: 2025 joint return with neither spouse claimable, food tax credit only for filers who cannot be claimed
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ id_grocery_credit_qualified_months: 12
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_b:
+ age: 30
+ employment_income: 5_000
+ id_grocery_credit_qualified_months: 12
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 5
+ id_grocery_credit_qualified_months: 12
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: ID
+ output:
+ # 3 x 155
+ id_grocery_credit: 465
+
+
+- name: 2025 single filer who can be claimed but is not claimed gets no food tax credit
+ period: 2025
+ input:
+ people:
+ filer:
+ age: 30
+ is_tax_unit_head: true
+ employment_income: 10_000
+ id_grocery_credit_qualified_months: 12
+ claimable_as_dependent_on_another_return: true
+ claimed_as_dependent_on_another_return: false
+ tax_units:
+ tax_unit:
+ members: [filer]
+ households:
+ household:
+ members: [filer]
+ state_code: ID
+ output:
+ # "You can't claim this credit if someone else ... can
+ # claim you as a dependent".
+ id_grocery_credit: 0
diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_2022_rebate.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_2022_rebate.yaml
index 3035b6f4388..36cd40cfa5d 100644
--- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_2022_rebate.yaml
+++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_2022_rebate.yaml
@@ -15,3 +15,131 @@
id_2022_rebate_floor: 0
output:
id_2022_rebate: 120
+
+
+- name: 2020 single filer who can be claimed as a dependent, 2022 rebate floor counts the filers but no dependent
+ period: 2020
+ input:
+ people:
+ filer:
+ age: 30
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [filer, child]
+ households:
+ household:
+ members: [filer, child]
+ state_code: ID
+ output:
+ # Idaho Code 63-3024B(3): $75 per taxpayer and each dependent;
+ # a return with a claimable filer has no dependents.
+ id_2022_rebate: 75
+
+- name: 2020 joint return with one spouse who can be claimed as a dependent, 2022 rebate floor counts the filers but no dependent (the claimable spouse is the head)
+ period: 2020
+ input:
+ people:
+ person_a:
+ age: 30
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: ID
+ output:
+ id_2022_rebate: 150
+
+- name: 2020 joint return with one spouse who can be claimed as a dependent, 2022 rebate floor counts the filers but no dependent (the claimable spouse is the spouse)
+ period: 2020
+ input:
+ people:
+ person_b:
+ age: 30
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_a:
+ age: 30
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_b, person_a, child]
+ state_code: ID
+ output:
+ id_2022_rebate: 150
+
+- name: 2020 joint return with both spouses claimable as dependents, 2022 rebate floor counts the filers but no dependent
+ period: 2020
+ input:
+ people:
+ person_a:
+ age: 30
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: ID
+ output:
+ id_2022_rebate: 150
+
+- name: 2020 joint return with neither spouse claimable, 2022 rebate floor counts the filers but no dependent
+ period: 2020
+ input:
+ people:
+ person_a:
+ age: 30
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_b:
+ age: 30
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: ID
+ output:
+ id_2022_rebate: 225
diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_ctc.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_ctc.yaml
index b1b76132b4c..feac100fb45 100644
--- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_ctc.yaml
+++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_ctc.yaml
@@ -127,6 +127,143 @@
# 5 children under 17 * $205
id_ctc: 1025
+
+- name: 2025 single filer who can be claimed as a dependent, no Idaho child tax credit
+ period: 2025
+ input:
+ people:
+ filer:
+ age: 30
+ employment_income: 10_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [filer, child]
+ households:
+ household:
+ members: [filer, child]
+ state_code: ID
+ output:
+ # Already zero through the federal child test: the 2021-2025
+ # worksheet requires the child to be the taxpayer's dependent.
+ id_ctc: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, no Idaho child tax credit (the claimable spouse is the head)
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: ID
+ output:
+ id_ctc: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, no Idaho child tax credit (the claimable spouse is the spouse)
+ period: 2025
+ input:
+ people:
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_b, person_a, child]
+ state_code: ID
+ output:
+ id_ctc: 0
+
+- name: 2025 joint return with both spouses claimable as dependents, no Idaho child tax credit
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: ID
+ output:
+ id_ctc: 0
+
+- name: 2025 joint return with neither spouse claimable, no Idaho child tax credit
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: ID
+ output:
+ id_ctc: 205
+
- name: No Idaho child tax credit after 2025 in the credit list or the state child tax credit totals
period: 2026
input:
diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/household_and_dependent_care/id_household_and_dependent_care_expense_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/household_and_dependent_care/id_household_and_dependent_care_expense_deduction.yaml
index 59fa8e7fd88..10576e99a02 100644
--- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/household_and_dependent_care/id_household_and_dependent_care_expense_deduction.yaml
+++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/household_and_dependent_care/id_household_and_dependent_care_expense_deduction.yaml
@@ -4,6 +4,8 @@
tax_unit_childcare_expenses: 13_000
id_cdcc_limit: 6_000
min_head_spouse_earned: 4_000
+ # Idaho Code 63-3022D needs a qualifying individual in the household.
+ count_cdcc_eligible: 1
state_code: ID
output:
id_household_and_dependent_care_expense_deduction: 4_000
@@ -14,6 +16,8 @@
tax_unit_childcare_expenses: 13_000
id_cdcc_limit: 6_000
min_head_spouse_earned: 14_000
+ # Idaho Code 63-3022D needs a qualifying individual in the household.
+ count_cdcc_eligible: 1
state_code: ID
output:
id_household_and_dependent_care_expense_deduction: 12_000
@@ -107,6 +111,8 @@
care_expenses: 3_000
id_cdcc_limit: 6_000
min_head_spouse_earned: 4_000
+ # Idaho Code 63-3022D needs a qualifying individual in the household.
+ count_cdcc_eligible: 1
state_code: ID
output:
id_household_and_dependent_care_expense_deduction: 3_000
@@ -121,6 +127,8 @@
id_cdcc_limit: 6_000
min_head_spouse_earned: 60_000
dependent_care_assistance_exclusion: 5_000
+ # Idaho Code 63-3022D needs a qualifying individual in the household.
+ count_cdcc_eligible: 1
state_code: ID
output:
# min(10_000 expenses, max(6_000, 12_000) - 5_000 = 7_000, 60_000) = 7_000.
@@ -223,3 +231,212 @@
output:
# min($12,000, $8,000 - $6,000, $40,000) = $2,000.
id_household_and_dependent_care_expense_deduction: 2_000
+
+- name: 2025 single filer who can be claimed as a dependent, no household and dependent care deduction for a child under 13
+ period: 2025
+ input:
+ people:
+ filer:
+ age: 30
+ employment_income: 10_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [filer, child]
+ tax_unit_childcare_expenses: 1_000
+ households:
+ household:
+ members: [filer, child]
+ state_code: ID
+ output:
+ # Idaho Code 63-3022D needs an IRC 21(b)(1) qualifying
+ # individual; a child under 13 is not one on such a return.
+ id_household_and_dependent_care_expense_deduction: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, no household and dependent care deduction for a child under 13 (the claimable spouse is the head)
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ tax_unit_childcare_expenses: 1_000
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: ID
+ output:
+ id_household_and_dependent_care_expense_deduction: 0
+
+- name: 2025 joint return with one spouse who can be claimed as a dependent, no household and dependent care deduction for a child under 13 (the claimable spouse is the spouse)
+ period: 2025
+ input:
+ people:
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_b, person_a, child]
+ filing_status: JOINT
+ tax_unit_childcare_expenses: 1_000
+ households:
+ household:
+ members: [person_b, person_a, child]
+ state_code: ID
+ output:
+ id_household_and_dependent_care_expense_deduction: 0
+
+- name: 2025 joint return with both spouses claimable as dependents, no household and dependent care deduction for a child under 13
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ claimed_as_dependent_on_another_return: true
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ claimed_as_dependent_on_another_return: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ tax_unit_childcare_expenses: 1_000
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: ID
+ output:
+ id_household_and_dependent_care_expense_deduction: 0
+
+- name: 2025 joint return with neither spouse claimable, no household and dependent care deduction for a child under 13
+ period: 2025
+ input:
+ people:
+ person_a:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ person_b:
+ age: 30
+ employment_income: 5_000
+ is_tax_unit_head: false
+ is_tax_unit_spouse: true
+ child:
+ age: 5
+ tax_units:
+ tax_unit:
+ members: [person_a, person_b, child]
+ filing_status: JOINT
+ tax_unit_childcare_expenses: 1_000
+ households:
+ household:
+ members: [person_a, person_b, child]
+ state_code: ID
+ output:
+ # min(1,000, 12,000, 5,000)
+ id_household_and_dependent_care_expense_deduction: 1_000
+
+- name: 2025 single filer who can be claimed as a dependent deducts care for a disabled dependent
+ period: 2025
+ input:
+ people:
+ filer:
+ age: 30
+ employment_income: 10_000
+ is_tax_unit_head: true
+ claimed_as_dependent_on_another_return: true
+ dependent:
+ age: 14
+ is_incapable_of_self_care: true
+ care_expenses: 1_000
+ tax_units:
+ tax_unit:
+ members: [filer, dependent]
+ households:
+ household:
+ members: [filer, dependent]
+ state_code: ID
+ output:
+ # IRC 21(b)(1)(B) determines dependency without regard
+ # to IRC 152(b)(1): min(1,000, 12,000, 10,000).
+ id_household_and_dependent_care_expense_deduction: 1_000
+
+
+# IRC 21(b)(2) counts care for a qualifying individual only. The adult
+# qualifies under 21(b)(1)(B), but does not make the child's daycare eligible.
+- name: Claimable student with child-only daycare and disabled adult care deducts only adult care
+ period: 2025
+ input:
+ people:
+ filer:
+ age: 22
+ is_full_time_student: true
+ is_tax_unit_head: true
+ is_tax_unit_spouse: false
+ is_tax_unit_dependent: false
+ claimable_as_dependent_on_another_return: true
+ employment_income: 20_000
+ child:
+ age: 5
+ is_tax_unit_head: false
+ is_tax_unit_spouse: false
+ is_tax_unit_dependent: true
+ pre_subsidy_childcare_expenses: 10_000
+ disabled_adult:
+ age: 40
+ is_tax_unit_head: false
+ is_tax_unit_spouse: false
+ is_tax_unit_dependent: true
+ is_incapable_of_self_care: true
+ care_expenses: 1_000
+ tax_units:
+ tax_unit:
+ members: [filer, child, disabled_adult]
+ filing_status: SINGLE
+ households:
+ household:
+ members: [filer, child, disabled_adult]
+ state_code: ID
+ output:
+ count_cdcc_eligible: 1
+ tax_unit_childcare_expenses: 10_000
+ cdcc_qualifying_childcare_expenses: 0
+ id_household_and_dependent_care_expense_deduction: 1_000
diff --git a/policyengine_us/tests/policy/contrib/dc_kccatc.yaml b/policyengine_us/tests/policy/contrib/dc_kccatc.yaml
index c2178274e53..50e616343aa 100644
--- a/policyengine_us/tests/policy/contrib/dc_kccatc.yaml
+++ b/policyengine_us/tests/policy/contrib/dc_kccatc.yaml
@@ -42,3 +42,30 @@
state_code: DC
output:
dc_kccatc: 3_000
+
+- name: DC KCCATC reform switched off keeps the baseline dependent rule for a filer who can be claimed
+ period: 2025
+ reforms: policyengine_us.reforms.dc_kccatc.dc_kccatc_reform
+ input:
+ gov.contrib.dc_kccatc.active: false
+ people:
+ parent: {age: 20, employment_income: 10_000, claimed_as_dependent_on_another_return: true}
+ child: {age: 2}
+ tax_units: {tax_unit: {members: [parent, child], tax_unit_childcare_expenses: 2_000}}
+ households: {household: {members: [parent, child], state_code: DC}}
+ # D.C. Code 47-1806.15(d)(1); IRC 152(b)(1).
+ output:
+ dc_kccatc: 0
+
+- name: DC KCCATC reform switched off matches the baseline when nobody can be claimed
+ period: 2025
+ reforms: policyengine_us.reforms.dc_kccatc.dc_kccatc_reform
+ input:
+ gov.contrib.dc_kccatc.active: false
+ people:
+ parent: {age: 20, employment_income: 10_000}
+ child: {age: 2}
+ tax_units: {tax_unit: {members: [parent, child], tax_unit_childcare_expenses: 2_000}}
+ households: {household: {members: [parent, child], state_code: DC}}
+ output:
+ dc_kccatc: 1_200
diff --git a/policyengine_us/tests/policy/contrib/states/dc/property_tax/dc_property_tax_credit.yaml b/policyengine_us/tests/policy/contrib/states/dc/property_tax/dc_property_tax_credit.yaml
index c0844cea46a..453f76aafb0 100644
--- a/policyengine_us/tests/policy/contrib/states/dc/property_tax/dc_property_tax_credit.yaml
+++ b/policyengine_us/tests/policy/contrib/states/dc/property_tax/dc_property_tax_credit.yaml
@@ -182,3 +182,52 @@
output:
dc_ptc_income_limit: 65_600
dc_ptc: 1_160
+
+- name: DC property tax reform keeps the dependent claimant bar for a filer under 65 who can be claimed
+ period: 2025
+ reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit
+ input:
+ gov.contrib.states.dc.property_tax.in_effect: true
+ people:
+ filer: {age: 30, employment_income: 10_000, claimed_as_dependent_on_another_return: true}
+ tax_units: {tax_unit: {members: [filer]}}
+ households: {household: {members: [filer], state_code: DC}}
+ # D.C. Code 47-1806.06(k).
+ output:
+ dc_ptc: 0
+
+- name: DC property tax reform pays the same filer when nobody can claim them
+ period: 2025
+ reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit
+ input:
+ gov.contrib.states.dc.property_tax.in_effect: true
+ people:
+ filer: {age: 30, employment_income: 10_000}
+ tax_units: {tax_unit: {members: [filer]}}
+ households: {household: {members: [filer], state_code: DC}}
+ output:
+ dc_ptc: 1_400
+
+- name: DC property tax reform keeps the claimant bar when the federal filing exception applies
+ period: 2025
+ reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit
+ input:
+ gov.contrib.states.dc.property_tax.in_effect: true
+ people:
+ filer:
+ age: 30
+ employment_income: 10_000
+ claimable_as_dependent_on_another_return: true
+ dependent_claimant_filing_exception: true
+ tax_units:
+ tax_unit:
+ members: [filer]
+ households:
+ household:
+ members: [filer]
+ state_code: DC
+ output:
+ # The reform amount is 1,400 before section 47-1806.06(k)'s bar.
+ # The filer remains a dependent under section 47-1801.04(13): 0.
+ dc_ptc_has_eligible_claimant: false
+ dc_ptc: 0
diff --git a/policyengine_us/tests/policy/contrib/states/ga/dependent_exemption_reform_test.yaml b/policyengine_us/tests/policy/contrib/states/ga/dependent_exemption_reform_test.yaml
index fd067172dc2..6529831f38b 100644
--- a/policyengine_us/tests/policy/contrib/states/ga/dependent_exemption_reform_test.yaml
+++ b/policyengine_us/tests/policy/contrib/states/ga/dependent_exemption_reform_test.yaml
@@ -94,3 +94,18 @@
output:
ga_exemptions: 4_000
ga_dependent_exemption: 4_000
+
+- name: GA dependent exemption reform at its defaults keeps no dependent exemption for a filer who can be claimed
+ period: 2025
+ reforms: policyengine_us.reforms.states.ga.dependent_exemption.ga_dependent_exemption_reform.ga_dependent_exemption_reform
+ input:
+ gov.contrib.states.ga.dependent_exemption.in_effect: true
+ people:
+ parent: {age: 20, employment_income: 10_000, claimed_as_dependent_on_another_return: true}
+ child1: {age: 5, is_tax_unit_dependent: true}
+ tax_units: {tax_unit: {members: [parent, child1]}}
+ households: {household: {members: [parent, child1], state_name: GA}}
+ # As in the baseline: a return with a claimable filer has no dependents (IRC 152(b)(1)).
+ output:
+ ga_exemptions: 0
+ ga_dependent_exemption: 0
diff --git a/policyengine_us/variables/gov/states/dc/tax/income/credits/ctc/dc_ctc_eligible_child.py b/policyengine_us/variables/gov/states/dc/tax/income/credits/ctc/dc_ctc_eligible_child.py
index 94190df0362..a9453cb5887 100644
--- a/policyengine_us/variables/gov/states/dc/tax/income/credits/ctc/dc_ctc_eligible_child.py
+++ b/policyengine_us/variables/gov/states/dc/tax/income/credits/ctc/dc_ctc_eligible_child.py
@@ -7,9 +7,19 @@ class dc_ctc_eligible_child(Variable):
label = "Whether the child is eligible for the DC CTC"
definition_period = YEAR
defined_for = "is_tax_unit_dependent"
- reference = "https://code.dccouncil.gov/us/dc/council/code/sections/47-1806.17"
+ reference = (
+ # D.C. Code 47-1806.17(a), (d): a child for whom the taxpayer is allowed
+ # a deduction under IRC 151, claimed on the federal and District returns.
+ "https://code.dccouncil.gov/us/dc/council/code/sections/47-1806.17",
+ "https://www.law.cornell.edu/uscode/text/26/152#b_1",
+ )
def formula(person, period, parameters):
p = parameters(period).gov.states.dc.tax.income.credits.ctc.child
age = person("age", period)
- return age < p.age_threshold
+ # A return on which the filer (or, if joint, either spouse) can be
+ # claimed as a dependent has no dependents (IRC 152(b)(1)).
+ filer_is_dependent = person.tax_unit(
+ "head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
+ )
+ return (age < p.age_threshold) & ~filer_is_dependent
diff --git a/policyengine_us/variables/gov/states/dc/tax/income/credits/dc_kccatc.py b/policyengine_us/variables/gov/states/dc/tax/income/credits/dc_kccatc.py
index 39102d62c24..f1de6c29a1e 100644
--- a/policyengine_us/variables/gov/states/dc/tax/income/credits/dc_kccatc.py
+++ b/policyengine_us/variables/gov/states/dc/tax/income/credits/dc_kccatc.py
@@ -10,6 +10,10 @@ class dc_kccatc(Variable):
reference = (
"https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/52926_D-40_12.21.21_Final_Rev011122.pdf#page=67",
"https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2022_D-40_Booklet_Final_blk_01_23_23_Ordc.pdf#page=59",
+ # D.C. Code 47-1806.15(a)(3), (d)(1): the child must be claimed as a
+ # dependent on the taxpayer's federal and District returns.
+ "https://code.dccouncil.gov/us/dc/council/code/sections/47-1806.15",
+ "https://www.law.cornell.edu/uscode/text/26/152#b_1",
)
defined_for = StateCode.DC
@@ -21,7 +25,13 @@ def formula(tax_unit, period, parameters):
income_eligible = taxinc <= p.kccatc.income_limit[filing_status]
# determine count of KCCATC age eligible children
person = tax_unit.members
- is_dependent = person("is_tax_unit_dependent", period)
+ # The child must be the taxpayer's dependent on the federal and District
+ # returns. A return on which the filer (or, if joint, either spouse)
+ # can be claimed as a dependent has no dependents (IRC 152(b)(1)).
+ filer_is_dependent = person.tax_unit(
+ "head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
+ )
+ is_dependent = person("is_tax_unit_dependent", period) & ~filer_is_dependent
age = person("age", period)
kccatc_age_eligible = is_dependent & (age <= p.kccatc.max_age)
kccatc_eligible_count = tax_unit.sum(kccatc_age_eligible)
diff --git a/policyengine_us/variables/gov/states/dc/tax/income/credits/dc_ptc.py b/policyengine_us/variables/gov/states/dc/tax/income/credits/dc_ptc.py
index 81a95c5d8fe..ed0859fc006 100644
--- a/policyengine_us/variables/gov/states/dc/tax/income/credits/dc_ptc.py
+++ b/policyengine_us/variables/gov/states/dc/tax/income/credits/dc_ptc.py
@@ -10,27 +10,40 @@ class dc_ptc(Variable):
reference = (
"https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/52926_D-40_12.21.21_Final_Rev011122.pdf#page=49",
"https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2022_D-40_Booklet_Final_blk_01_23_23_Ordc.pdf#page=47",
+ # D.C. Code 47-1806.06(b)(4) (one claimant per tax filing unit) and (k)
+ # (no credit for a claimant who was a dependent, unless 65 or older).
+ "https://code.dccouncil.gov/us/dc/council/code/sections/47-1806.06",
)
defined_for = StateCode.DC
def formula(tax_unit, period, parameters):
- rent = add(tax_unit, period, ["rent"])
- retax = add(tax_unit, period, ["real_estate_taxes"])
+ person = tax_unit.members
+ rent = person("rent", period)
+ retax = person("real_estate_taxes", period)
p_dc = parameters(period).gov.states.dc.tax.income.credits
ptax = retax + rent * p_dc.ptc.rent_ratio
elderly_age = p_dc.ptc.min_elderly_age
- head_age = tax_unit("age_head", period)
- spouse_age = tax_unit("age_spouse", period)
- is_elderly = (head_age >= elderly_age) | (spouse_age >= elderly_age)
+ age = person("age", period)
+ is_elderly = age >= elderly_age
# Only positive AGI creates an offset (negative AGI should not reduce offset)
us_agi = tax_unit("adjusted_gross_income", period)
- positive_agi = max_(0, us_agi)
+ positive_agi = tax_unit.project(max_(0, us_agi))
ptax_offset = positive_agi * where(
is_elderly,
p_dc.ptc.fraction_elderly.calc(positive_agi, right=True),
p_dc.ptc.fraction_nonelderly.calc(positive_agi, right=True),
)
uncapped_ptc = max_(0, ptax - ptax_offset)
- return min_(p_dc.ptc.max, uncapped_ptc) * tax_unit("takes_up_dc_ptc", period)
+ # Sections (b)(4) and (b)(8) allow one claimant's own payments.
+ # Each eligible spouse can claim using their own age and payments.
+ filer = person("is_tax_unit_head_or_spouse", period)
+ dependent = person("claimable_as_dependent_on_another_return", period)
+ eligible_claimant = filer & (
+ ~dependent | (age >= p_dc.ptc.dependent_claimant_min_age)
+ )
+ claimant_ptc = where(eligible_claimant, uncapped_ptc, 0)
+ return min_(p_dc.ptc.max, tax_unit.max(claimant_ptc)) * tax_unit(
+ "takes_up_dc_ptc", period
+ )
diff --git a/policyengine_us/variables/gov/states/dc/tax/income/credits/dc_ptc_has_eligible_claimant.py b/policyengine_us/variables/gov/states/dc/tax/income/credits/dc_ptc_has_eligible_claimant.py
new file mode 100644
index 00000000000..b2426d12160
--- /dev/null
+++ b/policyengine_us/variables/gov/states/dc/tax/income/credits/dc_ptc_has_eligible_claimant.py
@@ -0,0 +1,31 @@
+from policyengine_us.model_api import *
+
+
+class dc_ptc_has_eligible_claimant(Variable):
+ value_type = bool
+ entity = TaxUnit
+ label = "DC property tax credit has an eligible claimant"
+ documentation = (
+ "Whether a filer in the tax unit can be the Schedule H claimant: no "
+ "credit is allowed for a year in which the person claiming it was a "
+ "dependent under an income tax law, unless that person is 65 or older. "
+ "Only one claimant per tax filing unit may claim the credit, so a "
+ "couple can claim it through either spouse."
+ )
+ definition_period = YEAR
+ reference = (
+ # D.C. Code 47-1806.06(b)(4) and (k).
+ "https://code.dccouncil.gov/us/dc/council/code/sections/47-1806.06",
+ "https://code.dccouncil.gov/us/dc/council/code/sections/47-1801.04#(13)",
+ )
+ defined_for = StateCode.DC
+
+ def formula(tax_unit, period, parameters):
+ p = parameters(period).gov.states.dc.tax.income.credits.ptc
+ person = tax_unit.members
+ filer = person("is_tax_unit_head_or_spouse", period)
+ # The federal filing exception permits claiming one's own dependents;
+ # it does not remove dependent status under section 152.
+ dependent = person("claimable_as_dependent_on_another_return", period)
+ old_enough = person("age", period) >= p.dependent_claimant_min_age
+ return tax_unit.any(filer & (~dependent | old_enough))
diff --git a/policyengine_us/variables/gov/states/dc/tax/income/credits/eitc/dc_eitc_without_qualifying_child.py b/policyengine_us/variables/gov/states/dc/tax/income/credits/eitc/dc_eitc_without_qualifying_child.py
index f62c122b95f..197b63cdf17 100644
--- a/policyengine_us/variables/gov/states/dc/tax/income/credits/eitc/dc_eitc_without_qualifying_child.py
+++ b/policyengine_us/variables/gov/states/dc/tax/income/credits/eitc/dc_eitc_without_qualifying_child.py
@@ -14,6 +14,11 @@ class dc_eitc_without_qualifying_child(Variable):
definition_period = YEAR
reference = (
"https://code.dccouncil.gov/us/dc/council/code/sections/47-1806.04", # (f)
+ # IRC 32(c)(1)(A)(ii)(III): a filer without a qualifying child must not
+ # be a dependent of another taxpayer.
+ "https://www.law.cornell.edu/uscode/text/26/32#c_1_A_ii",
+ # Publication 596: on a joint return, neither spouse may be claimable.
+ "https://www.irs.gov/pub/irs-prior/p596--2025.pdf#page=18",
)
defined_for = StateCode.DC
@@ -36,9 +41,16 @@ def formula(tax_unit, period, parameters):
age_eligible = is_head_or_spouse & (age >= min_age) & (age <= max_age)
# (f)(1)(C) is limited to an individual without a qualifying child.
no_qualifying_child = ~tax_unit("dc_eitc_has_qualifying_child", period)
+ # (f) keeps the IRC 32 framework: a filer without a qualifying child
+ # must not be a dependent of another taxpayer, and on a joint return
+ # neither spouse may be (Publication 596).
+ filer_is_dependent = tax_unit(
+ "head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
+ )
us_eligible = (
filer_meets_identification
& no_qualifying_child
+ & ~filer_is_dependent
& tax_unit.any(age_eligible)
& tax_unit("eitc_investment_income_eligible", period)
& eitc_filing_status_eligible(tax_unit, period, parameters)
diff --git a/policyengine_us/variables/gov/states/ga/tax/income/credits/ctc/ga_ctc_eligible_child.py b/policyengine_us/variables/gov/states/ga/tax/income/credits/ctc/ga_ctc_eligible_child.py
index 2017b09d4b3..0a592f9e4bc 100644
--- a/policyengine_us/variables/gov/states/ga/tax/income/credits/ctc/ga_ctc_eligible_child.py
+++ b/policyengine_us/variables/gov/states/ga/tax/income/credits/ctc/ga_ctc_eligible_child.py
@@ -8,22 +8,23 @@ class ga_ctc_eligible_child(Variable):
definition_period = YEAR
defined_for = StateCode.GA
reference = (
- "https://legiscan.com/GA/text/HB136/id/3204611/Georgia-2025-HB136-Enrolled.pdf#page=3",
+ "https://gov.georgia.gov/document/2025-signed-legislation/hb-136/download#page=3",
"https://www.law.cornell.edu/uscode/text/26/24#c",
+ # Georgia Department of Revenue, Qualifying Child Credit (tax years
+ # beginning on or after January 1, 2026).
+ "https://dor.georgia.gov/qualifying-child-credit",
)
def formula(person, period, parameters):
p = parameters(period).gov.states.ga.tax.income.credits.ctc
age = person("age", period)
- # Georgia gives "qualifying child" the meaning of IRC 24(c) only, so
- # it is not limited to children for whom the federal credit is
- # allowed (IRC 24(a), 152(b)(1)). Whether a filer who can be claimed
- # as a dependent can claim it is not settled; this keeps the IRC
- # 24(c) child test.
+ # Georgia lawmakers adopted IRC 24(c) in O.C.G.A. 48-7-29.27, without
+ # 24(a)'s dependent deduction condition or 24(h)(7)'s SSN requirement.
+ # We retain the reading that 24(c)(2) changes only the citizenship
+ # condition; a broader reading would import 152(b)(1)'s
+ # no-dependents condition.
p_federal = parameters(period).gov.irs.credits.ctc
- ctc_eligible_child = (
- person("is_tax_unit_dependent", period)
- & (age < p_federal.amount.base.thresholds[-1])
- & person("meets_ctc_child_identification_requirements", period)
+ ctc_eligible_child = person("is_tax_unit_dependent", period) & (
+ age < p_federal.amount.base.thresholds[-1]
)
return ctc_eligible_child & (age < p.age_threshold)
diff --git a/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_low_income_credit_potential.py b/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_low_income_credit_potential.py
index 07708fa354f..db1e112c1e1 100644
--- a/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_low_income_credit_potential.py
+++ b/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_low_income_credit_potential.py
@@ -7,18 +7,38 @@ class ga_low_income_credit_potential(Variable):
label = "Georgia low income credit"
unit = USD
definition_period = YEAR
- reference = "https://dor.georgia.gov/document/document/2022-it-511-individual-income-tax-booklet/download"
+ reference = (
+ "https://dor.georgia.gov/document/document/2022-it-511-individual-income-tax-booklet/download",
+ # 2025 IT-511, Line 17 excludes claimed and claimable filers.
+ "https://dor.georgia.gov/document/document/2025-it-511-individual-income-tax-booklet/download#page=17",
+ "https://dor.georgia.gov/low-income-tax-credit",
+ # O.C.G.A. 48-7A-3(a) as amended by HB 1069 (2010), section 5, printed
+ # page 1172.
+ "https://dlg.usg.edu/record/dlg_ggpd_y-ga-bl407-b2010-bv-p1-bbk-p1-belec-p-btext",
+ "https://www.law.cornell.edu/uscode/text/26/152#b_1",
+ )
defined_for = StateCode.GA
def formula(tax_unit, period, parameters):
- # We follow the legal code, which says (in addition to head and spouse):
- # "multiplied by the number of dependents which the taxpayer is entitled to claim."
- # The tax form excludes adult dependents:
- # "Exemptions are self, spouse and natural or legally adopted children"
- # Georgia counts its own exemptions (O.C.G.A. 48-7A-3 deems each joint
- # spouse a dependent), not the federal count, which leaves out a
- # filer who can be claimed as a dependent.
- exemptions = tax_unit("tax_unit_size", period)
+ # Georgia lawmakers count both spouses under O.C.G.A. 48-7A-3(a)(1).
+ # They set the amount per credit unit in subsection (b).
+ # Either eligible spouse can claim for both spouse units. IRC
+ # 152(b)(1) bars child units when either filer is a dependent outside
+ # the filing exception. The statutory claimed-or-otherwise-eligible
+ # disjunction remains open; the model keeps the claimed-or-claimable
+ # exclusion for the taxpayer's own eligibility.
+ size = tax_unit("tax_unit_size", period)
+ dependents = tax_unit("tax_unit_dependents", period)
+ filer_is_dependent = tax_unit(
+ "head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
+ )
+ exemptions = where(filer_is_dependent, size - dependents, size)
+ person = tax_unit.members
+ filer = person("is_tax_unit_head_or_spouse", period)
+ excluded = person("claimed_as_dependent_on_another_return", period) | person(
+ "claimable_as_dependent_on_another_return", period
+ )
+ eligible = tax_unit.any(filer & ~excluded)
p = parameters(period).gov.states.ga.tax.income.credits.low_income
# age threshold
age_threshold = p.supplement_age_eligibility
@@ -32,4 +52,4 @@ def formula(tax_unit, period, parameters):
total_exemptions = aged_count + exemptions
federal_agi = tax_unit("adjusted_gross_income", period)
amount_per_exemption = p.amount.calc(federal_agi)
- return total_exemptions * amount_per_exemption
+ return total_exemptions * amount_per_exemption * eligible
diff --git a/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_surplus_tax_rebate.py b/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_surplus_tax_rebate.py
index 96cf082e1d7..3a56bc64ae1 100644
--- a/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_surplus_tax_rebate.py
+++ b/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_surplus_tax_rebate.py
@@ -14,16 +14,14 @@ class ga_surplus_tax_rebate(Variable):
unit = USD
definition_period = YEAR
reference = (
- "https://www.legis.ga.gov/api/legislation/document/20232024/217823",
"https://www.legis.ga.gov/api/legislation/document/20232024/217823#page=2",
)
defined_for = StateCode.GA
# Not modeled: the statutory eligibility conditions in O.C.G.A.
# 48-7-20.2(a)-(b) - filing both 2021 and 2022 returns ((a), (b)(1)),
- # the nonresident-alien exclusion ((a)(1)(A)), the dependent exclusion
- # with its earned-income carve-back ((a)(1)(B), (a)(2)), the estate or
- # trust exclusion ((a)(1)(C)), and part-year/nonresident proration
- # ((b)(2)) - are all treated as met for a full-year Georgia tax unit.
+ # the nonresident-alien exclusion ((a)(1)(A)), the estate or trust
+ # exclusion ((a)(1)(C)), and part-year/nonresident proration ((b)(2)) -
+ # are all treated as met for a full-year Georgia tax unit.
def formula(tax_unit, period, parameters):
filing_status = tax_unit("filing_status", period)
@@ -32,4 +30,14 @@ def formula(tax_unit, period, parameters):
# 48-7-20.2(b)(1)(A): capped at the Form 500 Line 16 liability (tax
# before credits); it pays out past a zero balance due.
line_16_tax = tax_unit("ga_income_tax_before_non_refundable_credits", period)
- return min_(cap, line_16_tax)
+ # 48-7-20.2(a)(1)(B) and (a)(2): an individual claimed as a dependent
+ # for 2021 is a qualified taxpayer only if that individual had 2021
+ # earned income. The refund is credited to a qualified taxpayer, so a
+ # joint return gets the joint amount while either spouse qualifies.
+ # The exclusion turns on an actual claim, not on being claimable.
+ person = tax_unit.members
+ filer = person("is_tax_unit_head_or_spouse", period)
+ claimed = person("claimed_as_dependent_on_another_return", period)
+ own_earnings = person("earned_income", period) > 0
+ qualified = tax_unit.any(filer & (~claimed | own_earnings))
+ return min_(cap, line_16_tax) * qualified
diff --git a/policyengine_us/variables/gov/states/ga/tax/income/exemptions/ga_exemptions.py b/policyengine_us/variables/gov/states/ga/tax/income/exemptions/ga_exemptions.py
index f1d368c4c9c..987f3e9e846 100644
--- a/policyengine_us/variables/gov/states/ga/tax/income/exemptions/ga_exemptions.py
+++ b/policyengine_us/variables/gov/states/ga/tax/income/exemptions/ga_exemptions.py
@@ -10,16 +10,24 @@ class ga_exemptions(Variable):
definition_period = YEAR
reference = (
"https://apps.dor.ga.gov/FillableForms/PDFViewer/Index?form=2022GA500",
+ # 2025 IT-511, Lines 7a-d: "Georgia follows the Federal rules for
+ # qualified dependents."
+ "https://dor.georgia.gov/document/document/2025-it-511-individual-income-tax-booklet/download#page=16",
+ "https://www.law.cornell.edu/uscode/text/26/152#b_1",
"https://advance.lexis.com/documentpage/?pdmfid=1000516&crid=2c053fd5-32c1-4cc1-86b0-36aaade9da5b&pdistocdocslideraccess=true&config=00JAA1MDBlYzczZi1lYjFlLTQxMTgtYWE3OS02YTgyOGM2NWJlMDYKAFBvZENhdGFsb2feed0oM9qoQOMCSJFX5qkd&pddocfullpath=%2Fshared%2Fdocument%2Fstatutes-legislation%2Furn%3AcontentItem%3A6348-G0H1-DYB7-W3JT-00008-00&pdcomponentid=234187&pdtocnodeidentifier=ABWAALAADAAL&ecomp=k2vckkk&prid=4862391c-e031-443f-ad52-ae86c6bb5ce2",
)
def formula(tax_unit, period, parameters):
p = parameters(period).gov.states.ga.tax.income.exemptions
- # Dependent exemptions
- dependents = tax_unit(
- "tax_unit_dependents", period
- ) # Total the number of dependents
- dependent_exemptions = dependents * p.dependent
+ # Dependent exemptions. Georgia follows the federal rules for qualified
+ # dependents, so a return on which the filer (or, if joint, either
+ # spouse) can be claimed as a dependent has none (IRC 152(b)(1)). The
+ # 2021-2023 personal exemption has no such rule.
+ dependents = tax_unit("tax_unit_dependents", period)
+ filer_is_dependent = tax_unit(
+ "head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
+ )
+ dependent_exemptions = where(filer_is_dependent, 0, dependents) * p.dependent
# total exemptions
if p.personal.availability:
diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/2022_rebate/id_2022_rebate_floor.py b/policyengine_us/variables/gov/states/id/tax/income/credits/2022_rebate/id_2022_rebate_floor.py
index fd0e514f6b7..cb3201c785e 100644
--- a/policyengine_us/variables/gov/states/id/tax/income/credits/2022_rebate/id_2022_rebate_floor.py
+++ b/policyengine_us/variables/gov/states/id/tax/income/credits/2022_rebate/id_2022_rebate_floor.py
@@ -7,5 +7,20 @@ class id_2022_rebate_floor(Variable):
label = "Idaho 2022 rebate floor"
definition_period = YEAR
defined_for = StateCode.ID
+ reference = (
+ # Idaho Code 63-3024B(3): "seventy-five dollars ($75.00) per taxpayer and
+ # each dependent", based on the 2020 return.
+ "https://legislature.idaho.gov/statutesrules/idstat/Title63/T63CH30/SECT63-3024B/",
+ "https://www.law.cornell.edu/uscode/text/26/152#b_1",
+ )
- adds = ["gov.states.id.tax.income.credits.2022_rebate.floor"]
+ def formula(person, period, parameters):
+ p = parameters(period).gov.states.id.tax.income.credits["2022_rebate"]
+ # Each taxpayer counts, even one whom another taxpayer can claim, but a
+ # return on which the filer (or, if joint, either spouse) can be
+ # claimed has no dependents (IRC 152(b)(1)).
+ filer = person("is_tax_unit_head_or_spouse", period)
+ filer_is_dependent = person.tax_unit(
+ "head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
+ )
+ return p.floor * (filer | ~filer_is_dependent)
diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/grocery/id_grocery_credit.py b/policyengine_us/variables/gov/states/id/tax/income/credits/grocery/id_grocery_credit.py
index cc88ab65ea5..019fd198063 100644
--- a/policyengine_us/variables/gov/states/id/tax/income/credits/grocery/id_grocery_credit.py
+++ b/policyengine_us/variables/gov/states/id/tax/income/credits/grocery/id_grocery_credit.py
@@ -11,6 +11,15 @@ class id_grocery_credit(Variable):
reference = (
"https://law.justia.com/codes/idaho/2022/title-63/chapter-30/section-63-3024a/",
"https://tax.idaho.gov/wp-content/uploads/forms/EFO00089/EFO00089_12-30-2022.pdf#page=7",
+ # Idaho Code 63-3024A(1), (4): a credit for the taxpayer, the spouse and
+ # each IRC 152 dependent claimed on the return, never two for the same
+ # personal exemption.
+ "https://legislature.idaho.gov/statutesrules/idstat/Title63/T63CH30/SECT63-3024A/",
+ # 2025 Form 40 instructions, line 43 and the Food Tax Credit
+ # Worksheet (yourself, spouse, dependents).
+ # PDF pages 13-14
+ "https://tax.idaho.gov/wp-content/uploads/forms/EIN00046/EIN00046_03-02-2026.pdf#page=13",
+ "https://www.law.cornell.edu/uscode/text/26/152#b_1",
)
def formula(tax_unit, period, parameters):
@@ -25,5 +34,16 @@ def formula(tax_unit, period, parameters):
)
else:
full_amount = person("id_grocery_credit_base", period)
- credit_value = full_amount * (qualified_months / MONTHS_IN_YEAR)
+ # A filer whom another taxpayer can claim gets no credit ("You can't
+ # claim this credit if someone else, such as a parent, can claim you
+ # as a dependent"); the other spouse on a joint return keeps theirs.
+ # A return on which the filer (or, if joint, either spouse) can be
+ # claimed has no dependents (IRC 152(b)(1)).
+ filer = person("is_tax_unit_head_or_spouse", period)
+ claimable = person("claimable_as_dependent_on_another_return", period)
+ filer_is_dependent = person.tax_unit(
+ "head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
+ )
+ eligible = where(filer, ~claimable, ~filer_is_dependent)
+ credit_value = full_amount * (qualified_months / MONTHS_IN_YEAR) * eligible
return tax_unit.sum(credit_value)
diff --git a/policyengine_us/variables/gov/states/id/tax/income/subtractions/household_and_dependent_care/id_household_and_dependent_care_expense_deduction.py b/policyengine_us/variables/gov/states/id/tax/income/subtractions/household_and_dependent_care/id_household_and_dependent_care_expense_deduction.py
index bfe2b957235..3b6855a370e 100644
--- a/policyengine_us/variables/gov/states/id/tax/income/subtractions/household_and_dependent_care/id_household_and_dependent_care_expense_deduction.py
+++ b/policyengine_us/variables/gov/states/id/tax/income/subtractions/household_and_dependent_care/id_household_and_dependent_care_expense_deduction.py
@@ -8,6 +8,13 @@ class id_household_and_dependent_care_expense_deduction(Variable):
unit = USD
definition_period = YEAR
defined_for = StateCode.ID
+ reference = (
+ # Idaho Code 63-3022D: for an individual who maintains a household that
+ # includes one or more qualifying individuals under IRC 21(b)(1).
+ "https://legislature.idaho.gov/statutesrules/idstat/Title63/T63CH30/SECT63-3022D/",
+ "https://www.law.cornell.edu/uscode/text/26/21#b",
+ "https://tax.idaho.gov/wp-content/uploads/forms/EIN00046/EIN00046_03-02-2026.pdf#page=44",
+ )
def formula(tax_unit, period, parameters):
p = parameters(
@@ -15,8 +22,10 @@ def formula(tax_unit, period, parameters):
).gov.states.id.tax.income.deductions.dependent_care_expenses
# Idaho Code §63-3022D adopts the IRC §21(b)(2) employment-related
# expense definition, which covers childcare plus care for a disabled
- # adult qualifying individual (care_expenses).
- childcare = tax_unit("tax_unit_childcare_expenses", period)
+ # adult qualifying individual (care_expenses). A qualifying adult
+ # does not make child-only daycare a qualifying expense when the
+ # child fails the dependent-taxpayer test.
+ childcare = tax_unit("cdcc_qualifying_childcare_expenses", period)
adult_care = add(tax_unit, period, ["care_expenses"])
expenses = childcare + adult_care
# In 2023 Idaho implemented an increased cap independent of the number of children
@@ -28,8 +37,13 @@ def formula(tax_unit, period, parameters):
exclusion = tax_unit("dependent_care_assistance_exclusion", period)
limit = max_(limit - exclusion, 0)
eligible_capped_expenses = min_(expenses, limit)
+ # The deduction needs a household member who is an IRC 21(b)(1)
+ # qualifying individual. A child under 13 is not one when the filer
+ # (or, if joint, either spouse) can be claimed as a dependent; a
+ # disabled dependent or spouse still is.
+ has_qualifying_individual = tax_unit("count_cdcc_eligible", period) > 0
# cap further to the lowest earnings between the taxpayer and spouse
- return min_(
+ return has_qualifying_individual * min_(
eligible_capped_expenses,
tax_unit("min_head_spouse_earned", period),
)
diff --git a/source_conflicts/candidates.yaml b/source_conflicts/candidates.yaml
index 6025a2b3e21..7be20342f29 100644
--- a/source_conflicts/candidates.yaml
+++ b/source_conflicts/candidates.yaml
@@ -1965,6 +1965,44 @@ candidates:
state: ruled
note: 'Ruled in October 2026 to follow the statute; verify the applicable regulation version. Code not yet on
main: co premium assistance formula, aca_ptc_slcsp.'
+- id: us-dc:eitc-joint-dependent-worksheet-omission
+ program: income-tax
+ years:
+ from: 2025
+ to: 2025
+ type: tax
+ question: Does the childless EITC worksheet's omission of a joint-return dependency question override the federal
+ dependency condition that DC incorporates?
+ sources:
+ - kind: statute
+ citation: D.C. Code 47-1806.04(f)(1)(C)(i)
+ url: https://code.dccouncil.gov/us/dc/council/code/sections/47-1806.04#(f)(1)(C)
+ - kind: statute
+ citation: 26 U.S.C. 32(c)(1)(A)(ii)(III)
+ url: https://www.law.cornell.edu/uscode/text/26/32#c_1_A_ii
+ - kind: instructions
+ citation: 2025 IRS Publication 596, Rule 12, pages 17-18
+ url: https://www.irs.gov/pub/irs-prior/p596--2025.pdf#page=17
+ - kind: worksheet
+ citation: 2025 D-40 booklet, childless EITC worksheet, Section A question 3, PDF page 24
+ url: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2025_D40_Book_082026_v1.pdf#page=24
+ readings:
+ statute: DC requires federal section 32 eligibility. A childless joint return fails the dependent condition
+ when either spouse can be claimed outside the federal filing exception.
+ other: The worksheet asks unmarried and married-but-not-joint filers whether they can be claimed. Reading its
+ omission as an exemption would allow a joint return with a dependent spouse.
+ example: A 2025 joint return with $1,000 wages and one claimable spouse receives $0 under the statute. Omitting
+ the dependency bar gives 7.65% times $1,000, or $76.50.
+ pe_us:
+ follows: statute
+ code:
+ - policyengine_us/variables/gov/states/dc/tax/income/credits/eitc/dc_eitc_without_qualifying_child.py
+ prs:
+ - https://github.com/PolicyEngine/policyengine-us/pull/10050
+ state: ruled
+ note: The statute supplies no joint-return exemption from the incorporated dependency condition. The worksheet
+ omission creates no separate statutory alternative. PE-US keeps the either-spouse bar and its federal filing
+ exception.
- id: us-ct:liheap-income-floor-vs-smi-limit
program: liheap
years:
@@ -2177,26 +2215,44 @@ candidates:
than" (dc_liheap_eligible.py).
- id: us-dc:schedule-h-claimable-unclaimed-claimant
program: property-tax-credit
+ years:
+ from: 2021
+ to: 2026
+ type: tax
question: Does the statutory dependent-claimant bar apply to a claimable but unclaimed filer or only to a filer
actually claimed under the instructions?
sources:
- kind: statute
- citation: D.C. Code 47-1806.06(k)
+ citation: D.C. Code 47-1806.06(b)(4), (k)
url: https://code.dccouncil.gov/us/dc/council/code/sections/47-1806.06
+ - kind: statute
+ citation: D.C. Code 47-1801.04(13), incorporating IRC 152
+ url: https://code.dccouncil.gov/us/dc/council/code/sections/47-1801.04#(13)
- kind: instructions
- citation: DC Schedule H instructions
- url: null
+ citation: 2025 Schedule H instructions, eligibility and additional information, PDF page 4
+ url: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2025_Schedule_H_021226.pdf#page=4
+ - kind: instructions
+ citation: 2021 Schedule H instructions, eligibility, PDF page 4
+ url: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2021_SCHEDULE%20H.pdf#page=4
readings:
- statute: The PR interprets dependent as claimable and applies the statutory age exception.
- other: Only an actual dependency claim triggers the bar.
+ statute: The claimant's IRC 152 dependent status triggers the bar, whether another taxpayer claims them or not.
+ The statutory exception permits a dependent aged 65 or older to claim.
+ other: The instructions require that the claimant not be claimed on another return, allowing an unclaimed
+ dependent under 65 to claim the credit.
+ example: A claimable but unclaimed adult aged 30 with $10,000 AGI and $10,000 rent receives $0 under the statute
+ versus $1,425 under the instructions' actual-claim wording in 2025.
pe_us:
follows: statute
- code: []
+ code:
+ - policyengine_us/variables/gov/states/dc/tax/income/credits/dc_ptc.py
+ - policyengine_us/variables/gov/states/dc/tax/income/credits/dc_ptc_has_eligible_claimant.py
prs:
- https://github.com/PolicyEngine/policyengine-us/pull/10050
state: ruled
- note: 'The October 2026 statute-first ruling requires rechecking dependent; establish years and instruction text,
- separately from the rent-pooling issue. Code not yet on main: dc_ptc, dc_ptc_has_eligible_claimant.'
+ note: The statutory dependent definition controls the actual-claim wording in the confirmed 2021, 2022 and 2025
+ instructions. The same statutory definition applies in 2026. The federal exception for claiming one's own
+ dependents does not remove the claimant's dependent status. Either independently eligible spouse may claim;
+ only that claimant's own rent enters the calculation.
- id: us-de:529-subtraction-exact-agi-limit
program: income-tax
years:
@@ -2754,6 +2810,41 @@ candidates:
disability benefits and workers'' compensation, and its comments record that the FY2025 and FY2026 plans leave
those categories unchecked (income/sources/person.yaml, ga_liheap_income.py). Obtain the complete plan questions
to verify categories and years.'
+- id: us-ga:low-income-credit-claimed-or-eligible-disjunction
+ program: income-tax
+ years:
+ from: 2025
+ to: 2025
+ type: tax
+ question: Does Georgia's separately negated statutory disjunction permit a claimable but unclaimed filer to claim
+ the low-income credit, although DOR excludes them?
+ sources:
+ - kind: statute
+ citation: O.C.G.A. 48-7A-3(a), HB 1069 (2010) section 5, printed page 1172
+ url: https://dlg.usg.edu/record/dlg_ggpd_y-ga-bl407-b2010-bv-p1-bbk-p1-belec-p-btext
+ - kind: instructions
+ citation: 2025 IT-511, line 17 eligibility, page 17
+ url: https://dor.georgia.gov/document/document/2025-it-511-individual-income-tax-booklet/download#page=17
+ - kind: guidance
+ citation: Georgia Department of Revenue, Low Income Tax Credit
+ url: https://dor.georgia.gov/low-income-tax-credit
+ readings:
+ statute: The separate negations joined by or admit eligibility for an unclaimed taxpayer, even when another
+ taxpayer could claim them. Reading otherwise as linking the two exclusion grounds instead supports DOR's
+ narrower eligibility condition.
+ other: DOR requires that the filer neither be claimed nor be eligible to be claimed on another return.
+ example: With $5,000 AGI and sufficient liability, a claimable but unclaimed single filer receives $0 under the
+ retained reading versus $26 under the literal disjunction.
+ pe_us:
+ follows: statute
+ code:
+ - policyengine_us/variables/gov/states/ga/tax/income/credits/ga_low_income_credit_potential.py
+ prs:
+ - https://github.com/PolicyEngine/policyengine-us/pull/10050
+ state: open
+ note: Both readings arise from the statute's grammar. PE-US keeps its existing $0 result pending a ruling and
+ discloses the $26 alternative. DOR's guidance supports the retained reading but does not remove the statutory
+ ambiguity.
- id: us-ga:liheap-subsidized-renter-energy-burden
program: liheap
years:
@@ -3380,7 +3471,7 @@ candidates:
citation: Idaho Code 63-3024A(1), (4)
url: https://legislature.idaho.gov/statutesrules/idstat/Title63/T63CH30/SECT63-3024A/
- kind: worksheet
- citation: Idaho grocery credit statute (with the per-person worksheet)
+ citation: 2025 Idaho Form 40 instructions, grocery credit eligibility and per-person worksheet, pages 13-14
url: https://tax.idaho.gov/wp-content/uploads/forms/EIN00046/EIN00046_03-02-2026.pdf#page=14
- kind: form
citation: Form 40 line 12(c)
@@ -3392,12 +3483,15 @@ candidates:
amount to $310.
pe_us:
follows: statute
- code: []
+ code:
+ - policyengine_us/variables/gov/states/id/tax/income/credits/grocery/id_grocery_credit.py
prs:
- https://github.com/PolicyEngine/policyengine-us/pull/10050
state: ruled
- note: 'Ruled statute-first in October 2026; confirm line 12(c)''s scope against the per-person statute and worksheet.
- Code not yet on main: id_grocery_credit.'
+ note: Section 63-3024A grants amounts per taxpayer, spouse and dependent. The instructions separately count
+ each person, so the remaining eligible spouse keeps $155 and a restored dependent adds $155. The instructions
+ fill the statute's gap on claimability itself. Form 40 line 12(c) has no joint-return exception, but its zero-credit
+ direction cannot override the statute's per-person grant.
- id: us-id:liheap-heat-in-rent-fy2026
program: liheap
years:
diff --git a/source_conflicts/sources/us-dc/d40-childless-eitc-worksheet-2025-p24.txt b/source_conflicts/sources/us-dc/d40-childless-eitc-worksheet-2025-p24.txt
new file mode 100644
index 00000000000..7f00d3031e3
--- /dev/null
+++ b/source_conflicts/sources/us-dc/d40-childless-eitc-worksheet-2025-p24.txt
@@ -0,0 +1,67 @@
+Source: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2025_D40_Book_082026_v1.pdf
+PDF page 24, complete childless EITC eligibility worksheet. pdftotext (poppler) extracted the text in reading order.
+
+District of Columbia Earned Income Tax Credit (EITC) Worksheet
+For Filers Without A Qualifying Child
+This worksheet is for taxpayers who do not have a qualifying child for the Earned Income
+Credit. If you have a qualifying child DO NOT USE THIS WORKSHEET.
+If your earned income or federal adjusted gross income (fed AGI) is greater than $30,941
+
+STOP
+YOU CANNOT CLAIM THIS CREDIT
+
+Section A: General Eligibility for the DC Childless Worker EITC.
+If you qualified for the federal Earned Income Credit, go directly to Section B, below. If you did not qualify for the federal
+Earned Income Credit, answer these questions:
+1. Were you, or your spouse/registered domestic partner if married filing jointly, or married filing separately on
+the same return, at least age 25, but not age 65 at the end of 2025? (born after December 31, 1960, and
+before January 2, 2001). If your spouse died in 2025 or if you are preparing a return for someone who died
+in 2025, see IRS Pub. 596 before you answer. If YES continue. If NO, STOP, you cannot claim the EITC.
+2. Do you, and your spouse/registered domestic partner (if filing on the same tax return) have a social security
+number or individual taxpayer identification number that allows you to work, or is valid for DC EITC
+purposes? (See p. 13 herein and the federal tax return instruction booklet for more information).
+If YES, continue.
+3. If you answer YES to any of the following questions, STOP, you are not eligible for the EITC. If you can answer
+NO to all the questions, go to step 4.
+a.
+
+If you are unmarried, can you be claimed as a dependent on someone else’s 2025 tax return, or are you
+someone else’s qualifying child?
+
+b.
+
+If you are married, and you are not filing with your spouse, can you be claimed as a dependent on someone else’s
+2025 tax return, or are you someone else’s qualifying child?
+
+c.
+
+On your federal return are you filing form 2555?
+
+d.
+
+Is your investment income more than $11,950? (Investment income includes: taxable interest, tax-exempt interest,
+ordinary dividends and capital gains more than $0)
+
+e.
+
+Did you file form 4797 with your federal return?
+
+f.
+
+Did you file Schedule E with your federal return?
+
+g.
+
+Did you have income from the rental of personal property not used in trade or business on your federal return?
+
+h.
+
+Did you elect to report child's interest and dividends on your federal return?
+
+i.
+
+Are you a qualifying child of another person for the Earned Income Credit?
+
+4. If you had income or loss from a passive activity, see IRS Pub. 596 to see if you can claim the EITC.
+
+24
diff --git a/source_conflicts/sources/us-dc/schedule-h-instructions-2021-p4.txt b/source_conflicts/sources/us-dc/schedule-h-instructions-2021-p4.txt
new file mode 100644
index 00000000000..097342dbefd
--- /dev/null
+++ b/source_conflicts/sources/us-dc/schedule-h-instructions-2021-p4.txt
@@ -0,0 +1,23 @@
+Source: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2021_SCHEDULE%20H.pdf
+PDF page 4 (printed instruction page 1), dependency eligibility and additional information excerpt. pdftoppm rendered the page at 150 dpi; tesseract extracted the text. Visual review checked this excerpt against the page image.
+
+You must not be claimed as a dependent on
+someone else's federal, state, or DC income tax
+return unless you reached age 65 on or before
+December 31, 2021.
+
+Additional Information:
+
++ A Homeowner and Renter Property Tax
+Credit cannot be claimed on behalf of a
+taxpayer who died on or before
+December 31, 2021.
+
+* — Only one claimant per "tax filing unit"
+can claim the property tax credit.
+
+* An individual who is claimed as a
+dependent on someone else's individual
+income tax return is eligible to file the
+claim for his/her tax filing unit only if the
+individual is 65 years of age or older.
diff --git a/source_conflicts/sources/us-dc/schedule-h-instructions-2025-p4-p5.txt b/source_conflicts/sources/us-dc/schedule-h-instructions-2025-p4-p5.txt
new file mode 100644
index 00000000000..b8c08cd6a21
--- /dev/null
+++ b/source_conflicts/sources/us-dc/schedule-h-instructions-2025-p4-p5.txt
@@ -0,0 +1,75 @@
+Source: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2025_Schedule_H_021226.pdf
+PDF pages 4-5 (printed instruction pages 1-2), relevant excerpts. pdftoppm rendered the pages at 150 dpi; tesseract extracted the text. Visual review checked these excerpts against both page images.
+
+Eligibility
+You must meet the following requirements to claim this credit:
+
+* You were a District of Columbia (DC) resident
+from Jan 1. through Dec. 31, 2025;
+
+* Your residence is not part of a public
+housing dwelling;
+
+* You rented or owned and lived in a
+home, apartment, rooming house, or
+condominium in DC during all of 2025;
+
+* Your 2025 federal adjusted gross income (AGI),
+was $66,000 or less ($90,000 or less if you
+are age 70 or older);
+
+* You did not rent from a landlord whose property
+was either exempt from real property taxes or
+who paid a percentage of rental income to DC
+instead of paying a real estate tax;
+
+« You must not be claimed as a dependent on
+someone else’s federal, state, or DC income tax
+return unless you reached age 65 on or before
+December 31, 2025.
+
+Additional Information:
+
++ A Homeowner and Renter Property Tax
+Credit cannot be claimed on behalf of a
+taxpayer who died on or before
+December 31, 2025.
+
+* Only one claimant per "tax filing unit"
+can claim the property tax credit.
+
+* An individual who is claimed as a
+dependent on someone else's individual
+income tax return is only eligible to file
+the claim for their tax filing unit if they
+are 65 years of age or older.
+
+Revised 11/2025
+
+Tax Filing Unit Defined
+
+A tax filing unit is defined as an individual or married couple
+that would — if their income is above the DC filing threshold
+— file an individual income tax return. A married couple/
+registered domestic partners residing in the same household are
+part of the same tax filing unit whether filing jointly, separately
+on the same return, or separately on separate returns.
+
+
+[PDF page 5]
+
+Line 2 Rent paid on the property in 2025
+
+Enter the total rent you paid for the property during the year and
+multiply it by .20. If you sublet part of your home to another
+person, the rent that you received is gross income and must be
+reported on your D-40, or D-30 if gross rental income is greater
+than $12,000.
+
+Note: If you rent more than one home in the District in the
+same calendar year, rent you paid during the year is
+determined by dividing the rent paid pursuant to the last rental
+agreement in force during the year by the number of months
+during the year for which this rent was paid and then multiplying
+the result by 12. Enter this number for “Rent paid by you on
+the property in 2025.” Multiply the rent entered by .20.
diff --git a/source_conflicts/sources/us-ga/low-income-tax-credit-guidance.html b/source_conflicts/sources/us-ga/low-income-tax-credit-guidance.html
new file mode 100644
index 00000000000..e58aaed4922
--- /dev/null
+++ b/source_conflicts/sources/us-ga/low-income-tax-credit-guidance.html
@@ -0,0 +1,1271 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Low Income Tax Credit | Department of Revenue
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Skip to main content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/source_conflicts/sources/us-id/form40-2025-p2.txt b/source_conflicts/sources/us-id/form40-2025-p2.txt
new file mode 100644
index 00000000000..8e7a2fe65d3
--- /dev/null
+++ b/source_conflicts/sources/us-id/form40-2025-p2.txt
@@ -0,0 +1,40 @@
+Source: https://tax.idaho.gov/wp-content/uploads/forms/EFO00089/EFO00089_03-02-2026.pdf
+PDF page 2, Form 40 line 12 excerpt. pdftotext (poppler) extracted the text in reading order.
+
+Form 40
+
+2025
+
+(continued)
+
+Tax Calculation. See instructions, page 8.
+Standard
+Deduction
+for Most
+People
+12. Check
+Single or
+Married Filing
+Separately:
+$15,750
+
+a.
+
+If age 65 or older ........................ ▪
+
+Yourself ▪
+
+Spouse
+
+b.
+
+If blind ......................................... ▪
+
+Yourself ▪
+
+Spouse
+
+c.
+
+If your parent or someone else can claim you as a dependent, check
+here and enter zero on line 43 ....................... ▪
diff --git a/source_conflicts/sources/us-id/form40-instructions-2025-p13-p14.txt b/source_conflicts/sources/us-id/form40-instructions-2025-p13-p14.txt
new file mode 100644
index 00000000000..112874a11cc
--- /dev/null
+++ b/source_conflicts/sources/us-id/form40-instructions-2025-p13-p14.txt
@@ -0,0 +1,45 @@
+Source: https://tax.idaho.gov/wp-content/uploads/forms/EIN00046/EIN00046_03-02-2026.pdf
+PDF pages 13-14 (printed pages 11-12), line 43 and Food Tax Credit Worksheet excerpts. pdftotext (poppler) extracted page 13 in reading order and the left column of page 14 at 72 dpi; the capture omits control marks.
+
+Line 43 Food Tax Credit
+This credit applies only to Idaho residents. You can’t
+claim this credit if someone else, such as a parent, can
+claim you as a dependent.
+The credit is either $155 each for you, your spouse,
+and your qualifying dependents or the actual amount
+of sales tax paid during the year (up to $250 each). To
+claim actual costs, include scanned copies of receipts
+with qualifying food purchases that occurred in Idaho
+with your return.
+
+[PDF page 14]
+
+Calculating the Food Tax Credit
+Complete the worksheet below.
+• To claim your credit: Enter the total next to the
+instructions for line 43 and on line 43.
+• To donate your credit: See the instructions after
+the worksheet.
+
+Food Tax Credit Worksheet
+Yourself:
+1. Number of qualified months .......................
+2. Multiply line 1 by $12.92.
+If qualified for the entire year, enter $155 ......
+Spouse (if joint return):
+3. Number of qualified months .......................
+4. Multiply line 3 by $12.92.
+If qualified for the entire year, enter $155 ......
+Resident dependents claimed on line 6:
+5. Enter $155 for each dependent who qualifies for
+the entire year. If a dependent qualifies for only
+part of the year, calculate as follows:
+ Number of qualified months ____ x $12.92
+Number of qualified months ____ x $12.92
+Number of qualified months ____ x $12.92
+Number of qualified months ____ x $12.92
+If you have more than four dependents, use additional
+paper to calculate.
+Total credit allowed:
+6. Add amounts on lines 2, 4, and 5. Enter
+total on line 43 ............................................
diff --git a/source_conflicts/sources/us/publication-596-2025-p17-p18.txt b/source_conflicts/sources/us/publication-596-2025-p17-p18.txt
new file mode 100644
index 00000000000..3a0849cf6fe
--- /dev/null
+++ b/source_conflicts/sources/us/publication-596-2025-p17-p18.txt
@@ -0,0 +1,59 @@
+Source: https://www.irs.gov/pub/irs-prior/p596--2025.pdf
+PDF pages 17-18, Rule 12 excerpt. pdftotext (poppler) extracted the text in reading order.
+
+Rule 12—You Cannot Be the
+Dependent of Another Person
+If you aren’t filing a joint return, you meet this rule if you
+did not check the box on line 12a that says “Someone can
+claim you as a dependent.”
+If you are filing a joint return, you meet this rule if you
+did not check either box that says “Someone can claim
+you as a dependent” or “Someone can claim your spouse
+as a dependent.”
+
+Rules if You Do Not Have a Qualifying Child
+
+17
+
+If you aren’t sure whether someone else can claim you
+as a dependent, get Pub. 501 and read the rules for claiming a dependent.
+If someone else can claim you as a dependent on their
+return, but doesn’t, you still can’t claim the credit unless
+the person who can claim you on their tax return isn’t required to file an income tax return and doesn’t file a tax return or files a return only to claim a refund of withheld income tax or estimated tax paid.
+Example 1. In 2025, you were age 25, single, and living at home with your parents. You worked and weren’t a
+student. You earned $7,500. Your parents can’t claim you
+as a dependent. When you file your return, you do not
+check the "Someone can claim you as a dependent"
+checkbox. You meet this rule. You can claim the EIC if you
+meet all the other requirements.
+Example 2. The facts are the same as in Example 1,
+except that you earned $2,000. Your parents can claim
+you as a dependent but decide not to. You don’t meet this
+rule. You can’t claim the credit because your parents could
+have claimed you as a dependent.
+Joint returns. You generally can’t be claimed as a dependent by another person if you are married and file a
+joint return.
+However, another person may be able to claim you as a
+dependent if you and your spouse file a joint return merely
+to claim a refund of income tax withheld or estimated tax
+paid. But neither you nor your spouse can be claimed as a
+dependent by another person if you claim the EIC on your
+joint return.
+Example 1—Return filed to get refund of tax withheld. You are 26 years old. You and your spouse live with
+your parents and had $800 of wages from part-time jobs
+and no other income. Neither you nor your spouse is required to file a tax return. You don’t have a child. Taxes
+were taken out of your pay so you file a joint return only to
+get a refund of the withheld taxes. Your parents aren’t disqualified from claiming you as a dependent just because
+you filed a joint return.
+Example 2—Return filed to get EIC. The facts are
+the same as in Example 1 except no taxes were taken out
+of your pay. Also, you and your spouse aren’t required to
+file a tax return, but you file a joint return to claim an EIC of
+$63 and get a refund of that amount. Because claiming
+the EIC is your reason for filing the return, you aren’t filing
+it only to claim a refund of income tax withheld or estimated tax paid. Your parents can’t claim you or your spouse
+as a dependent.
+
+18
+
+Chapter 3