Koppelmij Implementation Guide
0.1.0 - ci-build
Koppelmij Implementation Guide - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
| Versie | Datum | Wijziging |
|---|---|---|
| 0.0.1 | 2026-04-30 | Initiële versie |
| 0.0.2 | 2026-05-01 | Verwijzing naar SMART Task-based Launch toegevoegd |
| 0.0.3 | 2026-05-01 | Twee rollen van ServiceRequest (basedOn vs focus) uitgewerkt |
| 0.0.4 | 2026-05-01 | Scope herdefinieerd: focus op gegevensafspraken PGO-DVA en Module-DVA; workflow/orkestratie buiten scope |
| 0.0.5 | 2026-05-01 | Aligned met Jelmer's Technical Design: PATCH ipv PUT, owner ipv patient, ServiceRequest.code.text als groepslabel, Organization toegevoegd |
| 0.0.6 | 2026-05-07 | Aligned met Confluence 3.8 (06-05-2026): token revocation (RFC 7009) verwijderd; DVA als bron van waarheid voor Task.status bij terugkeer expliciet gemaakt |
In KoppelMij fungeert het PGO als het centrale overzicht voor de cliënt. De cliënt wil in één oogopslag alle taken van verschillende zorgaanbieders zien — zonder eerst in afzonderlijke modules te moeten kijken. Dit vereist dat individuele taken binnen een module zichtbaar en launchbaar zijn vanuit het PGO.
Deze pagina beschrijft de FHIR-gegevensdienst Verzamelen Aanbiedertaken: welke FHIR-resources beschikbaar zijn bij de DVA, en wat de gegevensafspraken zijn tussen de betrokken partijen. De gegevensdienst is de eerste MedMij-gegevensdienst die uitvoerbare (launchbare) data bevat.
De gegevensdienst definieert twee gegevensafspraken:
De gegevensdienst legt vast wat er uitgewisseld wordt, niet hoe de data tot stand komt. De volgende onderwerpen vallen buiten scope:
ActivityDefinition.kind als discriminator — de keuze tussen Task- en ServiceRequest-flow is een workflow-beslissing, geen onderdeel van de gegevensuitwisseling. Zie Harmonisatie met Koppeltaal voor context.| Partij | Rol |
|---|---|
| PGO | Toont taken uit DVA's van zorgaanbieders aan de cliënt. PGO's zijn "lege hulsen" die met deze gegevensdienst voor het eerst uitvoerbare (launchbare) data ontvangen. |
| DVA | Dienstverlener Aanbieder — ontsluit data namens de zorgaanbieder. De DVA biedt de FHIR-server waarop PGO en module hun gegevensafspraken uitvoeren. |
| Module-aanbieder | Biedt (online) behandelingen of andere diensten aan via de DVA van de zorgaanbieder. De module leest en schrijft taakdata in de context van een SMART on FHIR launch. |
| Resource | Rol in de gegevensdienst |
|---|---|
Task |
Individuele taak voor de cliënt — het centrale object dat het PGO toont en de module bijwerkt |
ServiceRequest |
Overkoepelende opdracht of concrete instructie waaraan taken gebonden zijn |
ActivityDefinition |
Sjabloon van de module; beschrijft wat gelauncht kan worden en via welk endpoint |
Endpoint |
Technisch launch-adres van de module |
Patient |
De cliënt voor wie de taken bedoeld zijn |
Practitioner / PractitionerRole |
De behandelaar die de opdracht heeft geïnitieerd |
Organization |
De zorgaanbieder-organisatie (via PractitionerRole.organization) |
De kern van het model:
endpoint naar het Endpoint met het launch-adres.instantiates naar de ActivityDefinition die beschrijft welke module gelauncht wordt.Een Task verwijst naar twee verschillende ServiceRequest-instances:
| Referentie | Rol | Voorbeeld |
|---|---|---|
Task.basedOn |
Groepering — de overkoepelende interventie waarbinnen de taak valt. Alle taken van dezelfde interventie delen dezelfde basedOn ServiceRequest. |
"Behandelprogramma COPD" |
Task.focus |
Instructie — de concrete, eventueel herhalende opdracht voor de patiënt waaraan deze taak invulling geeft. | "Wekelijks vragenlijst Kwaliteit van Leven invullen" of "Dagelijks bloeddruk meten" |
Dit onderscheid is nodig omdat een individuele taak ("vul vandaag de vragenlijst in", "doe nu een meting") een eigen lifecycle heeft (requested → in-progress → completed), maar gebonden kan zijn aan een bredere en/of herhalende instructie. De basedOn ServiceRequest groepeert alle taken van een interventie; de focus ServiceRequest legt de specifieke opdracht vast die tot deze taak heeft geleid.
Beide zijn altijd verschillende resource-instances: de groeperings-SR opereert op interventieniveau, de instructie-SR op opdrachtniveau.
Het PGO haalt taken op via de DVA FHIR-server. De zoekvraag is:
GET /Task?owner=Patient/{patient-id}
Het PGO groepeert de ontvangen taken op basis van Task.basedOn (verwijzing naar de groeperings-ServiceRequest). De display-naam van de groep komt uit ServiceRequest.code.text van de betreffende DigitalGroupPlan. Zo kan het PGO per interventie een overzicht tonen van individuele taken, met status per taak.
Het PGO resolvet het launch-adres via de keten Task → ActivityDefinition → Endpoint.address (zie Technical Walkthrough: Uitvoeren launch als PGO).
DVA is leidend voor Task.status. Na terugkeer van een module-launch MOET het PGO de taak opnieuw ophalen bij de DVA en uitsluitend de daar verzamelde status overnemen. Eventuele status- of error-query-parameters op de return_url zijn slechts een UX-hint waarmee het PGO direct een gebruikersvriendelijke melding kan tonen, zonder te wachten op de her-synchronisatie.
De module ontvangt bij de SMART on FHIR launch de taakcontext (patient, task-id, fhirUser) en communiceert via het access_token met de DVA FHIR-server.
Lezen:
GET /Task/{id} — opvragen van de taak waarvoor de module is gelauncht, inclusief de referenties naar basedOn en focus ServiceRequests.Schrijven:
PATCH /Task/{id} — bijwerken van Task.status via FHIRPath Patch (zie Technical Walkthrough: Wijzigen Task-status).De volledige SMART on FHIR launch-flow (van launch-voorbereiding tot terugkeer naar PGO) is beschreven in de Technical Walkthroughs.
instantiatesIn Koppeltaal wordt op de Task een custom extensie instantiates gebruikt om te verwijzen naar de ActivityDefinition. Het voorstel is om dezelfde extensie symmetrisch op de ServiceRequest toe te passen:
De gegevensdienst is ontworpen in samenhang met Koppeltaal. Een belangrijk harmonisatiepunt is het gebruik van ActivityDefinition.kind als discriminator voor het type workflow:
AD.kind |
Betekenis | Flow |
|---|---|---|
Task (of leeg) |
Module werkt op taakniveau | Huidige Koppeltaal-werkwijze: één taak per toewijzing, module als black box. |
ServiceRequest |
Module werkt op opdrachtniveau | KoppelMij-werkwijze: module maakt individuele taken aan binnen een ServiceRequest. |
Dit is een workflow-beslissing die buiten de gegevensdienst zelf valt — de DVA bevat het resultaat (de Tasks en ServiceRequests), ongeacht welk patroon tot hun creatie heeft geleid. Het PGO en de module hoeven het onderscheid niet te kennen; zij werken altijd met dezelfde FHIR-resources.
Ter vergelijking de huidige Koppeltaal-flow:
Zie de Memo: ServiceRequest als orkestratiemiddel voor de volledige analyse en de SMART Task-based Launch overwegingen voor vergelijking met het experimentele SMART Task-based Launch mechanisme.
Wanneer de module taken aanmaakt binnen een ServiceRequest:
Task.requester = ServiceRequest.requester. Dit lijkt het meest consistent: de behandelaar is en blijft de opdrachtgever.Het huidige voorstel gaat uit van één module-aanbieder per ServiceRequest. Een samengestelde opdracht (meerdere modules) verhoogt de complexiteit aanzienlijk en vereist nadere uitwerking.
De bestaande Task lifecycle (requested → accepted → in-progress → completed) blijft van toepassing op individuele taken. De ServiceRequest introduceert een bovenliggende lifecycle:
active: er kunnen nog taken worden toegevoegd.completed: alle taken zijn afgerond.revoked: de opdracht is ingetrokken.De relatie tussen de Task-lifecycles en de ServiceRequest-lifecycle moet eenduidig worden gedefinieerd.