From 156481c982f04379f722d4287a0bc27e5b5f59de Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Tue, 21 Oct 2025 10:40:41 -0400 Subject: [PATCH 1/7] Add the Georgia itemizer tax credit Fixes #6705 --- changelog_entry.yaml | 4 ++ .../tax/income/credits/itemizer/amount.yaml | 13 ++++++ .../ga/tax/income/credits/non_refundable.yaml | 9 +++++ .../income/credits/ga_itemizer_credit.yaml | 40 +++++++++++++++++++ .../tax/income/credits/ga_itemizer_credit.py | 23 +++++++++++ 5 files changed, 89 insertions(+) create mode 100644 policyengine_us/parameters/gov/states/ga/tax/income/credits/itemizer/amount.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_itemizer_credit.yaml create mode 100644 policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..cbbe62061f2 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: minor + changes: + added: + - Georgia Itemizer Tax Credit. diff --git a/policyengine_us/parameters/gov/states/ga/tax/income/credits/itemizer/amount.yaml b/policyengine_us/parameters/gov/states/ga/tax/income/credits/itemizer/amount.yaml new file mode 100644 index 00000000000..d8fc88aa288 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ga/tax/income/credits/itemizer/amount.yaml @@ -0,0 +1,13 @@ +description: Georgia provides this itemizer tax credit amount for resident taxpayers who itemize their deductions. +values: + 2021-01-01: 0 + 2024-01-01: 300 +metadata: + unit: currency-USD + period: year + label: Georgia itemizer tax credit amount + reference: + - title: Official Code of Georgia Annotated | O.C.G.A. § 48-7-29.23 + href: https://law.justia.com/codes/georgia/2022/title-48/chapter-7/article-2/section-48-7-29-23/ + - title: Official Code of Georgia Annotated | O.C.G.A. § 48-7-1 (Definition of Resident) + href: https://law.justia.com/codes/georgia/2022/title-48/chapter-7/article-1/section-48-7-1/ diff --git a/policyengine_us/parameters/gov/states/ga/tax/income/credits/non_refundable.yaml b/policyengine_us/parameters/gov/states/ga/tax/income/credits/non_refundable.yaml index c75fba0fa7a..83d82909b56 100644 --- a/policyengine_us/parameters/gov/states/ga/tax/income/credits/non_refundable.yaml +++ b/policyengine_us/parameters/gov/states/ga/tax/income/credits/non_refundable.yaml @@ -7,10 +7,15 @@ values: 2022-01-01: - ga_cdcc - ga_low_income_credit + 2024-01-01: + - ga_cdcc + - ga_low_income_credit + - ga_itemizer_credit 2026-01-01: - ga_cdcc - ga_low_income_credit - ga_ctc + - ga_itemizer_credit metadata: unit: list period: year @@ -22,5 +27,9 @@ metadata: # Child and dependent care credit. - title: Official Code of Georgia Annotated | O.C.G.A. § 48-7-29.10(b) href: https://law.justia.com/codes/georgia/2022/title-48/chapter-7/article-2/section-48-7-29-10/ + # Itemizer credit. + - title: Official Code of Georgia Annotated | O.C.G.A. § 48-7-29.23 + href: https://law.justia.com/codes/georgia/2022/title-48/chapter-7/article-2/section-48-7-29-23/ + # Child tax credit. - title: House Bill 136 # Establishes the CTC for tax year 2026. href: https://legiscan.com/GA/text/HB136/id/3204611/Georgia-2025-HB136-Enrolled.pdf#page=2 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_itemizer_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_itemizer_credit.yaml new file mode 100644 index 00000000000..12e8d80e16c --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_itemizer_credit.yaml @@ -0,0 +1,40 @@ +- name: Georgia itemizer credit - itemizer receives credit + period: 2024 + input: + state_code: GA + tax_unit_itemizes: true + output: + ga_itemizer_credit: 300 + +- name: Georgia itemizer credit - non-itemizer receives no credit + period: 2024 + input: + state_code: GA + tax_unit_itemizes: false + output: + ga_itemizer_credit: 0 + +- name: Georgia itemizer credit - not available before 2024 + period: 2023 + input: + state_code: GA + tax_unit_itemizes: true + output: + ga_itemizer_credit: 0 + +- name: Georgia itemizer credit - available in 2025 + period: 2025 + input: + state_code: GA + tax_unit_itemizes: true + output: + ga_itemizer_credit: 300 + +- name: Georgia itemizer credit - high income itemizer receives credit + period: 2024 + input: + state_code: GA + adjusted_gross_income: 100_000 + tax_unit_itemizes: true + output: + ga_itemizer_credit: 300 diff --git a/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py b/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py new file mode 100644 index 00000000000..5ab3e880130 --- /dev/null +++ b/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py @@ -0,0 +1,23 @@ +from policyengine_us.model_api import * + + +class ga_itemizer_credit(Variable): + value_type = float + entity = TaxUnit + label = "Georgia itemizer tax credit" + unit = USD + definition_period = YEAR + reference = ( + "https://law.justia.com/codes/georgia/2022/title-48/chapter-7/article-2/section-48-7-29-23/", + # Definition of resident + "https://law.justia.com/codes/georgia/2022/title-48/chapter-7/article-1/section-48-7-1/", + ) + defined_for = StateCode.GA + + def formula(tax_unit, period, parameters): + # Full-year and part-year residents who itemize their deductions + # are entitled to a credit up to $300 per taxpayer + itemizes = tax_unit("tax_unit_itemizes", period) + p = parameters(period).gov.states.ga.tax.income.credits.itemizer + amount = p.amount + return where(itemizes, amount, 0) From 3de64e89b84907883c0e4a92a1c9372a3ca46474 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Tue, 21 Oct 2025 10:48:20 -0400 Subject: [PATCH 2/7] remove 2023 test --- .../gov/states/ga/tax/income/credits/itemizer/amount.yaml | 1 - .../states/ga/tax/income/credits/ga_itemizer_credit.yaml | 8 -------- 2 files changed, 9 deletions(-) diff --git a/policyengine_us/parameters/gov/states/ga/tax/income/credits/itemizer/amount.yaml b/policyengine_us/parameters/gov/states/ga/tax/income/credits/itemizer/amount.yaml index d8fc88aa288..f2b395c6471 100644 --- a/policyengine_us/parameters/gov/states/ga/tax/income/credits/itemizer/amount.yaml +++ b/policyengine_us/parameters/gov/states/ga/tax/income/credits/itemizer/amount.yaml @@ -1,6 +1,5 @@ description: Georgia provides this itemizer tax credit amount for resident taxpayers who itemize their deductions. values: - 2021-01-01: 0 2024-01-01: 300 metadata: unit: currency-USD diff --git a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_itemizer_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_itemizer_credit.yaml index 12e8d80e16c..b0985dd0503 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_itemizer_credit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_itemizer_credit.yaml @@ -14,14 +14,6 @@ output: ga_itemizer_credit: 0 -- name: Georgia itemizer credit - not available before 2024 - period: 2023 - input: - state_code: GA - tax_unit_itemizes: true - output: - ga_itemizer_credit: 0 - - name: Georgia itemizer credit - available in 2025 period: 2025 input: From 4f63ce389007090833afe9b9961cc5e76900376e Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Tue, 21 Oct 2025 10:53:20 -0400 Subject: [PATCH 3/7] reference --- .../gov/states/ga/tax/income/credits/itemizer/amount.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/policyengine_us/parameters/gov/states/ga/tax/income/credits/itemizer/amount.yaml b/policyengine_us/parameters/gov/states/ga/tax/income/credits/itemizer/amount.yaml index f2b395c6471..7c0b2a7016e 100644 --- a/policyengine_us/parameters/gov/states/ga/tax/income/credits/itemizer/amount.yaml +++ b/policyengine_us/parameters/gov/states/ga/tax/income/credits/itemizer/amount.yaml @@ -6,6 +6,8 @@ metadata: period: year label: Georgia itemizer tax credit amount reference: + - title: 2024 Georgia Individual Income Tax Booklet, Page 17, Line 19 + href: https://dor.georgia.gov/document/document/2024-it-511-individual-income-tax-booklet/download#page=17 - title: Official Code of Georgia Annotated | O.C.G.A. § 48-7-29.23 href: https://law.justia.com/codes/georgia/2022/title-48/chapter-7/article-2/section-48-7-29-23/ - title: Official Code of Georgia Annotated | O.C.G.A. § 48-7-1 (Definition of Resident) From e2452f791b0416ed4f24762cc7b0e76f8e69b21d Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Tue, 21 Oct 2025 13:34:59 -0400 Subject: [PATCH 4/7] joint adjustment --- .../ga/tax/income/credits/itemizer/amount.yaml | 4 ++-- .../tax/income/credits/ga_itemizer_credit.yaml | 16 ++++++++++++++-- .../ga/tax/income/credits/ga_itemizer_credit.py | 6 ++++-- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/policyengine_us/parameters/gov/states/ga/tax/income/credits/itemizer/amount.yaml b/policyengine_us/parameters/gov/states/ga/tax/income/credits/itemizer/amount.yaml index 7c0b2a7016e..238cfbd17d3 100644 --- a/policyengine_us/parameters/gov/states/ga/tax/income/credits/itemizer/amount.yaml +++ b/policyengine_us/parameters/gov/states/ga/tax/income/credits/itemizer/amount.yaml @@ -8,7 +8,7 @@ metadata: reference: - title: 2024 Georgia Individual Income Tax Booklet, Page 17, Line 19 href: https://dor.georgia.gov/document/document/2024-it-511-individual-income-tax-booklet/download#page=17 - - title: Official Code of Georgia Annotated | O.C.G.A. § 48-7-29.23 - href: https://law.justia.com/codes/georgia/2022/title-48/chapter-7/article-2/section-48-7-29-23/ + - title: Official Code of Georgia Annotated | O.C.G.A. § 48-7-27.1 + href: https://law.justia.com/codes/georgia/title-48/chapter-7/article-2/section-48-7-27-1/ - title: Official Code of Georgia Annotated | O.C.G.A. § 48-7-1 (Definition of Resident) href: https://law.justia.com/codes/georgia/2022/title-48/chapter-7/article-1/section-48-7-1/ diff --git a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_itemizer_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_itemizer_credit.yaml index b0985dd0503..b7498e7b988 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_itemizer_credit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_itemizer_credit.yaml @@ -1,11 +1,21 @@ -- name: Georgia itemizer credit - itemizer receives credit +- name: Georgia itemizer credit - single itemizer receives credit period: 2024 input: state_code: GA tax_unit_itemizes: true + tax_unit_is_joint: false output: ga_itemizer_credit: 300 +- name: Georgia itemizer credit - joint itemizers receive double credit + period: 2024 + input: + state_code: GA + tax_unit_itemizes: true + tax_unit_is_joint: true + output: + ga_itemizer_credit: 600 + - name: Georgia itemizer credit - non-itemizer receives no credit period: 2024 input: @@ -22,11 +32,13 @@ output: ga_itemizer_credit: 300 -- name: Georgia itemizer credit - high income itemizer receives credit +- name: Georgia itemizer credit - high income single itemizer receives credit period: 2024 input: state_code: GA adjusted_gross_income: 100_000 tax_unit_itemizes: true + tax_unit_is_joint: false output: ga_itemizer_credit: 300 + diff --git a/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py b/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py index 5ab3e880130..da12fca8ddd 100644 --- a/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py +++ b/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py @@ -17,7 +17,9 @@ class ga_itemizer_credit(Variable): def formula(tax_unit, period, parameters): # Full-year and part-year residents who itemize their deductions # are entitled to a credit up to $300 per taxpayer + # Joint filers have 2 taxpayers, all others have 1 itemizes = tax_unit("tax_unit_itemizes", period) + is_joint = tax_unit("tax_unit_is_joint", period) + taxpayer_count = where(is_joint, 2, 1) p = parameters(period).gov.states.ga.tax.income.credits.itemizer - amount = p.amount - return where(itemizes, amount, 0) + return where(itemizes, p.amount * taxpayer_count, 0) From dd989bd3b2a186b8cce505f80f1d603e519aac7b Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Thu, 23 Oct 2025 17:11:07 -0400 Subject: [PATCH 5/7] comments --- .../ga/tax/income/credits/ga_itemizer_credit.yaml | 6 +++--- .../ga/tax/income/credits/ga_itemizer_credit.py | 13 +++++-------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_itemizer_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_itemizer_credit.yaml index b7498e7b988..9114cfd2331 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_itemizer_credit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_itemizer_credit.yaml @@ -3,7 +3,7 @@ input: state_code: GA tax_unit_itemizes: true - tax_unit_is_joint: false + filing_status: SINGLE output: ga_itemizer_credit: 300 @@ -12,7 +12,7 @@ input: state_code: GA tax_unit_itemizes: true - tax_unit_is_joint: true + filing_status: JOINT output: ga_itemizer_credit: 600 @@ -38,7 +38,7 @@ state_code: GA adjusted_gross_income: 100_000 tax_unit_itemizes: true - tax_unit_is_joint: false + filing_status: SINGLE output: ga_itemizer_credit: 300 diff --git a/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py b/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py index da12fca8ddd..89e6b43fbc6 100644 --- a/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py +++ b/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py @@ -7,19 +7,16 @@ class ga_itemizer_credit(Variable): label = "Georgia itemizer tax credit" unit = USD definition_period = YEAR - reference = ( - "https://law.justia.com/codes/georgia/2022/title-48/chapter-7/article-2/section-48-7-29-23/", - # Definition of resident - "https://law.justia.com/codes/georgia/2022/title-48/chapter-7/article-1/section-48-7-1/", - ) + reference = "https://law.justia.com/codes/georgia/2022/title-48/chapter-7/article-2/section-48-7-29-23/" defined_for = StateCode.GA + adds = ["gov.states.ga.tax.income.credits.itemizer"] + def formula(tax_unit, period, parameters): # Full-year and part-year residents who itemize their deductions # are entitled to a credit up to $300 per taxpayer # Joint filers have 2 taxpayers, all others have 1 itemizes = tax_unit("tax_unit_itemizes", period) - is_joint = tax_unit("tax_unit_is_joint", period) - taxpayer_count = where(is_joint, 2, 1) + taxpayer_count = tax_unit("head_spouse_count", period) p = parameters(period).gov.states.ga.tax.income.credits.itemizer - return where(itemizes, p.amount * taxpayer_count, 0) + return itemizes * p.amount * taxpayer_count From 9be18686c6e37c8d6be2cf3347ae4b5423a135a5 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Mon, 27 Oct 2025 10:11:31 -0400 Subject: [PATCH 6/7] defined for --- .../states/ga/tax/income/credits/ga_itemizer_credit.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py b/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py index 89e6b43fbc6..694d341b01e 100644 --- a/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py +++ b/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py @@ -8,15 +8,11 @@ class ga_itemizer_credit(Variable): unit = USD definition_period = YEAR reference = "https://law.justia.com/codes/georgia/2022/title-48/chapter-7/article-2/section-48-7-29-23/" - defined_for = StateCode.GA - - adds = ["gov.states.ga.tax.income.credits.itemizer"] + defined_for = "tax_unit_itemizes" def formula(tax_unit, period, parameters): # Full-year and part-year residents who itemize their deductions # are entitled to a credit up to $300 per taxpayer - # Joint filers have 2 taxpayers, all others have 1 - itemizes = tax_unit("tax_unit_itemizes", period) taxpayer_count = tax_unit("head_spouse_count", period) p = parameters(period).gov.states.ga.tax.income.credits.itemizer - return itemizes * p.amount * taxpayer_count + return p.amount * taxpayer_count From 3ec13ac14cb31d4c630f8da04eb2dabddc631315 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Tue, 4 Nov 2025 15:43:27 -0500 Subject: [PATCH 7/7] fix --- .../gov/states/ga/tax/income/credits/ga_itemizer_credit.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py b/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py index 694d341b01e..9b359f86983 100644 --- a/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py +++ b/policyengine_us/variables/gov/states/ga/tax/income/credits/ga_itemizer_credit.py @@ -8,11 +8,12 @@ class ga_itemizer_credit(Variable): unit = USD definition_period = YEAR reference = "https://law.justia.com/codes/georgia/2022/title-48/chapter-7/article-2/section-48-7-29-23/" - defined_for = "tax_unit_itemizes" + defined_for = StateCode.GA def formula(tax_unit, period, parameters): # Full-year and part-year residents who itemize their deductions # are entitled to a credit up to $300 per taxpayer + itemizes = tax_unit("tax_unit_itemizes", period) taxpayer_count = tax_unit("head_spouse_count", period) p = parameters(period).gov.states.ga.tax.income.credits.itemizer - return p.amount * taxpayer_count + return where(itemizes, p.amount * taxpayer_count, 0)