diff --git a/changelog.d/fix-az-ptc-schedule-2-thresholds.fixed.md b/changelog.d/fix-az-ptc-schedule-2-thresholds.fixed.md new file mode 100644 index 00000000000..98e1d880137 --- /dev/null +++ b/changelog.d/fix-az-ptc-schedule-2-thresholds.fixed.md @@ -0,0 +1 @@ +Fix the Arizona property tax credit Schedule 2 thresholds, which were each one dollar low: a claimant living with others with household income of exactly $2,500, $2,650, ..., $5,500 got the next band's amount ($5,500 got none) instead of the ARS 43-1072(B)(2) amount. diff --git a/policyengine_us/parameters/gov/states/az/tax/income/credits/property_tax/amount/cohabitating.yaml b/policyengine_us/parameters/gov/states/az/tax/income/credits/property_tax/amount/cohabitating.yaml index 44d30a6a5f6..29dc77cdb9b 100644 --- a/policyengine_us/parameters/gov/states/az/tax/income/credits/property_tax/amount/cohabitating.yaml +++ b/policyengine_us/parameters/gov/states/az/tax/income/credits/property_tax/amount/cohabitating.yaml @@ -1,107 +1,119 @@ description: Arizona provides this property tax credit amount for filers cohabitating with other people, based on income. metadata: reference: - - title: 2024 Property Tax Refund (Credit) Claim Form 140PTC - href: https://azdor.gov/forms/tax-credits-forms/property-tax-refund-credit-claim-form-fillable#page=2 - - title: 2023 Property Tax Refund (Credit) Claim Form 140PTC - href: https://azdor.gov/forms/tax-credits-forms/property-tax-refund-credit-claim-form-fillable#page=2 - - title: 2022 Property Tax Refund (Credit) Claim Form 140PTC + - title: 2025 Property Tax Refund (Credit) Claim Form 140PTC, page 2, Schedule 2 + href: https://azdor.gov/sites/default/files/document/FORMS_INDIVIDUAL_2025_140PTC_f.pdf#page=2 + - title: 2024 Property Tax Refund (Credit) Claim Form 140PTC, page 2, Schedule 2 + href: https://azdor.gov/sites/default/files/document/FORMS_INDIVIDUAL_2024_140PTC_f.pdf#page=2 + - title: 2023 Property Tax Refund (Credit) Claim Form 140PTC, page 2, Schedule 2 + href: https://azdor.gov/sites/default/files/2023-12/FORMS_INDIVIDUAL_2023_140PTC_f.pdf#page=2 + - title: 2022 Property Tax Refund (Credit) Claim Form 140PTC, page 2, Schedule 2 href: https://azdor.gov/sites/default/files/2023-03/FORMS_INDIVIDUAL_2022_140PTC.pdf#page=2 - - title: 2021 Property Tax Refund (Credit) Claim Form 140PTC + - title: 2021 Property Tax Refund (Credit) Claim Form 140PTC, page 2, Schedule 2 href: https://azdor.gov/sites/default/files/2023-03/FORMS_INDIVIDUAL_2021_140PTC.pdf#page=2 - - title: 43-1072. Earned credit for property taxes; residents sixty-five years of age or older - (B) (2) + - title: 43-1072. Earned credit for property taxes; residents sixty-five years of age or older - (A)(3)(b), (B)(2) href: https://www.azleg.gov/viewdocument/?docName=https://www.azleg.gov/ars/43/01072.htm threshold_unit: currency-USD rate_unit: currency-USD type: single_amount period: year - label: Arizona property tax credit cohabitating amount + label: Arizona property tax credit cohabitating amount +# Each threshold is the lower bound of a band in ARS 43-1072(B)(2), and a +# band runs up to, but not including, the next band's lower bound. The +# statute lists whole-dollar bands ($0-2,500, 2,501-2,650, ...) and sets +# the income limit in (A)(3)(b) as "less than" $5,501, one dollar above the +# last band's upper bound, so the last band covers every income below $5,501. +# Reading every band the same way puts cents between two whole-dollar bands +# in the lower one: $2,500.50 gets the $0-2,500 amount, as if the cents +# were dropped. Form 140PTC line 10 takes whole dollars, and the 2025 Form +# 140 instructions (page 4) round to the nearest dollar, which would instead +# move 50 cents or more into the next band. brackets: - threshold: 2021-01-01: 0 amount: 2021-01-01: 502 - threshold: - 2021-01-01: 2_500 + 2021-01-01: 2_501 amount: 2021-01-01: 479 - threshold: - 2021-01-01: 2_650 + 2021-01-01: 2_651 amount: 2021-01-01: 457 - threshold: - 2021-01-01: 2_800 + 2021-01-01: 2_801 amount: 2021-01-01: 435 - threshold: - 2021-01-01: 2_950 + 2021-01-01: 2_951 amount: 2021-01-01: 412 - threshold: - 2021-01-01: 3_100 + 2021-01-01: 3_101 amount: 2021-01-01: 390 - threshold: - 2021-01-01: 3_250 + 2021-01-01: 3_251 amount: 2021-01-01: 368 - threshold: - 2021-01-01: 3_400 + 2021-01-01: 3_401 amount: 2021-01-01: 345 - threshold: - 2021-01-01: 3_550 + 2021-01-01: 3_551 amount: 2021-01-01: 323 - threshold: - 2021-01-01: 3_700 + 2021-01-01: 3_701 amount: 2021-01-01: 301 - threshold: - 2021-01-01: 3_850 + 2021-01-01: 3_851 amount: 2021-01-01: 279 - threshold: - 2021-01-01: 4_000 + 2021-01-01: 4_001 amount: 2021-01-01: 256 - threshold: - 2021-01-01: 4_150 + 2021-01-01: 4_151 amount: 2021-01-01: 234 - threshold: - 2021-01-01: 4_300 + 2021-01-01: 4_301 amount: 2021-01-01: 212 - threshold: - 2021-01-01: 4_450 + 2021-01-01: 4_451 amount: 2021-01-01: 189 - threshold: - 2021-01-01: 4_600 + 2021-01-01: 4_601 amount: 2021-01-01: 167 - threshold: - 2021-01-01: 4_750 + 2021-01-01: 4_751 amount: 2021-01-01: 145 - threshold: - 2021-01-01: 4_900 + 2021-01-01: 4_901 amount: 2021-01-01: 123 - threshold: - 2021-01-01: 5_050 + 2021-01-01: 5_051 amount: 2021-01-01: 100 - threshold: - 2021-01-01: 5_200 + 2021-01-01: 5_201 amount: 2021-01-01: 78 - threshold: - 2021-01-01: 5_350 + 2021-01-01: 5_351 amount: 2021-01-01: 56 - threshold: - 2021-01-01: 5_500 + 2021-01-01: 5_501 amount: 2021-01-01: 0 diff --git a/policyengine_us/parameters/gov/states/az/tax/income/credits/property_tax/amount/living_alone.yaml b/policyengine_us/parameters/gov/states/az/tax/income/credits/property_tax/amount/living_alone.yaml index 0020ff70632..4147a0a11ac 100644 --- a/policyengine_us/parameters/gov/states/az/tax/income/credits/property_tax/amount/living_alone.yaml +++ b/policyengine_us/parameters/gov/states/az/tax/income/credits/property_tax/amount/living_alone.yaml @@ -1,21 +1,33 @@ description: Arizona provides this property tax credit amount for filers living alone, based on income. metadata: reference: - - title: 2024 Property Tax Refund (Credit) Claim Form 140PTC - href: https://azdor.gov/forms/tax-credits-forms/property-tax-refund-credit-claim-form-fillable#page=2 - - title: 2023 Property Tax Refund (Credit) Claim Form 140PTC - href: https://azdor.gov/forms/tax-credits-forms/property-tax-refund-credit-claim-form-fillable#page=2 - - title: 2022 Property Tax Refund (Credit) Claim Form 140PTC + - title: 2025 Property Tax Refund (Credit) Claim Form 140PTC, page 2, Schedule 1 + href: https://azdor.gov/sites/default/files/document/FORMS_INDIVIDUAL_2025_140PTC_f.pdf#page=2 + - title: 2024 Property Tax Refund (Credit) Claim Form 140PTC, page 2, Schedule 1 + href: https://azdor.gov/sites/default/files/document/FORMS_INDIVIDUAL_2024_140PTC_f.pdf#page=2 + - title: 2023 Property Tax Refund (Credit) Claim Form 140PTC, page 2, Schedule 1 + href: https://azdor.gov/sites/default/files/2023-12/FORMS_INDIVIDUAL_2023_140PTC_f.pdf#page=2 + - title: 2022 Property Tax Refund (Credit) Claim Form 140PTC, page 2, Schedule 1 + href: https://azdor.gov/sites/default/files/2023-03/FORMS_INDIVIDUAL_2022_140PTC.pdf#page=2 + - title: 2021 Property Tax Refund (Credit) Claim Form 140PTC, page 2, Schedule 1 href: https://azdor.gov/sites/default/files/2023-03/FORMS_INDIVIDUAL_2021_140PTC.pdf#page=2 - - title: 2021 Property Tax Refund (Credit) Claim Form 140PTC - href: https://azdor.gov/sites/default/files/2023-03/FORMS_INDIVIDUAL_2021_140PTC.pdf#page=2 - - title: 43-1072. Earned credit for property taxes; residents sixty-five years of age or older - (B) (1) + - title: 43-1072. Earned credit for property taxes; residents sixty-five years of age or older - (A)(3)(a), (B)(1) href: https://www.azleg.gov/viewdocument/?docName=https://www.azleg.gov/ars/43/01072.htm threshold_unit: currency-USD rate_unit: currency-USD type: single_amount period: year - label: Arizona property tax credit living alone amount + label: Arizona property tax credit living alone amount +# Each threshold is the lower bound of a band in ARS 43-1072(B)(1), and a +# band runs up to, but not including, the next band's lower bound. The +# statute lists whole-dollar bands ($0-1,750, 1,751-1,850, ...) and sets +# the income limit in (A)(3)(a) as "less than" $3,751, one dollar above the +# last band's upper bound, so the last band covers every income below $3,751. +# Reading every band the same way puts cents between two whole-dollar bands +# in the lower one: $1,750.50 gets the $0-1,750 amount, as if the cents +# were dropped. Form 140PTC line 10 takes whole dollars, and the 2025 Form +# 140 instructions (page 4) round to the nearest dollar, which would instead +# move 50 cents or more into the next band. brackets: - threshold: 2021-01-01: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/az/tax/income/credits/az_property_tax_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/az/tax/income/credits/az_property_tax_credit.yaml index 2f4afe51114..aa50bb2e5e7 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/az/tax/income/credits/az_property_tax_credit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/az/tax/income/credits/az_property_tax_credit.yaml @@ -89,7 +89,10 @@ real_estate_taxes: 100 rent: 1_500 output: - az_property_tax_credit: 0 + # ARS 43-1072(B)(2): $5,500 is in the $5,351-5,500 band ($56), below the + # (A)(3)(b) limit of "less than" $5,501. Taxes paid: 100 + 0.15 * 1,500 = + # 325, so the credit is the $56 table amount. + az_property_tax_credit: 56 - name: tax unit head does not meet the criteria period: 2023 diff --git a/policyengine_us/tests/policy/baseline/gov/states/az/tax/income/credits/az_property_tax_credit_schedules.yaml b/policyengine_us/tests/policy/baseline/gov/states/az/tax/income/credits/az_property_tax_credit_schedules.yaml new file mode 100644 index 00000000000..bfa052616af --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/az/tax/income/credits/az_property_tax_credit_schedules.yaml @@ -0,0 +1,1722 @@ +# ARS 43-1072(B) Schedules 1 and 2 (Form 140PTC page 2, identical in +# 2021-2025): every band edge on both sides, the (A)(3) income limits +# ("less than" $3,751 living alone and $5,501 living with others), and +# cents between whole-dollar bands, which stay in the lower band (see the +# note in each schedule's parameter file). Property taxes paid ($1,000) exceed +# every table amount, so the credit equals the table amount. + +# Schedule 1: ARS 43-1072(B)(1), living alone. + +- name: Schedule 1 (living alone), income of $0 gets $502 + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 0 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 502 + +- name: Schedule 1 (living alone), income of $1,750 is the upper edge of the $0-1,750 band ($502) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 1_750 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 502 + +- name: Schedule 1 (living alone), income of $1,750.50 is between bands and stays in $0-1,750 ($502) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 1_750.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 502 + +- name: Schedule 1 (living alone), income of $1,751 is the lower edge of the $1,751-1,850 band ($479) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 1_751 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 479 + +- name: Schedule 1 (living alone), income of $1,850 is the upper edge of the $1,751-1,850 band ($479) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 1_850 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 479 + +- name: Schedule 1 (living alone), income of $1,850.50 is between bands and stays in $1,751-1,850 ($479) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 1_850.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 479 + +- name: Schedule 1 (living alone), income of $1,851 is the lower edge of the $1,851-1,950 band ($457) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 1_851 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 457 + +- name: Schedule 1 (living alone), income of $1,950 is the upper edge of the $1,851-1,950 band ($457) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 1_950 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 457 + +- name: Schedule 1 (living alone), income of $1,950.50 is between bands and stays in $1,851-1,950 ($457) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 1_950.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 457 + +- name: Schedule 1 (living alone), income of $1,951 is the lower edge of the $1,951-2,050 band ($435) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 1_951 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 435 + +- name: Schedule 1 (living alone), income of $2,050 is the upper edge of the $1,951-2,050 band ($435) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_050 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 435 + +- name: Schedule 1 (living alone), income of $2,050.50 is between bands and stays in $1,951-2,050 ($435) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_050.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 435 + +- name: Schedule 1 (living alone), income of $2,051 is the lower edge of the $2,051-2,150 band ($412) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_051 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 412 + +- name: Schedule 1 (living alone), income of $2,150 is the upper edge of the $2,051-2,150 band ($412) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_150 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 412 + +- name: Schedule 1 (living alone), income of $2,150.50 is between bands and stays in $2,051-2,150 ($412) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_150.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 412 + +- name: Schedule 1 (living alone), income of $2,151 is the lower edge of the $2,151-2,250 band ($390) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_151 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 390 + +- name: Schedule 1 (living alone), income of $2,250 is the upper edge of the $2,151-2,250 band ($390) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_250 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 390 + +- name: Schedule 1 (living alone), income of $2,250.50 is between bands and stays in $2,151-2,250 ($390) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_250.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 390 + +- name: Schedule 1 (living alone), income of $2,251 is the lower edge of the $2,251-2,350 band ($368) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_251 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 368 + +- name: Schedule 1 (living alone), income of $2,350 is the upper edge of the $2,251-2,350 band ($368) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_350 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 368 + +- name: Schedule 1 (living alone), income of $2,350.50 is between bands and stays in $2,251-2,350 ($368) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_350.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 368 + +- name: Schedule 1 (living alone), income of $2,351 is the lower edge of the $2,351-2,450 band ($345) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_351 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 345 + +- name: Schedule 1 (living alone), income of $2,450 is the upper edge of the $2,351-2,450 band ($345) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_450 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 345 + +- name: Schedule 1 (living alone), income of $2,450.50 is between bands and stays in $2,351-2,450 ($345) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_450.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 345 + +- name: Schedule 1 (living alone), income of $2,451 is the lower edge of the $2,451-2,550 band ($323) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_451 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 323 + +- name: Schedule 1 (living alone), income of $2,550 is the upper edge of the $2,451-2,550 band ($323) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_550 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 323 + +- name: Schedule 1 (living alone), income of $2,550.50 is between bands and stays in $2,451-2,550 ($323) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_550.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 323 + +- name: Schedule 1 (living alone), income of $2,551 is the lower edge of the $2,551-2,650 band ($301) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_551 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 301 + +- name: Schedule 1 (living alone), income of $2,650 is the upper edge of the $2,551-2,650 band ($301) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_650 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 301 + +- name: Schedule 1 (living alone), income of $2,650.50 is between bands and stays in $2,551-2,650 ($301) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_650.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 301 + +- name: Schedule 1 (living alone), income of $2,651 is the lower edge of the $2,651-2,750 band ($279) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_651 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 279 + +- name: Schedule 1 (living alone), income of $2,750 is the upper edge of the $2,651-2,750 band ($279) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_750 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 279 + +- name: Schedule 1 (living alone), income of $2,750.50 is between bands and stays in $2,651-2,750 ($279) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_750.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 279 + +- name: Schedule 1 (living alone), income of $2,751 is the lower edge of the $2,751-2,850 band ($256) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_751 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 256 + +- name: Schedule 1 (living alone), income of $2,850 is the upper edge of the $2,751-2,850 band ($256) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_850 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 256 + +- name: Schedule 1 (living alone), income of $2,850.50 is between bands and stays in $2,751-2,850 ($256) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_850.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 256 + +- name: Schedule 1 (living alone), income of $2,851 is the lower edge of the $2,851-2,950 band ($234) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_851 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 234 + +- name: Schedule 1 (living alone), income of $2,950 is the upper edge of the $2,851-2,950 band ($234) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_950 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 234 + +- name: Schedule 1 (living alone), income of $2,950.50 is between bands and stays in $2,851-2,950 ($234) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_950.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 234 + +- name: Schedule 1 (living alone), income of $2,951 is the lower edge of the $2,951-3,050 band ($212) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_951 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 212 + +- name: Schedule 1 (living alone), income of $3,050 is the upper edge of the $2,951-3,050 band ($212) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_050 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 212 + +- name: Schedule 1 (living alone), income of $3,050.50 is between bands and stays in $2,951-3,050 ($212) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_050.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 212 + +- name: Schedule 1 (living alone), income of $3,051 is the lower edge of the $3,051-3,150 band ($189) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_051 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 189 + +- name: Schedule 1 (living alone), income of $3,150 is the upper edge of the $3,051-3,150 band ($189) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_150 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 189 + +- name: Schedule 1 (living alone), income of $3,150.50 is between bands and stays in $3,051-3,150 ($189) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_150.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 189 + +- name: Schedule 1 (living alone), income of $3,151 is the lower edge of the $3,151-3,250 band ($167) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_151 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 167 + +- name: Schedule 1 (living alone), income of $3,250 is the upper edge of the $3,151-3,250 band ($167) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_250 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 167 + +- name: Schedule 1 (living alone), income of $3,250.50 is between bands and stays in $3,151-3,250 ($167) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_250.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 167 + +- name: Schedule 1 (living alone), income of $3,251 is the lower edge of the $3,251-3,350 band ($145) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_251 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 145 + +- name: Schedule 1 (living alone), income of $3,350 is the upper edge of the $3,251-3,350 band ($145) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_350 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 145 + +- name: Schedule 1 (living alone), income of $3,350.50 is between bands and stays in $3,251-3,350 ($145) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_350.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 145 + +- name: Schedule 1 (living alone), income of $3,351 is the lower edge of the $3,351-3,450 band ($123) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_351 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 123 + +- name: Schedule 1 (living alone), income of $3,450 is the upper edge of the $3,351-3,450 band ($123) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_450 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 123 + +- name: Schedule 1 (living alone), income of $3,450.50 is between bands and stays in $3,351-3,450 ($123) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_450.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 123 + +- name: Schedule 1 (living alone), income of $3,451 is the lower edge of the $3,451-3,550 band ($100) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_451 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 100 + +- name: Schedule 1 (living alone), income of $3,550 is the upper edge of the $3,451-3,550 band ($100) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_550 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 100 + +- name: Schedule 1 (living alone), income of $3,550.50 is between bands and stays in $3,451-3,550 ($100) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_550.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 100 + +- name: Schedule 1 (living alone), income of $3,551 is the lower edge of the $3,551-3,650 band ($78) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_551 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 78 + +- name: Schedule 1 (living alone), income of $3,650 is the upper edge of the $3,551-3,650 band ($78) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_650 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 78 + +- name: Schedule 1 (living alone), income of $3,650.50 is between bands and stays in $3,551-3,650 ($78) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_650.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 78 + +- name: Schedule 1 (living alone), income of $3,651 is the lower edge of the $3,651-3,750 band ($56) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_651 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 56 + +- name: Schedule 1 (living alone), income of $3,750 is the upper edge of the $3,651-3,750 band ($56) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_750 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 56 + +- name: Schedule 1 (living alone), income of $3,750.50 is between bands and stays in $3,651-3,750 ($56) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_750.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 56 + +- name: Schedule 1 (living alone), income of $3,750.99 is below the "less than $3,751" limit of (A)(3)(a) ($56) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_750.99 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 56 + +- name: Schedule 1 (living alone), income of $3,751 is not "less than $3,751" under (A)(3)(a) ($0) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_751 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 0 + +- name: Schedule 1 (living alone), income of $1,750 is the upper edge of the $0-1,750 band in 2021 ($502) + period: 2021 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 1_750 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 502 + +- name: Schedule 1 (living alone), income of $3,750 is the upper edge of the $3,651-3,750 band in 2021 ($56) + period: 2021 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_750 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 56 + +- name: Schedule 1 (living alone), income of $3,751 is at the limit in 2021 ($0) + period: 2021 + input: + state_code: AZ + cohabitating_spouses: false + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_751 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 0 + +# Schedule 2: ARS 43-1072(B)(2), living with others. + +- name: Schedule 2 (living with others), income of $0 gets $502 + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 0 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 502 + +- name: Schedule 2 (living with others), income of $2,500 is the upper edge of the $0-2,500 band ($502) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_500 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 502 + +- name: Schedule 2 (living with others), income of $2,500.50 is between bands and stays in $0-2,500 ($502) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_500.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 502 + +- name: Schedule 2 (living with others), income of $2,501 is the lower edge of the $2,501-2,650 band ($479) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_501 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 479 + +- name: Schedule 2 (living with others), income of $2,650 is the upper edge of the $2,501-2,650 band ($479) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_650 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 479 + +- name: Schedule 2 (living with others), income of $2,650.50 is between bands and stays in $2,501-2,650 ($479) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_650.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 479 + +- name: Schedule 2 (living with others), income of $2,651 is the lower edge of the $2,651-2,800 band ($457) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_651 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 457 + +- name: Schedule 2 (living with others), income of $2,800 is the upper edge of the $2,651-2,800 band ($457) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_800 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 457 + +- name: Schedule 2 (living with others), income of $2,800.50 is between bands and stays in $2,651-2,800 ($457) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_800.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 457 + +- name: Schedule 2 (living with others), income of $2,801 is the lower edge of the $2,801-2,950 band ($435) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_801 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 435 + +- name: Schedule 2 (living with others), income of $2,950 is the upper edge of the $2,801-2,950 band ($435) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_950 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 435 + +- name: Schedule 2 (living with others), income of $2,950.50 is between bands and stays in $2,801-2,950 ($435) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_950.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 435 + +- name: Schedule 2 (living with others), income of $2,951 is the lower edge of the $2,951-3,100 band ($412) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_951 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 412 + +- name: Schedule 2 (living with others), income of $3,100 is the upper edge of the $2,951-3,100 band ($412) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_100 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 412 + +- name: Schedule 2 (living with others), income of $3,100.50 is between bands and stays in $2,951-3,100 ($412) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_100.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 412 + +- name: Schedule 2 (living with others), income of $3,101 is the lower edge of the $3,101-3,250 band ($390) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_101 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 390 + +- name: Schedule 2 (living with others), income of $3,250 is the upper edge of the $3,101-3,250 band ($390) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_250 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 390 + +- name: Schedule 2 (living with others), income of $3,250.50 is between bands and stays in $3,101-3,250 ($390) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_250.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 390 + +- name: Schedule 2 (living with others), income of $3,251 is the lower edge of the $3,251-3,400 band ($368) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_251 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 368 + +- name: Schedule 2 (living with others), income of $3,400 is the upper edge of the $3,251-3,400 band ($368) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_400 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 368 + +- name: Schedule 2 (living with others), income of $3,400.50 is between bands and stays in $3,251-3,400 ($368) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_400.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 368 + +- name: Schedule 2 (living with others), income of $3,401 is the lower edge of the $3,401-3,550 band ($345) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_401 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 345 + +- name: Schedule 2 (living with others), income of $3,550 is the upper edge of the $3,401-3,550 band ($345) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_550 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 345 + +- name: Schedule 2 (living with others), income of $3,550.50 is between bands and stays in $3,401-3,550 ($345) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_550.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 345 + +- name: Schedule 2 (living with others), income of $3,551 is the lower edge of the $3,551-3,700 band ($323) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_551 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 323 + +- name: Schedule 2 (living with others), income of $3,700 is the upper edge of the $3,551-3,700 band ($323) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_700 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 323 + +- name: Schedule 2 (living with others), income of $3,700.50 is between bands and stays in $3,551-3,700 ($323) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_700.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 323 + +- name: Schedule 2 (living with others), income of $3,701 is the lower edge of the $3,701-3,850 band ($301) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_701 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 301 + +- name: Schedule 2 (living with others), income of $3,850 is the upper edge of the $3,701-3,850 band ($301) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_850 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 301 + +- name: Schedule 2 (living with others), income of $3,850.50 is between bands and stays in $3,701-3,850 ($301) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_850.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 301 + +- name: Schedule 2 (living with others), income of $3,851 is the lower edge of the $3,851-4,000 band ($279) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 3_851 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 279 + +- name: Schedule 2 (living with others), income of $4,000 is the upper edge of the $3,851-4,000 band ($279) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_000 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 279 + +- name: Schedule 2 (living with others), income of $4,000.50 is between bands and stays in $3,851-4,000 ($279) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_000.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 279 + +- name: Schedule 2 (living with others), income of $4,001 is the lower edge of the $4,001-4,150 band ($256) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_001 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 256 + +- name: Schedule 2 (living with others), income of $4,150 is the upper edge of the $4,001-4,150 band ($256) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_150 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 256 + +- name: Schedule 2 (living with others), income of $4,150.50 is between bands and stays in $4,001-4,150 ($256) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_150.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 256 + +- name: Schedule 2 (living with others), income of $4,151 is the lower edge of the $4,151-4,300 band ($234) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_151 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 234 + +- name: Schedule 2 (living with others), income of $4,300 is the upper edge of the $4,151-4,300 band ($234) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_300 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 234 + +- name: Schedule 2 (living with others), income of $4,300.50 is between bands and stays in $4,151-4,300 ($234) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_300.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 234 + +- name: Schedule 2 (living with others), income of $4,301 is the lower edge of the $4,301-4,450 band ($212) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_301 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 212 + +- name: Schedule 2 (living with others), income of $4,450 is the upper edge of the $4,301-4,450 band ($212) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_450 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 212 + +- name: Schedule 2 (living with others), income of $4,450.50 is between bands and stays in $4,301-4,450 ($212) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_450.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 212 + +- name: Schedule 2 (living with others), income of $4,451 is the lower edge of the $4,451-4,600 band ($189) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_451 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 189 + +- name: Schedule 2 (living with others), income of $4,600 is the upper edge of the $4,451-4,600 band ($189) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_600 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 189 + +- name: Schedule 2 (living with others), income of $4,600.50 is between bands and stays in $4,451-4,600 ($189) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_600.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 189 + +- name: Schedule 2 (living with others), income of $4,601 is the lower edge of the $4,601-4,750 band ($167) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_601 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 167 + +- name: Schedule 2 (living with others), income of $4,750 is the upper edge of the $4,601-4,750 band ($167) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_750 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 167 + +- name: Schedule 2 (living with others), income of $4,750.50 is between bands and stays in $4,601-4,750 ($167) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_750.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 167 + +- name: Schedule 2 (living with others), income of $4,751 is the lower edge of the $4,751-4,900 band ($145) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_751 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 145 + +- name: Schedule 2 (living with others), income of $4,900 is the upper edge of the $4,751-4,900 band ($145) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_900 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 145 + +- name: Schedule 2 (living with others), income of $4,900.50 is between bands and stays in $4,751-4,900 ($145) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_900.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 145 + +- name: Schedule 2 (living with others), income of $4,901 is the lower edge of the $4,901-5,050 band ($123) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 4_901 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 123 + +- name: Schedule 2 (living with others), income of $5,050 is the upper edge of the $4,901-5,050 band ($123) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 5_050 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 123 + +- name: Schedule 2 (living with others), income of $5,050.50 is between bands and stays in $4,901-5,050 ($123) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 5_050.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 123 + +- name: Schedule 2 (living with others), income of $5,051 is the lower edge of the $5,051-5,200 band ($100) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 5_051 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 100 + +- name: Schedule 2 (living with others), income of $5,200 is the upper edge of the $5,051-5,200 band ($100) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 5_200 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 100 + +- name: Schedule 2 (living with others), income of $5,200.50 is between bands and stays in $5,051-5,200 ($100) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 5_200.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 100 + +- name: Schedule 2 (living with others), income of $5,201 is the lower edge of the $5,201-5,350 band ($78) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 5_201 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 78 + +- name: Schedule 2 (living with others), income of $5,350 is the upper edge of the $5,201-5,350 band ($78) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 5_350 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 78 + +- name: Schedule 2 (living with others), income of $5,350.50 is between bands and stays in $5,201-5,350 ($78) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 5_350.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 78 + +- name: Schedule 2 (living with others), income of $5,351 is the lower edge of the $5,351-5,500 band ($56) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 5_351 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 56 + +- name: Schedule 2 (living with others), income of $5,500 is the upper edge of the $5,351-5,500 band ($56) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 5_500 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 56 + +- name: Schedule 2 (living with others), income of $5,500.50 is between bands and stays in $5,351-5,500 ($56) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 5_500.50 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 56 + +- name: Schedule 2 (living with others), income of $5,500.99 is below the "less than $5,501" limit of (A)(3)(b) ($56) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 5_500.99 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 56 + +- name: Schedule 2 (living with others), income of $5,501 is not "less than $5,501" under (A)(3)(b) ($0) + period: 2025 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 5_501 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 0 + +- name: Schedule 2 (living with others), income of $2,500 is the upper edge of the $0-2,500 band in 2021 ($502) + period: 2021 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 2_500 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 502 + +- name: Schedule 2 (living with others), income of $5,500 is the upper edge of the $5,351-5,500 band in 2021 ($56) + period: 2021 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 5_500 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 56 + +- name: Schedule 2 (living with others), income of $5,501 is at the limit in 2021 ($0) + period: 2021 + input: + state_code: AZ + cohabitating_spouses: true + az_property_tax_credit_eligible: true + az_property_tax_credit_income: 5_501 + real_estate_taxes: 1_000 + rent: 0 + output: + az_property_tax_credit: 0 + +# Household path: household income computed from its components and the +# schedule chosen from the household, not given as inputs. + +- name: Married couple with $2,500 of income gets the Schedule 2 $0-2,500 amount + period: 2025 + input: + people: + head: {age: 70, taxable_interest_income: 2_500, real_estate_taxes: 1_000} + spouse: {age: 70} + tax_units: {tax_unit: {members: [head, spouse]}} + households: {household: {members: [head, spouse], state_code: AZ}} + output: + az_property_tax_credit_income: 2_500 + az_property_tax_credit: 502 + +- name: Married couple with $2,501 of income gets the Schedule 2 $2,501-2,650 amount + period: 2025 + input: + people: + head: {age: 70, taxable_interest_income: 2_501, real_estate_taxes: 1_000} + spouse: {age: 70} + tax_units: {tax_unit: {members: [head, spouse]}} + households: {household: {members: [head, spouse], state_code: AZ}} + output: + az_property_tax_credit_income: 2_501 + az_property_tax_credit: 479 + +# ARS 43-1072(A)(3)(b): a single claimant living with an adult child uses +# Schedule 2, and $5,500 is less than $5,501. +- name: Single claimant living with an adult child at $5,500 gets the Schedule 2 $56 + period: 2025 + input: + people: + head: {age: 70, taxable_interest_income: 5_500, real_estate_taxes: 1_000} + child: {age: 40, is_tax_unit_dependent: false} + tax_units: + claimant: {members: [head]} + child_unit: {members: [child]} + households: {household: {members: [head, child], state_code: AZ}} + output: + az_property_tax_credit_income: [5_500, 0] + az_property_tax_credit: [56, 0] + +- name: Single claimant living with an adult child at $5,501 gets no credit + period: 2025 + input: + people: + head: {age: 70, taxable_interest_income: 5_501, real_estate_taxes: 1_000} + child: {age: 40, is_tax_unit_dependent: false} + tax_units: + claimant: {members: [head]} + child_unit: {members: [child]} + households: {household: {members: [head, child], state_code: AZ}} + output: + az_property_tax_credit_income: [5_501, 0] + az_property_tax_credit: [0, 0] + +# ARS 43-1072(A)(3)(a): living alone, $3,750 is less than $3,751. +- name: Single claimant living alone at $3,750 gets the Schedule 1 $56 + period: 2025 + input: + people: + head: {age: 70, taxable_interest_income: 3_750, real_estate_taxes: 1_000} + tax_units: {tax_unit: {members: [head]}} + households: {household: {members: [head], state_code: AZ}} + output: + az_property_tax_credit_income: 3_750 + az_property_tax_credit: 56 + +- name: Single claimant living alone at $3,751 gets no credit + period: 2025 + input: + people: + head: {age: 70, taxable_interest_income: 3_751, real_estate_taxes: 1_000} + tax_units: {tax_unit: {members: [head]}} + households: {household: {members: [head], state_code: AZ}} + output: + az_property_tax_credit_income: 3_751 + az_property_tax_credit: 0 diff --git a/policyengine_us/tests/test_az_property_tax_credit_schedules.py b/policyengine_us/tests/test_az_property_tax_credit_schedules.py new file mode 100644 index 00000000000..bab9cfed6cd --- /dev/null +++ b/policyengine_us/tests/test_az_property_tax_credit_schedules.py @@ -0,0 +1,237 @@ +"""Arizona property tax credit Schedules 1 and 2: differential and invariant tests. + +ARS 43-1072(B) gives the credit as a table of whole-dollar household income +bands: (B)(1) for a claimant who did not live with anyone ($0-1,750 -> $502, +1,751-1,850 -> $479, ..., 3,651-3,750 -> $56) and (B)(2) for one who lived with +a spouse or other persons ($0-2,500 -> $502, 2,501-2,650 -> $479, ..., +5,351-5,500 -> $56). (A)(3) limits the credit to income "less than" $3,751 +and $5,501. Form 140PTC page 2 prints the same tables in 2021-2025. The +parameter files store each band's lower bound as a single_amount threshold, so +a band runs up to, but not including, the next band's lower bound, and cents +between two whole-dollar bands stay in the lower band. + +Schedule 2's thresholds were once each one dollar low (2,500, 2,650, ..., +5,500), so incomes of exactly 2,500, 2,650, ..., 5,500 got the next band's +amount and 5,500 got nothing. + +Differential tests compare every whole-dollar income from $0 to $7,000, and +cents near every band edge, against an independent transcription of the +statute's tables, in every year from 2021 to 2026: + +- through the parameter scales, and +- through az_property_tax_credit in one vectorised simulation per schedule. + +Invariants: +- Transcription: each table's bands are contiguous whole-dollar ranges from + $0, and the last band's upper bound is one dollar below the (A)(3) limit. +- The amount never rises as income rises. +- The amount is between $56 and $502 below the (A)(3) limit and $0 at or + above it. +- An income with cents gets the same amount as its whole dollars. +""" + +import numpy as np +import pytest + +from policyengine_us import Simulation +from policyengine_us.system import system + +YEARS = range(2021, 2027) + +# ARS 43-1072(B)(1): (lower bound, upper bound, tax credit); (A)(3)(a) limit. +SCHEDULE_1 = [ + (0, 1_750, 502), + (1_751, 1_850, 479), + (1_851, 1_950, 457), + (1_951, 2_050, 435), + (2_051, 2_150, 412), + (2_151, 2_250, 390), + (2_251, 2_350, 368), + (2_351, 2_450, 345), + (2_451, 2_550, 323), + (2_551, 2_650, 301), + (2_651, 2_750, 279), + (2_751, 2_850, 256), + (2_851, 2_950, 234), + (2_951, 3_050, 212), + (3_051, 3_150, 189), + (3_151, 3_250, 167), + (3_251, 3_350, 145), + (3_351, 3_450, 123), + (3_451, 3_550, 100), + (3_551, 3_650, 78), + (3_651, 3_750, 56), +] +SCHEDULE_1_LIMIT = 3_751 + +# ARS 43-1072(B)(2): (lower bound, upper bound, tax credit); (A)(3)(b) limit. +SCHEDULE_2 = [ + (0, 2_500, 502), + (2_501, 2_650, 479), + (2_651, 2_800, 457), + (2_801, 2_950, 435), + (2_951, 3_100, 412), + (3_101, 3_250, 390), + (3_251, 3_400, 368), + (3_401, 3_550, 345), + (3_551, 3_700, 323), + (3_701, 3_850, 301), + (3_851, 4_000, 279), + (4_001, 4_150, 256), + (4_151, 4_300, 234), + (4_301, 4_450, 212), + (4_451, 4_600, 189), + (4_601, 4_750, 167), + (4_751, 4_900, 145), + (4_901, 5_050, 123), + (5_051, 5_200, 100), + (5_201, 5_350, 78), + (5_351, 5_500, 56), +] +SCHEDULE_2_LIMIT = 5_501 + +SCHEDULES = { + "living_alone": (SCHEDULE_1, SCHEDULE_1_LIMIT), + "cohabitating": (SCHEDULE_2, SCHEDULE_2_LIMIT), +} + +WHOLE_DOLLARS = np.arange(0, 7_001, dtype=float) +CENTS = np.array([0.01, 0.25, 0.49, 0.5, 0.51, 0.75, 0.99]) + + +def statute_amount(table, limit, income): + """The table amount for each income: the band holding its whole dollars.""" + dollars = np.floor(income) + amount = np.zeros_like(income) + for lower, upper, credit in table: + amount = np.where((dollars >= lower) & (dollars <= upper), credit, amount) + return np.where(income < limit, amount, 0) + + +def scale(name, year): + return getattr( + system.parameters( + f"{year}-01-01" + ).gov.states.az.tax.income.credits.property_tax.amount, + name, + ) + + +def edge_incomes(table, limit): + """Cents on each side of every band edge and of the (A)(3) limit.""" + edges = [lower for lower, _, _ in table[1:]] + [limit] + return np.array( + sorted( + {round(e - 1 + c, 2) for e in edges for c in CENTS} + | {round(e + c, 2) for e in edges for c in CENTS} + ) + ) + + +@pytest.mark.parametrize("name", SCHEDULES) +def test_transcription_is_contiguous_and_ends_below_the_limit(name): + table, limit = SCHEDULES[name] + assert table[0][0] == 0 + for (_, upper, _), (next_lower, _, _) in zip(table, table[1:]): + assert next_lower == upper + 1 + assert table[-1][1] + 1 == limit + + +def test_both_schedules_pay_the_same_amounts(): + assert [a for *_, a in SCHEDULE_1] == [a for *_, a in SCHEDULE_2] + + +@pytest.mark.parametrize("year", YEARS) +@pytest.mark.parametrize("name", SCHEDULES) +def test_scale_matches_statute_at_every_whole_dollar(name, year): + table, limit = SCHEDULES[name] + got = scale(name, year).calc(WHOLE_DOLLARS) + expected = statute_amount(table, limit, WHOLE_DOLLARS) + wrong = WHOLE_DOLLARS[got != expected] + assert wrong.size == 0, f"{name} {year}: wrong at {wrong[:10]}" + + +@pytest.mark.parametrize("year", YEARS) +@pytest.mark.parametrize("name", SCHEDULES) +def test_scale_matches_statute_at_cents_around_every_edge(name, year): + table, limit = SCHEDULES[name] + income = edge_incomes(table, limit) + got = scale(name, year).calc(income) + expected = statute_amount(table, limit, income) + wrong = income[got != expected] + assert wrong.size == 0, f"{name} {year}: wrong at {wrong[:10]}" + + +@pytest.mark.parametrize("year", YEARS) +@pytest.mark.parametrize("name", SCHEDULES) +def test_cents_get_the_amount_of_their_whole_dollars(name, year): + s = scale(name, year) + whole = s.calc(WHOLE_DOLLARS) + for c in CENTS: + assert (s.calc(WHOLE_DOLLARS + c) == whole).all(), (name, year, c) + + +@pytest.mark.parametrize("year", YEARS) +@pytest.mark.parametrize("name", SCHEDULES) +def test_amount_never_rises_with_income(name, year): + income = np.arange(0, 7_000, 0.25) + amount = scale(name, year).calc(income) + assert (np.diff(amount) <= 0).all() + + +@pytest.mark.parametrize("year", YEARS) +@pytest.mark.parametrize("name", SCHEDULES) +def test_amount_is_positive_below_the_limit_and_zero_from_it(name, year): + _, limit = SCHEDULES[name] + income = np.arange(0, 7_000, 0.25) + amount = scale(name, year).calc(income) + below = income < limit + assert ((amount[below] >= 56) & (amount[below] <= 502)).all() + assert (amount[~below] == 0).all() + + +def _credit_by_income(cohabitating, incomes, year): + """az_property_tax_credit for one eligible tax unit per income, vectorised.""" + n = len(incomes) + situation = { + "people": {"head": {"age": {year: 70}}}, + "tax_units": { + "tax_unit": { + "members": ["head"], + "cohabitating_spouses": {year: cohabitating}, + "az_property_tax_credit_eligible": {year: True}, + } + }, + "households": {"household": {"members": ["head"], "state_code": {year: "AZ"}}}, + "axes": [ + [ + { + "name": "az_property_tax_credit_income", + "min": 0, + "max": n - 1, + "count": n, + "period": year, + } + ] + ], + } + sim = Simulation(situation=situation) + # Taxes paid exceed every table amount, so the credit is the table amount. + sim.set_input("real_estate_taxes", year, np.full(n, 1_000.0)) + sim.set_input("az_property_tax_credit_income", year, np.asarray(incomes)) + return sim.calculate("az_property_tax_credit", year) + + +@pytest.mark.parametrize( + "name, cohabitating", [("living_alone", False), ("cohabitating", True)] +) +def test_credit_matches_statute_in_a_vectorised_simulation(name, cohabitating): + table, limit = SCHEDULES[name] + year = 2025 + incomes = np.concatenate([WHOLE_DOLLARS, edge_incomes(table, limit)]) + got = _credit_by_income(cohabitating, incomes, year) + expected = statute_amount(table, limit, incomes) + # az_property_tax_credit_income is stored as float32; every income here + # rounds to a float32 on the same side of each band edge. + wrong = incomes[got != expected] + assert wrong.size == 0, f"{name}: wrong at {wrong[:10]}"