# 🧩 Functioneel Ontwerp (FO) – Mini-ECD Prototype **Projectnaam:** Mini-ECD Prototype **Versie:** v1.0 (MVP) **Datum:** 09-11-2025 **Auteur:** Ontwikkelteam PinkRoccade GGZ --- ## 1. Doel en relatie met het PRD 🎯 **Doel van dit document:** Het Functioneel Ontwerp (FO) beschrijft **hoe** de Mini-ECD applicatie functioneel werkt β€” wat de gebruiker ziet, doet en ervaart tijdens de AI-inspiratiesessie. Waar het PRD uitlegt *wat en waarom*, laat het FO zien *hoe dit in de praktijk werkt*. πŸ“˜ **Context:** Dit FO ondersteunt de demo van max. 10 minuten waarbij we de kernflow **intake β†’ probleemclassificatie β†’ behandelplan** demonstreren met AI-ondersteuning. Het richt zich op de herkenbare ECD-workflow voor GGZ-professionals, met fictieve data en vereenvoudigde autorisatie. **Relatie met andere documenten:** - **PRD**: definieert de vereisten en scope - **TO (Technisch Ontwerp)**: beschrijft de technische implementatie (Next.js, Supabase, Claude AI) - **UX Stylesheet**: specificeert kleuren en styling - **API Access**: documenteert de AI endpoints --- ## 2. Overzicht van de belangrijkste onderdelen De applicatie bestaat uit de volgende hoofdonderdelen: 1. **CliΓ«ntenlijst** β€” overzicht van alle cliΓ«nten met zoek- en filterfunctionaliteit 2. **CliΓ«ntdossier / Dashboard** β€” configureerbare tegels met overzicht per cliΓ«nt 3. **Intakeverslag** β€” rich text editor met AI-ondersteuning 4. **Probleemprofiel (DSM-light)** β€” categorisatie en severity-bepaling 5. **Behandelplan** β€” gestructureerd plan met doelen, interventies en meetmomenten 6. *(Stretch)* **Mini-agenda** β€” afspraken koppelen aan cliΓ«nt 7. *(Stretch)* **Rapportage** β€” PDF export van dossier --- ## 3. User Stories ### Primaire User Stories (MVP) | ID | Rol | Doel / Actie | Verwachte waarde | Prioriteit | |----|------|---------------|------------------|-------------| | US-01 | Behandelaar | Nieuwe cliΓ«nt aanmaken met basisgegevens | Kan direct starten met intake | Hoog | | US-02 | Behandelaar | Intakeverslag schrijven in rich text editor | Flexibel notuleren met opmaak | Hoog | | US-03 | Behandelaar | Intakeverslag samenvatten met AI | Tijdbesparing, sneller overzicht | Hoog | | US-04 | Behandelaar | Leesbaarheid verbeteren naar B1-niveau met AI | CliΓ«ntvriendelijke communicatie | Middel | | US-05 | Behandelaar | AI-suggestie krijgen voor DSM-light categorie en severity | Snellere en consistentere classificatie | Hoog | | US-06 | Behandelaar | Behandelplan genereren op basis van intake/profiel | EfficiΓ«nter plannen, SMART-doelen | Hoog | | US-07 | Behandelaar | Gegenereerd plan bewerken en publiceren | Controle over eindresultaat | Hoog | | US-08 | Behandelaar | Configureren welke dashboard-tegels zichtbaar zijn | Personalisatie werkruimte | Laag | ### Secundaire User Stories (Stakeholders) | ID | Rol | Doel / Actie | Verwachte waarde | Prioriteit | |----|------|---------------|------------------|-------------| | US-09 | Product Owner | Demo-flow doorlopen tijdens workshop | Begrijpt AI-toegevoegde waarde | Hoog | | US-10 | Developer | Zien hoe AI in ECD-proces geΓ―ntegreerd is | Inspiratie voor eigen implementaties | Middel | | US-11 | Manager | Overzicht van cliΓ«ntdossiers bekijken | Inzicht in werkprocessen | Laag | --- ## 4. Functionele werking per onderdeel ### 4.1 CliΓ«ntenlijst **Doel:** Overzicht van alle geregistreerde cliΓ«nten met mogelijkheid om nieuwe cliΓ«nten toe te voegen. **Functionaliteit:** - **Weergave:** - Tabel met kolommen: ClientID, Naam (Voornaam + Achternaam), Geboortedatum, Laatste update - Zoekbalk bovenaan voor filteren op naam of ClientID - Knop **+ Nieuwe cliΓ«nt** rechtsboven - **Acties:** - Klik op rij β†’ navigeert naar CliΓ«ntdossier (Dashboard) - Klik **+ Nieuwe cliΓ«nt** β†’ opent modal/drawer met formulier: - Velden: Voornaam (verplicht), Achternaam (verplicht), Geboortedatum (datum picker) - Knop **Annuleren** | **Opslaan** - Bij opslaan: ClientID wordt automatisch gegenereerd (UUID) - **States:** - **Leeg-staat:** "Nog geen cliΓ«nten. Klik op '+ Nieuwe cliΓ«nt' om te starten." - **Laden:** Skeleton loaders voor tabelrijen - **Fout:** Toast-melding "Kon cliΓ«nten niet laden. Probeer opnieuw." --- ### 4.2 CliΓ«ntdossier / Dashboard **Doel:** Overzichtspagina per cliΓ«nt met configureerbare informatie-tegels. **Structuur:** - **Topbalk:** - Breadcrumb: CliΓ«nten > [Naam cliΓ«nt] - Rechtsboven: Knop **Instellingen** (tandwiel-icoon) β†’ opent tegel-configuratie modal - **Linkernavigatie (verticaal):** - Menu-items: Overzicht (actief) | Intakes | Probleemprofiel | Behandelplan | *(Afspraken)* - Actieve item heeft blauwe accent-bar en lichte achtergrond - **Middenpaneel (tegels):** - Configureerbare tegels (via instellingen aan/uit te zetten): 1. **Basisgegevens** β€” ClientID, Naam, Geboortedatum 2. **Laatste Intake** β€” titel, datum, eerste 3 regels + "Lees meer..." 3. **Probleemprofiel** β€” DSM-light categorie badge + severity badge (Laag/Middel/Hoog) 4. **Behandelplan** β€” status (Concept/Gepubliceerd), aantal doelen, laatst bijgewerkt 5. **Afspraken** β€” laatste afspraak + eerstvolgende 3 afspraken (optioneel, stretch) **Interacties:** - Klik op tegel β†’ navigeert naar desbetreffende sectie (bv. Intake-tegel β†’ Intakes tab) - **Instellingen modal:** - Checkboxes per tegel om zichtbaarheid in/uit te schakelen - Knop **Opslaan** β†’ slaat voorkeur op (per gebruiker, lokaal) --- ### 4.3 Intakeverslag **Doel:** CreΓ«ren en bewerken van intake-notities met rich text en AI-ondersteuning. **Layout:** ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Topbalk: CliΓ«ntnaam | [Opslaan] [AI-acties β–Ό] β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Linkernav β”‚ Editor (hoofdpaneel) β”‚ AI-rail β”‚ β”‚ (tabs) β”‚ TipTap rich text β”‚ (rechts) β”‚ β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Toast area (meldingen) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` **Hoofdpaneel (Editor):** - **Formulier boven editor:** - Titel (optioneel): "Intake [datum]" - Tag dropdown: Intake | Evaluatie | Plan - **TipTap rich text editor:** - Toolbar: Bold, Italic, Underline, Bullet list, Numbered list, Blockquote - Placeholder: "Noteer hier de intake-informatie..." - Auto-save indicator: "Opgeslagen om [tijd]" onder editor - **Knoppen onder editor:** - **Opslaan** (primair, blauw) β€” slaat verslag op - **AI-acties** dropdown (secundair, grijs): - Samenvatten - Verbeter leesbaarheid (B1) - Extract problemen **AI-rail (rechterpaneel):** - **Initieel:** Leeg met prompt "Selecteer een AI-actie om te beginnen" - **Na AI-actie:** - **Header:** "AI-resultaat: [actienaam]" + loading spinner tijdens verwerking - **Content area:** - Voor **Samenvatten**: Bulletpoints van samenvatting - Voor **Leesbaarheid**: Herschreven tekst (diff-weergave optioneel) - Voor **Extract**: Voorgestelde categorie + severity + bronzinnen (highlighted in editor) - **Acties:** - **Invoegen** (primair) β€” voegt resultaat in editor toe - **KopiΓ«ren** (secundair) β€” kopieert naar clipboard - **Annuleren** (ghost) β€” verwerpt resultaat **States & feedback:** - **AI bezig:** Non-blocking spinner in AI-rail + "Genereren..." melding - **AI fout:** Foutmelding in rail: "Kon niet verwerken. Probeer opnieuw." + retry-knop - **Opslaan gelukt:** Groene toast "Verslag opgeslagen" - **Opslaan mislukt:** Rode toast "Kon niet opslaan. Controleer verbinding." **AI Source Highlighting (voor Extract):** - Bronzinnen die AI gebruikt heeft worden gehighlight in de editor (lichtgele achtergrond) - Highlights verdwijnen bij Invoegen, Annuleren of nieuwe AI-actie **Keyboard shortcuts:** - `Ctrl/Cmd+S`: Opslaan - `Ctrl/Cmd+K`: Zoeken in tekst - `Ctrl/Cmd+N`: Nieuw verslag --- ### 4.4 Probleemprofiel (DSM-light) **Doel:** Categoriseren van problematiek volgens vereenvoudigde DSM-classificatie met severity-bepaling. **Layout:** - **Formulier (links, 60%):** - **Categorie** (dropdown, verplicht): - Stemming / Depressieve klachten - Angststoornissen - Gedrags- en impulsstoornissen - Middelengebruik / Verslaving - Cognitieve stoornissen - Context / Psychosociaal - **Severity** (button group of slider): - Laag (grijs badge) - Middel (geel badge) - Hoog (rood badge) - **Opmerkingen** (textarea, optioneel): vrij tekstveld voor notities - **Bronverslag** (readonly): "Gebaseerd op intake [titel] van [datum]" - **AI-suggestie paneel (rechts, 40%):** - **Trigger:** Knop **AI β€Ί Analyseer intake** - **Output:** - Voorgestelde categorie (highlight) - Voorgestelde severity (highlight) - Rationale (korte uitleg, 2-3 zinnen) - Bronzinnen (quotes uit intake) - **Acties:** - **Accepteer suggestie** β€” vult formulier automatisch in - **Negeer** β€” sluit suggestie paneel **States:** - **Geen profiel:** "Nog geen probleemprofiel. Start met AI-analyse of vul handmatig in." - **AI bezig:** Skeleton loader in suggestie-paneel - **Opgeslagen:** Groene melding "Probleemprofiel opgeslagen" β†’ activeert Behandelplan tab --- ### 4.5 Behandelplan **Doel:** Genereren en bewerken van een gestructureerd behandelplan met SMART-doelen. **Structuur:** - **Header:** - Versie-indicator: "Concept" (oranje badge) of "Versie X – Gepubliceerd" (groene badge) - Publicatiedatum (indien gepubliceerd) - **Vier secties (cards/accordions):** 1. **Doelen** - Lijst van doelen (bullets, bewerkbaar) - Voorbeeld: "CliΓ«nt ervaart minder angstklachten in sociale situaties binnen 3 maanden" - **Micro-AI-actie:** Knop **↻ Regenereer** per doel 2. **Interventies** - Lijst van interventies - Voorbeeld: "Cognitieve gedragstherapie (CGT), 12 sessies" - **Micro-AI-actie:** Knop **↻ Regenereer** per interventie 3. **Frequentie/Duur** - Tekstveld met suggestie - Voorbeeld: "Wekelijks, 12 weken, 50 minuten per sessie" 4. **Meetmomenten** - Lijst van evaluatiemomenten - Voorbeeld: "Na 4 sessies, na 8 sessies, afsluiting na 12 sessies" **InitiΓ«le generatie:** - **Trigger:** Knop **AI β€Ί Genereer behandelplan** (alleen zichtbaar als probleemprofiel bestaat) - **Input:** Gebruikt intake-notities + probleemprofiel als context - **Output:** Vult alle vier secties met voorstellen - **Feedback:** "Plan gegenereerd. Bekijk en bewerk indien nodig." (blauwe info-toast) **Bewerken:** - Alle velden/bullets zijn inline bewerkbaar (contentEditable of input fields) - **Auto-save:** Elke wijziging wordt automatisch opgeslagen als concept **Publiceren:** - **Knop:** **Publiceer v[N]** (rechtsboven) - **Validatie:** Controleer of alle secties gevuld zijn - **Actie:** - Wijzigt status van "Concept" naar "Gepubliceerd" - Verhoogt versienummer - Timestamp van publicatie - Concept wordt read-only; nieuwe wijzigingen maken nieuwe versie aan - **Feedback:** "Behandelplan v1 gepubliceerd" (groene toast) **States:** - **Geen plan:** "Nog geen behandelplan. Genereer met AI of start handmatig." - **Concept:** Oranje badge, bewerkbaar - **Gepubliceerd:** Groene badge, read-only met knop **Nieuwe versie** --- ### 4.6 Mini-agenda (stretch, optioneel) **Doel:** Afspraken koppelen aan cliΓ«nt voor planning en follow-up. **Functionaliteit:** - Kalenderweergave (week of maand) - **Nieuwe afspraak:** - Datum/tijd picker - Type afspraak (dropdown): Intake | Evaluatie | Behandeling - Locatie (optioneel) - Notities (optioneel) - **Weergave in dashboard:** laatste + eerstvolgende 3 afspraken --- ### 4.7 Rapportage (stretch, optioneel) **Doel:** PDF export van volledige cliΓ«ntdossier voor archivering of delen. **Functionaliteit:** - **Knop:** **Exporteer als PDF** in cliΓ«nt-menu - **Inhoud:** - Basisgegevens - Alle intakes (chronologisch) - Probleemprofiel - Behandelplan (gepubliceerde versie) - *(Optioneel)* Afspraken - **Output:** Downloads PDF met professionele opmaak (logo, headers, footers) --- ## 5. UI-overzicht (visuele structuur) ### Globale layout (alle schermen) ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Topbalk: Logo | Breadcrumb | Zoeken | User menu β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Linkernav β”‚ Middenpaneel (content area) β”‚ β”‚ (indien actiefβ”‚ β†’ Dashboard: tegels β”‚ β”‚ in dossier) β”‚ β†’ Intake: editor + AI-rail β”‚ β”‚ β”‚ β†’ Profiel: formulier + suggestie β”‚ β”‚ Overzicht β”‚ β†’ Plan: secties met doelen/interventies β”‚ β”‚ Intakes β”‚ β”‚ β”‚ Profiel β”‚ β”‚ β”‚ Plan β”‚ β”‚ β”‚ (Afspraken) β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Toast area (rechtsonder): meldingen (success/error/info) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### CliΓ«ntenlijst (geen linkernav) ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Topbalk: Logo | Zoeken | [+ Nieuwe cliΓ«nt] β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚ β”‚ CliΓ«ntenlijst β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ ID β”‚ Naam β”‚ Geboortedatum β”‚ Update β”‚ β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚ β”‚ C-001 β”‚ Jan de Vries β”‚ 15-03-1985 β”‚ 2u β”‚ β”‚ β”‚ β”‚ C-002 β”‚ Maria Jansen β”‚ 22-07-1990 β”‚ 1d β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Intake-editor met AI-rail ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Jan de Vries | [Opslaan] [AI-acties β–Ό] β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Overzicht β”‚ Editor β”‚ AI-rail β”‚ β”‚ Intakes ● β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ Profiel β”‚ β”‚ Titel: [.......]β”‚ β”‚ β”‚ AI-resultaat: β”‚ β”‚ β”‚ Plan β”‚ β”‚ Tag: [Intake β–Ό] β”‚ β”‚ β”‚ Samenvatting β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β€’ Punt 1 β”‚ β”‚ β”‚ β”‚ Rich text area... β”‚ β”‚ β€’ Punt 2 β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ [Invoegen] β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ [Annuleren] β”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ [Opslaan] β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Toast: "Verslag opgeslagen" (groen) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` --- ## 6. Interacties met AI (functionele beschrijving) | Locatie | AI-actie | Trigger | Input | Output | Feedback | |----------|-----------|----------|--------|---------|----------| | **Intake-editor** | Samenvatten | Klik op **AI β€Ί Samenvatten** | TipTap JSON (intake-tekst) | 5-8 bullets in NL | Preview in AI-rail β†’ Invoegen/Annuleren | | **Intake-editor** | Leesbaarheid (B1) | Klik op **AI β€Ί Verbeter leesbaarheid** | TipTap JSON | Herschreven tekst (B1-niveau) | Preview in AI-rail β†’ Invoegen/Annuleren | | **Intake-editor** | Extract problemen | Klik op **AI β€Ί Extract problemen** | TipTap JSON | Categorie + severity + rationale + bronzinnen | Suggestie in AI-rail + highlights in editor | | **Probleemprofiel** | Analyseer intake | Klik op **AI β€Ί Analyseer intake** | Intake-tekst (laatste verslag) | Voorgestelde categorie + severity + rationale | Suggestie-paneel rechts β†’ Accepteren/Negeren | | **Behandelplan** | Genereer plan | Klik op **AI β€Ί Genereer behandelplan** | Intake + probleemprofiel | 4 secties (doelen, interventies, frequentie, meetmomenten) | Vult alle secties β†’ bewerkbaar | | **Behandelplan** | Regenereer doel | Klik op **↻** bij specifiek doel | Context (huidige doelen + intake) | Nieuw geformuleerd doel (SMART) | Vervangt huidige doel β†’ bewerkbaar | **AI-processing states:** - **Bezig:** Non-blocking spinner + "Genereren..." tekst - **Succes:** Output verschijnt in preview/suggestie-area - **Fout:** Rode melding "Kon niet verwerken" + retry-knop - **Timeout:** "AI-actie duurde te lang. Probeer opnieuw." **AI-highlights (Extract problemen):** - Bronzinnen krijgen lichtgele achtergrond in editor - Highlights verdwijnen bij: Invoegen, Annuleren, of nieuwe AI-actie - Implementatie: TipTap Decorations API --- ## 7. Gebruikersrollen en rechten **MVP:** Vereenvoudigde autorisatie β€” alle authenticated users hebben volledige toegang (demo-omgeving). | Rol | Toegang tot | Beperkingen | Implementatie | |------|--------------|-------------|---------------| | **Demo-user** (MVP) | Alle cliΓ«ntdossiers, alle functies | Alleen fictieve data | Supabase Auth, RLS policy: `auth.uid() IS NOT NULL` | **Post-MVP (Roadmap):** | Rol | Toegang tot | Beperkingen | |------|--------------|-------------| | **Behandelaar** | Eigen cliΓ«ntdossiers + gedeelde dossiers | Kan alleen eigen dossiers bewerken | | **Manager** | Alle dossiers (read-only) | Geen bewerkingen, alleen rapportages | | **Admin** | Alles | Volledige CRUD + gebruikersbeheer | **Toekomstige implementatie:** - Multi-tenant: `org_id` kolom in alle tables - RLS policies: `auth.jwt() ->> 'org_id' = org_id` - Role-based access: `auth.jwt() ->> 'role'` checks --- ## 8. UX-specificaties (koppeling met stylesheet) **Kleurgebruik (zie `/docs/ux-stylesheet.md`):** - **Primary actions:** `#3B82F6` (blauw) β€” Opslaan, Publiceren, Invoegen - **Secondary actions:** `#334155` (grijs) β€” Annuleren, Terug - **Success feedback:** `#16A34A` (groen) β€” toasts, badges - **Warning/Concept:** `#EAB308` (geel) β€” concept-status - **Error:** `#DC2626` (rood) β€” foutmeldingen **Module-accenten:** - Afspraken: groen (`#E8F8EF` bg, `#16A34A` accent) - Medicatie/Herinneringen: geel (`#FEF6DC` bg, `#F59E0B` accent) - Lab/Resultaten: oranje (`#FFEBDC` bg, `#F97316` accent) **Toegankelijkheid:** - Alle tekst voldoet aan WCAG AA contrast (min. 4.5:1) - Focus rings altijd zichtbaar (2px `#3B82F6`) - Keyboard navigation volledig ondersteund - Status niet alleen met kleur: iconen + labels combineren --- ## 9. Demo-scenario (10 minuten) **Voorbereiding:** Database seeden met 2-3 fictieve cliΓ«nten (1 met partial data, 1 leeg). ### Flow A: Nieuwe cliΓ«nt β†’ Intake β†’ AI Samenvatten (4 min) 1. **Start:** CliΓ«ntenlijst (0:00) 2. Klik **+ Nieuwe cliΓ«nt** β†’ vul in: "Test Demo", "Testpersoon", "01-01-1990" β†’ Opslaan (0:30) 3. Navigeer naar nieuwe cliΓ«nt β†’ klik **Intakes** tab (0:45) 4. Klik **+ Nieuw verslag** β†’ typ demo-intake (vooraf geprepareerde tekst plakken) (1:30) 5. Klik **AI β€Ί Samenvatten** β†’ toon preview in AI-rail (2:00) 6. Klik **Invoegen** β†’ samenvatting verschijnt in editor (2:30) 7. Klik **Opslaan** β†’ toast "Verslag opgeslagen" (3:00) ### Flow B: Probleemprofiel genereren β†’ AI suggestie (3 min) 8. Klik **Probleemprofiel** tab (3:15) 9. Klik **AI β€Ί Analyseer intake** β†’ toon suggestie (categorie, severity, rationale) (4:00) 10. Highlights verschijnen in editor (source highlighting demo) (4:30) 11. Klik **Accepteer suggestie** β†’ vult formulier (4:45) 12. Klik **Opslaan** β†’ groene toast + Behandelplan tab wordt actief (5:00) ### Flow C: Behandelplan genereren β†’ Bewerken β†’ Publiceren (3 min) 13. Klik **Behandelplan** tab (5:15) 14. Klik **AI β€Ί Genereer behandelplan** β†’ toon alle vier secties (6:00) 15. Bewerk één doel handmatig β†’ auto-save indicator (6:45) 16. Klik **Publiceer v1** β†’ status wijzigt naar "Gepubliceerd" (7:30) 17. Navigeer terug naar **Overzicht** β†’ toon dashboard met tegels (8:00) 18. **(Optioneel)** Demo PDF export (8:30) **Afsluiting:** Q&A + discussie AI-toegevoegde waarde (8:30-10:00) --- ## 10. Bijlagen & Referenties **Gerelateerde documenten:** - [PRD (Product Requirements Document)](./prd-mini-ecd.md) - [TO (Technisch Ontwerp)](./to-mini-ecd.md) - [UX/UI Stylesheet](./ux-stylesheet.md) - [API Access Document](./api-acces-mini-ecd.md) **Externe referenties:** - TipTap editor: https://tiptap.dev - Supabase documentatie: https://supabase.com/docs - Next.js App Router: https://nextjs.org/docs/app - Claude AI API: https://docs.anthropic.com/claude/reference --- **Wijzigingslog:** - v1.0 (09-11-2025): InitiΓ«le versie voor MVP demo