- Add architecture overview, implementation plan, and intent overview - Add intake intent process specs (gap analyse, bouwplan, testplan) - Add swift architecture specs and visualization prompts - Remove obsolete aispeedrun-manifesto template Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
297 lines
10 KiB
Markdown
297 lines
10 KiB
Markdown
# Architectuur Overzicht — Mini-EPD
|
|
|
|
**Versie:** v1.0
|
|
**Datum:** 4 februari 2026
|
|
**Doelgroep:** Product owners, IT consultants, data scientists
|
|
|
|
---
|
|
|
|
## 1. Introductie
|
|
|
|
**Mini-EPD** is een elektronisch patiëntendossier voor de geestelijke gezondheidszorg. Het systeem combineert klassieke dossiervoering met een AI-gestuurde spraakinterface genaamd **Cortex**.
|
|
|
|
> **Elevator pitch:** Een EPD waarin zorgmedewerkers niet hoeven te klikken, maar gewoon zeggen wat ze willen doen. "Maak notitie voor Jan, medicatie gegeven" — en het gebeurt.
|
|
|
|
---
|
|
|
|
## 2. Technische Stack
|
|
|
|
| Laag | Technologie | Rol |
|
|
|------|-------------|-----|
|
|
| **Frontend** | Next.js 14, React, Tailwind CSS | Gebruikersinterface |
|
|
| **Backend** | Next.js API Routes | Server-logica en API's |
|
|
| **Database** | Supabase (PostgreSQL) | Opslag patiëntgegevens |
|
|
| **Authenticatie** | Supabase Auth | Inloggen en toegangsbeheer |
|
|
| **AI - Taal** | Claude (Anthropic) | Classificatie en samenvatting |
|
|
| **AI - Spraak** | Deepgram | Spraak-naar-tekst |
|
|
| **Hosting** | Vercel | Deployment en hosting |
|
|
|
|
---
|
|
|
|
## 3. Module-overzicht
|
|
|
|
Het systeem bestaat uit zes hoofdmodules:
|
|
|
|
| Module | Doel | Primaire gebruiker |
|
|
|--------|------|-------------------|
|
|
| **Cortex** | AI spraak/tekst commando's | Iedereen |
|
|
| **Dashboard** | Overzicht werkzaamheden | Behandelaar |
|
|
| **Patiënten** | Dossiers en intake | Iedereen |
|
|
| **Verpleegrapportage** | Dagnotities en overdracht | Verpleegkundige |
|
|
| **Agenda** | Afspraken en planning | Iedereen |
|
|
| **Clients** | (Legacy, doorverwijzing) | — |
|
|
|
|
### Module-beschrijvingen
|
|
|
|
#### Cortex — AI Command Center
|
|
Het "brein" van het systeem. Medewerkers geven spraak- of tekstcommando's, Cortex begrijpt de intentie en voert de actie uit. Bijvoorbeeld: "zoek marie" opent direct het zoekscherm met resultaten.
|
|
|
|
#### Dashboard
|
|
Startpagina met overzicht van caseload, aandachtspunten en aankomende afspraken. Geeft behandelaars in één oogopslag zicht op hun werk.
|
|
|
|
#### Patiënten
|
|
Beheer van alle patiënten en hun dossiers. Elk dossier bevat:
|
|
- Basisgegevens (NAW, verzekering)
|
|
- Screening (hulpvraag, documenten)
|
|
- Intake (anamnese, diagnoses, risico's)
|
|
- Behandelplan (doelen, interventies)
|
|
- Rapportage (dagnotities)
|
|
|
|
#### Verpleegrapportage
|
|
Twee functies:
|
|
1. **Rapportage** — Invoer van dagelijkse observaties per patiënt
|
|
2. **Overdracht** — AI-samenvatting van alle notities voor shift-wissel
|
|
|
|
#### Agenda
|
|
Kalenderweergave van alle afspraken. Filtert per patiënt, dag of week.
|
|
|
|
---
|
|
|
|
## 4. Cortex — Diepere Uitwerking
|
|
|
|
Cortex is het onderscheidende element van dit EPD. Het werkt met drie lagen:
|
|
|
|
### Laag 1: Reflex Arc (Snelle herkenning)
|
|
- **Wat:** Lokale patroonherkenning zonder AI
|
|
- **Snelheid:** <20 milliseconden
|
|
- **Wanneer:** Eenvoudige, veelvoorkomende commando's
|
|
- **Voorbeeld:** "notitie jan" → herkent direct als "dagnotitie maken"
|
|
|
|
### Laag 2: Orchestrator (AI-classificatie)
|
|
- **Wat:** Claude AI analyseert complexe invoer
|
|
- **Snelheid:** 200-800 milliseconden
|
|
- **Wanneer:** Meerdere acties, context nodig, onduidelijke input
|
|
- **Voorbeeld:** "Zeg jan af en maak notitie griep" → herkent twee acties
|
|
|
|
### Laag 3: Nudge (Proactieve suggesties)
|
|
- **Wat:** Suggesties na voltooide acties
|
|
- **Wanneer:** Na opslaan van bepaalde notities
|
|
- **Voorbeeld:** Notitie met "wond" → suggestie: "Wondcontrole inplannen?"
|
|
|
|
### Ondersteunde commando's (intents)
|
|
|
|
| Intent | Wat het doet | Voorbeeld |
|
|
|--------|-------------|----------|
|
|
| `dagnotitie` | Verpleegkundige notitie | "medicatie jan gegeven" |
|
|
| `zoeken` | Patiënt zoeken | "zoek marie" |
|
|
| `overdracht` | Overdracht openen | "overdracht" |
|
|
| `agenda_query` | Afspraken bekijken | "afspraken vandaag" |
|
|
| `create_appointment` | Afspraak maken | "plan intake jan morgen 14:00" |
|
|
| `cancel_appointment` | Afspraak annuleren | "annuleer afspraak jan" |
|
|
| `intake_status` | Intake voortgang | "wat moet ik nog doen?" |
|
|
|
|
### Cortex UI-opbouw
|
|
|
|
Het scherm is verticaal gesplitst:
|
|
- **Links (40%):** Chat — conversatie met Cortex
|
|
- **Rechts (60%):** Werkgebied — formulieren en lijsten
|
|
|
|
Sneltoetsen:
|
|
- `Cmd/Ctrl + K` — Focus op invoerveld
|
|
- `Cmd/Ctrl + Enter` — Verstuur commando
|
|
- `Esc` — Sluit werkgebied
|
|
|
|
---
|
|
|
|
## 5. Data-architectuur
|
|
|
|
### Kernentiteiten
|
|
|
|
De database is georganiseerd rond de **patiënt** als centrale entiteit:
|
|
|
|
| Entiteit | Beschrijving |
|
|
|----------|--------------|
|
|
| **patients** | Basisgegevens patiënten |
|
|
| **encounters** | Contactmomenten (afspraken, bezoeken) |
|
|
| **observations** | Meetgegevens (vitals, symptomen) |
|
|
| **conditions** | Diagnoses en aandoeningen |
|
|
| **reports** | Alle notities en rapportages |
|
|
| **intakes** | Intake-trajecten |
|
|
| **care_plans** | Behandelplannen |
|
|
| **risk_assessments** | Risico-evaluaties |
|
|
| **practitioners** | Zorgverleners |
|
|
|
|
### Rapportage-types
|
|
|
|
Alle notities zitten in één tabel (`reports`) met een type-aanduiding:
|
|
|
|
| Type | Gebruik |
|
|
|------|---------|
|
|
| `verpleegkundig` | Dagelijkse zorgnotities |
|
|
| `observatie` | Klinische waarnemingen |
|
|
| `incident` | Incidenten/crises |
|
|
| `voortgang` | Voortgangsnota's |
|
|
| `medicatie` | Medicijnbeheer |
|
|
| `contact` | Contactlogboek |
|
|
|
|
### API-groepen
|
|
|
|
De backend API's zijn logisch gegroepeerd:
|
|
|
|
| Groep | Functie |
|
|
|-------|---------|
|
|
| `/api/patients/*` | Patiëntgegevens |
|
|
| `/api/reports/*` | Rapportages CRUD |
|
|
| `/api/overdracht/*` | Shift-overdracht + AI-samenvatting |
|
|
| `/api/intakes/*` | Intake-beheer |
|
|
| `/api/cortex/*` | AI command center |
|
|
| `/api/deepgram/*` | Spraakherkenning |
|
|
|
|
---
|
|
|
|
## 6. Diagrambeschrijvingen
|
|
|
|
Onderstaande beschrijvingen kun je gebruiken om visuele diagrammen te maken.
|
|
|
|
### Diagram A: Systeemoverzicht (Container)
|
|
|
|
**Componenten:**
|
|
1. **Gebruiker** (persoon) — Zorgmedewerker met browser
|
|
2. **Frontend** (container) — Next.js React applicatie
|
|
3. **API Layer** (container) — Next.js API Routes
|
|
4. **Database** (container) — Supabase PostgreSQL
|
|
5. **Claude AI** (externe service) — Anthropic API
|
|
6. **Deepgram** (externe service) — Spraak-naar-tekst API
|
|
|
|
**Verbindingen:**
|
|
- Gebruiker → Frontend (HTTPS)
|
|
- Frontend → API Layer (REST/SSE)
|
|
- API Layer → Database (SQL via Supabase client)
|
|
- API Layer → Claude AI (HTTPS, voor classificatie en samenvatting)
|
|
- Frontend → Deepgram (WebSocket, voor live spraak)
|
|
|
|
---
|
|
|
|
### Diagram B: Cortex Flow (Sequence)
|
|
|
|
**Actoren:** Gebruiker, Frontend, Reflex Arc, Orchestrator (Claude), Database
|
|
|
|
**Flow:**
|
|
1. Gebruiker spreekt/typt commando
|
|
2. Frontend stuurt tekst naar API
|
|
3. Reflex Arc probeert lokaal te classificeren
|
|
4. **Als succesvol:** Retourneer intent + entiteiten
|
|
5. **Als niet succesvol:** Escaleer naar Orchestrator
|
|
6. Orchestrator (Claude) analyseert en retourneert intent chain
|
|
7. Frontend toont juiste werkgebied (formulier/lijst)
|
|
8. Gebruiker voltooit actie
|
|
9. Data wordt opgeslagen in Database
|
|
10. (Optioneel) Nudge evalueert en toont suggestie
|
|
|
|
---
|
|
|
|
### Diagram C: Module-relaties (Component)
|
|
|
|
**Modules en hun connecties:**
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ CORTEX │
|
|
│ (kan alle andere modules aansturen via commando's) │
|
|
└───────────────────────┬─────────────────────────────┘
|
|
│
|
|
┌───────────────┼───────────────┐
|
|
▼ ▼ ▼
|
|
┌───────────┐ ┌───────────────┐ ┌────────┐
|
|
│ PATIËNTEN │◄──│ VERPLEEG- │ │ AGENDA │
|
|
│ │ │ RAPPORTAGE │ │ │
|
|
└─────┬─────┘ └───────────────┘ └────────┘
|
|
│
|
|
▼
|
|
┌─────────────┐
|
|
│ DASHBOARD │
|
|
│ (overzicht) │
|
|
└─────────────┘
|
|
```
|
|
|
|
**Beschrijving:**
|
|
- Cortex fungeert als "universele afstandsbediening"
|
|
- Patiënten-module is de kern voor dossierdata
|
|
- Verpleegrapportage leest en schrijft naar patiëntendossiers
|
|
- Agenda toont afspraken gekoppeld aan patiënten
|
|
- Dashboard aggregeert data uit alle modules
|
|
|
|
---
|
|
|
|
### Diagram D: Data-relaties (ERD vereenvoudigd)
|
|
|
|
**Entiteiten en relaties:**
|
|
|
|
```
|
|
PATIENT (1) ──────< (N) ENCOUNTER
|
|
│
|
|
├──────< (N) OBSERVATION
|
|
│
|
|
├──────< (N) CONDITION
|
|
│
|
|
├──────< (N) REPORT
|
|
│
|
|
└──────< (N) INTAKE
|
|
│
|
|
├──── ANAMNESE
|
|
├──── EXAMINATION
|
|
├──── RISK_ASSESSMENT
|
|
└──── CARE_PLAN
|
|
```
|
|
|
|
**Leeswijzer:**
|
|
- Eén patiënt heeft meerdere contactmomenten (encounters)
|
|
- Eén patiënt heeft meerdere observaties, diagnoses en rapportages
|
|
- Eén patiënt kan meerdere intake-trajecten doorlopen
|
|
- Elk intake-traject bevat anamnese, onderzoek, risico's en behandelplan
|
|
|
|
---
|
|
|
|
## 7. Glossary
|
|
|
|
| Term | Betekenis |
|
|
|------|-----------|
|
|
| **EPD** | Elektronisch Patiënten Dossier |
|
|
| **Cortex** | AI command center voor spraak/tekst commando's |
|
|
| **Intent** | Gedetecteerde bedoeling achter een commando |
|
|
| **Reflex Arc** | Snelle, lokale patroonherkenning (geen AI) |
|
|
| **Orchestrator** | AI-laag voor complexe classificatie |
|
|
| **Nudge** | Proactieve suggestie na een actie |
|
|
| **Overdracht** | Shift-wissel met samenvatting van notities |
|
|
| **RLS** | Row Level Security — database-beveiliging per gebruiker |
|
|
| **Intake** | Opnameproces nieuwe patiënt |
|
|
| **Anamnese** | Medische voorgeschiedenis |
|
|
| **ROM** | Routine Outcome Monitoring — effectmeting behandeling |
|
|
| **FHIR** | Internationale standaard voor zorgdata-uitwisseling |
|
|
|
|
---
|
|
|
|
## 8. Contactpunten voor verdieping
|
|
|
|
| Onderwerp | Waar te vinden |
|
|
|-----------|----------------|
|
|
| Functioneel ontwerp Cortex | `docs/swift/` |
|
|
| API-documentatie | `app/api/` (code + comments) |
|
|
| Database schema | `supabase/migrations/` |
|
|
| UI componenten | `components/` |
|
|
| Release notes | `docs/releasenotes/` |
|
|
|
|
---
|
|
|
|
*Dit document geeft een high-level overzicht. Voor technische implementatiedetails, raadpleeg de broncode of vraag het development team.*
|