Metamodel

Vervallen op 14 mei 2022

Metamodel

Inleiding

Het metamodel ordent kernbegrippen uit het MedMij Afsprakenstelsel. Het is een conceptueel gegevensmodel, in de vorm van een UML-klassediagram. Het metamodel is gericht op het samenhangend beschrijven van begrippen en relaties die worden gebruikt in de hoofdfunctie Coördinatie van MedMij. Het metamodel is allereerst de basis voor de structuur van:

  • de Zorgaanbiederslijst, waaraan de OAuth Client kan zien welke Zorgaanbieders momenteel welke Gegevensdiensten aanbieden en waarmee hij, gegeven een zekere Interfaceversie, de betrokken technische adressen (URI's) vindt van de OAuth Authorization Server (twee endpoints: het Authorization Endpoint en het Token Endpoint) en de OAuth Resource Server (het Resource Endpoint);

  • de Whitelist, waarmee de Nodes elkaar accepteren als MedMij-nodes;

  • de OAuthclientlist, waarin de OAuth Authorization Server:

  • de Gegevensdienstnamenlijst, waaraan de OAuth Client kan zien welke Weergavenamen de Gegevensdiensten hebben die op enig moment beschikbaar zijn op het MedMij-netwerk.

Een vijfde lijst, de Catalogus, wordt door MedMij gepubliceerd als annex van het MedMij Afsprakenstelsel, op deze pagina. Ten slotte is het metamodel de conceptuele basis voor twee rapportages die van Deelnemers worden verwacht:

  • het Beheerrapport, waarmee elke Deelnemer de Beheerorganisatie periodiek inlicht over kentallen over het functioneren van het MedMij-netwerk;

  • het Portabiliteitsrapport, waarmee de Persoon door diens Dienstverlener Persoon wordt ingelicht over welke gezondheidsinformatie die Persoon van Zorgaanbieders in zijn PGO heeft verzameld, zodat hij een eventuele andere of nieuwe PGO opnieuw met dezelfde verzamelacties zou kunnen vullen. 

Voor alle zeven zijn logische modellen beschikbaar, op een aparte pagina, die implementaties zijn van het metamodel.

Model

Het model

Het metamodel is in een bepaalde stijl opgezet, met vooral associatieklassen. Het voordeel daarvan is dat het metamodel zo aanpasbaar en uitbreidbaar mogelijk blijft. Veel voorkomende constructies, zoals attributen en specialisatie zijn allemaal implementaties van associatieklassen. Implementatie willen we echter aan de logische modellen en de technische modellen (de XML-schema's) overlaten. Een tweede voordeel is dat bestaansafhankelijkheidsrelaties expliciet worden. Bestaansafhankelijkheid wil zeggen dat de ene klasse betekenisloos is zonder de andere en dus dat eerstgenoemde klasse niet kan bestaan zonder laatstgenoemde. Bij een associatieklasse is die associatieklasse altijd bestaansafhankelijk van de twee klassen die het associeert.

Op enkele punten is afgeweken van deze modelleerstijl, om de presentatie van het model niet onnodig te compliceren.

Het metamodel is, voor het overzicht, geordend in negen modelgebieden: Rollen, Deelnemers, PGO'sZorgaanbieders, Gegevensdiensten, Informatiestandaarden, Netwerk, Changes en Gebruik. Linksboven de plaat van het metamodel staat in een kaartje hoe de verschillende gebieden gebruik maken van concepten uit andere gebieden.

De namen van de klassen en de attributen beginnen allemaal met een hoofdletter. De rest van de namen bestaat uit enkel kleine letters, behalve daar waar de rest van de naam ook als aparte naam in het metamodel voorkomt, of er een eigennaam wordt gebruikt die anderszins eist. Het metamodel noteert dus OAuthclient, omdat de naam OAuth een eigennaam is waarin de A als hoofdletter wordt geschreven, en omdat de naam Client niet als aparte naam voorkomt in het metamodel. Het metamodel noteert ZorgaanbiederGegevensdienst, met een kapitale eerste G, omdat Gegevensdienst wel als aparte naam voorkomt.

De MedMij-beheerorganisatie houdt bij welke Organisaties, door het aangaan van een Deelnemersovereenkomst, Deelnemer worden. Deelnemers zijn er in twee rollen: DienstverlenerpersoonDeelnemersrol en DienstverlenerzorgaanbiederDeelnemersrol. Deze komen overeen met de respectievelijke rollen Dienstverlener Persoon en Dienstverlener Zorgaanbieder op de juridische laag.

Organisaties gebruiken Nodes waarvan zij de houder zijn. Als een Organisatie een Deelnemer is, zal zij zo'n Node als DeelnemerNode bij de MedMij-beheerorganisatie aanmelden. Op het MedMijnetwerk verschijnt zo'n DeelnemerNode als een MedMijNode. De Hostnames van deze MedMijNodes ontsluit de MedMij-beheerorganisatie over het MedMijnetwerk. De MedMijNodes gebruiken deze lijst als Whitelist, dat wil zeggen, om te bepalen of een Node die zich bij hen aandient, geautoriseerd is om op het MedMijnetwerk actief te zijn. Deze Whitelist verschijnt, als implementatiecomponent, pas in de logische modellen. Dat geldt ook voor de MedMijStelselNode, de Node via welke MedMij Beheer vier lijsten publiceert. De MedMijStelselNode staat niet expliciet op de Whitelist, maar is wel geautoriseerd deel te nemen op het MedMijnetwerk. Sterker, zonder de MedMijStelselNode kan het MedMijnetwerk niet werken.

Voor de MedMijNodes van Deelnemers die Dienstverlenerpersoon zijn (beter gezegd: voor de OAuth Clients op de applicatielaag gedurende de autorisatiefase van UCI Verzamelen en UCI Delen) bevat de OAuthclientlist gebruikersvriendelijke namen (Organisatienaam), om gebruikt te worden in de toestemmingsverklaring en de bevestigingsverklaring. Ook de OAuthclientlist is een implementatiecomponent en verschijnt pas in de logische modellen. Wanneer een OAuth Client (een PGO) het gebruiken van Abonnementen mogelijk maakt voor de Persoon, moet zij endpoints aanbieden voor de twee soorten notificaties die de Zorgaanbieder in dat kader moet kunnen sturen: een SubscriptionNotificationEndpoint en een ResourceNotificationEndpoint.

In het Rollen-modeldomein verschijnen de Deelnemerrollen, Businessrollen en Usecases die in deze release van het MedMij Afsprakenstelsel bestaan, en hun toegestane combinaties. In het Deelnemers-modeldomein komen de Deelnemers in het MedMij Afsprakenstelsel aan de orde en voor welke Zorgaanbieders zij welke Gegevensdiensten ontsluiten.

Gegevensdiensten horen bij een Usecase en hebben een geldigheidsperiode. Bovendien wordt, door middel van het attribuut Vereist, van sommige Gegevensdiensten vereist dat, als een Zorgaanbieder die Gegevensdienst aanbiedt, hij ook zekere andere Gegevensdiensten moet aanbieden. Vaak zal die lijst leeg zijn, maar het heeft bijvoorbeeld weinig zin het Delen van een afspraakverzoek aan te bieden, zonder ook het Verzamelen van het antwoord daarop aan te bieden. De klasse RolInGegevensdienst wordt gebruikt om, via de Deelnemer, de MedMij-rollen DienstverlenerpersoonDeelnemersrol en DienstverlenerzorgaanbiederDeelnemersrol te verbinden met de dienovereenkomstige rollen die Nictiz in het Informatiestandaarden-domein heeft geformuleerd, namelijk respectievelijk PatiëntBedrijfsrol en ZorgaanbiederBedrijfsrol. Een GegevensdienstInterfaceversie geeft aan dat een Gegevensdienst via de Interfaceversie mag worden aangeboden.

De klassen in het modeldomein Informatiestandaarden, inclusief hun namen, moeten begrepen worden in de zin waarin Nictiz ze gebruikt in het kader van de Informatiestandaardenwaarvan de onderdelen de basis vormen voor Gegevensdiensten. De bouwblokjes van een Informatiestandaardnoemen we een Transactie, die zowel functionele als technische specificaties bevat. Een Bedrijfsrol, waarvan er twee zijn (PatiëntBedrijfsrol en ZorgaanbiederBedrijfsrol), wordt aangenomen door een Transactie. 

De klassen in het modeldomein Systeemrollen leggen de verbinding tussen het domein van de Informatiestandaarden en dat van de Gegevensdiensten. Een Systeemrol is een Transactie die voorzien is van een Systeemrolcode om hem binnen MedMij uniek te kunnen aanduiden. Merk op dat een Systeemrol een concept is met een specifieke betekenis binnen het MedMij Afsprakenstelsel. Het is niet hetzelfde als het concept "Systeemrol" zoals dat wordt gebruikt binnen de Nictiz-informatiestandaarden. Een Systeemrol kan een Ondersteuningsorganisatie hebben die dienstverlening biedt aan Deelnemers bij vragen over de specificaties behorend bij de Systeemrol. Vaak zal dit de beheerder van de onderliggende Informatiestandaard zijn, maar het is ook denkbaar dat er geen beheerder is of dat een andere partij de rol van beheerder vervult (bijvoorbeeld als de beheerder van de Informatiestandaard geen dienstverlening biedt voor MedMij-stakeholders). Een Systeemrol kan ook verbonden zijn met een Kwalificatieloket waar de ondersteuning van Systeemrollen kan worden aangetoond.

Systeemrollen worden gegroepeerd in Systeemrolverzamelingen die samen met een Usecase een Gegevensdienst vormen. Een actueel voorbeeld van een Systeemrolverzameling is een verzameling van vier Systeemrollen waarvan er twee een overzicht van beschikbare PDF-documenten uitwisselen en twee een PDF-document uit dat overzicht uitwisselen. Gegevensdiensten worden als geheel (dat wil zeggen met hun gehele Systeemrolverzameling) aan Zorggebruikers aangeboden en die gebruikers zullen deze ook ineens autoriseren.

Onder in het model wordt het verband gelegd met de Zorgaanbieders. Dit modeldomein is de basis voor het logische model van de Zorgaanbiederslijst. Wanneer een Zorgaanbieder een zekere Gegevensdienst aanbiedt volgens een zekere Interfaceversie, hoort daarbij een ZorgaanbiederGegevensdienstInterfaceversie. Wanneer een Zorgaanbieder bovendien Abonnementen op deze Gegevensdienst aanbiedt, hoort daarbij een ZorgaanbiederAbonnerenOpGegevensdienstInterfaceversie. Deze klassen worden gebruikt om Zorggebruikers te informeren over wie van de Zorgaanbieders (Abonnementen op) welke Gegevensdiensten aanbieden. Binnen een Gegevensdienst zijn bovendien één of meerdere Systeemrollen aan de orde. Deze relatie is vervat in de klasse ZorgaanbiederGegevensdienstSysteemrolInterfaceversie.

Interfaces zijn geversioneerd: verschillende versies van interfaces kunnen tegelijkertijd op het MedMij-netwerk worden aangeboden. Daarom is er de klasse Interfaceversie in het modelgebied Changes. Alle endpoints in de Zorgaanbiederslijst en Oauth Client List (zie onder) horen bij één Interfaceversie

Een Zorgaanbieder kan de maximale abonnementsduur die hij aanbiedt voor een Gegevensduur, op een Interfaceversie, beperken. Daarbij moet hij echter blijven onder de maximale duur die MedMij voor die Gegevensdienst in de Catalogus heeft aangegeven. De maximale duur geeft de doorlooptijd aan in dagen waarbij de waarde 0 aangeeft dat een abonnement niet wordt ondersteund.

Bij een ZorgaanbiederGegevensdienst hoort één AuthorizationEndpoint, één TokenEndpoint en, indien daarop ook Abonnementen worden aangeboden, één SubscriptionEndpoint. Bij een ZorgaanbiederGegevensdienstSysteemrol hoort één ResourceEndpoint. Bij alle soorten endpoints noemt het metamodel het Endpointpath, het path in de URI waarmee de endpoints geadresseerd worden, en een Interfaceversion, waarmee gelijktijdig operationele versies van dezelfde endpoints kunnen worden onderscheiden. In deze versie van het MedMij Afsprakenstelsel worden op zowel frontchannel als backchannel de standaard IANA-poort voor https gebruikt. Er hoeven in de endpointadressen dus geen poortnummers te worden genoemd.

Deze onderdelen worden samen met de Hostname van de betreffende MedMijNode samengesteld tot een URI die geldt als het adres van het respectievelijke endpoint. Dat gebeurt in het logische model (met invarianten). De eisen aan al deze componenten en de wijzen van samenstellen tot de URI's staat beschreven op de Interface-pagina.

Eenzelfde Zorgaanbieder kan voor verschillende Gegevensdiensten van diensten van verschillende Deelnemers gebruik maken. Maar bij één ZorgaanbiederGegevensdienst hoort precies één DeelnemerInRol. Voor dit doel is in het metamodel de klasse DeelnemerInRolZorgaanbiederGegevensdienst opgenomen, in het Deelnemers-modeldomein.

Ten behoeve van het Beheerrapport en het Portabiliteitsrapport moet door Deelnemers informatie kunnen worden overlegd over wat er op het MedMij-netwerk gebeurt. Deze informatie wordt opgespannen door het modelgebied Gebruik. Deze informatie is hoofdzakelijk gestoeld op requests die worden gedaan over het MedMij-netwerk. Die zijn er in zes soorten. Van elke request moet bekend zijn wat de RequestUri was en of de request al dan niet succesvol was.

Invarianten

Invarianten, dat wil zeggen, beperkingen die te allen tijden aan de orde zijn, staan onderaan in een separate tabel opgenomen. Daarvan bestaan verschillende soorten, genoemd in de rechterkolom:

  • Opsommingen stellen dat een zekere klasse een vast aantal expliciet benoemde instanties heeft.

  • Getalsverhoudingen vereisen getalsmatige eisen aan het aantal instanties van een klasse, of de verhouding tussen de aantallen in meerdere klassen.

  • Lokale afhankelijkheden stellen beperkingen aan de inhoudelijke verhoudingen tussen attributen van eenzelfde klasse.

  • Niet-lokale afhankelijkheid stellen beperkingen aan de inhoudelijke verhoudingen tussen instanties van verschillende klassen.

  • Rolbindingen beperken de rolcombinaties van verschillende rol-klassen. Zij komen overeen met onder andere de rolbindingen tussen de verschillende lagen.

Lagen in het afsprakenstelsel

De klassen in het metamodel horen bij de verschillende lagen in de architectuur van het afsprakenstelsel. De betreffende laag is aangegeven door de inkleuringen van de klassen. 

Adressering

Uit dit metamodel wordt duidelijk hoe in het MedMij Afsprakenstelsel met adressering wordt omgegaan. De adresseringssystematiek bestaat uit drie onderdelen:

  • MedMij-zorgaanbiedernamen voor Zorgaanbieders, zoals beschreven in verantwoordelijkheid 13 op de Processen-en-Informatielaag;

  • Gegevensdiensten met Systeemrollen zoals opgenomen in de Catalogus, respectievelijk het Register van Informatiestandaarden;

  • Elke Zorgaanbieder kent bij elke ZorgaanbiederGegevensdienstInterfaceversie (die hij aanbiedt via een Dienstverlener Zorgaanbieder) één AuthorizationEndpoint en één TokenEndpoint en bij elke ZorgaanbiederGegevensdienstInterfaceversieSysteemrol daarbinnen één ResourceEndpoint. De endpoints hebben elk een URI als technisch adres.

Periodes

Daar waar in het metamodel sprake is van periodes, begrensd door een start en een eind, moeten deze start en eind opgevat als beginmomenten. Als het om een startdatum en einddatum gaat, zoals in de attributen van Gegevensdienst, worden dus de beginmomenten van die data bedoeld, om 00h00m00. De start wordt opgevat als het begin van de geldigheid, het eind als het begin van de ongeldigheid. De geldigheid loopt daarom vanaf start tot eind (niet tot en met). Dit betekent ook dat, als het eind ontbreekt, de geldigheid zich voor onbepaalde tijd uitstrekt.

Invarianten

Het diagram hierboven wordt geordend door (bestaans)afhankelijkheden tussen klassen. Binnen deze ordening bestaan er ook nog consistentie-eisen aan de instanties van deze klassen. Dit zijn de invarianten die in onderstaande tabel zijn opgenomen. Wat een invariant uitdrukt is dat een instantie van de betreffende klasse niet bestaat als zij niet aan de invariant voldoet. De tabel doet verder geen uitspraken over hoe de bewaking van deze consistentie wordt geïmplementeerd. In menige implementatie zullen tijdelijke inconsistenties worden toegestaan en pas later geweigerd of verholpen worden. Dat kan op vele manieren, maar het MedMij Afsprakenstelsel wil grote vrijheid laten in hoe de consistentie in registraties wordt geborgd.

De pad-expressies in de invarianten bestaan uit namen gescheiden door punten. Vanuit een zekere klasse wordt altijd een stap gemaakt naar een klasse waarvan eerstgenoemde onmiddellijk bestaansafhankelijk is. De naam van de zijde van de associatie waarover de stap wordt gemaakt wordt geacht de naam te dragen van de klasse aan het betreffende eindpunt van de associatie, de bestemming van de stap dus.

Betreft instanties van klasse ...

Invariant

Modeldomein

Toelichting

Aard

Betreft instanties van klasse ...

Invariant

Modeldomein

Toelichting

Aard

AbonnerenUsecase

Er is precies één instantie hiervan.

Rollen

Dit is een eenling in het model.

getalsverhouding

AuthotizationEndpoint

Voor elk AuthorizationEndpoint a en 
voor elke DeelnemerInRolZorgaanbiederGegevensdienst d,
geldt:

ALS d.ZorgaanbiederGegevensdienstInterfaceversie =
a.ZorgaanbiederGegevensdienstInterfaceversie

DAN d.DeelnemerInRol.Deelnemera.MedMijNode.DeelnemerNode.Deelnemer

Zorgaanbieders

Deze invariant regelt dat de URI van elk authorization endpoint hoort bij een MedMijNode die van dezelfde Deelnemer is die ook de betreffende ZorgaanbiederGegevensdienst aanbiedt.

niet-lokale afhankelijkheid

Bedrijfsrol

Elke Bedrijfsrol is hetzij PatiëntBedrijfsrol of ZorgaanbiederBedrijfsrol.

Informatiestandaarden

Dit is een uitsluitende opsomming.

opsomming

Bedrijfsrol

Voor elke Bedrijfsrol b geldt:
ALS(
b : PatiëntBedrijfsrol DAN b.Weergavenaam = "Patiënt";
b : ZorgaanbiederBedrijfsrol DAN b.Weergavenaam = "Zorgaanbieder";
ANDERS FOUT) 

Informatiestandaarden

Dit koppelt de namen van de subklassen aan de weergavenamen.

lokale afhankelijkheid

BronBusinessrol

Er is precies één instantie hiervan.

Deelnemers

Dit is een eenling in het model.

getalsverhouding

Businessrol

Voor elke Businessrol b geldt:
ALS(
b : BronBusinessrol DAN b.Weergavenaam = "Bron";
b : LezerBusinessrol DAN b.Weergavenaam = "Lezer";
b : UitgeverBusinessrol DAN b.Weergavenaam = "Uitgever";
ANDERS FOUT) 

Rollen

Dit koppelt de namen van de subklassen aan de weergavenamen.

lokale afhankelijkheid

DeelnemerInRol

Voor elke DeelnemerInRol d geldt:
d.Deelnemer.Deelnemersrol en d.RolInGegevensdienst. DeelnemersrolUsecaseBusinessrol.Deelnemersrol zijn identiek.

Deelnemers

De betreffende Deelnemer kan zich alleen aanmelden voor rollen die hem door de Catalogus geboden worden.

niet-lokale afhankelijkheid

DeelnemerInRolZorgaanbiederGegevensdienst

Voor elke DeelnemerInRolZorgaanbiederGegevensdienst d geldt:
d. ZorgaanbiederGegevensdienst.Gegevensdienst = d.DeelnemerInRol.RolInGegevensdienst.Gegevensdienst

Zorgaanbieders

Een Deelnemer kan alleen gezag doen gelden over de opname, in de Zorgaanbiederslijst, van een Gegevensdienst bij een Zorgaanbieder, als die Deelnemer ook voor die Gegevensdienst is toegelaten in MedMij.

niet-lokale afhankelijkheid

Dienstverlenerpersoon

Er bestaat hooguit één instantie hiervan bij één Deelnemer,
en precies één als de Deelnemersrol van laatstgenoemde van het type DienstverlenerpersoonDeelnemersrol is.

Deelnemers

Een Deelnemer heet een Dienstverlenerpersoon dan en slechts dan als hij de toepasselijke rol speelt.

getalsverhouding

Deelnemersrol

Voor elke Deelnemersrol d geldt:
ALS(
d : DienstverlenerpersoonDeelnemersrol DAN d.Weergavenaam = "Dienstverlener persoon";
d : DienstverlenerzorgaanbiederDeelnemersrol DAN d.Weergavenaam = "Dienstverlener zorgaanbieder";
ANDERS FOUT) 

Rollen

Dit koppelt de namen van de subklassen aan de weergavenamen.

lokale afhankelijkheid

DeelnemersrolBusinessrol

Er bestaan precies drie instanties hiervan, namelijk:

  • één zodanig dat DeelnemersrolBusinessrol.Deelnemersrol : DienstverlenerpersoonDeelnemersrol en DeelnemersrolBusiness.Businessrol : UitgeverBusinessrol;

  • één zodanig dat DeelnemersrolBusinessrol.Deelnemersrol : DienstverlenerzorgaanbiederDeelnemersrol en DeelnemersrolBusiness.Businessrol : BronBusinessrol; en

  • één zodanig dat DeelnemersrolBusinessrol. Deelnemersrol : DienstverlenerzorgaanbiederDeelnemersrol en DeelnemersrolBusiness. Businessrol : LezerBusinessrol;

Rollen

Hier worden de twee juridische rollen Dienstverlener zorgaanbieder en Dienstverlener persoon verbonden aan de Businessrollen Uitgever, Bron en Lezer.

rolbinding

DeelnemersrolUsecaseBusinessRol

Deze klasse bestaat uit precies één instantie voor elke combinatie van een instantie d van DeelnemersrolBusinessrol en een instantie u van UsecaseBusinessrol waarvoor geldt: d.BusinessRol = u.BusinessRol.

Rollen

Vervallen op 14 mei 2022