From 91eb36576e364074ccd891a8e3096b587ba643a0 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Fri, 12 Jun 2026 15:05:48 -0400 Subject: [PATCH 01/10] Add Rhode Island current-law CTC and surtax --- .../added/ri-current-law-ctc-surtax.md | 1 + .../ri/tax/income/credits/ctc/age_limit.yaml | 10 ++ .../ri/tax/income/credits/ctc/amount.yaml | 16 +++ .../credits/ctc/phase_out/increment.yaml | 53 ++++++++ .../income/credits/ctc/phase_out/rate.yaml | 10 ++ .../credits/ctc/phase_out/threshold.yaml | 53 ++++++++ .../ri/tax/income/credits/refundable.yaml | 8 ++ .../ri/tax/income/high_earner_tax/rate.yaml | 13 ++ .../tax/income/high_earner_tax/threshold.yaml | 15 +++ .../ri/tax/income/credits/ctc/ri_ctc.yaml | 127 ++++++++++++++++++ .../ri/tax/income/ri_high_earner_tax.yaml | 40 ++++++ .../ri/tax/income/credits/ctc/ri_ctc.py | 26 ++++ .../credits/ctc/ri_ctc_eligible_child.py | 15 +++ .../credits/ctc/ri_ctc_eligible_children.py | 12 ++ .../ri/tax/income/ri_high_earner_tax.py | 20 +++ ...ncome_tax_before_non_refundable_credits.py | 3 +- 16 files changed, 421 insertions(+), 1 deletion(-) create mode 100644 changelog.d/added/ri-current-law-ctc-surtax.md create mode 100644 policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/age_limit.yaml create mode 100644 policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/amount.yaml create mode 100644 policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/increment.yaml create mode 100644 policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/rate.yaml create mode 100644 policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/threshold.yaml create mode 100644 policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/rate.yaml create mode 100644 policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/threshold.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/credits/ctc/ri_ctc.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/ri_high_earner_tax.yaml create mode 100644 policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc.py create mode 100644 policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_child.py create mode 100644 policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_children.py create mode 100644 policyengine_us/variables/gov/states/ri/tax/income/ri_high_earner_tax.py diff --git a/changelog.d/added/ri-current-law-ctc-surtax.md b/changelog.d/added/ri-current-law-ctc-surtax.md new file mode 100644 index 00000000000..9006aaa03b9 --- /dev/null +++ b/changelog.d/added/ri-current-law-ctc-surtax.md @@ -0,0 +1 @@ +Add Rhode Island's 2027 Child Tax Credit and high-income surtax. diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/age_limit.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/age_limit.yaml new file mode 100644 index 00000000000..6a950be36a2 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/age_limit.yaml @@ -0,0 +1,10 @@ +description: Rhode Island limits its Child Tax Credit to children this age or younger. +values: + 2027-01-01: 18 +metadata: + unit: year + period: year + label: Rhode Island Child Tax Credit age limit + reference: + - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104(a)(1) + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131 diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/amount.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/amount.yaml new file mode 100644 index 00000000000..81531f3b124 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/amount.yaml @@ -0,0 +1,16 @@ +description: Rhode Island provides this Child Tax Credit amount per eligible child. +values: + 2026-01-01: 0 + 2027-01-01: 330 +metadata: + unit: currency-USD + period: year + label: Rhode Island Child Tax Credit amount + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 5 + reference: + - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104(b) + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131 diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/increment.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/increment.yaml new file mode 100644 index 00000000000..74ed8471bad --- /dev/null +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/increment.yaml @@ -0,0 +1,53 @@ +description: Rhode Island reduces its Child Tax Credit for each of these increments of adjusted gross income exceeding the threshold. +metadata: + unit: currency-USD + period: year + label: Rhode Island Child Tax Credit phase-out increment + breakdown: + - filing_status + breakdown_label: + - Filing status + reference: + - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104(c) + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131 + +SINGLE: + values: + 2027-01-01: 2_875 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 5 +JOINT: + values: + 2027-01-01: 3_590 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 5 +SEPARATE: + values: + 2027-01-01: 2_875 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 5 +HEAD_OF_HOUSEHOLD: + values: + 2027-01-01: 2_875 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 5 +SURVIVING_SPOUSE: + values: + 2027-01-01: 2_875 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 5 diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/rate.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/rate.yaml new file mode 100644 index 00000000000..2170fa54f54 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/rate.yaml @@ -0,0 +1,10 @@ +description: Rhode Island reduces its Child Tax Credit by this percentage for each phase-out increment. +values: + 2027-01-01: 0.2 +metadata: + unit: /1 + period: year + label: Rhode Island Child Tax Credit phase-out rate + reference: + - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104(c) + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131 diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/threshold.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/threshold.yaml new file mode 100644 index 00000000000..0af4cdd34a6 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/threshold.yaml @@ -0,0 +1,53 @@ +description: Rhode Island starts reducing its Child Tax Credit at this adjusted gross income threshold. +metadata: + unit: currency-USD + period: year + label: Rhode Island Child Tax Credit phase-out threshold + breakdown: + - filing_status + breakdown_label: + - Filing status + reference: + - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104(c) + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131 + +SINGLE: + values: + 2027-01-01: 88_500 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 5 +JOINT: + values: + 2027-01-01: 110_640 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 5 +SEPARATE: + values: + 2027-01-01: 88_500 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 5 +HEAD_OF_HOUSEHOLD: + values: + 2027-01-01: 88_500 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 5 +SURVIVING_SPOUSE: + values: + 2027-01-01: 88_500 + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 5 diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml index 70870700115..17add13e60a 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml @@ -7,6 +7,10 @@ values: 2022-01-01: - ri_eitc - ri_property_tax_credit + 2027-01-01: + - ri_eitc + - ri_property_tax_credit + - ri_ctc metadata: unit: list @@ -20,3 +24,7 @@ metadata: # Child tax rebate source - title: R.I. Gen. Law §44-30-103. Child Tax Rebates. href: https://tax.ri.gov/sites/g/files/xkgbur541/files/2022-08/H7123Aaa_CTR_0.pdf#page=1 + - title: Rhode Island General Assembly press release on fully refundable Child Tax Credit + href: https://www.rilegislature.gov/pressrelease/_layouts/15/ril.pressrelease.inputform/DisplayForm.aspx?List=c8baae31-3c10-431c-8dcd-9dbbe21ce3e9&ID=376675 + - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131 diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/rate.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/rate.yaml new file mode 100644 index 00000000000..391ebda3687 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/rate.yaml @@ -0,0 +1,13 @@ +description: Rhode Island imposes this high-income surtax rate. +values: + 2026-01-01: 0 + 2027-01-01: 0.01 + 2028-01-01: 0.02 + 2029-01-01: 0.03 +metadata: + unit: /1 + period: year + label: Rhode Island high-income surtax rate + reference: + - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 5, § 44-30-2.6(c)(3)(A)(I)(2) + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=143 diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/threshold.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/threshold.yaml new file mode 100644 index 00000000000..8b1acf5f9a7 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/threshold.yaml @@ -0,0 +1,15 @@ +description: Rhode Island applies its high-income surtax to taxable income above this threshold. +values: + 2027-01-01: 1_000_000 +metadata: + unit: currency-USD + period: year + label: Rhode Island high-income surtax threshold + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 + reference: + - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 5, § 44-30-2.6(c)(3)(A)(I)(2) + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=143 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/credits/ctc/ri_ctc.yaml b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/credits/ctc/ri_ctc.yaml new file mode 100644 index 00000000000..eebd7820b5d --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/credits/ctc/ri_ctc.yaml @@ -0,0 +1,127 @@ +- name: Rhode Island Child Tax Credit is unavailable before 2027 + period: 2026 + input: + people: + parent: + age: 35 + is_tax_unit_dependent: false + child: + age: 8 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + ri_agi: 0 + households: + household: + members: [parent, child] + state_code: RI + output: + ri_ctc: 0 + +- name: Rhode Island Child Tax Credit provides $330 per eligible child in 2027 + period: 2027 + input: + people: + parent: + age: 35 + is_tax_unit_dependent: false + child1: + age: 8 + is_tax_unit_dependent: true + child2: + age: 18 + is_tax_unit_dependent: true + child3: + age: 19 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2, child3] + filing_status: SINGLE + ri_agi: 0 + households: + household: + members: [parent, child1, child2, child3] + state_code: RI + output: + ri_ctc_eligible_children: 2 + ri_ctc: 660 + +- name: Rhode Island Child Tax Credit phases out by 20 percent per single-filer step + period: 2027 + input: + people: + parent: + age: 35 + is_tax_unit_dependent: false + child1: + age: 8 + is_tax_unit_dependent: true + child2: + age: 12 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2] + filing_status: SINGLE + ri_agi: 91_376 + households: + household: + members: [parent, child1, child2] + state_code: RI + output: + ri_ctc: 396 + +- name: Rhode Island Child Tax Credit uses the joint-filer phase-out increment + period: 2027 + input: + people: + parent1: + age: 35 + is_tax_unit_head: true + parent2: + age: 35 + is_tax_unit_spouse: true + child1: + age: 8 + is_tax_unit_dependent: true + child2: + age: 12 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent1, parent2, child1, child2] + filing_status: JOINT + ri_agi: 113_516 + households: + household: + members: [parent1, parent2, child1, child2] + state_code: RI + output: + ri_ctc: 528 + +- name: Rhode Island Child Tax Credit is fully refundable + period: 2027 + input: + people: + parent: + age: 35 + is_tax_unit_dependent: false + child: + age: 8 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + ri_agi: 0 + ri_income_tax_before_refundable_credits: 0 + households: + household: + members: [parent, child] + state_code: RI + output: + ri_ctc: 330 + ri_income_tax: -330 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/ri_high_earner_tax.yaml b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/ri_high_earner_tax.yaml new file mode 100644 index 00000000000..dd3173f2aa7 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/ri_high_earner_tax.yaml @@ -0,0 +1,40 @@ +- name: Rhode Island high-income surtax is unavailable before 2027 + period: 2026 + input: + state_code: RI + ri_taxable_income: 1_250_000 + output: + ri_high_earner_tax: 0 + +- name: Rhode Island high-income surtax applies at 1 percent in 2027 + period: 2027 + input: + state_code: RI + ri_taxable_income: 1_250_000 + output: + ri_high_earner_tax: 2_500 + +- name: Rhode Island high-income surtax applies at 2 percent in 2028 + period: 2028 + input: + state_code: RI + ri_taxable_income: 1_250_000 + output: + ri_high_earner_tax: 4_585 + +- name: Rhode Island high-income surtax applies at 3 percent in 2029 + period: 2029 + input: + state_code: RI + ri_taxable_income: 1_250_000 + output: + ri_high_earner_tax: 6_216 + +- name: Rhode Island high-income surtax is added before non-refundable credits + period: 2027 + absolute_error_margin: 0.01 + input: + state_code: RI + ri_taxable_income: 1_250_000 + output: + ri_income_tax_before_non_refundable_credits: 74_323.54 diff --git a/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc.py b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc.py new file mode 100644 index 00000000000..c80bf0b9668 --- /dev/null +++ b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc.py @@ -0,0 +1,26 @@ +from policyengine_us.model_api import * + + +class ri_ctc(Variable): + value_type = float + entity = TaxUnit + label = "Rhode Island Child Tax Credit" + unit = USD + definition_period = YEAR + defined_for = StateCode.RI + reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131" + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.ri.tax.income.credits.ctc + filing_status = tax_unit("filing_status", period) + ri_agi = tax_unit("ri_agi", period) + children = tax_unit("ri_ctc_eligible_children", period) + maximum = children * p.amount + + threshold = p.phase_out.threshold[filing_status] + increment = p.phase_out.increment[filing_status] + excess = max_(ri_agi - threshold, 0) + increments = np.ceil(excess / increment) + phase_out_rate = min_(increments * p.phase_out.rate, 1) + + return maximum * (1 - phase_out_rate) diff --git a/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_child.py b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_child.py new file mode 100644 index 00000000000..c1f1c65c4f7 --- /dev/null +++ b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_child.py @@ -0,0 +1,15 @@ +from policyengine_us.model_api import * + + +class ri_ctc_eligible_child(Variable): + value_type = bool + entity = Person + label = "Rhode Island Child Tax Credit eligible child" + definition_period = YEAR + defined_for = "is_tax_unit_dependent" + reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131" + + def formula(person, period, parameters): + p = parameters(period).gov.states.ri.tax.income.credits.ctc + age = person("age", period) + return age <= p.age_limit diff --git a/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_children.py b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_children.py new file mode 100644 index 00000000000..1826e210185 --- /dev/null +++ b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_children.py @@ -0,0 +1,12 @@ +from policyengine_us.model_api import * + + +class ri_ctc_eligible_children(Variable): + value_type = int + entity = TaxUnit + label = "Rhode Island Child Tax Credit eligible children" + definition_period = YEAR + defined_for = StateCode.RI + reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131" + + adds = ["ri_ctc_eligible_child"] diff --git a/policyengine_us/variables/gov/states/ri/tax/income/ri_high_earner_tax.py b/policyengine_us/variables/gov/states/ri/tax/income/ri_high_earner_tax.py new file mode 100644 index 00000000000..4b71a0b7e21 --- /dev/null +++ b/policyengine_us/variables/gov/states/ri/tax/income/ri_high_earner_tax.py @@ -0,0 +1,20 @@ +from policyengine_us.model_api import * + + +class ri_high_earner_tax(Variable): + value_type = float + entity = TaxUnit + label = "Rhode Island high-income surtax" + defined_for = StateCode.RI + unit = USD + definition_period = YEAR + reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=143" + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.ri.tax.income.high_earner_tax + taxable_income = tax_unit("ri_taxable_income", period) + taxable_income_above_threshold = max_( + taxable_income - p.threshold, + 0, + ) + return taxable_income_above_threshold * p.rate diff --git a/policyengine_us/variables/gov/states/ri/tax/income/ri_income_tax_before_non_refundable_credits.py b/policyengine_us/variables/gov/states/ri/tax/income/ri_income_tax_before_non_refundable_credits.py index b83f42f6400..983309aee48 100644 --- a/policyengine_us/variables/gov/states/ri/tax/income/ri_income_tax_before_non_refundable_credits.py +++ b/policyengine_us/variables/gov/states/ri/tax/income/ri_income_tax_before_non_refundable_credits.py @@ -12,4 +12,5 @@ class ri_income_tax_before_non_refundable_credits(Variable): def formula(tax_unit, period, parameters): income = tax_unit("ri_taxable_income", period) rate = parameters(period).gov.states.ri.tax.income.rate - return rate.calc(income) + high_earner_tax = tax_unit("ri_high_earner_tax", period) + return rate.calc(income) + high_earner_tax From bf29dc5d5e12a21a83eb4f73e7ee30b68e357293 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Fri, 12 Jun 2026 15:48:39 -0400 Subject: [PATCH 02/10] Fix changelog fragment path --- ...rrent-law-ctc-surtax.md => ri-current-law-ctc-surtax.added.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename changelog.d/{added/ri-current-law-ctc-surtax.md => ri-current-law-ctc-surtax.added.md} (100%) diff --git a/changelog.d/added/ri-current-law-ctc-surtax.md b/changelog.d/ri-current-law-ctc-surtax.added.md similarity index 100% rename from changelog.d/added/ri-current-law-ctc-surtax.md rename to changelog.d/ri-current-law-ctc-surtax.added.md From 59185376a438daf0657cd70e330f7ba40fe0254f Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Mon, 15 Jun 2026 09:10:58 -0400 Subject: [PATCH 03/10] Fix Rhode Island tax credit references --- .../gov/states/ri/tax/income/credits/ctc/age_limit.yaml | 2 +- .../gov/states/ri/tax/income/credits/ctc/amount.yaml | 2 +- .../states/ri/tax/income/credits/ctc/phase_out/increment.yaml | 2 +- .../gov/states/ri/tax/income/credits/ctc/phase_out/rate.yaml | 2 +- .../states/ri/tax/income/credits/ctc/phase_out/threshold.yaml | 2 +- .../gov/states/ri/tax/income/credits/refundable.yaml | 4 ++-- .../gov/states/ri/tax/income/high_earner_tax/rate.yaml | 2 +- .../gov/states/ri/tax/income/high_earner_tax/threshold.yaml | 2 +- .../variables/gov/states/ri/tax/income/credits/ctc/ri_ctc.py | 2 +- .../states/ri/tax/income/credits/ctc/ri_ctc_eligible_child.py | 2 +- .../ri/tax/income/credits/ctc/ri_ctc_eligible_children.py | 2 +- .../variables/gov/states/ri/tax/income/ri_high_earner_tax.py | 2 +- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/age_limit.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/age_limit.yaml index 6a950be36a2..8c9e49708c5 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/age_limit.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/age_limit.yaml @@ -7,4 +7,4 @@ metadata: label: Rhode Island Child Tax Credit age limit reference: - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104(a)(1) - href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6 diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/amount.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/amount.yaml index 81531f3b124..847e5807457 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/amount.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/amount.yaml @@ -13,4 +13,4 @@ metadata: interval: 5 reference: - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104(b) - href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6 diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/increment.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/increment.yaml index 74ed8471bad..4a0de94e3c0 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/increment.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/increment.yaml @@ -9,7 +9,7 @@ metadata: - Filing status reference: - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104(c) - href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6 SINGLE: values: diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/rate.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/rate.yaml index 2170fa54f54..722588043a3 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/rate.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/rate.yaml @@ -7,4 +7,4 @@ metadata: label: Rhode Island Child Tax Credit phase-out rate reference: - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104(c) - href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6 diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/threshold.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/threshold.yaml index 0af4cdd34a6..e5a2600ca66 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/threshold.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/threshold.yaml @@ -9,7 +9,7 @@ metadata: - Filing status reference: - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104(c) - href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6 SINGLE: values: diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml index 17add13e60a..e6adffaca09 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml @@ -24,7 +24,7 @@ metadata: # Child tax rebate source - title: R.I. Gen. Law §44-30-103. Child Tax Rebates. href: https://tax.ri.gov/sites/g/files/xkgbur541/files/2022-08/H7123Aaa_CTR_0.pdf#page=1 - - title: Rhode Island General Assembly press release on fully refundable Child Tax Credit + - title: Sen. Vargas lauds child tax credit in state budget bill href: https://www.rilegislature.gov/pressrelease/_layouts/15/ril.pressrelease.inputform/DisplayForm.aspx?List=c8baae31-3c10-431c-8dcd-9dbbe21ce3e9&ID=376675 - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104 - href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6 diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/rate.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/rate.yaml index 391ebda3687..c940b26bd1c 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/rate.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/rate.yaml @@ -10,4 +10,4 @@ metadata: label: Rhode Island high-income surtax rate reference: - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 5, § 44-30-2.6(c)(3)(A)(I)(2) - href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=143 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6 diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/threshold.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/threshold.yaml index 8b1acf5f9a7..cb883965cd0 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/threshold.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/threshold.yaml @@ -12,4 +12,4 @@ metadata: interval: 50 reference: - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 5, § 44-30-2.6(c)(3)(A)(I)(2) - href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=143 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6 diff --git a/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc.py b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc.py index c80bf0b9668..d49c18aca77 100644 --- a/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc.py +++ b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc.py @@ -8,7 +8,7 @@ class ri_ctc(Variable): unit = USD definition_period = YEAR defined_for = StateCode.RI - reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131" + reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6" def formula(tax_unit, period, parameters): p = parameters(period).gov.states.ri.tax.income.credits.ctc diff --git a/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_child.py b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_child.py index c1f1c65c4f7..9979be61e5b 100644 --- a/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_child.py +++ b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_child.py @@ -7,7 +7,7 @@ class ri_ctc_eligible_child(Variable): label = "Rhode Island Child Tax Credit eligible child" definition_period = YEAR defined_for = "is_tax_unit_dependent" - reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131" + reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6" def formula(person, period, parameters): p = parameters(period).gov.states.ri.tax.income.credits.ctc diff --git a/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_children.py b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_children.py index 1826e210185..ec3cbfdf202 100644 --- a/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_children.py +++ b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_children.py @@ -7,6 +7,6 @@ class ri_ctc_eligible_children(Variable): label = "Rhode Island Child Tax Credit eligible children" definition_period = YEAR defined_for = StateCode.RI - reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=131" + reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6" adds = ["ri_ctc_eligible_child"] diff --git a/policyengine_us/variables/gov/states/ri/tax/income/ri_high_earner_tax.py b/policyengine_us/variables/gov/states/ri/tax/income/ri_high_earner_tax.py index 4b71a0b7e21..d6e02056415 100644 --- a/policyengine_us/variables/gov/states/ri/tax/income/ri_high_earner_tax.py +++ b/policyengine_us/variables/gov/states/ri/tax/income/ri_high_earner_tax.py @@ -8,7 +8,7 @@ class ri_high_earner_tax(Variable): defined_for = StateCode.RI unit = USD definition_period = YEAR - reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.pdf#page=143" + reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6" def formula(tax_unit, period, parameters): p = parameters(period).gov.states.ri.tax.income.high_earner_tax From a721a506e5ef62fe1ab87773357521a98eb396cd Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Mon, 15 Jun 2026 12:50:45 -0400 Subject: [PATCH 04/10] Document Rhode Island CTC refundability source --- .../parameters/gov/states/ri/tax/income/credits/refundable.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml index e6adffaca09..d5d9b6c1a68 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml @@ -24,6 +24,8 @@ metadata: # Child tax rebate source - title: R.I. Gen. Law §44-30-103. Child Tax Rebates. href: https://tax.ri.gov/sites/g/files/xkgbur541/files/2022-08/H7123Aaa_CTR_0.pdf#page=1 + # The budget bill establishes the CTC amount, eligibility, and phase-out; + # this legislative press release describes the enacted budget CTC as fully refundable. - title: Sen. Vargas lauds child tax credit in state budget bill href: https://www.rilegislature.gov/pressrelease/_layouts/15/ril.pressrelease.inputform/DisplayForm.aspx?List=c8baae31-3c10-431c-8dcd-9dbbe21ce3e9&ID=376675 - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104 From 76fccf59d10178abd7bffaa65506152db4f56227 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Mon, 15 Jun 2026 13:03:11 -0400 Subject: [PATCH 05/10] Address Rhode Island review suggestions --- .../ri/tax/income/credits/ctc/age_limit.yaml | 4 +- .../ri/tax/income/credits/ctc/amount.yaml | 4 +- .../credits/ctc/phase_out/increment.yaml | 4 +- .../income/credits/ctc/phase_out/rate.yaml | 4 +- .../credits/ctc/phase_out/threshold.yaml | 4 +- .../ri/tax/income/credits/refundable.yaml | 2 +- .../ri/tax/income/high_earner_tax/rate.yaml | 4 +- .../tax/income/high_earner_tax/threshold.yaml | 4 +- .../ri/tax/income/credits/ctc/ri_ctc.yaml | 77 +++++++++++++++++++ .../gov/states/ri/tax/income/integration.yaml | 26 +++++++ .../ri/tax/income/ri_high_earner_tax.yaml | 22 ++++++ .../ri/tax/income/credits/ctc/ri_ctc.py | 2 +- .../credits/ctc/ri_ctc_eligible_child.py | 2 +- .../credits/ctc/ri_ctc_eligible_children.py | 2 +- .../ri/tax/income/ri_high_earner_tax.py | 2 +- 15 files changed, 144 insertions(+), 19 deletions(-) diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/age_limit.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/age_limit.yaml index 8c9e49708c5..623198e4a7f 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/age_limit.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/age_limit.yaml @@ -1,4 +1,4 @@ -description: Rhode Island limits its Child Tax Credit to children this age or younger. +description: Rhode Island limits child age to this threshold under the Child Tax Credit program. values: 2027-01-01: 18 metadata: @@ -7,4 +7,4 @@ metadata: label: Rhode Island Child Tax Credit age limit reference: - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104(a)(1) - href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=%E2%80%9CChild%E2%80%9D%20means%20an%20individual%20who%20is%20eighteen%20years%20of%20age%20or%20under diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/amount.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/amount.yaml index 847e5807457..87854886181 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/amount.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/amount.yaml @@ -1,4 +1,4 @@ -description: Rhode Island provides this Child Tax Credit amount per eligible child. +description: Rhode Island provides this amount per eligible child under the Child Tax Credit program. values: 2026-01-01: 0 2027-01-01: 330 @@ -13,4 +13,4 @@ metadata: interval: 5 reference: - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104(b) - href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=the%20amount%20of%20three%20hundred%20thirty%20dollars%20(%24330) diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/increment.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/increment.yaml index 4a0de94e3c0..02dcf6475a5 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/increment.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/increment.yaml @@ -1,4 +1,4 @@ -description: Rhode Island reduces its Child Tax Credit for each of these increments of adjusted gross income exceeding the threshold. +description: Rhode Island sets this adjusted gross income increment under the Child Tax Credit program. metadata: unit: currency-USD period: year @@ -9,7 +9,7 @@ metadata: - Filing status reference: - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104(c) - href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=two%20thousand%20eight%20hundred%20seventy-five%20(%242%2C875) SINGLE: values: diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/rate.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/rate.yaml index 722588043a3..e13b692756e 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/rate.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/rate.yaml @@ -1,4 +1,4 @@ -description: Rhode Island reduces its Child Tax Credit by this percentage for each phase-out increment. +description: Rhode Island sets this reduction percentage under the Child Tax Credit program. values: 2027-01-01: 0.2 metadata: @@ -7,4 +7,4 @@ metadata: label: Rhode Island Child Tax Credit phase-out rate reference: - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104(c) - href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=applicable%20percentage%E2%80%9D%20for%20purposes%20of%20this%20subsection%20means%20twenty%20(20) diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/threshold.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/threshold.yaml index e5a2600ca66..ed99ab89a64 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/threshold.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/ctc/phase_out/threshold.yaml @@ -1,4 +1,4 @@ -description: Rhode Island starts reducing its Child Tax Credit at this adjusted gross income threshold. +description: Rhode Island sets this adjusted gross income threshold under the Child Tax Credit program. metadata: unit: currency-USD period: year @@ -9,7 +9,7 @@ metadata: - Filing status reference: - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104(c) - href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=exceeds%20eighty-eight%20thousand%20five%20hundred%20dollars SINGLE: values: diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml index d5d9b6c1a68..c4bd92c972c 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml @@ -29,4 +29,4 @@ metadata: - title: Sen. Vargas lauds child tax credit in state budget bill href: https://www.rilegislature.gov/pressrelease/_layouts/15/ril.pressrelease.inputform/DisplayForm.aspx?List=c8baae31-3c10-431c-8dcd-9dbbe21ce3e9&ID=376675 - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104 - href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=44-30-104.%20Child%20Tax%20Credit diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/rate.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/rate.yaml index c940b26bd1c..82bba151b85 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/rate.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/rate.yaml @@ -1,4 +1,4 @@ -description: Rhode Island imposes this high-income surtax rate. +description: Rhode Island sets this high-income surtax percentage under the personal income tax. values: 2026-01-01: 0 2027-01-01: 0.01 @@ -10,4 +10,4 @@ metadata: label: Rhode Island high-income surtax rate reference: - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 5, § 44-30-2.6(c)(3)(A)(I)(2) - href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=High-income%20surtax diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/threshold.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/threshold.yaml index cb883965cd0..62f52dfca44 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/threshold.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/threshold.yaml @@ -1,4 +1,4 @@ -description: Rhode Island applies its high-income surtax to taxable income above this threshold. +description: Rhode Island sets this taxable income threshold under the high-income surtax. values: 2027-01-01: 1_000_000 metadata: @@ -12,4 +12,4 @@ metadata: interval: 50 reference: - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 5, § 44-30-2.6(c)(3)(A)(I)(2) - href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6 + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=Rhode%20Island%20taxable%20income%20over%20one%20million%20dollars diff --git a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/credits/ctc/ri_ctc.yaml b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/credits/ctc/ri_ctc.yaml index eebd7820b5d..8f5fdbc2bf5 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/credits/ctc/ri_ctc.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/credits/ctc/ri_ctc.yaml @@ -1,5 +1,6 @@ - name: Rhode Island Child Tax Credit is unavailable before 2027 period: 2026 + absolute_error_margin: 0.01 input: people: parent: @@ -22,6 +23,7 @@ - name: Rhode Island Child Tax Credit provides $330 per eligible child in 2027 period: 2027 + absolute_error_margin: 0.01 input: people: parent: @@ -51,6 +53,7 @@ - name: Rhode Island Child Tax Credit phases out by 20 percent per single-filer step period: 2027 + absolute_error_margin: 0.01 input: people: parent: @@ -76,6 +79,7 @@ - name: Rhode Island Child Tax Credit uses the joint-filer phase-out increment period: 2027 + absolute_error_margin: 0.01 input: people: parent1: @@ -104,6 +108,7 @@ - name: Rhode Island Child Tax Credit is fully refundable period: 2027 + absolute_error_margin: 0.01 input: people: parent: @@ -125,3 +130,75 @@ output: ri_ctc: 330 ri_income_tax: -330 + +- name: Rhode Island Child Tax Credit is unreduced at the single-filer threshold + period: 2027 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 35 + is_tax_unit_dependent: false + child: + age: 8 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + ri_agi: 88_500 + households: + household: + members: [parent, child] + state_code: RI + output: + ri_ctc: 330 + +- name: Rhode Island Child Tax Credit reduces at the start of a new single-filer increment + period: 2027 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 35 + is_tax_unit_dependent: false + child: + age: 8 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + ri_agi: 91_376 + households: + household: + members: [parent, child] + state_code: RI + output: + ri_ctc: 198 + +- name: Rhode Island Child Tax Credit fully phases out + period: 2027 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 35 + is_tax_unit_dependent: false + child1: + age: 8 + is_tax_unit_dependent: true + child2: + age: 12 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2] + filing_status: SINGLE + ri_agi: 100_001 + households: + household: + members: [parent, child1, child2] + state_code: RI + output: + ri_ctc: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/integration.yaml index fa21fc07bee..e0845eebb28 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/integration.yaml @@ -195,3 +195,29 @@ tax_unit_itemizes: true ri_cdcc: 0 ri_income_tax: -398 + +- name: 2027 RI CTC and high-income surtax apply in the same tax unit + absolute_error_margin: 0.01 + period: 2027 + input: + people: + person1: + age: 40 + is_tax_unit_head: true + child: + age: 8 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, child] + filing_status: SINGLE + ri_agi: 0 + ri_taxable_income: 1_250_000 + households: + household: + members: [person1, child] + state_code: RI + output: + ri_ctc: 330 + ri_high_earner_tax: 2_500 + ri_income_tax: 73_993.54 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/ri_high_earner_tax.yaml b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/ri_high_earner_tax.yaml index dd3173f2aa7..9cedad46f40 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/ri_high_earner_tax.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/ri_high_earner_tax.yaml @@ -1,5 +1,6 @@ - name: Rhode Island high-income surtax is unavailable before 2027 period: 2026 + absolute_error_margin: 0.01 input: state_code: RI ri_taxable_income: 1_250_000 @@ -8,6 +9,7 @@ - name: Rhode Island high-income surtax applies at 1 percent in 2027 period: 2027 + absolute_error_margin: 0.01 input: state_code: RI ri_taxable_income: 1_250_000 @@ -16,6 +18,7 @@ - name: Rhode Island high-income surtax applies at 2 percent in 2028 period: 2028 + absolute_error_margin: 0.01 input: state_code: RI ri_taxable_income: 1_250_000 @@ -24,6 +27,7 @@ - name: Rhode Island high-income surtax applies at 3 percent in 2029 period: 2029 + absolute_error_margin: 0.01 input: state_code: RI ri_taxable_income: 1_250_000 @@ -38,3 +42,21 @@ ri_taxable_income: 1_250_000 output: ri_income_tax_before_non_refundable_credits: 74_323.54 + +- name: Rhode Island high-income surtax does not apply at the threshold + period: 2027 + absolute_error_margin: 0.01 + input: + state_code: RI + ri_taxable_income: 1_000_000 + output: + ri_high_earner_tax: 0 + +- name: Rhode Island high-income surtax applies just above the threshold + period: 2027 + absolute_error_margin: 0.01 + input: + state_code: RI + ri_taxable_income: 1_000_001 + output: + ri_high_earner_tax: 0.01 diff --git a/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc.py b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc.py index d49c18aca77..4f8151ee7a6 100644 --- a/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc.py +++ b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc.py @@ -8,7 +8,7 @@ class ri_ctc(Variable): unit = USD definition_period = YEAR defined_for = StateCode.RI - reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6" + reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=44-30-104.%20Child%20Tax%20Credit" def formula(tax_unit, period, parameters): p = parameters(period).gov.states.ri.tax.income.credits.ctc diff --git a/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_child.py b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_child.py index 9979be61e5b..24dd46420ef 100644 --- a/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_child.py +++ b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_child.py @@ -7,7 +7,7 @@ class ri_ctc_eligible_child(Variable): label = "Rhode Island Child Tax Credit eligible child" definition_period = YEAR defined_for = "is_tax_unit_dependent" - reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6" + reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=%E2%80%9CChild%E2%80%9D%20means%20an%20individual%20who%20is%20eighteen%20years%20of%20age%20or%20under" def formula(person, period, parameters): p = parameters(period).gov.states.ri.tax.income.credits.ctc diff --git a/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_children.py b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_children.py index ec3cbfdf202..6c350d39e47 100644 --- a/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_children.py +++ b/policyengine_us/variables/gov/states/ri/tax/income/credits/ctc/ri_ctc_eligible_children.py @@ -7,6 +7,6 @@ class ri_ctc_eligible_children(Variable): label = "Rhode Island Child Tax Credit eligible children" definition_period = YEAR defined_for = StateCode.RI - reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6" + reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=%E2%80%9CChild%E2%80%9D%20means%20an%20individual%20who%20is%20eighteen%20years%20of%20age%20or%20under" adds = ["ri_ctc_eligible_child"] diff --git a/policyengine_us/variables/gov/states/ri/tax/income/ri_high_earner_tax.py b/policyengine_us/variables/gov/states/ri/tax/income/ri_high_earner_tax.py index d6e02056415..6f92edb9255 100644 --- a/policyengine_us/variables/gov/states/ri/tax/income/ri_high_earner_tax.py +++ b/policyengine_us/variables/gov/states/ri/tax/income/ri_high_earner_tax.py @@ -8,7 +8,7 @@ class ri_high_earner_tax(Variable): defined_for = StateCode.RI unit = USD definition_period = YEAR - reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#bookmark6" + reference = "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=High-income%20surtax" def formula(tax_unit, period, parameters): p = parameters(period).gov.states.ri.tax.income.high_earner_tax From 10fd7f2f2742e9f0427d80968b795229a1052578 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Mon, 15 Jun 2026 13:21:12 -0400 Subject: [PATCH 06/10] Add Rhode Island Social Security age-gate removal --- .../ri_social_security_modification.yaml | 22 +++++++++++++++++++ ...social_security_modification_eligible.yaml | 20 +++++++++++++++++ ...etirement_income_subtraction_eligible.yaml | 10 +++++++++ .../ri_social_security_modification.py | 12 +++++++--- ...i_social_security_modification_eligible.py | 9 +++++--- 5 files changed, 67 insertions(+), 6 deletions(-) diff --git a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification.yaml b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification.yaml index b7e90e8dbab..41d94462b36 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification.yaml @@ -109,3 +109,25 @@ ri_social_security_modification_eligible: true output: ri_social_security_modification: 96_000 + +- name: Under full retirement age receives social security modification in 2027 + absolute_error_margin: 0.01 + period: 2027 + input: + people: + person1: + is_tax_unit_head: true + social_security: 20_000 + taxable_social_security: 10_000 + birth_year: 1990 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + adjusted_gross_income: 70_000 + households: + household: + members: [person1] + state_code: RI + output: + ri_social_security_modification: 10_000 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.yaml index f915ff5ca7f..15905af13e0 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.yaml @@ -86,3 +86,23 @@ state_code: RI output: ri_social_security_modification_eligible: false + +- name: 2027 - Age not required for social security modification + period: 2027 + input: + adjusted_gross_income: 70_000 + filing_status: SINGLE + older_spouse_birth_year: 1990 + state_code: RI + output: + ri_social_security_modification_eligible: true + +- name: 2027 - Income limit still applies after age requirement removal + period: 2027 + input: + adjusted_gross_income: 200_000 + filing_status: SINGLE + older_spouse_birth_year: 1990 + state_code: RI + output: + ri_social_security_modification_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/ri_retirement_income_subtraction_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/ri_retirement_income_subtraction_eligible.yaml index eb9a2cdb87e..d5dcb1e06d8 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/ri_retirement_income_subtraction_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/ri_retirement_income_subtraction_eligible.yaml @@ -114,3 +114,13 @@ older_spouse_birth_year: 1960 output: ri_retirement_income_subtraction_eligible: false + +- name: 2027 - Age still required for taxable retirement income modification + period: 2027 + input: + state_code: RI + adjusted_gross_income: 80_000 + filing_status: SINGLE + older_spouse_birth_year: 1990 + output: + ri_retirement_income_subtraction_eligible: false diff --git a/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification.py b/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification.py index d720faa192d..cd3647a78b6 100644 --- a/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification.py +++ b/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification.py @@ -7,7 +7,10 @@ class ri_social_security_modification(Variable): label = "Rhode Island Social Security Modification" unit = USD definition_period = YEAR - reference = "https://tax.ri.gov/sites/g/files/xkgbur541/files/2022-12/Social%20Security%20Worksheet_w.pdf" + reference = [ + "https://tax.ri.gov/sites/g/files/xkgbur541/files/2022-12/Social%20Security%20Worksheet_w.pdf", + "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=For%20the%20tax%20years%20beginning%20on%20or%20after%20January%201%2C%202027", + ] defined_for = "ri_social_security_modification_eligible" def formula(tax_unit, period, parameters): @@ -19,8 +22,11 @@ def formula(tax_unit, period, parameters): period ).gov.states.ri.tax.income.agi.subtractions.social_security.limit - aged = birth_year <= p.birth_year - head_or_spouse_aged = head_or_spouse & aged + # The 2027 budget bill removes the age condition for Social Security. + social_security_subtraction_eligible = (birth_year <= p.birth_year) | ( + period.start.year >= 2027 + ) + head_or_spouse_aged = head_or_spouse & social_security_subtraction_eligible total_social_security = person("social_security", period) aged_head_or_spouse_ss = tax_unit.sum( diff --git a/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.py b/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.py index f23260e93e3..43bc22c5e09 100644 --- a/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.py +++ b/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.py @@ -6,7 +6,10 @@ class ri_social_security_modification_eligible(Variable): entity = TaxUnit label = "Eligible for the Rhode Island Social Security Modification" definition_period = YEAR - reference = "https://tax.ri.gov/sites/g/files/xkgbur541/files/2022-12/Social%20Security%20Worksheet_w.pdf" + reference = [ + "https://tax.ri.gov/sites/g/files/xkgbur541/files/2022-12/Social%20Security%20Worksheet_w.pdf", + "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=For%20the%20tax%20years%20beginning%20on%20or%20after%20January%201%2C%202027", + ] # MODIFICATION FOR TAXABLE SOCIAL SECURITY INCOME WORKSHEET STEP 1: Eligibility defined_for = StateCode.RI @@ -19,8 +22,8 @@ def formula(tax_unit, period, parameters): period ).gov.states.ri.tax.income.agi.subtractions.social_security.limit - # Age eligibility. - age_eligible = birth_year <= p.birth_year + # The 2027 budget bill removes the age condition for Social Security. + age_eligible = (birth_year <= p.birth_year) | (period.start.year >= 2027) # Income eligibility. income_limit = p.income[filing_status] From 5067caccedbab2d7eaa3cf49fdad691ac4906684 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Mon, 15 Jun 2026 13:30:09 -0400 Subject: [PATCH 07/10] Update Rhode Island changelog scope --- changelog.d/ri-current-law-ctc-surtax.added.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.d/ri-current-law-ctc-surtax.added.md b/changelog.d/ri-current-law-ctc-surtax.added.md index 9006aaa03b9..fed9ba7586a 100644 --- a/changelog.d/ri-current-law-ctc-surtax.added.md +++ b/changelog.d/ri-current-law-ctc-surtax.added.md @@ -1 +1 @@ -Add Rhode Island's 2027 Child Tax Credit and high-income surtax. +Add Rhode Island's 2027 Child Tax Credit, high-income surtax, and Social Security subtraction age-gate removal. From 298cf0a4d18224dbdb425417af647d4718d776dd Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Tue, 16 Jun 2026 14:50:41 -0400 Subject: [PATCH 08/10] Address RI Social Security review --- ....added.md => ri-2027-tax-updates.added.md} | 0 .../social_security/limit/birth_year.yaml | 4 ++ ...social_security_modification_eligible.yaml | 58 ++++++++++++++++--- .../gov/states/ri/tax/income/integration.yaml | 5 ++ .../ri_social_security_modification.py | 9 +-- ...i_social_security_modification_eligible.py | 7 +-- 6 files changed, 65 insertions(+), 18 deletions(-) rename changelog.d/{ri-current-law-ctc-surtax.added.md => ri-2027-tax-updates.added.md} (100%) diff --git a/changelog.d/ri-current-law-ctc-surtax.added.md b/changelog.d/ri-2027-tax-updates.added.md similarity index 100% rename from changelog.d/ri-current-law-ctc-surtax.added.md rename to changelog.d/ri-2027-tax-updates.added.md diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/agi/subtractions/social_security/limit/birth_year.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/agi/subtractions/social_security/limit/birth_year.yaml index 1f5ab50bf16..7aa06a8cd3c 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/agi/subtractions/social_security/limit/birth_year.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/agi/subtractions/social_security/limit/birth_year.yaml @@ -6,6 +6,8 @@ values: 2023-01-01: 1957 # 1957-07-01 2024-01-01: 1958 # 1958-05-01 2025-01-01: 1959 # 1959-03-01 + 2026-01-01: 1960 # 1960-01-01 + 2027-01-01: 9999 # Age condition removed under 2026 R.I. H 7127 Substitute A. metadata: unit: year @@ -27,3 +29,5 @@ metadata: # full or unreduced social security retirement benefits" - title: R.I. Gen. Laws § 44-30-12 (c), (8), (i), (A) href: http://webserver.rilin.state.ri.us/Statutes/title44/44-30/44-30-12.HTM + - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 5, § 44-30-12(c)(8) + href: https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=For%20the%20tax%20years%20beginning%20on%20or%20after%20January%201%2C%202027 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.yaml index 15905af13e0..f8b70dfa9bb 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.yaml @@ -1,5 +1,4 @@ - name: Age not eligible for social security modification - absolute_error_margin: 0.01 period: 2021 input: adjusted_gross_income: 70_000 @@ -10,7 +9,6 @@ ri_social_security_modification_eligible: false - name: Income not eligible for social security modification - absolute_error_margin: 0.01 period: 2021 input: adjusted_gross_income: 100_000 @@ -21,7 +19,6 @@ ri_social_security_modification_eligible: false - name: Eligible for the social security modification - absolute_error_margin: 0.01 period: 2021 input: adjusted_gross_income: 70_000 @@ -33,7 +30,6 @@ # 2025 tests - Birth year threshold: 1959, Income limits vary by filing status - name: 2025 - Age eligible (born 1959) for social security modification - absolute_error_margin: 2 period: 2025 input: adjusted_gross_income: 80_000 @@ -44,7 +40,6 @@ ri_social_security_modification_eligible: true - name: 2025 - Age not eligible (born 1960) for social security modification - absolute_error_margin: 2 period: 2025 input: adjusted_gross_income: 80_000 @@ -55,7 +50,6 @@ ri_social_security_modification_eligible: false - name: 2025 - Income not eligible for single filer (above $107,000) - absolute_error_margin: 2 period: 2025 input: adjusted_gross_income: 110_000 @@ -66,7 +60,6 @@ ri_social_security_modification_eligible: false - name: 2025 - Joint filer eligible (income below $133,750) - absolute_error_margin: 2 period: 2025 input: adjusted_gross_income: 125_000 @@ -77,7 +70,6 @@ ri_social_security_modification_eligible: true - name: 2025 - Joint filer not eligible (income above $133,750) - absolute_error_margin: 2 period: 2025 input: adjusted_gross_income: 135_000 @@ -106,3 +98,53 @@ state_code: RI output: ri_social_security_modification_eligible: false + +- name: 2026 - Under full retirement age remains ineligible + period: 2026 + input: + adjusted_gross_income: 70_000 + filing_status: SINGLE + older_spouse_birth_year: 1990 + state_code: RI + output: + ri_social_security_modification_eligible: false + +- name: 2027 - Single filer just below income limit is eligible + period: 2027 + input: + adjusted_gross_income: 106_999 + filing_status: SINGLE + older_spouse_birth_year: 1990 + state_code: RI + output: + ri_social_security_modification_eligible: true + +- name: 2027 - Single filer at income limit is ineligible + period: 2027 + input: + adjusted_gross_income: 107_000 + filing_status: SINGLE + older_spouse_birth_year: 1990 + state_code: RI + output: + ri_social_security_modification_eligible: false + +- name: 2027 - Joint filer just below income limit is eligible + period: 2027 + input: + adjusted_gross_income: 133_749 + filing_status: JOINT + older_spouse_birth_year: 1990 + state_code: RI + output: + ri_social_security_modification_eligible: true + +- name: 2027 - Joint filer at income limit is ineligible + period: 2027 + input: + adjusted_gross_income: 133_750 + filing_status: JOINT + older_spouse_birth_year: 1990 + state_code: RI + output: + ri_social_security_modification_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/integration.yaml index e0845eebb28..98d32b32ff8 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/integration.yaml @@ -204,6 +204,9 @@ person1: age: 40 is_tax_unit_head: true + birth_year: 1990 + social_security: 20_000 + taxable_social_security: 10_000 child: age: 8 is_tax_unit_dependent: true @@ -211,6 +214,7 @@ tax_unit: members: [person1, child] filing_status: SINGLE + adjusted_gross_income: 70_000 ri_agi: 0 ri_taxable_income: 1_250_000 households: @@ -220,4 +224,5 @@ output: ri_ctc: 330 ri_high_earner_tax: 2_500 + ri_social_security_modification: 10_000 ri_income_tax: 73_993.54 diff --git a/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification.py b/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification.py index cd3647a78b6..10bf367e5b2 100644 --- a/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification.py +++ b/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification.py @@ -7,10 +7,10 @@ class ri_social_security_modification(Variable): label = "Rhode Island Social Security Modification" unit = USD definition_period = YEAR - reference = [ + reference = ( "https://tax.ri.gov/sites/g/files/xkgbur541/files/2022-12/Social%20Security%20Worksheet_w.pdf", "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=For%20the%20tax%20years%20beginning%20on%20or%20after%20January%201%2C%202027", - ] + ) defined_for = "ri_social_security_modification_eligible" def formula(tax_unit, period, parameters): @@ -22,10 +22,7 @@ def formula(tax_unit, period, parameters): period ).gov.states.ri.tax.income.agi.subtractions.social_security.limit - # The 2027 budget bill removes the age condition for Social Security. - social_security_subtraction_eligible = (birth_year <= p.birth_year) | ( - period.start.year >= 2027 - ) + social_security_subtraction_eligible = birth_year <= p.birth_year head_or_spouse_aged = head_or_spouse & social_security_subtraction_eligible total_social_security = person("social_security", period) diff --git a/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.py b/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.py index 43bc22c5e09..ab6690c489f 100644 --- a/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.py +++ b/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.py @@ -6,10 +6,10 @@ class ri_social_security_modification_eligible(Variable): entity = TaxUnit label = "Eligible for the Rhode Island Social Security Modification" definition_period = YEAR - reference = [ + reference = ( "https://tax.ri.gov/sites/g/files/xkgbur541/files/2022-12/Social%20Security%20Worksheet_w.pdf", "https://webserver.rilegislature.gov/BillText/BillText26/HouseText26/H7127Aaa.html#:~:text=For%20the%20tax%20years%20beginning%20on%20or%20after%20January%201%2C%202027", - ] + ) # MODIFICATION FOR TAXABLE SOCIAL SECURITY INCOME WORKSHEET STEP 1: Eligibility defined_for = StateCode.RI @@ -22,8 +22,7 @@ def formula(tax_unit, period, parameters): period ).gov.states.ri.tax.income.agi.subtractions.social_security.limit - # The 2027 budget bill removes the age condition for Social Security. - age_eligible = (birth_year <= p.birth_year) | (period.start.year >= 2027) + age_eligible = birth_year <= p.birth_year # Income eligibility. income_limit = p.income[filing_status] From 04c7e54a531e1a239b7a6ded36bcfb1780022d27 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Tue, 16 Jun 2026 15:16:15 -0400 Subject: [PATCH 09/10] Keep RI retirement age gate separate --- .../taxable_retirement_income/birth_year.yaml | 27 +++++++++++++++++++ ...etirement_income_subtraction_eligible.yaml | 6 ----- ..._retirement_income_subtraction_eligible.py | 10 +------ 3 files changed, 28 insertions(+), 15 deletions(-) create mode 100644 policyengine_us/parameters/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/birth_year.yaml diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/birth_year.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/birth_year.yaml new file mode 100644 index 00000000000..4f25b984bf6 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/birth_year.yaml @@ -0,0 +1,27 @@ +description: Rhode Island allows taxable retirement income subtractions for taxpayers or spouses born on or before this year. + +values: + 2021-01-01: 1955 # 1955-11-01 + 2022-01-01: 1956 # 1956-09-01 + 2023-01-01: 1957 # 1957-07-01 + 2024-01-01: 1958 # 1958-05-01 + 2025-01-01: 1959 # 1959-03-01 + 2026-01-01: 1960 # 1960-01-01 + +metadata: + unit: year + period: year + label: Rhode Island taxable retirement income subtraction birth year threshold + reference: + - title: 2025 RI-1040 Instructions page I-10 + href: https://tax.ri.gov/sites/g/files/xkgbur541/files/2025-12/2025%201040R%20Instructions%20122025.pdf#page=10 + - title: Rhode Island 2024 RI-1040 Instructions + href: https://tax.ri.gov/sites/g/files/xkgbur541/files/2024-12/2024%201040R%20Instructions%20-%20updated%2012092024.pdf#page=9 + - title: Rhode Island 2023 RI-1040 Instructions + href: https://tax.ri.gov/sites/g/files/xkgbur541/files/2023-12/2023%201040R%20Instructions.pdf#page=9 + - title: Rhode Island 2022 RI-1040 Instructions + href: https://tax.ri.gov/sites/g/files/xkgbur541/files/2022-12/2022%20NR%20Instructions_v4_w.pdf#page=11 + - title: Rhode Island 2021 RI-1040 Instructions + href: https://tax.ri.gov/sites/g/files/xkgbur541/files/2021-12/2021-1040r-instructions.pdf#page=8 + - title: R.I. Gen. Laws § 44-30-12 (c), (9) + href: http://webserver.rilin.state.ri.us/Statutes/title44/44-30/44-30-12.HTM diff --git a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/ri_retirement_income_subtraction_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/ri_retirement_income_subtraction_eligible.yaml index d5dcb1e06d8..68211766d34 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/ri_retirement_income_subtraction_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/ri_retirement_income_subtraction_eligible.yaml @@ -50,7 +50,6 @@ # 2025 tests - Birth year threshold: 1959, Income limits: $107,000 (single/HOH/separate), $133,750 (joint/widow) - name: 2025 - Single filer eligible (income below $107,000) - absolute_error_margin: 0.01 period: 2025 input: state_code: RI @@ -61,7 +60,6 @@ ri_retirement_income_subtraction_eligible: true - name: 2025 - Single filer ineligible (income at $107,000) - absolute_error_margin: 0.01 period: 2025 input: state_code: RI @@ -72,7 +70,6 @@ ri_retirement_income_subtraction_eligible: false - name: 2025 - Joint filer eligible (income below $133,750) - absolute_error_margin: 0.01 period: 2025 input: state_code: RI @@ -83,7 +80,6 @@ ri_retirement_income_subtraction_eligible: true - name: 2025 - Joint filer ineligible (income at $133,750) - absolute_error_margin: 0.01 period: 2025 input: state_code: RI @@ -94,7 +90,6 @@ ri_retirement_income_subtraction_eligible: false - name: 2025 - Surviving spouse eligible (income below $133,750) - absolute_error_margin: 0.01 period: 2025 input: state_code: RI @@ -105,7 +100,6 @@ ri_retirement_income_subtraction_eligible: true - name: 2025 - Age ineligible (born 1960) - absolute_error_margin: 0.01 period: 2025 input: state_code: RI diff --git a/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/ri_retirement_income_subtraction_eligible.py b/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/ri_retirement_income_subtraction_eligible.py index c69feb64fcb..87560847bd1 100644 --- a/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/ri_retirement_income_subtraction_eligible.py +++ b/policyengine_us/variables/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/ri_retirement_income_subtraction_eligible.py @@ -7,9 +7,6 @@ class ri_retirement_income_subtraction_eligible(Variable): label = "Eligible for the Rhode Island retirement income subtraction" definition_period = YEAR reference = "http://webserver.rilin.state.ri.us/Statutes/title44/44-30/44-30-12.HTM" - # Eligibility is the same as Social Security's eligibility - # https://tax.ri.gov/sites/g/files/xkgbur541/files/2022-12/Social%20Security%20Worksheet_w.pdf - # STEP 1: Eligibility defined_for = StateCode.RI def formula(tax_unit, period, parameters): @@ -17,15 +14,10 @@ def formula(tax_unit, period, parameters): filing_status = tax_unit("filing_status", period) older_spouse_birth_year = tax_unit("older_spouse_birth_year", period) - p_ss = parameters( - period - ).gov.states.ri.tax.income.agi.subtractions.social_security.limit - age_eligible = older_spouse_birth_year <= p_ss.birth_year - - # Income eligibility. p_tri = parameters( period ).gov.states.ri.tax.income.agi.subtractions.taxable_retirement_income + age_eligible = older_spouse_birth_year <= p_tri.birth_year income_eligible = income < p_tri.income_limit[filing_status] return age_eligible & income_eligible From 2001bd8ec5d5b4baa5e3c22ff9505908aeb8ae68 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Wed, 17 Jun 2026 09:39:08 -0400 Subject: [PATCH 10/10] Address RI tax review comments --- .../ri/tax/income/credits/refundable.yaml | 6 +- .../tax/income/high_earner_tax/threshold.yaml | 2 +- ...social_security_modification_eligible.yaml | 25 +++++ .../ri/tax/income/credits/ctc/ri_ctc.yaml | 98 +++++++++++++++++++ .../ri/tax/income/ri_high_earner_tax.yaml | 2 + 5 files changed, 131 insertions(+), 2 deletions(-) diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml index c4bd92c972c..9f2347bacf8 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml @@ -25,7 +25,11 @@ metadata: - title: R.I. Gen. Law §44-30-103. Child Tax Rebates. href: https://tax.ri.gov/sites/g/files/xkgbur541/files/2022-08/H7123Aaa_CTR_0.pdf#page=1 # The budget bill establishes the CTC amount, eligibility, and phase-out; - # this legislative press release describes the enacted budget CTC as fully refundable. + # the budget report and signing press release describe the enacted CTC as refundable. + - title: Rhode Island Senate Fiscal Office FY2027 Budget as Passed by House Finance, page 8 + href: https://www.rilegislature.gov/sfiscal/Budget%20Analyses/FY2027%20SFO%20Budget%20as%20passed%20by%20House%20Finance.pdf#page=8 + - title: Governor McKee signs fiscal year 2027 budget advancing key affordability for all Rhode Islanders + href: https://governor.ri.gov/press-releases/governor-mckee-signs-fiscal-year-2027-budget-advancing-key-affordability-all - title: Sen. Vargas lauds child tax credit in state budget bill href: https://www.rilegislature.gov/pressrelease/_layouts/15/ril.pressrelease.inputform/DisplayForm.aspx?List=c8baae31-3c10-431c-8dcd-9dbbe21ce3e9&ID=376675 - title: 2026 R.I. H 7127 Substitute A as amended, Article 6, Section 4, § 44-30-104 diff --git a/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/threshold.yaml b/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/threshold.yaml index 62f52dfca44..fc1ef493769 100644 --- a/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/threshold.yaml +++ b/policyengine_us/parameters/gov/states/ri/tax/income/high_earner_tax/threshold.yaml @@ -1,6 +1,6 @@ description: Rhode Island sets this taxable income threshold under the high-income surtax. values: - 2027-01-01: 1_000_000 + 2027-01-01: 1_000_000 # 2027 value is not indexed; uprating applies from 2028. metadata: unit: currency-USD period: year diff --git a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.yaml index f8b70dfa9bb..ca837f777ad 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/social_security/ri_social_security_modification_eligible.yaml @@ -109,6 +109,7 @@ output: ri_social_security_modification_eligible: false +# 2027 income limits remain at 2025 levels because the uprating index is 1.0 through 2027. - name: 2027 - Single filer just below income limit is eligible period: 2027 input: @@ -148,3 +149,27 @@ state_code: RI output: ri_social_security_modification_eligible: false + +- name: 2027 - Joint filers under full retirement age are eligible + period: 2027 + input: + people: + person1: + age: 37 + birth_year: 1990 + is_tax_unit_head: true + person2: + age: 37 + birth_year: 1990 + is_tax_unit_spouse: true + tax_units: + tax_unit: + members: [person1, person2] + adjusted_gross_income: 100_000 + filing_status: JOINT + households: + household: + members: [person1, person2] + state_code: RI + output: + ri_social_security_modification_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/credits/ctc/ri_ctc.yaml b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/credits/ctc/ri_ctc.yaml index 8f5fdbc2bf5..68efe744a88 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/credits/ctc/ri_ctc.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/credits/ctc/ri_ctc.yaml @@ -202,3 +202,101 @@ state_code: RI output: ri_ctc: 0 + +- name: Rhode Island Child Tax Credit reduces once at the exact single-filer increment + period: 2027 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 35 + is_tax_unit_dependent: false + child: + age: 8 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + ri_agi: 91_375 + households: + household: + members: [parent, child] + state_code: RI + output: + ri_ctc: 264 + +- name: Rhode Island Child Tax Credit is unreduced at the joint-filer threshold + period: 2027 + absolute_error_margin: 0.01 + input: + people: + parent1: + age: 35 + is_tax_unit_head: true + parent2: + age: 35 + is_tax_unit_spouse: true + child: + age: 8 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent1, parent2, child] + filing_status: JOINT + ri_agi: 110_640 + households: + household: + members: [parent1, parent2, child] + state_code: RI + output: + ri_ctc: 330 + +- name: Rhode Island Child Tax Credit reduces just above the joint-filer threshold + period: 2027 + absolute_error_margin: 0.01 + input: + people: + parent1: + age: 35 + is_tax_unit_head: true + parent2: + age: 35 + is_tax_unit_spouse: true + child: + age: 8 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent1, parent2, child] + filing_status: JOINT + ri_agi: 110_641 + households: + household: + members: [parent1, parent2, child] + state_code: RI + output: + ri_ctc: 264 + +- name: Rhode Island Child Tax Credit uses the single-filer threshold for head of household + period: 2027 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 35 + is_tax_unit_head: true + child: + age: 8 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: HEAD_OF_HOUSEHOLD + ri_agi: 88_501 + households: + household: + members: [parent, child] + state_code: RI + output: + ri_ctc: 264 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/ri_high_earner_tax.yaml b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/ri_high_earner_tax.yaml index 9cedad46f40..63ef2066b52 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/ri_high_earner_tax.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/ri_high_earner_tax.yaml @@ -23,6 +23,7 @@ state_code: RI ri_taxable_income: 1_250_000 output: + # 2% of ($1,250,000 - $1,020,750). ri_high_earner_tax: 4_585 - name: Rhode Island high-income surtax applies at 3 percent in 2029 @@ -32,6 +33,7 @@ state_code: RI ri_taxable_income: 1_250_000 output: + # 3% of ($1,250,000 - $1,042,800). ri_high_earner_tax: 6_216 - name: Rhode Island high-income surtax is added before non-refundable credits