Master Validatieprotocol
Versie 1.0.0 -- mei 2026
Dit document beschrijft het overkoepelende validatiekader voor de medicatiebeoordeling-module van Remedice.
1. Doel
Validatie van de klinische prestaties en technische correctheid van de analyse-modules en dataverwerking binnen de MDR-scope, ter onderbouwing van de klinische evaluatie en het technisch dossier.
2. Onderscheid: technische verificatie vs. klinische validatie
| Type | Vraag | Methode | Wanneer |
|---|---|---|---|
| Technische verificatie | Doet de code wat het algoritme voorschrijft? | Unit tests, referentiesets, encoding review | Bij elke release, bij databron-update |
| Klinische validatie | Zijn de klinische uitkomsten correct voor echte patienten? | Vergelijking met gold standard (expert-oordeel) | Bij eerste marktintroductie, bij wezenlijke wijzigingen |
3. Waarom per databron afzonderlijk testen?
Elke databron heeft een andere oorsprong, updatefrequentie en foutmodus:
| Databron | Oorsprong | Foutmodus |
|---|---|---|
| G-Standaard | Z-Index (KNMP), autoritatief | Lookup-fout (fuzzy matching) |
| stop-v2.json | Handmatig geencodeerd uit publicatie | Encodingfout, interpretatieverschil |
| acb.json | Handmatig geencodeerd uit publicatie | Ontbrekende mapping, verouderde bron |
| standaardvragen_base.json | KNMP-richtlijnen + klinische ervaring | Verouderde regel, onjuiste trigger |
| SideEffectFrequency | Gescraped van Farmacotherapeutisch Kompas | Scrape-fout, verouderde data |
| maagbescherming_nsaid.json, maagbescherming_salicylaat.json | NHG/KNMP-richtlijnen | Onjuiste risicofactor, missende regel |
| AIS-parsers (Medimo, Sanday, Pharmacom, CGM) | AIS-specifieke exports | Parser-fout, naamafwijking, PDF-extractie-artefact |
| Atlas (LLM-component) | Generatieve modeluitvoer, RAG-grounding | Hallucinatie, prompt-injectie, off-license advies, citatie-fout |
Een gecombineerde test kan niet isoleren WAAR een fout optreedt. Door per bron te testen, is de oorzaak direct traceerbaar.
Uitzondering: De klinische validatie (STOPP-NL, maagbescherming) test het eindresultaat - daar maakt het niet uit welke bron een trigger veroorzaakt. Het gaat erom of het totaalbeeld klopt.
4. Overzicht validatiestudies
| # | Studie | Type | Steekproef | Onderbouwingsmethode | Acceptatiecriterium | Protocol |
|---|---|---|---|---|---|---|
| V1a | G-Standaard ATC lookup | Technische verificatie | 100 geneesmiddelnamen (gestratificeerd 50/25/25) | Precisieberekening (Clopper-Pearson); overall 95% BI halve breedte < 5% | >= 99% exact, >= 95% fuzzy | protocol_gstandaard.md |
| V1b | AIS-integratievalidatie | Integratievalidatie | >= 10 overzichten, >= 100 medicatieregels per AIS | Precisieberekening per meetpunt; clustereffect-correctie (ICC) | Parser >= 98%, auto-match >= 90%, totale dekking >= 98% | protocol_ais_integratie.md |
| V2 | STOPP-NL V2 | Klinische validatie (pilot) | 60 patienten 65+ (~120 criterium-patient triggers) | Precisieberekening + powerberekening (power > 99% voor H0: sens <= 0.70 bij n_eff=120) | Sensitiviteit >= 85% overall | protocol_stopp.md |
| V3 | ACB-score | Encoding + algoritme | 100% encoding + 20 testcases | 100% encoding review + equivalentieklasse-partitionering (IEC 62304); 100% decision coverage | 100% concordantie | protocol_acb.md |
| V4 | Dubbelmedicatie | Technische verificatie | 20 testcases (6 equivalentieklassen) | Equivalentieklasse-partitionering (IEC 62304); 100% decision coverage | 100% concordantie | protocol_dubbelmedicatie.md |
| V5 | Standaardvragen | Encoding + logica | 100% encoding + 40 testcases (5 regeltypes + negatief) | 100% encoding review + logica-dekkingsanalyse (IEC 62304); ~8 cases per regeltype | 100% logica, klinische goedkeuring | protocol_standaardvragen.md |
| V6 | Bijwerkingen-heatmap | Technische verificatie | 15 geneesmiddelen (~225 observaties) | Precisieberekening op observatieniveau; 95% BI halve breedte < 4% | >= 95% accuratesse | protocol_bijwerkingen.md |
| V7 | Maagbescherming | Klinische validatie (pilot) | 40 NSAID-patienten (~16 positieven) | Precisieberekening + powerberekening (power 95% voor H0: sens <= 0.50 bij n_eff=16) | Sensitiviteit >= 85%, specificiteit >= 75% | protocol_maagbescherming.md |
| V8 | Klinische meerwaarde | Vergelijkende studie (beschrijvend) | 30 patienten (subset V2, ~120-240 signalen) | Precisieanalyse: gemiddelde additionele signalen met 95% BI halve breedte < 0.6 | Beschrijvend -- geen drempel | protocol_klinische_meerwaarde.md |
| V9 | Atlas LLM-veiligheid | Hybride (deterministische guardrails + hallucinatie-pilot + citation-check) | 60 guardrail-cases + 50 hallucinatie-vragen (3x runs) + 20 citation-antwoorden | Precisieberekening (Clopper-Pearson) per fase | Refusal >= 95%, hallucinatie <= 10%, PII-leakage 0%, citation-precision >= 90% | protocol_atlas.md |
5. Steekproefonderbouwing -- methodologisch kader
5.1 Onderscheid in onderbouwingsmethode
De validatiestudies vallen in drie categorieen met elk een eigen onderbouwingsmethode:
| Categorie | Studies | Methode | Rationale |
|---|---|---|---|
| Proportie-schatting | V1a, V1b, V6 | Precisieberekening (Clopper-Pearson exact binomiaal) | Doel is het schatten van een proportie (match rate, accuratesse) met voldoende precisie om de acceptatiedrempel te evalueren |
| Diagnostische accuratesse | V2, V7 | Precisieberekening + powerberekening (exact binomiaal) | Doel is het schatten van sensitiviteit/specificiteit en het uitsluiten van klinisch onacceptabele prestaties |
| Deterministische verificatie | V3, V4, V5 | Equivalentieklasse-partitionering + decision coverage (IEC 62304) | Doel is 100% coverage van alle beslissingspaden; statistische steekproeftrekking is niet van toepassing |
| Beschrijvende studie | V8 | Precisieanalyse rond gemiddelden en proporties | Geen hypothesetoetsing; doel is het kwantificeren van meerwaarde met voldoende precisie voor klinische interpretatie |
| Hybride (LLM-component) | V9 | Deterministische guardrails + precisieberekening voor hallucinatie/citatie | LLM-output is stochastisch; veiligheidseigenschappen worden deterministisch afgedwongen, kwaliteitseigenschappen probabilistisch geschat |
5.2 Gekozen betrouwbaarheidsniveau
Alle precisieberekeningen gebruiken 95%-betrouwbaarheidsintervallen (Clopper-Pearson exact binomiaal voor proporties, t-verdeling voor gemiddelden). Dit is het standaardniveau in klinische validatiestudies en wordt verwacht door Notified Bodies bij MDR-conformiteitsbeoordeling.
5.3 Pilot-positionering
De klinische validatiestudies (V2, V7, V8) zijn gepositioneerd als pilot-validaties. Dit is verdedigbaar vanwege:
- Deterministisch karakter: De analyse-algoritmen zijn regelgebaseerd, niet probabilistisch. De kans op variabele prestaties tussen patienten is inherent lager dan bij machine learning-gebaseerde systemen.
- Gelaagde verificatie: De encoding is 100% geverifieerd (Fase 1 van V2, V3, V5, V7). De klinische pilot (Fase 2) test uitsluitend de end-to-end integratie, niet de onderliggende regels.
- Post-market uitbreiding: Het post-market surveillance plan beschrijft de systematische uitbreiding van de steekproef bij routinegebruik.
- Regulatory precedent: MDCG 2020-1 en MEDDEV 2.7/1 rev. 4 ondersteunen een gefaseerde aanpak voor Klasse IIa software als medisch hulpmiddel.
6. Beoordelaars
6.1 Beoordelaars
Encoding reviews en klinische beoordelingen worden uitgevoerd door twee onafhankelijke klinisch apothekers die niet betrokken zijn bij de ontwikkeling van Remedice.
- Encoding verificatie: Beide apothekers reviewen alle criteria onafhankelijk. Discrepanties worden besproken tot consensus.
- Klinische validatie (STOPP-NL, maagbescherming): Apotheker A beoordeelt alle patienten (gold standard). Apotheker B beoordeelt een subset van minimaal 20 patienten voor inter-rater reliability (Cohen's kappa).
- Overige technische verificaties: Kunnen door 1 apotheker worden uitgevoerd (testcases op deterministisch algoritme).
6.2 Onderbouwing
Twee beoordelaars versterken de validatie:
- Inter-rater reliability is meetbaar, wat de geloofwaardigheid richting een Notified Body verhoogt
- De encoding review met 2 onafhankelijke reviewers minimaliseert de kans op gemiste fouten
- De beoordelingscriteria zijn gestandaardiseerd (gepubliceerde richtlijnen), wat een hoge inter-rater agreement voorspelbaar maakt
7. Algemene eisen
7.1 Datakwaliteit
- Patientdata is geanonimiseerd conform AVG
- Retrospectieve data uit bestaande AIS-exports (geen prospectieve dataverzameling nodig)
- Databronnen geversioneerd en vastgelegd
7.2 Documentatie
- Elk protocol specificeert: design, populatie, steekproefonderbouwing, meetpunten, acceptatiecriteria
- Resultaten worden gedocumenteerd in afzonderlijke resultatenrapporten
- Afwijkingen van het protocol worden gedocumenteerd met onderbouwing
7.3 Hervalidatie
Hervalidatie is vereist bij:
- Wezenlijke wijziging van analyse-logica
- Update van klinische databron die de encodering wijzigt
- Toevoeging van een nieuw AIS-systeem (V1b hervalidatie voor het nieuwe systeem)
- Wezenlijke wijziging van een bestaande AIS-parser
- Incidenten die twijfel doen rijzen over de klinische prestaties
7.4 Versioning van databronnen
Elke validatie-uitvoering legt vast welke versie van de onderliggende databron is gevalideerd. Dit waarborgt traceability tussen rapport en gevalideerde toestand. Per studie wordt in het resultatenrapport opgenomen:
| Databron | Versie-identificator |
|---|---|
acb.json |
Git commit-hash op het moment van de run |
stop-v2.json |
Git commit-hash op het moment van de run |
standaardvragen_base.json |
Git commit-hash op het moment van de run |
maagbescherming_nsaid.json, maagbescherming_salicylaat.json |
Git commit-hash op het moment van de run |
lookup.db (G-Standaard) |
Z-Index publicatiemaand + bouwdatum van lookup.db |
| Atlas-systeemprompt | SHA-256 van de prompt-tekst op het moment van de run |
| Atlas-model | Modelnaam + tier (bv. claude-sonnet-4-6 voor Pro of claude-haiku-4-5 voor Fast) |
De rapport-helper (backend/features/medicatiebeoordeling/tests/validation_report.py) verzamelt deze metadata automatisch bij elke run.
Wijziging van een databron triggert hervalidatie van de bijbehorende studies (zie 7.5).
7.5 Hervalidatie-triggers per studie
| Trigger | Welke studies |
|---|---|
| G-Standaard maandupdate (Z-Index) | V1a, V1b (alle AIS), V6 (indien grouping-tabel raakt) |
acb.json wijziging |
V3 |
stop-v2.json wijziging |
V2 |
standaardvragen_base.json wijziging |
V5 |
maagbescherming_*.json wijziging |
V7 |
| AIS-parser wijziging | V1b voor het betreffende AIS |
| Nieuwe AIS-parser | V1b voor het nieuwe systeem |
| Bijwerkingen-scraper of -groupering wijziging | V6 |
| Atlas-systeemprompt wijziging | V9 |
| Atlas-modelwissel | V9 |
| Atlas-tooluitbreiding (nieuwe RAG-bron, nieuwe tool) | V9 |
| Wezenlijke wijziging analyse-logica | Betreffende V-studie |
| Klinisch incident in post-market surveillance | Betreffende V-studie + relevante encoding-review |