Files
triqura-ecd/docs/specs/behandelplan/bouwplan-behandelplan-v1.md
colinislit ac98070fe4 | E2.S1 | Prompt engineering | System prompt + user prompt templates, evidence-based mapping
| E2.S2 | Generate endpoint | `POST /api/behandelplan/generate` retourneert JSON, < 8 sec response
| E2.S3 | AI event logging | Calls loggen naar `ai_events` tabel

new file:   app/api/behandelplan/generate/route.ts
modified:   docs/specs/behandelplan/bouwplan-behandelplan-v1.md
modified:   docs/templates/bouwplan_template.md
new file:   lib/ai/behandelplan-prompt.ts
new file:   lib/ai/intervention-mapping.ts
modified:   lib/supabase/database.types.ts
2025-12-04 09:27:12 +01:00

15 KiB

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:


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 Done 3 2-3 uur
E1 Leefgebieden Intake formulier + score weergave Done 3 3-4 uur
E2 AI Generatie Claude API endpoint + prompts Done 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:

// 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:

// 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
  • components/behandelplan/index.ts (exports)

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:

// 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

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


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
v1.1 04-12-2024 Colin Lit Epic 0, 1, 2 afgerond - status bijgewerkt