# Bouwplan — Cortex Casus: No Show Afhandeling **Projectnaam:** Cortex — Casus 2 (No Show) **Versie:** v1.0 **Datum:** 2026-03-29 **Auteur:** Colin Lit / Antigravity --- ## 1. Doel en Context **Doel:** Een werkende demonstratie bouwen van de no-show afhandelings-flow: van één getypte zin ("patiënt niet verschenen") tot een AI-herschreven, geaccordeerde huisartsbrief — zonder dat de regiebehandelaar een enkel scherm verlaat. **Context:** De V2 Cortex architectuur (three-layer: Reflex → Orchestrator → Nudge) is volledig operationeel. De chat pipeline, artifact store en nudge infrastructure zijn live. Dit bouwplan bouwt de no-show casus **bovenop** die bestaande foundation. **Kernprincipe:** > "Eén zin van de zorgverlener vervangt vijf administratieve handelingen." **Beoogd resultaat:** Een demonstreerbare end-to-end flow die: - `register_no_show` intent herkent (Reflex + Orchestrator) - Declarabiliteitsregel proactief signaleert (Nudge stap 1) - Na 1-klik annulering de conceptbrief opspoort (Nudge stap 2) - De brief via LLM herschrijft en toont in Artifact (Document Block) - Accordering en `ready_for_dispatch` status afhandelt **Referenties:** - PRD: `docs/intent/noshow-case/prd-cortex-casus-noshow.md` - FO: `docs/intent/noshow-case/fo-cortex-casus-noshow.md` - Bestaand bouwplan V2: `docs/intent/bouwplan-cortex-v2.md` --- ## 2. Dev Quick Start ### Codebase oriëntatie ``` lib/cortex/ ├── types.ts # ✅ UITBREIDEN — register_no_show intent + BlockType ├── reflex-classifier.ts # ✅ UITBREIDEN — no-show patronen toevoegen ├── nudge.ts # ✅ UITBREIDEN — 2 nieuwe rules toevoegen └── noshow-handler.ts # 🆕 NIEUW in E3 — multi-step state machine stores/ └── cortex-store.ts # ✅ UITBREIDEN — noShowFlow state in E3 components/cortex/ ├── blocks/ │ └── noshow-document-block.tsx # 🆕 NIEUW in E4 — document artifact component └── chat/ └── nudge-chat-message.tsx # ✅ HERGEBRUIK — werkt al met accept/dismiss app/api/cortex/ └── noshow/ ├── cancel/route.ts # 🆕 NIEUW in E3 — annuleer met cancelled_no_show ├── context/route.ts # 🆕 NIEUW in E3 — concept brief ophalen └── rescript/route.ts # 🆕 NIEUW in E3 — LLM brief herschrijven ``` ### Werkwijze per story 1. Lees story + done criteria 2. Check bestaande code (zie "Bestaande code" sectie per epic) 3. Implementeer — kleinste werkende stap 4. Run `pnpm lint` en `pnpm build` 5. Commit: `feat(cortex): NS.E{n}.S{n} — ` ### Conventies - TypeScript strict mode — geen `any` - Nederlandse gebruikersteksten, Engelse code/comments - Zod voor alle API validatie - Mock data voor prototype — geen echte Zorgmail/declaratie koppeling - Graceful degradation: als LLM faalt, toon originele brief + foutmelding --- ## 3. Architecturele Keuzes ### 3.1 Multi-step flow: hoe? De no-show flow heeft 5 sequentiële stappen waarbij elke stap afhangt van de vorige keuze. De huidige nudge engine is **single-shot** (trigger → 1 nudge → klaar). **Gekozen aanpak: Lightweight state machine in de store** ``` noShowFlowState: { step: 'idle' | 'waiting_cancel' | 'waiting_brief' | 'brief_open' | 'done' appointmentId: string | null documentId: string | null originalBriefContent: string | null } ``` Bij elke nudge-accept checkt de `chat-panel` welke `step` actief is en dispatcht de juiste vervolgactie. Dit hergebruikt de bestaande nudge-accept flow zonder een compleet nieuwe state machine framework nodig te hebben. **Niet gekozen:** Een aparte state machine library (XState) — te zwaar voor prototype scope. ### 3.2 Document Block: Rich Text Editor? De FO noemt een `rich-text-editor.tsx`, maar die bestaat niet in de codebase. Voor prototype scope is een gewone `