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