Files
triqura-ecd/docs/swift/archive/swift-ux-v2.1.md
2025-12-27 13:17:00 +01:00

1070 lines
71 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🎨 UX/UI Design Document — Ephemeral UI EPD
**Projectnaam:** Ephemeral UI EPD — "Het Verdwijnende EPD"
**Versie:** v2.1
**Datum:** 23-12-2024
**Auteur:** Colin Lit
---
## 1. De Visie: Van Menu's naar Conversatie
### 1.1 Het Probleem met Traditionele EPD's
```
TRADITIONEEL EPD
┌──────────────────────────────────────────────────────────────────┐
│ Menu │ Submenu │ Tab │ Tab │ Tab │ Subtab │ Form │ Form │ Save │
├──────┼─────────┴─────┴─────┴─────┴────────┴──────┴──────┴───────┤
│ Item │ │
│ Item │ "Waar moet ik zijn voor een dagnotitie?" │
│ Item │ │
│ Item │ "Hoe kom ik bij de overdracht?" │
│ Item │ │
│ ... │ "Waar zie ik de vitale functies?" │
│ (47) │ │
└──────┴──────────────────────────────────────────────────────────┘
Resultaat: 200 pagina handleiding, 3 maanden training, 12 klikken per actie
```
### 1.2 De Oplossing: Één Input, Slimme Responses
```
EPHEMERAL UI EPD
┌─────────────────────────────────────────────────────────────────┐
│ │
│ │
│ "Wat wil je doen?" │
│ │
│ ┌─────────────────────────┐ │
│ │ │ │
│ │ [Relevante UI │ │
│ │ verschijnt hier] │ │
│ │ │ │
│ └─────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 🎤 notitie jan medicatie gegeven │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
Resultaat: 0 training, 1 zin, klaar
```
### 1.3 Core Design Principles
| Principe | Betekenis |
|----------|-----------|
| **Conversational** | Je praat tegen het systeem, niet door het systeem |
| **Contextual** | Systeem weet wie je bent, welke dienst, welke patiënt |
| **Ephemeral** | UI verschijnt wanneer nodig, verdwijnt wanneer klaar |
| **Complete** | Alles wat een EPD kan, kan deze UI ook — anders |
---
## 2. Prioriteitenlijst: Frequentie-Gedreven Development
### 2.1 Frequentie & Impact Matrix
Op basis van analyse van dagelijks EPD-gebruik:
```
FREQUENTIE
Hoog │ ⭐ DAGNOTITIE ⭐ ZOEKEN
(10-20x/ │
dag) │ ⭐ LAATSTE NOTITIES BEKIJKEN
Medium │ 📋 RAPPORTAGE 🔄 OVERDRACHT
(3-5x/ │
dag) │ 📊 VITALS 📅 AGENDA
│ 🔍 DIAGNOSE 📄 BEHANDELPLAN
Laag │ 📝 INTAKE ⚠️ RISICOTAXATIE
(1x/week │ 👶 KINDCHECK 📞 CONTACTEN
of minder) │ 📊 ROM 🏥 ANAMNESE
└─────────────────────────────────────→
Laag Hoog
COMPLEXITEIT
```
### 2.2 Prioriteit Tiers
#### 🔴 P1: KRITIEK (MVP Week 1-2)
*Hoogfrequent, hoogste ROI*
| # | Intent | Freq/dag | Huidige klikken | Target | Block |
|---|--------|----------|-----------------|--------|-------|
| 1 | **dagnotitie** | 10-20x | 5-8 | 1 zin | `DagnotatieBlock` |
| 2 | **zoeken** | 15-20x | 3-5 | 1 zin | `ZoekenBlock` |
| 3 | **patient_context** | 10-15x | 4-6 | Auto | `PatientContextCard` |
| 4 | **overdracht** | 2-3x | 8-12 | 1 zin | `OverdrachtBlock` |
**Tijdsbesparing P1:** ~4 uur per verpleegkundige per dag
#### 🟡 P2: BELANGRIJK (MVP Week 3-4)
*Middenfrequent, significant*
| # | Intent | Freq/dag | Huidige klikken | Target | Block |
|---|--------|----------|-----------------|--------|-------|
| 5 | **rapportage** | 3-5x | 6-10 | 1 zin + dicteer | `RapportageBlock` |
| 6 | **agenda** | 2-3x | 3-4 | 1 zin | `AgendaBlock` |
| 7 | **vitals** | 2-4x | 4-6 | 1 zin | `MetingenBlock` |
| 8 | **diagnose_bekijken** | 3-5x | 4-6 | 1 zin | `PatientContextCard` |
| 9 | **behandelplan_bekijken** | 2-3x | 4-6 | 1 zin | `PatientContextCard` |
**Tijdsbesparing P2:** ~1.5 uur per behandelaar per dag
#### 🟢 P3: WAARDEVOL (Post-MVP)
*Laagfrequent maar noodzakelijk*
| # | Intent | Frequentie | Block |
|---|--------|------------|-------|
| 10 | **intake_starten** | 1x/week | `IntakeWizard` |
| 11 | **behandelplan_maken** | 1x/maand | `BehandelplanBlock` |
| 12 | **diagnose_toevoegen** | 1x/week | `DiagnoseBlock` |
| 13 | **risicotaxatie** | 1x/maand | `RisicoBlock` |
| 14 | **anamnese** | 1x/intake | `AnamneseBlock` |
| 15 | **contactpersonen** | 1x/intake | `ContactenBlock` |
| 16 | **kindcheck** | 1x/intake | `KindcheckBlock` |
| 17 | **rom** | 1x/maand | `ROMBlock` |
#### ⚪ P4: NICE-TO-HAVE (Backlog)
*Edge cases, admin functies*
| # | Intent | Block |
|---|--------|-------|
| 18 | **medicatie_overzicht** | `MedicatieBlock` |
| 19 | **decursus** | `DecursusBlock` |
| 20 | **nieuwe_patient** | `NieuwePatiëntBlock` |
| 21 | **afspraak_plannen** | `AfspraakBlock` |
### 2.3 Development Roadmap
```
WEEK 1-2: P1 (Kritiek)
├── Dag 1-2: Command Input + Intent Engine
├── Dag 3-4: DagnotatieBlock + ZoekenBlock
├── Dag 5-6: PatientContextCard
├── Dag 7-8: OverdrachtBlock
└── Deliverable: "notitie jan medicatie" → opslaan in 15 sec
WEEK 3-4: P2 (Belangrijk)
├── Dag 9-10: RapportageBlock + dicteer
├── Dag 11-12: AgendaBlock
├── Dag 13-14: MetingenBlock
└── Deliverable: Behandelaar kan volledige dag werken
POST-MVP: P3 + P4
├── Sprint 3: IntakeWizard, BehandelplanBlock
├── Sprint 4: DiagnoseBlock, RisicoBlock
├── Sprint 5: Overige blocks
└── Deliverable: Feature parity met klassiek EPD
```
---
## 3. Complete Intent Mapping
### 3.1 Alle Intents per Categorie
#### 📝 SCHRIJVEN (Writer Intents)
| Intent | Trigger patterns | Block | Prio |
|--------|-----------------|-------|------|
| `dagnotitie` | "notitie [patient]", "dagnotitie", "[patient] medicatie gegeven", "incident bij [patient]" | `DagnotatieBlock` | P1 |
| `rapportage` | "rapportage", "gesprek gehad met [patient]", "behandelgesprek" | `RapportageBlock` | P2 |
| `intake_schrijven` | "intake schrijven", "intake [patient]" | `IntakeBlock` | P3 |
| `anamnese` | "anamnese", "voorgeschiedenis [patient]", "historie" | `AnamneseBlock` | P3 |
| `diagnose_toevoegen` | "diagnose toevoegen", "classificatie", "[ICD-code]" | `DiagnoseBlock` | P3 |
| `behandelplan_maken` | "behandelplan maken", "doelen opstellen" | `BehandelplanBlock` | P3 |
| `risicotaxatie` | "risico [patient]", "valrisico", "suïcidaliteit", "taxatie" | `RisicoBlock` | P3 |
| `kindcheck` | "kindcheck", "kinderen in beeld" | `KindcheckBlock` | P3 |
| `meting_invoeren` | "bloeddruk", "meting invoeren", "vitals invoeren" | `MetingenBlock` | P2 |
| `afspraak_maken` | "afspraak plannen", "inplannen" | `AfspraakBlock` | P4 |
| `contact_toevoegen` | "contactpersoon toevoegen", "familie toevoegen" | `ContactenBlock` | P3 |
#### 🔍 LEZEN (Reader Intents)
| Intent | Trigger patterns | Block | Prio |
|--------|-----------------|-------|------|
| `zoeken` | "zoek [naam]", "wie is [naam]", "vind [naam]" | `ZoekenBlock` | P1 |
| `patient_info` | "dossier [patient]", "open [patient]", "info [patient]" | `PatientContextCard` | P1 |
| `overdracht_lezen` | "wat moet ik weten", "overdracht lezen", "briefing" | `OverdrachtLezenBlock` | P1 |
| `laatste_notities` | "notities [patient]", "wat is er gebeurd", "updates" | `PatientContextCard` | P1 |
| `diagnose_bekijken` | "diagnose [patient]", "diagnoses", "classificatie" | `PatientContextCard` | P2 |
| `behandelplan_bekijken` | "behandelplan [patient]", "doelen [patient]" | `PatientContextCard` | P2 |
| `agenda` | "agenda", "afspraken", "wie zie ik vandaag" | `AgendaBlock` | P2 |
| `vitals_bekijken` | "vitals [patient]", "metingen", "bloeddruk historie" | `MetingenOverzichtBlock` | P2 |
| `medicatie` | "medicatie [patient]", "welke medicijnen" | `MedicatieBlock` | P4 |
| `contacten_bekijken` | "contacten [patient]", "familie [patient]" | `ContactenBlock` | P3 |
| `decursus` | "decursus [patient]", "verloop", "historie" | `DecursusBlock` | P4 |
| `mijn_patienten` | "mijn patiënten", "caseload", "wie heb ik" | `PatiëntenlijstBlock` | P2 |
#### 🔄 SAMENVATTEN (Summary Intents)
| Intent | Trigger patterns | Block | Prio |
|--------|-----------------|-------|------|
| `overdracht_maken` | "overdracht maken", "dienst klaar", "samenvatting dienst" | `OverdrachtBlock` | P1 |
| `samenvatting` | "samenvatting [patient]", "vat samen" | `SamenvattingBlock` | P3 |
| `rom_afnemen` | "vragenlijst", "rom afnemen", "meting doen" | `ROMBlock` | P3 |
#### ❓ SYSTEEM (System Intents)
| Intent | Trigger patterns | Block | Prio |
|--------|-----------------|-------|------|
| `help` | "help", "wat kan ik doen", "hoe werkt dit" | `HelpBlock` | P1 |
| `fallback` | [onbekend/lage confidence] | `FallbackPicker` | P1 |
### 3.2 Context-Triggered UI (Proactief)
| Trigger | Conditie | Wat verschijnt | Prio |
|---------|----------|----------------|------|
| **Dienst start** | Login of shift-wissel | `OverdrachtLezenBlock` | P1 |
| **Dienst einde** | 30 min voor einde | Suggestie banner | P1 |
| **Patiënt geselecteerd** | Na zoeken/klik | `PatientContextCard` | P1 |
| **Afspraak nadert** | 15 min voor | `AfspraakContextCard` | P2 |
| **Alert actief** | Patiënt heeft alert | `AlertBanner` | P1 |
| **Behandelplan verloopt** | < 7 dagen | `RenewalReminder` | P3 |
| **ROM gepland** | Datum bereikt | `ROMReminder` | P3 |
---
## 4. Screen Architecture
### 4.1 De Enige Layout
Er is maar één scherm. Alles speelt zich hier af:
```
┌─────────────────────────────────────────────────────────────────┐
│ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ 🕐 Ochtend | 8 ptn Jan de Vries ▼ 👤 SV │ │
│ └───────────────────────────────────────────────────────────┘ │
│ CONTEXT BAR │
├─────────────────────────────────────────────────────────────────┤
│ │
│ │
│ │
│ ┌─────────────────────┐ │
│ │ │ │
│ │ ACTIVE BLOCK │ │
│ │ │ │
│ │ (wat nu relevant │ │
│ │ is verschijnt │ │
│ │ hier) │ │
│ │ │ │
│ └─────────────────────┘ │
│ │
│ CANVAS AREA │
│ │
├─────────────────────────────────────────────────────────────────┤
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ Recent: [📝 Jan-Med] [🔄 Overdracht] [🔍 Marie] │ │
│ └───────────────────────────────────────────────────────────┘ │
│ RECENT STRIP │
├─────────────────────────────────────────────────────────────────┤
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ 🎤 Typ of spreek wat je wilt doen... ⌘K │ │
│ └───────────────────────────────────────────────────────────┘ │
│ COMMAND INPUT │
└─────────────────────────────────────────────────────────────────┘
```
### 4.2 De Vier Zones
| Zone | Hoogte | Functie |
|------|--------|---------|
| **Context Bar** | 48px | Dienst, actieve patiënt, user |
| **Canvas Area** | Flex (rest) | Waar blocks verschijnen |
| **Recent Strip** | 48px | Laatste acties, quick access |
| **Command Input** | 64px | De enige input |
---
## 5. Component Specifications
### 5.1 Context Bar
Minimalistische header met alleen essentiële context.
```
┌─────────────────────────────────────────────────────────────────┐
│ 🕐 Ochtend | 8 ptn Jan de Vries ▼ 👤 SV │
└─────────────────────────────────────────────────────────────────┘
↑ ↑ ↑
Dienst + patiënten Actieve patiënt User
```
**Dienst kleuren:**
| Dienst | Tijd | Kleur | Icon |
|--------|------|-------|------|
| Ochtend | 07:00-15:00 | `#F59E0B` | 🌅 |
| Middag | 15:00-23:00 | `#3B82F6` | 🌤️ |
| Nacht | 23:00-07:00 | `#6366F1` | 🌙 |
**Patiënt dropdown:**
```
┌─────────────────────────────────┐
│ Jan de Vries ✓ │ ← Huidige selectie
├─────────────────────────────────┤
│ Recent: │
│ Marie van den Berg │
│ Piet Jansen │
│ Anna de Vries │
├─────────────────────────────────┤
│ 🔍 Zoek andere patiënt... │
├─────────────────────────────────┤
│ ✕ Geen patiënt (clear) │
└─────────────────────────────────┘
```
---
### 5.2 Command Input
Het hart van de interface.
```
DEFAULT STATE:
┌─────────────────────────────────────────────────────────────────┐
│ 🎤 Typ of spreek wat je wilt doen... ⌘K │
└─────────────────────────────────────────────────────────────────┘
TYPING STATE:
┌─────────────────────────────────────────────────────────────────┐
│ 🎤 notitie jan medicatie| ⌘K │
└─────────────────────────────────────────────────────────────────┘
LISTENING STATE:
┌─────────────────────────────────────────────────────────────────┐
│ 🔴 "notitie jan de vries medicatie..." [Stop] │
│ ════════░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │
└─────────────────────────────────────────────────────────────────┘
PROCESSING STATE:
┌─────────────────────────────────────────────────────────────────┐
│ ⏳ Even kijken wat je bedoelt... │
└─────────────────────────────────────────────────────────────────┘
```
**Styling:**
| Property | Value |
|----------|-------|
| Height | 64px |
| Background | #FFFFFF |
| Border | 1px #E2E8F0, 2px #3B82F6 (focus) |
| Border-radius | 16px |
| Shadow | lg |
| Font-size | 18px |
| Position | Fixed bottom, 24px padding |
---
### 5.3 Block Container (Generic Wrapper)
Alle blocks gebruiken dezelfde container.
| Size | Max-width | Use case |
|------|-----------|----------|
| Small | 480px | Quick entry (notitie, zoeken, meting) |
| Medium | 640px | Forms (rapportage, intake, behandelplan) |
| Large | 900px | Overzichten (overdracht, patiëntenlijst, agenda) |
| XLarge | 1100px | Wizards (intake volledig) |
---
### 5.4 P1 Blocks (MVP Week 1-2)
#### 5.4.1 DagnotatieBlock
```
┌─────────────────────────────────────────────────────────────────┐
│ 📝 Dagnotitie [] [×] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Patiënt │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Jan de Vries ✓ │ │
│ │ 59 jaar • Kamer 12B [← Auto] │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Categorie │
│ [💊 Med ✓] [🍽️ ADL] [👁️ Obs] [⚠️ Inc] [💬 Alg] │
│ │
│ Notitie │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Medicatie uitgereikt volgens schema.| │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ☐ Opnemen in overdracht │
│ │
│ [Annuleren] [💾 Opslaan] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
**Categorie opties:**
| Categorie | Icon | Kleur | Keyboard |
|-----------|------|-------|----------|
| Medicatie | 💊 | `#FEF6DC` / `#F59E0B` | `1` |
| ADL | 🍽️ | `#E8F8EF` / `#16A34A` | `2` |
| Observatie | 👁️ | `#EFF6FF` / `#3B82F6` | `3` |
| Incident | ⚠️ | `#FEF2F2` / `#DC2626` | `4` |
| Algemeen | 💬 | `#F1F5F9` / `#64748B` | `5` |
---
#### 5.4.2 ZoekenBlock
```
┌─────────────────────────────────────────────────────────────────┐
│ 🔍 Zoeken [] [×] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 🔍 jan| │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 3 resultaten │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 👤 Jan de Vries [Enter] │ │
│ │ 59 jr • Kamer 12B • Laatst: 2 uur │ │
│ │ ⚠️ Alert: verhoogd valrisico │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 👤 Jan Bakker │ │
│ │ 45 jr • Kamer 8A • Laatst: 1 dag │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 👤 Jantine Smit │ │
│ │ 33 jr • Kamer 3C • Laatst: 3 dagen │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
#### 5.4.3 PatientContextCard
```
┌─────────────────────────────────────────────────────────────────┐
│ 👤 Jan de Vries [] [×] │
│ 59 jaar • Kamer 12B • Opname: 15 nov 2024 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ⚠️ ALERT: Verhoogd valrisico (2 incidenten deze week) │
│ │
├─────────────────────────────────────────────────────────────────┤
│ 📋 Laatste notities │
│ ───────────────────────────────────────────────────────── │
│ Vandaag 09:15 💊 Medicatie uitgereikt │
│ Gisteren 14:30 💬 Goed gesprek over ontslagplanning │
│ Gisteren 08:00 🍽️ Ontbijt volledig genuttigd │
│ │
│ 📊 Vitals vandaag │
│ ───────────────────────────────────────────────────────── │
│ Bloeddruk: 135/85 (↑) • Pols: 72 • Temp: 36.8°C │
│ │
│ 🏥 Diagnose │
│ ───────────────────────────────────────────────────────── │
│ F32.1 Depressieve stoornis, matig • Ernst: Middel │
│ │
│ 📄 Behandelplan │
│ ───────────────────────────────────────────────────────── │
│ CGT 12 sessies • Sessie 4/12 • Eval: 28 dec │
│ │
│ 👨‍👩‍👧 Contactpersonen │
│ ───────────────────────────────────────────────────────── │
│ Partner: Marie de Vries (06-12345678) │
│ │
├─────────────────────────────────────────────────────────────────┤
│ Wat wil je doen met Jan? │
│ [📝 Notitie] [📋 Rapport] [📊 Meting] [📄 Plan] [📞 Contact] │
└─────────────────────────────────────────────────────────────────┘
```
---
#### 5.4.4 OverdrachtBlock
```
┌─────────────────────────────────────────────────────────────────┐
│ 🔄 Overdracht Ochtend → Middag [] [×] │
│ 07:00 - 15:00 | 8 patiënten │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ▼ Jan de Vries ⚠️ Alert │
│ ─────────────────────────────────────────────────────────── │
│ Rustige ochtend. Medicatie uitgereikt zonder problemen. │
│ Let op valrisico bij toiletbezoek - 2 incidenten deze week. │
│ │
│ 📎 Bronnen: 3 notities • ✏️ Bewerken │
│ │
│ ▶ Marie van den Berg │
│ ─────────────────────────────────────────────────────────── │
│ Klik om samenvatting te genereren │
│ │
│ ▶ Piet Jansen ✓ Geen bijzonderh. │
│ │
│ ▶ Anna de Vries │
│ │
├─────────────────────────────────────────────────────────────────┤
│ [📋 Kopieer alles] [📤 E-mail] [✓ Afronden overdracht] │
└─────────────────────────────────────────────────────────────────┘
```
---
### 5.5 P2 Blocks (MVP Week 3-4)
#### 5.5.1 RapportageBlock
```
┌─────────────────────────────────────────────────────────────────┐
│ 📋 Rapportage [] [×] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Patiënt: Jan de Vries [Wijzig] │
│ │
│ Type │
│ [Gesprek ✓] [Evaluatie] [Telefonisch] [Consult] [Familie] │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ [B] [I] [•] [1.] ["] 🎤 Dicteer │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ │ │
│ │ Gesprek gehad met Jan over zijn ontslagplanning. │ │
│ │ Hij geeft aan zich beter te voelen en is gemotiveerd │ │
│ │ om de CGT-sessies voort te zetten na ontslag. │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ AI-acties │
│ [✨ Samenvatten] [📖 B1-niveau] [🔍 Problemen extraheren] │
│ │
│ [Annuleren] [💾 Opslaan] │
└─────────────────────────────────────────────────────────────────┘
```
---
#### 5.5.2 AgendaBlock
```
┌─────────────────────────────────────────────────────────────────┐
│ 📅 Agenda [] [×] │
│ Vandaag, 23 december 2024 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ [◀ Gisteren] [Vandaag] [Morgen ▶] [Week] [Maand] │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 09:00 Jan de Vries • CGT Sessie 4 │ │
│ │ [Open dossier] [Notitie] │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ 10:00 Marie van den Berg • Evaluatie │ │
│ │ [Open dossier] [Notitie] │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ 11:00 --- PAUZE --- │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ 13:00 Piet Jansen • Intake ⭐ Nieuw │ │
│ │ [Open dossier] [Start intake] │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ [+ Nieuwe afspraak] │
└─────────────────────────────────────────────────────────────────┘
```
---
#### 5.5.3 MetingenBlock
```
┌─────────────────────────────────────────────────────────────────┐
│ 📊 Meting invoeren [] [×] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Patiënt: Jan de Vries [Wijzig] │
│ │
│ Type meting │
│ [Bloeddruk ✓] [Pols] [Temp] [Gewicht] [Glucose] [Saturatie] │
│ │
│ Waarde │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ 135 │ / │ 85 │ mmHg │
│ └──────────────┘ └──────────────┘ │
│ │
│ Vergelijking vorige (130/80): ↑ Licht verhoogd │
│ │
│ Tijdstip: [Nu: 14:35] [Aanpassen] │
│ │
│ Opmerking (optioneel) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ [Annuleren] [💾 Opslaan] │
└─────────────────────────────────────────────────────────────────┘
```
---
### 5.6 P3 Blocks (Post-MVP)
#### 5.6.1 IntakeWizard
Multi-step wizard voor complete intake:
```
STAP 1: Basisgegevens
┌─────────────────────────────────────────────────────────────────┐
│ 📄 Nieuwe Intake Stap 1 van 7 │
├─────────────────────────────────────────────────────────────────┤
│ ○ Basis ─ ○ Anamnese ─ ○ Onderzoek ─ ○ Diagnose ─ │
│ ○ Risico ─ ○ Kindcheck ─ ○ Behandeladvies │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Voornaam * Achternaam * │
│ ┌─────────────────┐ ┌─────────────────────────────────┐ │
│ │ │ │ │ │
│ └─────────────────┘ └─────────────────────────────────┘ │
│ │
│ Geboortedatum * BSN │
│ ┌─────────────────┐ ┌─────────────────────────────────┐ │
│ │ │ │ │ │
│ └─────────────────┘ └─────────────────────────────────┘ │
│ │
│ [Volgende →] │
└─────────────────────────────────────────────────────────────────┘
STAP 2: Anamnese
├─────────────────────────────────────────────────────────────────┤
│ Voorgeschiedenis │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ [Rich text editor met dicteer optie] │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Hulpvraag │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ [✨ AI: Vat samen] [✨ AI: Extraheer problemen] │
│ │
│ [← Terug] [Volgende →] │
└─────────────────────────────────────────────────────────────────┘
STAP 4: Diagnose (ICD-10)
├─────────────────────────────────────────────────────────────────┤
│ │
│ AI-suggestie op basis van anamnese: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ✨ F32.1 Depressieve stoornis, matige episode │ │
│ │ Confidence: 87% │ │
│ │ Rationale: Patiënt beschrijft sombere stemming... │ │
│ │ │ │
│ │ [✓ Accepteren] [✏️ Aanpassen] [✕ Negeren] │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Of handmatig toevoegen: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 🔍 Zoek ICD-10 code of omschrijving... │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ [← Terug] [Volgende →] │
└─────────────────────────────────────────────────────────────────┘
STAP 5: Risicotaxatie
├─────────────────────────────────────────────────────────────────┤
│ │
│ Suïcidaliteit │
│ [Geen ✓] [Laag] [Matig] [Hoog] [Acuut] │
│ │
│ Automutilatie │
│ [Geen ✓] [Laag] [Matig] [Hoog] │
│ │
│ Agressie │
│ [Geen ✓] [Laag] [Matig] [Hoog] │
│ │
│ Valrisico │
│ [Geen] [Laag ✓] [Matig] [Hoog] │
│ │
│ Toelichting │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Valrisico ivm medicatie en leeftijd │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ [← Terug] [Volgende →] │
└─────────────────────────────────────────────────────────────────┘
STAP 6: Kindcheck
├─────────────────────────────────────────────────────────────────┤
│ │
│ Heeft patiënt minderjarige kinderen? │
│ [Ja] [Nee ✓] [Onbekend] │
│ │
│ (Indien ja: formulier voor kindgegevens en zorgen) │
│ │
│ [← Terug] [Volgende →] │
└─────────────────────────────────────────────────────────────────┘
```
---
#### 5.6.2 RisicoBlock (Standalone)
```
┌─────────────────────────────────────────────────────────────────┐
│ ⚠️ Risicotaxatie — Jan de Vries [] [×] │
│ Laatste update: 15 dec 2024 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Suïcidaliteit ○ Geen ○ Laag ● Matig ○ Hoog │
│ Automutilatie ● Geen ○ Laag ○ Matig ○ Hoog │
│ Agressie naar anderen ● Geen ○ Laag ○ Matig ○ Hoog │
│ Valrisico ○ Geen ○ Laag ● Matig ○ Hoog │
│ Weglopen ● Geen ○ Laag ○ Matig ○ Hoog │
│ │
│ Toelichting │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Matig suïciderisico: passieve doodswens, geen plan. │ │
│ │ Valrisico door medicatie (sedatie) + leeftijd. │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Veiligheidsafspraken │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ☑ Dagelijks check-in gesprek │ │
│ │ ☑ Nachtcontroles om 02:00 en 05:00 │ │
│ │ ☐ 1-op-1 begeleiding │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ [Annuleren] [💾 Opslaan] │
└─────────────────────────────────────────────────────────────────┘
```
---
#### 5.6.3 ContactenBlock
```
┌─────────────────────────────────────────────────────────────────┐
│ 👨‍👩‍👧 Contactpersonen — Jan de Vries [] [×] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 👤 Marie de Vries ⭐ Primair │ │
│ │ Partner │ │
│ │ 📞 06-12345678 • ✉️ marie@email.nl │ │
│ │ ☑ Mag info ontvangen ☑ Noodcontact │ │
│ │ [Bewerken] [Bellen] │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 👤 Peter de Vries │ │
│ │ Zoon │ │
│ │ 📞 06-98765432 │ │
│ │ ☑ Mag info ontvangen ☐ Noodcontact │ │
│ │ [Bewerken] [Bellen] │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ [+ Contact toevoegen] │
└─────────────────────────────────────────────────────────────────┘
```
---
### 5.7 Systeem Blocks
#### 5.7.1 HelpBlock
```
┌─────────────────────────────────────────────────────────────────┐
│ 💡 Wat kan ik voor je doen? [] [×] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Meest gebruikt │
│ ───────────────────────────────────────────────────────── │
│ 📝 "notitie jan medicatie" → Dagnotitie maken │
│ 🔍 "zoek marie" → Patiënt zoeken │
│ 🔄 "overdracht" → Dienst overdracht │
│ │
│ Rapportage │
│ ───────────────────────────────────────────────────────── │
│ 📋 "rapportage" → Behandelrapportage │
│ 📊 "bloeddruk jan" → Meting invoeren │
│ │
│ Informatie bekijken │
│ ───────────────────────────────────────────────────────── │
│ 👤 "info jan" / "dossier jan" → Patiënt context │
│ 📅 "agenda" → Afspraken vandaag │
│ 📄 "behandelplan jan" → Behandelplan bekijken │
│ │
│ Intake & Behandeling │
│ ───────────────────────────────────────────────────────── │
│ 📄 "nieuwe intake" → Intake wizard starten │
│ ⚠️ "risico jan" → Risicotaxatie │
│ 🏥 "diagnose jan" → Diagnose bekijken │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
#### 5.7.2 FallbackPicker
```
┌─────────────────────────────────────────────────────────────────┐
│ Wat wil je doen? │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Meest gebruikt │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 📝 │ │ 🔍 │ │ 🔄 │ │ 📋 │ │
│ │ Notitie │ │ Zoeken │ │Overdracht │ Rapport │ │
│ │ [1] │ │ [2] │ │ [3] │ │ [4] │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ Meer opties │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 📅 │ │ 📊 │ │ 👤 │ │ 📄 │ │
│ │ Agenda │ │ Meting │ │ Dossier │ │ Intake │ │
│ │ [5] │ │ [6] │ │ [7] │ │ [8] │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ ┌─────────┐ ┌─────────┐ │
│ │ ⚠️ │ │ 💡 │ │
│ │ Risico │ │ Help │ │
│ │ [9] │ │ [0] │ │
│ └─────────┘ └─────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## 6. Interaction Flows
### 6.1 Happy Path: Dagnotitie (15 seconden)
```
┌─────────────────────────────────────────────────────────────────┐
│ 1. Verpleegkundige spreekt/typt: │
│ "Jan de Vries heeft zijn medicatie ingenomen" │
├─────────────────────────────────────────────────────────────────┤
│ 2. Intent engine herkent: │
│ intent: dagnotitie (0.94) │
│ patient: "Jan de Vries" → match found │
│ category: "medicatie" (keyword) │
│ content: "heeft zijn medicatie ingenomen" │
├─────────────────────────────────────────────────────────────────┤
│ 3. DagnotatieBlock verschijnt met pre-fill: │
│ ✓ Patient: Jan de Vries [highlighted] │
│ ✓ Category: Medicatie [highlighted] │
│ ✓ Text: "heeft zijn medicatie ingenomen" [highlighted] │
├─────────────────────────────────────────────────────────────────┤
│ 4. Verpleegkundige review → klikt Opslaan │
├─────────────────────────────────────────────────────────────────┤
│ 5. Toast: "✓ Notitie opgeslagen" │
│ Block verdwijnt │
│ Recent strip: [📝 Jan-Med] badge │
├─────────────────────────────────────────────────────────────────┤
│ TOTAAL: ~15 seconden (was: 3-5 minuten) │
└─────────────────────────────────────────────────────────────────┘
```
### 6.2 Overdracht Flow (Proactief)
```
┌─────────────────────────────────────────────────────────────────┐
│ 1. Klok: 14:30 (dienst eindigt 15:00) │
│ → shiftEndingSoon = true │
├─────────────────────────────────────────────────────────────────┤
│ 2. Suggestie banner: │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ 🕐 Dienst eindigt over 30 min. Overdracht maken? │ │
│ │ [Ja] [Later] [×] │ │
│ └───────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 3. Klikt "Ja" → OverdrachtBlock opent │
│ → AI genereert samenvattingen per patiënt │
│ → Bronverwijzingen naar originele notities │
├─────────────────────────────────────────────────────────────────┤
│ 4. Review, eventueel aanpassen → Afronden │
├─────────────────────────────────────────────────────────────────┤
│ TOTAAL: ~5 minuten (was: 20-30 minuten) │
└─────────────────────────────────────────────────────────────────┘
```
---
## 7. Data Dependencies
### 7.1 Database Tabellen per Block
| Block | Leest van | Schrijft naar |
|-------|-----------|---------------|
| DagnotatieBlock | `patients` | `reports` |
| ZoekenBlock | `patients`, `conditions`, `encounters` | - |
| PatientContextCard | `patients`, `reports`, `vitals`, `conditions`, `care_plans`, `risk_assessments`, `contacts` | - |
| OverdrachtBlock | `patients`, `reports`, `vitals`, `risk_assessments` | - (AI generated) |
| RapportageBlock | `patients`, `intakes` | `reports` |
| AgendaBlock | `patients`, `appointments` | `appointments` |
| MetingenBlock | `patients`, `vitals` | `vitals` |
| IntakeWizard | `patients` | `intakes`, `anamneses`, `conditions`, `risk_assessments`, `contacts` |
| BehandelplanBlock | `patients`, `conditions`, `intakes` | `care_plans` |
| RisicoBlock | `patients`, `risk_assessments` | `risk_assessments` |
| ContactenBlock | `patients`, `contacts` | `contacts` |
### 7.2 API Routes Nodig
| Route | Method | Block | Status |
|-------|--------|-------|--------|
| `/api/patients/search` | GET | ZoekenBlock | ✅ Bestaat |
| `/api/reports` | POST | DagnotatieBlock, RapportageBlock | ✅ Bestaat |
| `/api/overdracht/generate` | POST | OverdrachtBlock | ✅ Bestaat |
| `/api/verpleegrapportage/[id]` | GET | PatientContextCard | ✅ Uitbreiden |
| `/api/intent/classify` | POST | Command Input | 🆕 Nieuw |
| `/api/vitals` | GET, POST | MetingenBlock | 🆕 Nieuw |
| `/api/appointments` | GET, POST | AgendaBlock | 🆕 Nieuw |
| `/api/risk-assessments` | GET, POST | RisicoBlock | ✅ Bestaat |
| `/api/contacts` | GET, POST | ContactenBlock | 🆕 Nieuw |
---
## 8. Visual Design Tokens
### 8.1 Colors
| Token | Hex | Gebruik |
|-------|-----|---------|
| `--bg-app` | #F8FAFC | App achtergrond |
| `--bg-surface` | #FFFFFF | Blocks, cards |
| `--text-primary` | #0F172A | Hoofdtekst |
| `--text-secondary` | #475569 | Subtekst |
| `--border` | #E2E8F0 | Randen |
| `--brand` | #3B82F6 | Primaire acties |
| `--success` | #16A34A | Bevestigingen |
| `--warning` | #EAB308 | Waarschuwingen |
| `--error` | #DC2626 | Fouten, alerts |
### 8.2 Category Colors
| Categorie | Background | Accent |
|-----------|------------|--------|
| Medicatie | `#FEF6DC` | `#F59E0B` |
| ADL | `#E8F8EF` | `#16A34A` |
| Observatie | `#EFF6FF` | `#3B82F6` |
| Incident | `#FEF2F2` | `#DC2626` |
| Algemeen | `#F1F5F9` | `#64748B` |
---
## 9. Keyboard Navigation
| Key | Action |
|-----|--------|
| `⌘K` / `Ctrl+K` | Focus command input |
| `Escape` | Close active block |
| `Enter` | Submit / Select |
| `↑` `↓` | Navigate results / history |
| `1-9` | Quick select in FallbackPicker |
| `Space` (empty input) | Start voice |
| `⌘Enter` | Save (in forms) |
---
## 10. Component Checklist
### 🔴 P1: MVP Week 1-2
- [ ] Context Bar
- [ ] Command Input (text + voice)
- [ ] Intent Classification Engine
- [ ] DagnotatieBlock
- [ ] ZoekenBlock
- [ ] PatientContextCard
- [ ] OverdrachtBlock
- [ ] FallbackPicker
- [ ] HelpBlock
- [ ] Recent Strip
- [ ] Toast System
### 🟡 P2: MVP Week 3-4
- [ ] RapportageBlock (+ dicteer)
- [ ] AgendaBlock
- [ ] MetingenBlock
- [ ] PatiëntenlijstBlock
- [ ] Proactive Suggestions (dienst einde)
### 🟢 P3: Post-MVP Sprint 3-4
- [ ] IntakeWizard (7 stappen)
- [ ] BehandelplanBlock
- [ ] DiagnoseBlock
- [ ] RisicoBlock
- [ ] AnamneseBlock
- [ ] ContactenBlock
- [ ] KindcheckBlock
- [ ] ROMBlock
### ⚪ P4: Backlog
- [ ] MedicatieBlock
- [ ] DecursusBlock
- [ ] AfspraakBlock
- [ ] NieuwePatiëntBlock
---
## 11. Summary: De Transformatie
```
VAN: NAAR:
────────────────────────────────────────────────────────────────
47 menu-items → 1 input veld
200 pagina handleiding → 0 training nodig
12 klikken per notitie → 1 zin
3 maanden onboarding → Direct productief
"Waar moet ik zijn?" → "Wat wil je doen?"
Navigeren door systeem → Praten tegen systeem
Alles altijd zichtbaar → Alleen wat nu nodig is
Gebruiker zoekt informatie → Systeem toont informatie
TIJDSBESPARING:
─────────────────────────────────────────────────────────────────
Dagnotitie: 3-5 min → 15 sec (95% sneller)
Overdracht: 20-30 min → 5 min (80% sneller)
Patiënt zoeken: 1-2 min → 5 sec (95% sneller)
Rapportage: 8-15 min → 2-3 min (75% sneller)
Per verpleegkundige per dag: ~4 uur terug naar zorg
Per afdeling (10 FTE) per jaar: 1000+ uur extra patiëntcontact
```
---
## Wijzigingslog
| Versie | Datum | Wijzigingen |
|--------|-------|-------------|
| 1.0 | 23-12-2024 | Initiële versie met sidebar |
| 2.0 | 23-12-2024 | Herschreven: pure Ephemeral UI |
| 2.1 | 23-12-2024 | Toegevoegd: prioriteitenlijst, complete intent mapping, P3 blocks (intake, risico, contacten, etc.), data dependencies, frequentie matrix |