4.5 KiB
Step-wise Mock Data & Flow Bug Fixes
Problem
The app has two categories of issues preventing a complete flow-through:
- Data integrity bugs — process step transitions don't update all relevant
nutzerfields, so the antrag checklist can never fully complete even when the user follows the happy path. - Mock data gaps — the existing
seedMockData()creates a single fixed state (eigensuche with 20 therapists) but doesn't setnutzer.dringlichkeitscodeornutzer.tss_beantragt, making it impossible to test the full flow or individual steps.
Goal
Fix the flow bugs so the real UI path works end-to-end, and replace the single mock-data button with a step-wise scenario dropdown in dev settings that seeds the complete app state for any given process step.
Changes
1. Bug fix: SprechstundeForm (process-stepper.tsx)
Current behavior: SprechstundeForm.onSubmit inserts into sprechstunde table with dringlichkeitscode, then separately updates nutzer.aktueller_schritt = 'diagnose_erhalten'. It never writes nutzer.dringlichkeitscode or nutzer.dringlichkeitscode_datum.
Fix: Replace the two separate queries with a single sprechstunde INSERT and a combined nutzer UPDATE:
UPDATE nutzer SET
aktueller_schritt = 'diagnose_erhalten',
dringlichkeitscode = $1,
dringlichkeitscode_datum = CASE WHEN $1 THEN $2 ELSE NULL END,
aktualisiert_am = NOW()
WHERE id = 1
Where $1 is the dringlichkeitscode boolean and $2 is the sprechstunde datum.
2. Bug fix: TSS advance button (process-stepper.tsx)
Current behavior: The AdvanceButton for diagnose_erhalten → tss_beantragt only updates nutzer.aktueller_schritt. It never sets nutzer.tss_beantragt or nutzer.tss_beantragt_datum.
Fix: Replace the generic AdvanceButton for this specific transition with a custom handler:
UPDATE nutzer SET
aktueller_schritt = 'tss_beantragt',
tss_beantragt = TRUE,
tss_beantragt_datum = CURRENT_DATE,
aktualisiert_am = NOW()
WHERE id = 1
The StepAction switch case for diagnose_erhalten gets an inline button instead of the generic AdvanceButton.
3. Scenario module (new file)
File: src/features/einstellungen/scenarios.ts
Exports: seedToStep(step: ProzessSchritt)
Behavior: Clears all data except nutzer, then builds state cumulatively based on the target step:
| Target step | State seeded |
|---|---|
neu |
Reset nutzer to aktueller_schritt = 'neu', all flags false, clear therapists/contacts/sprechstunden |
diagnose_erhalten |
1 therapist + 1 sprechstunde with dringlichkeitscode=true, nutzer flags set accordingly |
tss_beantragt |
Above + nutzer.tss_beantragt = true, nutzer.tss_beantragt_datum set |
eigensuche |
Above + 20 therapists with mixed contact attempts |
antrag_gestellt |
Above + ensures ≥5 absagen/keine_antwort contacts for checklist item 4 |
Mock data constants (MOCK_VORNAMEN, MOCK_NACHNAMEN, MOCK_STAEDTE, etc.) move here from kontakte/hooks.ts.
4. Settings UI (settings-page.tsx)
Replace the current dev mode section (single "Testdaten einfügen" button) with a dropdown + button:
- Label: "Szenario laden"
- Description: "App-Zustand für einen bestimmten Prozessschritt laden"
- Dropdown options:
- Schritt 1 — Erstgespräch
- Schritt 2 — Diagnose erhalten
- Schritt 3 — TSS kontaktiert
- Schritt 4 — Eigensuche
- Schritt 5 — Antrag gestellt
- Button: "Laden"
- Feedback: Brief "Fertig" text after seeding (same pattern as current)
5. Cleanup in kontakte/hooks.ts
- Delete
seedMockData()function - Delete all
MOCK_*constants (MOCK_VORNAMEN, MOCK_NACHNAMEN, MOCK_STAEDTE, MOCK_THERAPIEFORMEN, MOCK_ERGEBNISSE) - Delete
daysAgoISO()helper deleteAllData()stays — it's user-facing and deletes the nutzer row (full reset to onboarding)
Out of scope
- Antrag checklist "Absagenliste exportiert" — stays hardcoded to
false. Tracking PDF export clicks is a separate feature. The checklist will show 4/5 atantrag_gestellt.
Files changed
- Modify:
src/features/prozess/components/process-stepper.tsx— fix SprechstundeForm and TSS advance button - Create:
src/features/einstellungen/scenarios.ts— step-wise seed logic + mock constants - Modify:
src/features/einstellungen/components/settings-page.tsx— dropdown UI replacing single button - Modify:
src/features/kontakte/hooks.ts— remove seedMockData, mock constants, daysAgoISO