Skip to content

Commit

Permalink
Add Ohio Joint Filing Credit (#3086)
Browse files Browse the repository at this point in the history
* Ohio Joint Filing Credit
Fixes #3057

* Fix 3057

* Fix 3057

* Ohio Joint Filing Credit
Fixes #3057

* Ohio Joint Filing Credit
Fixes #3057

* Ohio Joint Filing Credit
Fixes #3057

* Ohio Joint Filing Credit
Fixes #3057

* Ohio Joint Filing Credit
Fixes #3057

* Fix Ohio Joint Filing Credit

* Ohio Joint Filing Credit
Fixes #3057

* Ohio Joint Filing Credit
Fixes #3057

* formatting

* typo

* minor fix

* fix variables and tests

* delete extra Ohio file

* suggested format

* typo

---------

Co-authored-by: PavelMakarchuk <[email protected]>
  • Loading branch information
mylittlebecca and PavelMakarchuk authored Dec 24, 2023
1 parent 840e7c3 commit 448b179
Show file tree
Hide file tree
Showing 20 changed files with 349 additions and 8 deletions.
4 changes: 4 additions & 0 deletions changelog_entry.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
- bump: minor
changes:
added:
- Ohio joint filing credit.
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
description: Ohio subtracts these items from the Ohio adjusted gross income, under the joint filing credit.

metadata:
unit: list
reference:
- title: 2021 Ohio IT 1040 Individual Income Tax Return Form Instructions Line 12
href: https://tax.ohio.gov/static/forms/ohio_individual/individual/2021/pit-it1040-booklet.pdf#page=20
- title: 2022 Ohio IT 1040 Individual Income Tax Return Form Instructions Line 12
href: https://tax.ohio.gov/static/forms/ohio_individual/individual/2022/it1040-sd100-instruction-booklet.pdf#page=20
- title: Ohio Revised Code - Section 5747.05 Tax credits. (E) (1)
href: https://law.justia.com/codes/ohio/2022/title-57/chapter-5747/section-5747-05/
period: year
label: Ohio joint filing credit adjusted gross income subtractions

values:
2021-01-01:
- interest_income
- dividend_income
- capital_gains
- rental_income
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
description: Ohio caps the joint filing credit at this amount.
values:
2021-01-01: 650

metadata:
period: year
unit: currency-USD
label: Ohio joint filing credit cap
reference:
- title: 2021 Ohio IT 1040 Individual Income Tax Return Form Instructions Line 12
href: https://tax.ohio.gov/static/forms/ohio_individual/individual/2021/pit-it1040-booklet.pdf#page=20
- title: 2022 Ohio IT 1040 Individual Income Tax Return Form Instructions Line 12
href: https://tax.ohio.gov/static/forms/ohio_individual/individual/2022/it1040-sd100-instruction-booklet.pdf#page=20
- title: Ohio Revised Code - Section 5747.05 Tax credits. (E) (1)
href: https://codes.ohio.gov/ohio-revised-code/section-5747.05
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
description: Ohio limits the joint filing credit to filers with head and spouse each having at least this adjusted gross income.
values:
2021-01-01: 500

metadata:
period: year
unit: currency-USD
label: Ohio joint filing credit income threshold
reference:
- title: 2021 Ohio IT 1040 Individual Income Tax Return Form Instructions Line 12
href: https://tax.ohio.gov/static/forms/ohio_individual/individual/2021/pit-it1040-booklet.pdf#page=20
- title: 2022 Ohio IT 1040 Individual Income Tax Return Form Instructions Line 12
href: https://tax.ohio.gov/static/forms/ohio_individual/individual/2022/it1040-sd100-instruction-booklet.pdf#page=20
- title: Ohio Revised Code - Section 5747.05 Tax credits. (E) (1)
href: https://codes.ohio.gov/ohio-revised-code/section-5747.05
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
description: Ohio provides a joint filing credit equal to a fraction of tax liability less these non-refundable tax credits.
values:
2021-01-01:
- oh_cdcc # Line 6
- oh_senior_citizen_credit # Line 3
- oh_retirement_credit # Line 2
- oh_exemption_credits # Line 9
2023-01-01:
- oh_cdcc # Line 6
- oh_senior_citizen_credit # Line 3
- oh_retirement_credit # Line 2
- oh_exemption_credits # Line 9
metadata:
unit: list
period: year
label: Ohio non-refundable tax credits prior to the joint filing credit
reference:
- title: 2021 Ohio Schedule of Credits
href: https://tax.ohio.gov/static/forms/ohio_individual/individual/2021/sch-cre.pdf
- title: 2022 Ohio Schedule of Credits
href: https://tax.ohio.gov/static/forms/ohio_individual/individual/2022/itschedule-credits.pdf
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
description: Ohio provides a joint filing credit equal to this fraction of tax liability less certain non-refundable tax credits, based on the state adjusted gross income less exemptions.
metadata:
threshold_unit: currency-USD
amount_unit: /1
type: single_amount
period: year
label: Ohio joint filing credit income rate
reference:
- title: 2021 Ohio IT 1040 Individual Income Tax Return Form Instructions Line 12
href: https://tax.ohio.gov/static/forms/ohio_individual/individual/2021/pit-it1040-booklet.pdf#page=20
- title: 2022 Ohio IT 1040 Individual Income Tax Return Form Instructions Line 12
href: https://tax.ohio.gov/static/forms/ohio_individual/individual/2022/it1040-sd100-instruction-booklet.pdf#page=20
- title: Ohio Revised Code - Section 5747.05 Tax credits. (E)
href: https://codes.ohio.gov/ohio-revised-code/section-5747.05

brackets:
- threshold:
2021-01-01: 0
amount:
2021-01-01: 0.2
- threshold:
2021-01-01: 25_000
amount:
2021-01-01: 0.15
- threshold:
2021-01-01: 50_000
amount:
2021-01-01: 0.1
- threshold:
2021-01-01: 75_000
amount:
2021-01-01: 0.05
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@ values:
- oh_retirement_credit
- oh_non_public_school_credits
- oh_exemption_credits
- oh_joint_filing_credit
2023-01-01:
- oh_eitc
- oh_cdcc
- oh_senior_citizen_credit
- oh_retirement_credit
- oh_non_public_school_credits
- oh_exemption_credits
- oh_joint_filing_credit
metadata:
unit: list
label: Ohio non-refundable tax credits
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
- name: Eligible for joint filing credit
absolute_error_margin: 0.01
period: 2021
input:
oh_joint_filing_credit_eligible: true
oh_agi: 67_000
oh_personal_exemptions: 10_000
oh_tax_before_joint_filing_credit: 4_000
output:
oh_joint_filing_credit: 400

- name: Eligible for maximum joint filing credit
absolute_error_margin: 0.01
period: 2022
input:
state_code: OH
oh_joint_filing_credit_eligible: true
oh_agi: 47_000
oh_personal_exemptions: 10_000
oh_tax_before_joint_filing_credit: 6_000
output:
oh_joint_filing_credit: 650

- name: Not eligible for joint filing credit
absolute_error_margin: 0.01
period: 2021
input:
oh_joint_filing_credit_eligible: false
oh_agi: 47_000
oh_personal_exemptions: 10_000
oh_tax_before_joint_filing_credit: 4_000
output:
oh_joint_filing_credit: 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
- name: Income not eligible for joint filing credit
absolute_error_margin: 0.01
period: 2021
input:
people:
person1:
is_tax_unit_head: true
oh_alternative_agi: 400
person2:
is_tax_unit_spouse: true
oh_alternative_agi: 700
tax_units:
tax_unit:
members: [person1, person2]
filing_status: JOINT
households:
household:
state_code: OH
output:
oh_joint_filing_credit_eligible: false

- name: Status not eligible for joint filing credit
absolute_error_margin: 0.01
period: 2021
input:
people:
person1:
is_tax_unit_head: true
oh_alternative_agi: 600
person2:
is_tax_unit_spouse: true
oh_alternative_agi: 700
tax_units:
tax_unit:
members: [person1, person2]
filing_status: HEAD_OF_HOUSEHOLD
households:
household:
state_code: OH
output:
oh_joint_filing_credit_eligible: false

- name: Eligible for joint filing credit
absolute_error_margin: 0.01
period: 2021
input:
people:
person1:
is_tax_unit_head: true
oh_alternative_agi: 600
person2:
is_tax_unit_spouse: true
oh_alternative_agi: 700
tax_units:
tax_unit:
members: [person1, person2]
filing_status: JOINT
households:
household:
state_code: OH
output:
oh_joint_filing_credit_eligible: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
- name: Capped at 0
period: 2022
input:
oh_income_tax_before_non_refundable_credits: 20
oh_partial_non_refundable_credits: 30
state_code: OH
output:
oh_tax_before_joint_filing_credit: 0

- name: Reduction
period: 2022
input:
oh_income_tax_before_non_refundable_credits: 100
oh_partial_non_refundable_credits: 20
state_code: OH
output:
oh_tax_before_joint_filing_credit: 80
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
output:
# base amount = $346.16
# + 2.765% of (31_000 - 25_000) = 165.90
oh_income_tax_before_credits: 512.06
oh_income_tax_before_non_refundable_credits: 512.06

- name: Single filing, income in 3rd tax bracket
period: 2021
Expand All @@ -19,4 +19,4 @@
# base amount = 346.16
# + 2.765 of (44_250 - 25_000) = 532.26
# + 3.226% of (64_500 - 44_250) = 653.27
oh_income_tax_before_credits: 1_531.69
oh_income_tax_before_non_refundable_credits: 1_531.69
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
period: 2021
input:
state_code: OH
oh_income_tax_before_credits: 800
oh_income_tax_before_non_refundable_credits: 800
oh_non_refundable_credits: 900
output:
oh_income_tax_before_refundable_credits: 0
Expand All @@ -11,7 +11,7 @@
period: 2021
input:
state_code: OH
oh_income_tax_before_credits: 800
oh_income_tax_before_non_refundable_credits: 800
oh_non_refundable_credits: 600
output:
oh_income_tax_before_refundable_credits: 200
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from policyengine_us.model_api import *


class oh_alternative_agi(Variable):
value_type = float
entity = Person
label = (
"Ohio alternative adjusted gross income for the joint filing credit"
)
unit = USD
definition_period = YEAR
reference = (
"https://codes.ohio.gov/ohio-revised-code/section-5747.055",
"https://tax.ohio.gov/static/forms/ohio_individual/individual/2021/pit-it1040-booklet.pdf#page=20",
)
defined_for = StateCode.OH

adds = ["oh_agi"]

subtracts = (
"gov.states.oh.tax.income.credits.joint_filing.agi_subtractions"
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from policyengine_us.model_api import *


class oh_joint_filing_credit(Variable):
value_type = float
entity = TaxUnit
label = "Ohio joint filing credit"
unit = USD
definition_period = YEAR
reference = "https://codes.ohio.gov/ohio-revised-code/section-5747.05"
defined_for = "oh_joint_filing_credit_eligible"

def formula(tax_unit, period, parameters):
tax_before_joint_filing_credit = tax_unit(
"oh_tax_before_joint_filing_credit", period
)
p = parameters(period).gov.states.oh.tax.income.credits.joint_filing
# Ohio uses MAGI for the credit computation, which is Ohio AGI with
# the addition of the business income deduction, which is currently not included in the model,
# hence, we use the Ohio AGI for the credit computation
oh_agi = tax_unit("oh_agi", period)
exemptions = tax_unit("oh_personal_exemptions", period)
agi_less_exepmtions = max_(oh_agi - exemptions, 0)
percentage = p.rate.calc(agi_less_exepmtions)
return min_(tax_before_joint_filing_credit * percentage, p.cap)
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from policyengine_us.model_api import *


class oh_joint_filing_credit_eligible(Variable):
value_type = bool
entity = TaxUnit
label = "Eligible for the Ohio joint filing credit"
definition_period = YEAR
reference = "https://codes.ohio.gov/ohio-revised-code/section-5747.05"
defined_for = StateCode.OH

def formula(tax_unit, period, parameters):
filing_status = tax_unit("filing_status", period)
person = tax_unit.members
is_head = person("is_tax_unit_head", period)
is_spouse = person("is_tax_unit_spouse", period)
p = parameters(period).gov.states.oh.tax.income.credits.joint_filing
income = person("oh_alternative_agi", period)
# The head and the spouse have to meet the income requirement individually
income_eligible = income >= p.income_threshold
head_eligible = tax_unit.any(is_head & income_eligible)

spouse_eligible = tax_unit.any(is_spouse & income_eligible)
# The head and the spouse have to meet the income requirement individually
head_and_spouse_eligible = head_eligible & spouse_eligible

status_eligible = filing_status == filing_status.possible_values.JOINT
return head_and_spouse_eligible & status_eligible
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from policyengine_us.model_api import *


class oh_partial_non_refundable_credits(Variable):
value_type = float
entity = TaxUnit
label = "Ohio non-refundable credits prior to the joint filing credit"
reference = (
# 2021 Ohio Schedule of Credits
"https://tax.ohio.gov/static/forms/ohio_individual/individual/2021/sch-cre.pdf",
# 2022 Ohio Schedule of Credits
"https://tax.ohio.gov/static/forms/ohio_individual/individual/2022/itschedule-credits.pdf",
)
unit = USD
definition_period = YEAR
defined_for = StateCode.OH

adds = (
"gov.states.oh.tax.income.credits.joint_filing.non_refundable_credits"
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from policyengine_us.model_api import *


class oh_tax_before_joint_filing_credit(Variable):
value_type = float
entity = TaxUnit
label = "Ohio tax liability before the joint filing credit"
reference = (
# 2021 Ohio Schedule of Credits
"https://tax.ohio.gov/static/forms/ohio_individual/individual/2021/sch-cre.pdf",
# 2022 Ohio Schedule of Credits
"https://tax.ohio.gov/static/forms/ohio_individual/individual/2022/itschedule-credits.pdf",
)
unit = USD
definition_period = YEAR
defined_for = StateCode.OH

def formula(tax_unit, period, parameters):
tax_before_credits = tax_unit(
"oh_income_tax_before_non_refundable_credits", period
)
total_credits = tax_unit("oh_partial_non_refundable_credits", period)
return max_(0, tax_before_credits - total_credits)
Loading

0 comments on commit 448b179

Please sign in to comment.