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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/ny-a04948-youth-worker-tax-benefits.added.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add NY A04948 Youth Worker Tax Benefits reform with Youth EITC, Youth Standard Deduction, and Student Loan Interest Deduction.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
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
values:
2026-01-01: 1.3
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
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
values:
2026-01-01: 24
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
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(a))
href: https://www.nysenate.gov/legislation/bills/2025/A4948
values:
2027-01-01: 10_000
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
description: The enhanced standard deduction provision of NY A04948 is in effect.
# Note: This provision is effective for "taxable years beginning after two thousand
# twenty-six" (i.e., 2027+), one year later than the EITC and student loan provisions.
metadata:
unit: bool
period: year
label: NY A04948 youth standard deduction in effect
reference:
- title: NY Assembly Bill 2025-A4948 Section 2 (Section 614(a))
href: https://www.nysenate.gov/legislation/bills/2025/A4948
values:
0000-01-01: false
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
5 changes: 5 additions & 0 deletions policyengine_us/reforms/reforms.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@
from .eitc import create_halve_joint_eitc_phase_out_rate_reform
from .eitc import create_streamlined_eitc_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 .states.ny.a04038 import create_ny_a04038_enhanced_escc_infants_reform
from .states.ny.s9110 import create_ny_s9110_reform
from .states.sc.h3492 import create_sc_h3492_eitc_refundable_reform
Expand Down Expand Up @@ -237,6 +240,7 @@ def create_structural_reforms_from_parameters(parameters, period):
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
)
Expand Down Expand Up @@ -392,6 +396,7 @@ def create_structural_reforms_from_parameters(parameters, period):
capital_gains_tax_increase,
halve_joint_eitc_phase_out_rate,
ny_wftc,
ny_a04948,
ny_a04038_enhanced_escc_infants,
ny_s9110,
sc_h3492_eitc_refundable,
Expand Down
6 changes: 6 additions & 0 deletions policyengine_us/reforms/states/ny/a04948/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from .ny_a04948_youth_worker_tax_benefits import (
create_ny_a04948_youth_worker_tax_benefits_reform,
)
from .ny_a04948_youth_standard_deduction import (
create_ny_a04948_youth_standard_deduction_reform,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
from policyengine_us.model_api import *
from policyengine_core.periods import period as period_


def create_ny_a04948_youth_standard_deduction() -> Reform:
"""
NY Assembly Bill A04948 - Youth Standard Deduction

Enhanced standard deduction of $10,000 for single filers ages 18-24.
Effective for taxable years beginning after 2026 (i.e., 2027+).

Reference: https://www.nysenate.gov/legislation/bills/2025/A4948
"""

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
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 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 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(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
dependent_elsewhere = tax_unit("head_is_dependent_elsewhere", period)
p = parameters(period).gov.states.ny.tax.income.deductions.standard
filing_status = tax_unit("filing_status", period)
standard = where(
dependent_elsewhere,
p.dependent_elsewhere,
p.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 reform(Reform):
def apply(self):
self.update_variable(ny_a04948_youth_standard_deduction_eligible)
self.update_variable(ny_a04948_youth_standard_deduction)
self.update_variable(ny_standard_deduction)

return reform


def create_ny_a04948_youth_standard_deduction_reform(
parameters, period, bypass: bool = False
):
if bypass:
return create_ny_a04948_youth_standard_deduction()

p = parameters.gov.contrib.states.ny.a04948.youth_standard_deduction
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_a04948_youth_standard_deduction()
return None


ny_a04948_youth_standard_deduction = create_ny_a04948_youth_standard_deduction_reform(
None, None, bypass=True
)
Loading
Loading