Files
triqura-ecd/docs/architectuur/architectuur-overzicht.md
colinislit af88ac9446 docs: add architecture and intake intent documentation
- 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>
2026-02-04 19:26:14 +01:00

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.*