feat: complete E2.S5 Input → Block wiring

- Implementeer handleSubmit met API call naar /api/intent/classify
- Voeg error handling en fallback naar dagnotitie toe
- Integreer openBlock en addRecentAction
- Update bouwplan: Epic 2 compleet (33 SP done, 46%)
This commit is contained in:
colinislit
2025-12-24 08:44:40 +01:00
parent db036a3d92
commit 3e94271827
7 changed files with 3449 additions and 5 deletions

View File

@@ -0,0 +1,725 @@
# 🧩 Functioneel Ontwerp (FO) — Swift: Diagnostiek Workflow
**Projectnaam:** Swift — Contextual UI EPD
**Versie:** v1.0
**Datum:** 23-12-2024
**Auteur:** Colin Lit
---
## 1. Doel en relatie met het PRD
🎯 **Doel van dit document:**
Dit Functioneel Ontwerp beschrijft **hoe** de diagnostiek workflow in Swift functioneel werkt — van het plannen van een diagnostiek-afspraak tot het stellen en bijstellen van diagnoses. Dit document focust specifiek op de complete flow die behandelaars doorlopen tijdens een diagnostiek-traject.
📘 **Relatie met andere documenten:**
- **PRD:** `swift-prd.md` — Product visie en requirements
- **FO Algemeen:** `swift-fo-ai.md` — Algemene Swift functionaliteit
- **Bouwplan:** `bouwplan-swift-v1.md` — Technische implementatie planning
- **UX/UI:** `swift-ux-v2.1.md` — Visuele specificaties
**Kernprincipe:**
> Een behandelaar kan een volledig diagnostiek-traject doorlopen via natuurlijke taal: van afspraak plannen, via rapportage schrijven, tot diagnose stellen — alles in één vloeiende flow zonder menu-navigatie.
---
## 2. Overzicht van de belangrijkste onderdelen
🎯 **Doel:** Overzicht van de modules en blocks binnen de diagnostiek workflow.
### 2.1 Workflow Componenten
| # | Component | Beschrijving | Type |
|---|-----------|--------------|------|
| 1 | **AfspraakBlock** | Diagnostiek-afspraak plannen | Block |
| 2 | **RapportageBlock** | Verslag schrijven na afspraak | Block |
| 3 | **DiagnoseBlock** | Overzicht van diagnoses | Block |
| 4 | **DiagnoseFormBlock** | Diagnose aanmaken/bijstellen | Block |
### 2.2 Workflow Flow
```
Afspraak Plannen → Rapportage Schrijven → Diagnose Bekijken → Diagnose Aanmaken/Bijstellen
```
### 2.3 Relatie met Bestaande Blocks
| Block | Relatie met Diagnostiek Workflow |
|-------|----------------------------------|
| **ZoekenBlock** | Wordt gebruikt voor patiëntselectie |
| **PatientContextCard** | Toont actieve diagnoses in overzicht |
| **AgendaBlock** | Toont geplande diagnostiek-afspraken |
---
## 3. User Stories
🎯 **Doel:** Beschrijven wat behandelaars moeten kunnen doen tijdens een diagnostiek-traject.
### 3.1 Diagnostiek Workflow Stories
| ID | Rol | Doel / Actie | Verwachte waarde | Prio |
|----|-----|--------------|------------------|------|
| US-D01 | Behandelaar | Diagnostiek-afspraak plannen via spraak/tekst | Afspraak in < 30 sec zonder menu-navigatie | 🟡 P2 |
| US-D02 | Behandelaar | Rapportage schrijven en koppelen aan afspraak | Verslag automatisch gekoppeld aan encounter | 🟡 P2 |
| US-D03 | Behandelaar | Alle diagnoses van patiënt bekijken | Overzicht in één oogopslag | 🟡 P2 |
| US-D04 | Behandelaar | Nieuwe diagnose toevoegen met ICD-10 zoeker | Diagnose toegevoegd met correcte code | 🟡 P2 |
| US-D05 | Behandelaar | Bestaande diagnose bijstellen (status, ernst) | Wijzigingen direct zichtbaar | 🟡 P2 |
### 3.2 User Story Details
**US-D01: Diagnostiek-afspraak plannen**
> Als behandelaar wil ik een diagnostiek-afspraak kunnen plannen door te zeggen "afspraak diagnostiek met Jan morgen 10:00" zodat ik snel kan plannen zonder door menu's te navigeren.
**US-D02: Rapportage koppelen aan afspraak**
> Als behandelaar wil ik een rapportage kunnen schrijven die automatisch gekoppeld wordt aan de diagnostiek-afspraak zodat ik niet handmatig hoef te koppelen.
**US-D03: Diagnoses bekijken**
> Als behandelaar wil ik alle diagnoses van een patiënt kunnen bekijken door te zeggen "diagnose Jan" zodat ik snel een overzicht heb zonder te navigeren.
**US-D04: Diagnose toevoegen**
> Als behandelaar wil ik een nieuwe diagnose kunnen toevoegen met een ICD-10 zoeker zodat ik de juiste code kan vinden zonder handmatig te zoeken.
**US-D05: Diagnose bijstellen**
> Als behandelaar wil ik een bestaande diagnose kunnen bijstellen (status, ernst) zodat ik diagnoses kan actualiseren na behandeling.
---
## 4. Functionele werking per onderdeel
🎯 **Doel:** Per component beschrijven wat de gebruiker kan doen en wat het systeem doet.
### 4.1 AfspraakBlock
**Functie:** Diagnostiek-afspraak plannen via natuurlijke taal.
**Trigger patterns:**
- "afspraak diagnostiek met [patient] [datum] [tijd]"
- "plan diagnostiek voor [patient] morgen"
- "afspraak [patient] volgende week dinsdag 10:00"
**Pre-fill logica:**
| Extracted | Pre-fill |
|-----------|----------|
| patient_name → match | Patiënt selector |
| "diagnostiek" keyword | Type = Diagnostiek |
| "morgen", "vandaag", datum | Datum picker |
| Tijd (10:00, 14:30) | Starttijd |
| Geen tijd | Default 09:00 |
**Form velden:**
| Veld | Type | Verplicht | Default |
|------|------|-----------|---------|
| Patiënt | Dropdown + search | Ja | Pre-filled of ZoekenBlock |
| Datum | Date picker | Ja | Pre-filled of vandaag |
| Starttijd | Time picker | Ja | Pre-filled of 09:00 |
| Eindtijd | Time picker | Nee | Starttijd + 1 uur |
| Type | Dropdown | Ja | Diagnostiek (pre-selected) |
| Locatie | Dropdown | Nee | AMB |
**Afspraak types:**
- Diagnostiek
- Behandeling
- Evaluatie
- Consult
- Overig
**Acties:**
| Knop | Actie | Keyboard |
|------|-------|----------|
| Opslaan | POST naar API, sluit block, retourneert encounter_id | `⌘Enter` |
| Annuleren | Sluit block zonder opslaan | `Escape` |
**Na opslaan:**
1. Toast: "✓ Afspraak diagnostiek met Jan de Vries aangemaakt voor morgen 10:00"
2. Block verdwijnt (200ms animatie)
3. Recent strip: badge "[📅 Jan - Diagnostiek]"
4. Encounter_id wordt opgeslagen in context voor volgende stap
**API:**
```
POST /api/appointments
Body: {
patient_id: string,
period_start: datetime,
period_end: datetime,
type_code: 'diagnostiek',
class_code: 'AMB',
notes?: string
}
Response: {
id: string (encounter_id),
success: boolean
}
```
---
### 4.2 RapportageBlock (Uitgebreid)
**Functie:** Verslag schrijven na diagnostiek-afspraak, gekoppeld aan encounter.
**Trigger patterns:**
- "rapportage diagnostiek gesprek met [patient]"
- "verslag van diagnostiek afspraak [patient]"
- "rapportage [patient]" (als recente diagnostiek-afspraak bestaat)
**Pre-fill logica:**
| Extracted | Pre-fill |
|-----------|----------|
| patient_name → match | Patiënt selector |
| "diagnostiek" keyword | Type = Diagnostiek |
| Recente encounter (diagnostiek) | Encounter_id gekoppeld |
| Geen encounter | Geen koppeling, suggestie tonen |
**Form velden:**
| Veld | Type | Verplicht | Default |
|------|------|-----------|---------|
| Patiënt | Dropdown | Ja | Pre-filled |
| Gekoppeld aan | Link naar encounter | Nee | Recente diagnostiek-afspraak |
| Type | Button group | Ja | Diagnostiek (pre-selected) |
| Inhoud | Rich text editor | Ja | Leeg |
| Datum/tijd | DateTime | Ja | Nu |
**Rapportage types:**
- Diagnostiek
- Gesprek
- Evaluatie
- Telefonisch
- Consult
**AI acties:**
| Actie | Beschrijving | Output |
|-------|--------------|--------|
| ✨ Samenvatten | Bullets van kernpunten | Zijpaneel |
| 📖 B1-niveau | Herschrijf leesbaar | Zijpaneel |
| 🔍 Problemen | Extraheer klinische issues | Zijpaneel |
**Acties:**
| Knop | Actie | Keyboard |
|------|-------|----------|
| Opslaan | POST naar API met encounter_id, sluit block | `⌘Enter` |
| Annuleren | Sluit block zonder opslaan | `Escape` |
**Na opslaan:**
1. Toast: "✓ Rapportage opgeslagen en gekoppeld aan afspraak"
2. Block verdwijnt
3. Recent strip: badge "[📋 Jan - Diagnostiek]"
**API:**
```
POST /api/reports
Body: {
patient_id: string,
encounter_id: string, // Nieuwe: koppeling aan afspraak
type: 'diagnostiek',
content: string (HTML),
timestamp: datetime
}
```
---
### 4.3 DiagnoseBlock
**Functie:** Overzicht van alle diagnoses van een patiënt.
**Trigger patterns:**
- "diagnose [patient]"
- "diagnoses van [patient]"
- "wat zijn de diagnoses van [patient]"
- Klik op "Diagnoses" in PatientContextCard
**Layout:**
```
┌─────────────────────────────────────────────────────────────┐
│ 🏥 Diagnoses van Jan de Vries [×] │
├─────────────────────────────────────────────────────────────┤
│ │
│ Filter: [Actief ✓] [Inactief] [Alle] │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ F41.1 Gegeneraliseerde angststoornis │ │
│ │ Status: Actief | Ernst: Matig │ │
│ │ Toegevoegd: 15 nov 2024 | Intake: Intake 1 │ │
│ │ [Bewerken] [Details] │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ F32.1 Depressieve stoornis │ │
│ │ Status: Actief | Ernst: Mild │ │
│ │ Toegevoegd: 20 dec 2024 | Intake: Intake 2 │ │
│ │ [Bewerken] [Details] │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ [+ Nieuwe diagnose toevoegen] │
│ │
└─────────────────────────────────────────────────────────────┘
```
**Gedrag:**
- Toont lijst met diagnoses, gesorteerd op datum (nieuwste eerst)
- Filter tabs: Actief / Inactief / Alle
- Per diagnose: code, omschrijving, status, ernst, datum, intake
- Klik op diagnose → DiagnoseFormBlock (edit mode)
- Klik "Nieuwe diagnose" → DiagnoseFormBlock (create mode)
**Empty state:**
"Geen diagnoses gevonden voor [patient]. [+ Nieuwe diagnose toevoegen]"
**API:**
```
GET /api/diagnoses/:patientId
Response: {
diagnoses: [
{
id: string,
code_code: string,
code_display: string,
clinical_status: 'active' | 'inactive' | 'resolved',
severity_display: string,
recorded_date: datetime,
encounter_id: string,
intake?: {
id: string,
title: string
}
}
]
}
```
---
### 4.4 DiagnoseFormBlock
**Functie:** Diagnose aanmaken of bijstellen met ICD-10 zoeker.
**Trigger patterns:**
- "diagnose toevoegen [patient] [ICD-10 code]"
- "diagnose wijzigen [patient]"
- "diagnose bijstellen [patient]"
- Klik op diagnose in DiagnoseBlock
- Klik "Nieuwe diagnose" in DiagnoseBlock
**Pre-fill logica (create mode):**
| Extracted | Pre-fill |
|-----------|----------|
| patient_name → match | Patiënt selector (read-only) |
| ICD-10 code (F41.1) | Code + omschrijving via zoeker |
| Geen code | ICD-10 zoeker open |
**Pre-fill logica (edit mode):**
| Veld | Pre-fill |
|------|----------|
| Patiënt | Read-only, huidige waarde |
| ICD-10 code | Huidige code |
| Omschrijving | Huidige omschrijving |
| Type | Huidige type (hoofd/neven) |
| Status | Huidige status |
| Ernst | Huidige ernst |
| Intake | Huidige intake koppeling |
| Toelichting | Huidige toelichting |
**Form velden:**
| Veld | Type | Verplicht | Default |
|------|------|-----------|---------|
| Patiënt | Read-only | Ja | Pre-filled |
| ICD-10 zoeker | Search + dropdown | Ja | Leeg of pre-filled |
| Code | Text (read-only na selectie) | Ja | Uit zoeker |
| Omschrijving | Text (read-only na selectie) | Ja | Uit zoeker |
| Type | Radio buttons | Ja | Hoofddiagnose |
| Status | Dropdown | Ja | Actief |
| Ernst | Dropdown | Nee | Geen |
| Intake koppeling | Dropdown | Nee | Geen |
| Toelichting | Textarea | Nee | Leeg |
**ICD-10 zoeker gedrag:**
- Fuzzy search tijdens typen (minimaal 2 karakters)
- Resultaten dropdown met code + omschrijving
- Bij selectie: code en omschrijving worden ingevuld
- Zoek op code (F41.1) of omschrijving (angst)
**Status opties:**
- Actief
- Inactief
- Resolved
- Remission
- Recurrence
- Relapse
**Ernst opties:**
- Geen
- Mild
- Matig
- Ernstig
**Type opties:**
- Hoofddiagnose
- Nevendiagnose
**Acties:**
| Knop | Actie | Keyboard |
|------|-------|----------|
| Opslaan | POST/PATCH naar API, sluit block | `⌘Enter` |
| Annuleren | Sluit block zonder opslaan | `Escape` |
| Verwijderen | Bevestigingsdialog → soft delete | - |
**Na opslaan:**
1. Toast: "✓ Diagnose F41.1 - Gegeneraliseerde angststoornis toegevoegd" (of "bijgewerkt")
2. Block verdwijnt
3. DiagnoseBlock wordt automatisch getoond met nieuwe/bijgewerkte diagnose
**API:**
```
POST /api/diagnoses
Body: {
patient_id: string,
encounter_id?: string,
code_code: string,
code_display: string,
code_system: 'ICD-10',
clinical_status: 'active' | 'inactive' | 'resolved',
severity_display?: string,
category: 'primary-diagnosis' | 'encounter-diagnosis',
note?: string
}
PATCH /api/diagnoses/:id
Body: {
code_code?: string,
code_display?: string,
clinical_status?: string,
severity_display?: string,
category?: string,
note?: string
}
```
---
## 5. UI-overzicht (visuele structuur)
🎯 **Doel:** Globale schermopbouw voor diagnostiek workflow blocks.
### 5.1 AfspraakBlock Layout
```
┌─────────────────────────────────────────────────────────────┐
│ 📅 Nieuwe Afspraak [] [×] │
├─────────────────────────────────────────────────────────────┤
│ │
│ Patiënt * │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ Jan de Vries ✓ │ │
│ │ 59 jaar • Kamer 12B [← Auto] │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ Datum * Van * Tot │
│ ┌─────────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 2024-12-24 │ │ 10:00 │ │ 11:00 │ │
│ └─────────────┘ └─────────┘ └─────────┘ │
│ │
│ Type afspraak * │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ [Diagnostiek ▼] │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ Locatie │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ [AMB ▼] │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ Notities (optioneel) │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ [Annuleren] [Opslaan] │
│ │
└─────────────────────────────────────────────────────────────┘
```
### 5.2 RapportageBlock Layout (met encounter koppeling)
```
┌─────────────────────────────────────────────────────────────┐
│ 📋 Rapportage [] [×] │
├─────────────────────────────────────────────────────────────┤
│ │
│ Patiënt: Jan de Vries [Wijzig] │
│ │
│ Gekoppeld aan: Afspraak diagnostiek - 24 dec 2024 10:00 │
│ │
│ Type │
│ [Diagnostiek ✓] [Gesprek] [Evaluatie] [Telefonisch] │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ [B] [I] [•] [1.] ["] 🎤 Dicteer │ │
│ ├───────────────────────────────────────────────────────┤ │
│ │ │ │
│ │ Verslag van diagnostiek gesprek... │ │
│ │ │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ AI-acties │
│ [✨ Samenvatten] [📖 B1-niveau] [🔍 Problemen extraheren] │
│ │
│ [Annuleren] [Opslaan] │
│ │
└─────────────────────────────────────────────────────────────┘
```
### 5.3 DiagnoseBlock Layout
```
┌─────────────────────────────────────────────────────────────┐
│ 🏥 Diagnoses van Jan de Vries [] [×] │
├─────────────────────────────────────────────────────────────┤
│ │
│ Filter: [Actief ✓] [Inactief] [Alle] │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ F41.1 Gegeneraliseerde angststoornis │ │
│ │ Status: Actief | Ernst: Matig │ │
│ │ Toegevoegd: 15 nov 2024 | Intake: Intake 1 │ │
│ │ │ │
│ │ [Bewerken] [Details] │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ F32.1 Depressieve stoornis │ │
│ │ Status: Actief | Ernst: Mild │ │
│ │ Toegevoegd: 20 dec 2024 | Intake: Intake 2 │ │
│ │ │ │
│ │ [Bewerken] [Details] │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ [+ Nieuwe diagnose toevoegen] │
│ │
└─────────────────────────────────────────────────────────────┘
```
### 5.4 DiagnoseFormBlock Layout
```
┌─────────────────────────────────────────────────────────────┐
│ 🏥 Nieuwe Diagnose [] [×] │
├─────────────────────────────────────────────────────────────┤
│ │
│ Patiënt: Jan de Vries (read-only) │
│ │
│ ICD-10 Code * │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ 🔍 Zoek ICD-10 code of omschrijving... │ │
│ │ │ │
│ │ Resultaten: │ │
│ │ • F41.1 Gegeneraliseerde angststoornis │ │
│ │ • F41.0 Paniekstoornis │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ Code: F41.1 (read-only na selectie) │
│ Omschrijving: Gegeneraliseerde angststoornis (read-only) │
│ │
│ Type * │
│ ○ Hoofddiagnose ● Nevendiagnose │
│ │
│ Status * │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ [Actief ▼] │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ Ernst │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ [Geen ▼] │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ Intake koppeling │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ [Geen ▼] │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ Toelichting (optioneel) │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ [Annuleren] [Opslaan] │
│ │
└─────────────────────────────────────────────────────────────┘
```
---
## 6. Interacties met AI (functionele beschrijving)
🎯 **Doel:** Waar AI in de diagnostiek workflow voorkomt.
| Locatie | AI-actie | Trigger | Output |
|---------|----------|---------|--------|
| RapportageBlock | Samenvatten | Klik knop "✨ Samenvatten" | Bullets van kernpunten in zijpaneel |
| RapportageBlock | B1-niveau | Klik knop "📖 B1-niveau" | Herschreven tekst in zijpaneel |
| RapportageBlock | Extract problemen | Klik knop "🔍 Problemen" | Gestructureerde lijst met categorie + severity |
| DiagnoseFormBlock | ICD-10 suggestie | Typ in zoeker | Fuzzy search resultaten met relevante codes |
**AI Response Handling:**
- Alle AI outputs tonen in dedicated preview area (zijpaneel)
- Gebruiker moet expliciet accepteren/invoegen
- Bewerken altijd mogelijk
- Annuleren zonder gevolgen
---
## 7. Complete Workflow Flow
🎯 **Doel:** Stap-voor-stap beschrijving van de complete diagnostiek workflow.
### Flow 1: Van Afspraak tot Diagnose (Happy Path)
```
┌─────────────────────────────────────────────────────────────┐
│ STAP 1: AFSPRAAK PLANNEN │
│ │
│ Behandelaar: "afspraak diagnostiek met Jan morgen 10:00" │
│ → AfspraakBlock verschijnt met pre-fill │
│ → Behandelaar controleert → klikt Opslaan │
│ → Encounter aangemaakt, encounter_id opgeslagen │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ STAP 2: RAPPORTAGE SCHRIJVEN (na afspraak) │
│ │
│ Behandelaar: "rapportage diagnostiek gesprek met Jan" │
│ → RapportageBlock verschijnt │
│ → Encounter_id automatisch gekoppeld │
│ → Behandelaar schrijft/dicteert verslag │
│ → Optioneel: AI samenvatten │
│ → Klikt Opslaan → Rapportage gekoppeld aan encounter │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ STAP 3: DIAGNOSE BEKIJKEN │
│ │
│ Behandelaar: "diagnose Jan" │
│ → DiagnoseBlock verschijnt met lijst diagnoses │
│ → Filter: Actief (default) │
│ → Behandelaar ziet overzicht │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ STAP 4: DIAGNOSE TOEVOEGEN │
│ │
│ Behandelaar: "diagnose toevoegen Jan F41.1" │
│ → DiagnoseFormBlock verschijnt │
│ → ICD-10 code F41.1 pre-filled │
│ → Behandelaar vult type, status, ernst in │
│ → Koppelt aan intake (optioneel) │
│ → Klikt Opslaan → Diagnose toegevoegd │
│ → DiagnoseBlock wordt getoond met nieuwe diagnose │
└─────────────────────────────────────────────────────────────┘
```
### Flow 2: Diagnose Bijstellen
```
┌─────────────────────────────────────────────────────────────┐
│ Behandelaar: "diagnose wijzigen Jan" │
│ → DiagnoseBlock verschijnt │
│ → Behandelaar klikt op diagnose F41.1 │
│ → DiagnoseFormBlock verschijnt (edit mode) │
│ → Alle velden pre-filled met huidige waarden │
│ → Behandelaar wijzigt status: Actief → Resolved │
│ → Behandelaar wijzigt ernst: Matig → Mild │
│ → Voegt toelichting toe │
│ → Klikt Opslaan → Diagnose bijgewerkt │
│ → DiagnoseBlock wordt getoond met bijgewerkte diagnose │
└─────────────────────────────────────────────────────────────┘
```
---
## 8. Edge Cases & Alternatieve Flows
### Edge Case 1: Meerdere patiënten metzelfde naam
- **Situatie:** Input "diagnose Jan" → meerdere matches
- **Gedrag:** ZoekenBlock verschijnt met resultaten
- **Actie:** Behandelaar selecteert juiste patiënt
- **Vervolg:** DiagnoseBlock voor geselecteerde patiënt
### Edge Case 2: Geen recente afspraak voor rapportage
- **Situatie:** Input "rapportage Jan" → geen encounter gevonden
- **Gedrag:** RapportageBlock opent zonder encounter-koppeling
- **Suggestie:** "Geen recente diagnostiek-afspraak gevonden. Wil je een afspraak koppelen?"
- **Actie:** Optioneel AfspraakBlock openen
### Edge Case 3: ICD-10 code niet gevonden
- **Situatie:** Input "diagnose toevoegen Jan F99.9" → code bestaat niet
- **Gedrag:** Validatie fout: "ICD-10 code F99.9 niet gevonden"
- **Actie:** ICD-10 zoeker blijft open voor correctie
### Edge Case 4: Diagnose al bestaat
- **Situatie:** Input "diagnose toevoegen Jan F41.1" → diagnose bestaat al
- **Gedrag:** Waarschuwing: "Diagnose F41.1 bestaat al. Wil je deze bijwerken?"
- **Actie:** Optioneel DiagnoseFormBlock openen in edit mode
### Edge Case 5: Onvolledige input
- **Situatie:** Input "afspraak diagnostiek" (geen patiënt/datum)
- **Gedrag:** Systeem vraagt om ontbrekende informatie
- **Actie:** ZoekenBlock voor patiënt, datum/tijd picker voor planning
---
## 9. Success Criteria
De diagnostiek workflow is succesvol wanneer:
1. ✅ Behandelaar kan diagnostiek-afspraak plannen in < 30 seconden
2. ✅ Rapportage kan worden geschreven en automatisch gekoppeld aan afspraak
3. ✅ Alle diagnoses van een patiënt zijn in één overzicht zichtbaar
4. ✅ Nieuwe diagnose kan worden toegevoegd met ICD-10 zoeker
5. ✅ Bestaande diagnose kan worden bijgewerkt (status, ernst, etc.)
6. ✅ Alle acties zijn traceerbaar (wie, wanneer, wat)
7. ✅ Workflow kan volledig worden doorlopen zonder menu-navigatie
---
## 10. Bijlagen & Referenties
**Projectdocumenten:**
- PRD: `swift-prd.md`
- FO Algemeen: `swift-fo-ai.md`
- Bouwplan: `bouwplan-swift-v1.md`
- UX/UI: `swift-ux-v2.1.md`
- Taken analyse: `taken-en-vragen-analyse.md`
**Bestaande Code Referenties:**
- Diagnose pagina: `app/epd/patients/[id]/diagnose/page.tsx`
- Diagnose actions: `app/epd/patients/[id]/diagnose/actions.ts`
- Appointment modal: `app/epd/agenda/components/appointment-modal.tsx`
- Rapportage workspace: `app/epd/patients/[id]/rapportage/components/rapportage-workspace-v2.tsx`
**Database Schema:**
- `conditions` tabel voor diagnoses
- `encounters` tabel voor afspraken
- `reports` tabel voor rapportages
---
## Wijzigingslog
| Versie | Datum | Wijzigingen |
|--------|-------|-------------|
| 1.0 | 23-12-2024 | Initiële versie - Diagnostiek workflow beschrijving |