Journey: SNAP address change → shelter-cost cascade → benefit recompute

On this page

An applicant files a SNAP application through the real applicant portal front door; a caseworker records the household’s wages, rent, and address, then the household moves to pricier housing. The higher shelter cost raises the excess-shelter deduction, which lowers net income, which raises the monthly allotment. The caseworker records the increased rent and re-determines; the benefit rises, a Notice of Action is generated — the shelter-cost cascade that 7 CFR 273.12(a)(1), (c) bounds when a household reports a move — and the applicant signs back in to see the outcome.

NOTE

Reproducibility tier: Fully manual. Every beat is a real screen action a presenter performs by hand — the applicant fills the /apply wizard, the caseworker drives the worker portal, the applicant signs back in. Nothing is seeded or scripted into the case; the live demo is exactly the click sequence in the The walkthrough, step by step table below.

IMPORTANT

This walkthrough is paired with the automated spec tests/e2e/specs/journey-snap-shelter-cascade.spec.ts, covering scenario snap.change.address-change-shelter-cascade. The screenshots below are captured by that spec. See Verifying the journey to run it.

Personas & credentials

Persona Credentials / identity Role in the journey

Applicant

Files at the portal /apply flow (canopy-portal, :8090). On submission the reveal screen shows a reference number (HH-xxxxxxxx) + a 12-digit passcode (dddd-dddd-dddd); the applicant signs back in at /lookup with those.

Files the SNAP application (identity + household composition + an income-category screening — no amounts), then signs back in to view the outcome (home + the Notice of Action on Letters).

Caseworker

Worker portal (canopy-web, :8080), Keycloak login jane.caseworker / password (see UAT Facilitator Guide).

Records the wages, opens the certification, runs the baseline determination, records the baseline address + the move, records the higher rent, re-determines, and confirms the notice.

Bring-up & reset

cargo xtask dev start --profile full     # full devstack (SNAP + worker + applicant portal + notices)
cargo xtask seed --seed 42               # deterministic fixtures

Reset between runs:

cargo xtask migrate rollback             # drop the run's mutations
# then re-seed, and use a fresh browser / incognito window for the applicant portal
# (the /lookup session is a Redis-backed cookie).

The Demo Runbook owns the full bring-up / reset detail; this is the minimum for this journey.

Concrete precondition

The applicant inputs the journey depends on — the composition + DOBs the applicant files at /apply, and the wages / rent / address the caseworker records afterward. The dollar and rent figures are construction inputs, calibrated to keep the case approved and off the benefit floor/ceiling with room for the shelter deduction to move the allotment — they are never asserted values.

Applicant files at /apply (composition + categories only — no amounts):

  • Head of household: Dana Rivers, DOB 1985-06-15.

  • Child: Sam Rivers, DOB 2015-03-10, relationship child.

  • Child: Alex Rivers, DOB 2018-07-22, relationship child.

  • Household size 3 (above the size≤2 minimum-benefit bump, so the shelter delta is not masked).

  • Income step: No one works right now (the portal captures the category, not the amount).

Caseworker records (the authoritative facts — the portal filed none):

  • Head wages: $1,500 / month, effective today.

  • Baseline rent: $600 / month, effective today (above the 50%-of-income shelter threshold, below the excess-shelter cap).

  • Baseline residential address: 100 Oak St, Atlanta, GA 30301, effective one month ago.

  • The move (address edit): 250 Peachtree St NE, Atlanta, GA 30303, effective today.

  • Rent increase: +$300 / month, effective today — added on top of the $600, so total shelter rises $600 → $900.

  • Certification window: start two months ago, end four months ahead.

The walkthrough, step by step

# Screen Action Expected outcome Screenshot

01

Applicant

At /apply: Begin applicationAbout you (Dana Rivers, DOB 1985-06-15) → Household (add Sam and Alex as children) → Safety (Standard protections are fine) → Income (No one works right now; quick-check 0) → ReviewSubmit application.

The Application submitted reveal screen shows the reference number HH-… and the 12-digit passcode — save both (they are shown once).

Credential reveal

02

Caseworker

Open the case (/cases/<HH-…>?program=snap) → Income tab → + Add income for the head → type wages, amount 1500, frequency monthly, an effective date → Add.

The wage row is recorded — the household’s authoritative earned income (the portal captured none).

Wages recorded

03

Caseworker

Determination tab → Action ▾Run Determination.

Approved with a monthly benefit — the precondition the Create certification action requires.

Determination approved

04

Caseworker

Determination tab → the program group’s Actions panel → Create certification → enter the certification start and end dates → Create certification.

Redirects to the Household tab, whose Certification card now shows the period (start – end) and type.

Certification created

05

Caseworker

Expenses tab → + Add expense for the head → type rent, amount 600, frequency monthly, an effective date → Add.

The rent row is recorded — the household’s baseline shelter cost, on file for the determination.

Baseline rent recorded

06

Caseworker

Determination tab → Action ▾Run Determination.

Approved with a monthly benefit — the baseline, computed with the existing rent.

Baseline determination

07

Caseworker

The household reports a move. Address tab → + Add address for the head → residential, 100 Oak St, Atlanta, GA 30301, an effective date → Add. (The portal-filed case has no address; this is the pre-move baseline the next step corrects.)

A baseline residential address is on file for the head.

Baseline address added

08

Caseworker

Address tab → the head’s Edit disclosure → rewrite to 250 Peachtree St NE, Atlanta, GA 30303 with an effective date → Save.

Redirects to the Address tab; the corrected (moved-to) address renders — the recorded agency action.

Address changed

09

Caseworker

Return to the Expenses tab → + Add expense for the head → type rent, amount 300, frequency monthly, an effective date → Add. (The move’s separate shelter-cost consequence — see the honest-scope note.)

A second rent row is recorded; the household’s total shelter cost rises by the added amount ($600 → $900).

Higher rent recorded

10

Caseworker

Return to the Determination tab → Action ▾Run Determination again.

Still Approved, but the monthly benefit is higher than the baseline — the larger excess-shelter deduction lowered net income and raised the allotment.

Higher benefit

11

Caseworker

Open the Notices tab.

A notice_of_action entry — the determination lifecycle fired the NOA pipeline end-to-end — with a downloadable PDF.

Notice of action

12

Applicant

Sign back in at /lookup with the HH-… reference number + the 12-digit passcode → Continue.

Lands on /home; the personalized greeting renders — the same applicant, back in their own portal.

Applicant home

13

Applicant

Open Letters → open the most recent letter.

The caseworker’s Notice of Action appears on the applicant’s Letters page — the worker outcome reflected back to the applicant.

Applicant letter

Expected outcome / oracle

The oracle is a derived, relational comparison, never a dollar figure or a policy threshold:

  • The after-move determination benefit is strictly greater than the before-move benefit (steps 10 vs 06) — more shelter → a larger excess-shelter deduction → lower net income → a higher allotment.

  • The moved-to address (250 Peachtree St NE) renders on the worker Address section after the edit (step 08) — matched by the street the caseworker entered.

  • A Notice of Action row appears on the case Notices tab (step 11) and reflects back onto the applicant’s Letters page (step 13).

Because the assertion compares the two observed determinations to each other, the journey holds under any jurisdiction’s benefit values.

Honest scope

Mirrors the spec’s honest-scope comment:

  • The application is filed through the real applicant portal wizard (#991), not the given library. The wizard collects identity + composition + an income-category screening (No one works right now); it authors no amounts, so the case’s actual wages, rent, and address are recorded by the caseworker (the authoritative facts). This mirrors canopy’s design: the portal quick-check is a screening estimate; the worker records the verified figures.

  • The move is recorded through the real worker Address editor (#983): the caseworker adds a pre-move baseline address (the portal-filed case carries none), then records the move as a valid-time correction — the literal agency-action trigger of 7 CFR 273.12(a)(1). The rent increase is the move’s separate shelter-cost consequence and remains the driver of the benefit oracle (address ≠ shelter cost), so both beats are present.

  • The cascade shown is the deduction recompute on a reported, acted-on change, not the "request shelter verification → household fails to verify → remove the deduction" sub-flow (which needs RFI / clarification machinery the system does not model yet).

  • Shelter is the sum of shelter-cost rows. A move to pricier housing is modelled by adding a rent row on top of the existing rent (the expense endpoint adds, it does not edit), so the household’s total shelter cost rises by the added amount.

Verifying the journey

cargo xtask e2e --devstack-profile full -- \
  specs/journey-snap-shelter-cascade.spec.ts --project journey

The spec files a size-3 SNAP application through the real /apply wizard on an unauthenticated applicant context, then drives the worker steps above through the portal BFF — recording the head’s wages, running the enabling determination, opening the certification, recording the baseline rent, running the baseline determination, adding a baseline address and recording the move through the Address editor, recording the higher rent, re-determining, and asserting the benefit strictly rises — before the applicant signs back in to view the home and the Notice of Action. It captures the step screenshots into test-results/e2e/walkthroughs/… for commit into docs/modules/ROOT/assets/images/walkthroughs/….

Edit this page · default