11 KiB
Mini-EPD — Architectuur & Datacomponenten (PO/PM-overzicht)
Doel van dit document: één begrijpelijk overzicht van wat het systeem doet, uit welke bouwblokken het bestaat en welke gegevens het beheert — zonder dat je code hoeft te lezen. Bedoeld voor product owners en project managers.
1. In één alinea
Het Mini-EPD is een elektronisch patiëntdossier voor de GGZ. Een zorgverlener kan patiënten aanmelden, intake doen, behandelplannen maken, dagelijkse rapportages schrijven en diensten overdragen aan een collega. Het bijzondere is de Cortex AI Command Center: een natuurlijke-taal-interface (typen of inspreken) waarmee de zorgverlener acties uitvoert in gewone zinnen, zoals "maak een notitie voor Jan: medicatie ingenomen" of "plan een afspraak morgen om 14:00".
2. De drie lagen van het systeem
┌──────────────────────────────────────────────────────────────┐
│ 1. WAT DE GEBRUIKER ZIET (de modules / schermen) │
│ Dashboard · Patiëntdossier · Intake · Behandelplan · │
│ Verpleegrapportage · Agenda · Cortex AI Command Center │
├──────────────────────────────────────────────────────────────┤
│ 2. DE LOGICA (de API's / verwerking) │
│ Rapportage · Overdracht · Behandelplan · Intake · │
│ Cortex (intentherkenning + chat) · Spraak-naar-tekst │
├──────────────────────────────────────────────────────────────┤
│ 3. DE GEGEVENS (de database + externe diensten) │
│ Supabase database · Claude AI · Deepgram (spraak) │
└──────────────────────────────────────────────────────────────┘
3. De modules (wat de gebruiker ziet)
| Module | Wat de zorgverlener ermee doet |
|---|---|
| Dashboard | Startscherm met het Cortex AI Command Center. Hier begint elke actie. |
| Patiëntdossier | Volledig dossier per patiënt: basisgegevens (incl. BSN), diagnoses, observaties, intakes. |
| Intake | Stapsgewijze intakeprocedure voor een nieuwe patiënt: contactpersonen, risicotaxatie, anamnese, onderzoek, diagnose, behandeladvies. |
| Behandelplan | Behandeldoelen en interventies per leefgebied vastleggen en beheren. |
| Verpleegrapportage | Dagelijkse notities in een tijdlijn (nacht/ochtend/middag/avond) + overdracht met AI-samenvatting voor de collega van de volgende dienst. |
| Agenda | Kalender met alle afspraken; afspraken inplannen, verzetten of annuleren. |
4. Het hart: Cortex AI Command Center
De zorgverlener typt of spreekt een opdracht in. Het systeem begrijpt de bedoeling ("intent") en voert de juiste actie uit. Dit gebeurt in drie slimme lagen die samen snelheid én begrip combineren:
Gebruiker zegt/typt iets
│
▼
┌─────────────────────┐ Snel & gratis. Herkent veelvoorkomende
│ 1. REFLEX (lokaal) │ opdrachten direct via patronen (<20ms).
└─────────┬───────────┘ Twijfel of complex? → door naar laag 2.
│
▼
┌─────────────────────┐ AI (Claude) lost lastige gevallen op:
│ 2. ORCHESTRATOR (AI)│ meerdere opdrachten tegelijk, "hem/haar",
└─────────┬───────────┘ "morgen", onduidelijke zinnen.
│
▼
Actie wordt uitgevoerd (notitie opgeslagen, afspraak gemaakt...)
│
▼
┌─────────────────────┐ Proactieve suggestie achteraf, bijv.
│ 3. NUDGE │ "Wil je hier ook een observatie bij maken?"
└─────────────────────┘
Waarom drie lagen? De Reflex-laag handelt het gros af zonder AI-kosten en zonder vertraging. Alleen echt lastige zinnen gaan naar de (betaalde, iets tragere) AI. De Nudge-laag verhoogt de zorgkwaliteit door op het juiste moment iets te suggereren.
Wat begrijpt Cortex (de "intents"):
- Dagnotitie maken · Patiënt zoeken · Overdracht bekijken
- Agenda opvragen · Afspraak inplannen / annuleren / verzetten
Chat & artifacts: Het scherm is gesplitst — links een chatpaneel (gesprek met de assistent), rechts een werkblok ("artifact") dat past bij de opdracht: een notitieformulier, een overdrachtssamenvatting, een zoekresultaat, enzovoort.
5. De externe diensten (afhankelijkheden)
| Dienst | Waarvoor | Belang voor het product |
|---|---|---|
| Supabase | Database + inloggen (authenticatie) | De plek waar alle patiëntgegevens veilig staan. |
| Claude (Anthropic) | AI: intentherkenning, chat, overdrachtssamenvatting, behandelplan genereren | De "intelligentie" achter Cortex en de samenvattingen. |
| Deepgram | Spraak omzetten naar tekst | Maakt inspreken van notities mogelijk. |
Aandachtspunt PO/PM: Claude en Deepgram zijn betaalde externe API's. Gebruik = kosten. Cortex is bewust zo ontworpen dat de goedkope lokale laag het meeste afvangt.
6. De gegevens (datacomponenten)
Het datamodel is FHIR-geïnspireerd. FHIR is de internationale standaard voor gestructureerde zorggegevens. "Geïnspireerd" betekent: we volgen de standaard waar het helpt voor uitwisselbaarheid met andere systemen (denk ICD-10/DSM-5 diagnosecodes, BIG/AGB-nummers), maar pragmatisch vereenvoudigd waar dat sneller bouwt.
De kerngegevens en hoe ze samenhangen
┌──────────────┐
│ PATIËNT │ (naam, BSN, geboortedatum, status)
└──────┬───────┘
┌──────────────┬───────┼───────────┬──────────────┐
▼ ▼ ▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│SCREENING │ │ INTAKE │ │ DIAGNOSE │ │OBSERVATIE│ │BEHANDEL- │
│(aanmeld) │ │(+ risico,│ │(condition)│ │(meting) │ │ PLAN │
│ │ │ anamnese,│ │ │ │ │ │(doelen, │
│ │ │ onderzoek)│ │ │ │ │ │interventies)│
└──────────┘ └────┬─────┘ └──────────┘ └──────────┘ └──────────┘
│
▼
┌──────────────┐
│ CONTACTMOMENT │ (encounter: intake-gesprek, sessie)
└──────┬───────┘
▼
┌──────────────┐
│ RAPPORTAGE │ (dagnotities: voortgang, observatie,
│ (reports) │ incident, medicatie, verpleegkundig...)
└──────────────┘
Wat elk gegevenstype bevat
| Gegevenstype | Wat het is |
|---|---|
| Patiënt | De persoon in zorg: naam, BSN, geboortedatum, en een status (aangemeld → in zorg → afgerond / afgemeld). |
| Behandelaar | De zorgprofessional, met BIG- en AGB-nummer; gekoppeld aan het inlogaccount. |
| Organisatie | De GGZ-instelling. |
| Screening | Het aanmeldproces: hulpvraag, activiteitenlog, documenten (verwijsbrieven), en het besluit (geschikt / niet geschikt). |
| Intake | De intakesessie met onderliggende onderdelen: anamnese, onderzoeken en risicotaxaties (bv. suïcide-/agressierisico met niveau laag→zeer hoog). |
| Diagnose (condition) | DSM-5/ICD-10 diagnoses met status. |
| Observatie | Metingen en inschattingen (vitale waarden, ROM-scores, klachten). |
| Behandelplan | Doelen en interventies, gekoppeld aan diagnoses. |
| Contactmoment (encounter) | Een afspraak of sessie tussen patiënt en behandelaar (voedt ook de agenda). |
| Rapportage (reports) | Eén centrale tabel voor álle dagnotities, met een type (voortgang, observatie, incident, medicatie, contact, crisis, verpleegkundig, ...) en een categorie (medicatie, ADL, gedrag, incident, observatie). |
De patiëntreis door de data
Aangemeld → Screening → Intake → In zorg → Overdracht
(status: (besluit: (anamnese, (diagnoses, (samenvatting
planned) geschikt?) risico, behandelplan, voor volgende
onderzoek) dagrapportages) dienst)
7. Belangrijke regels in de data (voor PO/PM goed om te weten)
| Regel | Wat het betekent | Waarom relevant |
|---|---|---|
| Soft delete | Verwijderen markeert alleen ("deleted_at"), de data blijft staan. | Niets gaat echt verloren — belangrijk voor zorgdossiers en herstel. |
| Shift-logica | Notities vóór 07:00 horen bij de dienst van de vórige dag. | Zorgt dat nachtdiensten correct in de overdracht vallen. |
| Overdrachtsfilter | Alleen notities met "meenemen in overdracht" verschijnen in de samenvatting. | De zorgverlener bepaalt wat relevant is voor de collega. |
| Row Level Security (RLS) | De database dwingt af wie welke gegevens mag zien. | Privacy/AVG-fundament. Let op: in deze prototypefase nog ruim ingesteld — verfijning per team/organisatie staat nog open. |
| AI-herkomst | Bij AI-gegenereerde inhoud wordt zekerheid en redenering bewaard. | Transparantie/controleerbaarheid van AI-output. |
8. Aandachtspunten & status (eerlijk beeld)
- Prototype-status: Dit is een prototype, geen productiesysteem. De beveiligingsregels (RLS) zijn nog ruim; verfijning per team/organisatie is nog niet gebouwd.
- Twee-sporen datamodel: Er bestaat nog een oudere ("clients/treatment_plans") naast de nieuwe FHIR-structuur ("patients/care_plans"). Het nieuwe spoor is leidend; het oude is nog niet volledig opgeruimd. Dit is technische schuld om in de gaten te houden.
- Externe AI-kosten: Schaalbaarheid van Cortex/AI hangt samen met gebruikskosten van Claude en Deepgram.
- Geen echte interoperabiliteit (nog): Het model is FHIR-geïnspireerd; volledige FHIR-uitwisseling met externe systemen is nog niet geïmplementeerd.
Bronnen: codebase mini-epd-prototype (modules in app/, logica in app/api/, Cortex in lib/cortex/, datamodel in supabase/migrations/).