477 lines
14 KiB
Plaintext
477 lines
14 KiB
Plaintext
---
|
|
title: "FHIR Datamodel"
|
|
category: "fhir-datamodel"
|
|
group: "architecture"
|
|
version: "2.0.0"
|
|
releaseDate: "2024-11-21"
|
|
status: "active"
|
|
description: "FHIR-compliant datamodel voor GGZ-gegevens volgens MedMIJ standaarden - patiënten, behandelaren, contactmomenten en behandelplannen"
|
|
---
|
|
|
|
## Overview
|
|
|
|
Het Mini-EPD gebruikt een **FHIR-compliant datamodel** voor alle GGZ-gegevens. FHIR (Fast Healthcare Interoperability Resources) is de internationale standaard voor uitwisseling van zorggegevens en maakt toekomstige integratie mogelijk met:
|
|
|
|
- **MedMIJ** - Nederlandse patiëntportalen
|
|
- **Koppeltaal** - eHealth apps en interventies
|
|
- **Landelijk Schakelpunt (LSP)** - Medicatie-uitwisseling
|
|
- **Andere zorginstellingen** - Via standaard FHIR API's
|
|
|
|
**Pragmatische aanpak:**
|
|
We implementeren **6 kern FHIR resources** die essentieel zijn voor een werkend GGZ-dossier. Dit zorgt voor data-uitwisselbaarheid zonder onnodige complexiteit.
|
|
|
|
---
|
|
|
|
## Standaard Compliance
|
|
|
|
### MedMIJ Basisgegevens GGZ 2.0
|
|
|
|
Ons datamodel volgt de **MedMIJ Basisgegevens GGZ 2.0** specificatie. Dit betekent dat alle velden en structuren compatibel zijn met het Nederlandse afsprakenstelsel voor patiëntportalen.
|
|
|
|
**Voordelen:**
|
|
- ✅ Cliënten kunnen later hun eigen dossier inzien via een PGO-app
|
|
- ✅ Gegevens kunnen veilig gedeeld worden met andere zorgaanbieders
|
|
- ✅ Automatische uitwisseling met huisartsen en andere verwijzers
|
|
- ✅ Geen vendor lock-in - data is altijd exporteerbaar
|
|
|
|
### FHIR R4 Resources
|
|
|
|
Alle tabellen zijn gebaseerd op **FHIR R4** resource definities:
|
|
- Veldnamen volgen FHIR naming conventions
|
|
- Data types komen overeen met FHIR specificaties
|
|
- Relaties tussen resources volgen FHIR reference structuur
|
|
- API endpoints kunnen direct FHIR JSON genereren
|
|
|
|
---
|
|
|
|
## Geïmplementeerde Resources
|
|
|
|
### 1. **Practitioners** - Behandelaren
|
|
|
|
**Doel:** Registratie van alle zorgprofessionals die in het systeem werken.
|
|
|
|
**Belangrijkste gegevens:**
|
|
- BIG-nummer (indien van toepassing)
|
|
- AGB-code voor facturatie
|
|
- Naam en kwalificaties
|
|
- Contactgegevens
|
|
- Actieve status
|
|
|
|
**FHIR Mapping:**
|
|
Volgt de `Practitioner` resource uit FHIR R4. Ondersteunt Nederlandse BIG en AGB identificatie systemen.
|
|
|
|
**Praktisch gebruik:**
|
|
- Toewijzen van behandelverantwoordelijkheid
|
|
- Autorisatie en toegangscontrole
|
|
- Facturatie en declaratie
|
|
- Handtekeningen op documenten
|
|
|
|
---
|
|
|
|
### 2. **Organizations** - Instellingen
|
|
|
|
**Doel:** Registratie van de GGZ-instelling en externe samenwerkingspartners.
|
|
|
|
**Belangrijkste gegevens:**
|
|
- AGB-code instelling
|
|
- KVK-nummer
|
|
- Naam en nevenvestigingen
|
|
- Adres en contactgegevens
|
|
|
|
**FHIR Mapping:**
|
|
Volgt de `Organization` resource uit FHIR R4.
|
|
|
|
**Praktisch gebruik:**
|
|
- Juridische verantwoordelijkheid
|
|
- Facturatie en contracten
|
|
- Verwijzingen naar andere instellingen
|
|
- Netwerkzorg registratie
|
|
|
|
---
|
|
|
|
### 3. **Patients** - Patiënten/Cliënten
|
|
|
|
**Doel:** Centrale registratie van alle patiënten die behandeling ontvangen.
|
|
|
|
**Belangrijkste gegevens:**
|
|
- BSN (versleuteld opgeslagen)
|
|
- Naam, geboortedatum, geslacht
|
|
- Adres en contactgegevens
|
|
- Verzekeringsgegevens
|
|
- Huisarts (naam + AGB)
|
|
- Noodcontactpersoon
|
|
|
|
**FHIR Mapping:**
|
|
Volgt de `Patient` resource uit FHIR R4. Komt overeen met de Nederlandse **ZIB Patient** (ZorgInformatieBouwsteen).
|
|
|
|
**Privacy:**
|
|
- BSN wordt versleuteld opgeslagen
|
|
- Toegang via Row Level Security (RLS)
|
|
- AVG-compliant logging van alle toegang
|
|
|
|
**Praktisch gebruik:**
|
|
- Basis voor alle andere dossiergegevens
|
|
- Identificatie bij contact
|
|
- Facturatie naar verzekering
|
|
- Communicatie met cliënt
|
|
|
|
---
|
|
|
|
### 4. **Encounters** - Contactmomenten
|
|
|
|
**Doel:** Registratie van elk contact tussen cliënt en behandelaar.
|
|
|
|
**Belangrijkste gegevens:**
|
|
- Type contact (intake, diagnostiek, behandeling, crisis)
|
|
- Status (gepland, lopend, afgerond)
|
|
- Datum en tijd
|
|
- Behandelaar en cliënt
|
|
- Locatie (polikliniek, online, kliniek)
|
|
- Aanmeldingsreden
|
|
|
|
**FHIR Mapping:**
|
|
Volgt de `Encounter` resource uit FHIR R4. Komt overeen met de Nederlandse **ZIB Contact**.
|
|
|
|
**Praktisch gebruik:**
|
|
- Timeline van alle contacten per cliënt
|
|
- Facturatie per contactmoment
|
|
- Koppeling van diagnoses aan intake
|
|
- Planning en agenda-beheer
|
|
|
|
**Waarom belangrijk:**
|
|
Alle andere gegevens (diagnoses, observaties, behandelplannen) worden gekoppeld aan een specifiek contactmoment. Dit maakt het later mogelijk om te zien: *"Deze diagnose is gesteld tijdens de intake van 15 maart 2024"*.
|
|
|
|
---
|
|
|
|
### 5. **Conditions** - Diagnoses
|
|
|
|
**Doel:** Registratie van diagnoses volgens DSM-5 of ICD-10.
|
|
|
|
**Belangrijkste gegevens:**
|
|
- DSM-5/ICD-10 code (bijv. "F32.2")
|
|
- Omschrijving (bijv. "Depressieve episode, ernstig")
|
|
- Klinische status (actief, in remissie, opgelost)
|
|
- Ernst (mild, matig, ernstig)
|
|
- Verificatie status (voorlopig, bevestigd)
|
|
- Vastgesteld door welke behandelaar
|
|
- Bij welk contactmoment
|
|
|
|
**FHIR Mapping:**
|
|
Volgt de `Condition` resource uit FHIR R4. Komt overeen met de Nederlandse **ZIB Problem**.
|
|
|
|
**Praktisch gebruik:**
|
|
- Problemlijst per cliënt
|
|
- Basis voor behandelplan
|
|
- DBC registratie en facturatie
|
|
- Rapportage en statistiek
|
|
|
|
**Voorbeeld flow:**
|
|
1. Intake: voorlopige diagnose "F32.2 - Depressieve episode, ernstig"
|
|
2. Na diagnostiek: bevestiging van diagnose
|
|
3. Na behandeling: status wijzigt naar "in remissie"
|
|
4. Bij herstel: status wordt "opgelost"
|
|
|
|
---
|
|
|
|
### 6. **Observations** - Metingen en Observaties
|
|
|
|
**Doel:** Registratie van alle metingen, scores en observaties tijdens behandeling.
|
|
|
|
**Belangrijkste gegevens:**
|
|
- Type observatie (ROM-score, risico-inschatting, vitaliteit)
|
|
- Uitkomst/waarde
|
|
- Interpretatie (normaal, afwijkend)
|
|
- Datum en tijd
|
|
- Uitgevoerd door welke behandelaar
|
|
- Gekoppeld aan welk contactmoment
|
|
|
|
**FHIR Mapping:**
|
|
Volgt de `Observation` resource uit FHIR R4. Komt overeen met de Nederlandse **ZIB LaboratoryTestResult** en **ZIB Alert**.
|
|
|
|
**Categorieën:**
|
|
- **ROM-metingen:** PHQ-9, GAD-7, OQ-45 (routine outcome monitoring)
|
|
- **Risico-inschattingen:** Suïcidaliteit, agressie, verwaarlozing
|
|
- **Middelengebruik:** Alcohol, drugs, medicatie-compliance
|
|
- **Vitale functies:** Bloeddruk, hartslag (indien relevant)
|
|
|
|
**Praktisch gebruik:**
|
|
- Voortgang monitoren met ROM-scores
|
|
- Veiligheidsbewaking (risico's)
|
|
- Wetenschappelijk onderzoek
|
|
- Kwaliteitsindicatoren
|
|
|
|
**Voorbeeld:**
|
|
- PHQ-9 vragenlijst ingevuld: score 18 → interpretatie: "Matig-ernstige depressie"
|
|
- Risico-inschatting: "Suïcidale gedachten, geen plannen" → interpretatie: "Matig risico"
|
|
|
|
---
|
|
|
|
### 7. **CarePlans** - Behandelplannen
|
|
|
|
**Doel:** Overzicht van de geplande behandeling met doelen en interventies.
|
|
|
|
**Belangrijkste gegevens:**
|
|
- Titel en beschrijving
|
|
- Status (concept, actief, afgerond, gestopt)
|
|
- Looptijd (start- en einddatum)
|
|
- Behandeldoelen (SMART geformuleerd)
|
|
- Behandelactiviteiten (interventies, frequentie)
|
|
- Welke diagnoses worden behandeld
|
|
- Regiebehandelaar
|
|
|
|
**FHIR Mapping:**
|
|
Volgt de `CarePlan` resource uit FHIR R4. Komt overeen met de Nederlandse **ZIB TreatmentDirective**.
|
|
|
|
**Pragmatische keuze:**
|
|
Doelen (Goals) en Activiteiten zijn embedded in de CarePlan als JSONB fields. Dit is eenvoudiger dan aparte tabellen en voldoet nog steeds aan FHIR structuur.
|
|
|
|
**Praktisch gebruik:**
|
|
- Multidisciplinair behandelplan opstellen
|
|
- Voortgang monitoren
|
|
- Communicatie met cliënt
|
|
- Evaluatie en bijstelling
|
|
|
|
**Koppeltaal-integratie:**
|
|
Via de CarePlan kunnen later eHealth apps gekoppeld worden. Bijvoorbeeld: *"Opdracht: 3x per week mindfulness oefening via app MindDistrict"* → automatisch gesynchroniseerd tussen EPD en app.
|
|
|
|
**Voorbeeld structuur:**
|
|
```
|
|
Behandelplan: "Behandeling depressie"
|
|
├─ Diagnose: F32.2 (Depressieve episode, ernstig)
|
|
├─ Doel 1: "PHQ-9 score < 10 binnen 12 weken"
|
|
├─ Doel 2: "Herstel dagelijks functioneren (werk/sociaal)"
|
|
├─ Activiteit 1: Individuele CGT - 1x/week, 12 sessies
|
|
├─ Activiteit 2: ROM-meting PHQ-9 - elke 4 weken
|
|
└─ Activiteit 3: Medicatie - Sertraline 50mg dagelijks
|
|
```
|
|
|
|
---
|
|
|
|
## Relaties tussen Resources
|
|
|
|
```
|
|
Patient (Patiënt)
|
|
│
|
|
└─── Encounters (Contactmomenten)
|
|
│
|
|
├─── Conditions (Diagnoses)
|
|
│ └─── ondersteund door Observations (ROM-scores)
|
|
│
|
|
├─── Observations (Metingen/Risico's)
|
|
│
|
|
└─── CarePlans (Behandelplannen)
|
|
├─── Doelen (Goals)
|
|
└─── Activiteiten (Interventies)
|
|
|
|
Uitgevoerd door: Practitioner (Behandelaar)
|
|
Binnen: Organization (Instelling)
|
|
```
|
|
|
|
**Werkwijze:**
|
|
1. **Aanmelding** → Encounter (intake) wordt aangemaakt
|
|
2. **Diagnostiek** → Conditions (diagnoses) gekoppeld aan Encounter
|
|
3. **ROM-meting** → Observations gekoppeld aan Encounter
|
|
4. **Behandelplan** → CarePlan gekoppeld aan Patient + Conditions
|
|
5. **Behandeling** → Nieuwe Encounters voor sessies
|
|
6. **Evaluatie** → Nieuwe Observations (ROM) om voortgang te meten
|
|
|
|
---
|
|
|
|
## Data-uitwisselbaarheid
|
|
|
|
### FHIR API Endpoints
|
|
|
|
Alle resources zijn beschikbaar via RESTful FHIR API endpoints:
|
|
|
|
```
|
|
GET /api/fhir/Patient → Lijst van patiënten
|
|
GET /api/fhir/Patient/{id} → Specifieke patiënt
|
|
POST /api/fhir/Patient → Nieuwe patiënt aanmaken
|
|
PUT /api/fhir/Patient/{id} → Patiënt bijwerken
|
|
|
|
GET /api/fhir/Practitioner → Lijst van behandelaren
|
|
GET /api/fhir/CarePlan/{id} → Behandelplan ophalen
|
|
POST /api/fhir/CarePlan → Behandelplan importeren
|
|
```
|
|
|
|
**Response format:**
|
|
- Content-Type: `application/fhir+json`
|
|
- Volledig FHIR R4 compliant JSON
|
|
- Ondersteunt FHIR search parameters
|
|
- Error responses via FHIR OperationOutcome
|
|
|
|
### Export/Import Scenario
|
|
|
|
**Voorbeeld - Behandelplan delen:**
|
|
1. Behandelaar maakt behandelplan in Mini-EPD
|
|
2. Export via API: `GET /api/fhir/CarePlan/abc-123`
|
|
3. FHIR JSON response bevat volledig behandelplan
|
|
4. Andere instelling importeert: `POST /api/fhir/CarePlan`
|
|
5. ✅ Behandelplan is succesvol gedeeld tussen systemen
|
|
|
|
**MedMIJ scenario (toekomst):**
|
|
1. Cliënt opent PGO-app (Persoonlijke Gezondheidsomgeving)
|
|
2. App vraagt toestemming voor toegang tot dossier
|
|
3. Mini-EPD API deelt FHIR resources met app
|
|
4. Cliënt ziet eigen behandelplan, diagnoses en ROM-scores
|
|
5. ✅ Data-uitwisselbaarheid volgens MedMIJ standaard
|
|
|
|
---
|
|
|
|
## Privacy & Beveiliging
|
|
|
|
### Toegangscontrole (Row Level Security)
|
|
|
|
Elke tabel heeft RLS policies:
|
|
- **Behandelaren** zien alleen hun eigen patiënten
|
|
- **Patiënten** kunnen later hun eigen data inzien (via patiëntenportaal)
|
|
- **Administrators** hebben beperkte toegang (geen medische data)
|
|
|
|
### Encryptie
|
|
|
|
- **BSN** wordt versleuteld opgeslagen (pgcrypto)
|
|
- **Communicatie** via HTTPS/TLS
|
|
- **Database** backups zijn versleuteld
|
|
|
|
### AVG-compliance
|
|
|
|
- **Recht op inzage** - Cliënt kan eigen data opvragen via API
|
|
- **Recht op correctie** - Data kan bijgewerkt worden
|
|
- **Recht op vergetelheid** - Data kan verwijderd worden (na wettelijke bewaartermijn)
|
|
- **Logging** - Alle toegang wordt gelogd in audit trail
|
|
- **Toestemming** - Consent management via Consents resource (toekomstig)
|
|
|
|
---
|
|
|
|
## Roadmap
|
|
|
|
### ✅ Fase 1: Foundation (Voltooid)
|
|
|
|
- Database schema met 6 FHIR resources
|
|
- TypeScript type definitions
|
|
- Data migratie van legacy tabellen
|
|
- Seed data voor demo
|
|
|
|
### ✅ Fase 2: API & UI (Voltooid)
|
|
|
|
- FHIR transform library (DB ↔ FHIR JSON)
|
|
- Patient API endpoints (GET/POST/PUT)
|
|
- Practitioner API endpoints (GET/POST)
|
|
- Patient UI (lijst, detail, formulieren)
|
|
|
|
### ⏳ Fase 3: Encounters & Conditions (In planning)
|
|
|
|
- Encounter API endpoints
|
|
- Condition API endpoints
|
|
- Observation API endpoints
|
|
- UI voor contactmomenten en diagnoses
|
|
|
|
### 🎯 Fase 4: CarePlans (Hoofddoel)
|
|
|
|
- CarePlan API endpoints
|
|
- Wizard UI voor behandelplan opstellen
|
|
- Doelen en activiteiten beheer
|
|
- Voortgang monitoring
|
|
|
|
### 🔮 Fase 5: Integraties (Toekomst)
|
|
|
|
- MedMIJ aansluiting (patiëntportaal)
|
|
- Koppeltaal aansluiting (eHealth apps)
|
|
- Landelijk Schakelpunt (medicatie)
|
|
- Swagger/OpenAPI documentatie
|
|
|
|
---
|
|
|
|
## Technische Details
|
|
|
|
### Database: PostgreSQL (Supabase)
|
|
|
|
- **Type-safe ENUMs** voor statussen (draft, active, completed, etc.)
|
|
- **Automatische timestamps** (created_at, updated_at)
|
|
- **Foreign keys** voor relaties tussen resources
|
|
- **Indexes** op veel-gebruikte velden voor performance
|
|
- **JSONB fields** voor flexibele embedded data (goals, activities)
|
|
|
|
### Veldnamen volgen FHIR
|
|
|
|
Voorbeelden:
|
|
- `name_family` → `Patient.name.family`
|
|
- `identifier_bsn` → `Patient.identifier[system=bsn].value`
|
|
- `status` → `CarePlan.status`
|
|
|
|
Dit maakt transformatie naar FHIR JSON eenvoudig en voorspelbaar.
|
|
|
|
### Transform Pattern
|
|
|
|
```typescript
|
|
// Database → FHIR
|
|
const fhirPatient = dbPatientToFHIR(dbRow);
|
|
|
|
// FHIR → Database
|
|
const dbInsert = fhirPatientToDB(fhirResource);
|
|
```
|
|
|
|
Alle transforms zijn in `lib/fhir/transforms/` met 100% type safety.
|
|
|
|
---
|
|
|
|
## Voor Functioneel Beheerders
|
|
|
|
### Wat betekent dit voor dagelijks gebruik?
|
|
|
|
**Voor behandelaren:**
|
|
- Intuïtieve UI, geen FHIR kennis nodig
|
|
- Alle data logisch gestructureerd
|
|
- Diagnoses gekoppeld aan intake-moment
|
|
- Behandelplan volgt automatisch uit diagnose
|
|
|
|
**Voor beheerders:**
|
|
- Export naar andere systemen is mogelijk
|
|
- Backups bevatten FHIR-compliant data
|
|
- Audits en rapportages zijn eenvoudig
|
|
- Geen vendor lock-in
|
|
|
|
**Voor ICT:**
|
|
- Database schema volgt internationale standaard
|
|
- API endpoints zijn FHIR-compliant
|
|
- Integraties zijn goed gedocumenteerd
|
|
- Migratie naar andere systemen is eenvoudig
|
|
|
|
### Veelgestelde Vragen
|
|
|
|
**Q: Moet ik FHIR kennen om het systeem te gebruiken?**
|
|
A: Nee, de UI abstracteert alle FHIR complexiteit. Je werkt gewoon met patiënten, contacten en behandelplannen.
|
|
|
|
**Q: Kunnen we later gemakkelijk overstappen naar een ander EPD?**
|
|
A: Ja, alle data is in FHIR format te exporteren. Geen vendor lock-in.
|
|
|
|
**Q: Is dit compatible met MedMIJ?**
|
|
A: Ja, het datamodel volgt MedMIJ Basisgegevens GGZ 2.0 specificaties.
|
|
|
|
**Q: Hoe zit het met privacy?**
|
|
A: BSN versleuteld, RLS policies, audit logging, AVG-compliant.
|
|
|
|
---
|
|
|
|
## Referenties
|
|
|
|
**FHIR Specificaties:**
|
|
- FHIR R4: https://hl7.org/fhir/R4/
|
|
- FHIR Patient: https://hl7.org/fhir/R4/patient.html
|
|
- FHIR CarePlan: https://hl7.org/fhir/R4/careplan.html
|
|
|
|
**Nederlandse Standaarden:**
|
|
- MedMIJ GGZ: https://informatiestandaarden.nictiz.nl/wiki/MedMij:V2020.01/OntwerpGGZ
|
|
- ZIBs: https://zibs.nl/
|
|
|
|
**Project Documentatie:**
|
|
- Technisch schema: `docs/archive/schemas/20241121_fhir_ggz_schema.sql` (archived)
|
|
- Bouwplan: `docs/bouwplan-pragmatisch-fhir.md`
|
|
- Datamodel details: `docs/datamodel-documentatie.md`
|
|
|
|
---
|
|
|
|
**Laatst bijgewerkt:** 21 november 2024
|
|
**Versie:** 2.0.0 (Pragmatisch FHIR)
|
|
**Status:** Actief - Epic 1 & 2 Voltooid
|