# 🚀 Mission Control — Bouwplan Screening & Intake 💡 **Tip:** Dit document is opgesteld op basis van `fo-screening-intake-v1_0.md`. --- **Projectnaam:** AI Speedrun - Mini EPD v1.2 **Versie:** v1.0 **Datum:** 22-11-2025 **Auteur:** Antigravity (i.s.m. Colin) --- ## 1. Doel en context 🎯 **Doel:** Het realiseren van de volledige screening- en intakeflow voor GGZ-professionals, van aanmelding tot behandeladvies. 📘 **Toelichting:** Dit bouwplan vertaalt het Functioneel Ontwerp (FO) naar concrete ontwikkelstappen. De focus ligt op het bouwen van de fundering (zonder AI in eerste instantie) zodat cliënten kunnen worden geregistreerd, gescreend en geïntaked volgens de specificaties. --- ## 2. Uitgangspunten ### 2.1 Technische Stack - **Frontend:** Next.js (App Router) + Tailwind CSS + Lucide Icons - **Backend:** Supabase (PostgreSQL + Auth) - **State Management:** React Query / Server Actions - **UI Library:** shadcn/ui (of vergelijkbaar) ### 2.2 Projectkaders - **Scope:** Zoals beschreven in FO v1.0 (MVP). - **Data:** Gebruik van Supabase voor persistentie. - **AI:** Nog niet in scope voor deze fase (komt in latere iteratie). ### 2.3 Programmeer Uitgangspunten - **DRY & SOC:** Strikte scheiding tussen UI en data-fetching (Server Actions / Services). - **Types:** Volledig getypeerd met TypeScript (Database types genereren uit Supabase). - **Componenten:** Herbruikbare componenten voor veelvoorkomende patronen (bijv. `SectionCard`, `StatusBadge`). --- ## 3. Epics & Stories Overzicht | Epic ID | Titel | Doel | Status | Stories | Progress | |---------|-------|------|--------|---------|----------| | E1 | Database & Types | Datamodel implementeren in Supabase | ✅ Done | 3 | 3/3 ✅ | | E2 | Cliëntenbeheer | Lijstweergave en aanmaken cliënten | ✅ Done | 3 | 3/3 ✅ | | E3 | Screening Module | Screening tab en functionaliteit | ⏳ To Do | 4 | 0/4 ⏳ | | E4 | Intake Core | Intake overzicht en navigatie | ✅ Done | 3 | 3/3 ✅ | | E5 | Intake Details | Specifieke tabbladen (Contact, Risico, etc.) | ✅ Done | 5 | 5/5 ✅ | | E6 | Diagnose & Advies | Diagnose stelling en behandeladvies | ⏳ To Do | 3 | 0/3 ⏳ | --- ## 4. Epics & Stories (Uitwerking) ### Epic 1 — Database & Types ✅ **Doel:** Een solide datamodel in Supabase dat voldoet aan de eisen uit het FO. **Status:** Done - Alle stories voltooid op 22-11-2025 | Story ID | Status | Beschrijving | Acceptatiecriteria | |----------|--------|--------------|---------------------| | E1.S1 | ✅ Done | Tabellen aanmaken | Migration `20251122_screening_intake_schema.sql` aangemaakt met:
- Patient status kolom (`episode_status` enum)
- Screening module (3 tabellen: `screenings`, `screening_activities`, `screening_documents`)
- Intake module (4 tabellen: `intakes`, `anamneses`, `examinations`, `risk_assessments`)
- `encounters` tabel uitgebreid met `intake_id` kolom
- `care_plans` uitgebreid met intake referenties | | E1.S2 | ✅ Done | Migration toepassen | Migration succesvol toegepast op Supabase database met:
- Foreign keys en constraints
- RLS policies voor alle nieuwe tabellen
- Indexes voor performance
- Triggers voor `updated_at` timestamps | | E1.S3 | ✅ Done | TypeScript Types genereren | Types gegenereerd met `supabase gen types` en geëxporteerd naar `lib/supabase/database.types.ts`
- 2148+ regels TypeScript types
- Alle nieuwe tabellen en enums geëxporteerd | ### Epic 2 — Cliëntenbeheer (Level 1) ✅ **Doel:** Behandelaars kunnen cliënten vinden en nieuwe cliënten aanmaken. **Status:** Done - Alle stories voltooid op 22-11-2025 | Story ID | Status | Beschrijving | Acceptatiecriteria | |----------|--------|--------------|---------------------| | E2.S1 | ✅ Done | Cliëntenlijst | Tabel met zoekfunctie, filters en status badges:
- `patient-list.tsx` geüpdatet met client-side search bar
- Status filter dropdown (alle/screening/actief/afgerond/afgemeld)
- StatusBadge component met color-coded badges
- Tabel kolommen: Status, Naam, BSN, Laatst gewijzigd
- API route `/api/fhir/Patient` ondersteunt status filtering
- FHIR transform aangepast voor status extension | | E2.S2 | ✅ Done | Nieuwe Cliënt Flow | Formulier voor aanmaken cliënt met John Doe logica:
- `patient-form.tsx` compleet herschreven met alle FO velden
- John Doe checkbox met conditional BSN requirement
- BSN validatie met Modulo-11 check
- Alle velden: naam, BSN, geboortedatum, geslacht, adres (straat, postcode, plaats), contact (telefoon, email), verzekering (verzekeraar, polisnummer)
- Warning messages voor John Doe patiënten
- Status altijd 'planned' voor nieuwe patiënten
- Redirect naar patient detail page na aanmaken
- FHIR transform ondersteunt insurance extension (bidirectioneel) | | E2.S3 | ✅ Done | Cliënt Header & Nav | Context-aware header en sidebar navigatie (Level 2):
- `ClientHeader` component met naam, status badge, laatst gewijzigd en John Doe indicator
- `ClientSidebar` component met navigatie naar alle tabs
- Patient detail layout met header en sidebar
- Dashboard pagina met quick actions en volgende stappen
- Basisgegevens pagina met patient form en John Doe warning
- Placeholder paginas voor alle tabs: Screening, Intake, Diagnose, Behandelplan, Rapportage
- Alle tabs altijd zichtbaar, ongeacht status | ### Epic 3 — Screening Module (Level 2) **Doel:** Faciliteren van het screeningsproces. **Status:** ⏳ To Do - Database schema voltooid (E1), UI functionaliteit nog te implementeren | Story ID | Status | Beschrijving | Acceptatiecriteria | |----------|--------|--------------|---------------------| | E3.S1 | ✅ Done | Activiteitenlog | Tijdlijn component met activiteiten (datum, type, beschrijving):
- Chronologische weergave van screeningsactiviteiten
- Formulier om nieuwe activiteit toe te voegen
- Server Action `addScreeningActivity` voor persistentie
- Activity types: Telefoongesprek, Email, Consult, Overig
- Integratie met `screening_activities` tabel | | E3.S2 | ✅ Done | Documenten & Hulpvraag | Upload functionaliteit en hulpvraag registratie:
- Document upload component met file preview
- Opslag in Supabase Storage (`screening-documents` bucket)
- Metadata opslag in `screening_documents` tabel
- Hulpvraag tekstveld (rich text) opgeslagen in `screenings.help_request`
- Server Actions voor upload en opslaan | | E3.S3 | ✅ Done | Screeningsbesluit | Formulier voor screeningsbesluit met status update + verwijsbrief-warning:
- Besluit opties: Geschikt / Niet geschikt
- Motivation textbox + afdeling selectie
- Status update logica naar `screenings.decision` + patiënstatus
- Warning bij ontbrekende verwijsbrief | | E3.S4 | ⏳ To Do | Basisgegevens Tab | Read-only weergave met edit-modus voor NAW:
- Display mode toont alle patient basisgegevens
- Edit knop voor wijzigingsmodus
- Inline editing of modal voor NAW gegevens
- Hergebruik van `PatientForm` component
- Save changes via `updatePatient` action
- Cancel/Reset functionaliteit | **Database Dependencies (✅ Voltooid in E1):** - `screenings` tabel met decision en help_request velden - `screening_activities` tabel voor activiteitenlog - `screening_documents` tabel voor document metadata ### Epic 4 — Intake Core (Level 2) ✅ **Doel:** Beheer van intakes (meerdere per cliënt mogelijk). **Status:** Done - Alle stories voltooid op 22-11-2025 | Story ID | Status | Beschrijving | Acceptatiecriteria | |----------|--------|--------------|---------------------| | E4.S1 | ✅ Done | Intake Overzicht | Kaartweergave van alle intakes per cliënt:
- `IntakeCard` component met status badges
- `IntakeList` component voor grid weergave
- Server Action `getIntakesByClientId` voor data fetching
- Geïntegreerd in `IntakeTab` op cliënt detail pagina | | E4.S2 | ✅ Done | Nieuwe Intake | Modal/page voor starten nieuwe intake:
- `NewIntakeForm` met Zod validatie
- Velden: Titel, Afdeling, Startdatum
- Server Action `createIntake` voor aanmaken record
- Redirect naar intake lijst na succes | | E4.S3 | ✅ Done | Intake Layout | Sub-navigatie (tabs) binnen een specifieke intake:
- `IntakeLayout` met `IntakeHeader` en `IntakeTabs`
- Header toont titel, status, en datums
- Tabs voor navigatie naar sub-onderdelen (Algemeen, Contact, etc.)
- Server Action `getIntakeById` voor ophalen details | ### Epic 5 — Intake Details (Tabs) **Doel:** Inhoudelijke registratie van de intake. | Story ID | Beschrijving | Acceptatiecriteria | |----------|--------------|---------------------| | E5.S1 | ✅ Done | Tab Algemeen (read-only hulpvraag/besluit + notities). | | E5.S2 | ✅ Done | Tab Contactmomenten (lijst + CRUD via `encounters`). | | E5.S3 | ✅ Done | Tab Kindcheck (JSON-editing + alerts). | | E5.S4 | ✅ Done | Tab Risicotaxatie (`risk_assessments` CRUD). | | E5.S5 | ✅ Done | Tabs Anamnese, Onderzoek, ROM (gedeelde component met Supabase opslag). | ### Epic 6 — Diagnose & Advies **Doel:** Afronding van de intake met diagnose en advies. | Story ID | Beschrijving | Acceptatiecriteria | |----------|--------------|---------------------| | E6.S1 | Diagnose Tab | Toevoegen DSM-5 diagnoses (code, ernst, toelichting). | | E6.S2 | Behandeladvies Tab | Rich text editor voor advies + doorzet-logica. | | E6.S3 | Intake Afronding | Status transitie naar 'Afgerond' en update cliënt status. | --- ## 5. Kwaliteit & Testplan ### Test Types - **Unit Tests:** Voor complexe validatielogica (bijv. BSN check). - **Manual Testing:** Doorlopen van de volledige flow van 'Nieuwe Cliënt' tot 'Intake Afgerond'. ### Manual Test Checklist - [ ] Nieuwe cliënt aanmaken (John Doe & Regulier). - [ ] Screening doorlopen en besluit nemen. - [ ] Intake starten en contactmoment toevoegen. - [ ] Diagnose toevoegen en behandeladvies opstellen. - [ ] Intake afronden en controleren of status update. --- ## 6. Risico's & Mitigatie | Risico | Mitigatie | |--------|-----------| | Complexiteit datamodel | Starten met strikte types en ERD validatie. | | Navigatie diepte (Level 3?) | Duidelijke breadcrumbs en 'terug' knoppen implementeren. | | Performance bij veel data | Paginering op lijsten en lazy loading van tabs. | ---