feat: add docs chat widget UI components (E3)

- Add useDocsChat hook with message state, streaming, error handling
- Add ChatMessages component with auto-scroll and streaming cursor
- Add ChatInput component with Enter/Shift+Enter support
- Add DocsChatWidget floating container with amber styling
- Add AI integration specs (PRD, FO, bouwplan)

Implements Epic 3 of AI Documentatie Assistent feature.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
colinislit
2025-12-01 15:45:44 +01:00
parent 183021718a
commit 4775497dc7
9 changed files with 2036 additions and 0 deletions

View File

@@ -0,0 +1,349 @@
# 📄 Product Requirements Document (PRD) — AI Pre-fill Behandelplan
**Projectnaam:** Mini-ECD AI Pre-fill Behandelplan
**Versie:** v1.0
**Datum:** 30-11-2025
**Auteur:** Colin Lit
**Status:** Draft Ready for Review
---
## 1. Doelstelling
🎯 **Doel van deze sectie:** Beschrijf waarom dit product wordt gebouwd en wat het beoogde resultaat is.
📘 **Toelichting:** Een intelligent pre-fill systeem dat automatisch behandelplanconcepten genereert op basis van intake-notities en probleemprofielen. De focus ligt op het drastisch verminderen van administratieve last terwijl klinische kwaliteit behouden blijft.
> **Kernbelofte:** Van 30+ minuten handmatig behandelplan schrijven naar <5 minuten review en publiceren.
**Type:** MVP Feature binnen Mini-ECD Prototype (Week 3-4 AI Speedrun)
---
## 2. Doelgroep
🎯 **Doel:** Schets wie de eindgebruikers en stakeholders zijn.
### Primaire gebruikers
| Rol | Behoefte | Pijnpunt nu |
|-----|----------|-------------|
| **GGZ Behandelaar** | Snel bruikbaar behandelplan | 30+ min typen per plan |
| **Regiebehandelaar** | Review & accorderen | Wachten op aanlevering |
### Secundaire stakeholders
- **Demo-bezoekers:** Product owners/managers die AI-mogelijkheden willen zien
- **Developers:** Technische professionals geïnteresseerd in AI-integratie patterns
- **Zorgverzekeraars:** (toekomst) Compliance met zorgstandaarden
---
## 3. Kernfunctionaliteiten (MVP-scope)
🎯 **Doel:** Afbakenen van de minimale werkende functies.
### 3.1 Automatische Draft Generatie
| Aspect | Specificatie |
|--------|--------------|
| **Trigger** | Probleemprofiel opgeslagen → AI genereert draft |
| **Input** | Intake-notities + DSM-categorie + Severity |
| **Output** | Concept behandelplan (4 secties) |
| **Timing** | On-demand bij navigatie naar Behandelplan tab |
### 3.2 SMART Doelen Generatie
1. AI extraheert concrete klachten uit intake-notities
2. Genereert 2-4 SMART-doelen afgestemd op DSM-categorie en severity
3. Elk doel bevat:
- **S**pecifiek gedrag/situatie
- **M**eetbaar criterium (frequentie, intensiteit)
- **A**cceptabel voor cliënt
- **R**ealistisch binnen behandelkader
- **T**ijdgebonden (X weken)
**Voorbeeld output:**
> "Cliënt ervaart maximaal 1 paniekaanval per week (nu: 3x/week) binnen 8 weken behandeling"
### 3.3 Evidence-based Interventie Mapping
| DSM-Categorie | Primaire Interventies | Severity → Intensiteit |
|---------------|----------------------|------------------------|
| Angststoornissen | CGT, Exposure, ACT | Hoog → 12-16 sessies |
| Stemmingsklachten | CGT, IPT, Gedragsactivatie | Middel → 8-12 sessies |
| Trauma/PTSS | EMDR, Narratieve therapie | Hoog → 12+ sessies |
| Persoonlijkheid | Schematherapie, MBT | Hoog → 20+ sessies |
### 3.4 Micro-AI Regeneratie
- Per sectie/item een **[↻ Regenereer]** knop
- Behandelaar kan specifieke onderdelen laten hergenereren
- Behoudt context van overige secties
- Optioneel: korte instructie meegeven ("maak concreter", "focus op werk")
### 3.5 *(Stretch)* ROM Score Integratie
- Indien ROM-scores beschikbaar: meenemen in doelbepaling
- Baseline scores automatisch toevoegen aan meetmomenten
- Suggestie voor ROM-instrument bij evaluatiemomenten
---
## 4. Gebruikersflows (Demo- en MVP-flows)
🎯 **Doel:** Laten zien hoe de gebruiker stap-voor-stap door het systeem gaat.
### Flow 1: Happy Path — Intake → Behandelplan
```
┌─────────────────────────────────────────────────────────────┐
│ 1. Behandelaar voltooit intake en slaat notities op │
│ ↓ │
│ 2. Klikt [AI Analyseer intake] │
│ ↓ │
│ 3. Probleemprofiel wordt gegenereerd (DSM + Severity) │
│ ↓ │
│ 4. Accepteert/bewerkt profiel → Slaat op │
│ ↓ │
│ 5. Navigeert naar Behandelplan tab │
│ ↓ │
│ 6. Ziet: "⚡ AI heeft een concept klaargezet" │
│ ↓ │
│ 7. Reviewt SMART-doelen, past aan indien nodig │
│ ↓ │
│ 8. Klikt [Accepteer & Publiceer] → Plan v1 actief │
└─────────────────────────────────────────────────────────────┘
```
**Doorlooptijd:** < 3 minuten (vs. 30+ minuten traditioneel)
### Flow 2: Regeneratie van specifiek onderdeel
1. Behandelaar vindt Doel 2 niet passend
2. Klikt **[↻ Regenereer]** bij Doel 2
3. AI genereert alternatief doel met zelfde context
4. Behandelaar selecteert nieuw voorstel of bewerkt handmatig
### Flow 3: Handmatige start (geen AI)
1. Behandelaar opent Behandelplan zonder probleemprofiel
2. Ziet melding: *"Geen concept beschikbaar. Vul eerst probleemprofiel in of start handmatig."*
3. Keuze: **[Naar Probleemprofiel]** of **[Start leeg plan]**
---
## 5. Niet in Scope
🎯 **Doel:** Duidelijk maken wat (nog) niet wordt gebouwd.
| Feature | Reden |
|---------|-------|
| Volledige DSM-5 classificatie | Alleen DSM-light (6 categorieën) voor prototype |
| Multi-disciplinaire plannen (MDO) | Complexiteit, geen meerwaarde voor demo |
| DBC/ZPM declaratie-koppeling | Vereist externe integraties |
| Real-time collaboration | Technisch complex, lage prioriteit |
| Volledige ROM-vragenlijst afname | Alleen scores indien al beschikbaar |
| Productie audit logging | Demo-only, geen compliance vereist |
| Meerdere AI providers | Alleen Claude voor nu |
---
## 6. Succescriteria
🎯 **Doel:** Objectieve meetlat voor een geslaagde oplevering.
| Criterium | Target | Meetmethode |
|-----------|--------|-------------|
| **AI Response Time** | < 5 seconden | Console timing |
| **Draft Kwaliteit** | ≥ 80% bruikbaar zonder grote edits | User feedback |
| **Tijdsbesparing** | Van 30+ min → < 5 min | Stopwatch demo |
| **Demo Doorlooptijd** | Intake → Plan in < 3 min | Live demo |
| **Error Rate** | < 5% API failures | Error logging |
| **User Acceptance** | Min. 2 testers positief | Feedback forms |
---
## 7. Risico's & Mitigatie
🎯 **Doel:** Risico's vroeg signaleren en plannen hoe ermee om te gaan.
| Risico | Impact | Mitigatie |
|--------|--------|-----------|
| **AI output klinisch onbruikbaar** | 🔴 Hoog | Prompts testen met GGZ-professionals; few-shot examples; "AI Concept" label |
| **Hallucinaties in doelen/interventies** | 🟡 Middel | Strikte JSON schema validatie; verplichte menselijke review |
| **API rate limits / kosten** | 🟡 Middel | Caching van drafts; prompt optimalisatie voor tokens |
| **Trage response (>10s)** | 🟡 Middel | Streaming response; skeleton loaders; timeout handling |
| **Scope creep ("nog even dit erbij")** | 🟡 Middel | Strikte PRD; "Post-MVP" parkeren |
| **Privacy concerns demo-data** | 🟢 Laag | Alleen fictieve cliëntdata gebruiken |
---
## 8. Roadmap / Vervolg (Post-MVP)
🎯 **Doel:** Richting geven aan toekomstige uitbreidingen.
### Fase 2: Enhanced AI (Q1 2026)
1. **Background Generation** — Draft al genereren bij opslaan probleemprofiel
2. **Template Bibliotheek** — Voorgedefinieerde templates per diagnose
3. **Prompt Tuning** — A/B testen van verschillende prompt strategieën
### Fase 3: Clinical Intelligence (Q2 2026)
4. **Sessie-over-Sessie Tracking** — AI vergelijkt voortgang vs. doelen
5. **ROM Integratie** — Automatische vragenlijst afname en scoring
6. **Risico Detectie** — Flagging bij zorgwekkende patronen
### Fase 4: Compliance & Scale (Q3 2026)
7. **Zorgstandaard Compliance** — Check tegen GGZ richtlijnen
8. **Multi-provider Support** — OpenAI/Gemini fallback
9. **Audit Trail** — Volledige logging voor verantwoording
---
## 9. Bijlagen & Referenties
🎯 **Doel:** Bronnen koppelen voor context en consistentie.
### Project Documentatie
- PRD Mini-ECD v1.2 (`prd-mini-ecd-v1_2.md`)
- Functioneel Ontwerp v2 (`fo-mini-ecd-v2.md`)
- Technisch Ontwerp (`to-mini-ecd-v1_2.md`)
- UX Stylesheet (`ux-stylesheet.md`)
- Live Transcriptie FO (`fo-live-transcriptie-v1.md`)
- FHIR GGZ Schema (`20241121_fhir_ggz_schema.sql`)
### Externe Referenties
- [Claude API Documentation](https://docs.anthropic.com)
- [GGZ Zorgstandaarden](https://www.ggzstandaarden.nl)
- [SMART Doelen Framework](https://www.ggzstandaarden.nl/generieke-modules/individueel-zorgplan)
---
## Appendix A: Technische Specificatie
### A.1 Data Flow
```
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Intake Notities │────▶│ │────▶│ Behandelplan │
│ (document_ref) │ │ Claude API │ │ Draft (JSONB) │
├──────────────────┤ │ │ ├──────────────────┤
│ Probleemprofiel │────▶│ /v1/messages │ │ - doelen[] │
│ (DSM + Severity)│ │ │ │ - interventies[]│
└──────────────────┘ └──────────────────┘ │ - frequentie │
│ - meetmomenten[]│
└──────────────────┘
```
### A.2 API Endpoint
```
POST /api/ai/generate-behandelplan
```
**Request:**
```json
{
"clientId": "uuid",
"intakeIds": ["uuid", "uuid"],
"probleemProfiel": {
"categorie": "Angststoornissen",
"severity": "Hoog",
"opmerkingen": "Paniekaanvallen 3x/week, vermijding openbare ruimtes"
}
}
```
**Response:**
```json
{
"success": true,
"draft": {
"doelen": [
{
"id": "doel-1",
"tekst": "Frequentie paniekaanvallen verminderen van 3x/week naar max 1x/week",
"tijdslimiet": "8 weken",
"meetbaar": "Dagboekregistratie"
}
],
"interventies": [
{
"id": "int-1",
"naam": "Cognitieve Gedragstherapie (CGT)",
"sessies": 12,
"rationale": "Evidence-based voor paniekstoornis"
}
],
"frequentie": "Wekelijks, 50 minuten per sessie",
"meetmomenten": [
{ "moment": "Baseline", "week": 0 },
{ "moment": "Tussentijds", "week": 4 },
{ "moment": "Tussentijds", "week": 8 },
{ "moment": "Afsluiting", "week": 12 }
]
},
"metadata": {
"model": "claude-sonnet-4-20250514",
"tokens_used": 1847,
"generation_time_ms": 3200
}
}
```
### A.3 Claude Prompt Template (Conceptueel)
```
Je bent een ervaren GGZ-behandelaar die behandelplannen opstelt volgens
de Nederlandse zorgstandaarden.
## Context
- Intake notities: {intakeContent}
- DSM-categorie: {categorie}
- Severity: {severity}
- Aanvullende opmerkingen: {opmerkingen}
## Opdracht
Genereer een behandelplan concept met:
1. **SMART Doelen** (2-4 stuks)
- Specifiek, Meetbaar, Acceptabel, Realistisch, Tijdgebonden
- Gebaseerd op de hoofdklachten uit de intake
2. **Interventies**
- Evidence-based methoden passend bij de diagnose
- Inclusief geschat aantal sessies
3. **Frequentie en Duur**
- Behandelintensiteit afgestemd op severity
4. **Meetmomenten**
- Evaluatieschema voor voortgangsbewaking
## Output Format
Antwoord ALLEEN met valid JSON volgens het schema.
```
---
## Appendix B: UI States
### Behandelplan Tab States
| State | Weergave | Actie |
|-------|----------|-------|
| **Geen profiel** | "Vul eerst probleemprofiel in" | [Naar Profiel] |
| **Generating** | Skeleton loader + "AI genereert..." | Wacht |
| **Draft ready** | "⚡ AI Concept" badge + content | Review/Edit |
| **Error** | "Genereren mislukt" + retry | [Probeer opnieuw] |
| **Concept** | Oranje badge, bewerkbaar | [Publiceer] |
| **Gepubliceerd** | Groene badge, read-only | [Nieuwe versie] |
---
*Document gegenereerd als onderdeel van AI Speedrun — Week 3*