26 KiB
26 KiB
Taken & Vragen Analyse: EPD Functionaliteit
Document: Wat moet de nieuwe UI kunnen? Datum: december 2024 Doel: Inventarisatie van alle taken en vragen die het EPD beantwoordt
1. Overzicht Huidige EPD Modules
Op basis van de codebase analyse:
/epd
├── dashboard/ # Overzicht
├── patients/ # Patiëntbeheer
│ ├── [id]/
│ │ ├── basisgegevens/ # NAW, contactgegevens
│ │ ├── intakes/ # Intake trajecten
│ │ │ └── [intakeId]/
│ │ │ ├── anamnese/ # Voorgeschiedenis
│ │ │ ├── examination/ # Onderzoek
│ │ │ ├── diagnosis/ # Diagnose (ICD-10)
│ │ │ ├── risk/ # Risicotaxatie
│ │ │ ├── kindcheck/ # Kindcheck
│ │ │ ├── contacts/ # Contactpersonen
│ │ │ ├── behandeladvies/# Behandeladvies
│ │ │ └── rom/ # ROM vragenlijsten
│ │ ├── diagnose/ # Diagnosebeheer
│ │ ├── behandelplan/ # Behandelplan
│ │ ├── rapportage/ # Rapportages
│ │ └── screening/ # Screening
├── verpleegrapportage/ # Verpleegkundig overzicht
│ ├── overdracht/ # Overdrachtsrapportage
│ └── rapportage/ # Dagrapportage per patiënt
├── agenda/ # Afspraken
├── clients/ # Client overzicht
└── reports/ # Rapportages overzicht
2. Categorieën van Vragen
2.1 ZOEKEN & VINDEN (Wie/Wat/Waar)
| Vraag | Huidige UI | Data |
|---|---|---|
| Wie is [naam]? | patients/ → zoeken | patients |
| Waar is [patiënt] opgenomen? | patients/[id] | encounters |
| Welke diagnoses heeft [patiënt]? | patients/[id]/diagnose | conditions |
| Wat is het behandelplan van [patiënt]? | patients/[id]/behandelplan | care_plans |
| Welke medicatie gebruikt [patiënt]? | - (nog niet) | - |
| Wie zijn de contactpersonen van [patiënt]? | intakes/[id]/contacts | contacts |
| Wat is de risicoscore van [patiënt]? | intakes/[id]/risk | risk_assessments |
2.2 RAPPORTEREN & DOCUMENTEREN (Vastleggen)
| Taak | Huidige UI | Data |
|---|---|---|
| Dagnotitie maken | verpleegrapportage/rapportage | reports (type: verpleegkundig) |
| Rapportage schrijven | patients/[id]/rapportage | reports |
| Intake vastleggen | patients/[id]/intakes/new | intakes |
| Anamnese invullen | intakes/[id]/anamnese | anamneses |
| Onderzoek documenteren | intakes/[id]/examination | examinations |
| Diagnose toevoegen | patients/[id]/diagnose | conditions |
| Behandeladvies schrijven | intakes/[id]/behandeladvies | - |
| Risicotaxatie invullen | intakes/[id]/risk | risk_assessments |
| Kindcheck uitvoeren | intakes/[id]/kindcheck | - |
2.3 SAMENVATTEN & OVERDRAGEN (Communiceren)
| Taak | Huidige UI | Data |
|---|---|---|
| Overdracht maken | verpleegrapportage/overdracht | AI samenvatting |
| Samenvatting van vandaag | - | reports (shift_date) |
| Wat is er gebeurd met [patiënt]? | verpleegrapportage/rapportage | reports, vitals |
| Aandachtspunten voor collega | overdracht | include_in_handover |
2.4 PLANNEN & ORGANISEREN (Agenda)
| Taak | Huidige UI | Data |
|---|---|---|
| Mijn afspraken vandaag | agenda/ | appointments |
| Afspraken van [patiënt] | - | appointments |
| Afspraak inplannen | agenda/ (FullCalendar) | appointments |
| Wie zie ik deze week? | agenda/ | appointments |
2.5 BEHANDELEN & VOLGEN (Zorgpad)
| Taak | Huidige UI | Data |
|---|---|---|
| Behandelplan opstellen | patients/[id]/behandelplan | care_plans |
| Doelen formuleren | behandelplan | care_plans.goals |
| Voortgang evalueren | - | - |
| ROM afnemen | intakes/[id]/rom | - |
3. Frequentie & Prioriteit Matrix
3.1 Hoogfrequent (meerdere keren per dag)
| Taak | Freq/dag | Huidige klikken | Ephemeral target |
|---|---|---|---|
| Dagnotitie maken | 10-20x | 5-8 | 1 zin |
| Patiënt zoeken | 15-20x | 3-5 | 1 zin |
| Laatste notities bekijken | 10-15x | 4-6 | 1 zin |
| Overdracht maken | 2-3x | 8-12 | 1 zin |
3.2 Middenfrequent (dagelijks)
| Taak | Freq/dag | Huidige klikken | Ephemeral target |
|---|---|---|---|
| Rapportage schrijven | 3-5x | 6-10 | 1 zin + dicteren |
| Diagnose bekijken | 3-5x | 4-6 | 1 zin |
| Behandelplan raadplegen | 2-3x | 4-6 | 1 zin |
| Afspraken bekijken | 2-3x | 3-4 | 1 zin |
3.3 Laagfrequent (wekelijks/maandelijks)
| Taak | Frequentie | Huidige klikken | Ephemeral target |
|---|---|---|---|
| Intake starten | 1x/week | 10-15 | Wizard |
| Behandelplan maken | 1x/maand | 15-20 | Wizard + AI |
| Diagnose toevoegen | 1x/week | 6-8 | 1 zin |
| Risicotaxatie | 1x/maand | 10-15 | Wizard |
4. Mapping naar Ephemeral UI Bouwblokken
4.1 Must Have (MVP)
| Bouwblok | Beantwoordt vragen | Prioriteit |
|---|---|---|
| Dagnotitie | "notitie voor jan: medicatie gegeven" | P1 |
| Zoeken | "wie is jan", "zoek marie" | P1 |
| Overdracht | "overdracht maken", "samenvatting dienst" | P1 |
4.2 Should Have
| Bouwblok | Beantwoordt vragen | Prioriteit |
|---|---|---|
| Rapportage | "gesprek gehad met jan", "rapportage maken" | P2 |
| Patiënt Info | "diagnoses van jan", "behandelplan jan" | P2 |
| Agenda | "mijn afspraken", "wanneer zie ik jan" | P2 |
4.3 Could Have
| Bouwblok | Beantwoordt vragen | Prioriteit |
|---|---|---|
| Behandelplan | "plan opstellen voor jan" | P3 |
| Diagnose | "diagnose toevoegen: F41.1" | P3 |
| Risico | "risicotaxatie jan" | P3 |
| Intake | "nieuwe intake starten" | P3 |
5. Intent Classificatie Mapping
5.1 Schrijf-intents (Writer)
┌─────────────────────────────────────────────────────────────┐
│ INTENT: dagnotitie │
├─────────────────────────────────────────────────────────────┤
│ Trigger patterns: │
│ • "notitie [patient]" │
│ • "dagnotitie" │
│ • "[patient] medicatie gegeven" │
│ • "[patient] heeft gegeten" │
│ • "incident bij [patient]" │
│ │
│ Entities: │
│ • patient_name: string │
│ • category: medicatie|adl|gedrag|incident|observatie │
│ • content: string (optioneel) │
│ │
│ Pre-fill: │
│ • Patient selector │
│ • Category dropdown │
│ • Tekstveld │
│ • include_in_handover checkbox │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ INTENT: rapportage │
├─────────────────────────────────────────────────────────────┤
│ Trigger patterns: │
│ • "rapportage [patient]" │
│ • "gesprek gehad met [patient]" │
│ • "verslag maken" │
│ • "sessie met [patient]" │
│ │
│ Entities: │
│ • patient_name: string │
│ • report_type: voortgang|observatie|contact|crisis │
│ │
│ Pre-fill: │
│ • Patient selector │
│ • Type dropdown │
│ • Rich text editor │
│ • AI structureren knop │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ INTENT: diagnose_toevoegen │
├─────────────────────────────────────────────────────────────┤
│ Trigger patterns: │
│ • "diagnose [patient]: [code]" │
│ • "diagnose toevoegen" │
│ • "[patient] heeft [diagnose]" │
│ │
│ Entities: │
│ • patient_name: string │
│ • icd10_code: string (optioneel) │
│ • diagnosis_text: string (optioneel) │
│ │
│ Pre-fill: │
│ • Patient selector │
│ • ICD-10 zoeken combobox │
│ • Clinical status │
│ • Severity │
└─────────────────────────────────────────────────────────────┘
5.2 Lees-intents (Reader)
┌─────────────────────────────────────────────────────────────┐
│ INTENT: zoeken │
├─────────────────────────────────────────────────────────────┤
│ Trigger patterns: │
│ • "zoek [naam]" │
│ • "wie is [naam]" │
│ • "vind [naam]" │
│ • "[naam]" (als geen andere intent matcht) │
│ │
│ Entities: │
│ • search_query: string │
│ │
│ Output: │
│ • PatientCards met quick actions │
│ • Selectie → set active patient │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ INTENT: patient_info │
├─────────────────────────────────────────────────────────────┤
│ Trigger patterns: │
│ • "diagnoses van [patient]" │
│ • "behandelplan [patient]" │
│ • "info [patient]" │
│ • "dossier [patient]" │
│ • "risico's [patient]" │
│ │
│ Entities: │
│ • patient_name: string │
│ • info_type: diagnoses|behandelplan|risico|alles │
│ │
│ Output: │
│ • Collapsible info cards │
│ • Quick actions (bewerken, toevoegen) │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ INTENT: overdracht │
├─────────────────────────────────────────────────────────────┤
│ Trigger patterns: │
│ • "overdracht" │
│ • "overdracht maken" │
│ • "samenvatting dienst" │
│ • "wat is er gebeurd vandaag" │
│ │
│ Entities: │
│ • time_range: afgelopen 8 uur (default) │
│ • patient_filter: string[] (optioneel) │
│ │
│ Output: │
│ • AI-samenvatting per patiënt │
│ • Bronverwijzingen │
│ • Aandachtspunten │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ INTENT: agenda │
├─────────────────────────────────────────────────────────────┤
│ Trigger patterns: │
│ • "mijn afspraken" │
│ • "afspraken vandaag" │
│ • "wanneer zie ik [patient]" │
│ • "planning deze week" │
│ │
│ Entities: │
│ • date_range: vandaag|deze week|datum │
│ • patient_name: string (optioneel) │
│ │
│ Output: │
│ • Afsprakenlijst │
│ • Quick action: nieuwe afspraak │
└─────────────────────────────────────────────────────────────┘
6. Data Requirements per Intent
6.1 Database Tabellen per Bouwblok
| Bouwblok | Read | Write |
|---|---|---|
| Dagnotitie | patients | reports |
| Zoeken | patients, conditions, care_plans | - |
| Rapportage | patients, intakes | reports |
| Overdracht | patients, reports, vitals, risk_assessments | - |
| Patient Info | patients, conditions, care_plans, risk_assessments | - |
| Diagnose | patients, conditions | conditions |
| Agenda | patients, appointments, practitioners | appointments |
| Behandelplan | patients, conditions, intakes, anamneses | care_plans |
6.2 API Routes per Bouwblok
| Bouwblok | Bestaande API | Nieuw nodig? |
|---|---|---|
| Dagnotitie | POST /api/reports | Nee |
| Zoeken | GET /api/patients/search | Ja (fuzzy) |
| Rapportage | POST /api/reports | Nee |
| Overdracht | GET /api/overdracht, POST /api/overdracht/generate | Nee |
| Patient Info | GET /api/verpleegrapportage/[patientId] | Uitbreiden |
| Diagnose | - | Ja |
| Agenda | - | Ja |
| Behandelplan | POST /api/behandelplan/generate | Nee |
7. Contextual Awareness
7.1 Impliciete Context
| Context | Bron | Gebruik |
|---|---|---|
| Huidige gebruiker | Auth session | Filter "mijn patiënten" |
| Huidige dienst | Tijd (ochtend/middag/avond/nacht) | Shift-based filtering |
| Laatst bekeken patiënt | Session state | Pre-fill suggestie |
| Recente acties | Session state | Quick access |
7.2 Expliciete Context
| Context | Trigger | Effect |
|---|---|---|
| Actieve patiënt | Zoeken + selecteren | Pre-fill alle volgende acties |
| Dienst overdracht | "overdracht" | Filter op afgelopen X uur |
| Specifieke datum | "afspraken morgen" | Filter op datum |
8. Voice Command Examples
8.1 Dagnotitie Flow
Voice: "Jan de Vries heeft zijn medicatie ingenomen, geen bijzonderheden"
Intent: dagnotitie
Entities:
- patient_name: "Jan de Vries"
- category: "medicatie" (extracted from "medicatie ingenomen")
- content: "heeft zijn medicatie ingenomen, geen bijzonderheden"
Pre-fill:
┌─────────────────────────────────────────────────────────────┐
│ 📝 Dagnotitie voor Jan de Vries │
│ ───────────────────────────────────────────────────────── │
│ Categorie: [Medicatie ▼] ← auto-selected │
│ Tijd: [14:32] │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ heeft zijn medicatie ingenomen, geen bijzonderheden │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ☑ Opnemen in overdracht │
│ │
│ [Opslaan] │
└─────────────────────────────────────────────────────────────┘
8.2 Zoeken Flow
Voice: "Zoek Marie"
Intent: zoeken
Entities:
- search_query: "Marie"
Output:
┌─────────────────────────────────────────────────────────────┐
│ 🔍 Zoekresultaten voor "Marie" │
│ ───────────────────────────────────────────────────────── │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Marie van den Berg │ │
│ │ 15-03-1985 · Kamer 12 · F41.1 Gegeneraliseerde angst│ │
│ │ [Notitie] [Dossier] [Rapportage] │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Marie Jansen │ │
│ │ 22-08-1972 · Kamer 8 · F32.1 Depressieve episode │ │
│ │ [Notitie] [Dossier] [Rapportage] │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
8.3 Overdracht Flow
Voice: "Overdracht maken"
Intent: overdracht
Entities:
- time_range: "afgelopen 8 uur" (default)
Output:
┌─────────────────────────────────────────────────────────────┐
│ 🔄 Overdracht Ochtend dienst │
│ ───────────────────────────────────────────────────────── │
│ 06:00 - 14:00 · 5 patiënten met updates │
│ │
│ ▼ Jan de Vries (3 notities) │
│ ⚠ Aandachtspunt: onrustig vannacht │
│ • 07:30 Medicatie uitgereikt ✓ │
│ • 08:45 Ontbijt genuttigd │
│ • 11:00 Gesprek met psycholoog │
│ │
│ ▼ Marie van den Berg (2 notities) │
│ • 08:00 ADL ondersteuning │
│ • 10:30 Bezoek familie │
│ │
│ ─────────────────────────────────────────────────────── │
│ AI Samenvatting: │
│ "Rustige ochtend. Aandacht voor Jan de Vries die │
│ vannacht onrustig was. Marie ontving familiebezoek..." │
│ │
│ [Kopiëren] [Printen] [Doorsturen] │
└─────────────────────────────────────────────────────────────┘
9. Conclusie: Minimale Intent Set
9.1 MVP (6 intents)
| Intent | Type | Frequentie | Complexiteit |
|---|---|---|---|
dagnotitie |
Writer | Zeer hoog | Laag |
zoeken |
Reader | Zeer hoog | Laag |
overdracht |
Reader | Hoog | Medium |
rapportage |
Writer | Hoog | Medium |
patient_info |
Reader | Hoog | Laag |
agenda |
Reader | Medium | Laag |
9.2 Fallback
| Intent | Actie |
|---|---|
onbekend |
Toon blok-picker met 6 opties |
ambigue |
"Bedoelde je...?" met opties |
lage_confidence |
Toon blok-picker |
9.3 Training Data Nodig
Per intent minimaal 20-30 voorbeeldzinnen in het Nederlands, inclusief:
- Formele vorm ("Ik wil een notitie maken")
- Informele vorm ("notitie jan")
- Met context ("jan medicatie")
- Zonder context ("notitie maken")
- Met typo's ("noitie jan")
- Voice transcriptie varianten
Dit document dient als basis voor de intent classificatie en UI bouwblokken.