Skip to content

ID/GA CTC contributed reforms apply in pre-activation years under delayed in_effect dates #8899

Description

@MaxGhenis

Summary

The contributed reforms in #8856 handle delayed activation asymmetrically:

  • id_ctc_reform.py gates the refundable payment per period (where(p.refundable.in_effect, refundable_credit, 0)), but its modify_parameters revives id_ctc in the nonrefundable list from a hardcoded 2026-01-01 regardless of when in_effect turns on.
  • ga_ctc_reform.py has no per-period gate at all: ga_refundable_ctc pays whenever the reform class is installed, and the 5-year lookahead in create_ga_ctc_reform installs it for all years of a simulation if in_effect is true in any of the next five.

So a multi-year simulation with in_effect starting mid-window pays the GA refund (and applies the ID revival) in pre-activation years. All single-year and activation-year-aligned uses are unaffected, and the reforms stay inert when in_effect is false everywhere.

Suggested fix

Add where(p.refundable.in_effect, ..., 0) to ga_refundable_ctc, and drive the ID modify_parameters start instant from the first period where the relevant in_effect parameter is true instead of the hardcoded 2026-01-01.

Follow-up to #8856.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions