diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bd381cfcf8..fffb48926e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,259 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.179.0] - 2025-01-21 05:05:10 + +### Added + +- 2025 New York Inflation Rebates. + +## [1.178.0] - 2025-01-21 04:58:51 + +### Added + +- Maryland standard deduction values 2024. + +## [1.177.0] - 2025-01-20 15:53:06 + +### Added + +- Limit the SALT deduction to property taxes reform. + +## [1.176.3] - 2025-01-20 05:43:12 + +### Fixed + +- Apply the 5 year forward check to the SALT phase out reform. + +## [1.176.2] - 2025-01-18 00:44:16 + +### Fixed + +- DC property tax credit phase-out calculation. + +## [1.176.1] - 2025-01-17 14:54:51 + +### Fixed + +- DC property tax credit reform 5 year forward check. + +## [1.176.0] - 2025-01-17 04:08:48 + +### Added + +- Puerto Rico low income credit. +- Puerto Rico compensatory low income credit. + +## [1.175.0] - 2025-01-16 21:12:09 + +### Added + +- Missouri 2024 and 2025 top income tax rate. +- Missouri 2024 working family tax credit match. + +## [1.174.1] - 2025-01-16 20:40:42 + +### Fixed + +- Limit CAPI to households with eligible aged or disabled filers. + +## [1.174.0] - 2025-01-15 21:19:28 + +### Added + +- Colorado income tax rate 2024. + +## [1.173.0] - 2025-01-13 19:10:03 + +### Added + +- References for New Jersey 2024 state income tax. + +## [1.172.1] - 2025-01-13 17:48:43 + +### Fixed + +- 2024 Connecticut income tax rates for HOH and surviving spouses. + +## [1.172.0] - 2025-01-13 01:59:31 + +### Added + +- DC property tax credit reform. + +## [1.171.0] - 2025-01-10 11:34:59 + +### Added + +- DC property tax credit take up. + +## [1.170.2] - 2025-01-10 05:35:35 + +### Fixed + +- Only apply the Virginia rebate to the 2023 tax year. + +## [1.170.1] - 2025-01-09 21:40:41 + +### Added + +- Montana top income tax rate 2024. + +## [1.170.0] - 2025-01-09 16:55:35 + +### Added + +- 2024 DC keep child care affordable tax credit max benefit and thresholds. +- DC EITC match delay to 2029. + +## [1.169.0] - 2025-01-08 23:32:39 + +### Added + +- State-level variables in taxsim. + +## [1.168.1] - 2025-01-06 18:47:40 + +### Fixed + +- NYC income tax rates. + +## [1.168.0] - 2025-01-06 15:50:44 + +### Added + +- New Jersey medical expense deduction. + +## [1.167.2] - 2025-01-06 05:03:19 + +### Fixed + +- Uncap New York real estate tax deduction. +- Cap New York college tuition expenses credit and deduction per student. + +## [1.167.1] - 2025-01-03 16:28:36 + +### Fixed + +- Iowa alternate tax eligibility. + +## [1.167.0] - 2024-12-28 02:48:55 + +### Added + +- 2024 DC property tax credit maximum benefit and thresholds + +## [1.166.0] - 2024-12-27 21:44:15 + +### Added + +- Abolish SNAP net income test reform. +- Abolish SNAP deductions reform. + +## [1.165.0] - 2024-12-26 12:59:32 + +### Added + +- SSI qualified non-citizen eligibility. + +## [1.164.0] - 2024-12-24 21:20:18 + +### Added + +- Expanded CTC reform including a reformed phase-in structure. + +## [1.163.1] - 2024-12-24 18:42:26 + +### Fixed + +- Illinois income tax before non-refundable credits variable format. + +## [1.163.0] - 2024-12-24 15:53:04 + +### Added + +- 2026 Estate Tax Credit Exemption amount. + +## [1.162.3] - 2024-12-24 12:46:05 + +### Fixed + +- Indiana National Guard and Reserve Pay Deduction 2023. + +## [1.162.2] - 2024-12-23 19:54:14 + +### Fixed + +- Adjust the EPP max pregnancy month value. + +## [1.162.1] - 2024-12-20 16:50:32 + +### Added + +- 2 +- 0 +- 2 +- 5 +- +- S +- S +- I +- , +- +- A +- N +- D +- - +- C +- S +- , +- +- a +- n +- d +- +- O +- A +- P +- +- v +- a +- l +- u +- e +- s + +## [1.162.0] - 2024-12-18 02:31:13 + +### Added + +- Add non-refundable credits to state dependent exemption reform. + +## [1.161.3] - 2024-12-18 02:17:13 + +### Fixed + +- New York Working Families Tax Credit parameter structure. +- New York exemptions child definition. + +## [1.161.2] - 2024-12-15 23:08:57 + +### Fixed + +- NYWFTC EITC older children eligibility. + +## [1.161.1] - 2024-12-13 23:43:04 + +### Added + +- Capability to select custom start time for simulations; this is a patch for structural reforms that occur at non-default time periods. + +## [1.161.0] - 2024-12-12 05:36:14 + +### Added + +- Nebraska military retirement benefit exclusion. + ## [1.160.0] - 2024-12-05 16:48:14 ### Added @@ -10377,6 +10630,42 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 +[1.179.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.178.0...1.179.0 +[1.178.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.177.0...1.178.0 +[1.177.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.176.3...1.177.0 +[1.176.3]: https://github.com/PolicyEngine/policyengine-us/compare/1.176.2...1.176.3 +[1.176.2]: https://github.com/PolicyEngine/policyengine-us/compare/1.176.1...1.176.2 +[1.176.1]: https://github.com/PolicyEngine/policyengine-us/compare/1.176.0...1.176.1 +[1.176.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.175.0...1.176.0 +[1.175.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.174.1...1.175.0 +[1.174.1]: https://github.com/PolicyEngine/policyengine-us/compare/1.174.0...1.174.1 +[1.174.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.173.0...1.174.0 +[1.173.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.172.1...1.173.0 +[1.172.1]: https://github.com/PolicyEngine/policyengine-us/compare/1.172.0...1.172.1 +[1.172.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.171.0...1.172.0 +[1.171.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.170.2...1.171.0 +[1.170.2]: https://github.com/PolicyEngine/policyengine-us/compare/1.170.1...1.170.2 +[1.170.1]: https://github.com/PolicyEngine/policyengine-us/compare/1.170.0...1.170.1 +[1.170.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.169.0...1.170.0 +[1.169.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.168.1...1.169.0 +[1.168.1]: https://github.com/PolicyEngine/policyengine-us/compare/1.168.0...1.168.1 +[1.168.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.167.2...1.168.0 +[1.167.2]: https://github.com/PolicyEngine/policyengine-us/compare/1.167.1...1.167.2 +[1.167.1]: https://github.com/PolicyEngine/policyengine-us/compare/1.167.0...1.167.1 +[1.167.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.166.0...1.167.0 +[1.166.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.165.0...1.166.0 +[1.165.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.164.0...1.165.0 +[1.164.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.163.1...1.164.0 +[1.163.1]: https://github.com/PolicyEngine/policyengine-us/compare/1.163.0...1.163.1 +[1.163.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.162.3...1.163.0 +[1.162.3]: https://github.com/PolicyEngine/policyengine-us/compare/1.162.2...1.162.3 +[1.162.2]: https://github.com/PolicyEngine/policyengine-us/compare/1.162.1...1.162.2 +[1.162.1]: https://github.com/PolicyEngine/policyengine-us/compare/1.162.0...1.162.1 +[1.162.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.161.3...1.162.0 +[1.161.3]: https://github.com/PolicyEngine/policyengine-us/compare/1.161.2...1.161.3 +[1.161.2]: https://github.com/PolicyEngine/policyengine-us/compare/1.161.1...1.161.2 +[1.161.1]: https://github.com/PolicyEngine/policyengine-us/compare/1.161.0...1.161.1 +[1.161.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.160.0...1.161.0 [1.160.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.159.0...1.160.0 [1.159.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.158.0...1.159.0 [1.158.0]: https://github.com/PolicyEngine/policyengine-us/compare/1.157.0...1.158.0 diff --git a/changelog.yaml b/changelog.yaml index e1f719cbb4e..afaf75cac47 100644 --- a/changelog.yaml +++ b/changelog.yaml @@ -8798,3 +8798,189 @@ added: - Second earner tax reform. date: 2024-12-05 16:48:14 +- bump: minor + changes: + added: + - Nebraska military retirement benefit exclusion. + date: 2024-12-12 05:36:14 +- bump: patch + changes: + added: + - Capability to select custom start time for simulations; this is a patch for + structural reforms that occur at non-default time periods. + date: 2024-12-13 23:43:04 +- bump: patch + changes: + fixed: + - NYWFTC EITC older children eligibility. + date: 2024-12-15 23:08:57 +- bump: patch + changes: + fixed: + - New York Working Families Tax Credit parameter structure. + - New York exemptions child definition. + date: 2024-12-18 02:17:13 +- bump: minor + changes: + added: + - Add non-refundable credits to state dependent exemption reform. + date: 2024-12-18 02:31:13 +- bump: patch + changes: + added: 2025 SSI, AND-CS, and OAP values + date: 2024-12-20 16:50:32 +- bump: patch + changes: + fixed: + - Adjust the EPP max pregnancy month value. + date: 2024-12-23 19:54:14 +- bump: patch + changes: + fixed: + - Indiana National Guard and Reserve Pay Deduction 2023. + date: 2024-12-24 12:46:05 +- bump: minor + changes: + added: + - 2026 Estate Tax Credit Exemption amount. + date: 2024-12-24 15:53:04 +- bump: patch + changes: + fixed: + - Illinois income tax before non-refundable credits variable format. + date: 2024-12-24 18:42:26 +- bump: minor + changes: + added: + - Expanded CTC reform including a reformed phase-in structure. + date: 2024-12-24 21:20:18 +- bump: minor + changes: + added: + - SSI qualified non-citizen eligibility. + date: 2024-12-26 12:59:32 +- bump: minor + changes: + added: + - Abolish SNAP net income test reform. + - Abolish SNAP deductions reform. + date: 2024-12-27 21:44:15 +- bump: minor + changes: + added: + - 2024 DC property tax credit maximum benefit and thresholds + date: 2024-12-28 02:48:55 +- bump: patch + changes: + fixed: + - Iowa alternate tax eligibility. + date: 2025-01-03 16:28:36 +- bump: patch + changes: + fixed: + - Uncap New York real estate tax deduction. + - Cap New York college tuition expenses credit and deduction per student. + date: 2025-01-06 05:03:19 +- bump: minor + changes: + added: + - New Jersey medical expense deduction. + date: 2025-01-06 15:50:44 +- bump: patch + changes: + fixed: + - NYC income tax rates. + date: 2025-01-06 18:47:40 +- bump: minor + changes: + added: + - State-level variables in taxsim. + date: 2025-01-08 23:32:39 +- bump: minor + changes: + added: + - 2024 DC keep child care affordable tax credit max benefit and thresholds. + - DC EITC match delay to 2029. + date: 2025-01-09 16:55:35 +- bump: patch + changes: + added: + - Montana top income tax rate 2024. + date: 2025-01-09 21:40:41 +- bump: patch + changes: + fixed: + - Only apply the Virginia rebate to the 2023 tax year. + date: 2025-01-10 05:35:35 +- bump: minor + changes: + added: + - DC property tax credit take up. + date: 2025-01-10 11:34:59 +- bump: minor + changes: + added: + - DC property tax credit reform. + date: 2025-01-13 01:59:31 +- bump: patch + changes: + fixed: + - 2024 Connecticut income tax rates for HOH and surviving spouses. + date: 2025-01-13 17:48:43 +- bump: minor + changes: + added: + - References for New Jersey 2024 state income tax. + date: 2025-01-13 19:10:03 +- bump: minor + changes: + added: + - Colorado income tax rate 2024. + date: 2025-01-15 21:19:28 +- bump: patch + changes: + fixed: + - Limit CAPI to households with eligible aged or disabled filers. + date: 2025-01-16 20:40:42 +- bump: minor + changes: + added: + - Missouri 2024 and 2025 top income tax rate. + - Missouri 2024 working family tax credit match. + date: 2025-01-16 21:12:09 +- bump: minor + changes: + added: + - Puerto Rico low income credit. + - Puerto Rico compensatory low income credit. + date: 2025-01-17 04:08:48 +- bump: patch + changes: + fixed: + - DC property tax credit reform 5 year forward check. + date: 2025-01-17 14:54:51 +- bump: patch + changes: + fixed: + - DC property tax credit phase-out calculation. + date: 2025-01-18 00:44:16 +- bump: patch + changes: + fixed: + - Apply the 5 year forward check to the SALT phase out reform. + date: 2025-01-20 05:43:12 +- bump: minor + changes: + added: + - Limit the SALT deduction to property taxes reform. + date: 2025-01-20 15:53:06 +- bump: minor + changes: + added: + - Maryland standard deduction values 2024. + date: 2025-01-21 04:58:51 +- bump: minor + changes: + added: + - 2025 New York Inflation Rebates. + date: 2025-01-21 05:05:10 diff --git a/docs/usage/structural_reform_dating.ipynb b/docs/usage/structural_reform_dating.ipynb new file mode 100644 index 00000000000..93272459aaa --- /dev/null +++ b/docs/usage/structural_reform_dating.ipynb @@ -0,0 +1,152 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Inputting Dates for Structural Reforms\n", + "\n", + "\"Structural\" reforms are those reforms that modify not only set values in the tax-benefit system, but also the formulas used to calculate taxes and benefits. These are typcially larger, more involved reforms that require custom coding.\n", + "\n", + "Due to the current limitations of the `Microsimulation` class, a code patch is required when running structural reforms with parameters that begin at any date other than January 1st of the current year. \n", + "\n", + "For example, the code cell below illustrates a standard way to instantiating a structural reform, without the patch, when simulating in 2024:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/miniconda3/envs/us-3.11/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Diff: -2605373719.2974854\n" + ] + } + ], + "source": [ + "from policyengine_us import Microsimulation\n", + "from policyengine_core.reforms import Reform\n", + "\n", + "reform_1 = Reform.from_dict(\n", + " {\n", + " \"gov.contrib.salt_phase_out.in_effect\": {\n", + " \"2024-01-01.2100-12-31\": True\n", + " },\n", + " \"gov.contrib.salt_phase_out.rate.joint[1].rate\": {\n", + " \"2024-01-01.2100-12-31\": 0.001\n", + " },\n", + " \"gov.contrib.salt_phase_out.rate.joint[1].threshold\": {\n", + " \"2024-01-01.2100-12-31\": 200000\n", + " },\n", + " \"gov.contrib.salt_phase_out.rate.other[1].rate\": {\n", + " \"2024-01-01.2100-12-31\": 0.001\n", + " },\n", + " \"gov.contrib.salt_phase_out.rate.other[1].threshold\": {\n", + " \"2024-01-01.2100-12-31\": 400000\n", + " },\n", + " },\n", + " country_id=\"us\",\n", + ")\n", + "\n", + "\n", + "baseline_sim_1 = Microsimulation()\n", + "reformed_sim_1 = Microsimulation(reform=reform_1)\n", + "baseline_salt_1 = baseline_sim_1.calculate(\"salt_deduction\", period=2026)\n", + "reformed_salt_1 = reformed_sim_1.calculate(\"salt_deduction\", period=2026)\n", + "print(f\"Diff: {reformed_salt_1.sum() - baseline_salt_1.sum()}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The cell below shows a series of reforms that begin in 2026, later than the current year. To effectively handle this case, we need to add an argument to the `Microsimulation` classes that we call. \n", + "\n", + "This argument, called `start_instant`, should be set to the same date as the start of the reforms, in ISO date format. In the case of the example below, this is `2026-01-01`, so our altered call to `Microsimulation` looks like:\n", + "\n", + "```\n", + "baseline_sim_2 = Microsimulation(start_instant=\"2026-01-01\")\n", + "reformed_sim_2 = Microsimulation(reform=reform_2, start_instant=\"2026-01-01\")\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Diff: -2605373719.2974854\n" + ] + } + ], + "source": [ + "from policyengine_us import Microsimulation\n", + "from policyengine_core.reforms import Reform\n", + "\n", + "reform_2 = Reform.from_dict(\n", + " {\n", + " \"gov.contrib.salt_phase_out.in_effect\": {\n", + " \"2026-01-01.2100-12-31\": True\n", + " },\n", + " \"gov.contrib.salt_phase_out.rate.joint[1].rate\": {\n", + " \"2026-01-01.2100-12-31\": 0.001\n", + " },\n", + " \"gov.contrib.salt_phase_out.rate.joint[1].threshold\": {\n", + " \"2026-01-01.2100-12-31\": 200000\n", + " },\n", + " \"gov.contrib.salt_phase_out.rate.other[1].rate\": {\n", + " \"2026-01-01.2100-12-31\": 0.001\n", + " },\n", + " \"gov.contrib.salt_phase_out.rate.other[1].threshold\": {\n", + " \"2026-01-01.2100-12-31\": 400000\n", + " },\n", + " },\n", + " country_id=\"us\",\n", + ")\n", + "\n", + "\n", + "baseline_sim_2 = Microsimulation(start_instant=\"2026-01-01\")\n", + "reformed_sim_2 = Microsimulation(reform=reform_2, start_instant=\"2026-01-01\")\n", + "baseline_salt_2 = baseline_sim_2.calculate(\"salt_deduction\", period=2026)\n", + "reformed_salt_2 = reformed_sim_2.calculate(\"salt_deduction\", period=2026)\n", + "print(f\"Diff: {reformed_salt_2.sum() - baseline_salt_2.sum()}\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "us-3.11", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/policyengine_us/parameters/gov/contrib/ctc/eppc/expanded_ctc/in_effect.yaml b/policyengine_us/parameters/gov/contrib/ctc/eppc/expanded_ctc/in_effect.yaml new file mode 100644 index 00000000000..0365aab0d8c --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/ctc/eppc/expanded_ctc/in_effect.yaml @@ -0,0 +1,10 @@ +description: An expanded Child Tax Credit amount with an alternative phase-in structure is provided, if this is true. +values: + 0000-01-01: false +metadata: + unit: bool + period: year + label: Expanded CTC in effect + reference: + - title: EPPC Tax Teams Comment on Working Families + href: https://eppc.org/wp-content/uploads/2024/10/Tax-Teams-Comment-on-Working-Families.pdf diff --git a/policyengine_us/parameters/gov/contrib/deductions/salt/limit_salt_deduction_to_property_taxes.yaml b/policyengine_us/parameters/gov/contrib/deductions/salt/limit_salt_deduction_to_property_taxes.yaml new file mode 100644 index 00000000000..dfb967cd05f --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/deductions/salt/limit_salt_deduction_to_property_taxes.yaml @@ -0,0 +1,8 @@ +description: The State and Local Tax (SALT) deduction is limited to the amount of property taxes paid, if this is true. +metadata: + unit: bool + period: year + label: Limit SALT deduction to property taxes + +values: + 0000-01-01: false diff --git a/policyengine_us/parameters/gov/contrib/snap/abolish_deductions/in_effect.yaml b/policyengine_us/parameters/gov/contrib/snap/abolish_deductions/in_effect.yaml new file mode 100644 index 00000000000..11470d6b243 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/snap/abolish_deductions/in_effect.yaml @@ -0,0 +1,8 @@ +description: SNAP deductions are abolished, if this is true. +metadata: + unit: bool + period: year + label: Abolish SNAP deductions in effect + +values: + 0000-01-01: false diff --git a/policyengine_us/parameters/gov/contrib/snap/abolish_net_income_test/in_effect.yaml b/policyengine_us/parameters/gov/contrib/snap/abolish_net_income_test/in_effect.yaml new file mode 100644 index 00000000000..4992ec3f08c --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/snap/abolish_net_income_test/in_effect.yaml @@ -0,0 +1,8 @@ +description: SNAP net income test is abolished, if this is true. +metadata: + unit: bool + period: year + label: Abolish SNAP net income test in effect + +values: + 0000-01-01: false diff --git a/policyengine_us/parameters/gov/contrib/states/dc/property_tax/amount.yaml b/policyengine_us/parameters/gov/contrib/states/dc/property_tax/amount.yaml new file mode 100644 index 00000000000..2c1ea6c3e03 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/dc/property_tax/amount.yaml @@ -0,0 +1,54 @@ +description: DC provides the following property tax credit amount, based on filing status. +metadata: + label: DC property tax credit amount + period: year + unit: currency-USD + breakdown: + - filing_status + + +JOINT: + values: + 2025-01-01: 1_400 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 25 +HEAD_OF_HOUSEHOLD: + values: + 2025-01-01: 1_400 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 25 +SURVIVING_SPOUSE: + values: + 2025-01-01: 1_400 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 25 +SINGLE: + values: + 2025-01-01: 1_400 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 25 +SEPARATE: + values: + 2025-01-01: 1_400 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 25 diff --git a/policyengine_us/parameters/gov/contrib/states/dc/property_tax/in_effect.yaml b/policyengine_us/parameters/gov/contrib/states/dc/property_tax/in_effect.yaml new file mode 100644 index 00000000000..39e71e2a1c5 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/dc/property_tax/in_effect.yaml @@ -0,0 +1,9 @@ +description: The DC property tax credit reform applies if this is true. + +values: + 0000-01-01: false + +metadata: + unit: bool + period: year + label: DC property tax credit reform in effect diff --git a/policyengine_us/parameters/gov/contrib/states/dc/property_tax/income_limit/elderly.yaml b/policyengine_us/parameters/gov/contrib/states/dc/property_tax/income_limit/elderly.yaml new file mode 100644 index 00000000000..7b56a443118 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/dc/property_tax/income_limit/elderly.yaml @@ -0,0 +1,53 @@ +description: DC limits the property tax credit to households with at least one elderly head or spouse with adjusted gross income below this threshold, based on filing status. +metadata: + label: DC property tax credit elderly income limit + period: year + unit: currency-USD + breakdown: + - filing_status + +JOINT: + values: + 2025-01-01: 89_400 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 25 +HEAD_OF_HOUSEHOLD: + values: + 2025-01-01: 89_400 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 25 +SURVIVING_SPOUSE: + values: + 2025-01-01: 89_400 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 25 +SINGLE: + values: + 2025-01-01: 89_400 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 25 +SEPARATE: + values: + 2025-01-01: 89_400 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 25 diff --git a/policyengine_us/parameters/gov/contrib/states/dc/property_tax/income_limit/non_elderly.yaml b/policyengine_us/parameters/gov/contrib/states/dc/property_tax/income_limit/non_elderly.yaml new file mode 100644 index 00000000000..16a32f2acc1 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/dc/property_tax/income_limit/non_elderly.yaml @@ -0,0 +1,53 @@ +description: DC limits the property tax credit to households with no elderly heads or spouses with adjusted gross income below this threshold, based on filing status. +metadata: + label: DC property tax credit non-elderly income limit + period: year + unit: currency-USD + breakdown: + - filing_status + +JOINT: + values: + 2025-01-01: 65_600 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 25 +HEAD_OF_HOUSEHOLD: + values: + 2025-01-01: 65_600 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 25 +SURVIVING_SPOUSE: + values: + 2025-01-01: 65_600 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 25 +SINGLE: + values: + 2025-01-01: 65_600 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 25 +SEPARATE: + values: + 2025-01-01: 65_600 + metadata: + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 25 diff --git a/policyengine_us/parameters/gov/contrib/states/dc/property_tax/phase_out/applies.yaml b/policyengine_us/parameters/gov/contrib/states/dc/property_tax/phase_out/applies.yaml new file mode 100644 index 00000000000..e7689a54c88 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/dc/property_tax/phase_out/applies.yaml @@ -0,0 +1,9 @@ +description: The DC property tax credit phases out with adjusted gross income over the income limit, if this is true. + +values: + 0000-01-01: false + +metadata: + unit: bool + period: year + label: DC property tax credit phase out applies diff --git a/policyengine_us/parameters/gov/contrib/states/dc/property_tax/phase_out/rate.yaml b/policyengine_us/parameters/gov/contrib/states/dc/property_tax/phase_out/rate.yaml new file mode 100644 index 00000000000..9b34514c03e --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/dc/property_tax/phase_out/rate.yaml @@ -0,0 +1,9 @@ +description: DC phases the property tax credit out at this rate of adjusted gross income over the income limit. + +values: + 2025-01-01: 0.1 + +metadata: + unit: /1 + period: year + label: DC property tax credit phase out rate diff --git a/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/head_of_household.yaml b/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/head_of_household.yaml new file mode 100644 index 00000000000..5913129d7ab --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/head_of_household.yaml @@ -0,0 +1,21 @@ +description: New York provides the following 2025 Inflation Rebate amount for head of household filers, based on state adjusted gross income. + +brackets: + - threshold: + 2025-01-01: 0 + amount: + 2025-01-01: 300 + - threshold: + 2025-01-01: 150_000 + amount: + 2025-01-01: 0 + + +metadata: + type: single_amount + amount_unit: currency-USD + threshold_unit: currency-USD + label: New York 2025 Inflaton Rebate head of household amount + reference: + - title: New York State Governor Hochul Proposes Sending 8.6 Million New Yorkers an Inflation Refund Check as First Proposal of 2025 State of the State + href: https://www.governor.ny.gov/news/money-your-pockets-governor-hochul-proposes-sending-86-million-new-yorkers-inflation-refund diff --git a/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/in_effect.yaml b/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/in_effect.yaml new file mode 100644 index 00000000000..1ea3c1684b8 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/in_effect.yaml @@ -0,0 +1,9 @@ +description: New York's inflation rebates are in effect if this is true. + +values: + 0000-01-01: false + +metadata: + unit: bool + period: year + label: New York inflation rebates in effect diff --git a/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/joint.yaml b/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/joint.yaml new file mode 100644 index 00000000000..5f16e219bea --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/joint.yaml @@ -0,0 +1,21 @@ +description: New York provides the following 2025 Inflation Rebate amount for joint filers, based on state adjusted gross income. + +brackets: + - threshold: + 2025-01-01: 0 + amount: + 2025-01-01: 500 + - threshold: + 2025-01-01: 300_000 + amount: + 2025-01-01: 0 + + +metadata: + type: single_amount + amount_unit: currency-USD + threshold_unit: currency-USD + label: New York 2025 Inflaton Rebate joint amount + reference: + - title: New York State Governor Hochul Proposes Sending 8.6 Million New Yorkers an Inflation Refund Check as First Proposal of 2025 State of the State + href: https://www.governor.ny.gov/news/money-your-pockets-governor-hochul-proposes-sending-86-million-new-yorkers-inflation-refund diff --git a/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/separate.yaml b/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/separate.yaml new file mode 100644 index 00000000000..7025753e455 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/separate.yaml @@ -0,0 +1,21 @@ +description: New York provides the following 2025 Inflation Rebate amount for separate filers, based on state adjusted gross income. + +brackets: + - threshold: + 2025-01-01: 0 + amount: + 2025-01-01: 250 + - threshold: + 2025-01-01: 150_000 + amount: + 2025-01-01: 0 + + +metadata: + type: single_amount + amount_unit: currency-USD + threshold_unit: currency-USD + label: New York 2025 Inflaton Rebate separate amount + reference: + - title: New York State Governor Hochul Proposes Sending 8.6 Million New Yorkers an Inflation Refund Check as First Proposal of 2025 State of the State + href: https://www.governor.ny.gov/news/money-your-pockets-governor-hochul-proposes-sending-86-million-new-yorkers-inflation-refund diff --git a/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/single.yaml b/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/single.yaml new file mode 100644 index 00000000000..6d6147a46f1 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/single.yaml @@ -0,0 +1,21 @@ +description: New York provides the following 2025 Inflation Rebate amount for single filers, based on state adjusted gross income. + +brackets: + - threshold: + 2025-01-01: 0 + amount: + 2025-01-01: 300 + - threshold: + 2025-01-01: 150_000 + amount: + 2025-01-01: 0 + + +metadata: + type: single_amount + amount_unit: currency-USD + threshold_unit: currency-USD + label: New York 2025 Inflaton Rebate single amount + reference: + - title: New York State Governor Hochul Proposes Sending 8.6 Million New Yorkers an Inflation Refund Check as First Proposal of 2025 State of the State + href: https://www.governor.ny.gov/news/money-your-pockets-governor-hochul-proposes-sending-86-million-new-yorkers-inflation-refund diff --git a/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/surviving_spouse.yaml b/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/surviving_spouse.yaml new file mode 100644 index 00000000000..bdef4d5cb68 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/ny/inflation_rebates/surviving_spouse.yaml @@ -0,0 +1,21 @@ +description: New York provides the following 2025 Inflation Rebate amount for surviving spouses, based on state adjusted gross income. + +brackets: + - threshold: + 2025-01-01: 0 + amount: + 2025-01-01: 500 + - threshold: + 2025-01-01: 300_000 + amount: + 2025-01-01: 0 + + +metadata: + type: single_amount + amount_unit: currency-USD + threshold_unit: currency-USD + label: New York 2025 Inflaton Rebate surviving spouse amount + reference: + - title: New York State Governor Hochul Proposes Sending 8.6 Million New Yorkers an Inflation Refund Check as First Proposal of 2025 State of the State + href: https://www.governor.ny.gov/news/money-your-pockets-governor-hochul-proposes-sending-86-million-new-yorkers-inflation-refund diff --git a/policyengine_us/parameters/gov/contrib/states/ny/wftc/child_age_threshold.yaml b/policyengine_us/parameters/gov/contrib/states/ny/wftc/child_age_threshold.yaml index 857b293d6ec..5c7f9fb4621 100644 --- a/policyengine_us/parameters/gov/contrib/states/ny/wftc/child_age_threshold.yaml +++ b/policyengine_us/parameters/gov/contrib/states/ny/wftc/child_age_threshold.yaml @@ -1,4 +1,4 @@ -description: New York limits the Working Families Tax Credit to children below this age. +description: New York limits the Working Families Tax Credit to children at or below this age. metadata: unit: year period: year diff --git a/policyengine_us/parameters/gov/contrib/states/ny/wftc/exemptions/child_age_threshold.yaml b/policyengine_us/parameters/gov/contrib/states/ny/wftc/exemptions/child_age_threshold.yaml deleted file mode 100644 index 175cb48f4c6..00000000000 --- a/policyengine_us/parameters/gov/contrib/states/ny/wftc/exemptions/child_age_threshold.yaml +++ /dev/null @@ -1,11 +0,0 @@ -description: New York limits the exemptions under the Working Families Tax Credit to children younger than this age. -metadata: - unit: year - period: year - label: New York Working Families Tax Credit exemptions child age threshold - reference: - - title: New York Senate Bill S277C §4(c) - href: https://legislation.nysenate.gov/pdf/bills/2023/S277C - -values: - 2025-01-01: 18 diff --git a/policyengine_us/parameters/gov/household/household_state_benefits.yaml b/policyengine_us/parameters/gov/household/household_state_benefits.yaml index 316987a4e82..47744c89f30 100644 --- a/policyengine_us/parameters/gov/household/household_state_benefits.yaml +++ b/policyengine_us/parameters/gov/household/household_state_benefits.yaml @@ -14,6 +14,7 @@ values: - ca_la_ez_save - ca_la_infant_supplement - ca_la_expectant_parent_payment + - ca_capi # Nebraska benefits - ne_child_care_subsidies diff --git a/policyengine_us/parameters/gov/irs/credits/estate/base.yaml b/policyengine_us/parameters/gov/irs/credits/estate/base.yaml index 43b39720669..159ed8b62a0 100644 --- a/policyengine_us/parameters/gov/irs/credits/estate/base.yaml +++ b/policyengine_us/parameters/gov/irs/credits/estate/base.yaml @@ -54,4 +54,8 @@ values: 2022-01-01: 12_060_000 2023-01-01: 12_920_000 2024-01-01: 13_610_000 - 2025-01-01: 13_990_000 + 2025-01-01: 13_990_000 + # Based on the legal code, we use 2017 value as the base + # and cpi_w (2026Q1 projection) for uprating + # 5,000,000 * 321.701 (2026Q1) / 236.854 (2017-01-01) + 2026-01-01: 6_790_000 diff --git a/policyengine_us/parameters/gov/irs/deductions/itemized/salt_and_real_estate/sources.yaml b/policyengine_us/parameters/gov/irs/deductions/itemized/salt_and_real_estate/sources.yaml new file mode 100644 index 00000000000..0e06d5589f0 --- /dev/null +++ b/policyengine_us/parameters/gov/irs/deductions/itemized/salt_and_real_estate/sources.yaml @@ -0,0 +1,13 @@ +description: The State and local taxes and real estate tax deduction is limited to the following sources. +values: + 2013-01-01: + - state_and_local_sales_or_income_tax + - real_estate_taxes + +metadata: + unit: list + period: year + label: SALT and real estate tax deduction sources + reference: + - title: 26 U.S. Code § 164 - Taxes (a) + href: https://www.law.cornell.edu/uscode/text/26/164 diff --git a/policyengine_us/parameters/gov/local/ca/la/dss/expectant_parent_payment/pregnancy_month/max.yaml b/policyengine_us/parameters/gov/local/ca/la/dss/expectant_parent_payment/pregnancy_month/max.yaml index 50759b7347d..98e365e66a4 100644 --- a/policyengine_us/parameters/gov/local/ca/la/dss/expectant_parent_payment/pregnancy_month/max.yaml +++ b/policyengine_us/parameters/gov/local/ca/la/dss/expectant_parent_payment/pregnancy_month/max.yaml @@ -1,6 +1,6 @@ description: The California Department of Social Services provides the Expectant Parent Payment on and before this pregnancy month. values: - 2022-01-01: 6 + 2022-01-01: 9 metadata: unit: int period: year diff --git a/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/head_of_household.yaml b/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/head_of_household.yaml index 8eec6c046e0..e4428b1fb41 100644 --- a/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/head_of_household.yaml +++ b/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/head_of_household.yaml @@ -11,25 +11,27 @@ metadata: href: https://www.tax.ny.gov/pdf/2023/printable-pdfs/inc/it201i-2023.pdf#page=52 - title: The New York City Administrative Code § 11-1701 Imposition of tax. href: https://codelibrary.amlegal.com/codes/newyorkcity/latest/NYCadmin/0-0-0-13463 + - title: NY Form IT-201 Instructions, 2024 + href: https://www.tax.ny.gov/forms/html-instructions/2024/it/it201i-2024.htm#nyc-tax-rate-schedule brackets: - threshold: 2017-01-01: 0 rate: 2017-01-01: 0.03078 # 2.7% * 114% = 3.078% - 2024-01-01: 0.013452 # 1.18% * 114% = 1.18% + 2027-01-01: 0.013452 # 1.18% * 114% = 1.18% - threshold: 2017-01-01: 14_400 rate: 2017-01-01: 0.03762 # 3.3% * 114% = 3.762% - 2024-01-01: 0.016359 # 1.435% * 114% = 1.6359% + 2027-01-01: 0.016359 # 1.435% * 114% = 1.6359% - threshold: 2017-01-01: 30_000 rate: 2017-01-01: 0.03819 # 3.35% * 114% = 3.819% - 2024-01-01: 0.016587 # 1.455% * 114% = 1.6587% + 2027-01-01: 0.016587 # 1.455% * 114% = 1.6587% - threshold: 2017-01-01: 60_000 rate: 2017-01-01: 0.03876 # 3.4% * 114% = 3.876% - 2024-01-01: 0.016872 # 1.48% * 114% = 1.6872% + 2027-01-01: 0.016872 # 1.48% * 114% = 1.6872% diff --git a/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/joint.yaml b/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/joint.yaml index 09ca943ac7e..2faec5c69ec 100644 --- a/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/joint.yaml +++ b/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/joint.yaml @@ -15,24 +15,26 @@ metadata: href: https://codelibrary.amlegal.com/codes/newyorkcity/latest/NYCadmin/0-0-0-13463 - title: The New York City Administrative Code § 11-1704.1 Additional tax href: https://codelibrary.amlegal.com/codes/newyorkcity/latest/NYCadmin/0-0-0-13565 + - title: NY Form IT-201 Instructions, 2024 + href: https://www.tax.ny.gov/forms/html-instructions/2024/it/it201i-2024.htm#nyc-tax-rate-schedule brackets: - threshold: 2017-01-01: 0 rate: 2017-01-01: 0.03078 # 2.7% * 114% = 3.078% - 2024-01-01: 0.013452 # 1.18% * 114% = 1.18% + 2027-01-01: 0.013452 # 1.18% * 114% = 1.18% - threshold: 2017-01-01: 21_600 rate: 2017-01-01: 0.03762 # 3.3% * 114% = 3.762% - 2024-01-01: 0.016359 # 1.435% * 114% = 1.6359% + 2027-01-01: 0.016359 # 1.435% * 114% = 1.6359% - threshold: 2017-01-01: 45_000 rate: 2017-01-01: 0.03819 # 3.35% * 114% = 3.819% - 2024-01-01: 0.016587 # 1.455% * 114% = 1.6587% + 2027-01-01: 0.016587 # 1.455% * 114% = 1.6587% - threshold: 2017-01-01: 90_000 rate: 2017-01-01: 0.03876 # 3.4% * 114% = 3.876% - 2024-01-01: 0.016872 # 1.48% * 114% = 1.6872% + 2027-01-01: 0.016872 # 1.48% * 114% = 1.6872% diff --git a/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/separate.yaml b/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/separate.yaml index 66c91e46fae..3b161b50c6c 100644 --- a/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/separate.yaml +++ b/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/separate.yaml @@ -11,24 +11,26 @@ metadata: href: https://www.tax.ny.gov/pdf/2023/printable-pdfs/inc/it201i-2023.pdf#page=52 - title: The New York City Administrative Code § 11-1701 Imposition of tax. href: https://codelibrary.amlegal.com/codes/newyorkcity/latest/NYCadmin/0-0-0-13463 + - title: NY Form IT-201 Instructions, 2024 + href: https://www.tax.ny.gov/forms/html-instructions/2024/it/it201i-2024.htm#nyc-tax-rate-schedule brackets: - threshold: 2017-01-01: 0 rate: 2017-01-01: 0.03078 # 2.7% * 114% = 3.078% - 2024-01-01: 0.013452 # 1.18% * 114% = 1.18% + 2027-01-01: 0.013452 # 1.18% * 114% = 1.18% - threshold: 2017-01-01: 12_000 rate: 2017-01-01: 0.03762 # 3.3% * 114% = 3.762% - 2024-01-01: 0.016359 # 1.435% * 114% = 1.6359% + 2027-01-01: 0.016359 # 1.435% * 114% = 1.6359% - threshold: 2017-01-01: 25_000 rate: 2017-01-01: 0.03819 # 3.35% * 114% = 3.819% - 2024-01-01: 0.016587 # 1.455% * 114% = 1.6587% + 2027-01-01: 0.016587 # 1.455% * 114% = 1.6587% - threshold: 2017-01-01: 50_000 rate: 2017-01-01: 0.03876 # 3.4% * 114% = 3.876% - 2024-01-01: 0.016872 # 1.48% * 114% = 1.6872% + 2027-01-01: 0.016872 # 1.48% * 114% = 1.6872% diff --git a/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/single.yaml b/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/single.yaml index a8dbf86f25f..bec85b1abda 100644 --- a/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/single.yaml +++ b/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/single.yaml @@ -11,24 +11,26 @@ metadata: href: https://www.tax.ny.gov/pdf/2023/printable-pdfs/inc/it201i-2023.pdf#page=52 - title: The New York City Administrative Code § 11-1701 Imposition of tax. href: https://codelibrary.amlegal.com/codes/newyorkcity/latest/NYCadmin/0-0-0-13463 + - title: NY Form IT-201 Instructions, 2024 + href: https://www.tax.ny.gov/forms/html-instructions/2024/it/it201i-2024.htm#nyc-tax-rate-schedule brackets: - threshold: 2017-01-01: 0 rate: 2017-01-01: 0.03078 # 2.7% * 114% = 3.078% - 2024-01-01: 0.013452 # 1.18% * 114% = 1.18% + 2027-01-01: 0.013452 # 1.18% * 114% = 1.18% - threshold: 2017-01-01: 12_000 rate: 2017-01-01: 0.03762 # 3.3% * 114% = 3.762% - 2024-01-01: 0.016359 # 1.435% * 114% = 1.6359% + 2027-01-01: 0.016359 # 1.435% * 114% = 1.6359% - threshold: 2017-01-01: 25_000 rate: 2017-01-01: 0.03819 # 3.35% * 114% = 3.819% - 2024-01-01: 0.016587 # 1.455% * 114% = 1.6587% + 2027-01-01: 0.016587 # 1.455% * 114% = 1.6587% - threshold: 2017-01-01: 50_000 rate: 2017-01-01: 0.03876 # 3.4% * 114% = 3.876% - 2024-01-01: 0.016872 # 1.48% * 114% = 1.6872% + 2027-01-01: 0.016872 # 1.48% * 114% = 1.6872% diff --git a/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/widow.yaml b/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/widow.yaml index 4be2bddb936..aa825ce7bc6 100644 --- a/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/widow.yaml +++ b/policyengine_us/parameters/gov/local/ny/nyc/tax/income/rates/widow.yaml @@ -15,24 +15,26 @@ metadata: href: https://codelibrary.amlegal.com/codes/newyorkcity/latest/NYCadmin/0-0-0-13463 - title: The New York City Administrative Code § 11-1704.1 Additional tax href: https://codelibrary.amlegal.com/codes/newyorkcity/latest/NYCadmin/0-0-0-13565 + - title: NY Form IT-201 Instructions, 2024 + href: https://www.tax.ny.gov/forms/html-instructions/2024/it/it201i-2024.htm#nyc-tax-rate-schedule brackets: - threshold: 2017-01-01: 0 rate: 2017-01-01: 0.03078 # 2.7% * 114% = 3.078% - 2024-01-01: 0.013452 # 1.18% * 114% = 1.18% + 2027-01-01: 0.013452 # 1.18% * 114% = 1.18% - threshold: 2017-01-01: 21_600 rate: 2017-01-01: 0.03762 # 3.3% * 114% = 3.762% - 2024-01-01: 0.016359 # 1.435% * 114% = 1.6359% + 2027-01-01: 0.016359 # 1.435% * 114% = 1.6359% - threshold: 2017-01-01: 45_000 rate: 2017-01-01: 0.03819 # 3.35% * 114% = 3.819% - 2024-01-01: 0.016587 # 1.455% * 114% = 1.6587% + 2027-01-01: 0.016587 # 1.455% * 114% = 1.6587% - threshold: 2017-01-01: 90_000 rate: 2017-01-01: 0.03876 # 3.4% * 114% = 3.876% - 2024-01-01: 0.016872 # 1.48% * 114% = 1.6872% + 2027-01-01: 0.016872 # 1.48% * 114% = 1.6872% diff --git a/policyengine_us/parameters/gov/ssa/sga/non_blind.yaml b/policyengine_us/parameters/gov/ssa/sga/non_blind.yaml index 43dbd208f29..8a4fc633daa 100644 --- a/policyengine_us/parameters/gov/ssa/sga/non_blind.yaml +++ b/policyengine_us/parameters/gov/ssa/sga/non_blind.yaml @@ -32,6 +32,7 @@ values: 2022-01-01: 1_350 2023-01-01: 1_470 2024-01-01: 1_550 + 2025-01-01: 1_620 metadata: label: Non-blind Substantial Gainful Activity limit unit: currency-USD diff --git a/policyengine_us/parameters/gov/ssa/ssi/amount/couple.yaml b/policyengine_us/parameters/gov/ssa/ssi/amount/couple.yaml index 9f8a9cf91e7..1ec5172bf58 100644 --- a/policyengine_us/parameters/gov/ssa/ssi/amount/couple.yaml +++ b/policyengine_us/parameters/gov/ssa/ssi/amount/couple.yaml @@ -51,6 +51,7 @@ values: 2022-01-01: 1_261 2023-01-01: 1_371 2024-01-01: 1_415 + 2025-01-01: 1_450 metadata: label: Monthly maximum Federal SSI payment amounts for an eligible individual with an eligible spouse uprating: gov.ssa.uprating diff --git a/policyengine_us/parameters/gov/ssa/ssi/amount/individual.yaml b/policyengine_us/parameters/gov/ssa/ssi/amount/individual.yaml index 2cc5553de37..7dca7b228d9 100644 --- a/policyengine_us/parameters/gov/ssa/ssi/amount/individual.yaml +++ b/policyengine_us/parameters/gov/ssa/ssi/amount/individual.yaml @@ -51,6 +51,7 @@ values: 2022-01-01: 841 2023-01-01: 914 2024-01-01: 943 + 2025-01-01: 967 metadata: label: Monthly maximum Federal SSI payment amounts for an eligible individual uprating: gov.ssa.uprating diff --git a/policyengine_us/parameters/gov/ssa/ssi/eligibility/status/qualified_noncitizen_status.yaml b/policyengine_us/parameters/gov/ssa/ssi/eligibility/status/qualified_noncitizen_status.yaml new file mode 100644 index 00000000000..6cc2faacd4a --- /dev/null +++ b/policyengine_us/parameters/gov/ssa/ssi/eligibility/status/qualified_noncitizen_status.yaml @@ -0,0 +1,17 @@ +description: The US considers these statuses as qualified noncitizens for Supplemental Security Income. +values: + 1975-01-01: + - LEGAL_PERMANENT_RESIDENT + - REFUGEE + - ASYLEE + - DEPORTATION_WITHHELD + - CUBAN_HAITIAN_ENTRANT + - CONDITIONAL_ENTRANT + - PAROLED_ONE_YEAR +metadata: + label: SSI qualified noncitizen statuses + period: year + unit: list + reference: + - title: SI 00502.100 - Basic SSI Noncitizen Eligibility Requirements + href: https://secure.ssa.gov/poms.nsf/lnx/0500502100 diff --git a/policyengine_us/parameters/gov/ssa/ssi/income/sources/qualifying_quarters_threshold.yaml b/policyengine_us/parameters/gov/ssa/ssi/income/sources/qualifying_quarters_threshold.yaml new file mode 100644 index 00000000000..30010294c19 --- /dev/null +++ b/policyengine_us/parameters/gov/ssa/ssi/income/sources/qualifying_quarters_threshold.yaml @@ -0,0 +1,10 @@ +description: The US provides SSI to legal permanent residents with this minimum number of qualifying quarters of earnings. +values: + 1975-01-01: 40 +metadata: + label: SSI qualifying quarters threshold + period: year + unit: quarters + reference: + - title: SI 00502.135 - Lawfully Admitted for Permanent Residence (LAPR) with 40 Qualifying Quarters of Earnings + href: https://secure.ssa.gov/poms.nsf/lnx/0500502135 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/capi/payment_standard_offset/couple.yaml b/policyengine_us/parameters/gov/states/ca/cdss/capi/payment_standard_offset/couple.yaml new file mode 100644 index 00000000000..8c9c77fc547 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/capi/payment_standard_offset/couple.yaml @@ -0,0 +1,10 @@ +description: California reduces the Supplemental Security Income / State Supplemental Payment payment standard by this amount for couples when calculating the Cash Assistance Program for Immigrants. +metadata: + unit: currency-USD + period: year + label: California CAPI couple payment standard offset + reference: + - title: California Eligibility and Assistance Standards Chapter 49-050 (.1) + href: https://www.cdss.ca.gov/Portals/9/CAPI/CAPI_Regulations-Accessible.pdf#page=44 +values: + 1991-01-01: 20 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/capi/payment_standard_offset/single.yaml b/policyengine_us/parameters/gov/states/ca/cdss/capi/payment_standard_offset/single.yaml new file mode 100644 index 00000000000..8ea02f39e03 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/capi/payment_standard_offset/single.yaml @@ -0,0 +1,10 @@ +description: California reduces the Supplemental Security Income / State Supplemental Payment payment standard by this amount for single filers when calculating the Cash Assistance Program for Immigrants. +metadata: + unit: currency-USD + period: year + label: California CAPI single payment standard offset + reference: + - title: California Eligibility and Assistance Standards Chapter 49-050 (.1) + href: https://www.cdss.ca.gov/Portals/9/CAPI/CAPI_Regulations-Accessible.pdf#page=44 +values: + 1991-01-01: 10 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/capi/resources/limit/couple.yaml b/policyengine_us/parameters/gov/states/ca/cdss/capi/resources/limit/couple.yaml new file mode 100644 index 00000000000..c852ba3724a --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/capi/resources/limit/couple.yaml @@ -0,0 +1,10 @@ +description: California limits the Cash Assistance Program for Immigrants to couples with resources at or below this amount. +metadata: + unit: currency-USD + period: year + label: California CAPI couple resource limit + reference: + - title: California Eligibility and Assistance Standards Chapter 49-040 (.1) + href: https://www.cdss.ca.gov/Portals/9/CAPI/CAPI_Regulations-Accessible.pdf#page=36 +values: + 1991-01-01: 3_000 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/capi/resources/limit/single.yaml b/policyengine_us/parameters/gov/states/ca/cdss/capi/resources/limit/single.yaml new file mode 100644 index 00000000000..11f5eda65ce --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/capi/resources/limit/single.yaml @@ -0,0 +1,10 @@ +description: California limits the Cash Assistance Program for Immigrants to single filers with resources at or below this amount. +metadata: + unit: currency-USD + period: year + label: California CAPI single resource limit + reference: + - title: California Eligibility and Assistance Standards Chapter 49-040 (.1) + href: https://www.cdss.ca.gov/Portals/9/CAPI/CAPI_Regulations-Accessible.pdf#page=36 +values: + 1991-01-01: 2_000 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/capi/resources/vehicle/disregard.yaml b/policyengine_us/parameters/gov/states/ca/cdss/capi/resources/vehicle/disregard.yaml new file mode 100644 index 00000000000..fb4e3f661ee --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/capi/resources/vehicle/disregard.yaml @@ -0,0 +1,10 @@ +description: California counts the value of a vehicle exceeding this threshold as resources for the Cash Assistance Program for Immigrants. +metadata: + unit: currency-USD + period: month + label: California CAPI vehicle value disregard + reference: + - title: California Eligibility and Assistance Standards Chapter 49-040 (.3)(c)(5) + href: https://www.cdss.ca.gov/Portals/9/CAPI/CAPI_Regulations-Accessible.pdf#page=38 +values: + 1991-01-01: 4_500 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/age_threshold.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/age_threshold.yaml new file mode 100644 index 00000000000..f3879aeec12 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/age_threshold.yaml @@ -0,0 +1,10 @@ +description: California provides a state supplement amount for dependents below this age threshold. +metadata: + unit: year + period: year + label: California state supplement aged or disabled age threshold + reference: + - title: California Eligibility and Assistance Standards Chapter 49-025 (.1) + href: https://www.cdss.ca.gov/Portals/9/CAPI/CAPI_Regulations-Accessible.pdf#page=19 +values: + 1991-01-01: 65 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/married.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/married.yaml new file mode 100644 index 00000000000..2fc6cf0cda8 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/married.yaml @@ -0,0 +1,10 @@ +description: California provides the following state supplement amount to two eligible aged or disabled married filers. +metadata: + unit: currency-USD + period: month + label: California state supplement aged or disabled allowance married amount + reference: + - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (d) + href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 +values: + 1991-01-01: 1_167 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/single.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/single.yaml new file mode 100644 index 00000000000..ff4be519f66 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/aged_or_disabled/amount/single.yaml @@ -0,0 +1,10 @@ +description: California provides the following state supplement amount to aged or disabled single filers. +metadata: + unit: currency-USD + period: month + label: California state supplement aged or disabled allowance single amount + reference: + - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (c) + href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 +values: + 1991-01-01: 630 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/food/married.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/food/married.yaml new file mode 100644 index 00000000000..35f89a9d7fb --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/food/married.yaml @@ -0,0 +1,10 @@ +description: California provides the following state supplement food allowance for married adults whose living arrangements prevents them from preparing their own meals. +metadata: + unit: currency-USD + period: month + label: California state supplement food allowance married amount + reference: + - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (e) + href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 +values: + 1991-01-01: 136 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/food/single.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/food/single.yaml new file mode 100644 index 00000000000..1aab9258ee0 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/food/single.yaml @@ -0,0 +1,10 @@ +description: California provides the following state supplement food allowance for single adults whose living arrangements prevents them from preparing their own meals. +metadata: + unit: currency-USD + period: month + label: California state supplement food allowance single amount + reference: + - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (e) + href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 +values: + 1991-01-01: 68 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/medical_care_facility.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/medical_care_facility.yaml new file mode 100644 index 00000000000..5ad859d2a54 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/medical_care_facility.yaml @@ -0,0 +1,10 @@ +description: California provides the following state supplement allowance for filers receiving care in a medical facility. +metadata: + unit: currency-USD + period: month + label: California state supplement medical care facility allowance amount + reference: + - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (h) + href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 +values: + 1991-01-01: 42 # $30 + $12 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/out_of_home_care.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/out_of_home_care.yaml new file mode 100644 index 00000000000..40a32bbf7c1 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/allowance/out_of_home_care.yaml @@ -0,0 +1,10 @@ +description: California provides the following state supplement allowance for filers in a nonmedical out-of-home care facility. +metadata: + unit: currency-USD + period: month + label: California state supplement out-of-home care allowance amount + reference: + - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (g) + href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 +values: + 1991-01-01: 709 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/one_blind.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/one_blind.yaml new file mode 100644 index 00000000000..38d7084602a --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/one_blind.yaml @@ -0,0 +1,10 @@ +description: California provides the following state supplement amount to married filers with one blind member who are both eligible. +metadata: + unit: currency-USD + period: month + label: California state supplement blind allowance married one blind amount + reference: + - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (b) + href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 +values: + 1991-01-01: 1_295 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/two_blind.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/two_blind.yaml new file mode 100644 index 00000000000..cdc909b7cee --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/married/two_blind.yaml @@ -0,0 +1,10 @@ +description: California provides the following state supplement amount to married filers with two blind members who are both eligible. +metadata: + unit: currency-USD + period: month + label: California state supplement blind allowance married two blind amount + reference: + - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (a) + href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 +values: + 1991-01-01: 1_372 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/single.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/single.yaml new file mode 100644 index 00000000000..61985930bfc --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/blind/single.yaml @@ -0,0 +1,10 @@ +description: California provides the following state supplement amount to single filers who are blind. +metadata: + unit: currency-USD + period: month + label: California state supplement blind allowance single amount + reference: + - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (a) + href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 +values: + 1991-01-01: 704 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/dependent/age_limit.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/dependent/age_limit.yaml new file mode 100644 index 00000000000..d9c2ea38a38 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/dependent/age_limit.yaml @@ -0,0 +1,10 @@ +description: California provides a state supplement amount for dependents below this age threshold. +metadata: + unit: year + period: year + label: California state supplement dependent age limit + reference: + - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (f) + href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 +values: + 1991-01-01: 18 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/dependent/amount.yaml b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/dependent/amount.yaml new file mode 100644 index 00000000000..01caff799aa --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/cdss/state_supplement/payment_standard/dependent/amount.yaml @@ -0,0 +1,10 @@ +description: California provides the following state supplement amount for eligible dependents. +metadata: + unit: currency-USD + period: month + label: California state supplement dependent amount + reference: + - title: California Welfare and Institutions Code Division 9, Part 3, Chapter 3, Article 5, Section 12200 (f) + href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200 +values: + 1991-01-01: 499 diff --git a/policyengine_us/parameters/gov/states/co/ssa/oap/grant_standard.yaml b/policyengine_us/parameters/gov/states/co/ssa/oap/grant_standard.yaml index 0ccd766274f..578a6df00a3 100644 --- a/policyengine_us/parameters/gov/states/co/ssa/oap/grant_standard.yaml +++ b/policyengine_us/parameters/gov/states/co/ssa/oap/grant_standard.yaml @@ -3,6 +3,7 @@ description: Grant Standard for OAP values: 2023-01-01: 952 2024-01-01: 982 + 2025-01-01: 1_005 metadata: unit: currency-USD @@ -13,3 +14,5 @@ metadata: href: https://www.coloradosos.gov/CCR/GenerateRulePdf.do?ruleVersionId=10694#page=57 - title: ADULT FINANCIAL PROGRAMS | Income Maintenance (Volume 3) | 3.530(A) href: https://sos.state.co.us/CCR/GenerateRulePdf.do?ruleVersionId=11264&fileName=9%20CCR%202503-5#page=57 + - title: Colorado Department of Human Services | OPERATION MEMO + href: https://drive.google.com/file/d/1bc_hUAoSzUbyRuMCzcxk2zV7b4RqkwyC/view diff --git a/policyengine_us/parameters/gov/states/co/ssa/state_supplement/grant_standard.yaml b/policyengine_us/parameters/gov/states/co/ssa/state_supplement/grant_standard.yaml index 4d3e072b645..6a47579cb83 100644 --- a/policyengine_us/parameters/gov/states/co/ssa/state_supplement/grant_standard.yaml +++ b/policyengine_us/parameters/gov/states/co/ssa/state_supplement/grant_standard.yaml @@ -2,6 +2,8 @@ description: Grant Standard for Colorado State Supplement values: 2023-01-01: 914 + 2024-01-01: 943 + 2025-01-01: 967 metadata: unit: currency-USD diff --git a/policyengine_us/parameters/gov/states/co/tax/income/rate.yaml b/policyengine_us/parameters/gov/states/co/tax/income/rate.yaml index 51e59ae31ce..5e7cf84b6c4 100644 --- a/policyengine_us/parameters/gov/states/co/tax/income/rate.yaml +++ b/policyengine_us/parameters/gov/states/co/tax/income/rate.yaml @@ -17,6 +17,8 @@ metadata: href: https://tax.colorado.gov/sites/tax/files/documents/DR0104Book_2021_V3.pdf#page=6 - title: 2023 Colorado Individual Tax Filing Guide 104 Book href: https://tax.colorado.gov/sites/tax/files/documents/Book0104_2023.pdf#page=21 + - title: TABOR Refund Mechanisms Legislation 2024-2034 + href: https://leg.colorado.gov/bills/SB24-228 values: 1987-01-01: 0.05 # form rate determined by Legislation @@ -26,3 +28,5 @@ values: 2020-01-01: 0.0455 # form rate determined by Legislation 2021-01-01: 0.045 # form rate determined by Constitution TABOR limit 2022-01-01: 0.044 # form rate determined by Proposition 121 + 2024-01-01: 0.0425 # form rate determined by TABOR Refund Mechanisms + 2025-01-01: 0.044 # form rate determined by TABOR Refund Mechanisms diff --git a/policyengine_us/parameters/gov/states/ct/tax/income/rates/head_of_household.yaml b/policyengine_us/parameters/gov/states/ct/tax/income/rates/head_of_household.yaml index d8d354e4d63..bd1afc6c939 100644 --- a/policyengine_us/parameters/gov/states/ct/tax/income/rates/head_of_household.yaml +++ b/policyengine_us/parameters/gov/states/ct/tax/income/rates/head_of_household.yaml @@ -11,15 +11,19 @@ metadata: href: https://portal.ct.gov/-/media/DRS/Forms/2023/Income/2023-CT-1040-Instructions_1223.pdf#page=20 - title: 2022 Form CT-1040 Connecticut Resident Income Tax Return Instructions href: https://portal.ct.gov/-/media/DRS/Forms/2022/Income/2022-CT-1040-Instructions_1222.pdf#page=20 + - title: Connecticut General Statutes, Chapter 229, Sec. 12-700, (10)(B)(i) + href: https://www.cga.ct.gov/2024/sup/chap_229.htm brackets: - threshold: 2015-01-01: 0 rate: 2015-01-01: 0.03 + 2024-01-10: 0.02 - threshold: 2015-01-01: 16_000 rate: - 2015-01-01: 0.05 + 2015-01-01: 0.05 + 2024-01-10: 0.045 - threshold: 2015-01-01: 80_000 rate: diff --git a/policyengine_us/parameters/gov/states/ct/tax/income/rates/joint.yaml b/policyengine_us/parameters/gov/states/ct/tax/income/rates/joint.yaml index a4e743561a9..dfb21b81361 100644 --- a/policyengine_us/parameters/gov/states/ct/tax/income/rates/joint.yaml +++ b/policyengine_us/parameters/gov/states/ct/tax/income/rates/joint.yaml @@ -13,6 +13,8 @@ metadata: href: https://portal.ct.gov/-/media/DRS/Forms/2023/Income/2023-CT-1040-Instructions_1223.pdf#page=20 - title: 2022 Form CT-1040 Connecticut Resident Income Tax Return Instructions href: https://portal.ct.gov/-/media/DRS/Forms/2022/Income/2022-CT-1040-Instructions_1222.pdf#page=20 + - title: Connecticut General Statutes, Chapter 229, Sec. 12-700, (10)(C)(i) + href: https://www.cga.ct.gov/2024/sup/chap_229.htm brackets: - threshold: 2015-01-01: 0 diff --git a/policyengine_us/parameters/gov/states/ct/tax/income/rates/separate.yaml b/policyengine_us/parameters/gov/states/ct/tax/income/rates/separate.yaml index 1dcccb1200a..7fd2e1be5a5 100644 --- a/policyengine_us/parameters/gov/states/ct/tax/income/rates/separate.yaml +++ b/policyengine_us/parameters/gov/states/ct/tax/income/rates/separate.yaml @@ -13,6 +13,8 @@ metadata: href: https://portal.ct.gov/-/media/DRS/Forms/2023/Income/2023-CT-1040-Instructions_1223.pdf#page=20 - title: 2022 Form CT-1040 Connecticut Resident Income Tax Return Instructions href: https://portal.ct.gov/-/media/DRS/Forms/2022/Income/2022-CT-1040-Instructions_1222.pdf#page=20 + - title: Connecticut General Statutes, Chapter 229, Sec. 12-700, (10)(D)(i) + href: https://www.cga.ct.gov/2024/sup/chap_229.htm brackets: - threshold: 2015-01-01: 0 diff --git a/policyengine_us/parameters/gov/states/ct/tax/income/rates/single.yaml b/policyengine_us/parameters/gov/states/ct/tax/income/rates/single.yaml index b51c505b0c6..8f2bd424175 100644 --- a/policyengine_us/parameters/gov/states/ct/tax/income/rates/single.yaml +++ b/policyengine_us/parameters/gov/states/ct/tax/income/rates/single.yaml @@ -13,6 +13,8 @@ metadata: href: https://portal.ct.gov/-/media/DRS/Forms/2023/Income/2023-CT-1040-Instructions_1223.pdf#page=20 - title: 2022 Form CT-1040 Connecticut Resident Income Tax Return Instructions href: https://portal.ct.gov/-/media/DRS/Forms/2022/Income/2022-CT-1040-Instructions_1222.pdf#page=20 + - title: Connecticut General Statutes, Chapter 229, Sec. 12-700, (10)(A)(i) + href: https://www.cga.ct.gov/2024/sup/chap_229.htm brackets: - threshold: 2015-01-01: 0 diff --git a/policyengine_us/parameters/gov/states/ct/tax/income/rates/surviving_spouse.yaml b/policyengine_us/parameters/gov/states/ct/tax/income/rates/surviving_spouse.yaml index 3453ca97d36..cf7a5ba3c90 100644 --- a/policyengine_us/parameters/gov/states/ct/tax/income/rates/surviving_spouse.yaml +++ b/policyengine_us/parameters/gov/states/ct/tax/income/rates/surviving_spouse.yaml @@ -1,9 +1,9 @@ -description: Connecticut taxes income of widow(er) filers at these rates. +description: Connecticut taxes income of surviving spouses at these rates. metadata: type: marginal_rate threshold_unit: currency-USD rate_unit: /1 - label: Connecticut income tax rate widow(er) filers + label: Connecticut income tax rate surviving spouses reference: - title: Connecticut General Statutes, Chapter 229, Sec. 12-700, (9), (C) href: https://www.cga.ct.gov/current/pub/chap_229.htm#sec_12-700 @@ -11,15 +11,19 @@ metadata: href: https://portal.ct.gov/-/media/DRS/Forms/2023/Income/2023-CT-1040-Instructions_1223.pdf#page=20 - title: 2022 Form CT-1040 Connecticut Resident Income Tax Return Instructions href: https://portal.ct.gov/-/media/DRS/Forms/2022/Income/2022-CT-1040-Instructions_1222.pdf#page=20 + - title: Connecticut General Statutes, Chapter 229, Sec. 12-700, (10)(C)(i) + href: https://www.cga.ct.gov/2024/sup/chap_229.htm brackets: - threshold: 2015-01-01: 0 rate: 2015-01-01: 0.03 + 2024-01-01: 0.02 - threshold: 2015-01-01: 20_000 rate: 2015-01-01: 0.05 + 2024-01-01: 0.045 - threshold: 2015-01-01: 100_000 rate: diff --git a/policyengine_us/parameters/gov/states/dc/tax/income/credits/eitc/with_children/match.yaml b/policyengine_us/parameters/gov/states/dc/tax/income/credits/eitc/with_children/match.yaml index e748b87fa7f..3c8eb788540 100644 --- a/policyengine_us/parameters/gov/states/dc/tax/income/credits/eitc/with_children/match.yaml +++ b/policyengine_us/parameters/gov/states/dc/tax/income/credits/eitc/with_children/match.yaml @@ -8,8 +8,10 @@ metadata: href: https://code.dccouncil.gov/us/dc/council/code/sections/47-1806.04#(f)(1) - title: 2023 DC Form D-40 Booklet, Page 34, Line 27c href: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2023_D40_Book_Final_012324.pdf#page=34 + - title: District of Columbia Tax Changes Take Effect October 1st 2024 + href: https://otr.cfo.dc.gov/release/district-columbia-tax-changes-take-effect-october1-24 values: 2015-01-01: 0.4 # (f)(1)(A) and (f)(1)(B) 2022-01-01: 0.7 # (f)(1)(B-1) 2025-01-01: 0.85 # (f)(1)(B-2) - 2026-01-01: 1 # (f)(1)(B-3) + 2029-01-01: 1 # (f)(1)(B-3) diff --git a/policyengine_us/parameters/gov/states/dc/tax/income/credits/kccatc/income_limit.yaml b/policyengine_us/parameters/gov/states/dc/tax/income/credits/kccatc/income_limit.yaml index 1a6ea9fdd80..f63528473fc 100644 --- a/policyengine_us/parameters/gov/states/dc/tax/income/credits/kccatc/income_limit.yaml +++ b/policyengine_us/parameters/gov/states/dc/tax/income/credits/kccatc/income_limit.yaml @@ -16,6 +16,8 @@ metadata: href: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2022_D-40_Booklet_Final_blk_01_23_23_Ordc.pdf#page=60 - title: 2023 DC Form D-40 Booklet, Schedule ELC href: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2023_D40_Book_Final_012324.pdf#page=60 + - title: District of Columbia Tax Changes Take Effect October 1st 2024 + href: https://otr.cfo.dc.gov/release/district-columbia-tax-changes-take-effect-october1-24 SINGLE: values: @@ -24,6 +26,7 @@ SINGLE: 2021-01-01: 153_400 2022-01-01: 157_200 2023-01-01: 167_400 + 2024-01-01: 174_300 metadata: uprating: parameter: gov.irs.uprating @@ -38,6 +41,7 @@ JOINT: 2021-01-01: 153_400 2022-01-01: 157_200 2023-01-01: 167_400 + 2024-01-01: 174_300 metadata: uprating: parameter: gov.irs.uprating @@ -52,6 +56,7 @@ SEPARATE: 2021-01-01: 76_700 2022-01-01: 78_600 2023-01-01: 83_700 + 2024-01-01: 87_100 metadata: uprating: parameter: gov.irs.uprating @@ -66,6 +71,7 @@ HEAD_OF_HOUSEHOLD: 2021-01-01: 153_400 2022-01-01: 157_200 2023-01-01: 167_400 + 2024-01-01: 174_300 metadata: uprating: parameter: gov.irs.uprating @@ -80,6 +86,7 @@ SURVIVING_SPOUSE: 2021-01-01: 153_400 2022-01-01: 157_200 2023-01-01: 167_400 + 2024-01-01: 174_300 metadata: uprating: parameter: gov.irs.uprating diff --git a/policyengine_us/parameters/gov/states/dc/tax/income/credits/kccatc/max_amount.yaml b/policyengine_us/parameters/gov/states/dc/tax/income/credits/kccatc/max_amount.yaml index cf33b5db331..741e7bbd880 100644 --- a/policyengine_us/parameters/gov/states/dc/tax/income/credits/kccatc/max_amount.yaml +++ b/policyengine_us/parameters/gov/states/dc/tax/income/credits/kccatc/max_amount.yaml @@ -19,9 +19,12 @@ metadata: href: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2022_D-40_Booklet_Final_blk_01_23_23_Ordc.pdf#page=59 - title: 2023 DC Form D-40 Booklet, Schedule ELC href: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2023_D40_Book_Final_012324#page=59 + - title: District of Columbia Tax Changes Take Effect October 1st 2024 + href: https://otr.cfo.dc.gov/release/district-columbia-tax-changes-take-effect-october1-24 values: 2018-01-01: 1_000 2020-01-01: 1_010 2021-01-01: 1_020 2022-01-01: 1_045 2023-01-01: 1_115 + 2024-01-01: 1_160 diff --git a/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/fraction_elderly.yaml b/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/fraction_elderly.yaml index 4cef99e67d8..c5e541e5c63 100644 --- a/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/fraction_elderly.yaml +++ b/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/fraction_elderly.yaml @@ -14,6 +14,8 @@ metadata: href: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2022_D-40_Booklet_Final_blk_01_23_23_Ordc.pdf#page=47 - title: 2023 Form D-40 Booklet href: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2023_D40_Book_Final_012324.pdf#page=47 + - title: District of Columbia Tax Changes Take Effect October 1st 2024 + href: https://otr.cfo.dc.gov/release/district-columbia-tax-changes-take-effect-october1-24 brackets: - threshold: 2021-01-01: -.inf @@ -24,6 +26,7 @@ brackets: 2021-01-01: 76_700 2022-01-01: 78_600 2023-01-01: 83_700 + 2024-01-01: 87_100 metadata: uprating: parameter: gov.irs.uprating diff --git a/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/fraction_nonelderly.yaml b/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/fraction_nonelderly.yaml index b4d8fdcc130..d32fcf279db 100644 --- a/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/fraction_nonelderly.yaml +++ b/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/fraction_nonelderly.yaml @@ -14,6 +14,8 @@ metadata: href: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2022_D-40_Booklet_Final_blk_01_23_23_Ordc.pdf#page=47 - title: 2023 Form D-40 Booklet href: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2023_D40_Book_Final_012324.pdf#page=47 + - title: District of Columbia Tax Changes Take Effect October 1st 2024 + href: https://otr.cfo.dc.gov/release/district-columbia-tax-changes-take-effect-october1-24 brackets: - threshold: 2021-01-01: -.inf @@ -32,6 +34,7 @@ brackets: 2021-01-01: 56_200 2022-01-01: 57_600 2023-01-01: 61_300 + 2024-01-01: 63_900 metadata: uprating: parameter: gov.irs.uprating diff --git a/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/max.yaml b/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/max.yaml index 5d758ef7909..2def4623db3 100644 --- a/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/max.yaml +++ b/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/max.yaml @@ -17,7 +17,10 @@ metadata: href: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2022_D-40_Booklet_Final_blk_01_23_23_Ordc.pdf#page=47 - title: 2023 Form D-40 Booklet href: https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2023_D40_Book_Final_012324.pdf#page=47 + - title: District of Columbia Tax Changes Take Effect October 1st 2024 + href: https://otr.cfo.dc.gov/release/district-columbia-tax-changes-take-effect-october1-24 values: 2021-01-01: 1_225 2022-01-01: 1_250 2023-01-01: 1_325 + 2024-01-01: 1_375 diff --git a/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/takeup.yaml b/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/takeup.yaml new file mode 100644 index 00000000000..830ff31deb6 --- /dev/null +++ b/policyengine_us/parameters/gov/states/dc/tax/income/credits/ptc/takeup.yaml @@ -0,0 +1,11 @@ +description: The share of eligible individuals who claim the DC property tax credit. +metadata: + unit: /1 + label: DC property tax credit takeup rate + period: year + reference: + - title: District of Columbia Tax Expenditure Report, 2024 + href: https://ora-cfo.dc.gov/sites/default/files/dc/sites/ora-cfo/publication/attachments/2024%20Tax%20Expenditure%20Report.pdf#page=234 +values: + # 37,133 (Values derived from the 2024 Tax Expenditure Report) / 131,791,388 (PolicyEngine DC PTC value estimate) + 2021-01-01: 0.32 diff --git a/policyengine_us/parameters/gov/states/household/state_agis.yaml b/policyengine_us/parameters/gov/states/household/state_agis.yaml new file mode 100644 index 00000000000..1195989441c --- /dev/null +++ b/policyengine_us/parameters/gov/states/household/state_agis.yaml @@ -0,0 +1,50 @@ +description: All state adjusted gross income variables. +values: + 0000-01-01: + - al_agi # Alabama + - ar_agi # Arkansas + - az_agi # Arizona + - ca_agi # California + # Colorado adopts federal AGI + - ct_agi # Connecticut + - dc_agi # DC + - de_agi # Delaware + - ga_agi # Georgia + - hi_agi # Hawaii + - ia_net_income # Iowa + - id_agi # Idaho + - il_base_income # Illinois + - in_agi # Indiana + - ks_agi # Kansas + - ky_agi # Kentucky + - la_agi # Louisiana + - ma_agi # Massachusetts + - md_agi # Maryland + - me_agi # Maine + # Michigan adopts federal AGI + # Minnesota adopts federal AGI + - mo_adjusted_gross_income # Missouri + - ms_agi # Mississippi + - mt_agi # Montana + # North Carolina adopts federal AGI + # North Dakota adopts federal AGI + - ne_agi # Nebraska + - nj_agi # New Jersey + - nm_modified_gross_income # New Mexico + - ny_agi # New York + - oh_agi # Ohio + - ok_agi # Oklahoma + - or_agi # Oregon + - pa_eligibility_income # Pennsylvania + - ri_agi # Rhode Island + # South Carolina adjusts federal taxable income rather than having a state AGI. + - ut_total_income # Utah + - va_agi # Virginia + - vt_agi # Vermont + - wi_agi # Wisconsin + - wv_agi # West Virginia + +metadata: + unit: list + period: year + label: State Adjusted Gross Income Variables diff --git a/policyengine_us/parameters/gov/states/household/state_cdccs.yaml b/policyengine_us/parameters/gov/states/household/state_cdccs.yaml new file mode 100644 index 00000000000..5bf801730e6 --- /dev/null +++ b/policyengine_us/parameters/gov/states/household/state_cdccs.yaml @@ -0,0 +1,40 @@ +description: All state Child and Dependent Care Credits and related credits. +values: + 0000-01-01: + - ar_cdcc # Arkansas + - ca_cdcc # California + - co_cdcc # Colorado + - co_low_income_cdcc # Colorado Low-income CDCC (separate from co_cdcc) + - dc_cdcc # District of Columbia + - dc_kccatc # District of Columbia Keep Child Care Affordable Tax Credit + - de_cdcc # Delaware + - ga_cdcc # Georgia + - hi_cdcc # Hawaii + - ia_cdcc # Iowa + - ks_cdcc # Kansas + - ky_cdcc # Kentucky (household and dependent care service credit) + - la_non_refundable_cdcc # Louisiana + - la_refundable_cdcc # Louisiana + - ma_dependent_care_credit # Massachusetts + - md_cdcc # Maryland + - me_child_care_credit # Maine + - mn_cdcc # Minnesota + - ne_cdcc_nonrefundable # Nebraska + - ne_cdcc_refundable # Nebraska + - nj_cdcc # New Jersey + - nm_cdcc # New Mexico + - ny_cdcc # New York + - oh_cdcc # Ohio + - ok_child_care_child_tax_credit # Oklahoma Child Care/Child Tax Credit - note, also in state_ctcs. + - or_working_family_household_and_dependent_care_credit # Oregon + - pa_cdcc # Pennsylvania + - ri_cdcc # Rhode Island + - sc_cdcc # South Carolina + - vt_cdcc # Vermont + - vt_low_income_cdcc # Vermont low-income CDCC + - wi_childcare_expense_credit # Wisconsin + +metadata: + unit: list + period: year + label: State Child and Dependent Care Credits diff --git a/policyengine_us/parameters/gov/states/household/state_ctcs.yaml b/policyengine_us/parameters/gov/states/household/state_ctcs.yaml new file mode 100644 index 00000000000..7a7d9fcd57d --- /dev/null +++ b/policyengine_us/parameters/gov/states/household/state_ctcs.yaml @@ -0,0 +1,29 @@ +description: All state Child Tax Credits. +values: + 0000-01-01: + - az_dependent_tax_credit # Arizona Dependent Tax Credit + - ca_yctc # California Young Child Tax Credit + - co_ctc # Colorado Child Tax Credit + - co_family_affordability_credit # Colorado Family Affordability Credit + - ct_child_tax_rebate # Connecticut Child Tax Rebate + - dc_ctc # District of Columbia Child Tax Credit + - id_ctc # Idaho Child Tax Credit + - il_ctc # Illinois Child Tax Credit + - ma_dependent_credit # Massachusetts Dependent Credit + - md_ctc # Maryland Child Tax Credit + - mn_child_and_working_families_credits # Minnesota Child and Working Family Credits + - mt_ctc # Montana Child Tax Credit + - ne_refundable_ctc # Nebraska Refundable Child Tax Credit + - nj_ctc # New Jersey Child Tax Credit + - nm_ctc # New Mexico Child Tax Credit + - ny_ctc # New York Child Tax Credit (Empire State Child Credit) + - ok_child_care_child_tax_credit # Oklahoma Child Care/Child Tax Credit - also in state_cdccs. + - or_ctc # Oregon Child Tax Credit (Oregon Kids Credit) + - ri_child_tax_rebate # Rhode Island Child Tax Rebate + - ut_ctc # Utah Child Tax Credit + - vt_ctc # Vermont Child Tax Credit + +metadata: + unit: list + period: year + label: State CTCs diff --git a/policyengine_us/parameters/gov/states/household/state_eitcs.yaml b/policyengine_us/parameters/gov/states/household/state_eitcs.yaml new file mode 100644 index 00000000000..d8ed35450b5 --- /dev/null +++ b/policyengine_us/parameters/gov/states/household/state_eitcs.yaml @@ -0,0 +1,40 @@ +description: All state Earned Income Tax Credits. +values: + 0000-01-01: + - ca_eitc # California + - co_eitc # Colorado + - ct_eitc # Connecticut + - dc_eitc # District of Columbia + - de_eitc # Delaware + - hi_eitc # Hawaii + - il_eitc # Illinois + - in_eitc # Indiana + - ia_eitc # Iowa + - ks_total_eitc # Kansas - combined nonrefundable and refundable components + - la_eitc # Louisiana + - ma_eitc # Massachusetts + - md_eitc # Maryland + - me_eitc # Maine + - mi_eitc # Michigan + - mn_wfc # Minnesota (called “Working Family Credit”) repealed in 2023 + - mn_child_and_working_families_credits + - mo_wftc # Missouri (called “Working Families Tax Credit”) + - mt_eitc # Montana + - ne_eitc # Nebraska + - nj_eitc # New Jersey + - nm_eitc # New Mexico + - ny_eitc # New York + - oh_eitc # Ohio + - ok_eitc # Oklahoma + - or_eitc # Oregon + - ri_eitc # Rhode Island + - sc_eitc # South Carolina + - vt_eitc # Vermont + - va_eitc # Virginia + - wa_working_families_tax_credit # Washington + - wi_earned_income_credit # Wisconsin + +metadata: + unit: list + period: year + label: State EITCs diff --git a/policyengine_us/parameters/gov/states/household/state_itemized_deductions.yaml b/policyengine_us/parameters/gov/states/household/state_itemized_deductions.yaml new file mode 100644 index 00000000000..17b78da34de --- /dev/null +++ b/policyengine_us/parameters/gov/states/household/state_itemized_deductions.yaml @@ -0,0 +1,46 @@ +description: All state itemized deduction variables. +values: + 0000-01-01: + - al_itemized_deductions # Alabama + - ar_itemized_deductions # Arkansas + - az_itemized_deductions # Arizona + - ca_itemized_deductions # California + # Connecticut adopts federal itemized deductions + - dc_itemized_deductions # DC + - de_itemized_deductions # Delaware + # Georgia adopts federal itemized deductions + - hi_itemized_deductions # Hawaii + - ia_itemized_deductions # Iowa + - id_itemized_deductions # Idaho + # Illinois doesn't have deductions. + - ks_itemized_deductions # Kansas + - ky_itemized_deductions # Kentucky + - la_itemized_deductions # Louisiana + # Massachusetts doesn't have deductions in a standard form. + - md_itemized_deductions # Maryland + - me_itemized_deductions_pre_phaseout # Maine phases out deductions after choosing itemization. + - mn_itemized_deductions # Minnesota + - mo_itemized_deductions # Missouri + - ms_itemized_deductions # Mississippi + - mt_itemized_deductions # Montana + - nc_itemized_deductions # North Carolina + # North Dakota adopts federal deductions. + - ne_itemized_deductions # Nebraska + # New Jersey doesn't have a conventional itemized deduction system. + - nm_itemized_deductions # New Mexico + - ny_itemized_deductions # New York + # Ohio doesn't have a conventional itemized deduction system. + - ok_itemized_deductions # Oklahoma + - or_itemized_deductions # Oregon + # Rhode Island doesn't have itemized deductions. + # South Carolina adjusts federal taxable income rather than having a state itemized deduction system. + # Utah adopts federal itemized deductions + - va_itemized_deductions # Virginia + # Vermont doesn't have itemized deductions. + # Wisconsin doesn't have itemized deductions. + # West Virginia doesn't have itemized deductions. + +metadata: + unit: list + period: year + label: State Itemized Deduction Variables diff --git a/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml b/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml new file mode 100644 index 00000000000..6a9b8dfc6a4 --- /dev/null +++ b/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml @@ -0,0 +1,26 @@ +description: All state property tax credits and circuit breaker programs. +values: + 0000-01-01: + - az_property_tax_credit # Arizona Property Tax Credit + - ct_property_tax_credit # Connecticut Property Tax Credit + # Exclude ca_renter_credit as it is for renters, not homeowners. + - dc_ptc # DC Property Tax Credit + # Exclude hi_tax_credit_for_low_income_household_renters as it is for renters, not homeowners. + - ma_senior_circuit_breaker # Massachusetts Senior Circuit Breaker Credit + - me_property_tax_fairness_credit # Maine Property Tax Fairness Credit + - mi_homestead_property_tax_credit # Michigan homestead property tax credit + - mo_property_tax_credit # Missouri property tax credit + - mt_elderly_homeowner_or_renter_credit # Montana Elderly Homeowner/Renter Credit + - nj_property_tax_credit # New Jersey property tax credit + - nm_property_tax_rebate # New Mexico property tax rebate + - ny_real_property_tax_credit # New York real property tax credit + - ri_property_tax_credit # Rhode Island property tax credit + # Omit vt_renter_credit + - wi_homestead_credit # Wisconsin homestead credit + - wi_property_tax_credit # Wisconsin property tax credit + - wv_homestead_excess_property_tax_credit # West Virginia + +metadata: + unit: list + period: year + label: State Property Tax Credits and Circuit Breakers diff --git a/policyengine_us/parameters/gov/states/household/state_standard_deductions.yaml b/policyengine_us/parameters/gov/states/household/state_standard_deductions.yaml new file mode 100644 index 00000000000..1b6be0515d8 --- /dev/null +++ b/policyengine_us/parameters/gov/states/household/state_standard_deductions.yaml @@ -0,0 +1,48 @@ +description: All state standard deduction variables. +values: + 0000-01-01: + - al_standard_deduction # Alabama + - ar_standard_deduction # Arkansas + - az_standard_deduction # Arizona + - ca_standard_deduction # California + # Connecticut adopts federal standard deduction + - dc_standard_deduction # DC + - de_standard_deduction # Delaware + - ga_standard_deduction # Georgia + - hi_standard_deduction # Hawaii + - ia_standard_deduction # Iowa + # Idaho adopts federal standard deduction. + # Illinois doesn't have a standard deduction. + # Indiana doesn't have deductions (taxes AGI directly). + - ks_standard_deduction # Kansas + - ky_standard_deduction # Kentucky + - la_standard_deduction # Louisiana + # Massachusetts doesn't have deductions in a standard form. + - md_standard_deduction # Maryland + # Maine adopts federal standard deduction. + - mi_standard_deduction # Michigan + - mn_standard_deduction # Minnesota + # Missouri adopts federal standard deduction + - ms_standard_deduction # Mississippi + - mt_standard_deduction # Montana + - nc_standard_deduction # North Carolina + # North Dakota adopts federal deductions. + - ne_standard_deduction # Nebraska + # New Jersey doesn't have a standard deduction. + # New Mexico adopts the federal standard deduction. + - ny_standard_deduction # New York + # Ohio doesn't have a conventional deduction system. + - ok_standard_deduction # Oklahoma + - or_standard_deduction # Oregon + - ri_standard_deduction # Rhode Island + # South Carolina adjusts federal taxable income rather than having a state standard deduction. + # Utah adopts federal standard deduction + - va_standard_deduction # Virginia + - vt_standard_deduction # Vermont + - wi_standard_deduction # Wisconsin + # West Virginia doesn't have a standard deduction. + +metadata: + unit: list + period: year + label: State Standard Deduction Variables diff --git a/policyengine_us/parameters/gov/states/household/state_taxable_incomes.yaml b/policyengine_us/parameters/gov/states/household/state_taxable_incomes.yaml new file mode 100644 index 00000000000..8f4944387e4 --- /dev/null +++ b/policyengine_us/parameters/gov/states/household/state_taxable_incomes.yaml @@ -0,0 +1,49 @@ +description: All state taxable income variables. +values: + 0000-01-01: + - al_taxable_income # Alabama + - ar_taxable_income # Arkansas + - az_taxable_income # Arizona + - ca_taxable_income # California + - co_taxable_income # Colorado + - ct_taxable_income # Connecticut + - dc_taxable_income # DC + - de_taxable_income # Delaware + - ga_taxable_income # Georgia + - hi_taxable_income # Hawaii + - ia_taxable_income # Iowa + - id_taxable_income # Idaho + - il_taxable_income # Illinois + - in_agi # Indiana taxes AGI directly. + - ks_taxable_income # Kansas + - ky_taxable_income # Kentucky + - la_taxable_income # Louisiana + # Massachusetts has multiple taxable income variables. + - md_taxable_income # Maryland + - me_taxable_income # Maine + - mi_taxable_income # Michigan + - mn_taxable_income # Minnesota + - mo_taxable_income # Missouri + - ms_taxable_income # Mississippi + - mt_taxable_income # Montana + - nc_taxable_income # North Carolina + - nd_taxable_income # North Dakota + - ne_taxable_income # Nebraska + - nj_taxable_income # New Jersey + - nm_taxable_income # New Mexico + - ny_taxable_income # New York + - oh_taxable_income # Ohio + - ok_taxable_income # Oklahoma + - or_taxable_income # Oregon + - ri_taxable_income # Rhode Island + - sc_taxable_income # South Carolina + - ut_taxable_income # Utah + - va_taxable_income # Virginia + - vt_taxable_income # Vermont + - wi_taxable_income # Wisconsin + - wv_taxable_income # West Virginia + +metadata: + unit: list + period: year + label: State Taxable Income Variables diff --git a/policyengine_us/parameters/gov/states/household/states_with_married_filing_separately_on_same_return.yaml b/policyengine_us/parameters/gov/states/household/states_with_married_filing_separately_on_same_return.yaml new file mode 100644 index 00000000000..8155f434706 --- /dev/null +++ b/policyengine_us/parameters/gov/states/household/states_with_married_filing_separately_on_same_return.yaml @@ -0,0 +1,14 @@ +description: States that allow married couples to file separately on the same return. +values: + 0000-01-01: + - ar + - de + - ia + - ky + - ms + - mt + +metadata: + unit: list + period: year + label: States with married filing separately on the same return diff --git a/policyengine_us/parameters/gov/states/in/tax/income/deductions/deductions.yaml b/policyengine_us/parameters/gov/states/in/tax/income/deductions/deductions.yaml new file mode 100644 index 00000000000..8ea413b5a48 --- /dev/null +++ b/policyengine_us/parameters/gov/states/in/tax/income/deductions/deductions.yaml @@ -0,0 +1,47 @@ +description: Indiana provides the following deductions. +values: + 2021-01-01: + - in_renters_deduction + - in_homeowners_property_tax_deduction + - salt_refund_last_year + - us_govt_interest + - tax_unit_taxable_social_security # includes railroad retirement benefits + - in_military_service_deduction + - in_nonpublic_school_deduction + - in_nol + - in_unemployment_compensation_deduction + - in_other_deductions + + 2023-01-01: + # IC 6-3-2-6 + - in_renters_deduction + # IC 6-1.1 + - in_homeowners_property_tax_deduction + # IC 6-3.1-19-1 + - salt_refund_last_year + # IC 6-8-5-1 + - us_govt_interest + # US Code 26-A-1-B-II-§86 + - tax_unit_taxable_social_security # includes railroad retirement benefits + # IC 6-3-2-4-(a)(1) + - in_military_service_deduction + # IC 6-3-2-22-(d)(1) + - in_nonpublic_school_deduction + # IC 6-3-2-2.5 + - in_nol + # IC 6-3-2-10 + - in_unemployment_compensation_deduction + # IC 6-3-2 + - in_other_deductions + # IC 6-3-2-4 (b) + - military_basic_pay + +metadata: + unit: list + Period: year + label: Indiana Deductions + reference: + - title: Indiana General Assembly Legal Code Title 6 Taxation + href: http://iga.in.gov/legislative/laws/2021/ic/titles/006#6-3 + - title: U.S. Code + href: https://www.law.cornell.edu/uscode/text diff --git a/policyengine_us/parameters/gov/states/md/tax/income/deductions/standard/max.yaml b/policyengine_us/parameters/gov/states/md/tax/income/deductions/standard/max.yaml index 244c8dbbebb..148f0e2b85d 100644 --- a/policyengine_us/parameters/gov/states/md/tax/income/deductions/standard/max.yaml +++ b/policyengine_us/parameters/gov/states/md/tax/income/deductions/standard/max.yaml @@ -8,6 +8,8 @@ metadata: reference: - title: Maryland 2023 State & Local Tax Forms & Instructions href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=19 + - title: Maryland 2024 Nonresident Tax Forms & Instructions (15) + href: https://www.marylandtaxes.gov/forms/24-forms/Nonresident-Booklet.pdf#page=13 - title: "MD Code, Tax - General, § 10-217 (c)(1)" href: https://govt.westlaw.com/mdc/Document/NC8EB19606F6911E8A99BCF2C90B83D38?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I552E3B107DF711ECA8F2FF3A9E62BB69 - title: "MD Code, Tax - General, § 10-217 (d)(1)-(d)(3)" @@ -23,6 +25,7 @@ JOINT: 2021-01-01: 4_700 2022-01-01: 4_850 2023-01-01: 5_150 + 2024-01-01: 5_450 metadata: uprating: parameter: gov.irs.uprating @@ -35,6 +38,7 @@ HEAD_OF_HOUSEHOLD: 2021-01-01: 4_700 2022-01-01: 4_850 2023-01-01: 5_150 + 2024-01-01: 5_450 metadata: uprating: parameter: gov.irs.uprating @@ -47,6 +51,7 @@ SURVIVING_SPOUSE: 2021-01-01: 4_700 2022-01-01: 4_850 2023-01-01: 5_150 + 2024-01-01: 5_450 metadata: uprating: parameter: gov.irs.uprating @@ -59,6 +64,7 @@ SINGLE: 2021-01-01: 2_350 2022-01-01: 2_400 2023-01-01: 2_550 + 2024-01-01: 2_700 metadata: uprating: parameter: gov.irs.uprating @@ -71,6 +77,7 @@ SEPARATE: 2021-01-01: 2_350 2022-01-01: 2_400 2023-01-01: 2_550 + 2024-01-01: 2_700 metadata: uprating: parameter: gov.irs.uprating diff --git a/policyengine_us/parameters/gov/states/md/tax/income/deductions/standard/min.yaml b/policyengine_us/parameters/gov/states/md/tax/income/deductions/standard/min.yaml index 53be749bf43..c4909bb33c2 100644 --- a/policyengine_us/parameters/gov/states/md/tax/income/deductions/standard/min.yaml +++ b/policyengine_us/parameters/gov/states/md/tax/income/deductions/standard/min.yaml @@ -6,8 +6,12 @@ metadata: breakdown: - filing_status reference: + - title: Maryland 2022 State & Local Tax Forms & Instructions + href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=18 - title: Maryland 2023 State & Local Tax Forms & Instructions href: https://www.marylandtaxes.gov/forms/23_forms/Resident-Booklet.pdf#page=19 + - title: Maryland 2024 Nonresident Tax Forms & Instructions (15) + href: https://www.marylandtaxes.gov/forms/24-forms/Nonresident-Booklet.pdf#page=12 - title: MD Code, Tax - General, § 10-217 (c)(1) href: https://govt.westlaw.com/mdc/Document/NC8EB19606F6911E8A99BCF2C90B83D38?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I552E3B107DF711ECA8F2FF3A9E62BB69 - title: MD Code, Tax - General, § 10-217 (d)(1)-(d)(3) @@ -16,8 +20,6 @@ metadata: href: https://govt.westlaw.com/mdc/Document/NC8EB19606F6911E8A99BCF2C90B83D38?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)#co_anchor_I552E3B107DF711ECA8F2FF3A9E62BB69 - title: Maryland new tax year update -exemptions and deductions href: https://www.marylandtaxes.gov/new-tax-year-update.php#:~:text=Standard%20Deduction%20%2D%20The%20tax%20year,spouse%2C%20and%20taxpayers%20filing%20jointly. - - title: Maryland 2022 State & Local Tax Forms & Instructions - href: https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=18 JOINT: values: @@ -25,6 +27,7 @@ JOINT: 2021-01-01: 3_100 2022-01-01: 3_200 2023-01-01: 3_450 + 2024-01-01: 3_650 metadata: uprating: parameter: gov.irs.uprating @@ -37,6 +40,7 @@ HEAD_OF_HOUSEHOLD: 2021-01-01: 3_100 2022-01-01: 3_200 2023-01-01: 3_450 + 2024-01-01: 3_650 metadata: uprating: parameter: gov.irs.uprating @@ -49,6 +53,7 @@ SURVIVING_SPOUSE: 2021-01-01: 3_100 2022-01-01: 3_200 2023-01-01: 3_450 + 2024-01-01: 3_650 metadata: uprating: parameter: gov.irs.uprating @@ -61,6 +66,7 @@ SINGLE: 2021-01-01: 1_550 2022-01-01: 1_600 2023-01-01: 1_700 + 2024-01-01: 1_800 metadata: uprating: parameter: gov.irs.uprating @@ -73,6 +79,7 @@ SEPARATE: 2021-01-01: 1_550 2022-01-01: 1_600 2023-01-01: 1_700 + 2024-01-01: 1_800 metadata: uprating: parameter: gov.irs.uprating diff --git a/policyengine_us/parameters/gov/states/mo/tax/income/credits/wftc/match.yaml b/policyengine_us/parameters/gov/states/mo/tax/income/credits/wftc/match.yaml index f4d8b60a764..48e927fcc71 100644 --- a/policyengine_us/parameters/gov/states/mo/tax/income/credits/wftc/match.yaml +++ b/policyengine_us/parameters/gov/states/mo/tax/income/credits/wftc/match.yaml @@ -1,10 +1,16 @@ -description: Missouri's Working Families Tax Credit matches this percent of the federal EITC. +description: Missouri matches this percentage of the federal Earned Income Tax Credit under the Working Families Tax Credit. values: 2023-01-01: 0.1 + 2024-01-01: 0.2 metadata: unit: /1 label: Missouri EITC match period: year reference: - - title: 143.177. Missouri working family tax credit act + # Statute specifies initial 10% rate and allows increases up to 20% maximum, + # subject to state revenue conditions. + # Specific timing of increase to 20% is not defined in statute, but confirmed in 2024 changes. + - title: 143.177. Missouri working family tax credit act (3)(2) href: https://revisor.mo.gov/main/OneSection.aspx?section=143.177&bid=49978&hl= + - title: Missouri Individual Income Tax Changes 2024 + href: https://dor.mo.gov/taxation/individual/tax-types/income/year-changes/ diff --git a/policyengine_us/parameters/gov/states/mo/tax/income/deductions/mo_ss_or_ssd_deduction_allowance.yaml b/policyengine_us/parameters/gov/states/mo/tax/income/deductions/mo_ss_or_ssd_deduction_allowance.yaml index f172b0ac6ee..2ee0fd8eb03 100644 --- a/policyengine_us/parameters/gov/states/mo/tax/income/deductions/mo_ss_or_ssd_deduction_allowance.yaml +++ b/policyengine_us/parameters/gov/states/mo/tax/income/deductions/mo_ss_or_ssd_deduction_allowance.yaml @@ -12,7 +12,7 @@ SURVIVING_SPOUSE: metadata: unit: currency-USD period: year - label: Missour social security or social security disability deduction allowance + label: Missouri social security or social security disability deduction allowance reference: - title: 2021 Form MO-1040 Individual Income Tax Long Form Instructions href: https://dor.mo.gov/forms/MO-1040%20Instructions_2021.pdf#page=3 diff --git a/policyengine_us/parameters/gov/states/mo/tax/income/deductions/mo_ss_or_ssdi_exemption_threshold.yaml b/policyengine_us/parameters/gov/states/mo/tax/income/deductions/mo_ss_or_ssdi_exemption_threshold.yaml index 576248eda58..bd3e7e385a3 100644 --- a/policyengine_us/parameters/gov/states/mo/tax/income/deductions/mo_ss_or_ssdi_exemption_threshold.yaml +++ b/policyengine_us/parameters/gov/states/mo/tax/income/deductions/mo_ss_or_ssdi_exemption_threshold.yaml @@ -12,7 +12,7 @@ SURVIVING_SPOUSE: metadata: unit: currency-USD period: year - label: Missour social security or social security disability income exemption threshold + label: Missouri social security or social security disability income exemption threshold reference: - title: 2021 Form MO-1040 Individual Income Tax Long Form href: https://dor.mo.gov/forms/MO-A_2021.pdf#page=3 diff --git a/policyengine_us/parameters/gov/states/mo/tax/income/rates.yaml b/policyengine_us/parameters/gov/states/mo/tax/income/rates.yaml index b928d9a59d5..44c78762f79 100644 --- a/policyengine_us/parameters/gov/states/mo/tax/income/rates.yaml +++ b/policyengine_us/parameters/gov/states/mo/tax/income/rates.yaml @@ -93,7 +93,9 @@ brackets: uprating: gov.irs.uprating rate: 2019-01-01: 0.05 - 2023-01-01: 0.0495 + 2023-01-01: 0.0495 + 2024-01-01: 0.048 + 2025-01-01: 0.047 - threshold: values: 2019-01-01: 8_424 @@ -106,8 +108,17 @@ brackets: rate: 2019-01-01: 0.054 2022-01-01: 0.053 - 2023-01-01: 0.0495 - 2024-01-01: 0.048 + 2023-01-01: 0.0495 # Set by 143.011.2(1) + 2024-01-01: 0.048 # Reduced by 0.15% per 143.011.3(1) + # First 0.1% reduction allowed per 143.011.4(1), confirmed in 2025 + # withholding formula. Statutes allow further reductions to 0.046 in 2026 + # and 0.045 in 2027, but we assume revenue conditions are not met until confirmed. + 2025-01-01: 0.047 + # We model rates through 2025 based on 143.011: initial 4.95% rate in 2023 + # (subsection 2(1)), 0.15% reduction to 4.8% in 2024 (subsection 3(1)), and first + # 0.1% reduction to 4.7% in 2025 (subsection 4(1)). We do not model potential + # further 0.1% reductions allowed in subsection 4 until revenue conditions are + # confirmed met. metadata: reference: @@ -123,6 +134,11 @@ metadata: href: https://revisor.mo.gov/main/OneSection.aspx?section=143.011&bid=51511&hl= - title: 2024 Missouri Withholding Tax Formula href: https://dor.mo.gov/forms/Withholding%20Formula_2024.pdf#page=2 + - title: Missouri Individual Income Tax Changes 2024 + href: https://dor.mo.gov/taxation/individual/tax-types/income/year-changes/ + - title: 2025 Missouri Withholding Tax Formula + href: https://dor.mo.gov/forms/Withholding%20Table%20-%20Weekly_2025.pdf#page=2 + label: Missouri resident individual tax rates type: marginal_rate threshold_unit: currency-USD diff --git a/policyengine_us/parameters/gov/states/mt/tax/income/main/head_of_household.yaml b/policyengine_us/parameters/gov/states/mt/tax/income/main/head_of_household.yaml index 811f106ce1c..02c39f9b33e 100644 --- a/policyengine_us/parameters/gov/states/mt/tax/income/main/head_of_household.yaml +++ b/policyengine_us/parameters/gov/states/mt/tax/income/main/head_of_household.yaml @@ -13,6 +13,8 @@ metadata: href: https://mtrevenue.gov/wp-content/uploads/mdocs/form%202%202021%20instructions.pdf#page=15 - title: 2023 Montana income tax form 2 Instructions href: https://mtrevenue.gov/wp-content/uploads/dlm_uploads/2023/12/Form_2_2023_Instructions.pdf#page=18 + - title: 2024 Montana income tax tables + href: https://mtrevenue.gov/wp-content/uploads/dlm_uploads/2024/12/2024-Tax-Tables.pdf # Before 2024 Montana has a consistent tax rate for each filing status # After 2024 the tax rate depends on the filing status brackets: @@ -28,7 +30,7 @@ brackets: 2024-01-01: 30_750 rate: 2021-01-01: 0.02 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 5_500 2022-01-01: 5_800 @@ -36,7 +38,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.03 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 8_400 2022-01-01: 8_900 @@ -44,7 +46,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.04 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 11_400 2022-01-01: 12_000 @@ -52,7 +54,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.05 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 14_600 2022-01-01: 15_400 @@ -60,7 +62,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.06 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 18_800 2022-01-01: 19_800 @@ -69,4 +71,4 @@ brackets: rate: 2021-01-01: 0.069 2022-01-01: 0.0675 - 2024-01-01: 0.065 + 2024-01-01: 0.059 diff --git a/policyengine_us/parameters/gov/states/mt/tax/income/main/joint.yaml b/policyengine_us/parameters/gov/states/mt/tax/income/main/joint.yaml index 519d324e3a8..163c4794563 100644 --- a/policyengine_us/parameters/gov/states/mt/tax/income/main/joint.yaml +++ b/policyengine_us/parameters/gov/states/mt/tax/income/main/joint.yaml @@ -13,6 +13,8 @@ metadata: href: https://mtrevenue.gov/wp-content/uploads/mdocs/form%202%202021%20instructions.pdf#page=15 - title: 2023 Montana income tax form 2 Instructions href: https://mtrevenue.gov/wp-content/uploads/dlm_uploads/2023/12/Form_2_2023_Instructions.pdf#page=18 + - title: 2024 Montana income tax tables + href: https://mtrevenue.gov/wp-content/uploads/dlm_uploads/2024/12/2024-Tax-Tables.pdf # Before 2024 Montana has a consistent tax rate for each filing status # After 2024 the tax rate depends on the filing status brackets: @@ -28,7 +30,7 @@ brackets: 2024-01-01: 41_000 rate: 2021-01-01: 0.02 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 5_500 2022-01-01: 5_800 @@ -36,7 +38,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.03 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 8_400 2022-01-01: 8_900 @@ -44,7 +46,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.04 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 11_400 2022-01-01: 12_000 @@ -52,7 +54,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.05 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 14_600 2022-01-01: 15_400 @@ -60,7 +62,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.06 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 18_800 2022-01-01: 19_800 @@ -69,4 +71,4 @@ brackets: rate: 2021-01-01: 0.069 2022-01-01: 0.0675 - 2024-01-01: 0.065 + 2024-01-01: 0.059 diff --git a/policyengine_us/parameters/gov/states/mt/tax/income/main/separate.yaml b/policyengine_us/parameters/gov/states/mt/tax/income/main/separate.yaml index a9cdb4dd734..030f0203762 100644 --- a/policyengine_us/parameters/gov/states/mt/tax/income/main/separate.yaml +++ b/policyengine_us/parameters/gov/states/mt/tax/income/main/separate.yaml @@ -13,6 +13,8 @@ metadata: href: https://mtrevenue.gov/wp-content/uploads/mdocs/form%202%202021%20instructions.pdf#page=15 - title: 2023 Montana income tax form 2 Instructions href: https://mtrevenue.gov/wp-content/uploads/dlm_uploads/2023/12/Form_2_2023_Instructions.pdf#page=18 + - title: 2024 Montana income tax tables + href: https://mtrevenue.gov/wp-content/uploads/dlm_uploads/2024/12/2024-Tax-Tables.pdf # Before 2024 Montana has a consistent tax rate for each filing status # After 2024 the tax rate depends on the filing status brackets: @@ -28,7 +30,7 @@ brackets: 2024-01-01: 20_500 rate: 2021-01-01: 0.02 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 5_500 2022-01-01: 5_800 @@ -36,7 +38,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.03 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 8_400 2022-01-01: 8_900 @@ -44,7 +46,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.04 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 11_400 2022-01-01: 12_000 @@ -52,7 +54,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.05 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 14_600 2022-01-01: 15_400 @@ -60,7 +62,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.06 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 18_800 2022-01-01: 19_800 @@ -69,4 +71,4 @@ brackets: rate: 2021-01-01: 0.069 2022-01-01: 0.0675 - 2024-01-01: 0.065 + 2024-01-01: 0.059 diff --git a/policyengine_us/parameters/gov/states/mt/tax/income/main/single.yaml b/policyengine_us/parameters/gov/states/mt/tax/income/main/single.yaml index 5e54aae8ba2..fa9dcd0f825 100644 --- a/policyengine_us/parameters/gov/states/mt/tax/income/main/single.yaml +++ b/policyengine_us/parameters/gov/states/mt/tax/income/main/single.yaml @@ -13,6 +13,8 @@ metadata: href: https://mtrevenue.gov/wp-content/uploads/mdocs/form%202%202021%20instructions.pdf#page=15 - title: 2023 Montana income tax form 2 Instructions href: https://mtrevenue.gov/wp-content/uploads/dlm_uploads/2023/12/Form_2_2023_Instructions.pdf#page=18 + - title: 2024 Montana income tax tables + href: https://mtrevenue.gov/wp-content/uploads/dlm_uploads/2024/12/2024-Tax-Tables.pdf # Before 2024 Montana has a consistent tax rate for each filing status # After 2024 the tax rate depends on the filing status brackets: @@ -28,7 +30,7 @@ brackets: 2024-01-01: 20_500 rate: 2021-01-01: 0.02 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 5_500 2022-01-01: 5_800 @@ -36,7 +38,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.03 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 8_400 2022-01-01: 8_900 @@ -44,7 +46,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.04 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 11_400 2022-01-01: 12_000 @@ -52,7 +54,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.05 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 14_600 2022-01-01: 15_400 @@ -60,7 +62,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.06 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 18_800 2022-01-01: 19_800 @@ -69,4 +71,4 @@ brackets: rate: 2021-01-01: 0.069 2022-01-01: 0.0675 - 2024-01-01: 0.065 + 2024-01-01: 0.059 diff --git a/policyengine_us/parameters/gov/states/mt/tax/income/main/widow.yaml b/policyengine_us/parameters/gov/states/mt/tax/income/main/surviving_spouse.yaml similarity index 82% rename from policyengine_us/parameters/gov/states/mt/tax/income/main/widow.yaml rename to policyengine_us/parameters/gov/states/mt/tax/income/main/surviving_spouse.yaml index 7b42efe8a9d..fc64a9abc7c 100644 --- a/policyengine_us/parameters/gov/states/mt/tax/income/main/widow.yaml +++ b/policyengine_us/parameters/gov/states/mt/tax/income/main/surviving_spouse.yaml @@ -1,9 +1,9 @@ -description: Montana taxes widow(er) filers at this rate structure. +description: Montana taxes surviving spouses at this rate structure. metadata: type: marginal_rate threshold_unit: currency-USD rate_unit: /1 - label: Montana income tax rate widow(er) filers + label: Montana income tax surviving spouses reference: - title: Montana Code Annotated 2021 Title 15, Chapter 30, Part 21, 15-30-2103 href: https://leg.mt.gov/bills/mca/title_0150/chapter_0300/part_0210/section_0030/0150-0300-0210-0030.html @@ -13,6 +13,8 @@ metadata: href: https://mtrevenue.gov/wp-content/uploads/mdocs/form%202%202021%20instructions.pdf#page=15 - title: 2023 Montana income tax form 2 Instructions href: https://mtrevenue.gov/wp-content/uploads/dlm_uploads/2023/12/Form_2_2023_Instructions.pdf#page=18 + - title: 2024 Montana income tax tables + href: https://mtrevenue.gov/wp-content/uploads/dlm_uploads/2024/12/2024-Tax-Tables.pdf # Before 2024 Montana has a consistent tax rate for each filing status # After 2024 the tax rate depends on the filing status brackets: @@ -28,7 +30,7 @@ brackets: 2024-01-01: 41_000 rate: 2021-01-01: 0.02 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 5_500 2022-01-01: 5_800 @@ -36,7 +38,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.03 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 8_400 2022-01-01: 8_900 @@ -44,7 +46,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.04 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 11_400 2022-01-01: 12_000 @@ -52,7 +54,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.05 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 14_600 2022-01-01: 15_400 @@ -60,7 +62,7 @@ brackets: 2024-01-01: .inf rate: 2021-01-01: 0.06 - 2024-01-01: 0.065 + 2024-01-01: 0.059 - threshold: 2021-01-01: 18_800 2022-01-01: 19_800 @@ -69,4 +71,4 @@ brackets: rate: 2021-01-01: 0.069 2022-01-01: 0.0675 - 2024-01-01: 0.065 + 2024-01-01: 0.059 diff --git a/policyengine_us/parameters/gov/states/ne/tax/income/agi/subtractions/military_retirement/age_threshold.yaml b/policyengine_us/parameters/gov/states/ne/tax/income/agi/subtractions/military_retirement/age_threshold.yaml new file mode 100644 index 00000000000..9c75a4b30ff --- /dev/null +++ b/policyengine_us/parameters/gov/states/ne/tax/income/agi/subtractions/military_retirement/age_threshold.yaml @@ -0,0 +1,18 @@ +description: Nebraska limits the military retirement benefits to filers this age or older. + +values: + 2015-01-01: 67 + +metadata: + unit: year + period: year + label: Nebraska military retirement benefits age threshold + reference: + - title: 2021 Nebraska Individual Income Tax Booklet + href: https://revenue.nebraska.gov/sites/revenue.nebraska.gov/files/doc/f_1040n_booklet.pdf#page=16 + - title: 2022 NE income tax form and instruction booklet + href: https://revenue.nebraska.gov/sites/revenue.nebraska.gov/files/doc/2022_Ne_Individual_Income_Tax_Booklet_8-307-2022_final_8.pdf#page=3 + - title: 2023 Nebraska Individual Income Tax Booklet + href: https://revenue.nebraska.gov/sites/revenue.nebraska.gov/files/doc/tax-forms/2023/incometax/f_1040n_booklet_2023_Final.pdf#page=19 + - title: Nebraska Revised Statute 77-2716 (15)(a) + href: https://nebraskalegislature.gov/laws/statutes.php?statute=77-2716 diff --git a/policyengine_us/parameters/gov/states/ne/tax/income/agi/subtractions/military_retirement/fraction.yaml b/policyengine_us/parameters/gov/states/ne/tax/income/agi/subtractions/military_retirement/fraction.yaml new file mode 100644 index 00000000000..912f4d10821 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ne/tax/income/agi/subtractions/military_retirement/fraction.yaml @@ -0,0 +1,19 @@ +description: Nebraska subtracts this fraction of military retirement benefits from federal adjusted gross income. +values: + 2021-01-01: 0.4 + 2022-01-01: 1 + +metadata: + label: Nebraska military retirement subtraction fraction + unit: /1 + period: year + reference: + - title: 2021 Nebraska Individual Income Tax Booklet + href: https://revenue.nebraska.gov/sites/revenue.nebraska.gov/files/doc/f_1040n_booklet.pdf#page=16 + - title: 2022 NE income tax form and instruction booklet + href: https://revenue.nebraska.gov/sites/revenue.nebraska.gov/files/doc/2022_Ne_Individual_Income_Tax_Booklet_8-307-2022_final_8.pdf#page=3 + - title: 2023 Nebraska Individual Income Tax Booklet + href: https://revenue.nebraska.gov/sites/revenue.nebraska.gov/files/doc/tax-forms/2023/incometax/f_1040n_booklet_2023_Final.pdf#page=19 + - title: Nebraska Revised Statute 77-2716(15) + href: https://nebraskalegislature.gov/laws/statutes.php?statute=77-2716 + diff --git a/policyengine_us/parameters/gov/states/ne/tax/income/agi/subtractions/subtractions.yaml b/policyengine_us/parameters/gov/states/ne/tax/income/agi/subtractions/subtractions.yaml index bbaf5b84e5e..36805de55a8 100644 --- a/policyengine_us/parameters/gov/states/ne/tax/income/agi/subtractions/subtractions.yaml +++ b/policyengine_us/parameters/gov/states/ne/tax/income/agi/subtractions/subtractions.yaml @@ -2,9 +2,11 @@ description: Nebraska subtracts these sources from adjusted gross income. values: 2021-01-01: - ne_social_security_subtraction + - ne_military_retirement_subtraction 2024-01-01: - ne_social_security_subtraction - taxable_public_pension_income + - ne_military_retirement_subtraction metadata: diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/credits/cdcc/rate.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/credits/cdcc/rate.yaml index 8aa0eff7622..f875790696e 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/credits/cdcc/rate.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/credits/cdcc/rate.yaml @@ -14,6 +14,8 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=44 - title: 2023 Instructions for Form NJ-1040 (line 64) href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=45 + - title: 2024 Instructions for Form NJ-1040 (line 64) + href: https://www.nj.gov/treasury/taxation/pdf/current/1040i.pdf#page=46 brackets: - threshold: 2021-01-01: -.inf diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/credits/ctc/age_limit.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/credits/ctc/age_limit.yaml index 26e4f7fcb12..2e1251638e8 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/credits/ctc/age_limit.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/credits/ctc/age_limit.yaml @@ -10,6 +10,9 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=44 - title: 2023 NJ-1040 Instructions (line 65) href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=46 + - title: 2024 NJ-1040 Instructions (line 65) + href: https://www.nj.gov/treasury/taxation/pdf/current/1040i.pdf#page=46 # New Jersey child tax credit was introduced in 2022 + values: 2022-01-01: 6 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/credits/ctc/amount.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/credits/ctc/amount.yaml index 0ca39fcfdcd..00848d5a2f9 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/credits/ctc/amount.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/credits/ctc/amount.yaml @@ -12,7 +12,10 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=44 - title: 2023 NJ-1040 Instructions (line 65) href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=46 + - title: 2024 NJ-1040 Instructions (line 65) + href: https://www.nj.gov/treasury/taxation/pdf/current/1040i.pdf#page=46 # New Jersey child tax credit was introduced in 2022 + brackets: - threshold: 2022-01-01: 0 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/credits/eitc/eligibility/age/min.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/credits/eitc/eligibility/age/min.yaml index 4e0d8421a4a..64ccf59d605 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/credits/eitc/eligibility/age/min.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/credits/eitc/eligibility/age/min.yaml @@ -12,5 +12,7 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=43 - title: 2023 NJ-1040 Instructions (line 58) href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=45 + - title: 2024 NJ-1040 Instructions (line 58) + href: https://www.nj.gov/treasury/taxation/pdf/current/1040i.pdf#page=44 values: 2021-01-01: 18 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/credits/eitc/match.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/credits/eitc/match.yaml index af61381baac..97aed898d1f 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/credits/eitc/match.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/credits/eitc/match.yaml @@ -12,6 +12,8 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=43 - title: 2023 NJ-1040 Instructions (line 58) href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=45 + - title: 2024 NJ-1040 Instructions (line 58) + href: https://www.nj.gov/treasury/taxation/pdf/current/1040i.pdf#page=44 values: 2000-01-01: 0.1 2001-01-01: 0.15 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/credits/property_tax/age_threshold.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/credits/property_tax/age_threshold.yaml index a04e76450e2..b0b4b346c9f 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/credits/property_tax/age_threshold.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/credits/property_tax/age_threshold.yaml @@ -12,5 +12,7 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=50 - title: 2023 NJ-1040 Instructions - Property Tax Credit href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=52 + - title: 2024 NJ-1040 Instructions - Property Tax Credit + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=51 values: 2021-01-01: 65 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/credits/property_tax/amount.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/credits/property_tax/amount.yaml index b750832be26..a57f28f2dc5 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/credits/property_tax/amount.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/credits/property_tax/amount.yaml @@ -8,6 +8,8 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=42 - title: 2023 NJ-1040 Instructions (line 56) href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=44 + - title: 2024 NJ-1040 Instructions (line 56) + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=51 unit: currency-USD period: year label: New Jersey property tax credit amount diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/credits/property_tax/income_limit.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/credits/property_tax/income_limit.yaml index e2bad0e3236..c0cf493f53b 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/credits/property_tax/income_limit.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/credits/property_tax/income_limit.yaml @@ -12,6 +12,8 @@ metadata: href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=52 - title: NJ Income Tax - Property Tax Deduction/Credit Eligibility Requirements href: https://www.nj.gov/treasury/taxation/proptaxdeduc_credit.shtml + - title: 2024 NJ-1040 Instructions - Property Tax Credit + href: https://www.nj.gov/treasury/taxation/pdf/current/1040i.pdf#page=51 breakdown: - filing_status diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/deductions/medical_expenses/rate.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/deductions/medical_expenses/rate.yaml new file mode 100644 index 00000000000..b0d719ec9f4 --- /dev/null +++ b/policyengine_us/parameters/gov/states/nj/tax/income/deductions/medical_expenses/rate.yaml @@ -0,0 +1,16 @@ +description: New Jersey deducts from taxable income the excess of medical expenses over this fraction of state adjusted gross income. +metadata: + unit: /1 + period: year + label: New Jersey medical expense deduction rate + reference: + - title: New Jersey Administrative Code 18:35-2.9 (a) + href: https://casetext.com/regulation/new-jersey-administrative-code/title-18-treasury-taxation/chapter-35-new-jersey-gross-income-tax/subchapter-2-exclusions-and-deductions/section-1835-29-medical-expenses-deduction#:~:text=Section%2018%3A35%2D2.9%20%2D%20Medical%20expenses%20deduction%20(a,two%20percent%20of%20gross%20income. + - title: 2024 NJ-1040 Instructions (Worksheet F, Line 2) + href: https://www.nj.gov/treasury/taxation/pdf/current/1040i.pdf#page=25 + - title: 2021 NJ-1040 Instructions (Worksheet F, Line 2) + href: https://www.nj.gov/treasury/taxation/pdf/current/1040i.pdf#page=23 + - title: 2024 NJ-1040 Instructions (Worksheet F, Line 2) + href: https://www.nj.gov/treasury/taxation/pdf/current/1040i.pdf#page=25 +values: + 2021-01-01: 0.02 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/deductions/property_tax/limit.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/deductions/property_tax/limit.yaml index 6cdf1c237e9..52420c70b06 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/deductions/property_tax/limit.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/deductions/property_tax/limit.yaml @@ -10,5 +10,8 @@ metadata: href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=30 - title: 2023 NJ-1040 Instructions (Worksheet H, Line 2) href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=32 + - title: Instructions for Form NJ-1040 (Worksheet H, Line 2) + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=32 + values: 2021-01-01: 15_000 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/deductions/property_tax/qualifying_rent_fraction.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/deductions/property_tax/qualifying_rent_fraction.yaml index 425d201ef4d..eb14fa524c3 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/deductions/property_tax/qualifying_rent_fraction.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/deductions/property_tax/qualifying_rent_fraction.yaml @@ -10,5 +10,7 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=27 - title: 2023 NJ-1040 Instructions (line 40a) href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=28 + - title: 2024 NJ-1040 Instructions (line 40a) + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=30 values: 2021-01-01: 0.18 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/exclusions/retirement/age_threshold.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/exclusions/retirement/age_threshold.yaml index c7f86c6a0df..177134239ec 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/exclusions/retirement/age_threshold.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/exclusions/retirement/age_threshold.yaml @@ -10,5 +10,7 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=22 - title: 2023 NJ-1040 Instructions Line 28a 28b href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=21 + - title: 2024 NJ-1040 Instructions Line 28a 28b + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=22 values: 2021-01-01: 62 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/exclusions/retirement/max_amount.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/exclusions/retirement/max_amount.yaml index 4ec9fd3460b..b2bc368485c 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/exclusions/retirement/max_amount.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/exclusions/retirement/max_amount.yaml @@ -16,6 +16,8 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=22 - title: 2023 NJ-1040 Instructions Line 28a 28b href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=21 + - title: 2024 NJ-1040 Instructions Line 28a 28b + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=22 breakdown: - filing_status SINGLE: diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/exclusions/retirement/other_retirement_income/earned_income_threshold.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/exclusions/retirement/other_retirement_income/earned_income_threshold.yaml index 74875aab01d..bfd30da1bb1 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/exclusions/retirement/other_retirement_income/earned_income_threshold.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/exclusions/retirement/other_retirement_income/earned_income_threshold.yaml @@ -7,5 +7,7 @@ metadata: href: https://www.state.nj.us/treasury/taxation/pdf/other_forms/tgi-ee/2021/1040i.pdf#page=22 - title: 2022 New Jersey Revised Statutes Title 54A - New Jersey Gross Income Tax Act Section 54A:6-15 - Other retirement income. href: https://law.justia.com/codes/new-jersey/2022/title-54a/section-54a-6-15/ + - title: 2024 NJ-1040 Instructions Line 28b + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=22 values: 2021-01-01: 3_000 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/exclusions/retirement/special_exclusion/amount.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/exclusions/retirement/special_exclusion/amount.yaml index e00536ebec1..1c4603d0363 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/exclusions/retirement/special_exclusion/amount.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/exclusions/retirement/special_exclusion/amount.yaml @@ -12,6 +12,9 @@ metadata: href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=24 - title: 2023 NJ-1040 Instructions (line 28b) href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=22 + - title: 2024 NJ-1040 Instructions (line 28b) + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=22 + SINGLE: diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/blind_or_disabled/amount.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/blind_or_disabled/amount.yaml index 695cd04a39e..308099fa8ea 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/blind_or_disabled/amount.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/blind_or_disabled/amount.yaml @@ -12,5 +12,7 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=8 - title: 2023 NJ-1040 Instructions Line 8 href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=8 + - title: 2024 NJ-1040 Instructions Line 8 + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=10 values: 2021-01-01: 1_000 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/dependents/amount.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/dependents/amount.yaml index 9369b039ec0..5f47785479f 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/dependents/amount.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/dependents/amount.yaml @@ -12,5 +12,7 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=8 - title: 2023 NJ-1040 Instructions Line 10-11 href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=8 + - title: 2024 NJ-1040 Instructions Line 10–11 + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=8 values: 2021-01-01: 1_500 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/dependents_attending_college/age_threshold.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/dependents_attending_college/age_threshold.yaml index f868a19eb06..aeb65a75926 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/dependents_attending_college/age_threshold.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/dependents_attending_college/age_threshold.yaml @@ -11,5 +11,7 @@ metadata: href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=8 - title: 2022 NJ-1040 Instructions Line 12 href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=8 + - title: 2024 NJ-1040 Instructions Line 12 + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=10 values: 2021-01-01: 22 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/dependents_attending_college/amount.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/dependents_attending_college/amount.yaml index fc3c28fea75..379ecfa0027 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/dependents_attending_college/amount.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/dependents_attending_college/amount.yaml @@ -12,5 +12,7 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=8 - title: 2023 NJ-1040 Instructions Line 12 href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=8 + - title: 2024 NJ-1040 Instructions Line 12 + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=8 values: 2021-01-01: 1_000 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/regular/amount.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/regular/amount.yaml index 05c2b4ce889..f2f8d8c39f4 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/regular/amount.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/regular/amount.yaml @@ -12,6 +12,9 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=8 - title: 2023 NJ-1040 Instructions Line 6 href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=8 + - title: 2024 NJ-1040 Instructions Line 6 + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=8 + breakdown: - filing_status SINGLE: diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/senior/age_threshold.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/senior/age_threshold.yaml index df4db9ef3e7..fcfef849612 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/senior/age_threshold.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/senior/age_threshold.yaml @@ -12,5 +12,7 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=8 - title: 2023 NJ-1040 Instructions Line 7 href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=8 + - title: 2024 NJ-1040 Instructions Line 7 + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=10 values: 2021-01-01: 65 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/senior/amount.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/senior/amount.yaml index a72d154cc1b..a70b6486b5b 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/senior/amount.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/exemptions/senior/amount.yaml @@ -12,5 +12,7 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/other_forms/tgi-ee/2022/1040i.pdf#page=8 - title: 2023 NJ-1040 Instructions Line 7 href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=8 + - title: 2024 NJ-1040 Instructions Line 7 + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=8 values: 2021-01-01: 1_000 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/filing_threshold.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/filing_threshold.yaml index 9556d509aa3..64a0c6467e5 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/filing_threshold.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/filing_threshold.yaml @@ -11,6 +11,8 @@ metadata: href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=24 - title: NJ Legal Code href: https://lis.njleg.state.nj.us/nxt/gateway.dll?f=templates&fn=default.htm&vid=Publish:10.1048/Enu + - title: 2024 NJ-1040 Instructions (filing threshold) + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=5 SINGLE: 2021-01-01: 10_000 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/main/head_of_household.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/main/head_of_household.yaml index f066a544bcc..cebfc6a85b2 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/main/head_of_household.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/main/head_of_household.yaml @@ -11,6 +11,8 @@ metadata: href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=54 - title: New Jersey 2022 Individual Income Tax Form 1040ME, Tax Table for individuals earning more than or equal to $100k href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=63 + - title: 2024 New Jersey Gross Income Tax — Tax Rate Schedules + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=65 brackets: - threshold: 1991-01-01: 0 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/main/joint.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/main/joint.yaml index 276e1b92691..642c9b0b21c 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/main/joint.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/main/joint.yaml @@ -11,6 +11,8 @@ metadata: href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=54 - title: New Jersey 2022 Individual Income Tax Form 1040ME, Tax Table for individuals earning more than or equal to $100k href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=63 + - title: 2024 New Jersey Gross Income Tax — Tax Rate Schedules + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=65 brackets: - threshold: 1991-01-01: 0 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/main/separate.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/main/separate.yaml index d20d9dee58b..182b6bf55d8 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/main/separate.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/main/separate.yaml @@ -11,6 +11,8 @@ metadata: href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=54 - title: New Jersey 2022 Individual Income Tax Form 1040ME, Tax Table for individuals earning more than or equal to $100k href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=63 + - title: 2024 New Jersey Gross Income Tax — Tax Rate Schedules + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=65 brackets: - threshold: 1991-01-01: 0 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/main/single.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/main/single.yaml index d20d9dee58b..6e7320b536b 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/main/single.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/main/single.yaml @@ -11,6 +11,8 @@ metadata: href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=54 - title: New Jersey 2022 Individual Income Tax Form 1040ME, Tax Table for individuals earning more than or equal to $100k href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=63 + - title: 2024 NJ-1040 Instructions (line 26) + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=65 brackets: - threshold: 1991-01-01: 0 diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/main/widow.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/main/widow.yaml index a4738291d2f..a19232daf66 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/main/widow.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/main/widow.yaml @@ -11,6 +11,8 @@ metadata: href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=54 - title: New Jersey 2022 Individual Income Tax Form 1040ME, Tax Table for individuals earning more than or equal to $100k href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=63 + - title: 2024 NJ-1040 Instructions (line 26) + href: https://www.state.nj.us/treasury/taxation/pdf/current/1040i.pdf#page=65 brackets: - threshold: 1991-01-01: 0 diff --git a/policyengine_us/parameters/gov/states/ny/tax/income/deductions/itemized/college_tuition_max.yaml b/policyengine_us/parameters/gov/states/ny/tax/income/college_tuition/cap.yaml similarity index 62% rename from policyengine_us/parameters/gov/states/ny/tax/income/deductions/itemized/college_tuition_max.yaml rename to policyengine_us/parameters/gov/states/ny/tax/income/college_tuition/cap.yaml index 63bbec663c3..0a9f7b99f03 100644 --- a/policyengine_us/parameters/gov/states/ny/tax/income/deductions/itemized/college_tuition_max.yaml +++ b/policyengine_us/parameters/gov/states/ny/tax/income/college_tuition/cap.yaml @@ -1,12 +1,12 @@ -description: New York sets this maximum amount of college tuition deductible as an itemized deduction. +description: New York caps college tuition expenses at this amount per eligible student when calculating the credit and deduction. values: 2019-01-01: 10_000 metadata: unit: currency-USD period: year - label: New York college tuition deduction maximum + label: New York allowable college tuition expenses cap reference: - - title: Section 606 Credits against tax (t)(2) + - title: Section 606 Credits against tax (t)(2)(A) href: https://www.nysenate.gov/legislation/laws/TAX/606 - title: 2023 NY Form IT-196 Instructions Line 48 href: https://www.tax.ny.gov/pdf/2023/printable-pdfs/inc/it196i-2023.pdf#page=30 diff --git a/policyengine_us/parameters/gov/states/ny/tax/income/credits/college_tuition/applicable_percentage.yaml b/policyengine_us/parameters/gov/states/ny/tax/income/credits/college_tuition/applicable_percentage.yaml index b7f88562372..cdb2de27761 100644 --- a/policyengine_us/parameters/gov/states/ny/tax/income/credits/college_tuition/applicable_percentage.yaml +++ b/policyengine_us/parameters/gov/states/ny/tax/income/credits/college_tuition/applicable_percentage.yaml @@ -1,4 +1,4 @@ -description: New York allocates this percentage of tuition expenses eligible for its tuition credit. +description: New York provides a credit for this fraction of allowable college tuition expenses, after applying the rate structure. values: 2001-01-01: 0.25 2002-01-01: 0.5 diff --git a/policyengine_us/parameters/gov/states/ny/tax/income/deductions/itemized/college_tuition/applicable_percentage.yaml b/policyengine_us/parameters/gov/states/ny/tax/income/deductions/itemized/college_tuition/applicable_percentage.yaml new file mode 100644 index 00000000000..c61a6dbec8b --- /dev/null +++ b/policyengine_us/parameters/gov/states/ny/tax/income/deductions/itemized/college_tuition/applicable_percentage.yaml @@ -0,0 +1,13 @@ +description: New York provides an itemized deduction for this fraction of allowable college tuition expenses. +values: + 2001-01-01: 0.25 + 2002-01-01: 0.5 + 2003-01-01: 0.75 + 2004-01-01: 1 +metadata: + unit: /1 + period: year + label: New York college tuition deduction applicable percentage + reference: + - title: Section 615 Credits against tax (d)(4) + href: https://www.nysenate.gov/legislation/laws/TAX/615 diff --git a/policyengine_us/parameters/gov/states/va/tax/income/credits/non_refundable.yaml b/policyengine_us/parameters/gov/states/va/tax/income/credits/non_refundable.yaml index e252d8e42e5..14aacaae7fb 100644 --- a/policyengine_us/parameters/gov/states/va/tax/income/credits/non_refundable.yaml +++ b/policyengine_us/parameters/gov/states/va/tax/income/credits/non_refundable.yaml @@ -5,6 +5,8 @@ values: 2023-01-01: - va_non_refundable_eitc - va_rebate + 2024-01-01: + - va_non_refundable_eitc metadata: unit: list period: year diff --git a/policyengine_us/parameters/gov/territories/pr/READme.md b/policyengine_us/parameters/gov/territories/pr/READme.md new file mode 100644 index 00000000000..b26e4fd6a7d --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/READme.md @@ -0,0 +1 @@ +# Puerto Rico \ No newline at end of file diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/low_income/age_threshold.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/low_income/age_threshold.yaml new file mode 100644 index 00000000000..3e0b6f73cdf --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/low_income/age_threshold.yaml @@ -0,0 +1,14 @@ +description: Puerto Rico limits the low income tax credit to filers at or above this age threshold. + +values: + 2011-01-01: 65 + +metadata: + unit: year + period: year + label: Puerto Rico low income tax credit age threshold + reference: + - title: P.R. Laws tit. 13, § 30212 (a) + href: https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30212-credit-for-low-income-individuals-older-than-sixty-five-65-years-of-age + - title: Gov. of Puerto Rico Form 481.10 2023 + href: https://hacienda.pr.gov/sites/default/files/documentos/481.10_2023_informative.pdf#page=4 diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/low_income/amount/additional.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/low_income/amount/additional.yaml new file mode 100644 index 00000000000..90c2528461a --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/low_income/amount/additional.yaml @@ -0,0 +1,23 @@ +description: Puerto Rico provides a compensatory tax credit of this amount for low-income pensioners, based on pension income. + +brackets: + - threshold: + 2021-01-01: 0 + amount: + 2021-01-01: 300 + - threshold: + 2021-01-01: 4_800 + amount: + 2021-01-01: 0 + +metadata: + type: single_amount + amount_unit: currency-USD + threshold_unit: currency-USD + period: year + label: Puerto Rico compensatory tax credit for low-income pensioners amount + reference: + - title: P.R. Laws tit. 13, § 30212 (b) + href: https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30212-credit-for-low-income-individuals-older-than-sixty-five-65-years-of-age + - title: Gov. of Puerto Rico Form 481.10 2023 + href: https://hacienda.pr.gov/sites/default/files/documentos/481.10_2023_informative.pdf#page=4 diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/low_income/amount/base.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/low_income/amount/base.yaml new file mode 100644 index 00000000000..a7a879c511a --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/low_income/amount/base.yaml @@ -0,0 +1,14 @@ +description: Puerto Rico provides the following low income tax credit amount. + +values: + 2011-01-01: 400 + +metadata: + unit: currency-USD + period: year + label: Puerto Rico low income tax credit amount + reference: + - title: P.R. Laws tit. 13, § 30212 (a) + href: https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30212-credit-for-low-income-individuals-older-than-sixty-five-65-years-of-age + - title: Gov. of Puerto Rico Form 481.10 2023 + href: https://hacienda.pr.gov/sites/default/files/documentos/481.10_2023_informative.pdf#page=4 diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/low_income/income_limit.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/low_income/income_limit.yaml new file mode 100644 index 00000000000..cb69e0695e0 --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/low_income/income_limit.yaml @@ -0,0 +1,20 @@ +description: Puerto Rico limits the low income tax credit to filers below this income limit, based on the number of eligible people. +brackets: + - threshold: + 2011-01-01: 0 + amount: + 2011-01-01: 15_000 + - threshold: + 2011-01-01: 2 + amount: + 2011-01-01: 30_000 +metadata: + type: single_amount + threshold_unit: int + amount_unit: currency-USD + label: Puerto Rico low income tax credit income limit + reference: + - title: P.R. Laws tit. 13, § 30212 (a) + href: https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30212-credit-for-low-income-individuals-older-than-sixty-five-65-years-of-age + - title: Gov. of Puerto Rico Form 481.10 2023 + href: https://hacienda.pr.gov/sites/default/files/documentos/481.10_2023_informative.pdf#page=4 diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/refundable.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/refundable.yaml new file mode 100644 index 00000000000..f6a7a3f7ab2 --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/refundable.yaml @@ -0,0 +1,14 @@ +description: Puerto Rico provides the following refundable income tax credits. +metadata: + unit: list + period: year + label: Puerto Rico refundable credits + reference: + # Low Income Credit + - title: Gov. of Puerto Rico Form 481.10 2023 + href: https://hacienda.pr.gov/sites/default/files/documentos/481.10_2023_informative.pdf#page=4 + +values: + 2021-01-01: + - pr_low_income_credit + - pr_compensatory_low_income_credit diff --git a/policyengine_us/reforms/ctc/eppc/README.md b/policyengine_us/reforms/ctc/eppc/README.md new file mode 100644 index 00000000000..a96ac526ee9 --- /dev/null +++ b/policyengine_us/reforms/ctc/eppc/README.md @@ -0,0 +1,20 @@ +# Reform description: + +# The CTC is phased in based on the sum of the tax liability and the benefits amount which is phased-out. + +# Example: +# A single filer is eligible for a maximum SNAP amount of $3,500. As earnings increase SNAP drops to $2,500 at which point the maximum CTC increased to $1,000 (assuming taxes and other considered benefits are zero). + + +# The following benefits are considered in the new CTC phase-in calculation: + +- SNAP +- Free school meals +- TANF + + +# The main income tax rate of couple is now computed as follows: +# 1. Compute the total tax liability for each person as an individual. +# 2. Compute the total tax liability for each person as a couple. +# 3. Apply the new CTC structure to each scenario. +# 4. The married couple's tax liability is the smaller of the two tax liabilities. diff --git a/policyengine_us/reforms/ctc/eppc/__init__.py b/policyengine_us/reforms/ctc/eppc/__init__.py new file mode 100644 index 00000000000..36b61b4afe4 --- /dev/null +++ b/policyengine_us/reforms/ctc/eppc/__init__.py @@ -0,0 +1,3 @@ +from .expanded_ctc import ( + create_expanded_ctc_reform, +) diff --git a/policyengine_us/reforms/ctc/eppc/expanded_ctc.py b/policyengine_us/reforms/ctc/eppc/expanded_ctc.py new file mode 100644 index 00000000000..7f7a73744bc --- /dev/null +++ b/policyengine_us/reforms/ctc/eppc/expanded_ctc.py @@ -0,0 +1,425 @@ +from policyengine_us.model_api import * + + +def create_expanded_ctc() -> Reform: + class ctc_phase_in(Variable): + value_type = float + entity = TaxUnit + label = "CTC phase-in" + unit = USD + definition_period = YEAR + reference = "https://eppc.org/wp-content/uploads/2024/10/Tax-Teams-Comment-on-Working-Families.pdf" + + def formula(tax_unit, period, parameters): + tax = tax_unit("income_tax_pre_ctc", period) + total_benefits = add( + tax_unit, period, ["snap", "free_school_meals", "tanf"] + ) + max_benefit_amount = tax_unit("maximum_benefits", period) + benefit_reduction = max_benefit_amount - total_benefits + tax_with_benefit_reduction = tax + benefit_reduction + p = parameters(period).gov.irs.credits.ctc.refundable.phase_in + return max_(p.rate * tax_with_benefit_reduction, 0) + + class income_tax_non_refundable_credits_pre_ctc(Variable): + value_type = float + entity = TaxUnit + definition_period = YEAR + label = "federal non-refundable income tax credits" + unit = USD + + def formula(tax_unit, period, parameters): + non_ref_credits = parameters(period).gov.irs.credits.non_refundable + credits = [ + credit + for credit in non_ref_credits + if credit not in ["non_refundable_ctc"] + ] + return add(tax_unit, period, credits) + + class income_tax_refundable_credits_pre_ctc(Variable): + value_type = float + entity = TaxUnit + definition_period = YEAR + label = "federal refundable income tax credits" + unit = USD + + def formula(tax_unit, period, parameters): + ref_credits = parameters(period).gov.irs.credits.refundable + credits = [ + credit + for credit in ref_credits + if credit not in ["refundable_ctc"] + ] + return add(tax_unit, period, credits) + + class income_tax_capped_non_refundable_credits(Variable): + value_type = float + entity = TaxUnit + label = "non-refundable tax credits" + unit = USD + documentation = "Capped value of non-refundable tax credits" + definition_period = YEAR + adds = ["income_tax_non_refundable_credits_pre_ctc"] + subtracts = ["income_tax_unavailable_non_refundable_credits"] + + class income_tax_unavailable_non_refundable_credits(Variable): + value_type = float + entity = TaxUnit + label = "unavailable non-refundable tax credits" + unit = USD + documentation = "Total value of non-refundable tax credits that were not available to the filer due to having too low income tax." + definition_period = YEAR + + def formula(tax_unit, period, parameters): + return -min_( + tax_unit("income_tax_before_credits", period), + tax_unit("income_tax_non_refundable_credits_pre_ctc", period), + ) + tax_unit("income_tax_non_refundable_credits_pre_ctc", period) + + class income_tax_pre_ctc(Variable): + value_type = float + entity = TaxUnit + definition_period = YEAR + unit = USD + label = "Federal income tax" + documentation = "Total federal individual income tax liability." + + def formula(person, period, parameters): + if parameters( + period + ).gov.contrib.ubi_center.flat_tax.abolish_federal_income_tax: + return 0 + else: + added_components = add( + person, period, ["income_tax_before_refundable_credits"] + ) + subtracted_components = add( + person, period, ["income_tax_refundable_credits_pre_ctc"] + ) + return added_components - subtracted_components + + class income_tax(Variable): + value_type = float + entity = TaxUnit + definition_period = YEAR + unit = USD + label = "Federal income tax" + documentation = "Total federal individual income tax liability." + + def formula(tax_unit, period, parameters): + pre_ctc_tax = tax_unit("income_tax_pre_ctc", period) + indiv_tax = tax_unit("income_tax_pre_ctc_indiv", period) + filing_status = tax_unit("filing_status", period) + is_joint = filing_status == filing_status.possible_values.JOINT + non_ref_ctc = tax_unit("non_refundable_ctc", period) + ref_ctc = tax_unit("refundable_ctc", period) + base_tax = where( + is_joint, min_(pre_ctc_tax, indiv_tax), pre_ctc_tax + ) + return max_(base_tax - non_ref_ctc, 0) - ref_ctc + + class maximum_benefits(Variable): + value_type = float + entity = TaxUnit + definition_period = YEAR + label = "Maximum benefit amount to which the household is entitled" + unit = USD + # Currently only includes SNAP, free school meals, and TANF + + def formula(tax_unit, period, parameters): + snap_max_allotment = tax_unit.spm_unit( + "snap_max_allotment", period + ) + # get maximum free school meal allotment + state_group = tax_unit.spm_unit.household( + "state_group_str", period + ) + tier = "FREE" + p_amount = parameters(period).gov.usda.school_meals.amount + nslp_per_child = p_amount.nslp[state_group][tier] + sbp_per_child = p_amount.sbp[state_group][tier] + school_meals_daily_subsidy = nslp_per_child + sbp_per_child + daily_paid_subsidy = tax_unit.spm_unit( + "school_meal_paid_daily_subsidy", period + ) + net_daily_subsidy_per_child = ( + school_meals_daily_subsidy - daily_paid_subsidy + ) + p_school_meals = parameters(period).gov.usda.school_meals + children = add(tax_unit, period, ["is_in_k12_school"]) + school_meal_max_value = ( + net_daily_subsidy_per_child + * children + * p_school_meals.school_days + ) + # Get TANF grant standards (maximum amounts) + max_federal_tanf = tax_unit.spm_unit("tanf_max_amount", period) + max_ny_tanf = tax_unit.spm_unit("ny_tanf_grant_standard", period) + tanf_dem_eligible = tax_unit.spm_unit( + "is_demographic_tanf_eligible", period + ) + max_dc_tanf = tax_unit.spm_unit("dc_tanf_grant_standard", period) + max_co_tanf = tax_unit.spm_unit("co_tanf_grant_standard", period) + max_tanf = ( + max_co_tanf + max_dc_tanf + max_federal_tanf + max_ny_tanf + ) * tanf_dem_eligible + return snap_max_allotment + school_meal_max_value + max_tanf + + # At the core of the reform, we want to coampre the tax liability of two individuals + # filing as single people vs filing as a couple with the expanded CTC + + class basic_standard_deduction_indiv(Variable): + value_type = float + entity = Person + label = "Basic standard deduction" + definition_period = YEAR + unit = USD + reference = "https://www.law.cornell.edu/uscode/text/26/63#c_2" + + def formula(person, period, parameters): + std = parameters(period).gov.irs.deductions.standard + separate_filer_itemizes = person.tax_unit( + "separate_filer_itemizes", period + ) + dependent_elsewhere = person.tax_unit( + "head_is_dependent_elsewhere", period + ) + + # Calculate secondary earner deduction using single filing status + deduction_amount = std.amount["SINGLE"] + + standard_deduction_if_dependent = min_( + deduction_amount, + max_( + std.dependent.additional_earned_income + + person.tax_unit("tax_unit_earned_income", period), + std.dependent.amount, + ), + ) + + return select( + [ + separate_filer_itemizes, + dependent_elsewhere, + True, + ], + [ + 0, + standard_deduction_if_dependent, + deduction_amount, + ], + ) + + class taxable_income_deductions_person(Variable): + value_type = float + entity = Person + label = "Taxable income deductions for each person" + unit = USD + definition_period = YEAR + + def formula(person, period, parameters): + itemizes = person.tax_unit("tax_unit_itemizes", period) + is_joint = person.tax_unit("tax_unit_is_joint", period) + deductions_if_itemizing_amount = person.tax_unit( + "taxable_income_deductions_if_itemizing", period + ) + deductions_if_itemizing = where( + is_joint, + deductions_if_itemizing_amount / 2, + deductions_if_itemizing_amount, + ) + standard_deduction = person( + "basic_standard_deduction_indiv", period + ) + qbid = person("qualified_business_income_deduction_person", period) + return where( + itemizes, deductions_if_itemizing, standard_deduction + qbid + ) + + class taxable_income_indiv(Variable): + value_type = float + entity = Person + label = "IRS taxable income for each person" + unit = USD + definition_period = YEAR + + def formula(person, period, parameters): + agi = person("adjusted_gross_income_person", period) + exemption_amount = person.tax_unit("exemptions", period) + is_joint = person.tax_unit("tax_unit_is_joint", period) + exemptions = where( + is_joint, exemption_amount / 2, exemption_amount + ) + deductions = person("taxable_income_deductions_person", period) + return max_(0, agi - exemptions - deductions) + + class income_tax_main_rates_indiv(Variable): + value_type = float + entity = TaxUnit + definition_period = YEAR + label = "Income tax main rates" + reference = "https://www.law.cornell.edu/uscode/text/26/1" + unit = USD + + def formula(tax_unit, period, parameters): + # compute taxable income that is taxed at the main rates + person = tax_unit.members + full_taxable_income = person("taxable_income_indiv", period) + cg_exclusion = ( + tax_unit("capital_gains_excluded_from_taxable_income", period) + / 2 + ) + taxinc = max_(0, full_taxable_income - cg_exclusion) + # compute tax using bracket rates and thresholds + p = parameters(period).gov.irs.income + bracket_tops = p.bracket.thresholds + bracket_rates = p.bracket.rates + + tax = 0 + bracket_bottom = 0 + for i in range(1, len(list(bracket_rates.__iter__())) + 1): + b = str(i) + bracket_top = bracket_tops[b]["SINGLE"] + tax += bracket_rates[b] * amount_between( + taxinc, bracket_bottom, bracket_top + ) + bracket_bottom = bracket_top + return tax_unit.sum(tax) + + class income_tax_before_credits_indiv(Variable): + value_type = float + entity = TaxUnit + definition_period = YEAR + label = "income tax before credits" + unit = USD + documentation = ( + "Total (regular + AMT) income tax liability before credits" + ) + + adds = [ + "income_tax_main_rates_indiv", + "capital_gains_tax", + "alternative_minimum_tax", + ] + + class income_tax_capped_non_refundable_credits_indiv(Variable): + value_type = float + entity = TaxUnit + label = "non-refundable tax credits" + unit = USD + documentation = "Capped value of non-refundable tax credits" + definition_period = YEAR + adds = ["income_tax_non_refundable_credits_pre_ctc"] + subtracts = ["income_tax_unavailable_non_refundable_credits"] + + class income_tax_unavailable_non_refundable_credits(Variable): + value_type = float + entity = TaxUnit + label = "unavailable non-refundable tax credits" + unit = USD + documentation = "Total value of non-refundable tax credits that were not available to the filer due to having too low income tax." + definition_period = YEAR + + def formula(tax_unit, period, parameters): + return -min_( + tax_unit("income_tax_before_credits", period), + tax_unit("income_tax_non_refundable_credits_pre_ctc", period), + ) + tax_unit("income_tax_non_refundable_credits_pre_ctc", period) + + class income_tax_before_refundable_credits_indiv(Variable): + value_type = float + entity = TaxUnit + definition_period = YEAR + unit = USD + label = "Federal income tax before refundable credits" + documentation = "Income tax liability (including other taxes) after non-refundable credits are used, but before refundable credits are applied" + + def formula(tax_unit, period, parameters): + if parameters( + period + ).gov.contrib.ubi_center.flat_tax.abolish_federal_income_tax: + return 0 + else: + added_components = add( + tax_unit, + period, + [ + "income_tax_before_credits_indiv", + "net_investment_income_tax", + "recapture_of_investment_credit", + "unreported_payroll_tax", + "qualified_retirement_penalty", + ], + ) + subtracted_components = add( + tax_unit, + period, + ["income_tax_capped_non_refundable_credits_indiv"], + ) + return added_components - subtracted_components + + class income_tax_pre_ctc_indiv(Variable): + value_type = float + entity = TaxUnit + definition_period = YEAR + unit = USD + label = "Federal income tax" + documentation = "Total federal individual income tax liability." + + def formula(person, period, parameters): + if parameters( + period + ).gov.contrib.ubi_center.flat_tax.abolish_federal_income_tax: + return 0 + else: + added_components = add( + person, + period, + ["income_tax_before_refundable_credits_indiv"], + ) + subtracted_components = add( + person, period, ["income_tax_refundable_credits_pre_ctc"] + ) + return added_components - subtracted_components + + class reform(Reform): + def apply(self): + self.neutralize_variable("eitc") + self.neutralize_variable("head_of_household_eligible") + self.neutralize_variable("cdcc") + self.update_variable(ctc_phase_in) + self.update_variable(income_tax) + self.update_variable(income_tax_pre_ctc) + self.update_variable(income_tax_unavailable_non_refundable_credits) + self.update_variable(income_tax_refundable_credits_pre_ctc) + self.update_variable(income_tax_non_refundable_credits_pre_ctc) + self.update_variable(income_tax_capped_non_refundable_credits) + self.update_variable(maximum_benefits) + self.update_variable(income_tax_before_refundable_credits_indiv) + self.update_variable(income_tax_before_credits_indiv) + self.update_variable( + income_tax_capped_non_refundable_credits_indiv + ) + self.update_variable(income_tax_main_rates_indiv) + self.update_variable(taxable_income_indiv) + self.update_variable(taxable_income_deductions_person) + self.update_variable(basic_standard_deduction_indiv) + self.update_variable(income_tax_pre_ctc_indiv) + + return reform + + +def create_expanded_ctc_reform(parameters, period, bypass: bool = False): + if bypass: + return create_expanded_ctc() + + p = parameters(period).gov.contrib.ctc.eppc.expanded_ctc + + if p.in_effect: + return create_expanded_ctc() + else: + return None + + +expanded_ctc = create_expanded_ctc_reform(None, None, bypass=True) diff --git a/policyengine_us/reforms/deductions/salt/__init__.py b/policyengine_us/reforms/deductions/salt/__init__.py new file mode 100644 index 00000000000..4b5cf2aa298 --- /dev/null +++ b/policyengine_us/reforms/deductions/salt/__init__.py @@ -0,0 +1,3 @@ +from .limit_salt_deduction_to_property_taxes import ( + create_limit_salt_deduction_to_property_taxes_reform, +) diff --git a/policyengine_us/reforms/deductions/salt/limit_salt_deduction_to_property_taxes.py b/policyengine_us/reforms/deductions/salt/limit_salt_deduction_to_property_taxes.py new file mode 100644 index 00000000000..69d662ec01b --- /dev/null +++ b/policyengine_us/reforms/deductions/salt/limit_salt_deduction_to_property_taxes.py @@ -0,0 +1,49 @@ +from policyengine_us.model_api import * +from policyengine_core.periods import period as period_ +from policyengine_core.periods import instant + + +def create_limit_salt_deduction_to_property_taxes() -> Reform: + def modify_parameters(parameters): + parameters.gov.irs.deductions.itemized.salt_and_real_estate.sources.update( + start=instant("2025-01-01"), + stop=instant("2036-12-31"), + value=["real_estate_taxes"], + ) + return parameters + + class reform(Reform): + def apply(self): + self.modify_parameters(modify_parameters) + + return reform + + +def create_limit_salt_deduction_to_property_taxes_reform( + parameters, period, bypass: bool = False +): + if bypass: + return create_limit_salt_deduction_to_property_taxes() + + p = parameters.gov.contrib.deductions.salt + + reform_active = False + current_period = period_(period) + + for i in range(5): + if p(current_period).limit_salt_deduction_to_property_taxes: + reform_active = True + break + current_period = current_period.offset(1, "year") + + if reform_active: + return create_limit_salt_deduction_to_property_taxes() + else: + return None + + +limit_salt_deduction_to_property_taxes = ( + create_limit_salt_deduction_to_property_taxes_reform( + None, None, bypass=True + ) +) diff --git a/policyengine_us/reforms/reforms.py b/policyengine_us/reforms/reforms.py index 10c69f679eb..223bee62f24 100644 --- a/policyengine_us/reforms/reforms.py +++ b/policyengine_us/reforms/reforms.py @@ -65,7 +65,22 @@ from .second_earner import ( create_second_earner_tax_reform, ) +from .ctc.eppc import ( + create_expanded_ctc_reform, +) +from .snap import ( + create_abolish_snap_deductions_reform, + create_abolish_snap_net_income_test_reform, +) +from .states.dc.property_tax import create_dc_property_tax_credit_reform + +from .states.ny.inflation_rebates import ( + create_ny_2025_inflation_rebates_reform, +) +from .deductions.salt import ( + create_limit_salt_deduction_to_property_taxes_reform, +) from policyengine_core.reforms import Reform import warnings @@ -148,6 +163,24 @@ def create_structural_reforms_from_parameters(parameters, period): second_earner_tax_reform = create_second_earner_tax_reform( parameters, period ) + expanded_ctc = create_expanded_ctc_reform(parameters, period) + abolish_snap_deductions = create_abolish_snap_deductions_reform( + parameters, period + ) + abolish_snap_net_income_test = create_abolish_snap_net_income_test_reform( + parameters, period + ) + dc_property_tax_credit = create_dc_property_tax_credit_reform( + parameters, period + ) + ny_2025_inflation_rebates = create_ny_2025_inflation_rebates_reform( + parameters, period + ) + limit_salt_deduction_to_property_taxes = ( + create_limit_salt_deduction_to_property_taxes_reform( + parameters, period + ) + ) reforms = [ afa_reform, @@ -179,6 +212,12 @@ def create_structural_reforms_from_parameters(parameters, period): repeal_state_dependent_exemptions, ctc_older_child_supplement, second_earner_tax_reform, + expanded_ctc, + abolish_snap_deductions, + abolish_snap_net_income_test, + dc_property_tax_credit, + ny_2025_inflation_rebates, + limit_salt_deduction_to_property_taxes, ] reforms = tuple(filter(lambda x: x is not None, reforms)) diff --git a/policyengine_us/reforms/salt_phase_out/salt_phase_out_reform.py b/policyengine_us/reforms/salt_phase_out/salt_phase_out_reform.py index 7519bba68e2..97ff4348aa3 100644 --- a/policyengine_us/reforms/salt_phase_out/salt_phase_out_reform.py +++ b/policyengine_us/reforms/salt_phase_out/salt_phase_out_reform.py @@ -1,4 +1,5 @@ from policyengine_us.model_api import * +from policyengine_core.periods import period as period_ def create_salt_phase_out() -> Reform: @@ -12,14 +13,14 @@ class salt_deduction(Variable): reference = "https://www.law.cornell.edu/uscode/text/26/164" def formula(tax_unit, period, parameters): + p = parameters( + period + ).gov.irs.deductions.itemized.salt_and_real_estate salt_amount = add( tax_unit, period, - ["state_and_local_sales_or_income_tax", "real_estate_taxes"], + p.sources, ) - p = parameters( - period - ).gov.irs.deductions.itemized.salt_and_real_estate filing_status = tax_unit("filing_status", period) cap = p.cap[filing_status] p_ref = parameters(period).gov.contrib.salt_phase_out @@ -44,9 +45,18 @@ def create_salt_phase_out_reform(parameters, period, bypass: bool = False): if bypass: return create_salt_phase_out() - p = parameters(period).gov.contrib.salt_phase_out + p = parameters.gov.contrib.salt_phase_out + + reform_active = False + current_period = period_(period) + + for i in range(5): + if p(current_period).in_effect: + reform_active = True + break + current_period = current_period.offset(1, "year") - if p.in_effect: + if reform_active: return create_salt_phase_out() else: return None diff --git a/policyengine_us/reforms/snap/__init__.py b/policyengine_us/reforms/snap/__init__.py new file mode 100644 index 00000000000..c50b6b9c9d9 --- /dev/null +++ b/policyengine_us/reforms/snap/__init__.py @@ -0,0 +1,6 @@ +from .abolish_snap_deductions import ( + create_abolish_snap_deductions_reform, +) +from .abolish_snap_net_income_test import ( + create_abolish_snap_net_income_test_reform, +) diff --git a/policyengine_us/reforms/snap/abolish_snap_deductions.py b/policyengine_us/reforms/snap/abolish_snap_deductions.py new file mode 100644 index 00000000000..2fcbdfb1363 --- /dev/null +++ b/policyengine_us/reforms/snap/abolish_snap_deductions.py @@ -0,0 +1,40 @@ +from policyengine_us.model_api import * + + +def create_abolish_snap_deductions() -> Reform: + class snap_deductions(Variable): + value_type = float + entity = SPMUnit + label = "SNAP income deductions" + unit = USD + documentation = "Deductions made from gross income for SNAP benefits" + definition_period = MONTH + reference = "https://www.law.cornell.edu/uscode/text/7/2014#e" + + def formula(spm_unit, period, parameters): + return 0 + + class reform(Reform): + def apply(self): + self.update_variable(snap_deductions) + + return reform + + +def create_abolish_snap_deductions_reform( + parameters, period, bypass: bool = False +): + if bypass: + return create_abolish_snap_deductions() + + p = parameters(period).gov.contrib.snap.abolish_deductions + + if p.in_effect: + return create_abolish_snap_deductions() + else: + return None + + +abolish_snap_deductions = create_abolish_snap_deductions_reform( + None, None, bypass=True +) diff --git a/policyengine_us/reforms/snap/abolish_snap_net_income_test.py b/policyengine_us/reforms/snap/abolish_snap_net_income_test.py new file mode 100644 index 00000000000..d394b8dd259 --- /dev/null +++ b/policyengine_us/reforms/snap/abolish_snap_net_income_test.py @@ -0,0 +1,42 @@ +from policyengine_us.model_api import * + + +def create_abolish_snap_net_income_test() -> Reform: + class meets_snap_net_income_test(Variable): + value_type = bool + entity = SPMUnit + label = "Meets SNAP net income test" + documentation = "Whether this SPM unit meets the SNAP net income test" + definition_period = MONTH + reference = ( + "https://www.law.cornell.edu/uscode/text/7/2017#a", + "https://www.law.cornell.edu/uscode/text/7/2014#c", + ) + + def formula(spm_unit, period, parameters): + return True + + class reform(Reform): + def apply(self): + self.update_variable(meets_snap_net_income_test) + + return reform + + +def create_abolish_snap_net_income_test_reform( + parameters, period, bypass: bool = False +): + if bypass: + return create_abolish_snap_net_income_test() + + p = parameters(period).gov.contrib.snap.abolish_net_income_test + + if p.in_effect: + return create_abolish_snap_net_income_test() + else: + return None + + +abolish_snap_net_income_test = create_abolish_snap_net_income_test_reform( + None, None, bypass=True +) diff --git a/policyengine_us/reforms/state_dependent_exemptions/README.md b/policyengine_us/reforms/state_dependent_exemptions/README.md index e7f75fecef4..aade9a629c4 100644 --- a/policyengine_us/reforms/state_dependent_exemptions/README.md +++ b/policyengine_us/reforms/state_dependent_exemptions/README.md @@ -28,3 +28,12 @@ Vermont: Remove the dependents from the personal exemptions Virginia: Only apply the personal exemptions to the head and spouse West Virginia: Change the `tax_unit_size` to `head_spouse_count` Wisconsin: Change the `tax_unit_size` to `head_spouse_count` +Arizona: Neutralize dependent exemptions +Arkansas: Neutralize dependent exemptions +Delaware: Change the `tax_unit_size` to `head_spouse_count` +Idaho: Neutralize dependent exemptions CTC +Iowa: Change the `tax_unit_size` to `head_spouse_count` +Kentucky: Change the `tax_unit_size` in family_size to `head_spouse_count` +Maine: Neutralize dependent exemptions +Nebraska: Change the `tax_unit_size` to `head_spouse_count` +Oklahoma: Remove CTC portion and update return diff --git a/policyengine_us/reforms/state_dependent_exemptions/repeal_state_dependent_exemptions.py b/policyengine_us/reforms/state_dependent_exemptions/repeal_state_dependent_exemptions.py index 32930ae4f6c..0399f67d5e6 100644 --- a/policyengine_us/reforms/state_dependent_exemptions/repeal_state_dependent_exemptions.py +++ b/policyengine_us/reforms/state_dependent_exemptions/repeal_state_dependent_exemptions.py @@ -1,4 +1,5 @@ from policyengine_us.model_api import * +from policyengine_core.periods import period as period_ def create_repeal_state_dependent_exemptions() -> Reform: @@ -392,6 +393,75 @@ def formula(tax_unit, period, parameters): p = parameters(period).gov.states.wi.tax.income return tax_unit("head_spouse_count", period) * p.exemption.base + class de_personal_credit(Variable): + value_type = float + entity = TaxUnit + label = "Delaware personal credit" + unit = USD + definition_period = YEAR + reference = "https://revenuefiles.delaware.gov/2022/PIT-RES_TY22_2022-02_Instructions.pdf" + defined_for = StateCode.DE + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.de.tax.income.credits + head_spouse_count = tax_unit("head_spouse_count", period) + return p.personal_credits.personal * head_spouse_count + + class ky_family_size_tax_credit_rate(Variable): + value_type = float + entity = TaxUnit + label = "Kentucky family size tax credit rate" + unit = "/1" + definition_period = YEAR + reference = "https://apps.legislature.ky.gov/law/statutes/statute.aspx?id=49188" + defined_for = StateCode.KY + + def formula(tax_unit, period, parameters): + income = tax_unit("ky_modified_agi", period) + fpg = parameters(period).gov.hhs.fpg + # This will be CONTIGUOUS_US for Kentucky. + state_group = tax_unit.household("state_group", period) + p1 = fpg.first_person[state_group] + padd = fpg.additional_person[state_group] + family_size = tax_unit("head_spouse_count", period) + # No more than 4 people are accounted for in the credit + p = parameters(period).gov.states.ky.tax.income.credits.family_size + capped_family_size = min_(family_size, p.family_size_cap) + poverty_index = p1 + padd * (capped_family_size - 1) + share = income / poverty_index + return p.rate.calc(share, right=True) + + class ok_child_care_child_tax_credit(Variable): + value_type = float + entity = TaxUnit + label = "Oklahoma Child Care/Child Tax Credit" + unit = USD + definition_period = YEAR + reference = ( + "https://oklahoma.gov/content/dam/ok/en/tax/documents/forms/individuals/past-year/2021/511-Pkt-2021.pdf" + "https://oklahoma.gov/content/dam/ok/en/tax/documents/forms/individuals/current/511-Pkt.pdf" + ) + defined_for = StateCode.OK + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.ok.tax.income.credits + # determine AGI eligibility + us_agi = tax_unit("adjusted_gross_income", period) + agi_eligible = us_agi <= p.child.agi_limit + # determine OK cdcc amount + us_cdcc = tax_unit("cdcc", period) + ok_cdcc = us_cdcc * p.child.cdcc_fraction + # determine prorated fraction + ok_agi = tax_unit("ok_agi", period) + # Compute OK AGI as a share of US AGI. + # Use a mask rather than where to avoid a divide-by-zero warning. + agi_ratio = np.zeros_like(us_agi) + mask = us_agi != 0 + agi_ratio[mask] = ok_agi[mask] / us_agi[mask] + prorate = min_(1, max_(0, agi_ratio)) + # receive greater of OK cdcc or OK ctc amounts prorated if AGI eligible + return agi_eligible * prorate * ok_cdcc + class reform(Reform): def apply(self): self.neutralize_variable("al_dependent_exemption") @@ -406,6 +476,10 @@ def apply(self): self.neutralize_variable("nc_child_deduction") self.neutralize_variable("nm_deduction_for_certain_dependents") self.neutralize_variable("mt_dependent_exemptions_person") + self.neutralize_variable("az_dependent_tax_credit") + self.neutralize_variable("ar_personal_credit_dependent") + self.neutralize_variable("id_ctc") + self.neutralize_variable("me_dependent_exemption_credit") self.update_variable(hi_regular_exemptions) self.update_variable(md_total_personal_exemptions) self.update_variable(mi_personal_exemptions) @@ -419,10 +493,13 @@ def apply(self): self.update_variable(ca_exemptions) self.update_variable(ga_exemptions) self.update_variable(in_base_exemptions) - self.update_variable(ia_exemption_credit) self.update_variable(ks_count_exemptions) self.update_variable(ma_income_tax_exemption_threshold) self.update_variable(wi_base_exemption) + self.update_variable(ia_exemption_credit) + self.update_variable(de_personal_credit) + self.update_variable(ky_family_size_tax_credit_rate) + self.update_variable(ok_child_care_child_tax_credit) return reform @@ -433,9 +510,18 @@ def create_repeal_state_dependent_exemptions_reform( if bypass: return create_repeal_state_dependent_exemptions() - p = parameters(period).gov.contrib.repeal_state_dependent_exemptions + p = parameters.gov.contrib.repeal_state_dependent_exemptions + + reform_active = False + current_period = period_(period) + + for i in range(5): + if p(current_period).in_effect: + reform_active = True + break + current_period = current_period.offset(1, "year") - if p.in_effect: + if reform_active: return create_repeal_state_dependent_exemptions() else: return None diff --git a/policyengine_us/reforms/states/dc/property_tax/__init__.py b/policyengine_us/reforms/states/dc/property_tax/__init__.py new file mode 100644 index 00000000000..cb0d8297331 --- /dev/null +++ b/policyengine_us/reforms/states/dc/property_tax/__init__.py @@ -0,0 +1 @@ +from .dc_property_tax_reform import create_dc_property_tax_credit_reform diff --git a/policyengine_us/reforms/states/dc/property_tax/dc_property_tax_reform.py b/policyengine_us/reforms/states/dc/property_tax/dc_property_tax_reform.py new file mode 100644 index 00000000000..2027409a705 --- /dev/null +++ b/policyengine_us/reforms/states/dc/property_tax/dc_property_tax_reform.py @@ -0,0 +1,127 @@ +from policyengine_us.model_api import * +from policyengine_core.periods import period as period_ + + +def create_dc_property_tax_credit() -> Reform: + class dc_ptc(Variable): + value_type = float + entity = TaxUnit + label = "DC property tax credit" + unit = USD + definition_period = YEAR + reference = ( + "https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/52926_D-40_12.21.21_Final_Rev011122.pdf#page=49" + "https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2022_D-40_Booklet_Final_blk_01_23_23_Ordc.pdf#page=47" + ) + defined_for = StateCode.DC + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.contrib.states.dc.property_tax + filing_status = tax_unit("filing_status", period) + amount = p.amount[filing_status] + # Income based eligibility criteria does not apply when the credit + # is phased out. + eligible = tax_unit("dc_ptc_eligible", period) + if p.phase_out.applies: + income_limit = tax_unit("dc_ptc_income_limit", period) + income = tax_unit("adjusted_gross_income", period) + income_excess = max_(0, income - income_limit) + return max_(0, amount - p.phase_out.rate * income_excess) + return amount * eligible + + class dc_ptc_eligible(Variable): + value_type = bool + entity = TaxUnit + label = "DC property tax credit eligible" + definition_period = YEAR + reference = ( + "https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/52926_D-40_12.21.21_Final_Rev011122.pdf#page=49" + "https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2022_D-40_Booklet_Final_blk_01_23_23_Ordc.pdf#page=47" + ) + defined_for = StateCode.DC + + def formula(tax_unit, period, parameters): + us_agi = tax_unit("adjusted_gross_income", period) + income_limt = tax_unit("dc_ptc_income_limit", period) + return us_agi <= income_limt + + class dc_ptc_income_limit(Variable): + value_type = float + entity = TaxUnit + unit = USD + label = "DC property tax credit income limit" + definition_period = YEAR + reference = ( + "https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/52926_D-40_12.21.21_Final_Rev011122.pdf#page=49" + "https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2022_D-40_Booklet_Final_blk_01_23_23_Ordc.pdf#page=47" + ) + defined_for = StateCode.DC + + def formula(tax_unit, period, parameters): + elderly_present = tax_unit( + "dc_ptc_elderly_head_or_spouse_present", period + ) + filing_status = tax_unit("filing_status", period) + p = parameters( + period + ).gov.contrib.states.dc.property_tax.income_limit + return where( + elderly_present, + p.elderly[filing_status], + p.non_elderly[filing_status], + ) + + class dc_ptc_elderly_head_or_spouse_present(Variable): + value_type = bool + entity = TaxUnit + label = "DC property tax credit elderly head or spouse present" + definition_period = YEAR + reference = ( + "https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/52926_D-40_12.21.21_Final_Rev011122.pdf#page=49" + "https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2022_D-40_Booklet_Final_blk_01_23_23_Ordc.pdf#page=47" + ) + defined_for = StateCode.DC + + def formula(tax_unit, period, parameters): + p_dc = parameters(period).gov.states.dc.tax.income.credits + elderly_age = p_dc.ptc.min_elderly_age + head_age = tax_unit("age_head", period) + spouse_age = tax_unit("age_spouse", period) + return (head_age >= elderly_age) | (spouse_age >= elderly_age) + + class reform(Reform): + def apply(self): + self.update_variable(dc_ptc) + self.update_variable(dc_ptc_eligible) + self.update_variable(dc_ptc_income_limit) + self.update_variable(dc_ptc_elderly_head_or_spouse_present) + + return reform + + +def create_dc_property_tax_credit_reform( + parameters, period, bypass: bool = False +): + if bypass: + return create_dc_property_tax_credit() + + p = parameters.gov.contrib.states.dc.property_tax + + reform_active = False + current_period = period_(period) + + for i in range(5): + if p(current_period).in_effect: + reform_active = True + break + current_period = current_period.offset(1, "year") + + if reform_active: + return create_dc_property_tax_credit() + else: + return None + + +dc_property_tax_credit = create_dc_property_tax_credit_reform( + None, None, bypass=True +) diff --git a/policyengine_us/reforms/states/ny/inflation_rebates/__init__.py b/policyengine_us/reforms/states/ny/inflation_rebates/__init__.py new file mode 100644 index 00000000000..2c9990de238 --- /dev/null +++ b/policyengine_us/reforms/states/ny/inflation_rebates/__init__.py @@ -0,0 +1,3 @@ +from .ny_2025_inflation_rebates import ( + create_ny_2025_inflation_rebates_reform, +) diff --git a/policyengine_us/reforms/states/ny/inflation_rebates/ny_2025_inflation_rebates.py b/policyengine_us/reforms/states/ny/inflation_rebates/ny_2025_inflation_rebates.py new file mode 100644 index 00000000000..6bd97f9b28e --- /dev/null +++ b/policyengine_us/reforms/states/ny/inflation_rebates/ny_2025_inflation_rebates.py @@ -0,0 +1,69 @@ +from policyengine_us.model_api import * +from policyengine_core.periods import period as period_ + + +def create_ny_2025_inflation_rebates() -> Reform: + class ny_2025_inflation_rebates(Variable): + value_type = float + entity = TaxUnit + label = "New York 2025 inflation rebates" + unit = USD + definition_period = YEAR + reference = "https://www.governor.ny.gov/news/money-your-pockets-governor-hochul-proposes-sending-86-million-new-yorkers-inflation-refund" + defined_for = StateCode.NY + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.contrib.states.ny.inflation_rebates + agi = tax_unit("ny_agi", period) + filing_status = tax_unit("filing_status", period) + filing_statuses = filing_status.possible_values + return select( + [ + filing_status == filing_statuses.SINGLE, + filing_status == filing_statuses.JOINT, + filing_status == filing_statuses.HEAD_OF_HOUSEHOLD, + filing_status == filing_statuses.SEPARATE, + filing_status == filing_statuses.SURVIVING_SPOUSE, + ], + [ + p.single.calc(agi, right=True), + p.joint.calc(agi, right=True), + p.head_of_household.calc(agi, right=True), + p.separate.calc(agi, right=True), + p.surviving_spouse.calc(agi, right=True), + ], + ) + + class reform(Reform): + def apply(self): + self.update_variable(ny_2025_inflation_rebates) + + return reform + + +def create_ny_2025_inflation_rebates_reform( + parameters, period, bypass: bool = False +): + if bypass: + return create_ny_2025_inflation_rebates() + + p = parameters.gov.contrib.states.ny.inflation_rebates + + reform_active = False + current_period = period_(period) + + for i in range(5): + if p(current_period).in_effect: + reform_active = True + break + current_period = current_period.offset(1, "year") + + if reform_active: + return create_ny_2025_inflation_rebates() + else: + return None + + +ny_2025_inflation_rebates = create_ny_2025_inflation_rebates_reform( + None, None, bypass=True +) diff --git a/policyengine_us/reforms/states/ny/wftc/ny_working_families_tax_credit.py b/policyengine_us/reforms/states/ny/wftc/ny_working_families_tax_credit.py index c96190d4eeb..7ecbb83ece4 100644 --- a/policyengine_us/reforms/states/ny/wftc/ny_working_families_tax_credit.py +++ b/policyengine_us/reforms/states/ny/wftc/ny_working_families_tax_credit.py @@ -239,18 +239,22 @@ def formula(person, period, parameters): is_dependent = person("is_tax_unit_dependent", period) age = person("age", period) p_irs = parameters(period).gov.irs.dependent.ineligible_age - student = person("is_full_time_student", period) - student_age_eligible = age < p_irs.student p_ref = parameters(period).gov.contrib.states.ny.wftc - older_student_age_eligible = p_ref.child_age_threshold < age - age_eligible = student_age_eligible & older_student_age_eligible - return is_dependent & student & age_eligible + wftc_older_age_eiligble = age > p_ref.child_age_threshold + non_student_age_eligible = wftc_older_age_eiligble & ( + age < p_irs.non_student + ) + student = person("is_full_time_student", period) + student_age_eligible = ( + (age < p_irs.student) & student & wftc_older_age_eiligble + ) + age_eligible = non_student_age_eligible | student_age_eligible + return is_dependent & age_eligible class eitc_older_children_count(Variable): value_type = int entity = TaxUnit label = "EITC-qualifying younger children" - unit = USD documentation = "Number of children qualifying as children for the EITC, excluding dependents over 18." definition_period = YEAR @@ -474,7 +478,7 @@ def formula(person, period, parameters): child_dependent = person("is_child_dependent", period) wftc_eligible_child = person("ny_wftc_eligible_child", period) return child_dependent & ~wftc_eligible_child - return person("is_tax_unit_dependent", period) + return person("is_child_dependent", period) class ny_exemptions(Variable): value_type = float diff --git a/policyengine_us/system.py b/policyengine_us/system.py index e224cbe7e90..eab807e80fb 100644 --- a/policyengine_us/system.py +++ b/policyengine_us/system.py @@ -29,13 +29,33 @@ from .tools.default_uprating import add_default_uprating from policyengine_us_data import DATASETS, CPS_2024 +from typing import Annotated + + COUNTRY_DIR = Path(__file__).parent CURRENT_YEAR = 2024 -year_start = str(CURRENT_YEAR) + "-01-01" +DEFAULT_START_DATE = str(CURRENT_YEAR) + "-01-01" class CountryTaxBenefitSystem(TaxBenefitSystem): + """ + The tax-benefit system for the United States. + This structure is a modification of the -core + package's base TaxBenefitSystem class. + + Args: + reform (tuple | None): A tuple of reforms to apply to the system. + If no reform is applied, the system will be initialized with the + default tax/benefit parameters. + + start_instant(str: ISO date format YYYY-MM-DD): Optional; The date + at which the simulation begins; defaults to 2024-01-01; this is a + temporary patch for structural reforms, and must be set to the start + date of a structural reform parameter if it begins on a date other + than the first day of the current year. + """ + variables_dir = COUNTRY_DIR / "variables" auto_carry_over_input_variables = True basic_inputs = [ @@ -45,7 +65,13 @@ class CountryTaxBenefitSystem(TaxBenefitSystem): ] modelled_policies = COUNTRY_DIR / "modelled_policies.yaml" - def __init__(self, reform=None): + def __init__( + self, + reform: tuple | None = None, + start_instant: Annotated[ + str, "ISO date format YYYY-MM-DD" + ] = DEFAULT_START_DATE, + ): super().__init__(entities, reform=reform) self.load_parameters(COUNTRY_DIR / "parameters") self.add_abolition_parameters() @@ -62,7 +88,7 @@ def __init__(self, reform=None): add_default_uprating(self) structural_reform = create_structural_reforms_from_parameters( - self.parameters, year_start + self.parameters, start_instant ) if reform is None: reform = () @@ -85,6 +111,21 @@ def __init__(self, reform=None): class Simulation(CoreSimulation): + """ + A simulation of the tax-benefit system for the United States, + defined against the base simulation class in the -core package. + + This simulation is commonly used for household-level impacts, as it + does not include society-wide microdata. + + Args: + start_instant(str: ISO date format YYYY-MM-DD): Optional; The date + at which the simulation begins; defaults to 2024-01-01; this is a + temporary patch for structural reforms, and must be set to the start + date of a structural reform parameter if it begins on a date other + than the first day of the current year. + """ + default_tax_benefit_system = CountryTaxBenefitSystem default_tax_benefit_system_instance = system default_role = "member" @@ -93,10 +134,13 @@ class Simulation(CoreSimulation): datasets = DATASETS def __init__(self, *args, **kwargs): + start_instant: Annotated[str, "ISO date format YYYY-MM-DD"] = ( + kwargs.pop("start_instant", DEFAULT_START_DATE) + ) super().__init__(*args, **kwargs) reform = create_structural_reforms_from_parameters( - self.tax_benefit_system.parameters, year_start + self.tax_benefit_system.parameters, start_instant ) if reform is not None: self.apply_reform(reform) @@ -137,6 +181,21 @@ def __init__(self, *args, **kwargs): class Microsimulation(CoreMicrosimulation): + """ + A microsimulation of the tax-benefit system for the United States, + defined against the base microsimulation class in the -core package. + + This simulation contains society-wide representative microdata, and is + thus suitable for society-level impacts. + + Args: + start_instant(str: ISO date format YYYY-MM-DD): Optional; The date + at which the simulation begins; defaults to 2024-01-01; this is a + temporary patch for structural reforms, and must be set to the start + date of a structural reform parameter if it begins on a date other + than the first day of the current year. + """ + default_tax_benefit_system = CountryTaxBenefitSystem default_tax_benefit_system_instance = system default_dataset = CPS_2024 @@ -147,10 +206,13 @@ class Microsimulation(CoreMicrosimulation): datasets = DATASETS def __init__(self, *args, **kwargs): + start_instant: Annotated[str, "ISO date format YYYY-MM-DD"] = ( + kwargs.pop("start_instant", DEFAULT_START_DATE) + ) super().__init__(*args, **kwargs) reform = create_structural_reforms_from_parameters( - self.tax_benefit_system.parameters, year_start + self.tax_benefit_system.parameters, start_instant ) if reform is not None: self.apply_reform(reform) diff --git a/policyengine_us/tests/policy/baseline/gov/local/ca/la/dss/expectant_parent_payment/ca_la_expectant_parent_payment_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/local/ca/la/dss/expectant_parent_payment/ca_la_expectant_parent_payment_eligible.yaml index 51821614890..9487c3d9490 100644 --- a/policyengine_us/tests/policy/baseline/gov/local/ca/la/dss/expectant_parent_payment/ca_la_expectant_parent_payment_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/local/ca/la/dss/expectant_parent_payment/ca_la_expectant_parent_payment_eligible.yaml @@ -42,3 +42,12 @@ current_pregnancy_month: 10 output: ca_la_expectant_parent_payment_eligible: false + +- name: Eligible person, 8 months pregnant + period: 2022-01 + input: + in_la: true + ca_foster_care_minor_dependent: true + current_pregnancy_month: 8 + output: + ca_la_expectant_parent_payment_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/ssa/ssi/is_ssi_qualified_noncitizen.yaml b/policyengine_us/tests/policy/baseline/gov/ssa/ssi/is_ssi_qualified_noncitizen.yaml new file mode 100644 index 00000000000..2682d386874 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/ssa/ssi/is_ssi_qualified_noncitizen.yaml @@ -0,0 +1,36 @@ +- name: SSI citizenship tests + period: 2024 + input: + people: + person0: + is_disabled: true + immigration_status: LEGAL_PERMANENT_RESIDENT + ssi_qualifying_quarters_earnings: 30 + person1: + is_disabled: true + immigration_status: LEGAL_PERMANENT_RESIDENT + ssi_qualifying_quarters_earnings: 50 + person2: + is_disabled: true + immigration_status: REFUGEE + person3: + is_disabled: true + immigration_status: ASYLEE + person4: + is_disabled: true + immigration_status: DEPORTATION_WITHHELD + person5: + is_disabled: true + immigration_status: CUBAN_HAITIAN_ENTRANT + person6: + is_disabled: true + immigration_status: CONDITIONAL_ENTRANT + person7: + is_disabled: true + immigration_status: PAROLED_ONE_YEAR + person8: + is_disabled: true + immigration_status: UNDOCUMENTED + output: + is_ssi_qualified_noncitizen: [false, true, true, true, true, true, true, true, false] + is_ssi_eligible_individual: [false, true, true, true, true, true, true, true, false] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml new file mode 100644 index 00000000000..cc10e273316 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/ca_capi.yaml @@ -0,0 +1,94 @@ +- name: Single eligible person + period: 2024 + input: + people: + person1: + ssi_amount_if_eligible: 1_000 + ca_capi_eligible_person: true + ssi_countable_income: 500 + spm_units: + spm_unit: + members: [person1] + ca_capi_eligible: true + ca_state_supplement_payment_standard: 2_000 + output: + ca_capi: 2_490 + + +- name: Couple, both people eligible + period: 2024 + input: + people: + person1: + ssi_amount_if_eligible: 1_000 + ca_capi_eligible_person: true + ssi_countable_income: 500 + person2: + ssi_amount_if_eligible: 1_000 + ca_capi_eligible_person: true + ssi_countable_income: 4_000 + spm_units: + spm_unit: + members: [person1, person2] + ca_capi_eligible: true + ca_state_supplement_payment_standard: 4_000 + output: + ca_capi: 1_480 + +- name: Integration test, ineligible + period: 2024 + input: + people: + person1: + age: 40 + employment_income: 20_000 + person2: + age: 10 + employment_income: 0 + households: + household: + members: [person1, person2] + state_code: CA + output: + ca_capi: 0 + +- name: Integration test, ssi eligible + period: 2024 + input: + people: + person1: + age: 40 + employment_income: 1_000 + is_disabled: true + person2: + age: 10 + employment_income: 0 + households: + household: + members: [person1, person2] + state_code: CA + output: + ssi: [11_316, 0] + ca_state_supplement_payment_standard: 9_264 + ca_capi: 0 + +- name: Integration test, not a Citizen + period: 2024 + input: + people: + person1: + age: 40 + employment_income: 1_000 + is_disabled: true + immigration_status: UNDOCUMENTED + person2: + age: 10 + employment_income: 0 + households: + household: + members: [person1, person2] + state_code: CA + output: + ssi: 0 + ca_state_supplement_payment_standard: 9_264 + ca_capi: 20_570 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/eligibility/ca_capi_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/eligibility/ca_capi_eligible.yaml new file mode 100644 index 00000000000..f91225933e2 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/eligibility/ca_capi_eligible.yaml @@ -0,0 +1,29 @@ +- name: Eligible + period: 2024 + input: + ca_capi_resource_eligible: true + ca_capi_income_eligible: true + state_code: CA + ca_capi_eligible_person: true + output: + ca_capi_eligible: true + +- name: Resource ineligible + period: 2024 + input: + ca_capi_resource_eligible: false + ca_capi_income_eligible: true + ca_capi_eligible_person: true + state_code: CA + output: + ca_capi_eligible: false + +- name: Income ineligible + period: 2024 + input: + ca_capi_resource_eligible: true + ca_capi_income_eligible: false + ca_capi_eligible_person: true + state_code: CA + output: + ca_capi_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/eligibility/ca_capi_eligible_person.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/eligibility/ca_capi_eligible_person.yaml new file mode 100644 index 00000000000..7215fa14765 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/eligibility/ca_capi_eligible_person.yaml @@ -0,0 +1,19 @@ +- name: Eligible person + period: 2023 + input: + is_ssi_aged_blind_disabled: true + is_ssi_eligible_spouse: false + immigration_status: ASYLEE + state_code: CA + output: + ca_capi_eligible_person: true + +- name: Citizens are not eligible + period: 2023 + input: + is_ssi_aged_blind_disabled: true + is_ssi_eligible_spouse: false + immigration_status: CITIZEN + state_code: CA + output: + ca_capi_eligible_person: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/eligibility/ca_capi_income_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/eligibility/ca_capi_income_eligible.yaml new file mode 100644 index 00000000000..a33d38fa225 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/eligibility/ca_capi_income_eligible.yaml @@ -0,0 +1,21 @@ +- name: Ineligible + period: 2024 + input: + ssi_amount_if_eligible: 2_000 + ca_state_supplement_payment_standard: 1_000 + ssi_countable_income: 3_001 + ca_capi_eligible_person: true + state_code: CA + output: + ca_capi_income_eligible: false + +- name: Eligible + period: 2024 + input: + ssi_amount_if_eligible: 2_000 + ca_state_supplement_payment_standard: 1_000 + ssi_countable_income: 2_999 + ca_capi_eligible_person: true + state_code: CA + output: + ca_capi_income_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/eligibility/ca_capi_resource_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/eligibility/ca_capi_resource_eligible.yaml new file mode 100644 index 00000000000..e21c6962b06 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/eligibility/ca_capi_resource_eligible.yaml @@ -0,0 +1,35 @@ +- name: Single person, eligible + period: 2023 + input: + ca_capi_resources: 2_000 + spm_unit_is_married: false + state_code: CA + output: + ca_capi_resource_eligible: true + +- name: Single person, ineligible + period: 2023 + input: + ca_capi_resources: 2_001 + spm_unit_is_married: false + state_code: CA + output: + ca_capi_resource_eligible: false + +- name: Couple eligible + period: 2023 + input: + ca_capi_resources: 3_000 + spm_unit_is_married: true + state_code: CA + output: + ca_capi_resource_eligible: true + +- name: Couple ineligible + period: 2023 + input: + ca_capi_resources: 3_001 + spm_unit_is_married: true + state_code: CA + output: + ca_capi_resource_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/resources/ca_capi_countable_vehicle_value.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/resources/ca_capi_countable_vehicle_value.yaml new file mode 100644 index 00000000000..47f49f0201a --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/resources/ca_capi_countable_vehicle_value.yaml @@ -0,0 +1,15 @@ +- name: Vehicle below resource threshold + period: 2024 + input: + household_vehicles_value: 4_500 + state_code: CA + output: + ca_capi_countable_vehicle_value: 0 + +- name: Vehicle above resource threshold + period: 2024 + input: + household_vehicles_value: 6_000 + state_code: CA + output: + ca_capi_countable_vehicle_value: 1_500 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/resources/ca_capi_resources.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/resources/ca_capi_resources.yaml new file mode 100644 index 00000000000..18d15803486 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/capi/resources/ca_capi_resources.yaml @@ -0,0 +1,17 @@ +- name: Vehicle below resource threshold + period: 2024 + input: + ssi_countable_resources: 4_000 + household_vehicles_value: 4_500 + state_code: CA + output: + ca_capi_resources: 4_000 + +- name: Vehicle above resource threshold + period: 2024 + input: + ssi_countable_resources: 4_000 + household_vehicles_value: 6_000 + state_code: CA + output: + ca_capi_resources: 5_500 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_blind_disabled_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_blind_disabled_amount.yaml new file mode 100644 index 00000000000..2f69bb37f6b --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_blind_disabled_amount.yaml @@ -0,0 +1,17 @@ +- name: Aged disabled amount greater than blind amount + period: 2024 + input: + ca_state_supplement_blind_amount: 1_000 + ca_state_supplement_aged_disabled_amount: 2_000 + state_code: CA + output: + ca_state_supplement_aged_blind_disabled_amount: 2_000 + +- name: Aged disabled amount smaller than blind amount + period: 2024 + input: + ca_state_supplement_blind_amount: 1_800 + ca_state_supplement_aged_disabled_amount: 1_000 + state_code: CA + output: + ca_state_supplement_aged_blind_disabled_amount: 1_800 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_amount.yaml new file mode 100644 index 00000000000..be2c6b19465 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_amount.yaml @@ -0,0 +1,70 @@ +- name: Single aged parent, blind + period: 2024 + input: + people: + person1: + age: 68 + is_tax_unit_head: true + person2: + age: 4 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_is_married: false + households: + household: + members: [person1, person2] + state_code: CA + output: + ca_state_supplement_aged_disabled_amount: 7_560 + +- name: Married couple, aged and disabled + period: 2024 + input: + people: + person1: + age: 68 + is_tax_unit_head: true + person2: + age: 64 + is_tax_unit_spouse: true + is_disabled: true + person3: + age: 4 + is_tax_unit_dependent: true + is_blind: true + spm_units: + spm_unit: + members: [person1, person2, person3] + spm_unit_is_married: true + households: + household: + members: [person1, person2, person3] + state_code: CA + output: + ca_state_supplement_aged_disabled_amount: 14_004 + +- name: Married couple, only one aged and disabled + period: 2024 + input: + people: + person1: + age: 68 + is_tax_unit_head: true + person2: + age: 64 + is_tax_unit_spouse: true + person3: + age: 4 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2, person3] + spm_unit_is_married: true + households: + household: + members: [person1, person2, person3] + state_code: CA + output: + ca_state_supplement_aged_disabled_amount: 7_560 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_count.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_count.yaml new file mode 100644 index 00000000000..f45f10d7429 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_aged_disabled_count.yaml @@ -0,0 +1,75 @@ +- name: Two aged and disabled people + period: 2024 + input: + people: + person1: + age: 68 + is_tax_unit_head: true + is_disabled: false + person2: + age: 64 + is_tax_unit_spouse: true + is_disabled: true + person3: + age: 4 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: CA + output: + ca_state_supplement_aged_disabled_count: 2 + +- name: One aged and disabled person + period: 2024 + input: + people: + person1: + age: 68 + is_tax_unit_head: true + is_disabled: false + person2: + age: 64 + is_tax_unit_spouse: false + is_disabled: false + person3: + age: 4 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: CA + output: + ca_state_supplement_aged_disabled_count: 1 + +- name: No aged or disabled head or spouse + period: 2024 + input: + people: + person1: + age: 60 + is_tax_unit_head: true + is_disabled: false + person2: + age: 64 + is_tax_unit_spouse: false + is_disabled: false + person3: + age: 4 + is_tax_unit_dependent: true + is_disabled: true + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: CA + output: + ca_state_supplement_aged_disabled_count: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_blind_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_blind_amount.yaml new file mode 100644 index 00000000000..de4a0478f2c --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_blind_amount.yaml @@ -0,0 +1,25 @@ +- name: Married couple, one blind + period: 2024 + input: + people: + person1: + age: 68 + is_tax_unit_head: true + is_blind: true + person2: + age: 64 + is_tax_unit_spouse: true + is_blind: true + person3: + age: 4 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2, person3] + spm_unit_is_married: true + households: + household: + members: [person1, person2, person3] + state_code: CA + output: + ca_state_supplement_blind_amount: 16_464 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_dependent_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_dependent_amount.yaml new file mode 100644 index 00000000000..c474f9a4597 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_dependent_amount.yaml @@ -0,0 +1,47 @@ +- name: One eligible dependent + period: 2024 + input: + people: + person1: + age: 68 + is_tax_unit_head: true + is_blind: true + person2: + age: 4 + is_tax_unit_dependent: true + is_blind: true + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + output: + ca_state_supplement_dependent_amount: 5_988 + +- name: One eligible dependent, one ineligible + period: 2024 + input: + people: + person1: + age: 68 + is_tax_unit_head: true + is_blind: true + person2: + age: 4 + is_tax_unit_dependent: true + is_blind: true + person3: + age: 4 + is_tax_unit_dependent: true + is_blind: false + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: CA + output: + ca_state_supplement_dependent_amount: 5_988 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance.yaml new file mode 100644 index 00000000000..64e4be250c3 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance.yaml @@ -0,0 +1,98 @@ +- name: Married couple, one person aged + period: 2024 + input: + people: + person1: + age: 68 + is_tax_unit_head: true + person2: + age: 40 + is_tax_unit_spouse: true + is_disabled: false + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: false + output: + ca_state_supplement_food_allowance: 816 + +- name: Married couple, one person aged, not eligible + period: 2024 + input: + people: + person1: + age: 68 + is_tax_unit_head: true + person2: + age: 40 + is_tax_unit_spouse: true + is_disabled: false + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: true + output: + ca_state_supplement_food_allowance: 0 + +- name: Married couple, nobody aged or disabled + period: 2024 + input: + people: + person1: + age: 40 + is_tax_unit_head: true + person2: + age: 40 + is_tax_unit_spouse: true + is_disabled: false + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: false + output: + ca_state_supplement_food_allowance: 0 + +- name: Married couple, both disabled + period: 2024 + input: + people: + person1: + age: 40 + is_tax_unit_head: true + is_disabled: true + person2: + age: 40 + is_tax_unit_spouse: true + is_disabled: true + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + living_arrangements_allow_for_food_preparation: false + output: + ca_state_supplement_food_allowance: 1_632 + +- name: Eligible married household with two aged or disabled people + period: 2024 + input: + ca_state_supplement_food_allowance_eligible: true + spm_unit_is_married: true + ca_state_supplement_aged_disabled_count: 2 + state_code: CA + output: + ca_state_supplement_food_allowance: 1_632 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance_eligible.yaml new file mode 100644 index 00000000000..2249a38e698 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_food_allowance_eligible.yaml @@ -0,0 +1,26 @@ +- name: Living arrangements allow for food preparation + period: 2024 + input: + ca_state_supplement_aged_disabled_count: 1 + living_arrangements_allow_for_food_preparation: true + state_code: CA + output: + ca_state_supplement_food_allowance_eligible: false + +- name: Eligible + period: 2024 + input: + ca_state_supplement_aged_disabled_count: 1 + living_arrangements_allow_for_food_preparation: false + state_code: CA + output: + ca_state_supplement_food_allowance_eligible: true + +- name: No aged or disabled people + period: 2024 + input: + ca_state_supplement_aged_disabled_count: 0 + living_arrangements_allow_for_food_preparation: false + state_code: CA + output: + ca_state_supplement_food_allowance_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_medical_care_facility_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_medical_care_facility_amount.yaml new file mode 100644 index 00000000000..9feb0736a8c --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_medical_care_facility_amount.yaml @@ -0,0 +1,35 @@ +- name: One person in medical care facility + period: 2024 + input: + people: + person1: + ca_in_medical_care_facility: true + person2: + ca_in_medical_care_facility: false + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + output: + ca_state_supplement_medical_care_facility_amount: 504 + +- name: Nobody in medical care facility + period: 2024 + input: + people: + person1: + ca_in_medical_care_facility: false + person2: + ca_in_medical_care_facility: false + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + output: + ca_state_supplement_medical_care_facility_amount: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_out_of_home_care_facility_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_out_of_home_care_facility_amount.yaml new file mode 100644 index 00000000000..468e0bd448f --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/ca_state_supplement_out_of_home_care_facility_amount.yaml @@ -0,0 +1,35 @@ +- name: One person in out of home care facility + period: 2024 + input: + people: + person1: + in_out_of_home_care_facility: true + person2: + in_out_of_home_care_facility: false + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + output: + ca_state_supplement_out_of_home_care_facility_amount: 8_508 + +- name: Nobody in out of home care facility + period: 2024 + input: + people: + person1: + in_out_of_home_care_facility: false + person2: + in_out_of_home_care_facility: false + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + output: + ca_state_supplement_out_of_home_care_facility_amount: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/integration.yaml new file mode 100644 index 00000000000..adfa34a1c5c --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/cdss/state_supplement/integration.yaml @@ -0,0 +1,49 @@ +- name: Single blind parent with non eligible dependent child + period: 2024 + input: + people: + person1: + age: 30 + is_tax_unit_head: true + is_blind: true + person2: + age: 4 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: CA + output: + ca_state_supplement_payment_standard: 8_448 + +- name: Married household with one blind and one disabled person, with a disabled dependent child, no food preparation and spouse in out of home care + period: 2024-01 + input: + people: + person1: + age: 65 + is_tax_unit_head: true + is_blind: true + person2: + age: 66 + is_tax_unit_spouse: true + is_disabled: true + in_out_of_home_care_facility: true + person3: + age: 17 + is_tax_unit_dependent: true + is_disabled: true + spm_units: + spm_unit: + members: [person1, person2, person3] + spm_unit_is_married: true + households: + household: + members: [person1, person2, person3] + state_code: CA + living_arrangements_allow_for_food_preparation: false + output: + ca_state_supplement_payment_standard: 2_639 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_eligible.yaml new file mode 100644 index 00000000000..98310ca90f8 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_eligible.yaml @@ -0,0 +1,15 @@ +- name: Single filing status is not eligible for the alternate tax + period: 2021 + input: + filing_status: SINGLE + state_code: IA + output: + ia_alternate_tax_eligible: false + +- name: Joint filing status is eligible for the alternate tax + period: 2021 + input: + filing_status: JOINT + state_code: IA + output: + ia_alternate_tax_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_alternate_tax_indiv.yaml b/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_indiv.yaml similarity index 100% rename from policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_alternate_tax_indiv.yaml rename to policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_indiv.yaml diff --git a/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_alternate_tax_joint.yaml b/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_joint.yaml similarity index 100% rename from policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_alternate_tax_joint.yaml rename to policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_joint.yaml diff --git a/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_alternate_tax_unit.yaml b/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_unit.yaml similarity index 66% rename from policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_alternate_tax_unit.yaml rename to policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_unit.yaml index ddaa54c3772..423b4f58bb4 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_alternate_tax_unit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_unit.yaml @@ -22,3 +22,15 @@ state_code: IA output: ia_alternate_tax_unit: 85.30 # = (33_000 - 32_000) * 0.0853 + +- name: Still computes alternate tax for tax units when ineligible + absolute_error_margin: 0.01 + period: 2022 + input: + is_tax_unit_head: true + age: 65 + ia_modified_income: 33_000 + state_code: IA + filing_status: SINGLE + output: + ia_alternate_tax_unit: 85.30 # = (33_000 - 32_000) * 0.0853 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_base_tax_indiv.yaml b/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_base_tax_indiv.yaml index 7e927d0573e..54ff5a6cbc0 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_base_tax_indiv.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_base_tax_indiv.yaml @@ -14,5 +14,32 @@ household: members: [person1, person2] state_code: IA + tax_units: + tax_unit: + members: [person1, person2] + ia_alternate_tax_eligible: true output: ia_base_tax_indiv: [600, 400] + +- name: Ineligible for the alternate tax + period: 2021 + input: + people: + person1: + is_tax_unit_head: true + ia_regular_tax_indiv: 600 + ia_alternate_tax_indiv: 700 + person2: + is_tax_unit_spouse: true + ia_regular_tax_indiv: 500 + ia_alternate_tax_indiv: 400 + households: + household: + members: [person1, person2] + state_code: IA + tax_units: + tax_unit: + members: [person1, person2] + ia_alternate_tax_eligible: false + output: + ia_base_tax_indiv: [600, 500] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_base_tax_joint.yaml b/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_base_tax_joint.yaml index 56e17f3982d..8b5f4a0d345 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_base_tax_joint.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_base_tax_joint.yaml @@ -4,6 +4,7 @@ ia_regular_tax_joint: 600 ia_alternate_tax_joint: 700 state_code: IA + ia_alternate_tax_eligible: true output: ia_base_tax_joint: 600 @@ -13,5 +14,16 @@ ia_regular_tax_joint: 800 ia_alternate_tax_joint: 700 state_code: IA + ia_alternate_tax_eligible: true output: ia_base_tax_joint: 700 + +- name: Ineligible for the alternate tax + period: 2022 + input: + ia_regular_tax_joint: 800 + ia_alternate_tax_joint: 700 + state_code: IA + ia_alternate_tax_eligible: false + output: + ia_base_tax_joint: 800 diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/credits/il_k12_education_expense_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/credits/il_k12_education_expense_credit.yaml index a23073c6e7a..b40922419b8 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/credits/il_k12_education_expense_credit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/credits/il_k12_education_expense_credit.yaml @@ -3,7 +3,7 @@ input: age: 30 k12_tuition_and_fees: 10_000 - il_income_tax_before_nonrefundable_credits: 10_000 + il_income_tax_before_non_refundable_credits: 10_000 il_property_tax_credit: 5_000 state_code: IL output: @@ -14,7 +14,7 @@ input: age: 30 k12_tuition_and_fees: 10_000 - il_income_tax_before_nonrefundable_credits: 10_000 + il_income_tax_before_non_refundable_credits: 10_000 il_property_tax_credit: 9_750 state_code: IL output: @@ -25,7 +25,7 @@ input: age: 30 k12_tuition_and_fees: 2_250 - il_income_tax_before_nonrefundable_credits: 100_000 + il_income_tax_before_non_refundable_credits: 100_000 il_property_tax_credit: 2_000 state_code: IL output: diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/credits/il_property_tax_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/credits/il_property_tax_credit.yaml index 75c0909a81d..9069278632c 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/credits/il_property_tax_credit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/credits/il_property_tax_credit.yaml @@ -8,7 +8,7 @@ tax_units: tax_unit: members: [person1] - il_income_tax_before_nonrefundable_credits: 10_000 + il_income_tax_before_non_refundable_credits: 10_000 households: household: members: [person1] @@ -26,7 +26,7 @@ tax_units: tax_unit: members: [person1] - il_income_tax_before_nonrefundable_credits: 10_000 + il_income_tax_before_non_refundable_credits: 10_000 households: household: members: [person1] diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/integration.yaml new file mode 100644 index 00000000000..7b18468c0f5 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/integration.yaml @@ -0,0 +1,53 @@ +- name: Single person with high income + absolute_error_margin: 5 + period: '2023' + input: + people: + person1: + age: 40 + employment_income: 1_000_001.0 + ssi: 0 + state_supplement: 0 + wic: 0 + tax_units: + tax_unit: + members: [person1] + tax_unit_childcare_expenses: 0 + premium_tax_credit: 0 + local_income_tax: 0 + state_sales_tax: 0 + il_use_tax: 0 + spm_units: + spm_unit: + members: [person1] + snap: 0 + tanf: 0 + households: + household: + members: [person1] + state_fips: 17 + output: + income_tax: 325207.5 + il_income_tax: 49500.0 + taxsim_tfica: 31632.400390625 + adjusted_gross_income: 1000000.0 + tax_unit_taxable_unemployment_compensation: 0.0 + tax_unit_taxable_social_security: 0.0 + standard_deduction: 13850.0 + exemptions: 0.0 + taxable_income_deductions_if_itemizing: 10000.0 + taxable_income: 986150.0 + income_tax_main_rates: 325207.5 + ctc: 0.0 + refundable_ctc: 0.0 + cdcc: 0.0 + eitc: 0.0 + amt_income: 1000000.0 + alternative_minimum_tax: 0.0 + qualified_business_income_deduction: 0.0 + il_taxable_income: 1000000.0 + il_property_tax_credit: 0.0 + il_eitc: 0.0 + il_ctc: 0.0 + net_investment_income_tax: 0.0 + recovery_rebate_credit: 0.0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/taxes/il_income_tax_before_nonrefundable_credits.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/taxes/il_income_tax_before_non_refundable_credits.yaml similarity index 65% rename from policyengine_us/tests/policy/baseline/gov/states/il/tax/income/taxes/il_income_tax_before_nonrefundable_credits.yaml rename to policyengine_us/tests/policy/baseline/gov/states/il/tax/income/taxes/il_income_tax_before_non_refundable_credits.yaml index 153f8d4964a..8de72030711 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/taxes/il_income_tax_before_nonrefundable_credits.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/taxes/il_income_tax_before_non_refundable_credits.yaml @@ -5,7 +5,7 @@ il_taxable_income: 1204985 state_code: IL output: - il_income_tax_before_nonrefundable_credits: (1204985 * 0.0495) + 12345 + il_income_tax_before_non_refundable_credits: (1204985 * 0.0495) + 12345 - name: "Test #2" period: 2021 input: @@ -13,7 +13,7 @@ il_taxable_income: 259082 state_code: IL output: - il_income_tax_before_nonrefundable_credits: (259082 * 0.0495) + 19034 + il_income_tax_before_non_refundable_credits: (259082 * 0.0495) + 19034 - name: "Test #3" period: 2021 input: @@ -21,4 +21,4 @@ il_taxable_income: 2843756 state_code: IL output: - il_income_tax_before_nonrefundable_credits: (2843756 * 0.0495) + 34598 + il_income_tax_before_non_refundable_credits: (2843756 * 0.0495) + 34598 diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/taxes/il_income_tax_before_refundable_credits.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/taxes/il_income_tax_before_refundable_credits.yaml index 3ee22f1f11c..fb4ff7f152d 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/taxes/il_income_tax_before_refundable_credits.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/il/tax/income/taxes/il_income_tax_before_refundable_credits.yaml @@ -1,7 +1,7 @@ - name: "Test #1" period: 2021 input: - il_income_tax_before_nonrefundable_credits: 12983 + il_income_tax_before_non_refundable_credits: 12983 il_nonrefundable_credits: 1234 state_code: IL output: @@ -9,7 +9,7 @@ - name: "Test #2" period: 2021 input: - il_income_tax_before_nonrefundable_credits: 87235 + il_income_tax_before_non_refundable_credits: 87235 il_nonrefundable_credits: 1287 state_code: IL output: @@ -17,7 +17,7 @@ - name: "Test #3" period: 2021 input: - il_income_tax_before_nonrefundable_credits: 1498124 + il_income_tax_before_non_refundable_credits: 1498124 il_nonrefundable_credits: 345892 state_code: IL output: diff --git a/policyengine_us/tests/policy/baseline/gov/states/ne/tax/income/adjusted_gross_income/ne_military_retirement_subtraction.yaml b/policyengine_us/tests/policy/baseline/gov/states/ne/tax/income/adjusted_gross_income/ne_military_retirement_subtraction.yaml new file mode 100644 index 00000000000..d6a4300aacd --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ne/tax/income/adjusted_gross_income/ne_military_retirement_subtraction.yaml @@ -0,0 +1,55 @@ +- name: Test 1 for 2022, NE military retirement substraction of amount $30,000, only person in tax unit, 67 or older + absolute_error_margin: 0.01 + period: 2022 + input: + people: + person1: + military_retirement_pay: 30_000 + age: 69 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + ne_military_retirement_subtraction: 30_000 + +- name: Test 2 for 2021, NE military retirement substraction of amount $30,000, only person in tax unit, 67 or older + absolute_error_margin: 0.01 + period: 2021 + input: + people: + person1: + military_retirement_pay: 30_000 + age: 69 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + ne_military_retirement_subtraction: 12_000 + +- name: Test 3 for 2022, NE military retirement substraction of amount $30,000, only person in tax unit, less than 67 + absolute_error_margin: 0.01 + period: 2022 + input: + people: + person1: + military_retirement_pay: 30_000 + age: 60 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NE + output: + ne_military_retirement_subtraction: 0 + + diff --git a/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/deductions/nj_medical_expense_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/deductions/nj_medical_expense_deduction.yaml new file mode 100644 index 00000000000..4a5c529dfd4 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/deductions/nj_medical_expense_deduction.yaml @@ -0,0 +1,32 @@ +- name: No AGI - total expenses deductable + period: 2022 + absolute_error_margin: 0 + input: + self_employed_health_insurance_ald: 1_000 + medical_out_of_pocket_expenses: 2_000 + nj_agi: 0 + state_code: NJ + output: + nj_medical_expense_deduction: 3_000 + +- name: High AGI - only self-employed health insurance deduction applies + period: 2022 + absolute_error_margin: 0 + input: + self_employed_health_insurance_ald: 1_000 + medical_out_of_pocket_expenses: 2_000 + nj_agi: 100_000 + state_code: NJ + output: + nj_medical_expense_deduction: 1_000 + +- name: Partial out of pocket expenses deductable + period: 2022 + absolute_error_margin: 0 + input: + self_employed_health_insurance_ald: 1_000 + medical_out_of_pocket_expenses: 2_000 + nj_agi: 20_000 + state_code: NJ + output: + nj_medical_expense_deduction: 2_600 diff --git a/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/property_tax/nj_potential_property_tax_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/deductions/property_tax/nj_potential_property_tax_deduction.yaml similarity index 100% rename from policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/property_tax/nj_potential_property_tax_deduction.yaml rename to policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/deductions/property_tax/nj_potential_property_tax_deduction.yaml diff --git a/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/property_tax/nj_property_tax_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/deductions/property_tax/nj_property_tax_deduction.yaml similarity index 100% rename from policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/property_tax/nj_property_tax_deduction.yaml rename to policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/deductions/property_tax/nj_property_tax_deduction.yaml diff --git a/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/property_tax/nj_property_tax_deduction_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/deductions/property_tax/nj_property_tax_deduction_eligible.yaml similarity index 100% rename from policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/property_tax/nj_property_tax_deduction_eligible.yaml rename to policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/deductions/property_tax/nj_property_tax_deduction_eligible.yaml diff --git a/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/property_tax/nj_taking_property_tax_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/deductions/property_tax/nj_taking_property_tax_deduction.yaml similarity index 100% rename from policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/property_tax/nj_taking_property_tax_deduction.yaml rename to policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/deductions/property_tax/nj_taking_property_tax_deduction.yaml diff --git a/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/credits/ny_college_tuition_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/credits/ny_college_tuition_credit.yaml index 76833919130..729dd43e997 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/credits/ny_college_tuition_credit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/credits/ny_college_tuition_credit.yaml @@ -1,44 +1,39 @@ -- name: $6k tuition, doesn't itemize. +- name: $6k tuition, eligible. period: 2022 input: - state_code: NY - qualified_tuition_expenses: 6_000 - ny_itemizes: false + ny_allowable_college_tuition_expenses: 6_000 + ny_college_tuition_credit_eligible: true output: ny_college_tuition_credit: 200 + 0.04 * 1_000 -- name: $6k tuition, itemizes. +- name: $6k tuition, ineligible. period: 2022 input: - state_code: NY - qualified_tuition_expenses: 6_000 - ny_itemizes: true + ny_allowable_college_tuition_expenses: 6_000 + ny_college_tuition_credit_eligible: false output: ny_college_tuition_credit: 0 -- name: $100 tuition, doesn't itemize. +- name: $100 tuition, eligible period: 2022 input: - state_code: NY - qualified_tuition_expenses: 100 - ny_itemizes: false + ny_allowable_college_tuition_expenses: 100 + ny_college_tuition_credit_eligible: true output: ny_college_tuition_credit: 100 -- name: $4,000 tuition, doesn't itemize. +- name: $4,000 tuition, eligible. period: 2022 input: - state_code: NY - qualified_tuition_expenses: 4_000 - ny_itemizes: false + ny_allowable_college_tuition_expenses: 4_000 + ny_college_tuition_credit_eligible: true output: ny_college_tuition_credit: 200 -- name: $6k tuition, doesn't itemize, in 2002 when the applicable percentage was 50%. +- name: $6k tuition, eligible, in 2002 when the applicable percentage was 50%. period: 2002 input: - state_code: NY - qualified_tuition_expenses: 6_000 - ny_itemizes: false + ny_allowable_college_tuition_expenses: 6_000 + ny_college_tuition_credit_eligible: true output: ny_college_tuition_credit: 0.5 * (200 + 0.04 * 1_000) diff --git a/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/credits/ny_college_tuition_credit_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/credits/ny_college_tuition_credit_eligible.yaml new file mode 100644 index 00000000000..47ee25f13ab --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/credits/ny_college_tuition_credit_eligible.yaml @@ -0,0 +1,15 @@ +- name: Eligible if doesn't itemize (note this is an approximation for having claimed the college tuition itemized deduction). + period: 2022 + input: + state_code: NY + ny_itemizes: false + output: + ny_college_tuition_credit_eligible: true + +- name: Ineligible if itemizes (note this is an approximation for having claimed the college tuition itemized deduction). + period: 2022 + input: + state_code: NY + ny_itemizes: true + output: + ny_college_tuition_credit_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/ny_allowable_college_tuition_expenses.yaml b/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/ny_allowable_college_tuition_expenses.yaml new file mode 100644 index 00000000000..a1fe33acce8 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/ny_allowable_college_tuition_expenses.yaml @@ -0,0 +1,8 @@ +- name: New York limits allowable college tuition expenses to $10,000 per student. Check one student. + period: 2022 + absolute_error_margin: 0 + input: + state_code: NY + qualified_tuition_expenses: 12_000 + output: + ny_allowable_college_tuition_expenses: 10_000 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/taxable_income/deductions/ny_college_tuition_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/taxable_income/deductions/ny_college_tuition_deduction.yaml new file mode 100644 index 00000000000..03e5f5e091e --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/taxable_income/deductions/ny_college_tuition_deduction.yaml @@ -0,0 +1,8 @@ +- name: New York provides a 100% deduction for allowable college tuition expenses in 2024. + period: 2024 + absolute_error_margin: 0 + input: + state_code: NY + ny_allowable_college_tuition_expenses: 10_000 + output: + ny_college_tuition_deduction: 10_000 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/taxable_income/ny_exemptions.yaml b/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/taxable_income/ny_exemptions.yaml index 3ae4b1f5418..e5e06495934 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/taxable_income/ny_exemptions.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ny/tax/income/taxable_income/ny_exemptions.yaml @@ -3,6 +3,6 @@ absolute_error_margin: 0 input: state_code: NY - tax_unit_count_dependents: 2 + tax_unit_child_dependents: 2 output: ny_exemptions: 2_000 diff --git a/policyengine_us/tests/policy/baseline/gov/tax/income/integration.yaml b/policyengine_us/tests/policy/baseline/gov/tax/income/integration.yaml new file mode 100644 index 00000000000..1df8fe3da48 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/tax/income/integration.yaml @@ -0,0 +1,27 @@ +- name: Single parent with one child in DC + absolute_error_margin: 1 + period: 2024 + input: + people: + person1: + age: 30 + employment_income: 10_010 + person2: + age: 11 + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_pre_subsidy_childcare_expenses: 5_000 + households: + household: + members: [person1, person2] + state_code: DC + output: # expected results from patched TAXSIM35 2024-02-15 version + state_taxable_income: -11_890 + state_standard_deduction: 21_900 + state_property_tax_credit: 0 + state_itemized_deductions: 0 + state_eitc: 2_382 + state_ctc: 0 + state_cdcc: 336 + state_agi: 10_010 diff --git a/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/low_income/pr_compensatory_low_income_credit.yaml b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/low_income/pr_compensatory_low_income_credit.yaml new file mode 100644 index 00000000000..3e4c50b393b --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/low_income/pr_compensatory_low_income_credit.yaml @@ -0,0 +1,23 @@ +- name: Eligible person + period: 2024 + input: + pension_income: 4_800 + pr_low_income_credit_eligible: true + output: + pr_compensatory_low_income_credit: 300 + +- name: Pension income above limit + period: 2024 + input: + pension_income: 4_802 + pr_low_income_credit_eligible: true + output: + pr_compensatory_low_income_credit: 0 + +- name: Not eligible for low income credit + period: 2024 + input: + pension_income: 4_800 + pr_low_income_credit_eligible: false + output: + pr_compensatory_low_income_credit: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit.yaml b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit.yaml new file mode 100644 index 00000000000..9ce7398c72d --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit.yaml @@ -0,0 +1,74 @@ +- name: Two eligible people + absolute_error_margin: 0.01 + period: 2024 + input: + people: + person1: + pr_low_income_credit_eligible_person: true + person2: + pr_low_income_credit_eligible_person: true + tax_units: + tax_unit: + members: [person1, person2] + pr_low_income_credit_eligible: true + output: + pr_low_income_credit: 800 + +- name: Ineligible household + absolute_error_margin: 0.01 + period: 2024 + input: + people: + person1: + pr_low_income_credit_eligible_person: true + person2: + pr_low_income_credit_eligible_person: true + tax_units: + tax_unit: + members: [person1, person2] + pr_low_income_credit_eligible: false + households: + household1: + members: [person1, person2] + output: + pr_low_income_credit: 0 + +- name: One eligible person + absolute_error_margin: 0.01 + period: 2024 + input: + people: + person1: + pr_low_income_credit_eligible_person: true + person2: + pr_low_income_credit_eligible_person: false + tax_units: + tax_unit: + members: [person1, person2] + pr_low_income_credit_eligible: true + households: + household1: + members: [person1, person2] + output: + pr_low_income_credit: 400 + +- name: One eligible person, two ineligible + absolute_error_margin: 0.01 + period: 2023 + input: + people: + person1: + pr_low_income_credit_eligible_person: true + person2: + pr_low_income_credit_eligible_person: false + person3: + pr_low_income_credit_eligible_person: false + tax_units: + tax_unit: + members: [person1, person2, person3] + pr_low_income_credit_eligible: true + households: + household1: + members: [person1, person2] + output: + pr_low_income_credit: 400 diff --git a/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit_eligible.yaml new file mode 100644 index 00000000000..2fcc6fcae33 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit_eligible.yaml @@ -0,0 +1,63 @@ +- name: Two eligible people + absolute_error_margin: 0.01 + period: 2024 + input: + people: + person1: + pr_low_income_credit_eligible_person: true + person2: + pr_low_income_credit_eligible_person: true + tax_units: + tax_unit: + members: [person1, person2] + pr_gross_income: 29_000 + output: + pr_low_income_credit_eligible: true + +- name: Two ineligible people + absolute_error_margin: 0.01 + period: 2024 + input: + people: + person1: + pr_low_income_credit_eligible_person: false + person2: + pr_low_income_credit_eligible_person: false + tax_units: + tax_unit: + members: [person1, person2] + pr_gross_income: 32_000 + output: + pr_low_income_credit_eligible: false + +- name: One person eligible + absolute_error_margin: 0.01 + period: 2024 + input: + people: + person1: + pr_low_income_credit_eligible_person: true + person2: + pr_low_income_credit_eligible_person: false + tax_units: + tax_unit: + members: [person1, person2] + pr_gross_income: 15_000 + output: + pr_low_income_credit_eligible: true + +- name: One person age eligible but income ineligible + absolute_error_margin: 0.01 + period: 2024 + input: + people: + person1: + pr_low_income_credit_eligible_person: true + person2: + pr_low_income_credit_eligible_person: false + tax_units: + tax_unit: + members: [person1, person2] + pr_gross_income: 15_001 + output: + pr_low_income_credit_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit_eligible_person.yaml b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit_eligible_person.yaml new file mode 100644 index 00000000000..11868cbcc36 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit_eligible_person.yaml @@ -0,0 +1,23 @@ +- name: Eligible person + period: 2024 + input: + age: 65 + is_tax_unit_head_or_spouse: true + output: + pr_low_income_credit_eligible_person: true + +- name: Age ineligible person + period: 2024 + input: + age: 64 + is_tax_unit_head_or_spouse: true + output: + pr_low_income_credit_eligible_person: false + +- name: Not head or spouse + period: 2024 + input: + age: 65 + is_tax_unit_head_or_spouse: false + output: + pr_low_income_credit_eligible_person: false diff --git a/policyengine_us/tests/policy/baseline/household/demographic/spm_unit/spm_unit_is_married.yaml b/policyengine_us/tests/policy/baseline/household/demographic/spm_unit/spm_unit_is_married.yaml new file mode 100644 index 00000000000..f334cb685ae --- /dev/null +++ b/policyengine_us/tests/policy/baseline/household/demographic/spm_unit/spm_unit_is_married.yaml @@ -0,0 +1,31 @@ +- name: Inference from tax units + period: 2022 + input: + people: + head: {} + spouse: {} + tax_units: + tax_unit: + members: [head, spouse] + filing_status: JOINT + spm_units: + spm_unit: + members: [head, spouse] + output: + spm_unit_is_married: true + +- name: Inference from tax units + period: 2022 + input: + people: + head: {} + spouse: {} + tax_units: + tax_unit: + members: [head, spouse] + filing_status: HEAD_OF_HOUSEHOLD + spm_units: + spm_unit: + members: [head, spouse] + output: + spm_unit_is_married: false diff --git a/policyengine_us/tests/policy/contrib/congress/tlaib/boost/boost_middle_class_tax_credit.yaml b/policyengine_us/tests/policy/contrib/congress/tlaib/boost/boost_middle_class_tax_credit.yaml index 4da075c2cc4..0f88c3f8572 100644 --- a/policyengine_us/tests/policy/contrib/congress/tlaib/boost/boost_middle_class_tax_credit.yaml +++ b/policyengine_us/tests/policy/contrib/congress/tlaib/boost/boost_middle_class_tax_credit.yaml @@ -21,6 +21,7 @@ snap: 0 tanf: 0 free_school_meals: 0 + ca_capi: 0 output: boost_middle_class_tax_credit: 3_000 income_tax_refundable_credits: 3_000 @@ -50,6 +51,7 @@ snap: 0 tanf: 0 free_school_meals: 0 + ca_capi: 0 output: boost_middle_class_tax_credit: 3_000 income_tax_refundable_credits: 0 @@ -79,6 +81,7 @@ snap: 0 tanf: 0 free_school_meals: 0 + ca_capi: 0 output: boost_middle_class_tax_credit: 0 income_tax_refundable_credits: 0 @@ -108,6 +111,7 @@ snap: 0 tanf: 0 free_school_meals: 0 + ca_capi: 0 output: boost_middle_class_tax_credit: 1_500 income_tax_refundable_credits: 2_500 @@ -137,6 +141,7 @@ snap: 2_000 tanf: 0 free_school_meals: 0 + ca_capi: 0 output: boost_middle_class_tax_credit: 1_500 income_tax_refundable_credits: 0 diff --git a/policyengine_us/tests/policy/contrib/congress/tlaib/end_child_poverty_act/integration.yaml b/policyengine_us/tests/policy/contrib/congress/tlaib/end_child_poverty_act/integration.yaml index 0a95cabaf90..d14f9f82f36 100644 --- a/policyengine_us/tests/policy/contrib/congress/tlaib/end_child_poverty_act/integration.yaml +++ b/policyengine_us/tests/policy/contrib/congress/tlaib/end_child_poverty_act/integration.yaml @@ -88,6 +88,7 @@ members: [head, child_1, child_2] free_school_meals: 0 snap: 0 + ca_capi: 0 output: ecpa_adult_dependent_credit: 0 ecpa_child_benefit: 5_380 * 2 @@ -122,6 +123,7 @@ members: [head, child_1, child_2] free_school_meals: 0 snap: 0 + ca_capi: 0 output: non_refundable_ctc: 800 household_benefits: 0 diff --git a/policyengine_us/tests/policy/contrib/ctc/eppc/expanded_ctc.yaml b/policyengine_us/tests/policy/contrib/ctc/eppc/expanded_ctc.yaml new file mode 100644 index 00000000000..0d6e3ce7f13 --- /dev/null +++ b/policyengine_us/tests/policy/contrib/ctc/eppc/expanded_ctc.yaml @@ -0,0 +1,173 @@ +- name: Base test + period: 2024 + reforms: policyengine_us.reforms.ctc.eppc.expanded_ctc.expanded_ctc + input: + gov.contrib.ctc.eppc.expanded_ctc.in_effect: true + income_tax_pre_ctc: 800 + snap: 200 + tanf: 500 + maximum_benefits: 900 + output: + ctc_phase_in: 150 + +- name: Negative pre-ctc income tax + period: 2024 + reforms: policyengine_us.reforms.ctc.eppc.expanded_ctc.expanded_ctc + input: + gov.contrib.ctc.eppc.expanded_ctc.in_effect: true + income_tax_pre_ctc: -1_000 + maximum_benefits: 0 + output: + ctc_phase_in: 0 + +- name: Single parent of one child, $20k income + period: 2024 + reforms: policyengine_us.reforms.ctc.eppc.expanded_ctc.expanded_ctc + input: + gov.contrib.ctc.eppc.expanded_ctc.in_effect: true + people: + person1: + age: 40 + employment_income: 20_000 + person2: + age: 10 + tax_units: + tax_unit: + members: [person1, person2] + output: + non_refundable_ctc: 540 + refundable_ctc: 1_460 + income_tax_pre_ctc: 540 + income_tax: -1_460 + +- name: Single parent of one child, $20k income - no reform, no eitc + period: 2024 + input: + gov.contrib.ctc.eppc.expanded_ctc.in_effect: false + people: + person1: + age: 40 + employment_income: 20_000 + person2: + age: 10 + tax_units: + tax_unit: + members: [person1, person2] + eitc: 0 + output: + non_refundable_ctc: 300 + refundable_ctc: 1_700 + income_tax: -1_700 + +- name: Joint household with one child, $10k income + period: 2024 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.ctc.eppc.expanded_ctc.expanded_ctc + input: + gov.contrib.ctc.eppc.expanded_ctc.in_effect: true + people: + person1: + age: 40 + employment_income: 10_000 + person2: + age: 40 + person3: + age: 10 + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: TX + output: + non_refundable_ctc: 1_748 + refundable_ctc: 252 + ctc_phase_in: 252 + household_benefits: 8_562 + maximum_benefits: 10_242 + income_tax_pre_ctc: 0 + income_tax: -252 + +- name: Joint household with one child, $10k income - no reform, no eitc + period: 2024 + absolute_error_margin: 1 + input: + gov.contrib.ctc.eppc.expanded_ctc.in_effect: false + people: + person1: + age: 40 + employment_income: 10_000 + person2: + age: 40 + person3: + age: 10 + tax_units: + tax_unit: + members: [person1, person2, person3] + eitc: 0 + households: + household: + members: [person1, person2, person3] + state_code: TX + output: + non_refundable_ctc: 875 + refundable_ctc: 1_125 + ctc_phase_in: 1_125 + household_benefits: 8_562 + income_tax: -1_125 + +- name: Joint household with one child, $60k income + period: 2024 + absolute_error_margin: 4 + reforms: policyengine_us.reforms.ctc.eppc.expanded_ctc.expanded_ctc + input: + gov.contrib.ctc.eppc.expanded_ctc.in_effect: true + people: + person1: + age: 40 + employment_income: 60_000 + person2: + age: 40 + person3: + age: 10 + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: TX + output: + non_refundable_ctc: 2_000 + refundable_ctc: 0 + ctc_phase_in: 2_021 + income_tax_pre_ctc: 3_232 + income_tax: 1_232 + +- name: Joint household with one child, $60k income, one high and one low earner + period: 2024 + absolute_error_margin: 4 + reforms: policyengine_us.reforms.ctc.eppc.expanded_ctc.expanded_ctc + input: + gov.contrib.ctc.eppc.expanded_ctc.in_effect: true + people: + person1: + age: 40 + employment_income: 50_000 + person2: + age: 40 + employment_income: 10_000 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: TX + output: + non_refundable_ctc: 0 + refundable_ctc: 0 + income_tax_pre_ctc: 3_232 + income_tax_main_rates_indiv: 4_016 + income_tax: 3_232 diff --git a/policyengine_us/tests/policy/contrib/deductions/salt/limit_salt_deduction_to_property_taxes.yaml b/policyengine_us/tests/policy/contrib/deductions/salt/limit_salt_deduction_to_property_taxes.yaml new file mode 100644 index 00000000000..0ce8b9de5dd --- /dev/null +++ b/policyengine_us/tests/policy/contrib/deductions/salt/limit_salt_deduction_to_property_taxes.yaml @@ -0,0 +1,41 @@ +- name: Reform active + period: 2025 + reforms: policyengine_us.reforms.deductions.salt.limit_salt_deduction_to_property_taxes.limit_salt_deduction_to_property_taxes + input: + gov.contrib.deductions.salt.limit_salt_deduction_to_property_taxes: true + real_estate_taxes: 5_000 + state_and_local_sales_or_income_tax: 6_000 + filing_status: JOINT + output: + salt_deduction: 5_000 + +- name: Baseline test + period: 2025 + input: + gov.contrib.deductions.salt.limit_salt_deduction_to_property_taxes: false + real_estate_taxes: 5_000 + state_and_local_sales_or_income_tax: 6_000 + filing_status: JOINT + output: + salt_deduction: 10_000 + +- name: 2026 reform test + period: 2026 + reforms: policyengine_us.reforms.deductions.salt.limit_salt_deduction_to_property_taxes.limit_salt_deduction_to_property_taxes + input: + gov.contrib.deductions.salt.limit_salt_deduction_to_property_taxes: true + real_estate_taxes: 5_000 + state_and_local_sales_or_income_tax: 6_000 + filing_status: JOINT + output: + salt_deduction: 5_000 + +- name: 2026 baseline test + period: 2026 + input: + gov.contrib.deductions.salt.limit_salt_deduction_to_property_taxes: false + real_estate_taxes: 5_000 + state_and_local_sales_or_income_tax: 6_000 + filing_status: JOINT + output: + salt_deduction: 11_000 diff --git a/policyengine_us/tests/policy/contrib/snap/abolish_snap_deductions.yaml b/policyengine_us/tests/policy/contrib/snap/abolish_snap_deductions.yaml new file mode 100644 index 00000000000..76a08893d5b --- /dev/null +++ b/policyengine_us/tests/policy/contrib/snap/abolish_snap_deductions.yaml @@ -0,0 +1,17 @@ +- name: Reform not in effect + period: 2024 + input: + snap_standard_deduction: 3_000 + snap_child_support_deduction: 1_000 + output: + snap_deductions: 4_000 + +- name: Reform in effect + period: 2024 + reforms: policyengine_us.reforms.snap.abolish_snap_deductions.abolish_snap_deductions + input: + gov.contrib.snap.abolish_deductions.in_effect: true + snap_standard_deduction: 3_000 + snap_child_support_deduction: 1_000 + output: + snap_deductions: 0 diff --git a/policyengine_us/tests/policy/contrib/snap/abolish_snap_net_income_test.yaml b/policyengine_us/tests/policy/contrib/snap/abolish_snap_net_income_test.yaml new file mode 100644 index 00000000000..815303047e9 --- /dev/null +++ b/policyengine_us/tests/policy/contrib/snap/abolish_snap_net_income_test.yaml @@ -0,0 +1,15 @@ +- name: Reform not in effect + period: 2024 + input: + snap_net_income_fpg_ratio: 1.5 + output: + meets_snap_net_income_test: false + +- name: Reform in effect + period: 2024 + reforms: policyengine_us.reforms.snap.abolish_snap_net_income_test.abolish_snap_net_income_test + input: + gov.contrib.snap.abolish_net_income_test.in_effect: true + snap_net_income_fpg_ratio: 1.5 + output: + meets_snap_net_income_test: true diff --git a/policyengine_us/tests/policy/contrib/states/dc/property_tax/dc_property_tax_credit.yaml b/policyengine_us/tests/policy/contrib/states/dc/property_tax/dc_property_tax_credit.yaml new file mode 100644 index 00000000000..c0844cea46a --- /dev/null +++ b/policyengine_us/tests/policy/contrib/states/dc/property_tax/dc_property_tax_credit.yaml @@ -0,0 +1,184 @@ +- name: No elderly head or spouse present + period: 2025 + reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit + input: + gov.contrib.states.dc.property_tax.in_effect: true + state_code: DC + age_head: 69 + age_spouse: 69 + output: + dc_ptc_elderly_head_or_spouse_present: false + +- name: One elderly head present + period: 2025 + reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit + input: + gov.contrib.states.dc.property_tax.in_effect: true + state_code: DC + age_head: 70 + age_spouse: 69 + output: + dc_ptc_elderly_head_or_spouse_present: true + +- name: One elderly spouse present + period: 2025 + reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit + input: + gov.contrib.states.dc.property_tax.in_effect: true + state_code: DC + age_head: 69 + age_spouse: 70 + output: + dc_ptc_elderly_head_or_spouse_present: true + +- name: Single non elderly filer + period: 2025 + reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit + input: + gov.contrib.states.dc.property_tax.in_effect: true + state_code: DC + dc_ptc_elderly_head_or_spouse_present: false + filing_status: SINGLE + output: + dc_ptc_income_limit: 65_600 + +- name: Single elderly joint filers + period: 2025 + reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit + input: + gov.contrib.states.dc.property_tax.in_effect: true + state_code: DC + dc_ptc_elderly_head_or_spouse_present: true + filing_status: JOINT + output: + dc_ptc_income_limit: 89_400 + +- name: Eligible unit + period: 2025 + reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit + input: + gov.contrib.states.dc.property_tax.in_effect: true + state_code: DC + adjusted_gross_income: 89_400 + dc_ptc_income_limit: 89_400 + output: + dc_ptc_eligible: true + +- name: Ineligible unit + period: 2025 + reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit + input: + gov.contrib.states.dc.property_tax.in_effect: true + state_code: DC + adjusted_gross_income: 89_401 + dc_ptc_income_limit: 89_400 + output: + dc_ptc_eligible: false + +- name: Eligible single filer, no phase-out + period: 2025 + reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit + input: + gov.contrib.states.dc.property_tax.in_effect: true + dc_ptc_eligible: true + filing_status: SINGLE + dc_ptc_income_limit: 65_600 + adjusted_gross_income: 70_000 + state_code: DC + output: + dc_ptc: 1_400 + +- name: Income above limit - integration test + period: 2025 + reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit + input: + gov.contrib.states.dc.property_tax.in_effect: true + state_code: DC + age_head: 69 + age_spouse: 69 + filing_status: SINGLE + adjusted_gross_income: 70_000 + output: + dc_ptc: 0 + +- name: Income below limit, elderly head present - integration test + period: 2025 + reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit + input: + gov.contrib.states.dc.property_tax.in_effect: true + state_code: DC + age_head: 70 + age_spouse: 69 + filing_status: SINGLE + adjusted_gross_income: 70_000 + output: + dc_ptc: 1_400 + +- name: Income above limit, elderly head present - integration test + period: 2025 + reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit + input: + gov.contrib.states.dc.property_tax.in_effect: true + state_code: DC + age_head: 70 + age_spouse: 69 + filing_status: SINGLE + adjusted_gross_income: 90_000 + output: + dc_ptc: 0 + +- name: Eligible single filer, partial phase-out + period: 2025 + reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit + input: + gov.contrib.states.dc.property_tax.in_effect: true + gov.contrib.states.dc.property_tax.phase_out.applies: true + dc_ptc_eligible: true + filing_status: SINGLE + dc_ptc_income_limit: 65_600 + adjusted_gross_income: 70_000 + state_code: DC + output: + dc_ptc: 960 + +- name: Eligible single filer, full phase-out + period: 2025 + reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit + input: + gov.contrib.states.dc.property_tax.in_effect: true + gov.contrib.states.dc.property_tax.phase_out.applies: true + dc_ptc_eligible: true + filing_status: SINGLE + dc_ptc_income_limit: 65_600 + adjusted_gross_income: 80_000 + state_code: DC + output: + dc_ptc: 0 + +- name: Eligible single filer, under phase-out limit + period: 2025 + reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit + input: + gov.contrib.states.dc.property_tax.in_effect: true + gov.contrib.states.dc.property_tax.phase_out.applies: true + dc_ptc_eligible: true + filing_status: SINGLE + dc_ptc_income_limit: 65_600 + adjusted_gross_income: 60_000 + state_code: DC + output: + dc_ptc: 1_400 + +- name: Integration test with phase-out limit + period: 2025 + reforms: policyengine_us.reforms.states.dc.property_tax.dc_property_tax_reform.dc_property_tax_credit + input: + gov.contrib.states.dc.property_tax.in_effect: true + gov.contrib.states.dc.property_tax.phase_out.applies: true + dc_ptc_eligible: true + filing_status: SINGLE + employment_income: 68_000 + state_code: DC + output: + dc_ptc_income_limit: 65_600 + dc_ptc: 1_160 diff --git a/policyengine_us/tests/policy/contrib/states/ny/ny_2025_inflation_rebates.yaml b/policyengine_us/tests/policy/contrib/states/ny/ny_2025_inflation_rebates.yaml new file mode 100644 index 00000000000..c14ac06ebb3 --- /dev/null +++ b/policyengine_us/tests/policy/contrib/states/ny/ny_2025_inflation_rebates.yaml @@ -0,0 +1,65 @@ +- name: Single person, eligible + period: 2025 + reforms: policyengine_us.reforms.states.ny.inflation_rebates.ny_2025_inflation_rebates.ny_2025_inflation_rebates + input: + gov.contrib.states.ny.inflation_rebates.in_effect: true + state_code: NY + ny_agi: 150_000 + filing_status: SINGLE + output: + ny_2025_inflation_rebates: 300 + +- name: Single person, ineligible + period: 2025 + reforms: policyengine_us.reforms.states.ny.inflation_rebates.ny_2025_inflation_rebates.ny_2025_inflation_rebates + input: + gov.contrib.states.ny.inflation_rebates.in_effect: true + state_code: NY + ny_agi: 150_001 + filing_status: SINGLE + output: + ny_2025_inflation_rebates: 0 + +- name: Separate person, eligible + period: 2025 + reforms: policyengine_us.reforms.states.ny.inflation_rebates.ny_2025_inflation_rebates.ny_2025_inflation_rebates + input: + gov.contrib.states.ny.inflation_rebates.in_effect: true + state_code: NY + ny_agi: 150_000 + filing_status: SEPARATE + output: + ny_2025_inflation_rebates: 250 + +- name: Separate person, ineligible + period: 2025 + reforms: policyengine_us.reforms.states.ny.inflation_rebates.ny_2025_inflation_rebates.ny_2025_inflation_rebates + input: + gov.contrib.states.ny.inflation_rebates.in_effect: true + state_code: NY + ny_agi: 150_001 + filing_status: SEPARATE + output: + ny_2025_inflation_rebates: 0 + +- name: Joint couple, eligible + period: 2025 + reforms: policyengine_us.reforms.states.ny.inflation_rebates.ny_2025_inflation_rebates.ny_2025_inflation_rebates + input: + gov.contrib.states.ny.inflation_rebates.in_effect: true + state_code: NY + ny_agi: 300_000 + filing_status: JOINT + output: + ny_2025_inflation_rebates: 500 + +- name: Joint couple, ineligible + period: 2025 + reforms: policyengine_us.reforms.states.ny.inflation_rebates.ny_2025_inflation_rebates.ny_2025_inflation_rebates + input: + gov.contrib.states.ny.inflation_rebates.in_effect: true + state_code: NY + ny_agi: 300_001 + filing_status: JOINT + output: + ny_2025_inflation_rebates: 0 diff --git a/policyengine_us/tests/policy/contrib/states/ny/ny_working_families_tax_credit.yaml b/policyengine_us/tests/policy/contrib/states/ny/ny_working_families_tax_credit.yaml index d6e0e763f67..8bc32c40153 100644 --- a/policyengine_us/tests/policy/contrib/states/ny/ny_working_families_tax_credit.yaml +++ b/policyengine_us/tests/policy/contrib/states/ny/ny_working_families_tax_credit.yaml @@ -264,3 +264,93 @@ ny_eitc: 758.8 ny_ctc: 0 ny_exemptions: 0 + +- name: 2025 test with two dependents, one older child and one younger - baseline + period: 2025 + absolute_error_margin: 1 + input: + people: + person1: + age: 40 + employment_income: 48_500 + person2: + age: 40 + person3: + age: 18 + person4: + age: 10 + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + households: + household: + members: [person1, person2, person3, person4] + state_code: NY + output: + eitc: 3_355 + eitc_child_count: 2 + eitc_maximum: 7_152 + ny_eitc: 1_006.46 + + +- name: 2025 test with two dependents, one older child and one younger + period: 2025 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.states.ny.wftc.ny_working_families_tax_credit.ny_working_families_tax_credit + input: + gov.contrib.states.ny.wftc.in_effect: true + people: + person1: + age: 40 + employment_income: 48_500 + person2: + age: 40 + person3: + age: 18 + person4: + age: 10 + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + households: + household: + members: [person1, person2, person3, person4] + state_code: NY + output: + # ny_eitc: 1_000 + eitc_older_children_count: 1 + eitc_younger_children_count: 1 + is_older_child_dependent: [false, false, true, false] + eitc: 3_355 + eitc_older_maximum: 7_152 + older_eitc: 3_355 + younger_eitc: 0 + ny_eitc: 1_006.46 + ny_working_families_tax_credit: 550 + +- name: 2026 test with two dependents, one older child and one younger + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.states.ny.wftc.ny_working_families_tax_credit.ny_working_families_tax_credit + input: + gov.contrib.states.ny.wftc.in_effect: true + people: + person1: + age: 40 + employment_income: 30_000 + person2: + age: 40 + person3: + age: 19 + is_full_time_student: true + person4: + age: 10 + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + households: + household: + members: [person1, person2, person3, person4] + state_code: NY + output: + ny_exemptions: 1_000 diff --git a/policyengine_us/variables/gov/irs/income/taxable_income/deductions/itemizing/salt_deduction.py b/policyengine_us/variables/gov/irs/income/taxable_income/deductions/itemizing/salt_deduction.py index d8cb801a6ea..87db6a4166d 100644 --- a/policyengine_us/variables/gov/irs/income/taxable_income/deductions/itemizing/salt_deduction.py +++ b/policyengine_us/variables/gov/irs/income/taxable_income/deductions/itemizing/salt_deduction.py @@ -11,13 +11,11 @@ class salt_deduction(Variable): reference = "https://www.law.cornell.edu/uscode/text/26/164" def formula(tax_unit, period, parameters): + p = parameters(period).gov.irs.deductions.itemized.salt_and_real_estate salt_amount = add( tax_unit, period, - ["state_and_local_sales_or_income_tax", "real_estate_taxes"], + p.sources, ) - salt = parameters( - period - ).gov.irs.deductions.itemized.salt_and_real_estate - cap = salt.cap[tax_unit("filing_status", period)] + cap = p.cap[tax_unit("filing_status", period)] return min_(cap, salt_amount) diff --git a/policyengine_us/variables/gov/ssa/ssi/eligibility/status/is_ssi_eligible_individual.py b/policyengine_us/variables/gov/ssa/ssi/eligibility/status/is_ssi_eligible_individual.py index 78da292e405..7423db6841f 100644 --- a/policyengine_us/variables/gov/ssa/ssi/eligibility/status/is_ssi_eligible_individual.py +++ b/policyengine_us/variables/gov/ssa/ssi/eligibility/status/is_ssi_eligible_individual.py @@ -6,9 +6,18 @@ class is_ssi_eligible_individual(Variable): entity = Person label = "Is an SSI-eligible individual" definition_period = YEAR - reference = "https://www.law.cornell.edu/uscode/text/42/1382#a" def formula(person, period, parameters): aged_blind_disabled = person("is_ssi_aged_blind_disabled", period) is_ssi_eligible_spouse = person("is_ssi_eligible_spouse", period) - return aged_blind_disabled & ~is_ssi_eligible_spouse + is_qualified_noncitizen = person("is_ssi_qualified_noncitizen", period) + immigration_status = person("immigration_status", period) + is_citizen = ( + immigration_status == immigration_status.possible_values.CITIZEN + ) + + return ( + aged_blind_disabled + & ~is_ssi_eligible_spouse + & (is_qualified_noncitizen | is_citizen) + ) diff --git a/policyengine_us/variables/gov/ssa/ssi/eligibility/status/is_ssi_qualified_noncitizen.py b/policyengine_us/variables/gov/ssa/ssi/eligibility/status/is_ssi_qualified_noncitizen.py new file mode 100644 index 00000000000..a47128a6e1c --- /dev/null +++ b/policyengine_us/variables/gov/ssa/ssi/eligibility/status/is_ssi_qualified_noncitizen.py @@ -0,0 +1,39 @@ +from policyengine_us.model_api import * + + +class is_ssi_qualified_noncitizen(Variable): + value_type = bool + entity = Person + label = "Is an SSI qualified noncitizen" + definition_period = YEAR + reference = "https://secure.ssa.gov/poms.nsf/lnx/0500502100" + + def formula(person, period, parameters): + qualifying_quarters_earnings = person( + "ssi_qualifying_quarters_earnings", period + ) + p = parameters(period).gov.ssa.ssi + immigration_status = person("immigration_status", period) + legal_permanent_resident = ( + immigration_status + == immigration_status.possible_values.LEGAL_PERMANENT_RESIDENT + ) + # For legal permanent residents, check if they have enough qualifying quarters + meets_earnings_requirement = ( + qualifying_quarters_earnings + >= p.income.sources.qualifying_quarters_threshold + ) + + # Non-LPRs automatically meet the earnings requirement + # LPRs must meet the earnings threshold + earnings_requirement_satisfied = ( + ~legal_permanent_resident + ) | meets_earnings_requirement + + # Convert immigration status to string and check if it's in the list of qualified statuses + immigration_status_str = immigration_status.decode_to_str() + has_qualifying_status = np.isin( + immigration_status_str, + p.eligibility.status.qualified_noncitizen_status, + ) + return has_qualifying_status & earnings_requirement_satisfied diff --git a/policyengine_us/variables/gov/states/ca/ca_in_medical_care_facility.py b/policyengine_us/variables/gov/states/ca/ca_in_medical_care_facility.py new file mode 100644 index 00000000000..7a3ac7d89fb --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/ca_in_medical_care_facility.py @@ -0,0 +1,9 @@ +from policyengine_us.model_api import * + + +class ca_in_medical_care_facility(Variable): + value_type = bool + entity = Person + label = "Is in a California medical care facility" + definition_period = YEAR + defined_for = StateCode.CA diff --git a/policyengine_us/variables/gov/states/ca/cdss/capi/ca_capi.py b/policyengine_us/variables/gov/states/ca/cdss/capi/ca_capi.py new file mode 100644 index 00000000000..126a43bce4a --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/capi/ca_capi.py @@ -0,0 +1,32 @@ +from policyengine_us.model_api import * + + +class ca_capi(Variable): + value_type = float + unit = USD + entity = SPMUnit + label = "California CAPI" + definition_period = YEAR + defined_for = "ca_capi_eligible" + reference = "https://www.cdss.ca.gov/Portals/9/CAPI/CAPI_Regulations-Accessible.pdf" + + def formula(spm_unit, period, parameters): + state_supplement_payment_standard = spm_unit( + "ca_state_supplement_payment_standard", period + ) + person = spm_unit.members + ssi_amount_if_eligible = person("ssi_amount_if_eligible", period) + eligible_person = person("ca_capi_eligible_person", period) + total_ssi_amount = spm_unit.sum( + ssi_amount_if_eligible * eligible_person + ) + payment_standard = state_supplement_payment_standard + total_ssi_amount + p = parameters(period).gov.states.ca.cdss.capi.payment_standard_offset + married = spm_unit("spm_unit_is_married", period) + offset = where(married, p.couple, p.single) + total_payment_standard = max_(payment_standard - offset, 0) + person = spm_unit.members + countable_income = spm_unit.sum( + (person("ssi_countable_income", period) * eligible_person) + ) + return max_(0, total_payment_standard - countable_income) diff --git a/policyengine_us/variables/gov/states/ca/cdss/capi/eligibility/ca_capi_eligible.py b/policyengine_us/variables/gov/states/ca/cdss/capi/eligibility/ca_capi_eligible.py new file mode 100644 index 00000000000..1bc697a4647 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/capi/eligibility/ca_capi_eligible.py @@ -0,0 +1,18 @@ +from policyengine_us.model_api import * + + +class ca_capi_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "California CAPI eligible" + definition_period = YEAR + defined_for = StateCode.CA + reference = "https://www.cdss.ca.gov/Portals/9/CAPI/CAPI_Regulations-Accessible.pdf" + + def formula(spm_unit, period, parameters): + resource_eligible = spm_unit("ca_capi_resource_eligible", period) + income_eligible = spm_unit("ca_capi_income_eligible", period) + has_eligible_person = ( + add(spm_unit, period, ["ca_capi_eligible_person"]) > 0 + ) + return resource_eligible & income_eligible & has_eligible_person diff --git a/policyengine_us/variables/gov/states/ca/cdss/capi/eligibility/ca_capi_eligible_person.py b/policyengine_us/variables/gov/states/ca/cdss/capi/eligibility/ca_capi_eligible_person.py new file mode 100644 index 00000000000..872f8b0a584 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/capi/eligibility/ca_capi_eligible_person.py @@ -0,0 +1,20 @@ +from policyengine_us.model_api import * + + +class ca_capi_eligible_person(Variable): + value_type = bool + entity = Person + label = "California CAPI eligible person" + definition_period = YEAR + defined_for = StateCode.CA + reference = "https://www.cdss.ca.gov/Portals/9/CAPI/CAPI_Regulations-Accessible.pdf" + + def formula(person, period, parameters): + aged_blind_disabled = person("is_ssi_aged_blind_disabled", period) + is_ssi_eligible_spouse = person("is_ssi_eligible_spouse", period) + immigration_status = person("immigration_status", period) + is_citizen = ( + immigration_status == immigration_status.possible_values.CITIZEN + ) + + return aged_blind_disabled & ~is_ssi_eligible_spouse & ~is_citizen diff --git a/policyengine_us/variables/gov/states/ca/cdss/capi/eligibility/ca_capi_income_eligible.py b/policyengine_us/variables/gov/states/ca/cdss/capi/eligibility/ca_capi_income_eligible.py new file mode 100644 index 00000000000..ed3148b592d --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/capi/eligibility/ca_capi_income_eligible.py @@ -0,0 +1,23 @@ +from policyengine_us.model_api import * + + +class ca_capi_income_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "California CAPI income eligible" + definition_period = YEAR + defined_for = StateCode.CA + reference = "https://www.cdss.ca.gov/Portals/9/CAPI/CAPI_Regulations-Accessible.pdf" + + def formula(spm_unit, period, parameters): + payment_standard = add( + spm_unit, + period, + ["ssi_amount_if_eligible", "ca_state_supplement_payment_standard"], + ) + person = spm_unit.members + eligible_person = person("ca_capi_eligible_person", period) + countable_income = spm_unit.sum( + (person("ssi_countable_income", period) * eligible_person) + ) + return payment_standard > countable_income diff --git a/policyengine_us/variables/gov/states/ca/cdss/capi/eligibility/ca_capi_resource_eligible.py b/policyengine_us/variables/gov/states/ca/cdss/capi/eligibility/ca_capi_resource_eligible.py new file mode 100644 index 00000000000..89ba309b6b7 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/capi/eligibility/ca_capi_resource_eligible.py @@ -0,0 +1,17 @@ +from policyengine_us.model_api import * + + +class ca_capi_resource_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "California CAPI resource eligible" + definition_period = YEAR + defined_for = StateCode.CA + reference = "https://www.cdss.ca.gov/Portals/9/CAPI/CAPI_Regulations-Accessible.pdf" + + def formula(spm_unit, period, parameters): + resources = spm_unit("ca_capi_resources", period) + p = parameters(period).gov.states.ca.cdss.capi.resources + married = spm_unit("spm_unit_is_married", period) + resource_limit = where(married, p.limit.couple, p.limit.single) + return resources <= resource_limit diff --git a/policyengine_us/variables/gov/states/ca/cdss/capi/resources/ca_capi_countable_vehicle_value.py b/policyengine_us/variables/gov/states/ca/cdss/capi/resources/ca_capi_countable_vehicle_value.py new file mode 100644 index 00000000000..7a0f708bad8 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/capi/resources/ca_capi_countable_vehicle_value.py @@ -0,0 +1,16 @@ +from policyengine_us.model_api import * + + +class ca_capi_countable_vehicle_value(Variable): + value_type = float + unit = USD + entity = SPMUnit + label = "California CAPI countable vehicle value" + definition_period = YEAR + defined_for = StateCode.CA + reference = "https://www.cdss.ca.gov/Portals/9/CAPI/CAPI_Regulations-Accessible.pdf" + + def formula(spm_unit, period, parameters): + vehicle_value = spm_unit.household("household_vehicles_value", period) + p = parameters(period).gov.states.ca.cdss.capi.resources.vehicle + return max_(vehicle_value - p.disregard, 0) diff --git a/policyengine_us/variables/gov/states/ca/cdss/capi/resources/ca_capi_resources.py b/policyengine_us/variables/gov/states/ca/cdss/capi/resources/ca_capi_resources.py new file mode 100644 index 00000000000..cb1dfc080f2 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/capi/resources/ca_capi_resources.py @@ -0,0 +1,13 @@ +from policyengine_us.model_api import * + + +class ca_capi_resources(Variable): + value_type = float + unit = USD + entity = SPMUnit + label = "California CAPI resources" + definition_period = YEAR + defined_for = StateCode.CA + reference = "https://www.cdss.ca.gov/Portals/9/CAPI/CAPI_Regulations-Accessible.pdf" + + adds = ["ssi_countable_resources", "ca_capi_countable_vehicle_value"] diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_blind_disabled_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_blind_disabled_amount.py new file mode 100644 index 00000000000..f7b5ec961eb --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_blind_disabled_amount.py @@ -0,0 +1,18 @@ +from policyengine_us.model_api import * + + +class ca_state_supplement_aged_blind_disabled_amount(Variable): + value_type = float + entity = SPMUnit + label = "California SSI state supplement aged disabled and blind amount" + unit = USD + definition_period = MONTH + defined_for = StateCode.CA + reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" + + def formula(spm_unit, period, parameters): + blind_amount = spm_unit("ca_state_supplement_blind_amount", period) + aged_disabled_amount = spm_unit( + "ca_state_supplement_aged_disabled_amount", period + ) + return max_(blind_amount, aged_disabled_amount) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_amount.py new file mode 100644 index 00000000000..ea94b15f4b9 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_amount.py @@ -0,0 +1,21 @@ +from policyengine_us.model_api import * + + +class ca_state_supplement_aged_disabled_amount(Variable): + value_type = float + entity = SPMUnit + label = "California SSI state supplement aged disabled amount" + unit = USD + definition_period = MONTH + defined_for = "ca_state_supplement_aged_disabled_count" + reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" + + def formula(spm_unit, period, parameters): + p = parameters( + period + ).gov.states.ca.cdss.state_supplement.payment_standard.aged_or_disabled.amount + # Aged or disabled amount + aged_disabled_count = spm_unit( + "ca_state_supplement_aged_disabled_count", period + ) + return where(aged_disabled_count > 1, p.married, p.single) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_count.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_count.py new file mode 100644 index 00000000000..06309936fbc --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_aged_disabled_count.py @@ -0,0 +1,23 @@ +from policyengine_us.model_api import * + + +class ca_state_supplement_aged_disabled_count(Variable): + value_type = int + entity = SPMUnit + label = "California SSI state supplement aged or disabled count" + definition_period = MONTH + defined_for = StateCode.CA + reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" + + def formula(spm_unit, period, parameters): + p = parameters( + period + ).gov.states.ca.cdss.state_supplement.payment_standard + person = spm_unit.members + head_or_spouse = person("is_tax_unit_head_or_spouse", period) + # Aged or disabled amount + is_disabled = person("is_disabled", period) + age = person("monthly_age", period) + is_aged = age >= p.aged_or_disabled.age_threshold + aged_or_disabled = (is_aged | is_disabled) * head_or_spouse + return spm_unit.sum(aged_or_disabled) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_blind_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_blind_amount.py new file mode 100644 index 00000000000..10aada1b833 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_blind_amount.py @@ -0,0 +1,28 @@ +from policyengine_us.model_api import * + + +class ca_state_supplement_blind_amount(Variable): + value_type = float + entity = SPMUnit + label = "California SSI state supplement blind amount" + unit = USD + definition_period = MONTH + defined_for = StateCode.CA + reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" + + def formula(spm_unit, period, parameters): + p = parameters( + period + ).gov.states.ca.cdss.state_supplement.payment_standard + person = spm_unit.members + head_or_spouse = person("is_tax_unit_head_or_spouse", period) + # Blind amount + blind = person("is_blind", period) * head_or_spouse + blind_count = spm_unit.sum(blind) + is_married = spm_unit("spm_unit_is_married", period) + blind_married_amount = select( + [blind_count >= 2, blind_count == 1], + [p.blind.married.two_blind, p.blind.married.one_blind], + default=0, + ) + return where(is_married, blind_married_amount, p.blind.single) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_dependent_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_dependent_amount.py new file mode 100644 index 00000000000..ba90963d7cd --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_dependent_amount.py @@ -0,0 +1,28 @@ +from policyengine_us.model_api import * + + +class ca_state_supplement_dependent_amount(Variable): + value_type = float + entity = SPMUnit + label = "California SSI state supplement dependent amount" + unit = USD + definition_period = MONTH + defined_for = StateCode.CA + reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" + + def formula(spm_unit, period, parameters): + p = parameters( + period + ).gov.states.ca.cdss.state_supplement.payment_standard + person = spm_unit.members + # Blind amount + blind = person("is_blind", period) + is_disabled = person("is_disabled", period) + age = person("monthly_age", period) + # Dependent amount + dependent = person("is_tax_unit_dependent", period) + dependent_age_eligible = age < p.dependent.age_limit + dependent_count = spm_unit.sum( + dependent & dependent_age_eligible & (is_disabled | blind) + ) + return dependent_count * p.dependent.amount diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_food_allowance.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_food_allowance.py new file mode 100644 index 00000000000..7252cfeb58f --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_food_allowance.py @@ -0,0 +1,26 @@ +from policyengine_us.model_api import * + + +class ca_state_supplement_food_allowance(Variable): + value_type = float + entity = SPMUnit + label = "California SSI state supplement food allowance" + unit = USD + definition_period = MONTH + defined_for = "ca_state_supplement_food_allowance_eligible" + reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" + + def formula(spm_unit, period, parameters): + p = parameters( + period + ).gov.states.ca.cdss.state_supplement.payment_standard + is_married = spm_unit("spm_unit_is_married", period) + aged_disabled_count = spm_unit( + "ca_state_supplement_aged_disabled_count", period + ) + # Food allowance amount + return where( + is_married & (aged_disabled_count == 2), + p.allowance.food.married, + p.allowance.food.single, + ) diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_food_allowance_eligible.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_food_allowance_eligible.py new file mode 100644 index 00000000000..d399621b1a7 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_food_allowance_eligible.py @@ -0,0 +1,21 @@ +from policyengine_us.model_api import * + + +class ca_state_supplement_food_allowance_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "California SSI state supplement food allowance eligible" + definition_period = MONTH + defined_for = StateCode.CA + reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" + + def formula(spm_unit, period, parameters): + living_arrangements_allow_for_food_preparation = spm_unit.household( + "living_arrangements_allow_for_food_preparation", period + ) + aged_disabled_count = spm_unit( + "ca_state_supplement_aged_disabled_count", period + ) + return ( + aged_disabled_count > 0 + ) & ~living_arrangements_allow_for_food_preparation diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_medical_care_facility_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_medical_care_facility_amount.py new file mode 100644 index 00000000000..57b5ac73550 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_medical_care_facility_amount.py @@ -0,0 +1,21 @@ +from policyengine_us.model_api import * + + +class ca_state_supplement_medical_care_facility_amount(Variable): + value_type = float + entity = SPMUnit + label = "California SSI state supplement medical care facility amount" + unit = USD + definition_period = MONTH + defined_for = StateCode.CA + reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" + + def formula(spm_unit, period, parameters): + p = parameters( + period + ).gov.states.ca.cdss.state_supplement.payment_standard + # Medical care facility amount + medical_care_facility_count = add( + spm_unit, period, ["ca_in_medical_care_facility"] + ) + return medical_care_facility_count * p.allowance.medical_care_facility diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_out_of_home_care_facility_amount.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_out_of_home_care_facility_amount.py new file mode 100644 index 00000000000..cf426042f2c --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_out_of_home_care_facility_amount.py @@ -0,0 +1,20 @@ +from policyengine_us.model_api import * + + +class ca_state_supplement_out_of_home_care_facility_amount(Variable): + value_type = float + entity = SPMUnit + label = "California SSI state supplement out of home care facility amount" + unit = USD + definition_period = MONTH + defined_for = StateCode.CA + reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" + + def formula(spm_unit, period, parameters): + p = parameters( + period + ).gov.states.ca.cdss.state_supplement.payment_standard + out_of_home_care_facility_count = add( + spm_unit, period, ["in_out_of_home_care_facility"] + ) + return out_of_home_care_facility_count * p.allowance.out_of_home_care diff --git a/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_payment_standard.py b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_payment_standard.py new file mode 100644 index 00000000000..c6958e27f3b --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/cdss/state_supplement/payment_standard/ca_state_supplement_payment_standard.py @@ -0,0 +1,19 @@ +from policyengine_us.model_api import * + + +class ca_state_supplement_payment_standard(Variable): + value_type = float + entity = SPMUnit + label = "California SSI state supplement payment standard" + unit = USD + definition_period = MONTH + defined_for = StateCode.CA + reference = "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=12200" + + adds = [ + "ca_state_supplement_dependent_amount", + "ca_state_supplement_food_allowance", + "ca_state_supplement_medical_care_facility_amount", + "ca_state_supplement_out_of_home_care_facility_amount", + "ca_state_supplement_aged_blind_disabled_amount", + ] diff --git a/policyengine_us/variables/gov/states/dc/tax/income/credits/dc_ptc.py b/policyengine_us/variables/gov/states/dc/tax/income/credits/dc_ptc.py index c523e3d87b9..23d88cdc25b 100644 --- a/policyengine_us/variables/gov/states/dc/tax/income/credits/dc_ptc.py +++ b/policyengine_us/variables/gov/states/dc/tax/income/credits/dc_ptc.py @@ -11,7 +11,7 @@ class dc_ptc(Variable): "https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/52926_D-40_12.21.21_Final_Rev011122.pdf#page=49" "https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2022_D-40_Booklet_Final_blk_01_23_23_Ordc.pdf#page=47" ) - defined_for = StateCode.DC + defined_for = "takes_up_dc_ptc" def formula(tax_unit, period, parameters): rent = add(tax_unit, period, ["rent"]) diff --git a/policyengine_us/variables/gov/states/dc/tax/income/credits/takes_up_dc_ptc.py b/policyengine_us/variables/gov/states/dc/tax/income/credits/takes_up_dc_ptc.py new file mode 100644 index 00000000000..4b89927b348 --- /dev/null +++ b/policyengine_us/variables/gov/states/dc/tax/income/credits/takes_up_dc_ptc.py @@ -0,0 +1,10 @@ +from policyengine_us.model_api import * + + +class takes_up_dc_ptc(Variable): + value_type = bool + entity = TaxUnit + label = "Takes up the DC property tax credit" + definition_period = YEAR + defined_for = StateCode.DC + default_value = True diff --git a/policyengine_us/variables/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_eligible.py b/policyengine_us/variables/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_eligible.py new file mode 100644 index 00000000000..06c2ac7ee41 --- /dev/null +++ b/policyengine_us/variables/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_eligible.py @@ -0,0 +1,19 @@ +from policyengine_us.model_api import * + + +class ia_alternate_tax_eligible(Variable): + value_type = bool + entity = TaxUnit + label = "Iowa alternate tax eligible" + definition_period = YEAR + reference = ( + "https://tax.iowa.gov/sites/default/files/2022-01/IA1040%2841-001%29.pdf" + "https://tax.iowa.gov/sites/default/files/2023-01/2021%20Expanded%20Instructions_010323.pdf#page=53" + "https://tax.iowa.gov/sites/default/files/2023-01/2022IA1040%2841001%29.pdf" + "https://tax.iowa.gov/sites/default/files/2023-03/2022%20Expanded%20Instructions_022023.pdf#page=53" + ) + defined_for = StateCode.IA + + def formula(tax_unit, period, parameters): + filing_status = tax_unit("filing_status", period) + return filing_status != filing_status.possible_values.SINGLE diff --git a/policyengine_us/variables/gov/states/ia/tax/income/ia_alternate_tax_indiv.py b/policyengine_us/variables/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_indiv.py similarity index 100% rename from policyengine_us/variables/gov/states/ia/tax/income/ia_alternate_tax_indiv.py rename to policyengine_us/variables/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_indiv.py diff --git a/policyengine_us/variables/gov/states/ia/tax/income/ia_alternate_tax_joint.py b/policyengine_us/variables/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_joint.py similarity index 100% rename from policyengine_us/variables/gov/states/ia/tax/income/ia_alternate_tax_joint.py rename to policyengine_us/variables/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_joint.py diff --git a/policyengine_us/variables/gov/states/ia/tax/income/ia_alternate_tax_unit.py b/policyengine_us/variables/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_unit.py similarity index 81% rename from policyengine_us/variables/gov/states/ia/tax/income/ia_alternate_tax_unit.py rename to policyengine_us/variables/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_unit.py index 97588c11f92..a49fae07079 100644 --- a/policyengine_us/variables/gov/states/ia/tax/income/ia_alternate_tax_unit.py +++ b/policyengine_us/variables/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_unit.py @@ -25,8 +25,4 @@ def formula(tax_unit, period, parameters): alt_ded = where(is_elder, p.deduction.elderly, p.deduction.nonelderly) # ... determine alternate tax amount alt_taxinc = max_(0, tax_unit("ia_modified_income", period) - alt_ded) - alt_tax = alt_taxinc * p.rate - # ... alternate tax is not available to single filing units - filing_status = tax_unit("filing_status", period) - is_single = filing_status == filing_status.possible_values.SINGLE - return where(is_single, np.inf, alt_tax) + return alt_taxinc * p.rate diff --git a/policyengine_us/variables/gov/states/ia/tax/income/ia_base_tax_indiv.py b/policyengine_us/variables/gov/states/ia/tax/income/ia_base_tax_indiv.py index b76fa37ace1..e56e98f9af6 100644 --- a/policyengine_us/variables/gov/states/ia/tax/income/ia_base_tax_indiv.py +++ b/policyengine_us/variables/gov/states/ia/tax/income/ia_base_tax_indiv.py @@ -18,4 +18,6 @@ class ia_base_tax_indiv(Variable): def formula(person, period, parameters): reg_tax = person("ia_regular_tax_indiv", period) alt_tax = person("ia_alternate_tax_indiv", period) - return min_(reg_tax, alt_tax) + alt_tax_eligible = person.tax_unit("ia_alternate_tax_eligible", period) + smaller_tax = min_(reg_tax, alt_tax) + return where(alt_tax_eligible, smaller_tax, reg_tax) diff --git a/policyengine_us/variables/gov/states/ia/tax/income/ia_base_tax_joint.py b/policyengine_us/variables/gov/states/ia/tax/income/ia_base_tax_joint.py index 5ba3d45d9de..4fcd314fc67 100644 --- a/policyengine_us/variables/gov/states/ia/tax/income/ia_base_tax_joint.py +++ b/policyengine_us/variables/gov/states/ia/tax/income/ia_base_tax_joint.py @@ -17,5 +17,7 @@ class ia_base_tax_joint(Variable): def formula(person, period, parameters): reg_tax = person("ia_regular_tax_joint", period) + alt_tax_eligible = person.tax_unit("ia_alternate_tax_eligible", period) alt_tax = person("ia_alternate_tax_joint", period) - return min_(reg_tax, alt_tax) + smaller_tax = min_(reg_tax, alt_tax) + return where(alt_tax_eligible, smaller_tax, reg_tax) diff --git a/policyengine_us/variables/gov/states/il/tax/income/credits/il_k12_education_expense_credit.py b/policyengine_us/variables/gov/states/il/tax/income/credits/il_k12_education_expense_credit.py index 688fbd99646..e974066033c 100644 --- a/policyengine_us/variables/gov/states/il/tax/income/credits/il_k12_education_expense_credit.py +++ b/policyengine_us/variables/gov/states/il/tax/income/credits/il_k12_education_expense_credit.py @@ -16,7 +16,7 @@ def formula(tax_unit, period, parameters): reduced_tuition_and_fees = max_(0, tuition_and_fees - p.reduction) k12_credit = min_(reduced_tuition_and_fees * p.rate, p.cap) pre_credit_tax = tax_unit( - "il_income_tax_before_nonrefundable_credits", period + "il_income_tax_before_non_refundable_credits", period ) il_property_tax_credit = tax_unit("il_property_tax_credit", period) avail_tax = max_(0, pre_credit_tax - il_property_tax_credit) diff --git a/policyengine_us/variables/gov/states/il/tax/income/credits/il_property_tax_credit.py b/policyengine_us/variables/gov/states/il/tax/income/credits/il_property_tax_credit.py index 81547ca73c4..0b020880b7c 100644 --- a/policyengine_us/variables/gov/states/il/tax/income/credits/il_property_tax_credit.py +++ b/policyengine_us/variables/gov/states/il/tax/income/credits/il_property_tax_credit.py @@ -13,7 +13,7 @@ class il_property_tax_credit(Variable): def formula(tax_unit, period, parameters): ptax_paid = add(tax_unit, period, ["real_estate_taxes"]) pre_credit_tax = tax_unit( - "il_income_tax_before_nonrefundable_credits", period + "il_income_tax_before_non_refundable_credits", period ) p = parameters(period).gov.states.il.tax.income.credits return min_(ptax_paid * p.property_tax.rate, pre_credit_tax) diff --git a/policyengine_us/variables/gov/states/il/tax/income/il_income_tax_before_nonrefundable_credits.py b/policyengine_us/variables/gov/states/il/tax/income/il_income_tax_before_non_refundable_credits.py similarity index 90% rename from policyengine_us/variables/gov/states/il/tax/income/il_income_tax_before_nonrefundable_credits.py rename to policyengine_us/variables/gov/states/il/tax/income/il_income_tax_before_non_refundable_credits.py index a9dbc7a4daa..aa1ac80d1cb 100644 --- a/policyengine_us/variables/gov/states/il/tax/income/il_income_tax_before_nonrefundable_credits.py +++ b/policyengine_us/variables/gov/states/il/tax/income/il_income_tax_before_non_refundable_credits.py @@ -1,7 +1,7 @@ from policyengine_us.model_api import * -class il_income_tax_before_nonrefundable_credits(Variable): +class il_income_tax_before_non_refundable_credits(Variable): value_type = float entity = TaxUnit label = "IL income tax before credits" diff --git a/policyengine_us/variables/gov/states/il/tax/income/il_income_tax_before_refundable_credits.py b/policyengine_us/variables/gov/states/il/tax/income/il_income_tax_before_refundable_credits.py index cfffa62aeb8..dab87904509 100644 --- a/policyengine_us/variables/gov/states/il/tax/income/il_income_tax_before_refundable_credits.py +++ b/policyengine_us/variables/gov/states/il/tax/income/il_income_tax_before_refundable_credits.py @@ -11,6 +11,6 @@ class il_income_tax_before_refundable_credits(Variable): defined_for = StateCode.IL def formula(tax_unit, period, parameters): - taxbc = tax_unit("il_income_tax_before_nonrefundable_credits", period) + taxbc = tax_unit("il_income_tax_before_non_refundable_credits", period) non_refundable_credits = tax_unit("il_nonrefundable_credits", period) return max_(taxbc - non_refundable_credits, 0) diff --git a/policyengine_us/variables/gov/states/in/tax/income/deductions/in_deductions.py b/policyengine_us/variables/gov/states/in/tax/income/deductions/in_deductions.py index e02dadb085d..94bb1ea7840 100644 --- a/policyengine_us/variables/gov/states/in/tax/income/deductions/in_deductions.py +++ b/policyengine_us/variables/gov/states/in/tax/income/deductions/in_deductions.py @@ -10,15 +10,4 @@ class in_deductions(Variable): reference = "http://iga.in.gov/legislative/laws/2021/ic/titles/006#6-3" defined_for = StateCode.IN - adds = [ - "in_renters_deduction", - "in_homeowners_property_tax_deduction", - "salt_refund_last_year", - "us_govt_interest", - "tax_unit_taxable_social_security", # includes railroad retirement benefits - "in_military_service_deduction", - "in_nonpublic_school_deduction", - "in_nol", - "in_unemployment_compensation_deduction", - "in_other_deductions", - ] + adds = "gov.states.in.tax.income.deductions.deductions" diff --git a/policyengine_us/variables/gov/states/md/tax/income/deductions/md_deductions.py b/policyengine_us/variables/gov/states/md/tax/income/deductions/md_deductions.py index 6e38688cae4..484cbed6e35 100644 --- a/policyengine_us/variables/gov/states/md/tax/income/deductions/md_deductions.py +++ b/policyengine_us/variables/gov/states/md/tax/income/deductions/md_deductions.py @@ -15,9 +15,7 @@ class md_deductions(Variable): defined_for = StateCode.MD def formula(tax_unit, period, parameters): - itm_deds_less_salt = tax_unit("itemized_deductions_less_salt", period) - capped_property_taxes = tax_unit("capped_property_taxes", period) - md_itmded = itm_deds_less_salt + capped_property_taxes + md_itmded = tax_unit("md_itemized_deductions", period) md_stdded = tax_unit("md_standard_deduction", period) # 2021 and 2022 Form 502 instructions on page 5 include this FAQ: # 3. Itemized deductions. diff --git a/policyengine_us/variables/gov/states/md/tax/income/deductions/md_itemized_deductions.py b/policyengine_us/variables/gov/states/md/tax/income/deductions/md_itemized_deductions.py new file mode 100644 index 00000000000..6f75a27eddf --- /dev/null +++ b/policyengine_us/variables/gov/states/md/tax/income/deductions/md_itemized_deductions.py @@ -0,0 +1,16 @@ +from policyengine_us.model_api import * + + +class md_itemized_deductions(Variable): + value_type = float + entity = TaxUnit + label = "Maryland itemized deductions" + unit = USD + definition_period = YEAR + reference = ( + "https://govt.westlaw.com/mdc/Document/N05479690A64A11DBB5DDAC3692B918BC?viewType=FullText&originationContext=documenttoc&transitionType=CategoryPageItem&contextData=(sc.Default)" + "https://www.marylandtaxes.gov/forms/21_forms/Resident_Booklet.pdf#page=5" + "https://www.marylandtaxes.gov/forms/22_forms/Resident_Booklet.pdf#page=5" + ) + defined_for = StateCode.MD + adds = ["itemized_deductions_less_salt", "capped_property_taxes"] diff --git a/policyengine_us/variables/gov/states/mt/tax/income/mt_regular_income_tax_indiv.py b/policyengine_us/variables/gov/states/mt/tax/income/mt_regular_income_tax_indiv.py index a8e4d53c19f..def966f92d0 100644 --- a/policyengine_us/variables/gov/states/mt/tax/income/mt_regular_income_tax_indiv.py +++ b/policyengine_us/variables/gov/states/mt/tax/income/mt_regular_income_tax_indiv.py @@ -31,6 +31,6 @@ def formula(person, period, parameters): p.single.calc(taxable_income), p.head_of_household.calc(taxable_income), p.separate.calc(taxable_income), - p.widow.calc(taxable_income), + p.surviving_spouse.calc(taxable_income), ], ) diff --git a/policyengine_us/variables/gov/states/mt/tax/income/mt_regular_income_tax_joint.py b/policyengine_us/variables/gov/states/mt/tax/income/mt_regular_income_tax_joint.py index bfd1b07fd8d..9488150a102 100644 --- a/policyengine_us/variables/gov/states/mt/tax/income/mt_regular_income_tax_joint.py +++ b/policyengine_us/variables/gov/states/mt/tax/income/mt_regular_income_tax_joint.py @@ -31,6 +31,6 @@ def formula(tax_unit, period, parameters): p.joint.calc(taxable_income), p.head_of_household.calc(taxable_income), p.separate.calc(taxable_income), - p.widow.calc(taxable_income), + p.surviving_spouse.calc(taxable_income), ], ) diff --git a/policyengine_us/variables/gov/states/ne/tax/income/adjusted_gross_income/subtractions/ne_military_retirement_substraction.py b/policyengine_us/variables/gov/states/ne/tax/income/adjusted_gross_income/subtractions/ne_military_retirement_substraction.py new file mode 100644 index 00000000000..a1c70d5d9d1 --- /dev/null +++ b/policyengine_us/variables/gov/states/ne/tax/income/adjusted_gross_income/subtractions/ne_military_retirement_substraction.py @@ -0,0 +1,24 @@ +from policyengine_us.model_api import * + + +class ne_military_retirement_subtraction(Variable): + value_type = float + entity = TaxUnit + label = "Nebraska military retirement subtraction" + unit = USD + definition_period = YEAR + defined_for = StateCode.NE + + def formula(tax_unit, period, parameters): + p = parameters( + period + ).gov.states.ne.tax.income.agi.subtractions.military_retirement + person = tax_unit.members + age = person("age", period) + age_eligible = age >= p.age_threshold + military_retirement_benefit = person("military_retirement_pay", period) + qualifying_military_retirement_benefits = tax_unit.sum( + military_retirement_benefit * age_eligible + ) + # From 2015 to 2021, the tax filer may elect to exclude 40% of the military retirement benefit income for 7 consecutive years or elect to receive 15% exclusion for all tax years after age 67. + return qualifying_military_retirement_benefits * p.fraction diff --git a/policyengine_us/variables/gov/states/nj/tax/income/deductions/nj_medical_expense_deduction.py b/policyengine_us/variables/gov/states/nj/tax/income/deductions/nj_medical_expense_deduction.py new file mode 100644 index 00000000000..8d44ae04ede --- /dev/null +++ b/policyengine_us/variables/gov/states/nj/tax/income/deductions/nj_medical_expense_deduction.py @@ -0,0 +1,28 @@ +from policyengine_us.model_api import * + + +class nj_medical_expense_deduction(Variable): + value_type = float + entity = TaxUnit + label = "New Jersey medical expense deduction" + unit = USD + definition_period = YEAR + defined_for = StateCode.NJ + + def formula(tax_unit, period, parameters): + p = parameters( + period + ).gov.states.nj.tax.income.deductions.medical_expenses + self_employed_medical_expense_deduction = tax_unit( + "self_employed_health_insurance_ald", period + ) + medical_expenses = add( + tax_unit, period, ["medical_out_of_pocket_expenses"] + ) + agi = tax_unit("nj_agi", period) + floor = p.rate * agi + applicable_medical_expenses = max_(0, medical_expenses - floor) + return ( + self_employed_medical_expense_deduction + + applicable_medical_expenses + ) diff --git a/policyengine_us/variables/gov/states/nj/tax/income/deductions/nj_total_deductions.py b/policyengine_us/variables/gov/states/nj/tax/income/deductions/nj_total_deductions.py index 3b50fd47091..93e2aab31f6 100644 --- a/policyengine_us/variables/gov/states/nj/tax/income/deductions/nj_total_deductions.py +++ b/policyengine_us/variables/gov/states/nj/tax/income/deductions/nj_total_deductions.py @@ -8,3 +8,5 @@ class nj_total_deductions(Variable): unit = USD definition_period = YEAR defined_for = StateCode.NJ + + adds = ["nj_medical_expense_deduction"] diff --git a/policyengine_us/variables/gov/states/ny/tax/income/credits/ny_college_tuition_credit.py b/policyengine_us/variables/gov/states/ny/tax/income/credits/college_tuition/ny_college_tuition_credit.py similarity index 59% rename from policyengine_us/variables/gov/states/ny/tax/income/credits/ny_college_tuition_credit.py rename to policyengine_us/variables/gov/states/ny/tax/income/credits/college_tuition/ny_college_tuition_credit.py index c789b1d33dc..36129f0b2d7 100644 --- a/policyengine_us/variables/gov/states/ny/tax/income/credits/ny_college_tuition_credit.py +++ b/policyengine_us/variables/gov/states/ny/tax/income/credits/college_tuition/ny_college_tuition_credit.py @@ -8,11 +8,11 @@ class ny_college_tuition_credit(Variable): unit = USD definition_period = YEAR reference = "https://www.nysenate.gov/legislation/laws/TAX/606" # (t) - defined_for = StateCode.NY + defined_for = "ny_college_tuition_credit_eligible" def formula(tax_unit, period, parameters): - tuition = add(tax_unit, period, ["qualified_tuition_expenses"]) + tuition = tax_unit("ny_allowable_college_tuition_expenses", period) p = parameters(period).gov.states.ny.tax.income.credits.college_tuition - amount = p.rate.calc(tuition) * p.applicable_percentage - itemizes = tax_unit("ny_itemizes", period) - return ~itemizes * amount + # Apply a tiered rate structure. + amount_pre_percentage = p.rate.calc(tuition) + return amount_pre_percentage * p.applicable_percentage diff --git a/policyengine_us/variables/gov/states/ny/tax/income/credits/college_tuition/ny_college_tuition_credit_eligible.py b/policyengine_us/variables/gov/states/ny/tax/income/credits/college_tuition/ny_college_tuition_credit_eligible.py new file mode 100644 index 00000000000..80fd74a342b --- /dev/null +++ b/policyengine_us/variables/gov/states/ny/tax/income/credits/college_tuition/ny_college_tuition_credit_eligible.py @@ -0,0 +1,13 @@ +from policyengine_us.model_api import * + + +class ny_college_tuition_credit_eligible(Variable): + value_type = bool + entity = TaxUnit + label = "New York college tuition credit eligible" + definition_period = YEAR + reference = "https://www.nysenate.gov/legislation/laws/TAX/606" # (t) + defined_for = StateCode.NY + + def formula(tax_unit, period, parameters): + return ~tax_unit("ny_itemizes", period) diff --git a/policyengine_us/variables/gov/states/ny/tax/income/ny_allowable_college_tuition_expenses.py b/policyengine_us/variables/gov/states/ny/tax/income/ny_allowable_college_tuition_expenses.py new file mode 100644 index 00000000000..d0e1ac081bd --- /dev/null +++ b/policyengine_us/variables/gov/states/ny/tax/income/ny_allowable_college_tuition_expenses.py @@ -0,0 +1,19 @@ +from policyengine_us.model_api import * + + +class ny_allowable_college_tuition_expenses(Variable): + value_type = float + entity = TaxUnit + label = "New York allowable college tuition expenses for the credit and deduction" + unit = USD + definition_period = YEAR + reference = ( + "https://www.nysenate.gov/legislation/laws/TAX/606" # (t)(2)(A) + ) + defined_for = StateCode.NY + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.ny.tax.income.college_tuition + person = tax_unit.members + capped = min_(person("qualified_tuition_expenses", period), p.cap) + return tax_unit.sum(capped) diff --git a/policyengine_us/variables/gov/states/ny/tax/income/taxable_income/deductions/itemized/ny_college_tuition_deduction.py b/policyengine_us/variables/gov/states/ny/tax/income/taxable_income/deductions/itemized/ny_college_tuition_deduction.py new file mode 100644 index 00000000000..cf996583bcd --- /dev/null +++ b/policyengine_us/variables/gov/states/ny/tax/income/taxable_income/deductions/itemized/ny_college_tuition_deduction.py @@ -0,0 +1,23 @@ +from policyengine_us.model_api import * + + +class ny_college_tuition_deduction(Variable): + value_type = float + entity = TaxUnit + label = "New York itemized deduction for college tuition expenses" + unit = USD + definition_period = YEAR + reference = ( + "https://www.nysenate.gov/legislation/laws/TAX/615", # (d)(4) + "https://www.nysenate.gov/legislation/laws/TAX/606", # (t) + ) + defined_for = StateCode.NY + + def formula(tax_unit, period, parameters): + p = parameters( + period + ).gov.states.ny.tax.income.deductions.itemized.college_tuition + allowable_expenses = tax_unit( + "ny_allowable_college_tuition_expenses", period + ) + return allowable_expenses * p.applicable_percentage diff --git a/policyengine_us/variables/gov/states/ny/tax/income/taxable_income/deductions/itemized/ny_itemized_deductions_max.py b/policyengine_us/variables/gov/states/ny/tax/income/taxable_income/deductions/itemized/ny_itemized_deductions_max.py index 280cf504eba..8e8ded17b00 100644 --- a/policyengine_us/variables/gov/states/ny/tax/income/taxable_income/deductions/itemized/ny_itemized_deductions_max.py +++ b/policyengine_us/variables/gov/states/ny/tax/income/taxable_income/deductions/itemized/ny_itemized_deductions_max.py @@ -9,13 +9,8 @@ class ny_itemized_deductions_max(Variable): definition_period = YEAR reference = "https://www.nysenate.gov/legislation/laws/TAX/615" defined_for = StateCode.NY - - def formula(tax_unit, period, parameters): - itm_deds_less_salt = tax_unit("itemized_deductions_less_salt", period) - capped_property_taxes = tax_unit("capped_property_taxes", period) - p = parameters(period).gov.states.ny.tax.income - capped_tuition = min_( - p.deductions.itemized.college_tuition_max, - add(tax_unit, period, ["qualified_tuition_expenses"]), - ) - return itm_deds_less_salt + capped_property_taxes + capped_tuition + adds = [ + "itemized_deductions_less_salt", + "real_estate_taxes", + "ny_college_tuition_deduction", + ] diff --git a/policyengine_us/variables/gov/states/ny/tax/income/taxable_income/ny_exemptions.py b/policyengine_us/variables/gov/states/ny/tax/income/taxable_income/ny_exemptions.py index b388052c6e1..1684312b883 100644 --- a/policyengine_us/variables/gov/states/ny/tax/income/taxable_income/ny_exemptions.py +++ b/policyengine_us/variables/gov/states/ny/tax/income/taxable_income/ny_exemptions.py @@ -11,7 +11,7 @@ class ny_exemptions(Variable): defined_for = StateCode.NY def formula(tax_unit, period, parameters): - count_dependents = tax_unit("tax_unit_count_dependents", period) + count_dependents = tax_unit("tax_unit_child_dependents", period) dependent_exemption = parameters( period ).gov.states.ny.tax.income.exemptions.dependent diff --git a/policyengine_us/variables/gov/states/tax/income/_generate_state_mfs_variables.py b/policyengine_us/variables/gov/states/tax/income/_generate_state_mfs_variables.py new file mode 100644 index 00000000000..35e577ee34c --- /dev/null +++ b/policyengine_us/variables/gov/states/tax/income/_generate_state_mfs_variables.py @@ -0,0 +1,144 @@ +from policyengine_us.model_api import * + +# Create all state variable classes for married-filing-separately states +for state_code, state_name in [ + ("ar", "Arkansas"), + ("dc", "DC"), + ("de", "Delaware"), + ("ia", "Iowa"), + ("ky", "Kentucky"), + ("ms", "Mississippi"), + ("mt", "Montana"), +]: + for var_code, var_label in [ + ("standard_deduction", "standard deduction"), + ("itemized_deductions", "itemized deductions"), + ("taxable_income", "taxable income"), + ("agi", "adjusted gross income"), + ]: + # Skip variables that already exist or aren't needed + if ( + # Skip existing AGI variables + (state_code in ["ky", "ms", "mt"] and var_code == "agi") + or + # Skip all DC variables except taxable income + (state_code == "dc" and var_code != "taxable_income") + ): + continue + + indiv_var, joint_var = { + "ar": { + "standard_deduction": ( + "ar_standard_deduction_indiv", + "ar_standard_deduction_joint", + ), + "itemized_deductions": ( + "ar_itemized_deductions_indiv", + "ar_itemized_deductions_joint", + ), + "taxable_income": ( + "ar_taxable_income_indiv", + "ar_taxable_income_joint", + ), + "agi": ("ar_agi_indiv", "ar_agi_joint"), + }, + "dc": { + "taxable_income": ( + "dc_taxable_income_indiv", + "dc_taxable_income_joint", + ), + }, + "de": { + "standard_deduction": ( + "de_standard_deduction_indv", + "de_standard_deduction_joint", + ), + "itemized_deductions": ( + "de_itemized_deductions_indv", + "de_itemized_deductions_joint", + ), + "taxable_income": ( + "de_taxable_income_indv", + "de_taxable_income_joint", + ), + "agi": ("de_agi_indiv", "de_agi_joint"), + }, + "ia": { + "standard_deduction": ( + "ia_standard_deduction_indiv", + "ia_standard_deduction_joint", + ), + "itemized_deductions": ( + "ia_itemized_deductions_indiv", + "ia_itemized_deductions_joint", + ), + "taxable_income": ( + "ia_taxable_income_indiv", + "ia_taxable_income_joint", + ), + "agi": ("ia_taxable_income_indiv", "ia_taxable_income_joint"), + }, + "ky": { + "standard_deduction": ( + "ky_standard_deduction_indiv", + "ky_standard_deduction_joint", + ), + "itemized_deductions": ( + "ky_itemized_deductions_indiv", + "ky_itemized_deductions_joint", + ), + "taxable_income": ( + "ky_taxable_income_indiv", + "ky_taxable_income_joint", + ), + }, + "ms": { + "standard_deduction": ( + "ms_standard_deduction_indiv", + "ms_standard_deduction_joint", + ), + "itemized_deductions": ( + "ms_itemized_deductions_indiv", + "ms_itemized_deductions_joint", + ), + "taxable_income": ( + "ms_taxable_income_indiv", + "ms_taxable_income_joint", + ), + }, + "mt": { + "standard_deduction": ( + "mt_standard_deduction_indiv", + "mt_standard_deduction_joint", + ), + "itemized_deductions": ( + "mt_itemized_deductions_indiv", + "mt_itemized_deductions_joint", + ), + "taxable_income": ( + "mt_taxable_income_indiv", + "mt_taxable_income_joint", + ), + }, + }[state_code][var_code] + + globals()[f"{state_code}_{var_code}"] = type( + f"{state_code}_{var_code}", + (Variable,), + dict( + value_type=float, + entity=TaxUnit, + label=f"{state_name} {var_label}", + unit=USD, + definition_period=YEAR, + defined_for=getattr(StateCode, state_code.upper()), + formula=lambda tax_unit, period, parameters, indiv=indiv_var, joint=joint_var: where( + tax_unit( + f"{indiv.split('_')[0]}_files_separately", # Get state code from the variable name + period, + ), + add(tax_unit, period, [indiv]), + add(tax_unit, period, [joint]), + ), + ), + ) diff --git a/policyengine_us/variables/gov/states/tax/income/state_agi.py b/policyengine_us/variables/gov/states/tax/income/state_agi.py new file mode 100644 index 00000000000..54b0b376877 --- /dev/null +++ b/policyengine_us/variables/gov/states/tax/income/state_agi.py @@ -0,0 +1,10 @@ +from policyengine_us.model_api import * + + +class state_agi(Variable): + value_type = float + entity = TaxUnit + label = "State adjusted gross income" + unit = USD + definition_period = YEAR + adds = "gov.states.household.state_agis" diff --git a/policyengine_us/variables/gov/states/tax/income/state_cdcc.py b/policyengine_us/variables/gov/states/tax/income/state_cdcc.py new file mode 100644 index 00000000000..891e34e78ad --- /dev/null +++ b/policyengine_us/variables/gov/states/tax/income/state_cdcc.py @@ -0,0 +1,10 @@ +from policyengine_us.model_api import * + + +class state_cdcc(Variable): + value_type = float + entity = TaxUnit + label = "State Child and Dependent Care Tax Credit" + unit = USD + definition_period = YEAR + adds = "gov.states.household.state_cdccs" diff --git a/policyengine_us/variables/gov/states/tax/income/state_ctc.py b/policyengine_us/variables/gov/states/tax/income/state_ctc.py new file mode 100644 index 00000000000..2f1742c1ebd --- /dev/null +++ b/policyengine_us/variables/gov/states/tax/income/state_ctc.py @@ -0,0 +1,10 @@ +from policyengine_us.model_api import * + + +class state_ctc(Variable): + value_type = float + entity = TaxUnit + label = "State Child Tax Credit" + unit = USD + definition_period = YEAR + adds = "gov.states.household.state_ctcs" diff --git a/policyengine_us/variables/gov/states/tax/income/state_eitc.py b/policyengine_us/variables/gov/states/tax/income/state_eitc.py new file mode 100644 index 00000000000..2d3eba35668 --- /dev/null +++ b/policyengine_us/variables/gov/states/tax/income/state_eitc.py @@ -0,0 +1,10 @@ +from policyengine_us.model_api import * + + +class state_eitc(Variable): + value_type = float + entity = TaxUnit + label = "State Earned Income Tax Credit" + unit = USD + definition_period = YEAR + adds = "gov.states.household.state_eitcs" diff --git a/policyengine_us/variables/gov/states/tax/income/state_itemized_deductions.py b/policyengine_us/variables/gov/states/tax/income/state_itemized_deductions.py new file mode 100644 index 00000000000..8399de8c5fe --- /dev/null +++ b/policyengine_us/variables/gov/states/tax/income/state_itemized_deductions.py @@ -0,0 +1,10 @@ +from policyengine_us.model_api import * + + +class state_itemized_deductions(Variable): + value_type = float + entity = TaxUnit + label = "State itemized deductions" + unit = USD + definition_period = YEAR + adds = "gov.states.household.state_itemized_deductions" diff --git a/policyengine_us/variables/gov/states/tax/income/state_property_tax_credit.py b/policyengine_us/variables/gov/states/tax/income/state_property_tax_credit.py new file mode 100644 index 00000000000..e35017e95e3 --- /dev/null +++ b/policyengine_us/variables/gov/states/tax/income/state_property_tax_credit.py @@ -0,0 +1,10 @@ +from policyengine_us.model_api import * + + +class state_property_tax_credit(Variable): + value_type = float + entity = TaxUnit + label = "State Property Tax Credit" + unit = USD + definition_period = YEAR + adds = "gov.states.household.state_property_tax_credits" diff --git a/policyengine_us/variables/gov/states/tax/income/state_standard_deduction.py b/policyengine_us/variables/gov/states/tax/income/state_standard_deduction.py new file mode 100644 index 00000000000..5a4047f4028 --- /dev/null +++ b/policyengine_us/variables/gov/states/tax/income/state_standard_deduction.py @@ -0,0 +1,10 @@ +from policyengine_us.model_api import * + + +class state_standard_deduction(Variable): + value_type = float + entity = TaxUnit + label = "State standard deduction" + unit = USD + definition_period = YEAR + adds = "gov.states.household.state_standard_deductions" diff --git a/policyengine_us/variables/gov/states/tax/income/state_taxable_income.py b/policyengine_us/variables/gov/states/tax/income/state_taxable_income.py new file mode 100644 index 00000000000..982cba8daae --- /dev/null +++ b/policyengine_us/variables/gov/states/tax/income/state_taxable_income.py @@ -0,0 +1,10 @@ +from policyengine_us.model_api import * + + +class state_taxable_income(Variable): + value_type = float + entity = TaxUnit + label = "State taxable income" + unit = USD + definition_period = YEAR + adds = "gov.states.household.state_taxable_incomes" diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/credits/low_income/pr_compensatory_low_income_credit.py b/policyengine_us/variables/gov/territories/pr/tax/income/credits/low_income/pr_compensatory_low_income_credit.py new file mode 100644 index 00000000000..f3284749413 --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/credits/low_income/pr_compensatory_low_income_credit.py @@ -0,0 +1,18 @@ +from policyengine_us.model_api import * + + +class pr_compensatory_low_income_credit(Variable): + value_type = float + unit = USD + entity = Person + label = "Additional compensatory low income credit" + definition_period = YEAR + reference = "https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30212-credit-for-low-income-individuals-older-than-sixty-five-65-years-of-age" + defined_for = "pr_low_income_credit_eligible" + + def formula(person, period, parameters): + p = parameters( + period + ).gov.territories.pr.tax.income.credits.low_income.amount + pension_income = person("pension_income", period) + return p.additional.calc(pension_income, right=True) diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit.py b/policyengine_us/variables/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit.py new file mode 100644 index 00000000000..7d1939a802e --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit.py @@ -0,0 +1,20 @@ +from policyengine_us.model_api import * + + +class pr_low_income_credit(Variable): + value_type = float + entity = TaxUnit + label = "Puerto Rico low income credit" + unit = USD + definition_period = YEAR + reference = "https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30212-credit-for-low-income-individuals-older-than-sixty-five-65-years-of-age" + defined_for = "pr_low_income_credit_eligible" + + def formula(tax_unit, period, parameters): + p = parameters( + period + ).gov.territories.pr.tax.income.credits.low_income.amount + eligible_people = tax_unit( + "pr_low_income_credit_eligible_people", period + ) + return p.base * eligible_people diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit_eligible.py b/policyengine_us/variables/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit_eligible.py new file mode 100644 index 00000000000..89881c57c08 --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit_eligible.py @@ -0,0 +1,19 @@ +from policyengine_us.model_api import * + + +class pr_low_income_credit_eligible(Variable): + value_type = bool + entity = TaxUnit + label = "Eligible unit for the Puerto Rico low income credit" + definition_period = YEAR + reference = "https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30212-credit-for-low-income-individuals-older-than-sixty-five-65-years-of-age" + defined_for = "pr_low_income_credit_eligible_people" + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.territories.pr.tax.income.credits.low_income + eligible_people = tax_unit( + "pr_low_income_credit_eligible_people", period + ) + income = tax_unit("pr_gross_income", period) + income_limit = p.income_limit.calc(eligible_people) + return income <= income_limit diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit_eligible_people.py b/policyengine_us/variables/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit_eligible_people.py new file mode 100644 index 00000000000..32427ca1c96 --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit_eligible_people.py @@ -0,0 +1,11 @@ +from policyengine_us.model_api import * + + +class pr_low_income_credit_eligible_people(Variable): + value_type = int + entity = TaxUnit + label = "Eligible people for the Puerto Rico low income credit" + definition_period = YEAR + reference = "https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30212-credit-for-low-income-individuals-older-than-sixty-five-65-years-of-age" + + adds = ["pr_low_income_credit_eligible_person"] diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit_eligible_person.py b/policyengine_us/variables/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit_eligible_person.py new file mode 100644 index 00000000000..fe5cf27917f --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/credits/low_income/pr_low_income_credit_eligible_person.py @@ -0,0 +1,16 @@ +from policyengine_us.model_api import * + + +class pr_low_income_credit_eligible_person(Variable): + value_type = bool + entity = Person + label = "Eligible person for the Puerto Rico low income credit" + definition_period = YEAR + reference = "https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30212-credit-for-low-income-individuals-older-than-sixty-five-65-years-of-age" + + def formula(person, period, parameters): + age = person("age", period) + p = parameters(period).gov.territories.pr.tax.income.credits.low_income + head_or_spouse = person("is_tax_unit_head_or_spouse", period) + age_eligible = age >= p.age_threshold + return head_or_spouse & age_eligible diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/credits/pr_refundable_credits.py b/policyengine_us/variables/gov/territories/pr/tax/income/credits/pr_refundable_credits.py new file mode 100644 index 00000000000..eb71ca857f9 --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/credits/pr_refundable_credits.py @@ -0,0 +1,11 @@ +from policyengine_us.model_api import * + + +class pr_refundable_credits(Variable): + value_type = float + entity = TaxUnit + label = "Puerto Rico refundable credits" + unit = USD + definition_period = YEAR + + adds = "gov.territories.pr.tax.income.credits.refundable" diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/pr_gross_income.py b/policyengine_us/variables/gov/territories/pr/tax/income/pr_gross_income.py new file mode 100644 index 00000000000..8500c774226 --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/pr_gross_income.py @@ -0,0 +1,10 @@ +from policyengine_us.model_api import * + + +class pr_gross_income(Variable): + value_type = float + entity = TaxUnit + label = "Puerto Rico gross income" + unit = USD + definition_period = YEAR + reference = "https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1005-computation-of-taxable-income/subchapter-a-determination-of-net-income-general-concepts/30101-gross-income" diff --git a/policyengine_us/variables/household/demographic/household/living_arrangements_allow_for_food_preparation.py b/policyengine_us/variables/household/demographic/household/living_arrangements_allow_for_food_preparation.py new file mode 100644 index 00000000000..7e828945ead --- /dev/null +++ b/policyengine_us/variables/household/demographic/household/living_arrangements_allow_for_food_preparation.py @@ -0,0 +1,8 @@ +from policyengine_us.model_api import * + + +class living_arrangements_allow_for_food_preparation(Variable): + value_type = bool + entity = Household + label = "Living arrangements allow for food preparation" + definition_period = YEAR diff --git a/policyengine_us/variables/household/demographic/person/immigration_status.py b/policyengine_us/variables/household/demographic/person/immigration_status.py index 5a1de6602e2..e58d1eb4df4 100644 --- a/policyengine_us/variables/household/demographic/person/immigration_status.py +++ b/policyengine_us/variables/household/demographic/person/immigration_status.py @@ -4,6 +4,12 @@ class ImmigrationStatus(Enum): CITIZEN = "Citizen" LEGAL_PERMANENT_RESIDENT = "Legal Permanent Resident" + REFUGEE = "Refugee" + ASYLEE = "Asylee" + DEPORTATION_WITHHELD = "Deportation Withheld" + CUBAN_HAITIAN_ENTRANT = "Cuban/Haitian Entrant" + CONDITIONAL_ENTRANT = "Conditional Entrant" + PAROLED_ONE_YEAR = "Paroled for at Least One Year" DACA_TPS = ( "Deferred Action for Childhood Arrivals or Temporary Protected Status" ) @@ -19,6 +25,6 @@ class immigration_status(Variable): label = "U.S. immigration status as an enumeration type" def formula(person, period, parameters): - return ImmigrationStatus.encode( - person("immigration_status_str", period).decode_to_str() - ) + status_str = person("immigration_status_str", period).decode_to_str() + # Use PolicyEngine's Enum encode method + return ImmigrationStatus.encode(status_str) diff --git a/policyengine_us/variables/household/demographic/person/in_out_of_home_care_facility.py b/policyengine_us/variables/household/demographic/person/in_out_of_home_care_facility.py new file mode 100644 index 00000000000..12c09260d6b --- /dev/null +++ b/policyengine_us/variables/household/demographic/person/in_out_of_home_care_facility.py @@ -0,0 +1,8 @@ +from policyengine_us.model_api import * + + +class in_out_of_home_care_facility(Variable): + value_type = bool + entity = Person + label = "Is in a nonmedical out of home care facility" + definition_period = YEAR diff --git a/policyengine_us/variables/household/demographic/spm_unit/spm_unit_is_married.py b/policyengine_us/variables/household/demographic/spm_unit/spm_unit_is_married.py new file mode 100644 index 00000000000..641b3064743 --- /dev/null +++ b/policyengine_us/variables/household/demographic/spm_unit/spm_unit_is_married.py @@ -0,0 +1,23 @@ +from policyengine_us.model_api import * + + +class spm_unit_is_married(Variable): + value_type = bool + entity = SPMUnit + label = "SPM unit is married" + documentation = "Whether the adults in this SPM unit are married." + definition_period = YEAR + + def formula(spm_unit, period, parameters): + # If any tax unit is a married filer, assume the family is. + person = spm_unit.members + filing_status = person.tax_unit("filing_status", period) + filing_statuses = filing_status.possible_values + person_is_married = is_in( + person.tax_unit("filing_status", period), + [ + filing_statuses.JOINT, + filing_statuses.SEPARATE, + ], + ) + return spm_unit.any(person_is_married) diff --git a/policyengine_us/variables/household/income/person/ssi_qualifying_quarters_earnings.py b/policyengine_us/variables/household/income/person/ssi_qualifying_quarters_earnings.py new file mode 100644 index 00000000000..98c7d14273b --- /dev/null +++ b/policyengine_us/variables/household/income/person/ssi_qualifying_quarters_earnings.py @@ -0,0 +1,12 @@ +from policyengine_us.model_api import * + + +class ssi_qualifying_quarters_earnings(Variable): + value_type = int + entity = Person + label = "SSI Qualifying Quarters of Earnings" + documentation = ( + "Number of qualifying quarters of earnings for SSI eligibility" + ) + definition_period = YEAR + reference = "https://secure.ssa.gov/poms.nsf/lnx/0500502135" diff --git a/setup.py b/setup.py index 0ad49cbf9e8..3dd3df8b3b3 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setup( name="policyengine-us", - version="1.160.0", + version="1.179.0", author="PolicyEngine", author_email="hello@policyengine.org", long_description=readme,