From 6c27126d1933e499bbbfedc381fa8e3c1b8d5515 Mon Sep 17 00:00:00 2001 From: mitchellpound Date: Thu, 30 Nov 2023 11:19:18 -0700 Subject: [PATCH 1/9] Added some GA additions to income --- .../ga/tax/income/additions/additions.yaml | 2 ++ .../additions/ga_nol_carryover_addition.py | 13 +++++++++++++ .../tax/income/additions/ga_other_additions.py | 17 +++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_nol_carryover_addition.py create mode 100644 fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_other_additions.py diff --git a/fiscalsim_us/parameters/gov/states/ga/tax/income/additions/additions.yaml b/fiscalsim_us/parameters/gov/states/ga/tax/income/additions/additions.yaml index 98b28562c..5150718b9 100644 --- a/fiscalsim_us/parameters/gov/states/ga/tax/income/additions/additions.yaml +++ b/fiscalsim_us/parameters/gov/states/ga/tax/income/additions/additions.yaml @@ -2,6 +2,8 @@ description: Georgia adds these variables to the federal taxable income when com values: 2021-01-01: - form_4972_lumpsum_distributions + - ga_nol_carryover_addition + - ga_other_additions metadata: unit: list diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_nol_carryover_addition.py b/fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_nol_carryover_addition.py new file mode 100644 index 000000000..7f8c81c3a --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_nol_carryover_addition.py @@ -0,0 +1,13 @@ +from fiscalsim_us.model_api import * + + +class ga_nol_carryover_addition(Variable): + value_type = float + entity = TaxUnit + label = "Georgia addition to incone for net operating loss carryover deducted on federal return" + unit = USD + definition_period = YEAR + reference = ( + "https://houpl.org/wp-content/uploads/2023/01/2022-IT-511_Individual_Income_Tax_-Booklet-compressed.pdf#page=34" + ) + defined_for = StateCode.GA diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_other_additions.py b/fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_other_additions.py new file mode 100644 index 000000000..c56c5eec4 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_other_additions.py @@ -0,0 +1,17 @@ +from fiscalsim_us.model_api import * + + +class ga_other_additions(Variable): + value_type = float + entity = TaxUnit + label = "Georgia other additions to incone" + unit = USD + definition_period = YEAR + reference = ( + "https://houpl.org/wp-content/uploads/2023/01/2022-IT-511_Individual_Income_Tax_-Booklet-compressed.pdf#page=34" + ) + defined_for = StateCode.GA + + # For line 5 of Georgia tax form 500 Schedule 1 + # Also a catch-all for any non-implemented additions + # Such as interest on non-Georgia municipal or state bonds From c09b61aac5c49be1e59172cbffbf9ae47c4a74df Mon Sep 17 00:00:00 2001 From: mitchellpound Date: Thu, 30 Nov 2023 11:28:20 -0700 Subject: [PATCH 2/9] Added other GA subtractions --- .../tax/income/subtractions/subtractions.yaml | 3 ++- .../subtractions/ga_other_subtractions.py | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 fiscalsim_us/variables/gov/states/ga/tax/income/subtractions/ga_other_subtractions.py diff --git a/fiscalsim_us/parameters/gov/states/ga/tax/income/subtractions/subtractions.yaml b/fiscalsim_us/parameters/gov/states/ga/tax/income/subtractions/subtractions.yaml index b9334c128..7e8d1c2df 100644 --- a/fiscalsim_us/parameters/gov/states/ga/tax/income/subtractions/subtractions.yaml +++ b/fiscalsim_us/parameters/gov/states/ga/tax/income/subtractions/subtractions.yaml @@ -5,7 +5,8 @@ values: - ga_retirement_exclusion - ga_military_retirement_exclusion - taxable_social_security - - ga_investment_in_529_plan_deduction + - ga_investment_in_529_plan_deduction + - ga_other_subtractions metadata: diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/subtractions/ga_other_subtractions.py b/fiscalsim_us/variables/gov/states/ga/tax/income/subtractions/ga_other_subtractions.py new file mode 100644 index 000000000..b2f52638e --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/subtractions/ga_other_subtractions.py @@ -0,0 +1,18 @@ +from fiscalsim_us.model_api import * + + +class ga_other_subtractions(Variable): + value_type = float + entity = TaxUnit + label = "Georgia other subtractions from income" + unit = USD + definition_period = YEAR + reference = ( + "https://dor.georgia.gov/document/document/2022-it-511-individual-income-tax-booklet/download#page=34" + "https://advance.lexis.com/documentpage/?pdmfid=1000516&crid=fb5db531-a80f-4790-bddb-eefc8327ef60&config=00JAA1MDBlYzczZi1lYjFlLTQxMTgtYWE3OS02YTgyOGM2NWJlMDYKAFBvZENhdGFsb2feed0oM9qoQOMCSJFX5qkd&pddocfullpath=%2Fshared%2Fdocument%2Fstatutes-legislation%2Furn%3AcontentItem%3A65D2-CDH3-CGX8-044N-00008-00&pdcontentcomponentid=234186&pdteaserkey=sr1&pditab=allpods&ecomp=8s65kkk&earg=sr1&prid=66f02b0a-c5ae-4162-9535-127751546807" + ) + defined_for = StateCode.GA + + # From line 12 of Georgia tax form 500 Schedule 1 + # Also a catch all for any non-implemented subtractions (all fo the 2022 + # ones have been inplemented) From 73a90cbdc23a686c8413ccb42431aa617f2a7867 Mon Sep 17 00:00:00 2001 From: mitchellpound Date: Thu, 30 Nov 2023 11:54:02 -0700 Subject: [PATCH 3/9] Added GA itemized deduction logic --- .../ga/tax/income/deductions/ga_deductions.py | 13 +++++++++++++ .../deductions/ga_itemized_adjustments.py | 17 +++++++++++++++++ .../income/deductions/ga_itemized_deductions.py | 16 ++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_itemized_adjustments.py create mode 100644 fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_itemized_deductions.py diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_deductions.py b/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_deductions.py index 5230bfb0b..d22de6cbe 100644 --- a/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_deductions.py +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_deductions.py @@ -6,5 +6,18 @@ class ga_deductions(Variable): entity = TaxUnit label = "Georgia deductions" unit = USD + reference = ( + "https://dor.georgia.gov/it-511-individual-income-tax-booklet" + ) definition_period = YEAR defined_for = StateCode.GA + + def formula(tax_unit, period, parameters): + # In GA if the tax unit itemizes their federal returns, then + # they must itemize for their GA return. + # Same for standard deduction + ga_std_deduction = tax_unit("ga_standard_deduction", period) + ga_itemized = tax_unit("ga_itemized_deductions", period) + itemizes = tax_unit("tax_unit_itemizes", period) + + return where(itemizes, ga_itemized, ga_std_deduction) diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_itemized_adjustments.py b/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_itemized_adjustments.py new file mode 100644 index 000000000..c6d2cb887 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_itemized_adjustments.py @@ -0,0 +1,17 @@ +from fiscalsim_us.model_api import * + + +class ga_itemized_adjustments(Variable): + value_type = float + entity = TaxUnit + label = "Georgia itemized deductions" + unit = USD + reference = ( + "https://apps.dor.ga.gov/FillableForms/PDFViewer/Index?form=2022GA500" + ) + definition_period = YEAR + defined_for = StateCode.GA + + # Line 12b on GA Tax form 500 + # Adjustments for income taxes other than Georgia state taxes that + # are used in calculating federal itemized dedctions diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_itemized_deductions.py b/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_itemized_deductions.py new file mode 100644 index 000000000..b90e8617c --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_itemized_deductions.py @@ -0,0 +1,16 @@ +from fiscalsim_us.model_api import * + + +class ga_itemized_deductions(Variable): + value_type = float + entity = TaxUnit + label = "Georgia itemized deductions" + unit = USD + definition_period = YEAR + defined_for = StateCode.GA + + def formula(tax_unit, period, parameters): + federal_itemized = tax_unit("itemized_deductions_less_salt", period) + adjustments = tax_unit("ga_itemized_adjustments", period) + + return federal_itemized - adjustments From ae2fb2dff3607817f98b74219a2d54622e521a66 Mon Sep 17 00:00:00 2001 From: mitchellpound Date: Thu, 30 Nov 2023 12:18:16 -0700 Subject: [PATCH 4/9] Added logic for GA net operating loss --- .../ga/tax/income/deductions/nol_limit.yaml | 10 ++++++ .../states/ga/tax/income/ga_taxable_income.py | 3 +- .../ga/tax/income/nol/ga_nol_deduction.py | 31 +++++++++++++++++++ .../ga/tax/income/nol/ga_post2018_nol.py | 15 +++++++++ .../income/nol/ga_pre2018_nol_carryover.py | 15 +++++++++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 fiscalsim_us/parameters/gov/states/ga/tax/income/deductions/nol_limit.yaml create mode 100644 fiscalsim_us/variables/gov/states/ga/tax/income/nol/ga_nol_deduction.py create mode 100644 fiscalsim_us/variables/gov/states/ga/tax/income/nol/ga_post2018_nol.py create mode 100644 fiscalsim_us/variables/gov/states/ga/tax/income/nol/ga_pre2018_nol_carryover.py diff --git a/fiscalsim_us/parameters/gov/states/ga/tax/income/deductions/nol_limit.yaml b/fiscalsim_us/parameters/gov/states/ga/tax/income/deductions/nol_limit.yaml new file mode 100644 index 000000000..0efda35f7 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/ga/tax/income/deductions/nol_limit.yaml @@ -0,0 +1,10 @@ +description: Georgia only allows subtraction for NOL up to this limit of taxable income after personal deductions and exemptions +values: + 2019-01-01: .8 +metadata: + period: year + unit: /1 + label: Georgia NOL limit + reference: + - title: 2022 Form 500 Instructions + href: https://houpl.org/wp-content/uploads/2023/01/2022-IT-511_Individual_Income_Tax_-Booklet-compressed.pdf#page=12 diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/ga_taxable_income.py b/fiscalsim_us/variables/gov/states/ga/tax/income/ga_taxable_income.py index 35627af7e..767a59fe1 100644 --- a/fiscalsim_us/variables/gov/states/ga/tax/income/ga_taxable_income.py +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/ga_taxable_income.py @@ -18,4 +18,5 @@ def formula(tax_unit, period, parameters): agi = tax_unit("ga_agi", period) deductions = tax_unit("ga_deductions", period) exemptions = tax_unit("ga_exemptions", period) - return max_(0, agi - deductions - exemptions) + nol = tax_unit("ga_nol_deduction", period) + return max_(0, agi - deductions - exemptions - nol) diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/nol/ga_nol_deduction.py b/fiscalsim_us/variables/gov/states/ga/tax/income/nol/ga_nol_deduction.py new file mode 100644 index 000000000..fcb8294cb --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/nol/ga_nol_deduction.py @@ -0,0 +1,31 @@ +from fiscalsim_us.model_api import * + + +class ga_nol_deduction(Variable): + value_type = float + entity = TaxUnit + label = "Georgia Net Operating Loss deduction from income" + unit = USD + definition_period = YEAR + reference = ( + "https://dor.georgia.gov/it-511-individual-income-tax-booklet" + # above reference provides access to booklets for all years + # definition of Georgia taxable income starts on page 12 + ) + defined_for = StateCode.GA + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.ga.tax.income.deductions.nol_limit + agi = tax_unit("ga_agi", period) + deductions = tax_unit("ga_deductions", period) + exemptions = tax_unit("ga_exemptions", period) + pre_nol_income = max_(0, agi - deductions - exemptions) + + # no limit on pre-2018 NOL carryover + pre2018 = tax_unit("ga_pre2018_nol_carryover", period) + # NOL from years 2018 and after are limited to a percentage of + # taxable income before NOL + post2018 = tax_unit("ga_post2018_nol", period) + limited_post = min_(pre_nol_income * p, post2018) + + return pre2018 + limited_post diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/nol/ga_post2018_nol.py b/fiscalsim_us/variables/gov/states/ga/tax/income/nol/ga_post2018_nol.py new file mode 100644 index 000000000..bb96a172d --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/nol/ga_post2018_nol.py @@ -0,0 +1,15 @@ +from fiscalsim_us.model_api import * + + +class ga_post2018_nol(Variable): + value_type = float + entity = TaxUnit + label = "Georgia Net Operating Loss (carryover) from years after 2018" + unit = USD + definition_period = YEAR + reference = ( + "https://dor.georgia.gov/it-511-individual-income-tax-booklet" + # above reference provides access to booklets for all years + # definition of Georgia taxable income starts on page 12 + ) + defined_for = StateCode.GA diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/nol/ga_pre2018_nol_carryover.py b/fiscalsim_us/variables/gov/states/ga/tax/income/nol/ga_pre2018_nol_carryover.py new file mode 100644 index 000000000..80a8f9eff --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/nol/ga_pre2018_nol_carryover.py @@ -0,0 +1,15 @@ +from fiscalsim_us.model_api import * + + +class ga_pre2018_nol_carryover(Variable): + value_type = float + entity = TaxUnit + label = "Georgia Net Operating Loss carryover from years before 2018" + unit = USD + definition_period = YEAR + reference = ( + "https://dor.georgia.gov/it-511-individual-income-tax-booklet" + # above reference provides access to booklets for all years + # definition of Georgia taxable income starts on page 12 + ) + defined_for = StateCode.GA From eec01d813258e381f3043ca9d7fea931c2ceb530 Mon Sep 17 00:00:00 2001 From: mitchellpound Date: Thu, 30 Nov 2023 16:37:37 -0700 Subject: [PATCH 5/9] Added additonal structure for GA tax credits --- .../ga/tax/income/credits/nonrefundable.yaml | 14 ++++ .../ga/tax/income/credits/refundable.yaml | 11 +++ .../income/additions}/ga_additions.py | 0 .../credits/ga_nonrefundable_credtis.py | 29 ++++++++ .../credits/ga_other_nonrefundable_credits.py | 0 .../{ => credits}/ga_refundable_credits.py | 1 + .../ga_series100_nonrefundable_credits.py | 69 +++++++++++++++++++ .../ga_series100_refundable_credits.py | 19 +++++ .../gov/states/ga/{ => tax/income}/ga_agi.py | 0 .../income/ga_income_tax_before_credits.py | 34 +++++++++ ...ga_income_tax_before_refundable_credits.py | 24 +------ .../ga/tax/income/nol/ga_post2018_nol.py | 2 +- .../income/subtractions}/ga_subtractions.py | 0 13 files changed, 180 insertions(+), 23 deletions(-) create mode 100644 fiscalsim_us/parameters/gov/states/ga/tax/income/credits/nonrefundable.yaml create mode 100644 fiscalsim_us/parameters/gov/states/ga/tax/income/credits/refundable.yaml rename fiscalsim_us/variables/gov/states/ga/{ => tax/income/additions}/ga_additions.py (100%) create mode 100644 fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_nonrefundable_credtis.py create mode 100644 fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_other_nonrefundable_credits.py rename fiscalsim_us/variables/gov/states/ga/tax/income/{ => credits}/ga_refundable_credits.py (80%) create mode 100644 fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_series100_nonrefundable_credits.py create mode 100644 fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_series100_refundable_credits.py rename fiscalsim_us/variables/gov/states/ga/{ => tax/income}/ga_agi.py (100%) create mode 100644 fiscalsim_us/variables/gov/states/ga/tax/income/ga_income_tax_before_credits.py rename fiscalsim_us/variables/gov/states/ga/{ => tax/income/subtractions}/ga_subtractions.py (100%) diff --git a/fiscalsim_us/parameters/gov/states/ga/tax/income/credits/nonrefundable.yaml b/fiscalsim_us/parameters/gov/states/ga/tax/income/credits/nonrefundable.yaml new file mode 100644 index 000000000..cb499e15a --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/ga/tax/income/credits/nonrefundable.yaml @@ -0,0 +1,14 @@ +description: Georgia nonrefundable credits +values: + 2021-01-01: + - ga_low_income_credit + - ga_other_nonrefundable_credits + - ga_cdcc + - ga_series100_nonrefundable_credits + +metadata: + unit: list + label: Georgia nonrefundable credits + reference: + - title: 2022 Form 500 Instructions + href: https://apps.dor.ga.gov/FillableForms/PDFViewer/Index?form=2022GA500 diff --git a/fiscalsim_us/parameters/gov/states/ga/tax/income/credits/refundable.yaml b/fiscalsim_us/parameters/gov/states/ga/tax/income/credits/refundable.yaml new file mode 100644 index 000000000..4a7e8aad6 --- /dev/null +++ b/fiscalsim_us/parameters/gov/states/ga/tax/income/credits/refundable.yaml @@ -0,0 +1,11 @@ +description: Georgia refundable credits +values: + 2021-01-01: + - ga_series100_refundable_credits + +metadata: + unit: list + label: Georgia refundable credits + reference: + - title: 2022 Form 500 Instructions + href: https://apps.dor.ga.gov/FillableForms/PDFViewer/Index?form=2022GA500 diff --git a/fiscalsim_us/variables/gov/states/ga/ga_additions.py b/fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_additions.py similarity index 100% rename from fiscalsim_us/variables/gov/states/ga/ga_additions.py rename to fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_additions.py diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_nonrefundable_credtis.py b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_nonrefundable_credtis.py new file mode 100644 index 000000000..3d551c000 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_nonrefundable_credtis.py @@ -0,0 +1,29 @@ +from fiscalsim_us.model_api import * + + +class ga_nonrefundable_credits(Variable): + """ + Other GA nonrefundable credits. Catch all for credits not + currently implemented. Includes: + - Tax credits from states other than Georgia + The following are from the IND-CR summary worksheet + - Disabled Person Home Purchase or Retrofit Credit + - Georgia National Guard /Air National Guard Credit + - Qualified Caregiving Expense Credit + - Disaster Assistance Credit + - Rural Physicians Credit + - Adoption of a Foster Child Credit for Adoptions Occurring in Taxable + Years Beginning on or After January 1, 2008 and Before January 1, 2021 + - Eligible Single-Family Residence Credit + - Community Based Faculty Preceptor Credit + - Adoption of a Foster Child Credit for Adoptions Occurring in Taxable + Years Beginning on or After January 1, 2021 + - Teacher Recruitment and Retention Credit + """ + value_type = float + entity = TaxUnit + label = "Georgia nonrefundable credits" + unit = USD + definition_period = YEAR + defined_for = StateCode.GA + adds = "gov.states.ga.tax.income.credits.nonrefundable" diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_other_nonrefundable_credits.py b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_other_nonrefundable_credits.py new file mode 100644 index 000000000..e69de29bb diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/ga_refundable_credits.py b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_refundable_credits.py similarity index 80% rename from fiscalsim_us/variables/gov/states/ga/tax/income/ga_refundable_credits.py rename to fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_refundable_credits.py index 935a0913b..cf0b2219d 100644 --- a/fiscalsim_us/variables/gov/states/ga/tax/income/ga_refundable_credits.py +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_refundable_credits.py @@ -8,3 +8,4 @@ class ga_refundable_credits(Variable): unit = USD definition_period = YEAR defined_for = StateCode.GA + adds = "gov.states.ga.tax.income.credits.refundable" diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_series100_nonrefundable_credits.py b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_series100_nonrefundable_credits.py new file mode 100644 index 000000000..2f94fc8ff --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_series100_nonrefundable_credits.py @@ -0,0 +1,69 @@ +from fiscalsim_us.model_api import * + + +class ga_series100_nonrefundable_credits(Variable): + """ + Georgia nonrefundable Series 100 tax credits. Line 20 Form 500 + These credits are claimed using the Form 500 Schedule 2. + A tax unit may only claim series 100 tex credits if they + file online. + These credits include the following with the codes: + 102 - Employer’s Credit for Approved Employee Retraining + 103 - Employer’s Jobs Tax Credit + 104 - Employer’s Credit for Purchasing Child Care + Property + 105 - Employer’s Credit for Providing or Sponsoring + Child Care for Employees + 106 - Manufacturer’s Investment Tax Credit + 107 - Optional Investment Tax Credit + 108 - Qualified Transportation Credit (only carryover + can be used) + 109 - Low Income Housing Credit + 111 - Business Enterprise Vehicle Credit + 112 - Research Tax Credit + 113 - Headquarters Tax Credit + 114 - Port Activity Tax Credit + 115 - Bank Tax Credit + 116 - Low Emission Vehicle Credit (only carryover can + be used) + 117 - Zero Emission Vehicle Credit (only carryover can + be used) + 118 - New Facilities Job Credit + 119 - Electric Vehicle Charger Credit + 120 - New Manufacturing Facilities Property Credit + 121 - Historic Rehabilitation Credit for Historic Homes + 122 - Film Tax Credit (Use code 133 if the credit is for a + Qualified Interactive Entertainment Production Company) + 124 - Land Conservation Credit + 125 - Qualified Education Expense Credit + 126 - Seed-Capital Fund Credit + 128 - Wood Residual Credit + 130 - Quality Jobs Tax Credit + 131 - Alternate Port Activity Tax Credit + 132 - Qualified Investor Tax Credit + 133 - Film Tax Credit for a Qualified Interactive Entainment Production Company + 135 - Historic Rehabilitation Tax Credit for any Other Certified Structures + 136 - Qualified Rurual Hospital Organization Expense Tax Credit + 138 - Postproduction Film Tax Credit + 139 - Small Postproduction Film Tax Credit + 140 - Qualified Education Donation Tax Credit + 141 - Musical Tax Credit + 142 - Rural Zone Tax Credit + 143 - Agribusiness and Rural Jobs Tax Credit + 144 - Post- Consumer Waste Materials Tax Credit + 145 - Timber Tax Credit + 146 - Railroad Track Maintenance Tax Credit + 147 - Personal Protective Equipment Manufacturer Jobs Tax Credit + 148 - Life Sciences Manufacturing Job Tax Credit + 149 - Historic Rehabilitation Tax Credit for Historic Homes and other Certified Structure + """ + value_type = float + entity = TaxUnit + label = "Georgia series 100 nonrefundable credits" + reference = ("https://dor.georgia.gov/it-511-individual-income-tax-booklet") + unit = USD + definition_period = YEAR + defined_for = StateCode.GA + + # These are really hard to find the specifics since you need to file online + # to get them. diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_series100_refundable_credits.py b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_series100_refundable_credits.py new file mode 100644 index 000000000..8aeeb3de2 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_series100_refundable_credits.py @@ -0,0 +1,19 @@ +from fiscalsim_us.model_api import * + + +class ga_series100_refundable_credits(Variable): + """ + Georgia refundable Series 100 tax credits. + These credits are claimed using the Form 500 Schedule 2b. + A tax unit may only claim series 100 tex credits if they + file online. + Currently (in 2022) the only refundable series 100 tax credit + is the Timber Tax Credit (145). + """ + value_type = float + entity = TaxUnit + label = "Georgia series 100 refundable credits" + unit = USD + definition_period = YEAR + defined_for = StateCode.GA + diff --git a/fiscalsim_us/variables/gov/states/ga/ga_agi.py b/fiscalsim_us/variables/gov/states/ga/tax/income/ga_agi.py similarity index 100% rename from fiscalsim_us/variables/gov/states/ga/ga_agi.py rename to fiscalsim_us/variables/gov/states/ga/tax/income/ga_agi.py diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/ga_income_tax_before_credits.py b/fiscalsim_us/variables/gov/states/ga/tax/income/ga_income_tax_before_credits.py new file mode 100644 index 000000000..6dcbe3a67 --- /dev/null +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/ga_income_tax_before_credits.py @@ -0,0 +1,34 @@ +from fiscalsim_us.model_api import * + + +class ga_income_tax_before_credits(Variable): + value_type = float + entity = TaxUnit + label = "Georgia income tax before credits" + unit = USD + definition_period = YEAR + reference = ( + ) + defined_for = StateCode.GA + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.ga.tax.income.main + filing_status = tax_unit("filing_status", period) + status = filing_status.possible_values + income = tax_unit("ga_taxable_income", period) + return select( + [ + filing_status == status.SINGLE, + filing_status == status.SEPARATE, + filing_status == status.JOINT, + filing_status == status.HEAD_OF_HOUSEHOLD, + filing_status == status.WIDOW, + ], + [ + p.single.calc(income), + p.separate.calc(income), + p.joint.calc(income), + p.head_of_household.calc(income), + p.widow.calc(income), + ], + ) diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/ga_income_tax_before_refundable_credits.py b/fiscalsim_us/variables/gov/states/ga/tax/income/ga_income_tax_before_refundable_credits.py index 3c02b5564..d3c7c50de 100644 --- a/fiscalsim_us/variables/gov/states/ga/tax/income/ga_income_tax_before_refundable_credits.py +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/ga_income_tax_before_refundable_credits.py @@ -8,25 +8,5 @@ class ga_income_tax_before_refundable_credits(Variable): unit = USD definition_period = YEAR defined_for = StateCode.GA - - def formula(tax_unit, period, parameters): - p = parameters(period).gov.states.ga.tax.income.main - filing_status = tax_unit("filing_status", period) - status = filing_status.possible_values - income = tax_unit("ga_taxable_income", period) - return select( - [ - filing_status == status.SINGLE, - filing_status == status.SEPARATE, - filing_status == status.JOINT, - filing_status == status.HEAD_OF_HOUSEHOLD, - filing_status == status.WIDOW, - ], - [ - p.single.calc(income), - p.separate.calc(income), - p.joint.calc(income), - p.head_of_household.calc(income), - p.widow.calc(income), - ], - ) + adds = ["ga_income_tax_before_credits"] + subtracts = ["ga_nonrefundable_credits"] diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/nol/ga_post2018_nol.py b/fiscalsim_us/variables/gov/states/ga/tax/income/nol/ga_post2018_nol.py index bb96a172d..fdc74b47a 100644 --- a/fiscalsim_us/variables/gov/states/ga/tax/income/nol/ga_post2018_nol.py +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/nol/ga_post2018_nol.py @@ -4,7 +4,7 @@ class ga_post2018_nol(Variable): value_type = float entity = TaxUnit - label = "Georgia Net Operating Loss (carryover) from years after 2018" + label = "Georgia Net Operating Loss (carryover) from years 2018 and after" unit = USD definition_period = YEAR reference = ( diff --git a/fiscalsim_us/variables/gov/states/ga/ga_subtractions.py b/fiscalsim_us/variables/gov/states/ga/tax/income/subtractions/ga_subtractions.py similarity index 100% rename from fiscalsim_us/variables/gov/states/ga/ga_subtractions.py rename to fiscalsim_us/variables/gov/states/ga/tax/income/subtractions/ga_subtractions.py From ae48b51591378adc992441f9b619659470877bd6 Mon Sep 17 00:00:00 2001 From: mitchellpound Date: Fri, 1 Dec 2023 11:19:51 -0700 Subject: [PATCH 6/9] Fixed non-refundable credits --- .../tax/income/ga_income_tax_before_refundable_credits.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/ga_income_tax_before_refundable_credits.py b/fiscalsim_us/variables/gov/states/ga/tax/income/ga_income_tax_before_refundable_credits.py index d3c7c50de..346d9587b 100644 --- a/fiscalsim_us/variables/gov/states/ga/tax/income/ga_income_tax_before_refundable_credits.py +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/ga_income_tax_before_refundable_credits.py @@ -10,3 +10,9 @@ class ga_income_tax_before_refundable_credits(Variable): defined_for = StateCode.GA adds = ["ga_income_tax_before_credits"] subtracts = ["ga_nonrefundable_credits"] + + def formula(tax_unit, period, parameters): + tax_before_credits = tax_unit("ga_income_tax_before_credits", period) + nonrefundables = tax_unit("ga_nonrefundable_credits", period) + + return max_(0, tax_before_credits - nonrefundables) From 4cbe5f1d8c8d5f4edfe7697edb4f428ca01cb381 Mon Sep 17 00:00:00 2001 From: mitchellpound Date: Fri, 1 Dec 2023 12:48:20 -0700 Subject: [PATCH 7/9] Added tests for credits --- .../credits/ga_nonrefundable_credits.yaml | 19 +++++++++++++++++ .../income/credits/ga_refundable_credits.yaml | 21 +++++++++++++++++++ ...yaml => ga_income_tax_before_credits.yaml} | 10 ++++----- 3 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 fiscalsim_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_nonrefundable_credits.yaml create mode 100644 fiscalsim_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_refundable_credits.yaml rename fiscalsim_us/tests/policy/baseline/gov/states/ga/tax/income/{ga_income_tax_before_refundable_credits.yaml => ga_income_tax_before_credits.yaml} (76%) diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_nonrefundable_credits.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_nonrefundable_credits.yaml new file mode 100644 index 000000000..b1efbe748 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_nonrefundable_credits.yaml @@ -0,0 +1,19 @@ +- name: nonrefundable credits less than taxable income + period: 2022 + input: + ga_taxable_income: 3_000 + ga_nonrefundable_credits: 30 + filing_status: SINGLE + state_code: GA + output: + ga_income_tax_before_refundable_credits: 30 + +- name: Nonrefundable credits more than taxable income + period: 2022 + input: + ga_taxable_income: 3_000 + ga_nonrefundable_credits: 100 + filing_status: SINGLE + state_code: GA + output: + ga_income_tax_before_refundable_credits: 0 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_refundable_credits.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_refundable_credits.yaml new file mode 100644 index 000000000..d6fce3774 --- /dev/null +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ga/tax/income/credits/ga_refundable_credits.yaml @@ -0,0 +1,21 @@ +- name: Only refundable credits + period: 2022 + input: + ga_taxable_income: 3_000 + ga_nonrefundable_credits: 0 + ga_refundable_credits: 100 + filing_status: SINGLE + state_code: GA + output: + ga_income_tax: -40 + +- name: Both nonrefundable and refundable credits + period: 2022 + input: + ga_taxable_income: 3_000 + ga_nonrefundable_credits: 100 + ga_refundable_credits: 100 + filing_status: SINGLE + state_code: GA + output: + ga_income_tax: -100 diff --git a/fiscalsim_us/tests/policy/baseline/gov/states/ga/tax/income/ga_income_tax_before_refundable_credits.yaml b/fiscalsim_us/tests/policy/baseline/gov/states/ga/tax/income/ga_income_tax_before_credits.yaml similarity index 76% rename from fiscalsim_us/tests/policy/baseline/gov/states/ga/tax/income/ga_income_tax_before_refundable_credits.yaml rename to fiscalsim_us/tests/policy/baseline/gov/states/ga/tax/income/ga_income_tax_before_credits.yaml index ae6fbb38d..b980bbf07 100644 --- a/fiscalsim_us/tests/policy/baseline/gov/states/ga/tax/income/ga_income_tax_before_refundable_credits.yaml +++ b/fiscalsim_us/tests/policy/baseline/gov/states/ga/tax/income/ga_income_tax_before_credits.yaml @@ -5,7 +5,7 @@ filing_status: SINGLE state_code: GA output: - ga_income_tax_before_refundable_credits: 60 + ga_income_tax_before_credits: 60 - name: Single filer w/o income period: 2022 @@ -14,7 +14,7 @@ filing_status: SINGLE state_code: GA output: - ga_income_tax_before_refundable_credits: 0 + ga_income_tax_before_credits: 0 - name: Joint filer period: 2022 @@ -23,7 +23,7 @@ filing_status: JOINT state_code: GA output: - ga_income_tax_before_refundable_credits: 12 + ga_income_tax_before_credits: 12 - name: Separate filer period: 2022 @@ -32,7 +32,7 @@ filing_status: SEPARATE state_code: GA output: - ga_income_tax_before_refundable_credits: 7 + ga_income_tax_before_credits: 7 - name: Head of household filer period: 2022 @@ -41,4 +41,4 @@ filing_status: HEAD_OF_HOUSEHOLD state_code: GA output: - ga_income_tax_before_refundable_credits: 12 + ga_income_tax_before_credits: 12 From 480116bb1d68fc90b79893fef356470e2b84cac5 Mon Sep 17 00:00:00 2001 From: mitchellpound Date: Fri, 1 Dec 2023 12:50:14 -0700 Subject: [PATCH 8/9] Used Black for formatting --- .../ga/tax/income/additions/ga_nol_carryover_addition.py | 4 +--- .../gov/states/ga/tax/income/additions/ga_other_additions.py | 4 +--- .../states/ga/tax/income/credits/ga_nonrefundable_credtis.py | 1 + .../ga/tax/income/credits/ga_other_nonrefundable_credits.py | 1 + .../tax/income/credits/ga_series100_nonrefundable_credits.py | 3 ++- .../ga/tax/income/credits/ga_series100_refundable_credits.py | 2 +- .../gov/states/ga/tax/income/deductions/ga_deductions.py | 4 +--- .../ga/tax/income/deductions/ga_itemized_adjustments.py | 2 +- .../gov/states/ga/tax/income/ga_income_tax_before_credits.py | 3 +-- 9 files changed, 10 insertions(+), 14 deletions(-) diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_nol_carryover_addition.py b/fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_nol_carryover_addition.py index 7f8c81c3a..54aee9c41 100644 --- a/fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_nol_carryover_addition.py +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_nol_carryover_addition.py @@ -7,7 +7,5 @@ class ga_nol_carryover_addition(Variable): label = "Georgia addition to incone for net operating loss carryover deducted on federal return" unit = USD definition_period = YEAR - reference = ( - "https://houpl.org/wp-content/uploads/2023/01/2022-IT-511_Individual_Income_Tax_-Booklet-compressed.pdf#page=34" - ) + reference = "https://houpl.org/wp-content/uploads/2023/01/2022-IT-511_Individual_Income_Tax_-Booklet-compressed.pdf#page=34" defined_for = StateCode.GA diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_other_additions.py b/fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_other_additions.py index c56c5eec4..fc790a7cc 100644 --- a/fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_other_additions.py +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/additions/ga_other_additions.py @@ -7,9 +7,7 @@ class ga_other_additions(Variable): label = "Georgia other additions to incone" unit = USD definition_period = YEAR - reference = ( - "https://houpl.org/wp-content/uploads/2023/01/2022-IT-511_Individual_Income_Tax_-Booklet-compressed.pdf#page=34" - ) + reference = "https://houpl.org/wp-content/uploads/2023/01/2022-IT-511_Individual_Income_Tax_-Booklet-compressed.pdf#page=34" defined_for = StateCode.GA # For line 5 of Georgia tax form 500 Schedule 1 diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_nonrefundable_credtis.py b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_nonrefundable_credtis.py index 3d551c000..40d4c8cdd 100644 --- a/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_nonrefundable_credtis.py +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_nonrefundable_credtis.py @@ -20,6 +20,7 @@ class ga_nonrefundable_credits(Variable): Years Beginning on or After January 1, 2021 - Teacher Recruitment and Retention Credit """ + value_type = float entity = TaxUnit label = "Georgia nonrefundable credits" diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_other_nonrefundable_credits.py b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_other_nonrefundable_credits.py index e69de29bb..8b1378917 100644 --- a/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_other_nonrefundable_credits.py +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_other_nonrefundable_credits.py @@ -0,0 +1 @@ + diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_series100_nonrefundable_credits.py b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_series100_nonrefundable_credits.py index 2f94fc8ff..cadf5eeb9 100644 --- a/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_series100_nonrefundable_credits.py +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_series100_nonrefundable_credits.py @@ -57,10 +57,11 @@ class ga_series100_nonrefundable_credits(Variable): 148 - Life Sciences Manufacturing Job Tax Credit 149 - Historic Rehabilitation Tax Credit for Historic Homes and other Certified Structure """ + value_type = float entity = TaxUnit label = "Georgia series 100 nonrefundable credits" - reference = ("https://dor.georgia.gov/it-511-individual-income-tax-booklet") + reference = "https://dor.georgia.gov/it-511-individual-income-tax-booklet" unit = USD definition_period = YEAR defined_for = StateCode.GA diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_series100_refundable_credits.py b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_series100_refundable_credits.py index 8aeeb3de2..7fcb59c0a 100644 --- a/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_series100_refundable_credits.py +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/credits/ga_series100_refundable_credits.py @@ -10,10 +10,10 @@ class ga_series100_refundable_credits(Variable): Currently (in 2022) the only refundable series 100 tax credit is the Timber Tax Credit (145). """ + value_type = float entity = TaxUnit label = "Georgia series 100 refundable credits" unit = USD definition_period = YEAR defined_for = StateCode.GA - diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_deductions.py b/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_deductions.py index d22de6cbe..2d361d93b 100644 --- a/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_deductions.py +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_deductions.py @@ -6,9 +6,7 @@ class ga_deductions(Variable): entity = TaxUnit label = "Georgia deductions" unit = USD - reference = ( - "https://dor.georgia.gov/it-511-individual-income-tax-booklet" - ) + reference = "https://dor.georgia.gov/it-511-individual-income-tax-booklet" definition_period = YEAR defined_for = StateCode.GA diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_itemized_adjustments.py b/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_itemized_adjustments.py index c6d2cb887..2d34cc021 100644 --- a/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_itemized_adjustments.py +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/deductions/ga_itemized_adjustments.py @@ -8,7 +8,7 @@ class ga_itemized_adjustments(Variable): unit = USD reference = ( "https://apps.dor.ga.gov/FillableForms/PDFViewer/Index?form=2022GA500" - ) + ) definition_period = YEAR defined_for = StateCode.GA diff --git a/fiscalsim_us/variables/gov/states/ga/tax/income/ga_income_tax_before_credits.py b/fiscalsim_us/variables/gov/states/ga/tax/income/ga_income_tax_before_credits.py index 6dcbe3a67..4f85127d2 100644 --- a/fiscalsim_us/variables/gov/states/ga/tax/income/ga_income_tax_before_credits.py +++ b/fiscalsim_us/variables/gov/states/ga/tax/income/ga_income_tax_before_credits.py @@ -7,8 +7,7 @@ class ga_income_tax_before_credits(Variable): label = "Georgia income tax before credits" unit = USD definition_period = YEAR - reference = ( - ) + reference = () defined_for = StateCode.GA def formula(tax_unit, period, parameters): From f1455133206cda929b9f496b0b6bdf4f7194a32f Mon Sep 17 00:00:00 2001 From: mitchellpound Date: Sat, 2 Dec 2023 16:00:29 -0700 Subject: [PATCH 9/9] Updates version in setup.py and changelogs --- CHANGELOG.md | 7 +++++++ changelog.yaml | 4 ++++ setup.py | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d2a59461..aa8fc8f44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.2.7] - 2023-11-14 17:00:00 + +### Added + +- Updates Georgia tax logic for credits and additions/ subtractions + ## [0.2.6] - 2023-11-14 17:00:00 ### Added @@ -191,6 +197,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - First prototype version based off of openfisca-us and tax-calculator. +[0.2.7]: https://github.com/TheCGO/fiscalsim-us/compare/v0.2.6...v0.2.7 [0.2.6]: https://github.com/TheCGO/fiscalsim-us/compare/v0.2.5...v0.2.6 [0.2.5]: https://github.com/TheCGO/fiscalsim-us/compare/v0.2.4...v0.2.5 [0.2.4]: https://github.com/TheCGO/fiscalsim-us/compare/v0.2.3...v0.2.4 diff --git a/changelog.yaml b/changelog.yaml index baf663707..b8ecd4a6b 100644 --- a/changelog.yaml +++ b/changelog.yaml @@ -174,3 +174,7 @@ added: - Updates Montana tax logic date: 2023-11-14 17:00:00 +- bump: patch + changes: + added: + - Updates Georgia tax logic for credits and additions/ subtractions diff --git a/setup.py b/setup.py index 622ee9994..14c71fc49 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setup( name="fiscalsim-us", - version="0.2.6", + version="0.2.7", author="Center for Growth and Opportunity at Utah State University (CGO)", author_email="fiscalsim@thecgo.org", long_description=readme,