fix: resolve MDX type imports for release notes

Fixed runtime error in release notes pages:
- Removed unused MDXRemote import from lib/mdx/releases.ts
- Fixed MDXComponents type import in mdx-components.tsx
- Added @types/mdx as dev dependency

Pages now load correctly:
- /releases (overview)
- /releases/authentication
- /releases/release-notes-system

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
colinislit
2025-11-19 21:16:45 +01:00
parent bae2737bd5
commit f8904db3e9
15 changed files with 1072 additions and 202 deletions

View File

@@ -6,10 +6,7 @@
import Image from 'next/image' import Image from 'next/image'
import Link from 'next/link' import Link from 'next/link'
import type { MDXComponents } from 'mdx/types'
type MDXComponents = {
[key: string]: React.ComponentType<any>
}
export const mdxComponents: MDXComponents = { export const mdxComponents: MDXComponents = {
// Headings with anchor links // Headings with anchor links

View File

@@ -8,31 +8,61 @@
--- ---
## Layout Components (Consistent across all views) ## Navigation Architecture
### Two-Level Context System
**LEVEL 1: Behandelaar Context** (No client selected)
- Sidebar shows: Dashboard | Cliënten | Agenda | Rapportage
- Header: No client dropdown (or disabled/empty)
- Focus: Behandelaar's caseload, tasks, and global views
**LEVEL 2: Client Dossier Context** (Client selected)
- Sidebar shows: ← Cliënten | Dashboard | Intake | Diagnose | Behandelplan | Rapportage
- Header: Shows selected client with dropdown "Bas Jansen ▼"
- Focus: Individual client data and treatment information
**Context Switch Trigger:**
- Clicking a client row in the cliënten lijst switches from Level 1 → Level 2
- Clicking "← Cliënten" in sidebar switches from Level 2 → Level 1
---
## Layout Components
### Header Bar (Fixed, 60px height) ### Header Bar (Fixed, 60px height)
- Background: White with subtle bottom border - Background: White with subtle bottom border
- Padding: 16px vertical, 24px horizontal - Padding: 16px vertical, 24px horizontal
- Layout (flex, space-between): - Layout (flex, space-between):
- **Left**: "Mini-ECD" text/logo (medium weight) - **Left**: "Mini-ECD" text/logo (medium weight)
- **Center**: Client dropdown "Bas Jansen ▼" (clickable) - **Center**: Context-aware client selector
- **In Behandelaar Context**: Empty or behandelaar name (optional)
- **In Client Dossier Context**: Client dropdown "Bas Jansen ▼" (clickable)
- Sub-text below: "ID: CL0002 | Geb: 20-11-1992" (small, muted) - Sub-text below: "ID: CL0002 | Geb: 20-11-1992" (small, muted)
- Dropdown shows recent clients for quick switching
- **Right**: Search input "Zoek cliënt..." with icon (rounded, light border) - **Right**: Search input "Zoek cliënt..." with icon (rounded, light border)
- Always available for quick client lookup
### Sidebar (Fixed left, 240px width) ### Sidebar (Fixed left, 240px width)
- Background: Very light gray - Background: Very light gray
- Padding: 16px - Padding: 16px
**Top section (when in client dossier):** **Context-Aware Navigation:**
- "← Cliënten" button (full width, left-aligned, subtle hover)
- Subtle horizontal divider (8px margin bottom)
**Menu items:** **BEHANDELAAR CONTEXT (Level 1) - No client selected:**
- Dashboard (icon + text) - Dashboard (icon + text) → Behandelaar dashboard (caseload, taken, aandachtspunten)
- Intakes (icon + text) - Cliënten (icon + text) → Caseload overzicht met zoek/filter
- Probleemprofiel (icon + text) - Agenda (icon + text) → Behandelaar agenda (alle afspraken)
- Behandelplan (icon + text) - Rapportage (icon + text) → BI dashboards en statistieken
- Agenda (icon + text)
**CLIENT DOSSIER CONTEXT (Level 2) - Client selected:**
- "← Cliënten" button (full width, left-aligned, subtle hover) → Terug naar behandelaar context
- Subtle horizontal divider (8px margin bottom)
- Dashboard (icon + text) → Client dossier overzicht (afgelopen/komende afspraken)
- Intake (icon + text) → Intake gesprekken en notities
- Diagnose (icon + text) → DSM-classificatie, probleemprofiel
- Behandelplan (icon + text) → Doelen, interventies, planning
- Rapportage (icon + text) → Client-specifieke voortgang en metrics
**Styling:** **Styling:**
- Each item: 12px padding vertical, 12px padding horizontal - Each item: 12px padding vertical, 12px padding horizontal
@@ -49,15 +79,45 @@
--- ---
## Screen 1: Cliënten (Search/List View) ## LEVEL 1 SCREENS: Behandelaar Context
### Sidebar (different in this view) ---
- No "← Cliënten" button (we're already here)
- Menu items: ## Screen 1A: Behandelaar Dashboard
- Dashboard (global, for practitioner)
- **Cliënten** ← ACTIVE ### Sidebar
- Agenda (global, all appointments) - **Dashboard** ← ACTIVE
- Rapportage (global, statistics) - Cliënten
- Agenda
- Rapportage
### Main Content
**Page title:** "Dashboard" (large, semi-bold)
**Subtitle:** "Welkom terug, [Behandelaar naam]" (optional)
**Content (to be further defined):**
- Caseload overzicht (aantal actieve cliënten, wachtlijst, etc.)
- Aandachtspunten (urgente taken, follow-ups)
- Behandelplannen die nog niet definitief zijn
- Berichten en notificaties
- Recente activiteit
- Aankomende afspraken (vandaag/deze week)
**Note:** Detailed content and layout to be specified in later iteration.
---
## Screen 1B: Cliënten (Search/List View)
### Sidebar
- Dashboard
- **Cliënten** ← ACTIVE
- Agenda
- Rapportage
### Header
- No client dropdown in center (behandelaar context)
- Search bar available in top right
### Main Content ### Main Content
**Top bar:** **Top bar:**
@@ -65,12 +125,21 @@
- Button: "+ Nieuwe Cliënt" (primary style, right) - Button: "+ Nieuwe Cliënt" (primary style, right)
- Space-between layout - Space-between layout
**Search bar (below title):** **Search & Filter bar (below title):**
- Full-width input field - Full-width input field
- Placeholder: "Zoek op naam, BSN, of cliënt ID..." - Placeholder: "Zoek op naam, BSN, of cliënt ID..."
- Icon: magnifying glass left side - Icon: magnifying glass left side
- Filter options (to be specified):
- Afdeling filter
- Team filter
- Status filter (Actief, Wachtlijst, Afgesloten)
- 16px margin bottom - 16px margin bottom
**Recent clients section (optional):**
- "Recent bekeken" subtitle (small, muted)
- 3-5 most recent client cards (compact)
- Horizontal scroll or grid
**Client list (table/card hybrid):** **Client list (table/card hybrid):**
Header row: Header row:
@@ -116,7 +185,8 @@ Row 3:
│Dashboard │ Cliënten [+ Nieuwe Cliënt] │ │Dashboard │ Cliënten [+ Nieuwe Cliënt] │
│Cliënten ← │ │ │Cliënten ← │ │
│Agenda │ [Zoek op naam, BSN, of cliënt ID] │ │Agenda │ [Zoek op naam, BSN, of cliënt ID] │
│Rapportage │ │Rapportage │ [Filters: Afdeling, Team, Status]
│ │ │
│ │ Naam ID Geb Status │ │ │ Naam ID Geb Status │
│ │ ────────────────────────────────── │ │ │ ────────────────────────────────── │
│ │ Bas J. CL0002 20-11 Actief │ │ │ Bas J. CL0002 20-11 Actief │
@@ -125,26 +195,78 @@ Row 3:
└───────────┴─────────────────────────────────────┘ └───────────┴─────────────────────────────────────┘
``` ```
**User action to switch context:**
- Click on a client row (e.g., "Bas Jansen") → Switches to Level 2 (Client Dossier Context)
--- ---
## Screen 2: Dashboard (Client Dossier) ## Screen 1C: Behandelaar Agenda
### Header
- Same as default, but with "Bas Jansen ▼" visible in center
### Sidebar ### Sidebar
- "← Cliënten" button at top - Dashboard
- Horizontal divider - Cliënten
- **Dashboard** ← ACTIVE - **Agenda** ← ACTIVE
- Intakes - Rapportage
- Probleemprofiel
- Behandelplan
- Agenda
### Main Content ### Main Content
**Breadcrumb:** "Dashboard > Overzicht" (small, muted) **Page title:** "Agenda" (large, semi-bold)
**Page title:** "Dashboard Overzicht" (large, semi-bold, 16px margin bottom) **Content (to be further defined):**
- Calendar view (week/month)
- Behandelaar's appointments (all clients)
- Appointment details: time, client, type
- Create new appointment button
**Note:** Detailed content and layout to be specified in later iteration.
---
## Screen 1D: Behandelaar Rapportage
### Sidebar
- Dashboard
- Cliënten
- Agenda
- **Rapportage** ← ACTIVE
### Main Content
**Page title:** "Rapportage" (large, semi-bold)
**Content (to be further defined):**
- BI-style dashboards
- KPI's (aantal cliënten, gemiddelde behandelduur, etc.)
- Trends en statistieken
- Export functionaliteit
**Note:** Detailed content and layout to be specified in later iteration.
---
## LEVEL 2 SCREENS: Client Dossier Context
**Context Switch:** User clicked on a client in the cliënten lijst
---
## Screen 2A: Client Dashboard (Dossier Overzicht)
### Header
- **Center**: "Bas Jansen ▼" dropdown visible
- Sub-text: "ID: CL0002 | Geb: 20-11-1992"
- Dropdown shows recent clients for quick switching
- **Right**: Search bar still available
### Sidebar
- "← Cliënten" button at top (returns to behandelaar context)
- Horizontal divider
- **Dashboard** ← ACTIVE
- Intake
- Diagnose
- Behandelplan
- Rapportage
### Main Content
**Page title:** "Dossier Overzicht" (large, semi-bold, 16px margin bottom)
**Grid layout:** **Grid layout:**
@@ -158,37 +280,41 @@ Column 1 - Cliëntinformatie card:
- Cliënt ID: CL0002 - Cliënt ID: CL0002
- Naam: Bas Jansen - Naam: Bas Jansen
- Geboortedatum: 20-11-1992 - Geboortedatum: 20-11-1992
- Leeftijd: 31 jaar (computed)
- Verzekering: [naam verzekeraar] - Verzekering: [naam verzekeraar]
- BSN: [nummer] - BSN: [nummer]
- Labels: muted, small - Labels: muted, small
- Values: normal weight, darker - Values: normal weight, darker
- Action: "Bewerken →" link (small, at bottom)
Column 2 - Laatste Intake card: Column 2 - Laatste Intake card:
- Card style: same as column 1 - Card style: same as column 1
- Title: "Laatste Intake Notitie" - Title: "Laatste Intake"
- Date/time: "Intake - 12-10-2023" (small, muted) - Date/time: "12-10-2023, 14:30" (small, muted)
- Preview text (3 lines max): - Preview text (3 lines max):
"Bas komt op gesprek vanwege spanningsklachten en paniekeaanvallen. Hij beschrijft situaties in het openbaar vervoer en drukke winkels als triggerend. De aanvallen kenmerken zich door..." "Bas komt op gesprek vanwege spanningsklachten en paniekeaanvallen. Hij beschrijft situaties in het openbaar vervoer en drukke winkels als triggerend..."
- "Lees meer →" link (small, at bottom) - "Bekijk intake →" link (small, at bottom) → navigates to Intake section
Column 3 - Probleemprofiel card: Column 3 - Diagnose card:
- Card style: same as above - Card style: same as above
- Title: "Probleemprofiel" - Title: "Diagnose"
- Status badge: "Hoog" (red/warning bg, red text, rounded pill, inline with title) - Status badge: "Hoog" (red/warning bg, red text, rounded pill, inline with title)
- Subtitle: "Angststoornissen" (medium weight) - Subtitle: "Angststoornissen" (medium weight)
- Description text: - Description text:
"Opmerkingen: Panietstoornis met agorafobie. De frequentie van paniekeaanvallen en het vermijdingsgedrag zijn..." "Panietstoornis met agorafobie. De frequentie van paniekeaanvallen en het vermijdingsgedrag zijn..."
- "Bekijk profiel →" link (small, at bottom) - "Bekijk diagnose →" link (small, at bottom) → navigates to Diagnose section
**Row 2: Full width (margin top: 24px)** **Row 2: Full width (margin top: 24px)**
Behandelplan card: Behandelplan card:
- Card style: same - Card style: same
- Title: "Behandelplan" - Title: "Behandelplan"
- Empty state: - If exists: Show summary with status badge (Concept, Actief, Afgerond)
- If not exists (empty state):
- Light gray background section inside card - Light gray background section inside card
- Centered text: "Geen behandelplan gevonden." - Centered text: "Geen behandelplan gevonden."
- "+ Maak behandelplan" button (secondary style, centered below) - "+ Maak behandelplan" button (secondary style, centered below)
- "Bekijk behandelplan →" link → navigates to Behandelplan section
**Row 3: Full width (margin top: 24px)** **Row 3: Full width (margin top: 24px)**
@@ -197,30 +323,34 @@ Afspraken card:
- Title: "Afspraken" - Title: "Afspraken"
Section 1: Section 1:
- Subtitle: "Laatste Afspraak" (small, muted, 8px margin bottom) - Subtitle: "Afgelopen Afspraak" (small, muted, 8px margin bottom)
- Item: "14-11-2025, 16:26 - Intake" (with subtle icon left) - Item: "14-11-2025, 16:26 - Intake gesprek" (with subtle icon left)
- Shows: type, duration, practitioner (if available)
Divider line (subtle, 16px margin vertical) Divider line (subtle, 16px margin vertical)
Section 2: Section 2:
- Subtitle: "Eerstvolgende 3 Afspraken" (small, muted) - Subtitle: "Komende Afspraken" (small, muted)
- Item 1: "22-11-2025, 16:26 - Psycho-educatie" - Item 1: "22-11-2025, 16:26 - Psycho-educatie"
- Item 2: "29-11-2025, 16:26 - Exposure therapie sessie" - Item 2: "29-11-2025, 16:26 - Exposure therapie sessie"
- Item 3: "06-12-2025, 16:26 - Evaluatie gesprek" - Item 3: "06-12-2025, 16:26 - Evaluatie gesprek"
- Each with subtle left border accent (blue) - Each with subtle left border accent (blue)
- Shows: date, time, type
- If no appointments: "Geen geplande afspraken" (muted text)
**Layout structure:** **Layout structure:**
``` ```
┌──────────────────────────────────────────────────┐ ┌──────────────────────────────────────────────────┐
│ Header: Logo | Bas Jansen ▼ | Search │ │ Header: Logo | Bas Jansen ▼ | Search │
│ | ID: CL0002 | Geb: 20-11-1992 │
├──────────┬───────────────────────────────────────┤ ├──────────┬───────────────────────────────────────┤
│← Cliënten│ Dashboard Overzicht │ │← Cliënten│ Dossier Overzicht
│────── │ │ │────── │ │
│Dashboard │ ┌─────────┬─────────┬──────────┐ │ │Dashboard │ ┌─────────┬─────────┬──────────┐ │
│Intakes │ │ Info │ Intake │ Problem │ │ │Intake │ │ Info │ Intake │ Diagnose │ │
Probleem │ │ Card │ Card │ Card │ │ Diagnose │ │ Card │ Card │ Card │ │
│Behandel │ └─────────┴─────────┴──────────┘ │ │Behandel │ └─────────┴─────────┴──────────┘ │
Agenda │ ┌──────────────────────────────┐ │ Rapport │ ┌──────────────────────────────┐ │
│ │ │ Behandelplan Card │ │ │ │ │ Behandelplan Card │ │
│ │ └──────────────────────────────┘ │ │ │ └──────────────────────────────┘ │
│ │ ┌──────────────────────────────┐ │ │ │ ┌──────────────────────────────┐ │
@@ -231,19 +361,20 @@ Section 2:
--- ---
## Screen 3: Intakes (Client Dossier) ## Screen 2B: Intake (Client Dossier)
### Header ### Header
- Same, "Bas Jansen ▼" in center - **Center**: "Bas Jansen ▼" with ID and birthdate
- **Right**: Search bar available
### Sidebar ### Sidebar
- "← Cliënten" button - "← Cliënten" button (returns to behandelaar context)
- Divider - Divider
- Dashboard - Dashboard
- **Intakes** ← ACTIVE - **Intake** ← ACTIVE
- Probleemprofiel - Diagnose
- Behandelplan - Behandelplan
- Agenda - Rapportage
### Main Content ### Main Content
**Breadcrumb:** "Intakes > Overzicht" **Breadcrumb:** "Intakes > Overzicht"
@@ -296,20 +427,206 @@ Intake item 3:
``` ```
┌──────────────────────────────────────────────────┐ ┌──────────────────────────────────────────────────┐
│ Header: Logo | Bas Jansen ▼ | Search │ │ Header: Logo | Bas Jansen ▼ | Search │
│ | ID: CL0002 | Geb: 20-11-1992 │
├──────────┬───────────────────────────────────────┤ ├──────────┬───────────────────────────────────────┤
│← Cliënten│ Intakes [+ Nieuwe Intake] │ │← Cliënten│ Intake [+ Nieuwe Intake] │
│────── │ │ │────── │ │
│Dashboard │ Datum Type Status Samenvat.. │ │Dashboard │ Datum Type Status Samenvat.. │
│Intakes ← │ ───────────────────────────────── │ │Intake ← │ ───────────────────────────────── │
Probleem │ 12-10 Intake Afgr. Eerste... │ Diagnose │ 12-10 Intake Afgr. Eerste... │
│Behandel │ 05-10 Telef. Afgr. Korte... │ │Behandel │ 05-10 Telef. Afgr. Korte... │
Agenda │ 28-09 Intake Afgr. Geen sh... │ Rapport │ 28-09 Intake Afgr. Geen sh... │
│ │ │ │ │ │
└──────────┴───────────────────────────────────────┘ └──────────┴───────────────────────────────────────┘
``` ```
--- ---
## Screen 2C: Diagnose (Client Dossier)
### Header
- **Center**: "Bas Jansen ▼" with ID and birthdate
- **Right**: Search bar available
### Sidebar
- "← Cliënten" button (returns to behandelaar context)
- Divider
- Dashboard
- Intake
- **Diagnose** ← ACTIVE
- Behandelplan
- Rapportage
### Main Content
**Top bar:**
- Title: "Diagnose & Probleemprofiel" (large, semi-bold, left)
- Button: "AI Analyse" (primary style with sparkles icon, right)
**DSM-light Categorieën:**
- Visual grid/dashboard showing classified problem areas
- Categories:
- Stemming & Depressie (blauw)
- Angst (paars)
- Gedrag & Impuls (rood)
- Middelengebruik (oranje)
- Cognitief (groen)
- Context & Psychosociaal (teal)
**Ernst Indicatie:**
- Visual indicator: Laag (green) | Middel (yellow) | Hoog (red)
- Linked to intake sources (bronverwijzing)
**Content (to be further defined in Week 3):**
- AI-generated classification based on intake notes
- Manual override/editing capability
- Timeline/history of diagnoses
- Notes and observations section
**Layout structure:**
```
┌──────────────────────────────────────────────────┐
│ Header: Logo | Bas Jansen ▼ | Search │
├──────────┬───────────────────────────────────────┤
│← Cliënten│ Diagnose & Probleemprofiel [AI Analyse]│
│────── │ │
│Dashboard │ DSM-light Categorieën: │
│Intake │ ┌────────┬────────┬────────┐ │
│Diagnose← │ │Stemming│ Angst │ Gedrag │ │
│Behandel │ │ Hoog │Middel │ Laag │ │
│Rapport │ └────────┴────────┴────────┘ │
│ │ ┌──────────────────────────┐ │
│ │ │ Ernst: ●●●○○ (Hoog) │ │
│ │ │ Bronnen: Intake 12-10 │ │
│ │ └──────────────────────────┘ │
└──────────┴───────────────────────────────────────┘
```
---
## Screen 2D: Behandelplan (Client Dossier)
### Header
- **Center**: "Bas Jansen ▼" with ID and birthdate
- **Right**: Search bar available
### Sidebar
- "← Cliënten" button (returns to behandelaar context)
- Divider
- Dashboard
- Intake
- Diagnose
- **Behandelplan** ← ACTIVE
- Rapportage
### Main Content
**Top bar:**
- Title: "Behandelplan" (large, semi-bold, left)
- Buttons:
- "Genereer Plan" (primary style with AI icon, right)
- "Nieuwe Versie" (secondary style, if plan exists)
**Plan Structuur:**
1. **SMART Doelen** section
- Specifieke, Meetbare, Acceptabele, Realistische, Tijdgebonden doelen
- Multiple goals per plan
- Status tracking per goal
2. **Interventies** section
- Evidence-based behandelmethoden (CGT, ACT, EMDR, etc.)
- Linked to specific goals
- Description and rationale
3. **Frequentie & Planning** section
- Sessie planning
- Behandelintensiteit
- Duration estimate
4. **Meetmomenten** section
- Evaluation schedule
- Progress measurements
- Review dates
**Versioning:**
- Multiple versions per client (v1, v2, etc.)
- Status: Concept | Actief | Afgerond
- Timestamp and practitioner info
**Content (to be further defined in Week 3):**
- AI plan generator based on intake + diagnose
- JSONB data structure for flexibility
- PDF export functionality
**Layout structure:**
```
┌──────────────────────────────────────────────────┐
│ Header: Logo | Bas Jansen ▼ | Search │
├──────────┬───────────────────────────────────────┤
│← Cliënten│ Behandelplan [Genereer Plan] │
│────── │ │
│Dashboard │ Versie 1 - Actief | 12-10-2023 │
│Intake │ │
│Diagnose │ 1. SMART Doelen │
│Behandel← │ ┌──────────────────────────────┐ │
│Rapport │ │ • Verminderen paniekeaanv.. │ │
│ │ │ • Uitbreiden sociale activ.. │ │
│ │ └──────────────────────────────┘ │
│ │ 2. Interventies │
│ │ ┌──────────────────────────────┐ │
│ │ │ • CGT - Cognitieve herstr... │ │
│ │ │ • Exposure therapie │ │
│ │ └──────────────────────────────┘ │
└──────────┴───────────────────────────────────────┘
```
---
## Screen 2E: Rapportage (Client Dossier)
### Header
- **Center**: "Bas Jansen ▼" with ID and birthdate
- **Right**: Search bar available
### Sidebar
- "← Cliënten" button (returns to behandelaar context)
- Divider
- Dashboard
- Intake
- Diagnose
- Behandelplan
- **Rapportage** ← ACTIVE
### Main Content
**Page title:** "Rapportage & Voortgang" (large, semi-bold)
**Content (to be further defined):**
- Client-specific progress metrics
- Treatment timeline
- Session attendance
- Goal achievement tracking
- Measurement instruments (ROM, questionnaires)
- Graphs and visualizations
- Export functionality (PDF, CSV)
**Layout structure:**
```
┌──────────────────────────────────────────────────┐
│ Header: Logo | Bas Jansen ▼ | Search │
├──────────┬───────────────────────────────────────┤
│← Cliënten│ Rapportage & Voortgang │
│────── │ │
│Dashboard │ ┌──────────────────────────────┐ │
│Intake │ │ Behandelduur: 8 weken │ │
│Diagnose │ │ Sessies: 6 van 12 │ │
│Behandel │ │ Voortgang: ████████░░░░ 67% │ │
│Rapport ← │ └──────────────────────────────┘ │
│ │ │
│ │ Doelvoortgang: │
│ │ [Graph/Chart placeholder] │
└──────────┴───────────────────────────────────────┘
```
---
## Intake Detail View (Modal/Slide-in) ## Intake Detail View (Modal/Slide-in)
**Trigger:** Click "Bekijk" button on any intake item **Trigger:** Click "Bekijk" button on any intake item
@@ -433,11 +750,16 @@ Divider
## Interaction Notes ## Interaction Notes
### Navigation flow: ### Navigation flow:
1. Start: Cliënten list view 1. Start: Behandelaar Dashboard (Level 1)
2. Click client row → Navigate to Dashboard (with client in header + sidebar) 2. Sidebar navigation: Dashboard | Cliënten | Agenda | Rapportage
3. Sidebar shows "← Cliënten" to go back 3. Click "Cliënten" → Cliënten list view
4. Header search always available for quick switch 4. Click client row → Context switch to Level 2 (Client Dossier)
5. Header client dropdown shows recent/favorite clients 5. Sidebar changes to: ← Cliënten | Dashboard | Intake | Diagnose | Behandelplan | Rapportage
6. Header shows selected client: "Bas Jansen ▼" with dropdown
7. Navigate within client dossier using sidebar menu
8. Click "← Cliënten" → Context switch back to Level 1
9. Header client dropdown always available (in Level 2) for quick client switching
10. Header search always available for quick client lookup
### State management: ### State management:
- Active menu item: always visible (highlighted) - Active menu item: always visible (highlighted)
@@ -457,28 +779,99 @@ Divider
### Routing structure (Next.js): ### Routing structure (Next.js):
``` ```
/clients → Cliënten list LEVEL 1: Behandelaar Context
/clients/[id]/dashboard → Dashboard view /epd/dashboard → Behandelaar dashboard (caseload, taken, aandachtspunten)
/clients/[id]/intakes → Intakes view /epd/clients → Cliënten list (zoek, filter, recent)
/clients/[id]/intakes/[intakeId] → Intake detail (modal) /epd/agenda → Behandelaar agenda (alle afspraken)
/clients/[id]/probleemprofiel /epd/reports → BI rapportage (statistieken, KPI's)
/clients/[id]/behandelplan
/clients/[id]/agenda LEVEL 2: Client Dossier Context
/epd/clients/[id] → Client dashboard (dossier overzicht)
/epd/clients/[id]/intake → Intake lijst en notities
/epd/clients/[id]/intake/[intakeId] → Intake detail (modal/slide-in)
/epd/clients/[id]/diagnose → Diagnose en probleemprofiel
/epd/clients/[id]/plan → Behandelplan (SMART doelen, interventies)
/epd/clients/[id]/reports → Client rapportage (voortgang, metrics)
Utility routes:
/epd/clients/new → Nieuwe cliënt formulier
/epd/clients/[id]/edit → Cliënt gegevens bewerken
``` ```
### Component structure: ### Component structure:
``` ```
app/ app/epd/
├── layout.tsx (header + sidebar logic) ├── layout.tsx // Root EPD layout (detects context)
├── components/
│ ├── epd-header.tsx // Context-aware header
│ └── epd-sidebar.tsx // Context-aware sidebar
├── dashboard/
│ └── page.tsx // Behandelaar dashboard
├── clients/ ├── clients/
│ ├── page.tsx (list view) │ ├── page.tsx // Cliënten lijst (Level 1)
│ ├── components/
│ │ ├── client-list.tsx
│ │ ├── client-search.tsx
│ │ └── client-filters.tsx
│ ├── new/
│ │ └── page.tsx // Nieuwe cliënt form
│ └── [id]/ │ └── [id]/
│ ├── layout.tsx (client-specific sidebar) │ ├── layout.tsx // Client dossier layout (Level 2 context)
│ ├── dashboard/page.tsx │ ├── page.tsx // Client dashboard (dossier overzicht)
│ ├── intakes/ │ ├── edit/
│ │ ── page.tsx (list) │ │ ── page.tsx // Edit client
│ └── [intakeId]/page.tsx (detail modal) ── intake/
└── ... │ ├── page.tsx // Intake lijst
│ │ ├── components/
│ │ │ ├── intake-list.tsx
│ │ │ └── intake-editor.tsx
│ │ └── [intakeId]/
│ │ └── page.tsx // Intake detail (modal/slide-in)
│ ├── diagnose/
│ │ ├── page.tsx // Diagnose & probleemprofiel
│ │ └── components/
│ │ ├── dsm-categories.tsx
│ │ └── severity-indicator.tsx
│ ├── plan/
│ │ ├── page.tsx // Behandelplan
│ │ └── components/
│ │ ├── smart-goals.tsx
│ │ ├── interventions.tsx
│ │ └── plan-generator.tsx
│ └── reports/
│ ├── page.tsx // Client rapportage
│ └── components/
│ ├── progress-chart.tsx
│ └── metrics-dashboard.tsx
├── agenda/
│ └── page.tsx // Behandelaar agenda
└── reports/
└── page.tsx // BI rapportage (behandelaar)
```
### Key Implementation Details:
**app/epd/layout.tsx:**
- Detects current context (Level 1 vs Level 2) based on URL
- Passes context to EPDSidebar and EPDHeader
- Manages global state for selected client
**app/epd/clients/[id]/layout.tsx:**
- Wraps all client dossier pages
- Fetches client data and provides to children
- Ensures sidebar shows Level 2 navigation
- Ensures header shows client dropdown
**Context Detection Logic:**
```typescript
// In app/epd/layout.tsx
const isClientDossier = pathname.includes('/clients/') &&
pathname.match(/\/clients\/[^\/]+\/?[^\/]*$/);
const clientId = isClientDossier ? pathname.split('/')[3] : null;
``` ```
### Data requirements: ### Data requirements:

View File

@@ -1,31 +1,102 @@
# Mini-ECD Interface Mocks & User Flow # Mini-ECD Interface Mocks & User Flow
## Navigation Architecture: Two-Level System
**LEVEL 1: Behandelaar Context** - Praktijkbeheerder overstijgend
- Dashboard → Behandelaar overzicht (caseload, taken, berichten)
- Cliënten → Zoeken, filteren, recent bekeken
- Agenda → Behandelaar agenda (alle afspraken)
- Rapportage → BI dashboards (KPI's, statistieken)
**LEVEL 2: Client Dossier Context** - Individuele cliënt focus
- Dashboard → Dossier overzicht (laatste info, afspraken)
- Intake → Gesprekken en notities
- Diagnose → DSM-classificatie, probleemprofiel
- Behandelplan → SMART doelen, interventies
- Rapportage → Client voortgang en metrics
## User Flow Overview ## User Flow Overview
``` ```
START START: Behandelaar Dashboard (Level 1)
[Cliënten Lijst] ←──────────────────┐ [Sidebar: Dashboard | Cliënten | Agenda | Rapportage]
(klik op cliënt) │
Klik "Cliënten"
[Cliënten Lijst met zoek/filter] ←────────────────┐
↓ (klik op cliënt rij) │
↓ │ ↓ │
[Dashboard - Bas Jansen] ←─────┐ ⚡ CONTEXT SWITCH naar Level 2 ⚡
↓ │
[Sidebar verandert] │
[Header toont: "Bas Jansen ▼"] │
↓ │
[Client Dashboard - Bas Jansen] ←──────┐ │
↓ │ │ ↓ │ │
├─→ [Intakes] │ [Sidebar: ← Cliënten | Dashboard | Intake | ... ]
├─→ [Probleemprofiel] │ │
├─→ [Intake] │ │
├─→ [Diagnose] │ │
├─→ [Behandelplan] │ │ ├─→ [Behandelplan] │ │
└─→ [Agenda] │ │ └─→ [Rapportage]
↓ │ │ ↓ │ │
(sidebar menu switch)────────┘ (sidebar menu switch binnen dossier)─┘
↓ │ ↓ │
(← Cliënten button)──────────────┘ (klik "← Cliënten" in sidebar)────────────────┘
(header search) → Quick switch to other client ⚡ CONTEXT SWITCH terug naar Level 1 ⚡
[Dashboard - Anna de Vries] [Terug naar Cliënten Lijst]
(header dropdown "Bas Jansen ▼") → Quick switch naar andere client
[Client Dashboard - Anna de Vries]
``` ```
--- ---
## Mock 1: Cliënten Lijst (Entry Point) ## LEVEL 1 MOCKS: Behandelaar Context
---
## Mock 1A: Behandelaar Dashboard (Entry Point)
```
┌────────────────────────────────────────────────────────────────┐
│ Mini-ECD [Zoek cliënt...] │
└────────────────────────────────────────────────────────────────┘
┌─────────────┬──────────────────────────────────────────────────┐
│ │ │
│ Dashboard ◄ │ Dashboard │
│ Cliënten │ Welkom terug, Dr. van den Berg │
│ Agenda │ │
│ Rapportage │ ┌──────────────┬──────────────┬──────────────┐ │
│ │ │ Caseload │ Aandachts- │ Berichten │ │
│ │ │ 24 actief │ punten: 3 │ 2 nieuw │ │
│ │ │ 2 wachtlijst │ │ │ │
│ │ └──────────────┴──────────────┴──────────────┘ │
│ │ │
│ │ Behandelplannen concept: │
│ │ • Bas Jansen - Review nodig │
│ │ • Anna de Vries - Nog opstellen │
│ │ │
│ │ Aankomende afspraken (vandaag): │
│ │ • 14:00 - Peter Smit (Intake) │
│ │ • 16:30 - Bas Jansen (Sessie 3) │
│ │ │
└─────────────┴──────────────────────────────────────────────────┘
User actions:
→ Bekijk caseload overzicht en statistieken
→ Klik op aandachtspunt: navigeer naar relevante pagina
→ Klik op client naam: navigeer naar client dossier (Level 2 switch)
→ Sidebar navigatie naar andere Level 1 schermen
Note: Detailed content to be further defined.
```
---
## Mock 1B: Cliënten Lijst
``` ```
┌────────────────────────────────────────────────────────────────┐ ┌────────────────────────────────────────────────────────────────┐
│ Mini-ECD [Zoek cliënt...] │ │ Mini-ECD [Zoek cliënt...] │
@@ -35,7 +106,11 @@ START
│ Dashboard │ Cliënten [+ Nieuwe Cliënt] │ │ Dashboard │ Cliënten [+ Nieuwe Cliënt] │
│ Cliënten ◄ │ │ │ Cliënten ◄ │ │
│ Agenda │ [Zoek op naam, BSN, of cliënt ID...........] │ │ Agenda │ [Zoek op naam, BSN, of cliënt ID...........] │
│ Rapportage │ │ Rapportage │ [Filters: Afdeling ▼ | Team ▼ | Status ▼]
│ │ │
│ │ Recent bekeken: │
│ │ [Bas J.] [Anna dV.] [Peter S.] │
│ │ │
│ │ Naam ID Geb Status │ │ │ Naam ID Geb Status │
│ │ ──────────────────────────────────────── │ │ │ ──────────────────────────────────────── │
│ │ Bas Jansen CL0002 20-11-1992 ● Actief │ │ │ Bas Jansen CL0002 20-11-1992 ● Actief │
@@ -47,14 +122,91 @@ START
└─────────────┴──────────────────────────────────────────────────┘ └─────────────┴──────────────────────────────────────────────────┘
User actions: User actions:
→ Type in zoekbalk: filters lijst real-time → Type in zoekbalk: filters lijst real-time (naam, BSN, ID, geboortedatum)
Klik op rij (bijv. Bas Jansen): navigeer naar zijn Dashboard Selecteer filters: Afdeling, Team, Status
→ Klik recent bekeken: snel naar die client
→ Klik op rij (bijv. Bas Jansen): ⚡ CONTEXT SWITCH → Client Dossier (Level 2)
→ Klik [+ Nieuwe Cliënt]: open modal/form om nieuwe cliënt toe te voegen → Klik [+ Nieuwe Cliënt]: open modal/form om nieuwe cliënt toe te voegen
``` ```
--- ---
## Mock 2: Dashboard (Client Dossier - Bas Jansen) ## Mock 1C: Behandelaar Agenda
```
┌────────────────────────────────────────────────────────────────┐
│ Mini-ECD [Zoek cliënt...] │
└────────────────────────────────────────────────────────────────┘
┌─────────────┬──────────────────────────────────────────────────┐
│ │ │
│ Dashboard │ Agenda [+ Nieuwe Afspraak] │
│ Cliënten │ Week 46 | 13-19 Nov 2025 [< Vorige >]│
│ Agenda ◄ │ │
│ Rapportage │ [Kalender weergave placeholder] │
│ │ │
│ │ Vandaag - 19 november 2025: │
│ │ ┌────────────────────────────────────────────┐ │
│ │ │ 14:00-15:00 Peter Smit - Intake │ │
│ │ │ 16:30-17:30 Bas Jansen - Sessie 3 │ │
│ │ └────────────────────────────────────────────┘ │
│ │ │
│ │ Morgen - 20 november: │
│ │ ┌────────────────────────────────────────────┐ │
│ │ │ 10:00-11:00 Anna de Vries - Evaluatie │ │
│ │ └────────────────────────────────────────────┘ │
└─────────────┴──────────────────────────────────────────────────┘
User actions:
→ Bekijk agenda (week/maand weergave)
→ Klik op afspraak: bekijk details of navigeer naar client dossier
→ Klik [+ Nieuwe Afspraak]: open afspraak formulier
→ Navigeer tussen weken met [< >] knoppen
Note: Detailed calendar component to be specified.
```
---
## Mock 1D: Behandelaar Rapportage
```
┌────────────────────────────────────────────────────────────────┐
│ Mini-ECD [Zoek cliënt...] │
└────────────────────────────────────────────────────────────────┘
┌─────────────┬──────────────────────────────────────────────────┐
│ │ │
│ Dashboard │ Rapportage [Exporteer PDF] │
│ Cliënten │ Overzicht praktijk statistieken │
│ Agenda │ │
│ Rapportage◄ │ ┌──────────────┬──────────────┬──────────────┐ │
│ │ │ Totaal │ Gemiddelde │ Wachtlijst │ │
│ │ │ Cliënten │ Behandel- │ Wachttijd │ │
│ │ │ 26 │ duur: 12 wk │ 2 weken │ │
│ │ └──────────────┴──────────────┴──────────────┘ │
│ │ │
│ │ [Graph: Cliënten over tijd] │
│ │ [Graph: Behandelduur distributie] │
│ │ [Graph: Diagnose categorieën] │
│ │ │
└─────────────┴──────────────────────────────────────────────────┘
User actions:
→ Bekijk BI dashboards en KPI's
→ Interactie met grafieken (zoom, filter)
→ Klik [Exporteer PDF]: download rapport
→ Filter op periode, afdeling, team
Note: Detailed BI components and metrics to be defined.
```
---
## LEVEL 2 MOCKS: Client Dossier Context
**Context:** User heeft op een cliënt geklikt in de cliëntenlijst
**State:** Sidebar en Header zijn veranderd naar client-specifieke weergave
---
## Mock 2A: Client Dashboard (Dossier Overzicht - Bas Jansen)
``` ```
┌────────────────────────────────────────────────────────────────┐ ┌────────────────────────────────────────────────────────────────┐
│ Mini-ECD Bas Jansen ▼ [Zoek cliënt...] │ │ Mini-ECD Bas Jansen ▼ [Zoek cliënt...] │
@@ -62,53 +214,58 @@ User actions:
└────────────────────────────────────────────────────────────────┘ └────────────────────────────────────────────────────────────────┘
┌─────────────┬──────────────────────────────────────────────────┐ ┌─────────────┬──────────────────────────────────────────────────┐
│ │ │ │ │ │
│ ← Cliënten │ Dashboard Overzicht │ │ ← Cliënten │ Dossier Overzicht
│ ───────── │ │ │ ───────── │ │
│ Dashboard ◄ │ ┌──────────────┬──────────────┬──────────────┐ │ │ Dashboard ◄ │ ┌──────────────┬──────────────┬──────────────┐ │
│ Intakes │ │Cliëntinfo │Laatste Intake│Probleemprofiel│ │ │ Intake │ │Cliëntinfo │Laatste Intake│Diagnose │ │
Probleem │ │ │ │ │ │ Diagnose │ │ │ │ │ │
│ Behandel │ │ID: CL0002 │12-10-2023 │Hoog ● │ │ │ Behandel │ │ID: CL0002 │12-10-2023 │Ernst: Hoog ● │ │
Agenda │ │Naam: Bas J. │ │Angststoornis │ │ Rapportage │ │Naam: Bas J. │14:30 │Angststoornis │ │
│ │ │Geb: 20-11-92 │"Bas komt op │Panietstoornis│ │ │ │ │Geb: 20-11-92 │ │Panietstoornis│ │
│ │ │Verz: [naam] │gesprek..." │met agorafobie│ │ │ │ │Leeftijd: 31 │"Bas komt op │met agorafobie│ │
│ │ │ │ │ │ │ │ │Verz: [naam] │gesprek..." │ │ │
│ │ │ │Lees meer → │Bekijk → │ │ │ │ │BSN: [nummer] │ │ │ │
│ │ │ │Bekijk → │Bekijk → │ │
│ │ └──────────────┴──────────────┴──────────────┘ │ │ │ └──────────────┴──────────────┴──────────────┘ │
│ │ │ │ │ │
│ │ ┌────────────────────────────────────────────┐ │ │ │ ┌────────────────────────────────────────────┐ │
│ │ │ Behandelplan │ │ │ │ │ Behandelplan Status: Concept │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ Geen behandelplan gevonden. │ │ │ │ │ SMART Doelen (3): │ │
│ │ │ • Verminderen paniekeaanvallen │ │
│ │ │ • Uitbreiden sociale activiteiten │ │
│ │ │ • Verbeteren coping strategieën │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ [+ Maak behandelplan] │ │ │ │ │ Interventies: CGT, Exposure therapie │ │
│ │ │ Bekijk plan → │ │
│ │ └────────────────────────────────────────────┘ │ │ │ └────────────────────────────────────────────┘ │
│ │ │ │ │ │
│ │ ┌────────────────────────────────────────────┐ │ │ │ ┌────────────────────────────────────────────┐ │
│ │ │ Afspraken │ │ │ │ │ Afspraken │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ Laatste Afspraak │ │ │ │ │ Afgelopen Afspraak │ │
│ │ │ │ 14-11-2025, 16:26 - Intake │ │ │ │ │ │ 14-11-2025, 16:26 - Intake (60 min) │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ Eerstvolgende 3 Afspraken │ │ │ │ │ Komende Afspraken │ │
│ │ │ │ 22-11-2025, 16:26 - Psycho-educatie │ │ │ │ │ │ 22-11-2025, 16:26 - Psycho-educatie │ │
│ │ │ │ 29-11-2025, 16:26 - Exposure therapie │ │ │ │ │ │ 29-11-2025, 16:26 - Exposure therapie │ │
│ │ │ │ 06-12-2025, 16:26 - Evaluatie │ │ │ │ │ │ 06-12-2025, 16:26 - Evaluatie gesprek │ │
│ │ └────────────────────────────────────────────┘ │ │ │ └────────────────────────────────────────────┘ │
│ │ │ │ │ │
└─────────────┴──────────────────────────────────────────────────┘ └─────────────┴──────────────────────────────────────────────────┘
User actions: User actions:
→ Klik "← Cliënten": terug naar cliëntenlijst → Klik "← Cliënten": ⚡ CONTEXT SWITCH terug naar Level 1 (cliëntenlijst)
→ Klik "Bas Jansen ▼": dropdown met recente/favoriete cliënten → Klik "Bas Jansen ▼": dropdown met recente cliënten voor quick switch
→ Type in [Zoek cliënt]: autocomplete zoeken, direct switchen → Type in [Zoek cliënt]: autocomplete zoeken, direct switchen naar andere client
→ Klik sidebar item (bijv. Intakes): navigeer naar dat scherm → Klik sidebar item (bijv. Intake): navigeer binnen client dossier
→ Klik "Lees meer" of "Bekijk": navigeer naar detail scherm → Klik "Bekijk →" links: navigeer naar detail sectie
→ Klik [+ Maak behandelplan]: open behandelplan wizard → Klik [+ Maak behandelplan]: open behandelplan wizard (als leeg)
``` ```
--- ---
## Mock 3: Intakes (Client Dossier - Bas Jansen) ## Mock 2B: Intake (Client Dossier - Bas Jansen)
``` ```
┌────────────────────────────────────────────────────────────────┐ ┌────────────────────────────────────────────────────────────────┐
│ Mini-ECD Bas Jansen ▼ [Zoek cliënt...] │ │ Mini-ECD Bas Jansen ▼ [Zoek cliënt...] │
@@ -116,13 +273,13 @@ User actions:
└────────────────────────────────────────────────────────────────┘ └────────────────────────────────────────────────────────────────┘
┌─────────────┬──────────────────────────────────────────────────┐ ┌─────────────┬──────────────────────────────────────────────────┐
│ │ │ │ │ │
│ ← Cliënten │ Intakes [+ Nieuwe Intake] │ │ ← Cliënten │ Intake [+ Nieuwe Intake] │
│ ───────── │ │ │ ───────── │ │
│ Dashboard │ Datum Type Status Samenvatting │ │ Dashboard │ Datum Type Status Samenvatting │
│ Intakes ◄ │ ───────────────────────────────────────────── │ │ Intake ◄ │ ───────────────────────────────────────────── │
Probleem │ │ Diagnose │ │
│ Behandel │ 12-10-2023 Intake ●Afgerond │ │ Behandel │ 12-10-2023 Intake ●Afgerond │
Agenda │ 14:30 gesprek │ Rapportage │ 14:30 gesprek │
│ │ Eerste intake. Cliënt presenteert │ │ │ Eerste intake. Cliënt presenteert │
│ │ zich met angst- en paniekkl... │ │ │ zich met angst- en paniekkl... │
│ │ [Bekijk] │ │ │ [Bekijk] │
@@ -144,15 +301,150 @@ User actions:
└─────────────┴──────────────────────────────────────────────────┘ └─────────────┴──────────────────────────────────────────────────┘
User actions: User actions:
→ Klik [+ Nieuwe Intake]: open intake form/wizard → Klik [+ Nieuwe Intake]: open TipTap editor voor nieuwe intake notitie
→ Klik [Bekijk]: open intake detail (zie Mock 4) → Klik [Bekijk]: open intake detail slide-in panel (zie Mock 2F)
→ Hover over rij: highlight, [Bekijk] button wordt prominent → Hover over rij: highlight, [Bekijk] button wordt prominent
→ Sidebar/header navigation: zelfde als Dashboard → Sidebar navigatie: blijf binnen client dossier context
→ Klik "← Cliënten": terug naar Level 1
``` ```
--- ---
## Mock 4: Intake Detail (Slide-in Panel) ## Mock 2C: Diagnose (Client Dossier - Bas Jansen)
```
┌────────────────────────────────────────────────────────────────┐
│ Mini-ECD Bas Jansen ▼ [Zoek cliënt...] │
│ ID: CL0002 | Geb: 20-11-1992 │
└────────────────────────────────────────────────────────────────┘
┌─────────────┬──────────────────────────────────────────────────┐
│ │ │
│ ← Cliënten │ Diagnose & Probleemprofiel [AI Analyse] │
│ ───────── │ │
│ Dashboard │ DSM-light Categorieën: │
│ Intake │ │
│ Diagnose ◄ │ ┌──────────┬──────────┬──────────┐ │
│ Behandel │ │ Stemming │ Angst │ Gedrag │ │
│ Rapportage │ │ ○○○○○ │ ●●●●○ │ ○○○○○ │ │
│ │ │ Geen │ Hoog │ Geen │ │
│ │ └──────────┴──────────┴──────────┘ │
│ │ ┌──────────┬──────────┬──────────┐ │
│ │ │ Middelen │ Cognitief│ Context │ │
│ │ │ ○○○○○ │ ○○○○○ │ ●●○○○ │ │
│ │ │ Geen │ Geen │ Middel │ │
│ │ └──────────┴──────────┴──────────┘ │
│ │ │
│ │ Hoofddiagnose: │
│ │ ┌────────────────────────────────────────────┐ │
│ │ │ Panietstoornis met agorafobie │ │
│ │ │ Ernst: Hoog ●●●●○ │ │
│ │ │ │ │
│ │ │ Bron: Intake 12-10-2023 │ │
│ │ │ Observaties: Frequente aanvallen, sterke │ │
│ │ │ vermijding openbare ruimtes │ │
│ │ └────────────────────────────────────────────┘ │
│ │ │
└─────────────┴──────────────────────────────────────────────────┘
User actions:
→ Klik [AI Analyse]: genereer/update diagnose classificatie
→ Bekijk DSM-categorieën met ernst indicatie
→ Klik op categorie: bekijk details en bronnen
→ Bewerk diagnose handmatig indien nodig
Note: Week 3 feature - AI-powered classification
```
---
## Mock 2D: Behandelplan (Client Dossier - Bas Jansen)
```
┌────────────────────────────────────────────────────────────────┐
│ Mini-ECD Bas Jansen ▼ [Zoek cliënt...] │
│ ID: CL0002 | Geb: 20-11-1992 │
└────────────────────────────────────────────────────────────────┘
┌─────────────┬──────────────────────────────────────────────────┐
│ │ │
│ ← Cliënten │ Behandelplan [Genereer Plan] [v1▼] │
│ ───────── │ Status: Actief | Laatste update: 15-10-2023 │
│ Dashboard │ │
│ Intake │ 1. SMART Doelen │
│ Diagnose │ ┌────────────────────────────────────────────┐ │
│ Behandel ◄ │ │ Doel 1: Verminderen paniekeaanvallen │ │
│ Rapportage │ │ Van 3x/week naar max 1x/week binnen 8 wk │ │
│ │ │ Voortgang: ████████░░░░ 67% │ │
│ │ │ │ │
│ │ │ Doel 2: Uitbreiden sociale activiteiten │ │
│ │ │ Zelfstandig boodschappen binnen 6 weken │ │
│ │ │ Voortgang: ████░░░░░░░░ 33% │ │
│ │ └────────────────────────────────────────────┘ │
│ │ │
│ │ 2. Interventies │
│ │ ┌────────────────────────────────────────────┐ │
│ │ │ • CGT - Cognitieve herstructurering │ │
│ │ │ • Exposure therapie (gradueel) │ │
│ │ │ • Ontspanningstechnieken │ │
│ │ └────────────────────────────────────────────┘ │
│ │ │
│ │ 3. Frequentie: Wekelijks, 12 sessies │
│ │ 4. Meetmomenten: Week 4, 8, 12 │
│ │ │
└─────────────┴──────────────────────────────────────────────────┘
User actions:
→ Klik [Genereer Plan]: AI genereert behandelplan op basis van intake+diagnose
→ Klik [v1▼]: bekijk of wissel tussen plan versies
→ Bewerk doelen, interventies, frequentie
→ Track voortgang per doel
→ Exporteer plan naar PDF
Note: Week 3 feature - AI plan generator
```
---
## Mock 2E: Rapportage (Client Dossier - Bas Jansen)
```
┌────────────────────────────────────────────────────────────────┐
│ Mini-ECD Bas Jansen ▼ [Zoek cliënt...] │
│ ID: CL0002 | Geb: 20-11-1992 │
└────────────────────────────────────────────────────────────────┘
┌─────────────┬──────────────────────────────────────────────────┐
│ │ │
│ ← Cliënten │ Rapportage & Voortgang [Exporteer PDF] │
│ ───────── │ │
│ Dashboard │ ┌──────────────┬──────────────┬──────────────┐ │
│ Intake │ │ Behandel- │ Sessies │ Algehele │ │
│ Diagnose │ │ duur │ Voltooid │ Voortgang │ │
│ Behandel │ │ 8 weken │ 6 van 12 │ 67% │ │
│ Rapportage◄ │ └──────────────┴──────────────┴──────────────┘ │
│ │ │
│ │ Doelvoortgang over tijd: │
│ │ [Line graph showing progress on goals] │
│ │ │
│ │ Sessie overzicht: │
│ │ ┌────────────────────────────────────────────┐ │
│ │ │ 12-10 Intake ✓ Aanwezig │ │
│ │ │ 19-10 Sessie 1 ✓ Aanwezig │ │
│ │ │ 26-10 Sessie 2 ✓ Aanwezig │ │
│ │ │ 02-11 Sessie 3 ✓ Aanwezig │ │
│ │ │ 09-11 Sessie 4 ✗ No-show │ │
│ │ │ 16-11 Sessie 5 ✓ Aanwezig │ │
│ │ └────────────────────────────────────────────┘ │
│ │ │
└─────────────┴──────────────────────────────────────────────────┘
User actions:
→ Bekijk voortgang visualisaties
→ Filter op periode, doel, interventie
→ Klik [Exporteer PDF]: download rapport voor dossier
→ Bekijk attendance en sessie details
Note: Content and metrics to be further defined.
```
---
## Mock 2F: Intake Detail (Slide-in Panel)
``` ```
┌────────────────────────────────────────────────────────────────┐ ┌────────────────────────────────────────────────────────────────┐
│ Mini-ECD Bas Jansen ▼ [Zoek cliënt...] │ │ Mini-ECD Bas Jansen ▼ [Zoek cliënt...] │
@@ -160,13 +452,13 @@ User actions:
└────────────────────────────────────────────────────────────────┘ └────────────────────────────────────────────────────────────────┘
┌─────────────┬──────────────────────────┬───────────────────────┐ ┌─────────────┬──────────────────────────┬───────────────────────┐
│ │ │ │ │ │ │ │
│ ← Cliënten │ Intakes [+ Nieuwe] │ Intake - 12-10-2023 ✕ │ │ ← Cliënten │ Intake [+ Nieuwe] │ Intake - 12-10-2023 ✕ │
│ ───────── │ │ ─────────────────────│ │ ───────── │ │ ─────────────────────│
│ Dashboard │ Datum Type Status │ Algemene informatie │ │ Dashboard │ Datum Type Status │ Algemene informatie │
│ Intakes ◄ │ ─────────────────── │ │ │ Intake ◄ │ ─────────────────── │ │
Probleem │ │ Datum & tijd: │ Diagnose │ │ Datum & tijd: │
│ Behandel │ 12-10 Intake ●Afgr. │ 12-10-2023, 14:30 │ │ Behandel │ 12-10 Intake ●Afgr. │ 12-10-2023, 14:30 │
Agenda │ [row highlighted] │ │ Rapportage │ [row highlighted] │ │
│ │ [Bekijk] │ Type: Intake gesprek │ │ │ [Bekijk] │ Type: Intake gesprek │
│ │ ───────────────── │ Behandelaar: [naam] │ │ │ ───────────────── │ Behandelaar: [naam] │
│ │ │ Duur: 60 minuten │ │ │ │ Duur: 60 minuten │
@@ -205,7 +497,10 @@ User actions:
--- ---
## Mock 5: Client Switcher (Dropdown from Header) ## Mock 2G: Client Switcher (Dropdown from Header)
**Context:** Alleen beschikbaar in Level 2 (Client Dossier Context)
``` ```
┌────────────────────────────────────────────────────────────────┐ ┌────────────────────────────────────────────────────────────────┐
│ Mini-ECD ┌─────────────────────────┐ [Zoek cliënt...] │ │ Mini-ECD ┌─────────────────────────┐ [Zoek cliënt...] │
@@ -220,106 +515,288 @@ User actions:
│ │ ● Peter Smit │ │ │ │ ● Peter Smit │ │
│ │ CL0003 | 22-07-1995 │ │ │ │ CL0003 | 22-07-1995 │ │
│ │ │ │ │ │ │ │
│ │ ● Maria Jansen │ │
│ │ CL0004 | 11-09-1990 │ │
│ │ │ │
│ │ ───────────────────── │ │ │ │ ───────────────────── │ │
│ │ [Alle cliënten →] │ │ │ │ [Alle cliënten →] │ │
│ └─────────────────────────┘ │ │ └─────────────────────────┘ │
└────────────────────────────────────────────────────────────────┘ └────────────────────────────────────────────────────────────────┘
User actions: User actions:
→ Klik op naam in dropdown: switch naar die cliënt (blijf op zelfde scherm type) → Klik op naam in dropdown: switch naar die cliënt (blijf op zelfde sectie)
→ Klik [Alle cliënten →]: ga naar cliëntenlijst Bijv: Op Intake pagina van Bas → klik Anna → ga naar Intake pagina van Anna
→ Klik [Alle cliënten →]: ⚡ CONTEXT SWITCH naar Level 1 (cliëntenlijst)
→ Klik buiten dropdown: sluit dropdown → Klik buiten dropdown: sluit dropdown
→ Type in zoekbalk: autocomplete met alle cliënten
Note: Recent cliënten worden automatisch bijgewerkt bij navigatie
``` ```
--- ---
## Complete User Flow Scenarios ## Complete User Flow Scenarios
### Scenario 1: Nieuwe intake toevoegen ### Scenario 1: Start applicatie → Client dossier bekijken
``` ```
1. User zit in [Cliënten Lijst] 1. User logt in en start op [Behandelaar Dashboard] (Level 1)
2. Klik op "Bas Jansen" rij 2. Bekijk caseload overzicht en aandachtspunten
3. Navigeer naar [Dashboard - Bas Jansen] 3. Klik sidebar "Cliënten"
4. Klik sidebar "Intakes" 4. Navigeer naar [Cliënten Lijst]
5. Navigeer naar [Intakes - Bas Jansen] 5. Type "Bas" in zoekbalk, zie gefilterde resultaten
6. Klik [+ Nieuwe Intake] 6. Klik op "Bas Jansen" rij
7. Open intake form modal 7. ⚡ CONTEXT SWITCH naar Level 2
8. Vul gegevens in, klik [Opslaan] 8. Sidebar verandert: "← Cliënten | Dashboard | Intake | ..."
9. Modal sluit, nieuwe intake verschijnt bovenaan lijst 9. Header toont: "Bas Jansen ▼ | ID: CL0002 | Geb: 20-11-1992"
10. Bekijk [Client Dashboard - Bas Jansen] met overzicht
``` ```
### Scenario 2: Tussen cliënten switchen tijdens werk ### Scenario 2: Nieuwe intake toevoegen
``` ```
1. User zit in [Intakes - Bas Jansen] 1. User zit in [Client Dashboard - Bas Jansen] (Level 2)
2. Type "Anna" in header zoekbalk 2. Klik sidebar "Intake"
3. Zie autocomplete resultaat "Anna de Vries" 3. Navigeer naar [Intake - Bas Jansen]
4. Klik op resultaat 4. Klik [+ Nieuwe Intake]
5. Navigeer naar [Intakes - Anna de Vries] (zelfde scherm type) 5. TipTap editor opent voor nieuwe notitie
6. Type gespreknotities met rich text formatting
7. Klik [AI Samenvatting] (optioneel, Week 3 feature)
8. AI genereert samenvatting in 5 seconden
9. Klik [Opslaan]
10. Nieuwe intake verschijnt bovenaan lijst met status badge
``` ```
### Scenario 3: Van detail terug naar overzicht ### Scenario 3: Tussen cliënten switchen tijdens werk
``` ```
1. User zit in [Dashboard - Bas Jansen] 1. User zit in [Intake - Bas Jansen] (Level 2)
2. Klik "Lees meer" op Intake card 2. Klik "Bas Jansen ▼" in header center
3. Navigeer naar [Intakes - Bas Jansen]
4. Klik [Bekijk] op specifieke intake
5. Intake detail panel opent
6. Lees notities, klik ✕
7. Panel sluit, terug op [Intakes - Bas Jansen]
8. Klik "← Cliënten" in sidebar
9. Navigeer naar [Cliënten Lijst]
```
### Scenario 4: Quick client switch via dropdown
```
1. User zit in [Behandelplan - Bas Jansen]
2. Klik "Bas Jansen ▼" in header
3. Dropdown opent met recente cliënten 3. Dropdown opent met recente cliënten
4. Klik "Anna de Vries" 4. Klik "Anna de Vries"
5. Navigeer naar [Behandelplan - Anna de Vries] 5. Blijf in Level 2, navigeer naar [Intake - Anna de Vries]
6. Sidebar blijft client-specifiek, header update naar Anna's gegevens
```
### Scenario 4: Van client dossier terug naar behandelaar overzicht
```
1. User zit in [Behandelplan - Bas Jansen] (Level 2)
2. Klaar met werk aan behandelplan
3. Klik "← Cliënten" in sidebar
4. ⚡ CONTEXT SWITCH terug naar Level 1
5. Sidebar verandert: "Dashboard | Cliënten | Agenda | Rapportage"
6. Header center wordt leeg (geen client dropdown)
7. Navigeer naar [Cliënten Lijst]
8. User kan nieuwe client selecteren of naar ander Level 1 scherm
```
### Scenario 5: Behandelplan genereren met AI
```
1. User zit in [Client Dashboard - Bas Jansen] (Level 2)
2. Bekijk diagnose card: "Ernst: Hoog - Panietstoornis"
3. Bekijk behandelplan card: "Geen behandelplan gevonden"
4. Klik [+ Maak behandelplan]
5. Navigeer naar [Behandelplan - Bas Jansen]
6. Klik [Genereer Plan] button
7. AI analyseert intake notities + diagnose
8. Plan wordt gegenereerd met SMART doelen en interventies
9. User beoordeelt en past aan indien nodig
10. Klik [Opslaan als Concept] of [Publiceren]
11. Plan verschijnt op Client Dashboard met status badge
```
### Scenario 6: Intake detail bekijken en bewerken
```
1. User zit in [Intake - Bas Jansen] (Level 2)
2. Klik [Bekijk] bij intake van 12-10-2023
3. Slide-in panel opent aan rechterkant (400px breed)
4. Bekijk algemene informatie en volledige gespreksnotities
5. Scroll door notities, lees AI samenvatting (indien aanwezig)
6. Klik [Bewerken] in panel footer
7. TipTap editor opent in bewerkmodus
8. Wijzig notities, voeg toe, pas formatting aan
9. Klik [Opslaan]
10. Panel sluit, terug naar [Intake - Bas Jansen] lijst
11. Gewijzigde intake toont "Bewerkt" timestamp
```
### Scenario 7: Quick search tussen contexten
```
1. User zit in [Behandelaar Dashboard] (Level 1)
2. Type "CL0002" in header zoekbalk
3. Autocomplete toont "Bas Jansen - CL0002 | 20-11-1992"
4. Klik op resultaat
5. ⚡ CONTEXT SWITCH naar Level 2
6. Navigeer direct naar [Client Dashboard - Bas Jansen]
7. Header en sidebar passen zich aan
Alternative vanaf Level 2:
1. User zit in [Diagnose - Anna de Vries] (Level 2)
2. Type "Peter" in header zoekbalk
3. Autocomplete toont "Peter Smit - CL0003"
4. Klik op resultaat
5. Blijf in Level 2, navigeer naar [Diagnose - Peter Smit]
``` ```
--- ---
## Navigation Rules ## Navigation Rules
### Sidebar "← Cliënten" button: ### Context Switching (Level 1 ↔ Level 2):
- Altijd zichtbaar in client dossier views
- Navigeert naar [Cliënten Lijst] **Van Level 1 naar Level 2:**
- Trigger: Klik op een client rij in cliëntenlijst
- Effect: Sidebar verandert naar client-specifiek menu
- Effect: Header center toont client dropdown "Bas Jansen ▼"
- Navigeert naar: Client Dashboard (dossier overzicht)
**Van Level 2 naar Level 1:**
- Trigger: Klik "← Cliënten" button in sidebar
- Effect: Sidebar verandert terug naar behandelaar menu
- Effect: Header center wordt leeg/disabled
- Navigeert naar: Cliënten Lijst
- Keyboard shortcut: Esc (of Alt+C) - Keyboard shortcut: Esc (of Alt+C)
### Header client dropdown: ### Sidebar Behavior:
- Toont laatste 3-5 bezochte cliënten
- Link naar volledige cliëntenlijst onderaan
- Switchen behoudt huidige scherm type (Dashboard→Dashboard, Intakes→Intakes)
### Header zoekbalk: **In Level 1 (Behandelaar Context):**
- Menu items: Dashboard | Cliënten | Agenda | Rapportage
- Geen "← Cliënten" button
- Active state op huidige pagina
- Navigatie blijft binnen Level 1
**In Level 2 (Client Dossier Context):**
- "← Cliënten" button bovenaan (back to Level 1)
- Divider
- Menu items: Dashboard | Intake | Diagnose | Behandelplan | Rapportage
- Active state op huidige sectie
- Navigatie blijft binnen hetzelfde client dossier
- Switchen tussen clients via header dropdown blijft in Level 2
### Header Client Dropdown:
**Alleen beschikbaar in Level 2:**
- Toont geselecteerde client: "Bas Jansen ▼"
- Sub-text: "ID: CL0002 | Geb: 20-11-1992"
- Dropdown inhoud:
- Recente cliënten (laatste 3-5 bezocht)
- Divider
- "Alle cliënten →" link (navigeert naar Level 1)
- Switchen behoudt huidige sectie type
- Bijv: Intake van Bas → klik Anna → Intake van Anna
- Keyboard shortcut: Alt+K
**In Level 1:**
- Geen client dropdown (of disabled/grayed out)
- Optioneel: Behandelaar naam/info
### Header Zoekbalk:
**Beschikbaar in beide levels:**
- Live autocomplete tijdens typen - Live autocomplete tijdens typen
- Zoekt op: naam, BSN, cliënt ID - Zoekt op: naam, BSN, cliënt ID, geboortedatum
- Enter of klik op resultaat: switch naar Dashboard van die cliënt - Toont: Naam - ID | Geboortedatum in resultaten
- Keyboard shortcut: Cmd/Ctrl+K - Keyboard shortcut: Cmd/Ctrl+K
### Sidebar menu items: **Gedrag in Level 1:**
- Tonen alleen client-specifieke items als client geselecteerd - Enter of klik op resultaat: Switch naar Level 2, navigeer naar Client Dashboard
- Active state altijd duidelijk gemarkeerd
- Klikken navigeert binnen hetzelfde client dossier **Gedrag in Level 2:**
- Enter of klik op resultaat: Blijf in Level 2, switch naar gekozen client
- Behoudt huidige sectie (blijf op Intake als je op Intake zat)
### Active State Indicators:
**Sidebar:**
- Highlighted background (licht blauw/grijs)
- Bold text
- Left border accent (3px teal/blauw)
- Icon kleurt mee
**Tab/Section:**
- Visual feedback dat huidige sectie actief is
- Breadcrumb (optioneel) toont pad
### URL Structure & Browser Back:
**URL patterns:**
```
Level 1:
/epd/dashboard → Behandelaar dashboard
/epd/clients → Cliënten lijst
/epd/agenda → Behandelaar agenda
/epd/reports → Rapportage/BI
Level 2:
/epd/clients/CL0002 → Client dashboard
/epd/clients/CL0002/intake → Intake sectie
/epd/clients/CL0002/diagnose → Diagnose sectie
/epd/clients/CL0002/plan → Behandelplan
/epd/clients/CL0002/reports → Client rapportage
```
**Browser back button:**
- Werkt zoals verwacht door URL geschiedenis
- Van Level 2 terug naar vorige Level 2 pagina
- Van Client Dashboard terug naar Cliënten Lijst (Level 1)
- Sidebar en header passen zich automatisch aan op basis van URL
--- ---
## State Persistence ## State Persistence
### User komt terug in app: ### User komt terug in app:
- Heropent laatste bezochte scherm - Heropent laatste bezochte scherm (via localStorage of session)
- Als dat een client dossier was: toon die client - Als dat Level 2 was: herstel client context (sidebar + header)
- Als sessie verlopen: start bij [Cliënten Lijst] - Als dat Level 1 was: toon behandelaar context
- Als sessie verlopen: start bij [Behandelaar Dashboard] (Level 1)
### Browser refresh: ### Browser refresh:
- URL bepaalt welk scherm getoond wordt - URL bepaalt welk scherm en context
- `/clients` → Cliënten lijst - URL parsing detecteert automatisch Level 1 vs Level 2
- `/clients/CL0002/dashboard` → Dashboard van Bas - Sidebar en header worden automatisch geconfigureerd
- `/clients/CL0002/intakes` → Intakes van Bas
**Level 1 URL's:**
```
/epd/dashboard → Behandelaar dashboard
/epd/clients → Cliënten lijst
/epd/agenda → Behandelaar agenda
/epd/reports → BI rapportage
```
**Level 2 URL's:**
```
/epd/clients/CL0002 → Client dashboard (Bas)
/epd/clients/CL0002/intake → Intake van Bas
/epd/clients/CL0002/diagnose → Diagnose van Bas
/epd/clients/CL0002/plan → Behandelplan van Bas
```
### Recent clients lijst: ### Recent clients lijst:
- Wordt bijgewerkt bij elke client switch - Opgeslagen in localStorage: `recent_clients: string[]`
- Wordt bijgewerkt bij elke client view (Level 2 entry)
- Max 5 items - Max 5 items
- Gesorteerd op laatst bezocht (nieuwste bovenaan) - Gesorteerd op laatst bezocht (nieuwste bovenaan)
- Format per item:
```typescript
{
id: string; // "CL0002"
name: string; // "Bas Jansen"
birthDate: string; // "20-11-1992"
lastVisited: Date; // timestamp
}
```
### Context State Management:
- Global state tracks: `currentContext: 'behandelaar' | 'client'`
- If context === 'client', also track: `selectedClientId: string`
- Sidebar component subscribes to context changes
- Header component subscribes to context + selectedClient changes
- Context changes trigger sidebar/header re-render
### Scroll Position & Form State:
- Scroll position bewaard per pagina (Level 1 en Level 2 apart)
- Formulieren met unsaved changes: waarschuwing bij navigatie
- TipTap editor: auto-save draft elke 30 seconden (localStorage)
### URL Query Parameters (optioneel):
- Tab states: `/epd/clients/CL0002?tab=intake`
- Filter states: `/epd/clients?status=actief&team=team-a`
- Sorting: `/epd/clients?sortBy=name&order=asc`

View File

@@ -7,7 +7,6 @@
import fs from 'fs' import fs from 'fs'
import path from 'path' import path from 'path'
import matter from 'gray-matter' import matter from 'gray-matter'
import { MDXRemote } from 'next-mdx-remote/rsc'
const RELEASES_DIR = path.join(process.cwd(), 'content/nl/releases') const RELEASES_DIR = path.join(process.cwd(), 'content/nl/releases')

View File

@@ -35,6 +35,7 @@
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/postcss": "^4", "@tailwindcss/postcss": "^4",
"@types/mdx": "^2.0.13",
"@types/node": "^20", "@types/node": "^20",
"@types/react": "^19", "@types/react": "^19",
"@types/react-dom": "^19", "@types/react-dom": "^19",

3
pnpm-lock.yaml generated
View File

@@ -75,6 +75,9 @@ importers:
'@tailwindcss/postcss': '@tailwindcss/postcss':
specifier: ^4 specifier: ^4
version: 4.1.17 version: 4.1.17
'@types/mdx':
specifier: ^2.0.13
version: 2.0.13
'@types/node': '@types/node':
specifier: ^20 specifier: ^20
version: 20.19.24 version: 20.19.24