From 0ff6aadef4865f00b1f69ce61d901603766e9a87 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Tue, 6 Oct 2026 16:11:36 -0400 Subject: [PATCH 1/3] Kentucky filing status follows the filer's own marital status ky_filing_status marked a tax unit SEPARATE when any member had is_separated set, so an unmarried parent with a separated 18-year-old dependent lost the Kentucky tuition tax credit (Form 8863-K bars only Filing Status 4). KRS 141.066(1)(c)-(d) reads marital status under IRC 7703, which concerns the filer's own marriage, and the Form 740 instructions put federal head of household and qualifying surviving spouse filers in Filing Status 1 (Single). Map Kentucky status from the federal filing status, as az_filing_status and ma_filing_status already do: JOINT -> Joint, SEPARATE -> Separate, everything else -> Single. The federal formula already limits separation to the head or spouse. Co-Authored-By: Claude Opus 5.5 --- ...rate-ignores-dependent-separation.fixed.md | 1 + .../ky/tax/income/ky_filing_status.yaml | 107 +++++++++++++++++- .../states/ky/tax/income/ky_filing_status.py | 16 ++- 3 files changed, 116 insertions(+), 8 deletions(-) create mode 100644 changelog.d/ky-separate-ignores-dependent-separation.fixed.md diff --git a/changelog.d/ky-separate-ignores-dependent-separation.fixed.md b/changelog.d/ky-separate-ignores-dependent-separation.fixed.md new file mode 100644 index 00000000000..e3af180a79d --- /dev/null +++ b/changelog.d/ky-separate-ignores-dependent-separation.fixed.md @@ -0,0 +1 @@ +Kentucky filing status now follows the filer's own federal filing status, so a separated dependent no longer makes an unmarried filer file separately, and a separated filer who files federal head of household uses Kentucky Filing Status 1 (Single). diff --git a/policyengine_us/tests/policy/baseline/gov/states/ky/tax/income/ky_filing_status.yaml b/policyengine_us/tests/policy/baseline/gov/states/ky/tax/income/ky_filing_status.yaml index ac803570de6..2f653353716 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ky/tax/income/ky_filing_status.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ky/tax/income/ky_filing_status.yaml @@ -7,7 +7,7 @@ output: ky_filing_status: SINGLE -- name: Joint +- name: Joint period: 2023 input: is_tax_unit_spouse: true @@ -16,7 +16,7 @@ output: ky_filing_status: JOINT -- name: Joint +- name: Separated filer with no spouse in the tax unit period: 2023 input: is_tax_unit_spouse: false @@ -24,3 +24,106 @@ state_code: KY output: ky_filing_status: SEPARATE + +- name: A separated dependent does not make a single parent file separately. + period: 2025 + input: + people: + parent: + age: 45 + dependent: + age: 18 + is_tax_unit_dependent: true + is_separated: true + tax_units: + tax_unit: + members: [parent, dependent] + american_opportunity_credit: 2_000 + lifetime_learning_credit: 0 + households: + household: + members: [parent, dependent] + state_code: KY + output: + # KRS 141.066(1)(d) uses the IRC 7703 marital status of the filer. The + # parent is unmarried, so Form 740 Filing Status 1 (Single) applies. + ky_filing_status: SINGLE + ky_tuition_tax_credit_eligible: true + # 25% of the 2,000 federal education credit. + ky_tuition_tax_credit_potential: 500 + +- name: A separated parent who files federal head of household uses Kentucky Filing Status 1. + period: 2025 + input: + people: + parent: + age: 38 + is_tax_unit_head: true + is_separated: true + child: + age: 6 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + households: + household: + members: [parent, child] + state_code: KY + output: + # IRC 7703(b) treats the parent as unmarried, so the parent files as head of household. + filing_status: HEAD_OF_HOUSEHOLD + # Form 740 instructions: Filing Status 1 (Single) covers federal head of household filers. + ky_filing_status: SINGLE + ky_tuition_tax_credit_eligible: true + +- name: A separated filer with only a qualifying relative files separately. + period: 2025 + input: + people: + head: + age: 40 + is_tax_unit_head: true + is_separated: true + grandparent: + age: 78 + is_tax_unit_dependent: true + is_related_to_head_or_spouse: true + tax_units: + tax_unit: + members: [head, grandparent] + households: + household: + members: [head, grandparent] + state_code: KY + output: + # IRC 7703(b) needs a child, so the head stays married and files separately. + filing_status: SEPARATE + ky_filing_status: SEPARATE + ky_tuition_tax_credit_eligible: false + +- name: A separated dependent does not stop a married couple filing jointly. + period: 2025 + input: + people: + head: + age: 40 + is_tax_unit_head: true + spouse: + age: 38 + is_tax_unit_spouse: true + dependent: + age: 18 + is_tax_unit_dependent: true + is_separated: true + tax_units: + tax_unit: + members: [head, spouse, dependent] + households: + household: + members: [head, spouse, dependent] + state_code: KY + output: + # Roles are inputs, so this case tests Kentucky filing status alone. + ky_filing_status: JOINT + ky_tuition_tax_credit_eligible: true diff --git a/policyengine_us/variables/gov/states/ky/tax/income/ky_filing_status.py b/policyengine_us/variables/gov/states/ky/tax/income/ky_filing_status.py index e33c2cab340..db88b3e4ac9 100644 --- a/policyengine_us/variables/gov/states/ky/tax/income/ky_filing_status.py +++ b/policyengine_us/variables/gov/states/ky/tax/income/ky_filing_status.py @@ -14,20 +14,24 @@ class ky_filing_status(Variable): default_value = KyFilingStatus.SINGLE definition_period = YEAR reference = ( - "https://codes.findlaw.com/ky/title-xi-revenue-and-taxation/ky-rev-st-sect-141-066.html", # Section (1), (c) & (d) + "https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=49188", # KRS 141.066(1)(c) & (d) "https://revenue.ky.gov/Forms/740%20Packet%20Instructions%205-9-23.pdf#page=11", + "https://revenue.ky.gov/Forms/740%20instructions%20packet%20(2024).pdf#page=13", ) label = "Filing status for the tax unit in Kentucky" defined_for = StateCode.KY def formula(tax_unit, period, parameters): - has_spouse = add(tax_unit, period, ["is_tax_unit_spouse"]) > 0 - person = tax_unit.members - is_separated = tax_unit.any(person("is_separated", period)) + # Kentucky follows the filer's own federal marital status (IRC 7703), + # so a separated dependent does not make the filer file separately. + # Federal head of household and surviving spouse filers use + # Kentucky Filing Status 1 (Single). + filing_status = tax_unit("filing_status", period) + statuses = filing_status.possible_values return select( [ - has_spouse, - is_separated, + filing_status == statuses.JOINT, + filing_status == statuses.SEPARATE, ], [ KyFilingStatus.JOINT, From 7c522adcaaac3c83f4bf0edc4469717bd40e7bbd Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Tue, 6 Oct 2026 16:23:31 -0400 Subject: [PATCH 2/3] Cite KRS 141.069(4) for the Kentucky tuition credit filing-status bar The credit is limited only when the taxpayer is a married individual under IRC 7703 and files a separate return, which is the rule the filing status fix restores. Co-Authored-By: Claude Opus 5.5 --- .../baseline/gov/states/ky/tax/income/ky_filing_status.yaml | 1 + .../credits/tuition_tax/ky_tuition_tax_credit_eligible.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/policyengine_us/tests/policy/baseline/gov/states/ky/tax/income/ky_filing_status.yaml b/policyengine_us/tests/policy/baseline/gov/states/ky/tax/income/ky_filing_status.yaml index 2f653353716..6b7ab4cb6b1 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ky/tax/income/ky_filing_status.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ky/tax/income/ky_filing_status.yaml @@ -48,6 +48,7 @@ # KRS 141.066(1)(d) uses the IRC 7703 marital status of the filer. The # parent is unmarried, so Form 740 Filing Status 1 (Single) applies. ky_filing_status: SINGLE + # KRS 141.069(4) limits the tuition credit only for a married taxpayer. ky_tuition_tax_credit_eligible: true # 25% of the 2,000 federal education credit. ky_tuition_tax_credit_potential: 500 diff --git a/policyengine_us/variables/gov/states/ky/tax/income/credits/tuition_tax/ky_tuition_tax_credit_eligible.py b/policyengine_us/variables/gov/states/ky/tax/income/credits/tuition_tax/ky_tuition_tax_credit_eligible.py index 251a38bc276..2003611291d 100644 --- a/policyengine_us/variables/gov/states/ky/tax/income/credits/tuition_tax/ky_tuition_tax_credit_eligible.py +++ b/policyengine_us/variables/gov/states/ky/tax/income/credits/tuition_tax/ky_tuition_tax_credit_eligible.py @@ -7,9 +7,11 @@ class ky_tuition_tax_credit_eligible(Variable): label = "Eligible for the Kentucky tuition tax credit" # Form 8863-K unit = USD definition_period = YEAR + reference = "https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=29060" # KRS 141.069(4) defined_for = StateCode.KY def formula(tax_unit, period, parameters): filing_status = tax_unit("ky_filing_status", period) - # Married filing separate filers are ineligible. + # A taxpayer who is married under IRC 7703 is ineligible when filing a + # separate return (Filing Status 4). return filing_status != filing_status.possible_values.SEPARATE From 591b05c00ef280782ff7d25372a26b1c4305c7fe Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 11 Oct 2026 12:30:18 -0400 Subject: [PATCH 3/3] Keep the Kentucky combined return for federal separate filers Kentucky lets spouses who filed separate federal returns file separately on a combined Kentucky return (Form 740 instructions, Filing Status 2), and KRS 141.069(4) allows the tuition credit on that return. With both spouses in one tax unit, a supplied federal SEPARATE status now gives Kentucky Joint again, as on main, instead of Filing Status 4. Separate returns still map to Separate when the spouse is not in the tax unit. Adds supplied-status cases: federal SEPARATE with and without a spouse in the unit, and supplied head of household and surviving spouse. Co-Authored-By: Claude Opus 5.5 --- .../ky/tax/income/ky_filing_status.yaml | 84 +++++++++++++++++++ .../states/ky/tax/income/ky_filing_status.py | 9 +- 2 files changed, 92 insertions(+), 1 deletion(-) diff --git a/policyengine_us/tests/policy/baseline/gov/states/ky/tax/income/ky_filing_status.yaml b/policyengine_us/tests/policy/baseline/gov/states/ky/tax/income/ky_filing_status.yaml index 6b7ab4cb6b1..12cb1b640eb 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ky/tax/income/ky_filing_status.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ky/tax/income/ky_filing_status.yaml @@ -128,3 +128,87 @@ # Roles are inputs, so this case tests Kentucky filing status alone. ky_filing_status: JOINT ky_tuition_tax_credit_eligible: true + +- name: Spouses who file separate federal returns may file a combined Kentucky return. + period: 2025 + input: + people: + head: + age: 40 + is_tax_unit_head: true + spouse: + age: 38 + is_tax_unit_spouse: true + tax_units: + tax_unit: + members: [head, spouse] + filing_status: SEPARATE + households: + household: + members: [head, spouse] + state_code: KY + output: + # Form 740 instructions: spouses may file separately on a combined return + # whether they filed jointly or separately for federal purposes. Both + # spouses in one tax unit is that combined return, not Filing Status 4. + ky_filing_status: JOINT + # KRS 141.069(4) allows the credit on a combined return. + ky_tuition_tax_credit_eligible: true + +- name: A married filer who files a separate federal return alone files Kentucky separate returns. + period: 2025 + input: + people: + head: + age: 40 + tax_units: + tax_unit: + members: [head] + filing_status: SEPARATE + households: + household: + members: [head] + state_code: KY + output: + # The spouse is not in the tax unit, so this is Filing Status 4. + ky_filing_status: SEPARATE + # KRS 141.069(4) bars the credit on separate returns. + ky_tuition_tax_credit_eligible: false + +- name: A supplied federal head of household status uses Kentucky Filing Status 1. + period: 2025 + input: + people: + head: + age: 40 + is_separated: true + tax_units: + tax_unit: + members: [head] + filing_status: HEAD_OF_HOUSEHOLD + households: + household: + members: [head] + state_code: KY + output: + ky_filing_status: SINGLE + ky_tuition_tax_credit_eligible: true + +- name: A supplied federal surviving spouse status uses Kentucky Filing Status 1. + period: 2025 + input: + people: + head: + age: 40 + tax_units: + tax_unit: + members: [head] + filing_status: SURVIVING_SPOUSE + households: + household: + members: [head] + state_code: KY + output: + # Form 740 instructions: federal "Qualifying Widow(er)" filers use Single. + ky_filing_status: SINGLE + ky_tuition_tax_credit_eligible: true diff --git a/policyengine_us/variables/gov/states/ky/tax/income/ky_filing_status.py b/policyengine_us/variables/gov/states/ky/tax/income/ky_filing_status.py index db88b3e4ac9..fee5a993cd0 100644 --- a/policyengine_us/variables/gov/states/ky/tax/income/ky_filing_status.py +++ b/policyengine_us/variables/gov/states/ky/tax/income/ky_filing_status.py @@ -28,9 +28,16 @@ def formula(tax_unit, period, parameters): # Kentucky Filing Status 1 (Single). filing_status = tax_unit("filing_status", period) statuses = filing_status.possible_values + # Spouses on one return file jointly or separately on a combined + # return, which Kentucky allows after federal separate returns, so a + # spouse in the tax unit means a joint or combined return. Separate + # returns (Filing Status 4) leave the spouse out of the tax unit. + joint_or_combined = (filing_status == statuses.JOINT) | tax_unit( + "tax_unit_married", period + ) return select( [ - filing_status == statuses.JOINT, + joint_or_combined, filing_status == statuses.SEPARATE, ], [