Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/fix-10268-ca-amt-phase-out-rate.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Phase out the California AMT exemption at 25% under R&TC 17062.1 instead of the federal 2026 rate of 50%.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
description: California reduces the alternative minimum tax exemption by this share of alternative minimum taxable income above the phase-out threshold.
values:
2021-01-01: 0.25

metadata:
period: year
unit: /1
label: California AMT exemption phase-out rate
reference:
# California applies IRC 55 as it read on January 1, 2015, so the 50% rate
# that P.L. 119-21 added in IRC 55(d)(4)(A)(ii)(IV) from 2026 does not apply.
- title: Cal. Rev. & Tax. Code § 17062.1 (IRC alternative minimum tax as it read on January 1, 2015)
href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=RTC&sectionNum=17062.1
- title: Cal. Rev. & Tax. Code § 17062(b)(6) (replaces only the IRC 55(d)(3) phase-out thresholds)
href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=RTC&sectionNum=17062
- title: 26 U.S.C. § 55(d)(3) (2014 edition) - 25 percent of alternative minimum taxable income above the threshold
href: https://www.govinfo.gov/content/pkg/USCODE-2014-title26/html/USCODE-2014-title26-subtitleA-chap1-subchapA-partVI-sec55.htm
- title: 2021 Instructions for Schedule P (540), Line 21 worksheet line 4 and Line 22 Exemption Worksheet line 5
href: https://www.ftb.ca.gov/forms/2021/2021-540-p-instructions.html
- title: 2025 Instructions for Schedule P (540), Line 21 worksheet line 4 and Line 22 Exemption Worksheet line 5
href: https://www.ftb.ca.gov/forms/2025/2025-540-p-instructions.html
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,71 @@
state_code: CA
output:
ca_amt_exemption: 0

- name: Single filer, 2026, exemption phases out at 25% under R&TC 17062.1, not the federal 50%
# Schedule P (540) Exemption Worksheet with PE's CPI-uprated 2026 amounts
# (the FTB has not published 2026 amounts):
# Line 1: 94,850.96. Line 3: 355,690.34. Line 4: 500,000 - 355,690.34 = 144,309.66.
# Line 5: 25% x 144,309.66 = 36,077.41. Line 6: 94,850.96 - 36,077.41 = 58,773.55.
# At the federal 2026 rate of 50%, line 6 would be 94,850.96 - 72,154.83 = 22,696.13.
period: 2026
absolute_error_margin: 0.01
input:
people:
person1: {}
tax_units:
tax_unit:
members: [person1]
filing_status: SINGLE
ca_amti: 500_000
head_earned: 500_000
households:
household:
members: [person1]
state_code: CA
output:
ca_amt_exemption: 58_773.55

- name: Joint filers, 2026, exemption phases out at 25%
# Line 1: 126,469.65. Line 3: 474,254.81. Line 4: 700,000 - 474,254.81 = 225,745.19.
# Line 5: 25% x 225,745.19 = 56,436.30. Line 6: 126,469.65 - 56,436.30 = 70,033.36.
# At 50%, line 6 would be 126,469.65 - 112,872.60 = 13,597.06.
period: 2026
absolute_error_margin: 0.01
input:
people:
person1: {}
person2: {}
tax_units:
tax_unit:
members: [person1, person2]
filing_status: JOINT
ca_amti: 700_000
head_earned: 700_000
households:
household:
members: [person1, person2]
state_code: CA
output:
ca_amt_exemption: 70_033.36

- name: Single filer, 2025, published amounts (control, unchanged)
# 2025 Schedule P (540) Exemption Worksheet:
# Line 1: 92,749. Line 3: 347,808. Line 4: 500,000 - 347,808 = 152,192.
# Line 5: 25% x 152,192 = 38,048. Line 6: 92,749 - 38,048 = 54,701.
period: 2025
input:
people:
person1: {}
tax_units:
tax_unit:
members: [person1]
filing_status: SINGLE
ca_amti: 500_000
head_earned: 500_000
households:
household:
members: [person1]
state_code: CA
output:
ca_amt_exemption: 54_701
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ class ca_amti(Variable):
def formula(tax_unit, period, parameters):
filing_status = tax_unit("filing_status", period)
p = parameters(period).gov.states.ca.tax.income.amt.exemption
p_us = parameters(period).gov.irs.income.amt.capital_gains

amti_before_ded = tax_unit("ca_pre_exemption_amti", period)
separate = filing_status == filing_status.possible_values.SEPARATE
Expand All @@ -24,7 +23,7 @@ def formula(tax_unit, period, parameters):
# Line 3
reduced_amti = max_(amti_before_ded - maximum_exemption, 0)
# Line 4
reduced_amti_rate = reduced_amti * p_us.capital_gain_excess_tax_rate
reduced_amti_rate = reduced_amti * p.phase_out_rate
# Line 5
separate_amti_calc = min_(reduced_amti_rate, p.amount[filing_status])

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ def formula(tax_unit, period, parameters):
# Line 4
reduced_amti = max_(amti - lower_exemption_threshold, 0)
# Line 5
p_irs = parameters(period).gov.irs.income.amt.exemption
reduced_amti_rate = reduced_amti * p_irs.phase_out.rate
reduced_amti_rate = reduced_amti * p.phase_out_rate
# Line 6
adult_exemption = max_(exemption_max_amount - reduced_amti_rate, 0)
# Eligible children receive an increased exemption amount.
Expand All @@ -34,6 +33,7 @@ def formula(tax_unit, period, parameters):
is_head = person("is_tax_unit_head", period)
head_is_eligible_child = tax_unit.any(eligible_child & is_head)
# Line 7
p_irs = parameters(period).gov.irs.income.amt.exemption
exemption_amount_child = p_irs.child.amount
# Line 8
earned_income = tax_unit("head_earned", period)
Expand Down
Loading