# 🧩 Functioneel Ontwerp (FO) – AI CliΓ«nt Assistent **Projectnaam:** Mini-ECD – AI CliΓ«nt Assistent **Versie:** v1.0 **Datum:** 01-12-2025 **Auteur:** Colin Lit --- ## 1. Doel en relatie met het PRD **Doel van dit document:** Dit FO beschrijft hoe de AI CliΓ«nt Assistent functioneel werkt vanuit gebruikersperspectief. Het PRD beschrijft *wat* we bouwen (cliΓ«nt-aware chat), dit FO laat zien *hoe* de gebruiker dit ervaart. **Scope (prototype):** Gebaseerd op de huidige data in het EPD: - **21 rapportages** (16 vrije notities, 5 behandeladviezen) - **9 intakes** (7 Volwassenen, 1 Jeugd) - **5 screenings** (1 geschikt, 1 niet geschikt, 3 open) - **0 risico-assessments** (tabel bestaat, geen data) --- ## 2. Overzicht van de onderdelen | Onderdeel | Beschrijving | Status | |-----------|--------------|--------| | **Chat Widget** | Bestaande floating widget rechtsonder | Uitbreiden | | **CliΓ«nt Indicator** | Header die toont welke cliΓ«nt actief is | Nieuw | | **CliΓ«nt Suggesties** | Voorbeeldvragen over de actieve cliΓ«nt | Nieuw | | **Vraagtype Detectie** | Herkent of vraag over cliΓ«nt of systeem gaat | Nieuw | --- ## 3. User Stories | ID | Rol | Doel / Actie | Verwachte waarde | Prioriteit | |----|-----|--------------|------------------|------------| | US-01 | Behandelaar | Samenvatting van rapportages opvragen | Snel overzicht voor consult | Hoog | | US-02 | Behandelaar | Behandeladvies opvragen | Inzicht in geadviseerde zorg | Hoog | | US-03 | Verpleegkundige | Recente notities bekijken | Overdracht voorbereiding | Hoog | | US-04 | Intaker | Hulpvraag en screening status opvragen | Intake afronden | Middel | | US-05 | Behandelaar | Documentatie-vraag stellen vanuit dossier | Hulp bij EPD gebruik | Middel | --- ## 4. Functionele werking per onderdeel ### 4.1 Chat Widget (uitgebreid) **Huidige situatie:** - Floating button rechtsonder (amber, sparkles icon) - Beantwoordt alleen documentatie-vragen - Toont 3 categorieΓ«n met voorbeeldvragen **Nieuwe situatie:** - Detecteert automatisch of gebruiker in cliΓ«ntdossier zit - Toont cliΓ«nt-indicator in header wanneer in dossier - Schakelt tussen cliΓ«nt- en documentatie-suggesties - Beantwoordt vragen over de actieve cliΓ«nt ### 4.2 CliΓ«nt Indicator **Locatie:** Header van chat widget, onder "EPD Assistent" **Weergave:** ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ ✨ EPD Assistent β”‚ β”‚ πŸ“‹ Dossier: Jan de Vries β”‚ ← Nieuw: cliΓ«nt indicator β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` **Gedrag:** | Context | Indicator | |---------|-----------| | In cliΓ«ntdossier | `πŸ“‹ Dossier: [CliΓ«ntnaam]` | | Buiten dossier | Geen indicator (alleen "EPD Assistent") | ### 4.3 CliΓ«nt Suggesties **Wanneer tonen:** Bij eerste opening chat in cliΓ«ntdossier, alleen welkomstbericht zichtbaar **CategorieΓ«n en vragen (gebaseerd op beschikbare data):** | Categorie | Icon | Voorbeeldvragen | |-----------|------|-----------------| | **Rapportages** | πŸ“ | "Geef een samenvatting van de rapportages", "Wat is er de laatste tijd genoteerd?", "Zijn er behandeladviezen?" | | **Intake & Behandeling** | πŸ₯ | "Wat is het behandeladvies?", "Op welke afdeling loopt de intake?", "Is de intake afgerond?" | | **Screening** | πŸ“‹ | "Wat was de hulpvraag?", "Wat is de screeningbeslissing?", "Is de cliΓ«nt geschikt bevonden?" | **Interactie:** 1. Gebruiker ziet 3 categorieΓ«n (knoppen) 2. Klik op categorie β†’ toont 3 voorbeeldvragen 3. Klik op vraag β†’ vraag wordt direct verstuurd 4. "Terug" knop om naar categorieΓ«n te gaan ### 4.4 Vraagtype Detectie **Doel:** Bepalen of een vraag over de cliΓ«nt of over het systeem gaat **Gedrag:** | Vraag | Detectie | Actie | |-------|----------|-------| | "Geef een samenvatting van de rapportages" | CliΓ«nt | Beantwoord met cliΓ«ntdata | | "Hoe maak ik een intake aan?" | Documentatie | Beantwoord met systeemdocumentatie | | "Wat zijn de risico's?" | CliΓ«nt | Beantwoord met cliΓ«ntdata (of "geen data") | | "Hoe werkt de spraakherkenning?" | Documentatie | Beantwoord met systeemdocumentatie | **Edge cases:** | Situatie | Gedrag | |----------|--------| | Ambigue vraag in dossier | Default naar documentatie, toon hint | | CliΓ«nt-vraag buiten dossier | "Open eerst een cliΓ«ntdossier om vragen te stellen" | | Data ontbreekt | "Er zijn nog geen [rapportages/risico's] voor deze cliΓ«nt" | --- ## 5. UI-overzicht ### 5.1 Chat Widget Layout ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ ✨ EPD Assistent [X] β”‚ ← Header β”‚ πŸ“‹ Dossier: Jan de Vries β”‚ ← CliΓ«nt indicator (nieuw) β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚ β”‚ [Welkomstbericht] β”‚ ← Messages area β”‚ β”‚ β”‚ [Gebruiker vraag] β†’ β”‚ β”‚ [Assistent antwoord] ← β”‚ β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Kies een onderwerp: β”‚ ← Suggesties (context-aware) β”‚ [πŸ“ Rapportages] β”‚ β”‚ [πŸ₯ Intake & Behandeling] β”‚ β”‚ [πŸ“‹ Screening] β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ [Typ een vraag... ] [Send] β”‚ ← Input β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### 5.2 Suggestie Flow (twee stappen) **Stap 1: CategorieΓ«n** ``` Kies een onderwerp: β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ πŸ“ Rapportages β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ πŸ₯ Intake & Behandeling β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ πŸ“‹ Screening β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` **Stap 2: Vragen (na klik op categorie)** ``` ← Terug πŸ“ Rapportages β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Geef een samenvatting van de β”‚ β”‚ rapportages β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Wat is er de laatste tijd genoteerd?β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Zijn er behandeladviezen? β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### 5.3 Context Switching | Locatie in EPD | Chat Gedrag | |----------------|-------------| | Dashboard (geen cliΓ«nt) | Documentatie-modus, standaard suggesties | | CliΓ«ntdossier | CliΓ«nt-modus, cliΓ«nt-indicator, cliΓ«nt-suggesties | | CliΓ«nt β†’ Dashboard | Terug naar documentatie-modus | --- ## 6. Interacties met AI ### 6.1 CliΓ«nt-vragen | Vraag | AI Context | Verwacht Antwoord | |-------|------------|-------------------| | "Samenvatting rapportages" | Laatste 5 reports | Bullets per rapportage met datum en type | | "Wat is het behandeladvies?" | intakes.treatment_advice | Advies, programma, afdeling | | "Wat was de hulpvraag?" | screenings.request_for_help | Hulpvraag tekst of "niet ingevuld" | | "Zijn er risico's?" | risk_assessments (leeg) | "Er zijn nog geen risico-assessments" | ### 6.2 Voorbeeld Antwoorden **Vraag: "Geef een samenvatting van de rapportages"** ``` De laatste rapportages voor Jan de Vries: πŸ“ 28-11-2025 - Vrije notitie CliΓ«nt ervaart stemming als overwegend somber, maar benoemt ook positieve momenten tijdens sport. Slaapproblemen blijven aandachtspunt. πŸ“ 25-11-2025 - Vrije notitie Gesprek over terugvalpreventie. CliΓ«nt toont inzet en motivatie. πŸ“‹ 22-11-2025 - Behandeladvies Doorzetten naar behandeling, FACT programma, afdeling Volwassenen. ``` **Vraag: "Wat is het behandeladvies?"** ``` Het behandeladvies voor Jan de Vries: β€’ Advies: Doorzetten naar behandeling β€’ Programma: FACT β€’ Afdeling: Volwassenen β€’ Uitkomst: In zorg Dit advies is vastgelegd bij intake "Intake Depressie" (afgerond). ``` **Vraag: "Wat zijn de risico's?"** ``` Er zijn nog geen risico-assessments vastgelegd voor Jan de Vries. Risico-assessments kunnen worden toegevoegd via de intake of het tabblad 'Risico's' in het cliΓ«ntdossier. ``` ### 6.3 Foutafhandeling | Situatie | Gebruiker ziet | |----------|----------------| | Geen rapportages | "Er zijn nog geen rapportages voor [naam]" | | API error | "Er ging iets mis. Probeer het opnieuw." | | Rate limit bereikt | Countdown timer + uitleg (bestaand) | --- ## 7. Gebruikersrollen en rechten **Prototype scope:** Alle ingelogde gebruikers hebben dezelfde rechten. | Rol | Toegang Chat | CliΓ«nt Data | |-----|--------------|-------------| | Behandelaar | βœ… | Eigen cliΓ«nten (via RLS) | | Demo-user | βœ… | Fictieve demo-cliΓ«nten | **Security:** - CliΓ«nt-ID komt uit URL/PatientContext (betrouwbaar) - RLS policies op database niveau - Geen cliΓ«ntdata in logs --- ## 8. Configuratie Suggesties ### 8.1 CliΓ«nt Suggesties (nieuw) ```typescript const CLIENT_SUGGESTION_CATEGORIES = [ { id: 'rapportages', label: 'Rapportages', icon: 'πŸ“', questions: [ 'Geef een samenvatting van de rapportages', 'Wat is er de laatste tijd genoteerd?', 'Zijn er behandeladviezen?', ], }, { id: 'intake', label: 'Intake & Behandeling', icon: 'πŸ₯', questions: [ 'Wat is het behandeladvies?', 'Op welke afdeling loopt de intake?', 'Is de intake afgerond?', ], }, { id: 'screening', label: 'Screening', icon: 'πŸ“‹', questions: [ 'Wat was de hulpvraag?', 'Wat is de screeningbeslissing?', 'Is de cliΓ«nt geschikt bevonden?', ], }, ] ``` ### 8.2 Documentatie Suggesties (bestaand, behouden) ```typescript const DOC_SUGGESTION_CATEGORIES = [ { id: 'clienten', label: 'CliΓ«nten & Dossiers', icon: 'πŸ‘€', questions: [ 'Hoe maak ik een nieuwe cliΓ«nt aan?', 'Hoe zoek ik een bestaande cliΓ«nt?', 'Hoe open ik een cliΓ«ntdossier?', ], }, // ... bestaande categorieΓ«n ] ``` --- ## 9. Acceptatiecriteria ### 9.1 Functioneel | Criterium | Test | |-----------|------| | CliΓ«nt-indicator toont correcte naam | Open dossier β†’ check header | | CliΓ«nt-suggesties verschijnen in dossier | Open chat in dossier β†’ zie 3 categorieΓ«n | | Documentatie-suggesties buiten dossier | Open chat op dashboard β†’ zie bestaande categorieΓ«n | | Vraag over rapportages werkt | Stel vraag β†’ ontvang samenvatting | | Ontbrekende data wordt gemeld | Vraag naar risico's β†’ "geen data" bericht | ### 9.2 Niet-functioneel | Criterium | Target | |-----------|--------| | Eerste antwoord | < 3 seconden | | Context laden | < 200ms | | Correcte cliΓ«nt | 100% (via URL) | --- ## 10. Bijlagen & Referenties ### Projectdocumenten | Document | Locatie | |----------|---------| | PRD | `docs/specs/ai-integratie/prd-ai-client-assistent-v1.md` | | TO | `docs/specs/ai-integratie/to-ai-client-assistent-v1.md` | | Bestaande chat widget | `components/docs-chat/docs-chat-widget.tsx` | | Bestaande suggesties | `components/docs-chat/chat-suggestions.tsx` | ### Data beschikbaarheid (prototype) | Tabel | Rows | Bruikbaar voor vragen | |-------|------|----------------------| | reports | 21 | βœ… Samenvatting rapportages | | intakes | 9 | βœ… Behandeladvies, status | | screenings | 5 | βœ… Hulpvraag, beslissing | | risk_assessments | 0 | ⚠️ "Geen data" response | --- ## Versiehistorie | Versie | Datum | Auteur | Wijziging | |--------|-------|--------|-----------| | v1.0 | 01-12-2025 | Colin Lit | InitiΓ«le versie, prototype scope |