Journey: The 3730 periodic-report calendar closes a nonfiling case

On this page

A legacy extended-certification SNAP household (the P11 cohort — certified before the 2026-03-02 periodic-reporting phase-out) reaches its periodic-report due month and never files. The 3730 calendar runs itself: the 15th of the prior month stages the informational letter, the 5th of the due month — with no complete Form 528 on file — mints the termination action whose adequate notice IS the combined reminder/termination letter (no further notice is ever sent), and month-end the enact sweep closes the case. The renewals terminal consumer stamps the cycle terminated. Regulatory basis: 7 CFR 273.12(a)(5)(iii); PAMMS SNAP 3730 (notice on the 15th prior, combined notice on the 5th, closure by the end of the due month per the SOP and Chart 3730.1).

NOTE

Reproducibility tier: Clock-driven harness. This journey is CALENDAR machinery — its beats are scheduler passes under an advancing fleet logical clock (ADR-033 test-clock builds), not worker clicks. The certification and enrollment are created through the worker UI and every outcome is verified on worker-portal screens, but the month-jumps (advanceTo the 15th, the 5th, month-end) and the scheduler/sweep passes between them are driven by the paired spec against the test-clock API. A live demo therefore replays the spec; there is no hand-followable path through three months of wall-clock time. Test-clock builds only — the clock endpoints do not exist in production binaries.

IMPORTANT

This walkthrough is paired with the automated spec tests/e2e/specs/journey-snap-periodic-report-calendar.spec.ts, covering scenario snap.change.periodic-report-nonfiler-termination (journey tier). The screenshots below are captured by that spec. See Verify it yourself to run it.

Personas & credentials

Persona Credentials / identity Role in the journey

Applicant

N/A for this journey. The household exists as harness-constructed facts (one working-age adult with reported wages and a seeded mailing address — the 3730 letters are postal, and the render-time recipient gate refuses a head with no usable mailing address rather than mailing a placeholder). The applicant never acts: the whole point is what happens when they do nothing.

The nonfiling household whose case the calendar closes.

Caseworker

Worker portal, Keycloak login jane.caseworker / password (see UAT Facilitator Guide).

Creates the cohort certification and enrollment through the UI, and observes each calendar beat on the case’s Notices and Determination tabs.

Bring-up & reset

cargo xtask dev start --profile full   # full devstack, test-clock build
cargo xtask e2e --devstack-profile full journey-snap-periodic-report-calendar.spec.ts

The spec resets the fleet clocks in a finally block, so a failed run never leaves the devstack living in the future.

The calendar at a glance

The materialized cycle stores three dates the scheduler acts on (all derived from the certification’s midpoint due month):

Date 3730 name What fires

15th of the month before the due month

Initial notice

The scheduler stages the informational periodic-report letter (deliberately not action-bound); the cycle moves scheduled → notice_sent.

5th of the due month

Combined reminder / termination notice

No complete Form 528 on file → the pass creates the termination action (adequate-notice exempt, 3730:98-108); the routed combined letter becomes the action’s dispatched evidence. That letter IS the final notice.

End of the due month

Closure (SOP / Chart 3730.1)

The enrollment enact sweep executes the termination; the renewals terminal consumer stamps the cycle terminated.

The walkthrough, step by step

# Screen Action Expected Screenshot

01

Caseworker

ActionsCreate certification for the cohort household: start 2026-03-01 (one day before the phase-out cutover — as late as the P11 cohort allows), 12 months, then Create enrollment for the same period (the 5th-of-month trigger needs a live enrollment to terminate).

The certification and enrollment show on the Determination tab; the household is in the legacy periodic-reporting cohort.

Cohort certification

02

(scheduler)

No screenshot — API beat. The first scheduler pass materializes the cycle with its stored 3730 calendar (15th-of-prior / 5th-of-due / month-end dates).

GET /v1/renewals/…​ lists exactly one cycle, status scheduled.

03

Caseworker

Clock → the 15th of the month before the due month; scheduler pass. Open the case’s Notices tab.

The informational periodic-report letter is staged (postal, to the seeded mailing address); the cycle reads notice_sent.

Fifteenth-of-month informational notice

04

Caseworker

Clock → the 5th of the due month; scheduler pass. No Form 528 was filed. Open the Determination tab.

A termination action with created_source = periodic_report exists; the combined reminder/termination letter is its dispatched adequate-notice evidence. No separate NOA will follow — the combined letter is the final notice.

Termination scheduled from the combined trigger

05

Caseworker

Clock → month-end; enact sweep. Re-open the Determination tab.

The case is closed by the end of the due month; the renewals cycle reads terminated (stamped by the terminal consumer — closure has no bespoke machinery, the standard enact sweep IS the executor).

Case closed at month-end

Verify it yourself

cargo xtask e2e --devstack-profile full journey-snap-periodic-report-calendar.spec.ts

The spec builds the cohort case through the worker UI, advances the fleet logical clock through the three calendar beats, and asserts the cycle’s scheduled → notice_sent → terminated progression plus the action’s dispatched-evidence gate at each step. Fresh screenshots land in test-results/e2e/walkthroughs/journey-snap-periodic-report-calendar/.

Honest-scope notes

  • The applicant portal shows the letters but offers no Form 528 filing affordance — the filing path (which would avert the termination) is the snap.change.periodic-report-timely-filing scenario’s concern, not this one.

  • Step 02’s materialization is invisible in the UI by design — the cycle’s calendar is scheduler state; workers see its consequences (letters, the action, the closure), not the cycle row itself.

  • A begun due-month at cutover is tombstoned, not walked — the spec pins the cohort start one day before the 2026-03-02 phase-out so the midpoint due month has not begun at first scan (calendar_elapsed_at_cutover is the honest tombstone for calendars already in flight).

Edit this page · default