From 3185e67fb4df41e84dab3849dd9aa58e94869f70 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Thu, 15 Jan 2026 14:23:58 -0500 Subject: [PATCH 1/6] Initial commit for NY A04948 Youth Worker Tax Benefits implementation Starting implementation of NY Assembly Bill A04948 which creates: - Youth Earned Income Tax Credit for age 17 (130% of federal EITC) - Enhanced standard deduction of $10,000 for ages 18-24 - Student loan interest deduction Effective January 1, 2026 through December 31, 2031. Co-Authored-By: Claude Opus 4.5 From c8cda93486b23f1d4b52122ceba706f401e7efc5 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Thu, 15 Jan 2026 15:16:26 -0500 Subject: [PATCH 2/6] initial commit --- changelog_entry.yaml | 4 + .../contrib/states/ny/a04948/in_effect.yaml | 12 + .../states/ny/a04948/youth_eitc/match.yaml | 12 + .../states/ny/a04948/youth_eitc/max_age.yaml | 12 + .../states/ny/a04948/youth_eitc/min_age.yaml | 10 + .../youth_standard_deduction/amount.yaml | 12 + .../youth_standard_deduction/max_age.yaml | 10 + .../youth_standard_deduction/min_age.yaml | 10 + .../ny/a04948/sources/working_references.md | 467 ++++++++++++++ policyengine_us/reforms/reforms.py | 7 + .../reforms/states/ny/a04948/__init__.py | 3 + .../ny_a04948_youth_worker_tax_benefits.py | 391 ++++++++++++ .../ny_a04948_youth_worker_tax_benefits.yaml | 568 ++++++++++++++++++ 13 files changed, 1518 insertions(+) create mode 100644 policyengine_us/parameters/gov/contrib/states/ny/a04948/in_effect.yaml create mode 100644 policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/match.yaml create mode 100644 policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/max_age.yaml create mode 100644 policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/min_age.yaml create mode 100644 policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_standard_deduction/amount.yaml create mode 100644 policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_standard_deduction/max_age.yaml create mode 100644 policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_standard_deduction/min_age.yaml create mode 100644 policyengine_us/reforms/contrib/states/ny/a04948/sources/working_references.md create mode 100644 policyengine_us/reforms/states/ny/a04948/__init__.py create mode 100644 policyengine_us/reforms/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.py create mode 100644 policyengine_us/tests/policy/contrib/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.yaml diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..6f9db1d4046 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: minor + changes: + added: + - Add NY A04948 Youth Worker Tax Benefits reform. diff --git a/policyengine_us/parameters/gov/contrib/states/ny/a04948/in_effect.yaml b/policyengine_us/parameters/gov/contrib/states/ny/a04948/in_effect.yaml new file mode 100644 index 00000000000..e024708fa27 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/ny/a04948/in_effect.yaml @@ -0,0 +1,12 @@ +description: The New York Youth Worker Tax Benefits Act (Assembly Bill A04948) applies if this is true. +metadata: + unit: bool + period: year + label: NY A04948 Youth Worker Tax Benefits in effect + reference: + - title: NY Assembly Bill 2025-A4948 + href: https://www.nysenate.gov/legislation/bills/2025/A4948 +values: + 0000-01-01: false + 2026-01-01: true + 2032-01-01: false diff --git a/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/match.yaml b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/match.yaml new file mode 100644 index 00000000000..25734cd5e5c --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/match.yaml @@ -0,0 +1,12 @@ +description: New York provides this multiplier of the federal Earned Income Tax Credit for eligible youth workers under the Youth Worker Tax Benefits Act. +metadata: + unit: /1 + period: year + label: NY A04948 youth Earned Income Tax Credit match rate + reference: + - title: NY Assembly Bill 2025-A4948 Section 1 (Section 606(d-2)) + href: https://www.nysenate.gov/legislation/bills/2025/A4948 + - title: NY Tax Law Section 606 - Credits Against Tax + href: https://www.nysenate.gov/legislation/laws/TAX/606 +values: + 2026-01-01: 1.3 diff --git a/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/max_age.yaml b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/max_age.yaml new file mode 100644 index 00000000000..8ba2b082e21 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/max_age.yaml @@ -0,0 +1,12 @@ +description: New York sets this maximum age for eligibility under the youth Earned Income Tax Credit. +metadata: + unit: year + period: year + label: NY A04948 youth Earned Income Tax Credit maximum age + reference: + - title: NY Assembly Bill 2025-A4948 Section 1 (Section 606(d-2)) + href: https://www.nysenate.gov/legislation/bills/2025/A4948 + - title: 26 U.S. Code Section 32(c)(1)(A)(ii)(II) - Earned Income + href: https://www.law.cornell.edu/uscode/text/26/32 +values: + 2026-01-01: 24 diff --git a/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/min_age.yaml b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/min_age.yaml new file mode 100644 index 00000000000..66a1cac26a6 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/min_age.yaml @@ -0,0 +1,10 @@ +description: New York sets this minimum age for eligibility under the youth Earned Income Tax Credit. +metadata: + unit: year + period: year + label: NY A04948 youth Earned Income Tax Credit minimum age + reference: + - title: NY Assembly Bill 2025-A4948 Section 1 (Section 606(d-2)) + href: https://www.nysenate.gov/legislation/bills/2025/A4948 +values: + 2026-01-01: 17 diff --git a/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_standard_deduction/amount.yaml b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_standard_deduction/amount.yaml new file mode 100644 index 00000000000..c0444fe922a --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_standard_deduction/amount.yaml @@ -0,0 +1,12 @@ +description: New York provides this amount as the enhanced standard deduction for eligible young adults under the Youth Worker Tax Benefits Act. +metadata: + unit: currency-USD + period: year + label: NY A04948 youth enhanced standard deduction amount + reference: + - title: NY Assembly Bill 2025-A4948 Section 2 (Section 614) + href: https://www.nysenate.gov/legislation/bills/2025/A4948 + - title: NY Tax Law Section 614 - Standard Deduction + href: https://www.nysenate.gov/legislation/laws/TAX/614 +values: + 2027-01-01: 10_000 diff --git a/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_standard_deduction/max_age.yaml b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_standard_deduction/max_age.yaml new file mode 100644 index 00000000000..1a02ccea0d7 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_standard_deduction/max_age.yaml @@ -0,0 +1,10 @@ +description: New York sets this maximum age for eligibility under the youth enhanced standard deduction. +metadata: + unit: year + period: year + label: NY A04948 youth enhanced standard deduction maximum age + reference: + - title: NY Assembly Bill 2025-A4948 Section 2 (Section 614) + href: https://www.nysenate.gov/legislation/bills/2025/A4948 +values: + 2027-01-01: 24 diff --git a/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_standard_deduction/min_age.yaml b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_standard_deduction/min_age.yaml new file mode 100644 index 00000000000..7ff86aac2aa --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_standard_deduction/min_age.yaml @@ -0,0 +1,10 @@ +description: New York sets this minimum age for eligibility under the youth enhanced standard deduction. +metadata: + unit: year + period: year + label: NY A04948 youth enhanced standard deduction minimum age + reference: + - title: NY Assembly Bill 2025-A4948 Section 2 (Section 614) + href: https://www.nysenate.gov/legislation/bills/2025/A4948 +values: + 2027-01-01: 18 diff --git a/policyengine_us/reforms/contrib/states/ny/a04948/sources/working_references.md b/policyengine_us/reforms/contrib/states/ny/a04948/sources/working_references.md new file mode 100644 index 00000000000..aaabe638e73 --- /dev/null +++ b/policyengine_us/reforms/contrib/states/ny/a04948/sources/working_references.md @@ -0,0 +1,467 @@ +# Collected Documentation + +## NY Assembly Bill A04948 - Youth Worker Tax Benefits +**Collected**: January 15, 2026 +**Implementation Task**: Implement NY A04948 reform providing youth EITC, enhanced standard deduction, and student loan interest deduction + +--- + +## Official Program Name + +**Bill Number**: Assembly Bill A04948 (2025-2026 Regular Sessions) +**Companion Bill**: Senate Bill S4103 +**Short Title**: Youth Worker Tax Benefits Act +**Sponsors**: A. Bronson, Simon (Assembly); Parker, Fernandez (Senate) +**Committee**: Ways and Means + +**Variable Prefix**: `ny_a04948_` (for reform-specific variables) + +--- + +## Bill Overview + +This legislation amends New York Tax Law sections 606, 614, and 615 to provide tax benefits for young workers and student loan borrowers. + +### Effective Dates +- **Takes Effect**: January 1, 2026 +- **Expires**: December 31, 2031 (deemed repealed) + +### Source +- Title: NY Assembly Bill 2025-A4948 + href: https://www.nysenate.gov/legislation/bills/2025/A4948 + +--- + +## Section 1: Youth Earned Income Tax Credit (Section 606(d-2)) + +### Legal Citation +- **Amended Section**: NY Tax Law Section 606, new subsection (d-2) +- **Title**: "Earned income tax credit for youth workers" + +### Credit Calculation + +**Credit Amount**: 130% (1.3x) of the federal EITC that would have been allowed + +The statutory language states the credit equals: +> "the product of one and three-tenths and the amount of the earned income tax credit that would have been allowed to the taxpayer under section thirty-two of the internal revenue code, if the taxpayer had attained the minimum age of eligibility for such earned income tax credit" + +**Parameter Value**: `1.3` (rate multiplier) + +### Eligibility Requirements + +A taxpayer must meet ALL of the following criteria: + +1. **Residency**: Must be a resident taxpayer +2. **Dependency Status**: Cannot be claimed as a dependent of another taxpayer +3. **Age Requirement**: + - Must have attained age 17 + - Must NOT have attained the minimum federal EITC age (currently age 25 for childless filers) + - **Eligible ages**: 17, 18, 19, 20, 21, 22, 23, 24 +4. **Parental Status**: Cannot be a custodial or non-custodial parent of a minor child or children +5. **Student Exception**: Eligibility is NOT restricted for taxpayers who are: + - Enrolled in full-time or part-time high school diploma programs + - Pursuing GED certification + - Enrolled in post-secondary certificate or degree programs + +### Federal EITC Reference (IRC Section 32) + +The youth credit is based on what the federal EITC would be if the taxpayer met age requirements: + +**Federal EITC Age Requirements (IRC Section 32(c)(1)(A)(ii)(II))**: +- Minimum age: 25 years old +- Maximum age: 64 years old (before end of tax year) +- Age requirements apply only to childless filers + +**Federal EITC Maximum Credits (2025)**: +| Children | Maximum Credit | +|----------|---------------| +| 0 | $649 | +| 1 | $4,328 | +| 2 | $7,152 | +| 3+ | $8,046 | + +**Youth EITC Maximum (at 130%)**: +Since youth (ages 17-24) cannot have qualifying children under this credit: +- Maximum federal childless EITC: $649 +- **Youth EITC Maximum**: $649 x 1.3 = **$844.70** + +### Reporting Requirements + +The Commissioner must submit reports to: +- Governor +- Temporary President of the Senate +- Speaker of the Assembly +- Chairpersons of Senate Finance and Assembly Ways and Means Committees + +**Report Schedule**: +- Preliminary report: By July 31st of each year +- Final report: By December 31st of each year + +**Report Contents**: +- Number of credits granted +- Average credit amount +- County-level breakdowns + +### References +- Title: NY Tax Law Section 606 - Credits Against Tax + href: https://www.nysenate.gov/legislation/laws/TAX/606 +- Title: NY Assembly Bill 2025-A4948 + href: https://www.nysenate.gov/legislation/bills/2025/A4948 +- Title: IRC Section 32 - Earned Income + href: https://www.law.cornell.edu/uscode/text/26/32 + +--- + +## Section 2: Enhanced Standard Deduction (Section 614) + +### Legal Citation +- **Amended Section**: NY Tax Law Section 614 +- **New Provision**: Additional paragraph for young adults aged 18-24 + +### Enhanced Deduction Amount + +**Amount**: $10,000 (for taxable years beginning after 2026) + +The statutory language provides: +> "For taxable years beginning after two thousand twenty-six, the New York standard deduction of a resident individual who is between the ages of eighteen and twenty-four and who is not married nor the head of a household nor a surviving spouse nor an individual whose federal exemption amount is zero shall be ten thousand dollars." + +### Eligibility Requirements + +A taxpayer qualifies if ALL of the following apply: + +1. **Residency**: Must be a resident individual +2. **Age Requirement**: Between ages 18 and 24 (inclusive) +3. **Filing Status Restrictions** - Cannot be: + - Married (any filing status) + - Head of household + - Surviving spouse/qualifying widow(er) +4. **Dependency Status**: Federal exemption amount cannot be zero (i.e., cannot be claimed as dependent) + +### Comparison to Current NY Standard Deductions (2025) + +| Filing Status | Current Amount | With A04948 (Ages 18-24) | +|---------------|---------------|--------------------------| +| Single (non-dependent) | $8,000 | **$10,000** | +| Single (dependent) | $3,100 | Not eligible (exemption = 0) | +| Married filing jointly | $16,050 | Not eligible (married) | +| Married filing separately | $8,000 | Not eligible (married) | +| Head of household | $11,200 | Not eligible (HoH) | +| Qualifying surviving spouse | $16,050 | Not eligible | + +**Benefit**: Young adults aged 18-24 receive an additional $2,000 deduction compared to standard single filers. + +### Implementation Note + +**Effective Date**: Taxable years beginning after 2026 (first applicable year: 2027) + +This differs from the EITC and student loan provisions which begin January 1, 2026. + +### References +- Title: NY Tax Law Section 614 - Standard Deduction + href: https://www.nysenate.gov/legislation/laws/TAX/614 +- Title: 2025 Standard Deductions - NY Tax Department + href: https://www.tax.ny.gov/pit/file/standard_deductions.htm + +--- + +## Section 3: Student Loan Interest Deduction (Section 615(h)) + +### Legal Citation +- **Amended Section**: NY Tax Law Section 615 +- **New Subsection**: (h) + +### Deduction Amount + +The deduction equals: +> "an amount equal to the interest paid by the taxpayer during the taxable year on any qualified education loan to the extent and as provided in section 221 of the Internal Revenue Code" + +**Key**: The deduction follows federal IRC Section 221 rules entirely. + +### Federal IRC Section 221 Rules + +**Maximum Deduction**: $2,500 per year + +**Qualified Education Loan Definition** (IRC 221(d)(1)): +Any indebtedness incurred solely to pay qualified higher education expenses: +- For the taxpayer, spouse, or dependent (at time debt was incurred) +- Paid within a reasonable period before/after the loan +- Attributable to education during eligible student status +- Includes refinanced qualifying loans + +**Excludes**: +- Loans from related persons +- Loans under employer education plans + +### Income Phaseout (2025 Federal) + +| Filing Status | Phaseout Begins | Phaseout Complete | +|---------------|-----------------|-------------------| +| Single/HoH | $75,000 MAGI | $90,000 MAGI | +| Married Filing Jointly | $155,000 MAGI | $185,000 MAGI | + +**2026 Inflation-Adjusted (for reference)**: +| Filing Status | Phaseout Begins | Phaseout Complete | +|---------------|-----------------|-------------------| +| Single/HoH | $85,000 MAGI | $100,000 MAGI | +| Married Filing Jointly | $175,000 MAGI | $205,000 MAGI | + +### Eligibility Requirements (per IRC 221) + +1. **Residency**: Must be a resident individual (NY requirement) +2. **Paid Interest**: Must have paid interest on a qualified education loan +3. **Legal Obligation**: Must be legally obligated to pay interest +4. **Filing Status**: Cannot be married filing separately +5. **Income Limit**: MAGI must be below phaseout threshold +6. **Dependency**: Cannot be claimed as dependent on another's return + +### Deduction Type + +This is an "above-the-line" adjustment to income: +- Reduces Adjusted Gross Income (AGI) directly +- Does NOT require itemizing deductions +- Available even with standard deduction + +### References +- Title: IRC Section 221 - Interest on Education Loans + href: https://www.law.cornell.edu/uscode/text/26/221 +- Title: IRS Topic 456 - Student Loan Interest Deduction + href: https://www.irs.gov/taxtopics/tc456 +- Title: NY Tax Law Section 615 - Itemized Deduction + href: https://www.nysenate.gov/legislation/laws/TAX/615 + +--- + +## Current NY Law Comparison + +### Current NY EITC (Section 606(d)) + +**Credit Rate**: 30% of federal EITC (for taxable years 2003 and after) + +**Historical Rates**: +- 1994: 7.5% +- 1995: 10% +- 1996-1999: 20% +- 2000: 22.5% +- 2001: 25% +- 2002: 27.5% +- 2003+: 30% + +**Key Difference from A04948**: +- Current NY EITC: 30% of federal credit (for those who qualify for federal) +- A04948 Youth EITC: 130% of what federal credit WOULD BE (for ages 17-24 who don't qualify federally) + +### Current NY Standard Deduction (Section 614) + +The current law provides these standard deductions: + +**Statutory Base Amounts** (from Tax Law 614): +- Single (non-dependent): $7,500 (1996+) +- Married filing jointly: $15,000 (2005+) +- Head of household: $10,500 (1996+) +- Married filing separately: $7,500 (2005+) +- Dependent: $3,000 (1996+) + +**Current Inflation-Adjusted Amounts (2025)**: +- Single (non-dependent): $8,000 +- Single (dependent): $3,100 +- Married filing jointly: $16,050 +- Married filing separately: $8,000 +- Head of household: $11,200 +- Qualifying surviving spouse: $16,050 + +**Cost of Living Adjustment**: Section 614(f) provides that for taxable years after 2017, amounts are adjusted per Section 601-a. + +### NY Noncustodial Parent EITC (Section 606(d-1)) + +**Note**: This is a separate existing credit, NOT part of A04948. + +Requirements: +- Age 18 or older +- Child support order through SCU +- Current on child support payments + +Credit equals the greater of: +- 20% of federal EITC (as if one child qualified), OR +- 2.5x the federal EITC for childless workers + +**Distinction**: A04948's youth EITC (d-2) is separate from and in addition to the noncustodial parent EITC (d-1). + +--- + +## Implementation Parameters Summary + +### Youth EITC Parameters (Section 606(d-2)) + +| Parameter | Value | Unit | Notes | +|-----------|-------|------|-------| +| Credit multiplier | 1.3 | rate | 130% of federal EITC | +| Minimum age | 17 | years | Must have attained | +| Maximum age | 24 | years | Below federal EITC min age (25) | +| Can be dependent | false | bool | Cannot be claimed | +| Can be parent | false | bool | No minor children | +| Effective date | 2026-01-01 | date | | +| Expiration date | 2031-12-31 | date | | + +### Enhanced Standard Deduction Parameters (Section 614) + +| Parameter | Value | Unit | Notes | +|-----------|-------|------|-------| +| Deduction amount | 10_000 | USD | For eligible young adults | +| Minimum age | 18 | years | | +| Maximum age | 24 | years | | +| Married eligible | false | bool | | +| Head of household eligible | false | bool | | +| Surviving spouse eligible | false | bool | | +| Can be dependent | false | bool | Exemption must be non-zero | +| Effective date | 2027-01-01 | date | "After 2026" | +| Expiration date | 2031-12-31 | date | | + +### Student Loan Interest Deduction Parameters (Section 615(h)) + +| Parameter | Value | Unit | Notes | +|-----------|-------|------|-------| +| Maximum deduction | 2_500 | USD | Per IRC 221 | +| Single phaseout start (2025) | 75_000 | USD | MAGI | +| Single phaseout end (2025) | 90_000 | USD | MAGI | +| Joint phaseout start (2025) | 155_000 | USD | MAGI | +| Joint phaseout end (2025) | 185_000 | USD | MAGI | +| Effective date | 2026-01-01 | date | | +| Expiration date | 2031-12-31 | date | | + +--- + +## Non-Simulatable Rules + +### Time-Limited Provisions (Architecture Limitation) + +The bill contains sunset provisions: +- **Expiration**: December 31, 2031 + +**Implementation Note**: PolicyEngine can implement the reform for tax years 2026-2031, but cannot automatically "turn off" provisions after expiration in a single simulation. The expiration should be handled via: +1. Parameter effective dates with end dates +2. Reform description noting temporal scope + +### Can Be Fully Simulated + +All provisions in A04948 CAN be fully simulated: +- Age-based eligibility (point-in-time) +- Income-based phaseouts (point-in-time) +- Dependency status (point-in-time) +- Parental status (point-in-time) +- Filing status restrictions (point-in-time) + +--- + +## References Summary + +### Primary Legal Sources + +1. **NY Assembly Bill A4948 (2025)** + - Title: NY State Assembly Bill 2025-A4948 + - URL: https://www.nysenate.gov/legislation/bills/2025/A4948 + +2. **NY Senate Bill S4103 (Companion)** + - Title: NY State Senate Bill 2025-S4103 + - URL: https://www.nysenate.gov/legislation/bills/2025/S4103 + +3. **NY Tax Law Section 606** + - Title: NY Tax Law Section 606 - Credits Against Tax + - URL: https://www.nysenate.gov/legislation/laws/TAX/606 + +4. **NY Tax Law Section 614** + - Title: NY Tax Law Section 614 - Standard Deduction + - URL: https://www.nysenate.gov/legislation/laws/TAX/614 + +5. **NY Tax Law Section 615** + - Title: NY Tax Law Section 615 - Itemized Deduction + - URL: https://www.nysenate.gov/legislation/laws/TAX/615 + +### Federal Law References + +1. **IRC Section 32 - Earned Income Credit** + - Title: 26 U.S. Code Section 32 - Earned Income + - URL: https://www.law.cornell.edu/uscode/text/26/32 + +2. **IRC Section 221 - Student Loan Interest** + - Title: 26 U.S. Code Section 221 - Interest on Education Loans + - URL: https://www.law.cornell.edu/uscode/text/26/221 + +### Supporting Sources + +1. **NY Earned Income Credit Info** + - Title: Earned Income Credit (New York State) + - URL: https://www.tax.ny.gov/pit/credits/earned_income_credit.htm + +2. **NY Standard Deductions (2025)** + - Title: 2025 Standard Deductions - NY Tax Department + - URL: https://www.tax.ny.gov/pit/file/standard_deductions.htm + +3. **IRS EITC Tables** + - Title: Earned Income and EITC Tables - IRS + - URL: https://www.irs.gov/credits-deductions/individuals/earned-income-tax-credit/earned-income-and-earned-income-tax-credit-eitc-tables + +4. **IRS Student Loan Interest Deduction** + - Title: Topic 456 - Student Loan Interest Deduction + - URL: https://www.irs.gov/taxtopics/tc456 + +--- + +## Variable Implementation Recommendations + +### Variables to Create + +1. **`ny_a04948_youth_eitc_eligible`** (Person level, bool) + - Checks age 17-24, not dependent, not parent, resident + +2. **`ny_a04948_youth_eitc`** (TaxUnit level, USD) + - Calculates 130% of hypothetical federal childless EITC + +3. **`ny_a04948_enhanced_standard_deduction_eligible`** (Person level, bool) + - Checks age 18-24, not married, not HoH, not dependent + +4. **`ny_a04948_enhanced_standard_deduction`** (TaxUnit level, USD) + - Returns $10,000 if eligible, else current standard deduction + +5. **`ny_a04948_student_loan_interest_deduction`** (TaxUnit level, USD) + - Follows IRC 221 rules with NY-specific applicability + +### Parameters to Create + +``` +gov/states/ny/tax/income/credits/youth_eitc/ + multiplier.yaml # 1.3 + age/ + minimum.yaml # 17 + maximum.yaml # 24 + +gov/states/ny/tax/income/deductions/ + enhanced_standard_deduction/ + amount.yaml # 10_000 + age/ + minimum.yaml # 18 + maximum.yaml # 24 + + student_loan_interest/ + maximum.yaml # 2_500 + phaseout/ + single/ + start.yaml # 75_000 (2025), 85_000 (2026) + end.yaml # 90_000 (2025), 100_000 (2026) + joint/ + start.yaml # 155_000 (2025), 175_000 (2026) + end.yaml # 185_000 (2025), 205_000 (2026) +``` + +--- + +## Quality Validation Checklist + +- [x] All sources are official government documents (.gov, .state.ny.us) +- [x] Bill text excerpts include exact statutory language +- [x] All numeric values documented with citations +- [x] Effective dates specified (2026-01-01 for EITC/student loan, 2027-01-01 for std deduction) +- [x] Expiration date documented (2031-12-31) +- [x] Federal IRC references included where applicable +- [x] Comparison to current law provided +- [x] Implementation parameters summarized +- [x] Variable prefix recommended: `ny_a04948_` diff --git a/policyengine_us/reforms/reforms.py b/policyengine_us/reforms/reforms.py index 1962bf2e51e..35ec6901c55 100644 --- a/policyengine_us/reforms/reforms.py +++ b/policyengine_us/reforms/reforms.py @@ -20,6 +20,9 @@ from .biden.budget_2025 import create_capital_gains_tax_increase_reform from .eitc import create_halve_joint_eitc_phase_out_rate_reform from .states.ny.wftc import create_ny_working_families_tax_credit_reform +from .states.ny.a04948 import ( + create_ny_a04948_youth_worker_tax_benefits_reform, +) from .harris.lift.middle_class_tax_credit import ( create_middle_class_tax_credit_reform, ) @@ -177,6 +180,9 @@ def create_structural_reforms_from_parameters(parameters, period): create_halve_joint_eitc_phase_out_rate_reform(parameters, period) ) ny_wftc = create_ny_working_families_tax_credit_reform(parameters, period) + ny_a04948 = create_ny_a04948_youth_worker_tax_benefits_reform( + parameters, period + ) middle_class_tax_credit = create_middle_class_tax_credit_reform( parameters, period @@ -320,6 +326,7 @@ def create_structural_reforms_from_parameters(parameters, period): capital_gains_tax_increase, halve_joint_eitc_phase_out_rate, ny_wftc, + ny_a04948, middle_class_tax_credit, rent_relief_tax_credit, end_child_poverty_act, diff --git a/policyengine_us/reforms/states/ny/a04948/__init__.py b/policyengine_us/reforms/states/ny/a04948/__init__.py new file mode 100644 index 00000000000..72be3e5914c --- /dev/null +++ b/policyengine_us/reforms/states/ny/a04948/__init__.py @@ -0,0 +1,3 @@ +from .ny_a04948_youth_worker_tax_benefits import ( + create_ny_a04948_youth_worker_tax_benefits_reform, +) diff --git a/policyengine_us/reforms/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.py b/policyengine_us/reforms/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.py new file mode 100644 index 00000000000..235ccd6cca5 --- /dev/null +++ b/policyengine_us/reforms/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.py @@ -0,0 +1,391 @@ +from policyengine_us.model_api import * + + +def create_ny_a04948_youth_worker_tax_benefits() -> Reform: + """ + NY Assembly Bill A04948 - Youth Worker Tax Benefits Act + + Creates three tax benefits for young workers in New York: + 1. Youth EITC: 130% of federal childless EITC for ages 17-24 + 2. Youth Standard Deduction: $10,000 for single filers ages 18-24 + 3. Student Loan Interest Deduction: Federal IRC 221 deduction for NY + + Reference: https://www.nysenate.gov/legislation/bills/2025/A4948 + """ + + class ny_a04948_youth_eitc_eligible(Variable): + value_type = bool + entity = Person + label = "Eligible for NY A04948 youth EITC" + definition_period = YEAR + reference = ( + "https://www.nysenate.gov/legislation/bills/2025/A4948", + "https://www.nysenate.gov/legislation/laws/TAX/606", + ) + defined_for = StateCode.NY + + def formula(person, period, parameters): + p = parameters(period).gov.contrib.states.ny.a04948 + # Reform must be in effect + in_effect = p.in_effect + # Age requirements: 17-24 + age = person("age", period) + age_eligible = (age >= p.youth_eitc.min_age) & ( + age <= p.youth_eitc.max_age + ) + # Cannot be claimed as dependent + not_dependent = ~person("is_tax_unit_dependent", period) + # Cannot be a parent (no qualifying children) + tax_unit = person.tax_unit + has_qualifying_children = tax_unit("eitc_child_count", period) > 0 + is_head_or_spouse = person("is_tax_unit_head_or_spouse", period) + not_parent = ~(is_head_or_spouse & has_qualifying_children) + return in_effect & age_eligible & not_dependent & not_parent + + class ny_a04948_youth_eitc_childless_maximum(Variable): + value_type = float + entity = TaxUnit + label = "NY A04948 youth EITC childless maximum amount" + unit = USD + definition_period = YEAR + reference = "https://www.law.cornell.edu/uscode/text/26/32#a" + + def formula(tax_unit, period, parameters): + # Calculate federal childless EITC maximum (0 children) + eitc = parameters(period).gov.irs.credits.eitc + return eitc.max.calc(0) + + class ny_a04948_youth_eitc_phase_in_rate(Variable): + value_type = float + entity = TaxUnit + label = "NY A04948 youth EITC phase-in rate" + unit = "/1" + definition_period = YEAR + + def formula(tax_unit, period, parameters): + eitc = parameters(period).gov.irs.credits.eitc + return eitc.phase_in_rate.calc(0) + + class ny_a04948_youth_eitc_phased_in(Variable): + value_type = float + entity = TaxUnit + label = "NY A04948 youth EITC phased-in amount" + unit = USD + definition_period = YEAR + + def formula(tax_unit, period, parameters): + maximum = tax_unit( + "ny_a04948_youth_eitc_childless_maximum", period + ) + phase_in_rate = tax_unit( + "ny_a04948_youth_eitc_phase_in_rate", period + ) + earnings = tax_unit("filer_adjusted_earnings", period) + phased_in_amount = earnings * phase_in_rate + return min_(maximum, phased_in_amount) + + class ny_a04948_youth_eitc_phase_out_start(Variable): + value_type = float + entity = TaxUnit + label = "NY A04948 youth EITC phase-out start" + unit = USD + definition_period = YEAR + + def formula(tax_unit, period, parameters): + eitc = parameters(period).gov.irs.credits.eitc + is_joint = tax_unit("tax_unit_is_joint", period) + joint_bonus = eitc.phase_out.joint_bonus.calc(0) + phase_out_start = eitc.phase_out.start.calc(0) + return phase_out_start + is_joint * joint_bonus + + class ny_a04948_youth_eitc_phase_out_rate(Variable): + value_type = float + entity = TaxUnit + label = "NY A04948 youth EITC phase-out rate" + unit = "/1" + definition_period = YEAR + + def formula(tax_unit, period, parameters): + eitc = parameters(period).gov.irs.credits.eitc + return eitc.phase_out.rate.calc(0) + + class ny_a04948_youth_eitc_reduction(Variable): + value_type = float + entity = TaxUnit + label = "NY A04948 youth EITC reduction" + unit = USD + definition_period = YEAR + + def formula(tax_unit, period, parameters): + earnings = tax_unit("filer_adjusted_earnings", period) + agi = tax_unit("adjusted_gross_income", period) + highest_income = max_(earnings, agi) + phase_out_start = tax_unit( + "ny_a04948_youth_eitc_phase_out_start", period + ) + phase_out_rate = tax_unit( + "ny_a04948_youth_eitc_phase_out_rate", period + ) + phase_out_region = max_(0, highest_income - phase_out_start) + return phase_out_rate * phase_out_region + + class ny_a04948_youth_eitc_federal_amount(Variable): + value_type = float + entity = TaxUnit + label = "NY A04948 federal childless EITC amount" + unit = USD + definition_period = YEAR + reference = "https://www.law.cornell.edu/uscode/text/26/32#a" + + def formula(tax_unit, period, parameters): + # Calculate federal childless EITC (as if 0 qualifying children) + maximum = tax_unit( + "ny_a04948_youth_eitc_childless_maximum", period + ) + phased_in = tax_unit("ny_a04948_youth_eitc_phased_in", period) + reduction = tax_unit("ny_a04948_youth_eitc_reduction", period) + limitation = max_(0, maximum - reduction) + return min_(phased_in, limitation) + + class ny_a04948_youth_eitc(Variable): + value_type = float + entity = TaxUnit + label = "NY A04948 youth earned income tax credit" + unit = USD + definition_period = YEAR + reference = ( + "https://www.nysenate.gov/legislation/bills/2025/A4948", + "https://www.nysenate.gov/legislation/laws/TAX/606", + ) + defined_for = StateCode.NY + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.contrib.states.ny.a04948 + # Check if reform is in effect + in_effect = p.in_effect + # Check if any member is eligible for the youth EITC + person = tax_unit.members + eligible = person("ny_a04948_youth_eitc_eligible", period) + any_eligible = tax_unit.any(eligible) + # Calculate 130% of federal childless EITC + federal_childless_eitc = tax_unit( + "ny_a04948_youth_eitc_federal_amount", period + ) + youth_eitc_amount = federal_childless_eitc * p.youth_eitc.match + return where(in_effect & any_eligible, youth_eitc_amount, 0) + + class ny_a04948_youth_standard_deduction_eligible(Variable): + value_type = bool + entity = Person + label = "Eligible for NY A04948 youth enhanced standard deduction" + definition_period = YEAR + reference = ( + "https://www.nysenate.gov/legislation/bills/2025/A4948", + "https://www.nysenate.gov/legislation/laws/TAX/614", + ) + defined_for = StateCode.NY + + def formula(person, period, parameters): + p = parameters(period).gov.contrib.states.ny.a04948 + # Reform must be in effect + in_effect = p.in_effect + # Check if youth standard deduction parameters are defined + # (effective 2027) + youth_std_ded = p.youth_standard_deduction + min_age = youth_std_ded.min_age + max_age = youth_std_ded.max_age + # Age requirements: 18-24 + age = person("age", period) + age_eligible = (age >= min_age) & (age <= max_age) + # Cannot be claimed as dependent + not_dependent = ~person("is_tax_unit_dependent", period) + # Filing status: must be Single + filing_status = person.tax_unit("filing_status", period) + is_single = filing_status == filing_status.possible_values.SINGLE + # Must be the filer + is_filer = person("is_tax_unit_head_or_spouse", period) + return in_effect & age_eligible & not_dependent & is_single & is_filer + + class ny_a04948_youth_standard_deduction(Variable): + value_type = float + entity = TaxUnit + label = "NY A04948 youth enhanced standard deduction" + unit = USD + definition_period = YEAR + reference = ( + "https://www.nysenate.gov/legislation/bills/2025/A4948", + "https://www.nysenate.gov/legislation/laws/TAX/614", + ) + defined_for = StateCode.NY + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.contrib.states.ny.a04948 + # Check if reform is in effect + in_effect = p.in_effect + # Check if filer is eligible + person = tax_unit.members + eligible = person( + "ny_a04948_youth_standard_deduction_eligible", period + ) + filer_eligible = tax_unit.any(eligible) + enhanced_deduction = p.youth_standard_deduction.amount + return where(in_effect & filer_eligible, enhanced_deduction, 0) + + class ny_standard_deduction(Variable): + value_type = float + entity = TaxUnit + label = "NY standard deduction" + unit = USD + definition_period = YEAR + reference = "https://www.nysenate.gov/legislation/laws/TAX/614" + defined_for = StateCode.NY + + def formula(tax_unit, period, parameters): + # Get standard NY standard deduction based on filing status + filing_status = tax_unit("filing_status", period) + p = parameters(period).gov.states.ny.tax.income.deductions + standard = p.standard.amount[filing_status] + # Check for youth enhanced standard deduction + youth_deduction = tax_unit( + "ny_a04948_youth_standard_deduction", period + ) + # Use the greater of standard or youth enhanced deduction + return max_(standard, youth_deduction) + + class ny_a04948_student_loan_interest_deduction(Variable): + value_type = float + entity = TaxUnit + label = "NY A04948 student loan interest deduction" + unit = USD + definition_period = YEAR + reference = ( + "https://www.nysenate.gov/legislation/bills/2025/A4948", + "https://www.nysenate.gov/legislation/laws/TAX/615", + "https://www.law.cornell.edu/uscode/text/26/221", + ) + defined_for = StateCode.NY + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.contrib.states.ny.a04948 + # Check if reform is in effect + in_effect = p.in_effect + # Get student loan interest from all members + person = tax_unit.members + interest = person("student_loan_interest", period) + total_interest = tax_unit.sum(interest) + # Apply federal cap per IRC 221 + p_fed = parameters(period).gov.irs.ald.student_loan_interest + filing_status = tax_unit("filing_status", period) + cap = p_fed.cap[filing_status] + capped_interest = min_(total_interest, cap) + # Cannot be married filing separately + separate = filing_status == filing_status.possible_values.SEPARATE + # Cannot be claimed as dependent + head = tax_unit("tax_unit_head", period) + head_dependent = person("is_tax_unit_dependent", period) + head_is_dependent = tax_unit.value_from_first_person( + head_dependent + ) + eligible = ~separate & ~head_is_dependent + # Apply phaseout based on MAGI + agi = tax_unit("adjusted_gross_income", period) + reduction_start = p_fed.reduction.start[filing_status] + income_excess = max_(0, agi - reduction_start) + divisor = p_fed.reduction.divisor[filing_status] + reduction_rate = where(divisor > 0, income_excess / divisor, 0) + reduction_rate = min_(reduction_rate, 1) # Cap at 100% + reduction_amount = capped_interest * reduction_rate + deduction = max_(capped_interest - reduction_amount, 0) + return where(in_effect & eligible, deduction, 0) + + class ny_agi(Variable): + value_type = float + entity = TaxUnit + label = "NY adjusted gross income" + unit = USD + definition_period = YEAR + reference = "https://www.nysenate.gov/legislation/laws/TAX/612" + defined_for = StateCode.NY + + def formula(tax_unit, period, parameters): + # Start with federal AGI + agi = tax_unit("adjusted_gross_income", period) + # Add NY additions + additions = add( + tax_unit, + period, + [ + "ny_agi_additions", + ], + ) + # Subtract NY subtractions + subtractions = add( + tax_unit, + period, + [ + "ny_agi_subtractions", + ], + ) + # Subtract student loan interest deduction (A04948) + student_loan_deduction = tax_unit( + "ny_a04948_student_loan_interest_deduction", period + ) + return agi + additions - subtractions - student_loan_deduction + + class ny_refundable_credits(Variable): + value_type = float + entity = TaxUnit + label = "NY refundable credits" + unit = USD + definition_period = YEAR + defined_for = StateCode.NY + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.ny.tax.income.credits + standard_credits = add(tax_unit, period, p.refundable) + # Add youth EITC from A04948 + youth_eitc = tax_unit("ny_a04948_youth_eitc", period) + return standard_credits + youth_eitc + + class reform(Reform): + def apply(self): + # Youth EITC variables + self.update_variable(ny_a04948_youth_eitc_eligible) + self.update_variable(ny_a04948_youth_eitc_childless_maximum) + self.update_variable(ny_a04948_youth_eitc_phase_in_rate) + self.update_variable(ny_a04948_youth_eitc_phased_in) + self.update_variable(ny_a04948_youth_eitc_phase_out_start) + self.update_variable(ny_a04948_youth_eitc_phase_out_rate) + self.update_variable(ny_a04948_youth_eitc_reduction) + self.update_variable(ny_a04948_youth_eitc_federal_amount) + self.update_variable(ny_a04948_youth_eitc) + # Youth standard deduction variables + self.update_variable(ny_a04948_youth_standard_deduction_eligible) + self.update_variable(ny_a04948_youth_standard_deduction) + self.update_variable(ny_standard_deduction) + # Student loan interest deduction + self.update_variable(ny_a04948_student_loan_interest_deduction) + self.update_variable(ny_agi) + # Update refundable credits to include youth EITC + self.update_variable(ny_refundable_credits) + + return reform + + +def create_ny_a04948_youth_worker_tax_benefits_reform( + parameters, period, bypass: bool = False +): + if bypass: + return create_ny_a04948_youth_worker_tax_benefits() + + p = parameters(period).gov.contrib.states.ny.a04948 + + if p.in_effect: + return create_ny_a04948_youth_worker_tax_benefits() + else: + return None + + +ny_a04948_youth_worker_tax_benefits = ( + create_ny_a04948_youth_worker_tax_benefits_reform(None, None, bypass=True) +) diff --git a/policyengine_us/tests/policy/contrib/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.yaml b/policyengine_us/tests/policy/contrib/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.yaml new file mode 100644 index 00000000000..fa817bc4b44 --- /dev/null +++ b/policyengine_us/tests/policy/contrib/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.yaml @@ -0,0 +1,568 @@ +# NY A04948 Youth Worker Tax Benefits Tests +# Tests the interaction of all three reform components: +# 1. Youth EITC (ages 17-24, 130% of federal childless EITC) +# 2. Youth Standard Deduction ($10,000 for ages 18-24 single filers) +# 3. Student Loan Interest Deduction (up to $2,500 per IRC 221) + +# Youth EITC eligibility tests +- name: Youth EITC - age 17 single non-dependent without children is eligible + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 17 + is_tax_unit_head: true + is_tax_unit_dependent: false + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NY + output: + ny_a04948_youth_eitc_eligible: [true] + +- name: Youth EITC - age 20 single non-dependent without children is eligible + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 20 + is_tax_unit_head: true + is_tax_unit_dependent: false + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NY + output: + ny_a04948_youth_eitc_eligible: [true] + +- name: Youth EITC - age 24 single non-dependent without children is eligible + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 24 + is_tax_unit_head: true + is_tax_unit_dependent: false + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NY + output: + ny_a04948_youth_eitc_eligible: [true] + +- name: Youth EITC - age 25 not eligible, too old + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 25 + is_tax_unit_head: true + is_tax_unit_dependent: false + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NY + output: + ny_a04948_youth_eitc_eligible: [false] + +- name: Youth EITC - age 16 not eligible, too young + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 16 + is_tax_unit_head: true + is_tax_unit_dependent: false + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NY + output: + ny_a04948_youth_eitc_eligible: [false] + +- name: Youth EITC - age 20 claimed as dependent not eligible + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 20 + is_tax_unit_head: true + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NY + output: + ny_a04948_youth_eitc_eligible: [false] + +# Youth EITC amount tests +- name: Youth EITC amount - eligible youth with no earned income gets zero + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 20 + is_tax_unit_head: true + is_tax_unit_dependent: false + employment_income: 0 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NY + output: + ny_a04948_youth_eitc: 0 + +- name: Youth EITC amount - eligible youth with $5k earned income in phase-in + period: 2027 + absolute_error_margin: 10 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 20 + is_tax_unit_head: true + is_tax_unit_dependent: false + employment_income: 5_000 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NY + output: + # Phase-in: $5,000 * 7.65% = $382.50 federal + # Youth credit: $382.50 * 1.3 = $497.25 + ny_a04948_youth_eitc: 497 + +- name: Youth EITC amount - ineligible age 25 gets zero + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 25 + is_tax_unit_head: true + is_tax_unit_dependent: false + employment_income: 15_000 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NY + output: + ny_a04948_youth_eitc: 0 + +- name: Youth EITC amount - age 17 with $3k earned income + period: 2027 + absolute_error_margin: 10 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 17 + is_tax_unit_head: true + is_tax_unit_dependent: false + employment_income: 3_000 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NY + output: + # Phase-in: $3,000 * 7.65% = $229.50 federal + # Youth credit: $229.50 * 1.3 = $298.35 + ny_a04948_youth_eitc: 298 + +- name: Youth EITC amount - age 24 with $10k earned income at max + period: 2027 + absolute_error_margin: 20 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 24 + is_tax_unit_head: true + is_tax_unit_dependent: false + employment_income: 10_000 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: NY + output: + # Near or at maximum federal childless EITC + # Federal max ~$680 * 1.3 = ~$884 + ny_a04948_youth_eitc: 884 + +# Youth Standard Deduction eligibility tests +- name: Youth Standard Deduction - age 20 single non-dependent is eligible + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 20 + is_tax_unit_head: true + is_tax_unit_dependent: false + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: NY + output: + ny_a04948_youth_standard_deduction_eligible: true + ny_a04948_youth_standard_deduction: 10_000 + ny_standard_deduction: 10_000 + +- name: Youth Standard Deduction - age 17 not eligible, too young + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 17 + is_tax_unit_head: true + is_tax_unit_dependent: false + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: NY + output: + ny_a04948_youth_standard_deduction_eligible: false + ny_a04948_youth_standard_deduction: 0 + +- name: Youth Standard Deduction - age 25 not eligible, too old + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 25 + is_tax_unit_head: true + is_tax_unit_dependent: false + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: NY + output: + ny_a04948_youth_standard_deduction_eligible: false + ny_a04948_youth_standard_deduction: 0 + +- name: Youth Standard Deduction - married filing jointly not eligible + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 22 + is_tax_unit_head: true + is_tax_unit_dependent: false + person2: + age: 25 + is_tax_unit_spouse: true + tax_units: + tax_unit: + members: [person1, person2] + filing_status: JOINT + households: + household: + members: [person1, person2] + state_code: NY + output: + ny_a04948_youth_standard_deduction_eligible: false + ny_a04948_youth_standard_deduction: 0 + +- name: Youth Standard Deduction - head of household not eligible + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 22 + is_tax_unit_head: true + is_tax_unit_dependent: false + tax_units: + tax_unit: + members: [person1] + filing_status: HEAD_OF_HOUSEHOLD + households: + household: + members: [person1] + state_code: NY + output: + ny_a04948_youth_standard_deduction_eligible: false + ny_a04948_youth_standard_deduction: 0 + +# Student Loan Interest Deduction tests +- name: Student Loan Interest - NY resident with $2,000 interest + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 28 + is_tax_unit_head: true + is_tax_unit_dependent: false + student_loan_interest: 2_000 + employment_income: 50_000 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: NY + output: + # Full $2,000 deduction (below cap, below phaseout) + ny_a04948_student_loan_interest_deduction: 2_000 + +- name: Student Loan Interest - $3,000 interest capped at $2,500 + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 28 + is_tax_unit_head: true + is_tax_unit_dependent: false + student_loan_interest: 3_000 + employment_income: 50_000 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: NY + output: + # Capped at $2,500 maximum + ny_a04948_student_loan_interest_deduction: 2_500 + +- name: Student Loan Interest - no interest + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 28 + is_tax_unit_head: true + is_tax_unit_dependent: false + student_loan_interest: 0 + employment_income: 50_000 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: NY + output: + ny_a04948_student_loan_interest_deduction: 0 + +# Integration tests +- name: Integration - age 20 gets youth EITC and enhanced standard deduction + period: 2027 + absolute_error_margin: 20 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 20 + is_tax_unit_head: true + is_tax_unit_dependent: false + employment_income: 15_000 + student_loan_interest: 1_500 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: NY + output: + ny_a04948_youth_eitc_eligible: [true] + ny_a04948_youth_standard_deduction_eligible: true + ny_a04948_youth_standard_deduction: 10_000 + ny_standard_deduction: 10_000 + ny_a04948_student_loan_interest_deduction: 1_500 + # Youth EITC based on $15,000 income in phaseout + ny_a04948_youth_eitc: 449 + +- name: Integration - age 17 gets youth EITC but NOT standard deduction + period: 2027 + absolute_error_margin: 15 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 17 + is_tax_unit_head: true + is_tax_unit_dependent: false + employment_income: 8_000 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: NY + output: + ny_a04948_youth_eitc_eligible: [true] + ny_a04948_youth_standard_deduction_eligible: false + ny_a04948_youth_standard_deduction: 0 + # Youth EITC: $8,000 * 7.65% = $612 federal * 1.3 = $796 + ny_a04948_youth_eitc: 796 + +- name: Integration - age 25 gets student loan deduction only + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 25 + is_tax_unit_head: true + is_tax_unit_dependent: false + employment_income: 50_000 + student_loan_interest: 2_000 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: NY + output: + ny_a04948_youth_eitc_eligible: [false] + ny_a04948_youth_eitc: 0 + ny_a04948_youth_standard_deduction_eligible: false + ny_a04948_youth_standard_deduction: 0 + ny_a04948_student_loan_interest_deduction: 2_000 + +- name: Integration - age 20 parent not eligible for youth EITC + period: 2027 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: true + people: + person1: + age: 20 + is_tax_unit_head: true + is_tax_unit_dependent: false + employment_income: 25_000 + student_loan_interest: 1_000 + person2: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2] + filing_status: HEAD_OF_HOUSEHOLD + households: + household: + members: [person1, person2] + state_code: NY + output: + ny_a04948_youth_eitc_eligible: [false, false] + ny_a04948_youth_eitc: 0 + ny_a04948_youth_standard_deduction_eligible: false + ny_a04948_youth_standard_deduction: 0 + ny_a04948_student_loan_interest_deduction: 1_000 + +- name: No reform applied before 2026 + period: 2025 + reforms: policyengine_us.reforms.states.ny.a04948.ny_a04948_youth_worker_tax_benefits.ny_a04948_youth_worker_tax_benefits + input: + gov.contrib.states.ny.a04948.in_effect: false + people: + person1: + age: 20 + is_tax_unit_head: true + is_tax_unit_dependent: false + employment_income: 15_000 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: NY + output: + # Reform not in effect, should be zero + ny_a04948_youth_eitc: 0 + ny_a04948_youth_standard_deduction: 0 + ny_a04948_student_loan_interest_deduction: 0 From b49e5a593eb67931ab71b673c4fd9d94cbcdc7aa Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Thu, 15 Jan 2026 17:01:54 -0500 Subject: [PATCH 3/6] Fix student loan interest deduction and use exact values in tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix AttributeError in student_loan_interest_deduction by using head_is_dependent_elsewhere instead of tax_unit_head variable - Update test comments to use exact calculated values instead of approximations (removed ~ symbols) - Correct expected value for $10k income test from 884 to 880 (based on exact calculation: $677 max × 1.3 = $880.10) - Add detailed step-by-step calculation comments for $15k phaseout case Co-Authored-By: Claude Opus 4.5 --- .../ny_a04948_youth_worker_tax_benefits.py | 10 ++++------ .../ny_a04948_youth_worker_tax_benefits.yaml | 16 +++++++++++----- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/policyengine_us/reforms/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.py b/policyengine_us/reforms/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.py index 235ccd6cca5..76c4d38cd14 100644 --- a/policyengine_us/reforms/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.py +++ b/policyengine_us/reforms/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.py @@ -204,7 +204,9 @@ def formula(person, period, parameters): is_single = filing_status == filing_status.possible_values.SINGLE # Must be the filer is_filer = person("is_tax_unit_head_or_spouse", period) - return in_effect & age_eligible & not_dependent & is_single & is_filer + return ( + in_effect & age_eligible & not_dependent & is_single & is_filer + ) class ny_a04948_youth_standard_deduction(Variable): value_type = float @@ -281,11 +283,7 @@ def formula(tax_unit, period, parameters): # Cannot be married filing separately separate = filing_status == filing_status.possible_values.SEPARATE # Cannot be claimed as dependent - head = tax_unit("tax_unit_head", period) - head_dependent = person("is_tax_unit_dependent", period) - head_is_dependent = tax_unit.value_from_first_person( - head_dependent - ) + head_is_dependent = tax_unit("head_is_dependent_elsewhere", period) eligible = ~separate & ~head_is_dependent # Apply phaseout based on MAGI agi = tax_unit("adjusted_gross_income", period) diff --git a/policyengine_us/tests/policy/contrib/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.yaml b/policyengine_us/tests/policy/contrib/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.yaml index fa817bc4b44..8e8d689d645 100644 --- a/policyengine_us/tests/policy/contrib/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.yaml +++ b/policyengine_us/tests/policy/contrib/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.yaml @@ -236,9 +236,9 @@ members: [person1] state_code: NY output: - # Near or at maximum federal childless EITC - # Federal max ~$680 * 1.3 = ~$884 - ny_a04948_youth_eitc: 884 + # At maximum federal childless EITC ($10,000 * 7.65% = $765 exceeds max) + # Federal max $677 * 1.3 = $880.10 + ny_a04948_youth_eitc: 880 # Youth Standard Deduction eligibility tests - name: Youth Standard Deduction - age 20 single non-dependent is eligible @@ -456,7 +456,13 @@ ny_standard_deduction: 10_000 ny_a04948_student_loan_interest_deduction: 1_500 # Youth EITC based on $15,000 income in phaseout - ny_a04948_youth_eitc: 449 + # Federal childless max $677 (2027), phase-out start $11,070 + # Phased-in: $15,000 * 7.65% = $1,147.50 + # Phase-out reduction: ($15,000 - $11,070) * 7.65% = $300.645 + # Limitation: $677 - $300.645 = $376.355 + # Federal EITC: min($1,147.50, $376.355) = $376.355 + # Youth EITC: $376.355 * 1.3 = $489.26 + ny_a04948_youth_eitc: 489 - name: Integration - age 17 gets youth EITC but NOT standard deduction period: 2027 @@ -482,7 +488,7 @@ ny_a04948_youth_eitc_eligible: [true] ny_a04948_youth_standard_deduction_eligible: false ny_a04948_youth_standard_deduction: 0 - # Youth EITC: $8,000 * 7.65% = $612 federal * 1.3 = $796 + # Youth EITC: $8,000 * 7.65% = $612.00 federal * 1.3 = $795.60 ny_a04948_youth_eitc: 796 - name: Integration - age 25 gets student loan deduction only From 9605966bcf06a225238db56217bcd3c98ad6875a Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Mon, 19 Jan 2026 16:08:59 -0500 Subject: [PATCH 4/6] edits --- .../contrib/states/ny/a04948/in_effect.yaml | 2 - .../ny/a04948/sources/working_references.md | 467 ------------------ 2 files changed, 469 deletions(-) delete mode 100644 policyengine_us/reforms/contrib/states/ny/a04948/sources/working_references.md diff --git a/policyengine_us/parameters/gov/contrib/states/ny/a04948/in_effect.yaml b/policyengine_us/parameters/gov/contrib/states/ny/a04948/in_effect.yaml index e024708fa27..44e02760aaf 100644 --- a/policyengine_us/parameters/gov/contrib/states/ny/a04948/in_effect.yaml +++ b/policyengine_us/parameters/gov/contrib/states/ny/a04948/in_effect.yaml @@ -8,5 +8,3 @@ metadata: href: https://www.nysenate.gov/legislation/bills/2025/A4948 values: 0000-01-01: false - 2026-01-01: true - 2032-01-01: false diff --git a/policyengine_us/reforms/contrib/states/ny/a04948/sources/working_references.md b/policyengine_us/reforms/contrib/states/ny/a04948/sources/working_references.md deleted file mode 100644 index aaabe638e73..00000000000 --- a/policyengine_us/reforms/contrib/states/ny/a04948/sources/working_references.md +++ /dev/null @@ -1,467 +0,0 @@ -# Collected Documentation - -## NY Assembly Bill A04948 - Youth Worker Tax Benefits -**Collected**: January 15, 2026 -**Implementation Task**: Implement NY A04948 reform providing youth EITC, enhanced standard deduction, and student loan interest deduction - ---- - -## Official Program Name - -**Bill Number**: Assembly Bill A04948 (2025-2026 Regular Sessions) -**Companion Bill**: Senate Bill S4103 -**Short Title**: Youth Worker Tax Benefits Act -**Sponsors**: A. Bronson, Simon (Assembly); Parker, Fernandez (Senate) -**Committee**: Ways and Means - -**Variable Prefix**: `ny_a04948_` (for reform-specific variables) - ---- - -## Bill Overview - -This legislation amends New York Tax Law sections 606, 614, and 615 to provide tax benefits for young workers and student loan borrowers. - -### Effective Dates -- **Takes Effect**: January 1, 2026 -- **Expires**: December 31, 2031 (deemed repealed) - -### Source -- Title: NY Assembly Bill 2025-A4948 - href: https://www.nysenate.gov/legislation/bills/2025/A4948 - ---- - -## Section 1: Youth Earned Income Tax Credit (Section 606(d-2)) - -### Legal Citation -- **Amended Section**: NY Tax Law Section 606, new subsection (d-2) -- **Title**: "Earned income tax credit for youth workers" - -### Credit Calculation - -**Credit Amount**: 130% (1.3x) of the federal EITC that would have been allowed - -The statutory language states the credit equals: -> "the product of one and three-tenths and the amount of the earned income tax credit that would have been allowed to the taxpayer under section thirty-two of the internal revenue code, if the taxpayer had attained the minimum age of eligibility for such earned income tax credit" - -**Parameter Value**: `1.3` (rate multiplier) - -### Eligibility Requirements - -A taxpayer must meet ALL of the following criteria: - -1. **Residency**: Must be a resident taxpayer -2. **Dependency Status**: Cannot be claimed as a dependent of another taxpayer -3. **Age Requirement**: - - Must have attained age 17 - - Must NOT have attained the minimum federal EITC age (currently age 25 for childless filers) - - **Eligible ages**: 17, 18, 19, 20, 21, 22, 23, 24 -4. **Parental Status**: Cannot be a custodial or non-custodial parent of a minor child or children -5. **Student Exception**: Eligibility is NOT restricted for taxpayers who are: - - Enrolled in full-time or part-time high school diploma programs - - Pursuing GED certification - - Enrolled in post-secondary certificate or degree programs - -### Federal EITC Reference (IRC Section 32) - -The youth credit is based on what the federal EITC would be if the taxpayer met age requirements: - -**Federal EITC Age Requirements (IRC Section 32(c)(1)(A)(ii)(II))**: -- Minimum age: 25 years old -- Maximum age: 64 years old (before end of tax year) -- Age requirements apply only to childless filers - -**Federal EITC Maximum Credits (2025)**: -| Children | Maximum Credit | -|----------|---------------| -| 0 | $649 | -| 1 | $4,328 | -| 2 | $7,152 | -| 3+ | $8,046 | - -**Youth EITC Maximum (at 130%)**: -Since youth (ages 17-24) cannot have qualifying children under this credit: -- Maximum federal childless EITC: $649 -- **Youth EITC Maximum**: $649 x 1.3 = **$844.70** - -### Reporting Requirements - -The Commissioner must submit reports to: -- Governor -- Temporary President of the Senate -- Speaker of the Assembly -- Chairpersons of Senate Finance and Assembly Ways and Means Committees - -**Report Schedule**: -- Preliminary report: By July 31st of each year -- Final report: By December 31st of each year - -**Report Contents**: -- Number of credits granted -- Average credit amount -- County-level breakdowns - -### References -- Title: NY Tax Law Section 606 - Credits Against Tax - href: https://www.nysenate.gov/legislation/laws/TAX/606 -- Title: NY Assembly Bill 2025-A4948 - href: https://www.nysenate.gov/legislation/bills/2025/A4948 -- Title: IRC Section 32 - Earned Income - href: https://www.law.cornell.edu/uscode/text/26/32 - ---- - -## Section 2: Enhanced Standard Deduction (Section 614) - -### Legal Citation -- **Amended Section**: NY Tax Law Section 614 -- **New Provision**: Additional paragraph for young adults aged 18-24 - -### Enhanced Deduction Amount - -**Amount**: $10,000 (for taxable years beginning after 2026) - -The statutory language provides: -> "For taxable years beginning after two thousand twenty-six, the New York standard deduction of a resident individual who is between the ages of eighteen and twenty-four and who is not married nor the head of a household nor a surviving spouse nor an individual whose federal exemption amount is zero shall be ten thousand dollars." - -### Eligibility Requirements - -A taxpayer qualifies if ALL of the following apply: - -1. **Residency**: Must be a resident individual -2. **Age Requirement**: Between ages 18 and 24 (inclusive) -3. **Filing Status Restrictions** - Cannot be: - - Married (any filing status) - - Head of household - - Surviving spouse/qualifying widow(er) -4. **Dependency Status**: Federal exemption amount cannot be zero (i.e., cannot be claimed as dependent) - -### Comparison to Current NY Standard Deductions (2025) - -| Filing Status | Current Amount | With A04948 (Ages 18-24) | -|---------------|---------------|--------------------------| -| Single (non-dependent) | $8,000 | **$10,000** | -| Single (dependent) | $3,100 | Not eligible (exemption = 0) | -| Married filing jointly | $16,050 | Not eligible (married) | -| Married filing separately | $8,000 | Not eligible (married) | -| Head of household | $11,200 | Not eligible (HoH) | -| Qualifying surviving spouse | $16,050 | Not eligible | - -**Benefit**: Young adults aged 18-24 receive an additional $2,000 deduction compared to standard single filers. - -### Implementation Note - -**Effective Date**: Taxable years beginning after 2026 (first applicable year: 2027) - -This differs from the EITC and student loan provisions which begin January 1, 2026. - -### References -- Title: NY Tax Law Section 614 - Standard Deduction - href: https://www.nysenate.gov/legislation/laws/TAX/614 -- Title: 2025 Standard Deductions - NY Tax Department - href: https://www.tax.ny.gov/pit/file/standard_deductions.htm - ---- - -## Section 3: Student Loan Interest Deduction (Section 615(h)) - -### Legal Citation -- **Amended Section**: NY Tax Law Section 615 -- **New Subsection**: (h) - -### Deduction Amount - -The deduction equals: -> "an amount equal to the interest paid by the taxpayer during the taxable year on any qualified education loan to the extent and as provided in section 221 of the Internal Revenue Code" - -**Key**: The deduction follows federal IRC Section 221 rules entirely. - -### Federal IRC Section 221 Rules - -**Maximum Deduction**: $2,500 per year - -**Qualified Education Loan Definition** (IRC 221(d)(1)): -Any indebtedness incurred solely to pay qualified higher education expenses: -- For the taxpayer, spouse, or dependent (at time debt was incurred) -- Paid within a reasonable period before/after the loan -- Attributable to education during eligible student status -- Includes refinanced qualifying loans - -**Excludes**: -- Loans from related persons -- Loans under employer education plans - -### Income Phaseout (2025 Federal) - -| Filing Status | Phaseout Begins | Phaseout Complete | -|---------------|-----------------|-------------------| -| Single/HoH | $75,000 MAGI | $90,000 MAGI | -| Married Filing Jointly | $155,000 MAGI | $185,000 MAGI | - -**2026 Inflation-Adjusted (for reference)**: -| Filing Status | Phaseout Begins | Phaseout Complete | -|---------------|-----------------|-------------------| -| Single/HoH | $85,000 MAGI | $100,000 MAGI | -| Married Filing Jointly | $175,000 MAGI | $205,000 MAGI | - -### Eligibility Requirements (per IRC 221) - -1. **Residency**: Must be a resident individual (NY requirement) -2. **Paid Interest**: Must have paid interest on a qualified education loan -3. **Legal Obligation**: Must be legally obligated to pay interest -4. **Filing Status**: Cannot be married filing separately -5. **Income Limit**: MAGI must be below phaseout threshold -6. **Dependency**: Cannot be claimed as dependent on another's return - -### Deduction Type - -This is an "above-the-line" adjustment to income: -- Reduces Adjusted Gross Income (AGI) directly -- Does NOT require itemizing deductions -- Available even with standard deduction - -### References -- Title: IRC Section 221 - Interest on Education Loans - href: https://www.law.cornell.edu/uscode/text/26/221 -- Title: IRS Topic 456 - Student Loan Interest Deduction - href: https://www.irs.gov/taxtopics/tc456 -- Title: NY Tax Law Section 615 - Itemized Deduction - href: https://www.nysenate.gov/legislation/laws/TAX/615 - ---- - -## Current NY Law Comparison - -### Current NY EITC (Section 606(d)) - -**Credit Rate**: 30% of federal EITC (for taxable years 2003 and after) - -**Historical Rates**: -- 1994: 7.5% -- 1995: 10% -- 1996-1999: 20% -- 2000: 22.5% -- 2001: 25% -- 2002: 27.5% -- 2003+: 30% - -**Key Difference from A04948**: -- Current NY EITC: 30% of federal credit (for those who qualify for federal) -- A04948 Youth EITC: 130% of what federal credit WOULD BE (for ages 17-24 who don't qualify federally) - -### Current NY Standard Deduction (Section 614) - -The current law provides these standard deductions: - -**Statutory Base Amounts** (from Tax Law 614): -- Single (non-dependent): $7,500 (1996+) -- Married filing jointly: $15,000 (2005+) -- Head of household: $10,500 (1996+) -- Married filing separately: $7,500 (2005+) -- Dependent: $3,000 (1996+) - -**Current Inflation-Adjusted Amounts (2025)**: -- Single (non-dependent): $8,000 -- Single (dependent): $3,100 -- Married filing jointly: $16,050 -- Married filing separately: $8,000 -- Head of household: $11,200 -- Qualifying surviving spouse: $16,050 - -**Cost of Living Adjustment**: Section 614(f) provides that for taxable years after 2017, amounts are adjusted per Section 601-a. - -### NY Noncustodial Parent EITC (Section 606(d-1)) - -**Note**: This is a separate existing credit, NOT part of A04948. - -Requirements: -- Age 18 or older -- Child support order through SCU -- Current on child support payments - -Credit equals the greater of: -- 20% of federal EITC (as if one child qualified), OR -- 2.5x the federal EITC for childless workers - -**Distinction**: A04948's youth EITC (d-2) is separate from and in addition to the noncustodial parent EITC (d-1). - ---- - -## Implementation Parameters Summary - -### Youth EITC Parameters (Section 606(d-2)) - -| Parameter | Value | Unit | Notes | -|-----------|-------|------|-------| -| Credit multiplier | 1.3 | rate | 130% of federal EITC | -| Minimum age | 17 | years | Must have attained | -| Maximum age | 24 | years | Below federal EITC min age (25) | -| Can be dependent | false | bool | Cannot be claimed | -| Can be parent | false | bool | No minor children | -| Effective date | 2026-01-01 | date | | -| Expiration date | 2031-12-31 | date | | - -### Enhanced Standard Deduction Parameters (Section 614) - -| Parameter | Value | Unit | Notes | -|-----------|-------|------|-------| -| Deduction amount | 10_000 | USD | For eligible young adults | -| Minimum age | 18 | years | | -| Maximum age | 24 | years | | -| Married eligible | false | bool | | -| Head of household eligible | false | bool | | -| Surviving spouse eligible | false | bool | | -| Can be dependent | false | bool | Exemption must be non-zero | -| Effective date | 2027-01-01 | date | "After 2026" | -| Expiration date | 2031-12-31 | date | | - -### Student Loan Interest Deduction Parameters (Section 615(h)) - -| Parameter | Value | Unit | Notes | -|-----------|-------|------|-------| -| Maximum deduction | 2_500 | USD | Per IRC 221 | -| Single phaseout start (2025) | 75_000 | USD | MAGI | -| Single phaseout end (2025) | 90_000 | USD | MAGI | -| Joint phaseout start (2025) | 155_000 | USD | MAGI | -| Joint phaseout end (2025) | 185_000 | USD | MAGI | -| Effective date | 2026-01-01 | date | | -| Expiration date | 2031-12-31 | date | | - ---- - -## Non-Simulatable Rules - -### Time-Limited Provisions (Architecture Limitation) - -The bill contains sunset provisions: -- **Expiration**: December 31, 2031 - -**Implementation Note**: PolicyEngine can implement the reform for tax years 2026-2031, but cannot automatically "turn off" provisions after expiration in a single simulation. The expiration should be handled via: -1. Parameter effective dates with end dates -2. Reform description noting temporal scope - -### Can Be Fully Simulated - -All provisions in A04948 CAN be fully simulated: -- Age-based eligibility (point-in-time) -- Income-based phaseouts (point-in-time) -- Dependency status (point-in-time) -- Parental status (point-in-time) -- Filing status restrictions (point-in-time) - ---- - -## References Summary - -### Primary Legal Sources - -1. **NY Assembly Bill A4948 (2025)** - - Title: NY State Assembly Bill 2025-A4948 - - URL: https://www.nysenate.gov/legislation/bills/2025/A4948 - -2. **NY Senate Bill S4103 (Companion)** - - Title: NY State Senate Bill 2025-S4103 - - URL: https://www.nysenate.gov/legislation/bills/2025/S4103 - -3. **NY Tax Law Section 606** - - Title: NY Tax Law Section 606 - Credits Against Tax - - URL: https://www.nysenate.gov/legislation/laws/TAX/606 - -4. **NY Tax Law Section 614** - - Title: NY Tax Law Section 614 - Standard Deduction - - URL: https://www.nysenate.gov/legislation/laws/TAX/614 - -5. **NY Tax Law Section 615** - - Title: NY Tax Law Section 615 - Itemized Deduction - - URL: https://www.nysenate.gov/legislation/laws/TAX/615 - -### Federal Law References - -1. **IRC Section 32 - Earned Income Credit** - - Title: 26 U.S. Code Section 32 - Earned Income - - URL: https://www.law.cornell.edu/uscode/text/26/32 - -2. **IRC Section 221 - Student Loan Interest** - - Title: 26 U.S. Code Section 221 - Interest on Education Loans - - URL: https://www.law.cornell.edu/uscode/text/26/221 - -### Supporting Sources - -1. **NY Earned Income Credit Info** - - Title: Earned Income Credit (New York State) - - URL: https://www.tax.ny.gov/pit/credits/earned_income_credit.htm - -2. **NY Standard Deductions (2025)** - - Title: 2025 Standard Deductions - NY Tax Department - - URL: https://www.tax.ny.gov/pit/file/standard_deductions.htm - -3. **IRS EITC Tables** - - Title: Earned Income and EITC Tables - IRS - - URL: https://www.irs.gov/credits-deductions/individuals/earned-income-tax-credit/earned-income-and-earned-income-tax-credit-eitc-tables - -4. **IRS Student Loan Interest Deduction** - - Title: Topic 456 - Student Loan Interest Deduction - - URL: https://www.irs.gov/taxtopics/tc456 - ---- - -## Variable Implementation Recommendations - -### Variables to Create - -1. **`ny_a04948_youth_eitc_eligible`** (Person level, bool) - - Checks age 17-24, not dependent, not parent, resident - -2. **`ny_a04948_youth_eitc`** (TaxUnit level, USD) - - Calculates 130% of hypothetical federal childless EITC - -3. **`ny_a04948_enhanced_standard_deduction_eligible`** (Person level, bool) - - Checks age 18-24, not married, not HoH, not dependent - -4. **`ny_a04948_enhanced_standard_deduction`** (TaxUnit level, USD) - - Returns $10,000 if eligible, else current standard deduction - -5. **`ny_a04948_student_loan_interest_deduction`** (TaxUnit level, USD) - - Follows IRC 221 rules with NY-specific applicability - -### Parameters to Create - -``` -gov/states/ny/tax/income/credits/youth_eitc/ - multiplier.yaml # 1.3 - age/ - minimum.yaml # 17 - maximum.yaml # 24 - -gov/states/ny/tax/income/deductions/ - enhanced_standard_deduction/ - amount.yaml # 10_000 - age/ - minimum.yaml # 18 - maximum.yaml # 24 - - student_loan_interest/ - maximum.yaml # 2_500 - phaseout/ - single/ - start.yaml # 75_000 (2025), 85_000 (2026) - end.yaml # 90_000 (2025), 100_000 (2026) - joint/ - start.yaml # 155_000 (2025), 175_000 (2026) - end.yaml # 185_000 (2025), 205_000 (2026) -``` - ---- - -## Quality Validation Checklist - -- [x] All sources are official government documents (.gov, .state.ny.us) -- [x] Bill text excerpts include exact statutory language -- [x] All numeric values documented with citations -- [x] Effective dates specified (2026-01-01 for EITC/student loan, 2027-01-01 for std deduction) -- [x] Expiration date documented (2031-12-31) -- [x] Federal IRC references included where applicable -- [x] Comparison to current law provided -- [x] Implementation parameters summarized -- [x] Variable prefix recommended: `ny_a04948_` From f446331c0c3ab68ab7a8c9a3802e65ffba91bbe4 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Tue, 20 Jan 2026 13:40:44 -0500 Subject: [PATCH 5/6] Restore sc_h3492 reform that was accidentally removed. The PR inadvertently replaced the sc_h3492 import with ny_a04948 instead of adding the new reform alongside the existing one. This restores the SC H3492 EITC refundable reform to the reforms module. Co-Authored-By: Claude Opus 4.5 --- policyengine_us/reforms/reforms.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/policyengine_us/reforms/reforms.py b/policyengine_us/reforms/reforms.py index 845252b2e70..0cad11274c4 100644 --- a/policyengine_us/reforms/reforms.py +++ b/policyengine_us/reforms/reforms.py @@ -23,6 +23,7 @@ from .states.ny.a04948 import ( create_ny_a04948_youth_worker_tax_benefits_reform, ) +from .states.sc.h3492 import create_sc_h3492_eitc_refundable_reform from .harris.lift.middle_class_tax_credit import ( create_middle_class_tax_credit_reform, ) @@ -184,6 +185,9 @@ def create_structural_reforms_from_parameters(parameters, period): ny_a04948 = create_ny_a04948_youth_worker_tax_benefits_reform( parameters, period ) + sc_h3492_eitc_refundable = create_sc_h3492_eitc_refundable_reform( + parameters, period + ) middle_class_tax_credit = create_middle_class_tax_credit_reform( parameters, period @@ -330,6 +334,7 @@ def create_structural_reforms_from_parameters(parameters, period): halve_joint_eitc_phase_out_rate, ny_wftc, ny_a04948, + sc_h3492_eitc_refundable, middle_class_tax_credit, rent_relief_tax_credit, end_child_poverty_act, From 8391251b77ad38701c64391225cecbfcb55894c6 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Wed, 21 Jan 2026 16:14:41 -0500 Subject: [PATCH 6/6] fixes --- .../gov/contrib/states/ny/a04948/youth_eitc/match.yaml | 2 -- .../gov/contrib/states/ny/a04948/youth_eitc/max_age.yaml | 2 -- .../states/ny/a04948/youth_standard_deduction/amount.yaml | 2 -- policyengine_us/reforms/reforms.py | 1 + .../states/ny/a04948/ny_a04948_youth_worker_tax_benefits.py | 5 +---- 5 files changed, 2 insertions(+), 10 deletions(-) diff --git a/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/match.yaml b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/match.yaml index 25734cd5e5c..b4203e74bb1 100644 --- a/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/match.yaml +++ b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/match.yaml @@ -6,7 +6,5 @@ metadata: reference: - title: NY Assembly Bill 2025-A4948 Section 1 (Section 606(d-2)) href: https://www.nysenate.gov/legislation/bills/2025/A4948 - - title: NY Tax Law Section 606 - Credits Against Tax - href: https://www.nysenate.gov/legislation/laws/TAX/606 values: 2026-01-01: 1.3 diff --git a/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/max_age.yaml b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/max_age.yaml index 8ba2b082e21..15a52abaeb7 100644 --- a/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/max_age.yaml +++ b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_eitc/max_age.yaml @@ -6,7 +6,5 @@ metadata: reference: - title: NY Assembly Bill 2025-A4948 Section 1 (Section 606(d-2)) href: https://www.nysenate.gov/legislation/bills/2025/A4948 - - title: 26 U.S. Code Section 32(c)(1)(A)(ii)(II) - Earned Income - href: https://www.law.cornell.edu/uscode/text/26/32 values: 2026-01-01: 24 diff --git a/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_standard_deduction/amount.yaml b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_standard_deduction/amount.yaml index c0444fe922a..dff6595afd5 100644 --- a/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_standard_deduction/amount.yaml +++ b/policyengine_us/parameters/gov/contrib/states/ny/a04948/youth_standard_deduction/amount.yaml @@ -6,7 +6,5 @@ metadata: reference: - title: NY Assembly Bill 2025-A4948 Section 2 (Section 614) href: https://www.nysenate.gov/legislation/bills/2025/A4948 - - title: NY Tax Law Section 614 - Standard Deduction - href: https://www.nysenate.gov/legislation/laws/TAX/614 values: 2027-01-01: 10_000 diff --git a/policyengine_us/reforms/reforms.py b/policyengine_us/reforms/reforms.py index 2e5cd5df2cc..449fbe7a974 100644 --- a/policyengine_us/reforms/reforms.py +++ b/policyengine_us/reforms/reforms.py @@ -186,6 +186,7 @@ def create_structural_reforms_from_parameters(parameters, period): ny_wftc = create_ny_working_families_tax_credit_reform(parameters, period) ny_a04948 = create_ny_a04948_youth_worker_tax_benefits_reform( parameters, period + ) ny_a04038_enhanced_escc_infants = ( create_ny_a04038_enhanced_escc_infants_reform(parameters, period) ) diff --git a/policyengine_us/reforms/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.py b/policyengine_us/reforms/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.py index 76c4d38cd14..1101ad843dd 100644 --- a/policyengine_us/reforms/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.py +++ b/policyengine_us/reforms/states/ny/a04948/ny_a04948_youth_worker_tax_benefits.py @@ -18,10 +18,7 @@ class ny_a04948_youth_eitc_eligible(Variable): entity = Person label = "Eligible for NY A04948 youth EITC" definition_period = YEAR - reference = ( - "https://www.nysenate.gov/legislation/bills/2025/A4948", - "https://www.nysenate.gov/legislation/laws/TAX/606", - ) + reference = "https://www.nysenate.gov/legislation/bills/2025/A4948" defined_for = StateCode.NY def formula(person, period, parameters):