Spring naar hoofdinhoud
Voltooidv2.0.0

FHIR Datamodel

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_familyPatient.name.family
  • identifier_bsnPatient.identifier[system=bsn].value
  • statusCarePlan.status
Dit maakt transformatie naar FHIR JSON eenvoudig en voorspelbaar.

Transform Pattern

// 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