|---------------------|---------------|---------------------| | E0: Foundation | ✅ Afgerond | Types + DB migratie | | E1: Leefgebieden | ✅ Afgerond | 3 componenten | | E2: AI Generatie | ⏳ Nog te doen | - | | E3: Behandelplan UI | ⏳ Nog te doen | - | Gemaakte bestanden: - lib/types/leefgebieden.ts - 7 domeinen met kleuren/emoji's - lib/types/behandelplan.ts - SMART doelen, interventies, Zod schemas - components/behandelplan/leefgebieden-form.tsx - Intake formulier - components/behandelplan/leefgebieden-scores.tsx - Score weergave - components/behandelplan/leefgebieden-badge.tsx - Domain badges - components/behandelplan/index.ts - Exports
439 lines
14 KiB
Markdown
439 lines
14 KiB
Markdown
# Mission Control — Bouwplan Behandelplan Module
|
|
|
|
**Projectnaam:** Mini-EPD Prototype - Behandelplan Module
|
|
**Versie:** v1.0
|
|
**Datum:** 03-12-2024
|
|
**Auteur:** Colin Lit
|
|
|
|
---
|
|
|
|
## 1. Doel en context
|
|
|
|
**Doel:**
|
|
Een werkende MVP Behandelplan module bouwen die demonstreert hoe AI:
|
|
- **Tijdsbesparing** realiseert: van 30+ minuten naar 2-5 minuten
|
|
- **Kwaliteitsverbetering** biedt: SMART-doelen, evidence-based interventies
|
|
- **Transparantie** creëert: cliënt kan eigen plan begrijpen (B1-taal)
|
|
- **Praktische workflow** ondersteunt: intake → diagnose → behandelplan
|
|
|
|
**Context:**
|
|
Deze module is onderdeel van de AI Speedrun LinkedIn Serie. Het prototype demonstreert AI-toegevoegde waarde voor zorgprofessionals, product owners en developers.
|
|
|
|
**Gerelateerde documenten:**
|
|
- [PRD Behandelplan v2.0](./prd-behandelplan-v2-final.md)
|
|
- [FO Behandelplan v1.0](./fo-behandelplan-v1.md)
|
|
- [TO Behandelplan v1.0](./to-behandelplan-v1.md)
|
|
|
|
---
|
|
|
|
## 2. Uitgangspunten
|
|
|
|
### 2.1 Technische Stack
|
|
|
|
| Component | Technologie | Status |
|
|
|-----------|-------------|--------|
|
|
| **Frontend** | Next.js 14.2 + TailwindCSS + shadcn/ui | ✅ Bestaand |
|
|
| **Backend** | Next.js API Routes + Server Actions | ✅ Bestaand |
|
|
| **Database** | Supabase PostgreSQL + RLS | ✅ Bestaand |
|
|
| **AI/ML** | Claude 3.5 Sonnet (Anthropic) | ✅ Bestaand |
|
|
| **Hosting** | Vercel | ✅ Bestaand |
|
|
| **Auth** | Supabase Auth | ✅ Bestaand |
|
|
| **Icons** | Lucide React | ✅ Bestaand |
|
|
| **Editor** | TipTap | ✅ Bestaand |
|
|
| **Validation** | Zod | ✅ Bestaand |
|
|
| **Charts** | Recharts | ⏳ Stretch goal |
|
|
|
|
### 2.2 Projectkaders
|
|
|
|
| Kader | Waarde |
|
|
|-------|--------|
|
|
| **Tijd** | 14-19 uur bouwtijd voor MVP |
|
|
| **Budget** | €0 extra (bestaande API keys) |
|
|
| **Team** | 1 developer + AI assistentie |
|
|
| **Data** | Fictieve demo-data (geen productiegegevens) |
|
|
| **Doel** | Werkende demo voor LinkedIn serie |
|
|
|
|
### 2.3 Gekozen Aanpak
|
|
|
|
- **Foundation first**: Types en database migraties eerst, dan UI
|
|
- **Simpele visualisatie**: Progress bars i.p.v. radar chart (stretch)
|
|
- **Simple JSON**: Geen streaming, enkele API call met loading state
|
|
|
|
### 2.4 Programmeer Uitgangspunten
|
|
|
|
**Code Quality Principles:**
|
|
|
|
- **DRY (Don't Repeat Yourself)**
|
|
- Herbruikbare leefgebieden componenten
|
|
- Centrale types voor behandelplan structuur
|
|
- Utility functions voor score berekeningen
|
|
|
|
- **KISS (Keep It Simple, Stupid)**
|
|
- Simple JSON API (geen streaming complexity)
|
|
- Progress bars i.p.v. radar chart
|
|
- Bestaande UI patterns hergebruiken
|
|
|
|
- **SOC (Separation of Concerns)**
|
|
- Types in `/lib/types/behandelplan.ts`
|
|
- AI prompts in `/lib/ai/behandelplan-prompt.ts`
|
|
- Server actions in `/app/epd/patients/[id]/behandelplan/actions.ts`
|
|
- UI components in `/components/behandelplan/`
|
|
|
|
- **YAGNI (You Aren't Gonna Need It)**
|
|
- Geen versie-diff view (stretch)
|
|
- Geen real-time collaboration
|
|
- Geen notificaties/reminders
|
|
|
|
**Development Practices:**
|
|
|
|
- **Error Handling**
|
|
- Try-catch op alle AI calls
|
|
- Fallback naar manual mode bij AI failure
|
|
- User-friendly foutmeldingen
|
|
|
|
- **Security**
|
|
- ANTHROPIC_API_KEY in environment
|
|
- RLS policies op care_plans
|
|
- Zod validation op alle inputs
|
|
|
|
- **Performance**
|
|
- AI response < 8 seconden
|
|
- Skeleton loaders tijdens generatie
|
|
- Optimistic updates voor status
|
|
|
|
---
|
|
|
|
## 3. Epics & Stories Overzicht
|
|
|
|
| Epic ID | Titel | Doel | Status | Stories | Geschat |
|
|
|---------|-------|------|--------|---------|---------|
|
|
| E0 | Foundation | Types, database schema | ⏳ To Do | 3 | 2-3 uur |
|
|
| E1 | Leefgebieden | Intake formulier + score weergave | ⏳ To Do | 3 | 3-4 uur |
|
|
| E2 | AI Generatie | Claude API endpoint + prompts | ⏳ To Do | 3 | 3-4 uur |
|
|
| E3 | Behandelplan UI | Pagina + componenten | ⏳ To Do | 5 | 6-8 uur |
|
|
| E4 | Stretch | Micro-regeneratie, radar chart | ⏳ Optioneel | 3 | 3-5 uur |
|
|
|
|
**Totaal MVP (E0-E3):** 14-19 uur
|
|
**Totaal met Stretch:** 17-24 uur
|
|
|
|
---
|
|
|
|
## 4. Epics & Stories (Uitwerking)
|
|
|
|
### Epic 0 — Foundation (Types & Database)
|
|
|
|
**Epic Doel:** Solide basis met TypeScript types en database schema uitbreiding.
|
|
|
|
| Story ID | Beschrijving | Acceptatiecriteria | Status | Afhankelijkheden | SP |
|
|
|----------|--------------|---------------------|--------|------------------|----|
|
|
| E0.S1 | Leefgebieden types maken | `lib/types/leefgebieden.ts` met LifeDomain, LifeDomainScore types | ⏳ | — | 1 |
|
|
| E0.S2 | Behandelplan types maken | `lib/types/behandelplan.ts` met SmartGoal, Intervention, GeneratedPlan types + Zod schemas | ⏳ | E0.S1 | 2 |
|
|
| E0.S3 | Database migratie | `care_plans` uitgebreid met version, behandelstructuur, evaluatiemomenten; `intakes` met life_domains | ⏳ | E0.S2 | 2 |
|
|
|
|
**Technical Notes:**
|
|
```typescript
|
|
// lib/types/leefgebieden.ts
|
|
export type LifeDomain = 'dlv' | 'wonen' | 'werk' | 'sociaal' | 'vrijetijd' | 'financien' | 'gezondheid'
|
|
|
|
export interface LifeDomainScore {
|
|
domain: LifeDomain
|
|
baseline: number // 1-5
|
|
current: number // 1-5
|
|
target: number // 1-5
|
|
notes: string
|
|
priority: 'laag' | 'middel' | 'hoog'
|
|
}
|
|
```
|
|
|
|
**Deliverables:**
|
|
- [ ] `lib/types/leefgebieden.ts`
|
|
- [ ] `lib/types/behandelplan.ts`
|
|
- [ ] Database migratie via Supabase MCP (cloud-only, geen lokale instantie)
|
|
- [ ] Gegenereerde database types via `mcp__supabase__generate_typescript_types`
|
|
|
|
---
|
|
|
|
### Epic 1 — Leefgebieden Componenten
|
|
|
|
**Epic Doel:** Formulier voor intake + visuele weergave van scores.
|
|
|
|
| Story ID | Beschrijving | Acceptatiecriteria | Status | Afhankelijkheden | SP |
|
|
|----------|--------------|---------------------|--------|------------------|----|
|
|
| E1.S1 | Leefgebieden formulier | 7 sliders (1-5), toelichting velden, prioriteit dropdowns | ⏳ | E0.S3 | 3 |
|
|
| E1.S2 | Leefgebieden scores weergave | 7 progress bars met kleuren, baseline vs current indicator | ⏳ | E0.S1 | 2 |
|
|
| E1.S3 | Leefgebieden badge component | Gekleurde tag per domein met emoji | ⏳ | E0.S1 | 1 |
|
|
|
|
**Technical Notes:**
|
|
```typescript
|
|
// Kleuren per leefgebied
|
|
const DOMAIN_COLORS = {
|
|
dlv: '#8b5cf6', // paars
|
|
wonen: '#ec4899', // roze
|
|
werk: '#f59e0b', // oranje
|
|
sociaal: '#3b82f6', // blauw
|
|
vrijetijd: '#10b981', // groen
|
|
financien: '#eab308', // geel
|
|
gezondheid: '#ef4444', // rood
|
|
}
|
|
```
|
|
|
|
**Deliverables:**
|
|
- [ ] `components/behandelplan/leefgebieden-form.tsx`
|
|
- [ ] `components/behandelplan/leefgebieden-scores.tsx`
|
|
- [ ] `components/behandelplan/leefgebieden-badge.tsx`
|
|
|
|
---
|
|
|
|
### Epic 2 — AI Generatie
|
|
|
|
**Epic Doel:** Claude API endpoint voor behandelplan generatie.
|
|
|
|
| Story ID | Beschrijving | Acceptatiecriteria | Status | Afhankelijkheden | SP |
|
|
|----------|--------------|---------------------|--------|------------------|----|
|
|
| E2.S1 | Prompt engineering | System prompt + user prompt templates, evidence-based mapping | ⏳ | E0.S2 | 2 |
|
|
| E2.S2 | Generate endpoint | `POST /api/behandelplan/generate` retourneert JSON, < 8 sec response | ⏳ | E2.S1 | 3 |
|
|
| E2.S3 | AI event logging | Calls loggen naar `ai_events` tabel | ⏳ | E2.S2 | 1 |
|
|
|
|
**Technical Notes:**
|
|
```typescript
|
|
// Prompt structuur
|
|
const messages = [
|
|
{ role: 'system', content: BEHANDELPLAN_SYSTEM_PROMPT },
|
|
{ role: 'user', content: buildUserPrompt(context) },
|
|
];
|
|
|
|
// AI settings
|
|
const settings = {
|
|
model: 'claude-3-5-sonnet-20240620',
|
|
max_tokens: 4096,
|
|
temperature: 0.3, // Consistent maar niet robotisch
|
|
};
|
|
```
|
|
|
|
**Deliverables:**
|
|
- [ ] `lib/ai/behandelplan-prompt.ts`
|
|
- [ ] `lib/ai/intervention-mapping.ts`
|
|
- [ ] `app/api/behandelplan/generate/route.ts`
|
|
|
|
---
|
|
|
|
### Epic 3 — Behandelplan UI
|
|
|
|
**Epic Doel:** Werkende behandelplan pagina met alle componenten.
|
|
|
|
| Story ID | Beschrijving | Acceptatiecriteria | Status | Afhankelijkheden | SP |
|
|
|----------|--------------|---------------------|--------|------------------|----|
|
|
| E3.S1 | Behandelplan pagina | Placeholder vervangen, data loading, status weergave | ⏳ | E2.S2 | 2 |
|
|
| E3.S2 | Generate button + flow | Button triggert AI, loading state, resultaat weergave | ⏳ | E3.S1 | 2 |
|
|
| E3.S3 | SMART doelen sectie | Goal cards met progress, status, leefgebied badge | ⏳ | E3.S1, E1.S3 | 3 |
|
|
| E3.S4 | Interventies sectie | Intervention cards met gekoppelde doelen | ⏳ | E3.S3 | 2 |
|
|
| E3.S5 | Server actions | Create, update, delete, publish behandelplan | ⏳ | E3.S1 | 2 |
|
|
|
|
**Technical Notes:**
|
|
```
|
|
/app/epd/patients/[id]/behandelplan/
|
|
├── page.tsx # Server component
|
|
├── actions.ts # Server actions
|
|
└── components/
|
|
├── behandelplan-view.tsx
|
|
├── generate-button.tsx
|
|
├── goals-section.tsx
|
|
├── goal-card.tsx
|
|
└── interventions-section.tsx
|
|
```
|
|
|
|
**Deliverables:**
|
|
- [ ] `app/epd/patients/[id]/behandelplan/page.tsx` (vervangen)
|
|
- [ ] `app/epd/patients/[id]/behandelplan/actions.ts`
|
|
- [ ] `components/behandelplan/behandelplan-view.tsx`
|
|
- [ ] `components/behandelplan/generate-button.tsx`
|
|
- [ ] `components/behandelplan/goals-section.tsx`
|
|
- [ ] `components/behandelplan/goal-card.tsx`
|
|
- [ ] `components/behandelplan/interventions-section.tsx`
|
|
|
|
---
|
|
|
|
### Epic 4 — Stretch Goals (Optioneel)
|
|
|
|
**Epic Doel:** Extra features indien tijd beschikbaar.
|
|
|
|
| Story ID | Beschrijving | Acceptatiecriteria | Status | Afhankelijkheden | SP |
|
|
|----------|--------------|---------------------|--------|------------------|----|
|
|
| E4.S1 | Micro-regeneratie | Per doel [↻] knop, modal met instructie, nieuw voorstel | ⏳ | E3.S3 | 3 |
|
|
| E4.S2 | Radar chart | Recharts installeren, 3-lijn spindiagram | ⏳ | E1.S2 | 3 |
|
|
| E4.S3 | Sessie-planning | Tabel met 8-12 sessies, status per sessie | ⏳ | E3.S1 | 2 |
|
|
|
|
**Technical Notes:**
|
|
- Recharts: `pnpm add recharts`
|
|
- Regenerate endpoint: `POST /api/behandelplan/regenerate-section`
|
|
|
|
---
|
|
|
|
## 5. Kwaliteit & Testplan
|
|
|
|
### Test Types
|
|
|
|
| Test Type | Scope | Tools | Status |
|
|
|-----------|-------|-------|--------|
|
|
| Unit Tests | Types, utilities | Vitest | ⏳ Nice to have |
|
|
| Integration | API endpoints | Manual + curl | ✅ Required |
|
|
| Smoke Tests | Happy flow | Manual checklist | ✅ Required |
|
|
| Performance | AI response time | Network tab | ✅ Required |
|
|
|
|
### Manual Test Checklist (Demo)
|
|
|
|
**Pre-conditions:**
|
|
- [ ] Patient bestaat met intake data
|
|
- [ ] Diagnose/probleemprofiel is ingevuld
|
|
- [ ] Leefgebieden scores zijn ingevuld
|
|
|
|
**Happy Flow:**
|
|
- [ ] Behandelplan pagina laadt zonder errors
|
|
- [ ] "Genereer Behandelplan" knop is zichtbaar
|
|
- [ ] AI genereert plan binnen 8 seconden
|
|
- [ ] 2-4 SMART doelen worden getoond
|
|
- [ ] Doelen hebben leefgebied badges
|
|
- [ ] Interventies zijn gekoppeld aan doelen
|
|
- [ ] B1-taal versie is beschikbaar per doel
|
|
- [ ] Plan kan worden opgeslagen
|
|
- [ ] Status kan worden gewijzigd (concept → actief)
|
|
|
|
**Error Scenarios:**
|
|
- [ ] Geen intake data → "Vul eerst intake in" melding
|
|
- [ ] AI API error → "AI niet beschikbaar" melding + retry optie
|
|
- [ ] Validatie error → Inline error messages
|
|
|
|
---
|
|
|
|
## 6. Demo & Presentatieplan
|
|
|
|
### Demo Scenario
|
|
|
|
**Duur:** 5-7 minuten
|
|
**Doelgroep:** LinkedIn audience (product owners, developers, zorgprofessionals)
|
|
|
|
**Flow:**
|
|
|
|
1. **Context** (30 sec)
|
|
- "Behandelplan schrijven kost 30+ minuten"
|
|
- "AI kan dit reduceren naar 2-5 minuten"
|
|
|
|
2. **Leefgebieden invullen** (1 min)
|
|
- Toon 7 domeinen met sliders
|
|
- Prioriteiten instellen
|
|
- Opslaan
|
|
|
|
3. **AI Generatie** (2 min)
|
|
- Klik op "Genereer Behandelplan"
|
|
- Toon loading state met timer
|
|
- Resultaat verschijnt (< 5 sec)
|
|
|
|
4. **Resultaat bekijken** (2 min)
|
|
- SMART doelen met leefgebied tags
|
|
- B1-taal versie voor cliënt
|
|
- Evidence-based interventies
|
|
- Behandelstructuur
|
|
|
|
5. **Aanpassen** (1 min)
|
|
- Doel bewerken
|
|
- Status wijzigen
|
|
- Publiceren
|
|
|
|
**Key Highlights:**
|
|
- Tijdsbesparing: 30 min → 5 min
|
|
- Kwaliteit: SMART-criteria automatisch
|
|
- Transparantie: B1-taal voor cliënt
|
|
|
|
---
|
|
|
|
## 7. Risico's & Mitigatie
|
|
|
|
| Risico | Kans | Impact | Mitigatie | Owner |
|
|
|--------|------|--------|-----------|-------|
|
|
| AI genereert invalide JSON | Middel | Hoog | Zod validation, retry (2x), fallback message | Dev |
|
|
| AI response > 8 seconden | Laag | Middel | Timeout handling, loading feedback | Dev |
|
|
| Leefgebieden UI te complex | Middel | Middel | Simpele sliders, geen radar chart (MVP) | Dev |
|
|
| Database migratie faalt | Laag | Hoog | Test lokaal eerst, rollback script | Dev |
|
|
| Prompt geeft slechte output | Middel | Hoog | Itereren op prompt, few-shot examples | Dev |
|
|
| Scope creep | Hoog | Middel | Strikte MVP scope, stretch als optioneel | Dev |
|
|
|
|
---
|
|
|
|
## 8. Implementatie Volgorde
|
|
|
|
```
|
|
Week 1 (14-19 uur totaal)
|
|
├── Dag 1: E0 - Foundation (2-3 uur)
|
|
│ ├── E0.S1: Leefgebieden types
|
|
│ ├── E0.S2: Behandelplan types
|
|
│ └── E0.S3: Database migratie
|
|
│
|
|
├── Dag 2: E1 - Leefgebieden (3-4 uur)
|
|
│ ├── E1.S1: Formulier component
|
|
│ ├── E1.S2: Scores weergave
|
|
│ └── E1.S3: Badge component
|
|
│
|
|
├── Dag 3: E2 - AI Generatie (3-4 uur)
|
|
│ ├── E2.S1: Prompt engineering
|
|
│ ├── E2.S2: Generate endpoint
|
|
│ └── E2.S3: Event logging
|
|
│
|
|
└── Dag 4-5: E3 - UI (6-8 uur)
|
|
├── E3.S1: Behandelplan pagina
|
|
├── E3.S2: Generate button
|
|
├── E3.S3: Doelen sectie
|
|
├── E3.S4: Interventies sectie
|
|
└── E3.S5: Server actions
|
|
|
|
Optioneel (indien tijd):
|
|
└── E4 - Stretch Goals
|
|
├── E4.S1: Micro-regeneratie
|
|
├── E4.S2: Radar chart
|
|
└── E4.S3: Sessie-planning
|
|
```
|
|
|
|
---
|
|
|
|
## 9. Referenties
|
|
|
|
### Mission Control Documents
|
|
- **PRD** — [prd-behandelplan-v2-final.md](./prd-behandelplan-v2-final.md)
|
|
- **FO** — [fo-behandelplan-v1.md](./fo-behandelplan-v1.md)
|
|
- **TO** — [to-behandelplan-v1.md](./to-behandelplan-v1.md)
|
|
- **UX/UI** — [ux-stylesheet.md](../ux-stylesheet.md)
|
|
|
|
### Bestaande Code
|
|
- API pattern: `/app/api/reports/classify/route.ts`
|
|
- Server actions: `/app/epd/patients/[id]/intakes/[intakeId]/actions.ts`
|
|
- Types pattern: `/lib/types/report.ts`
|
|
- AI integration: `/app/api/docs/chat/route.ts`
|
|
|
|
### External Resources
|
|
- Repository: `github.com/[org]/15-mini-epd-prototype`
|
|
- Anthropic Docs: https://docs.anthropic.com/claude/reference
|
|
- Supabase Docs: https://supabase.com/docs
|
|
|
|
---
|
|
|
|
## 10. Glossary & Abbreviations
|
|
|
|
| Term | Betekenis |
|
|
|------|-----------|
|
|
| SMART | Specifiek, Meetbaar, Acceptabel, Realistisch, Tijdgebonden |
|
|
| B1-taal | Taalniveau begrijpelijk voor algemeen publiek |
|
|
| Leefgebieden | 7 levensdomeinen volgens herstelgerichte zorg |
|
|
| DSM | Diagnostic and Statistical Manual (diagnose classificatie) |
|
|
| RLS | Row Level Security (Supabase) |
|
|
| FHIR | Fast Healthcare Interoperability Resources |
|
|
| Care Plan | FHIR resource voor behandelplan |
|
|
| SP | Story Points |
|
|
| MVP | Minimum Viable Product |
|
|
|
|
---
|
|
|
|
**Versiehistorie:**
|
|
|
|
| Versie | Datum | Auteur | Wijziging |
|
|
|--------|-------|--------|-----------|
|
|
| v1.0 | 03-12-2024 | Colin Lit | Initiële versie |
|