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:
- een gebruikersvriendelijke naam van de OAuth Client kan vinden om te gebruiken in de toestemmingsverklaring danwel de bevestigingsverklaring;
- kan zien voor welke Gegevensdiensten de OAuth Client gekwalificeerd is;
- 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 /wiki/spaces/MMCatalogus/overview. 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's, Zorgaanbieders, 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 /wiki/spaces/MMCatalogus/overview 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 |
---|---|---|---|---|
AbonnerenUsecase | Er is precies één instantie hiervan. | Rollen | Dit is een eenling in het model. | getalsverhouding |
AuthotizationEndpoint | Voor elk AuthorizationEndpoint a en ALS d.ZorgaanbiederGegevensdienstInterfaceversie = DAN d.DeelnemerInRol.Deelnemer = a.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: | Rollen | Dit koppelt de namen van de subklassen aan de weergavenamen. | lokale afhankelijkheid |
DeelnemerInRol | Voor elke DeelnemerInRol d geldt: | 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: | Rollen | Dit koppelt de namen van de subklassen aan de weergavenamen. | lokale afhankelijkheid |
DeelnemersrolBusinessrol | Er bestaan precies drie instanties hiervan, namelijk:
| 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 | Hier worden alle (namelijk vier) passende combinaties gemaakt van DeelnemersrolBusinessrol en UsecaseBusinessrol. Het gaat om: DienstverlenerPersoon/Uitgever/Verzamelen, DienstverlenerPersoon/Uitgever/Delen, DienstverlenerZorgaanbieder/Bron/Verzamelen en DienstverlenerZorgaanbieder/Lezer/Delen. | opsomming |
DelenUsecase | Er is precies één instantie hiervan. | Rollen | Dit is een eenling in het model. | getalsverhouding |
DienstverlenerpersoonDeelnemersrol | Er is precies één instantie hiervan. | Rollen | Dit is een eenling in het model. | getalsverhouding |
DienstverlenerzorgaanbiederDeelnemersrol | Er is precies één instantie hiervan. | Rollen | Dit is een eenling in het model. | getalsverhouding |
Gegevensdienst | Er zijn nul of meer Gegevensdiensten. | Gegevensdiensten | Er kunnen op enig moment nul Gegevensdiensten zijn. | getalsverhouding |
Gegevensdienst | Voor elke Gegevensdienst g geldt: g.Startdatum ligt voor g.Einddatum. | Gegevensdiensten | Anders heeft de geldigheidsperiode geen zin. | lokale afhankelijkheid |
Gegevensdienst | Voor elke Gegevensdienst g1 en g2 geldt: | Gegevensdiensten | Een geldige Gegevensdienst kan geen onbestaande of ongeldige Gegevensdienst vereisen. Een ontbrekende Einddatum (want die is optioneel) betekent "voor onbepaalde tijd" en ligt na elke "bepaalde tijd". | lokale afhankelijkheid |
Gegevensdienst | Voor elke twee verschillende Gegevensdiensten g1 en g2 geldt: g1.Gegevensdienstnaam /= g2.Gegevensdienstnaam | Gegevensdiensten | Zo worden verschillende Gegevensdiensten niet verward door eenzelfde naam. | lokale afhankelijkheid |
Gegevensdienst | Voor elke Gegevensdienst geldt: g.Usecase is ofwel VerzamelenUsecase ofwel DelenUsecase. | Gegevensdiensten | Zo wordt geregeld dat een Gegevensdienst alleen gebaseerd kan zijn op de primaire use cases Verzamelen of Delen. | opsomming |
GepubliceerdeInterfaceversie | Er is precies één instantie hiervan. | Changes | Dit is een eenling in het model. | getalsverhouding |
Kwalificatieloket | Elk Kwalificatieloket heeft ten minste één van de volgende attributen: Emailadres, Telefoonnummer en Emailadres. | Systeemrollen | Een Kwalificatieloket moet ten minste langs één wijze een kanaal kennen waarlangs meer informatie over de kwalificatie kan worden verkregen. | lokale afhankelijkheid |
LezerBusinessrol | Er is precies één instantie hiervan. | Rollen | Dit is een eenling in het model. | getalsverhouding |
MedMijnetwerk | Er is precies één instantie hiervan. | Netwerk | Dit is een eenling in het model. | getalsverhouding |
MedMijStelselNode | Er is precies één instantie hiervan. | Netwerk | Zonder MedMijStelselNode geen MedMijNetwerk en geen Whitelist. | getalsverhouding |
Node | De hostname van een Node bevat een domeinnaam die een fully-qualified domain name is, conform RFC3696, sectie 2. | Netwerk | Dit is een maatregel tegen risico 4.4.1.4 uit RFC 6819. | lokale afhankelijkheid |
OAuthclient | Voor elke OAuthclient o geldt: o.OAuthclientOrganisatienaam voldoet aan het OAuthclient-namenbeleid. | Applicatie | Zie het OAuthclient-namenbeleid. | lokale afhankelijkheid |
OAuthclientAbonnerenOpGegevensdienstInterfaceversie | Elke OAuthclientAbonnerenOpGegevensdienstInterfaceversie heeft precies één ResourceNotificationEndpoint. | PGO's | Zo kan de Notification Client bij de combinatie van een OAuth Client en een Gegevensdienst het ResourceNotificationEndpoint vinden in de OAuthclientlist, voor zover die OAuth Client de betreffende Interfaceversie daarvoor ondersteund. | getalsverhouding |
OAuthclientAbonnerenOpGegevensdienstInterfaceversie | Elke OAuthclientAbonnerenOpGegevensdienstInterfaceversie heeft precies één SubscriptionNotificationEndpoint. | PGO's | Zo kan de Notification Client bij de combinatie van een OAuth Client en een Gegevensdienst het SubscriptionNotificationEndpoint vinden, in de OAuthclientlist, voor zover die OAuth Client de betreffende Interfaceversie daarvoor ondersteund. | getalsverhouding |
OAuthclientGegevensdienstInterfaceversie | Voor elke OAuthclientGegevensdienstInterfaceversie ogi geldt: ALS er een OAuthClientAbonnerenOpGegevensdienstInterfaceversie oagi1 is zodat:
DAN is er een OAuthClientAbonnerenOpGegevensdienstInterfaceversie oagi2 zodat:
| Zorgaanbieders | Wanneer een OAuthClient Abonneren op een Gegevensdienst aanbiedt op de gepubliceerde Interfaceversie, moet hij dat ook aanbieden op de verplichte Interfaceversie. Zie Change- en releasebeleid. | niet-lokale afhankelijkheid |
Ondersteuningsloket | Elk Ondersteuningsloket heeft ten minste één van de volgende attributen: Emailadres, Telefoonnummer en Emailadres. | Systeemrollen | Een Ondersteuningsloket moet ten minste langs één wijze een contactadres kennen. | lokale afhankelijkheid |
ResourceEndpoint | Voor elk ResourceEndpoint r en ALS d.ZorgaanbiederGegevensdienstInterfaceversie = DAN d.DeelnemerInRol.Deelnemer = r.MedMijNode.DeelnemerNode.Deelnemer | Zorgaanbieders | Deze invariant regelt dat de URI van elk resource endpoint hoort bij een MedMijNode die van dezelfde Deelnemer is die ook de betreffende ZorgaanbiederGegevensdienst aanbiedt. | niet-lokale afhankelijkheid |
ResourceEndpoint | Voor elk ResourceEndpoint r geldt: de combinatie van r.MedMijNode.DeelnemerNode.Node.Hostname en r.ResourceEndpointpath is gelijk aan wat in de specificaties van r.ZorgaanbiederGegevensdienstSysteemrolInterfaceversie.Systeemrol.Transactie Wanneer de specificaties een request identificeren maar geen | Zorgaanbieders | Deze invariant regelt welk deel van de URI van de resource request uit de ZAL wordt betrokken. | niet-lokale afhankelijkheid |
ResourceNotificationEndpoint | Voor elk ResourceNotificationEndpoint s geldt: s.MedMijNode.DeelnemerNode.Deelnemer = s.OAuthClientAbonnerenOpGegevensdienst. | PGO's | De MedMijNode van elk ResourceNotificationEndpoint is van dezelfde Deelnemer als die van de betreffende OAuthClient. | niet-lokale afhankelijkheid |
RolInGegevensdienst | Deze klasse bestaat uit precies één instantie r voor elke combinatie van een instantie d van r.DeelnemersrolUsecaseBusinessrol en een instantie g van r.Gegevensdienst waarvoor geldt: g.Usecase = d.UsecaseBusinessrol.Usecase | Deelnemers | Zo wordt ervoor gezorgd dat de Usecase die bij de betreffende Gegevensdienst hoort overeenkomt met de Usecase die bij de DeelnemersrolUsecaseBusinessrol hoort. Voor elke keer dat dat zo is, heeft deze klasse een instantie. | niet-lokale afhankelijkheid |
SubscriptionEndpoint | Voor elk SubscriptionEndpoint s en ALS d.ZorgaanbiederGegevensdienstInterfaceversie = DAN d.DeelnemerInRol.Deelnemer = s.MedMijNode.DeelnemerNode.Deelnemer | Zorgaanbieders | Deze invariant regelt dat de URI van elk subscription endpoint hoort bij een MedMijNode die van dezelfde Deelnemer is die ook de betreffende ZorgaanbiederGegevensdienst aanbiedt. | niet-lokale afhankelijkheid |
SubscriptionEndpoint | Voor elke ZorgaanbiederGegevensdienst zg, r.MedMijNode.DeelnemerNode.Deelnemer = d.DeelnemerInRol.Deelnemer | Zorgaanbieders | Deze invariant regelt dat de URI van elk subscription endpoint hoort bij een MedMijNode die van dezelfde Deelnemer is die ook de betreffende ZorgaanbiederGegevensdienst aanbiedt. Hoewel de invariant spreekt van "elk SubscriptionEndpoint" en van "elke DeelnemerinRolZorgaanbiederGegevensdienst" zijn er van beide maar (maximaal) één voor elke ZorgaanbiederGegevensdienstInterfaceversie. Dat wordt geregeld door andere invarianten, maar daarvan wil deze invariant niet afhankelijk zijn. | niet-lokale afhankelijkheid |
SubscriptionNotificationEndpoint | Voor elk SubscriptionNotificationEndpoint s geldt: s.MedMijNode.DeelnemerNode.Deelnemer = s.OAuthClientAbonnerenOpGegevensdienst. | PGO's | De MedMijNode van elk SubscriptionNotificationEndpoint is van dezelfde Deelnemer als die van de betreffende OAuthClient. | niet-lokale afhankelijkheid |
TokenEndpoint | Voor elk TokenEndpoint t en ALS d.ZorgaanbiederGegevensdienstInterfaceversie = DAN d.DeelnemerInRol.Deelnemer = t.MedMijNode.DeelnemerNode.Deelnemer | Zorgaanbieders | Deze invariant regelt dat de URI van elk token endpoint hoort bij een MedMijNode die van dezelfde Deelnemer is die ook de betreffende ZorgaanbiederGegevensdienst aanbiedt. | niet-lokale afhankelijkheid |
UitgeverBusinessrol | Er is precies één instantie hiervan. | Rollen | Dit is een eenling in het model. | getalsverhouding |
Usecase | Voor elke Usecase u geldt: | Rollen | Dit koppelt de namen van de subklassen aan de weergavenamen. | lokale afhankelijkheid |
Usecase Businessrol | Er zijn precies vier instanties hiervan, namelijk:
| Rollen | Hier wordt bepaald welke Businessrollen participeren in welke Usecases. | opsomming |
VerplichteInterfaceversie | Er is precies één instantie hiervan. | Changes | Dit is een eenling in het model. | getalsverhouding |
VerzamelenUsecase | Er is precies één instantie hiervan. | Rollen | Dit is een eenling in het model. | getalsverhouding |
ZorgaanbiederBedrijfsrol | Er is precies één instantie hiervan. | Informatiestandaarden | Dit is een eenling in het model. | getalsverhouding |
Zorgaanbieder | Elke Zorgaanbieder heeft minstens één ZorgaanbiederGegevensdienst | Zorgaanbieders | Anders is de opname van de Zorgaanbieder in de Zorgaanbiederslijst nutteloos. | getalsverhouding |
Zorgaanbieder | Elke Zorgaanbieder heeft bij elke Gegevensdienst ten hoogste één ZorgaanbiederGegevensdienst. | Zorgaanbieders | Zo kan de OAuth Client bij de combinatie van een Zorgaanbieder en een Gegevensdienst het AuthorizationEndpoint en TokenEndpoint vinden, in de Zorgaanbiederslijst. | getalsverhouding |
Zorgaanbieder | Voor elke ZorgaanbiederGegevensdienst zg1 en voor elke Gegevensdienst g in zg1.Gegevensdienst.Vereist geldt: er een ZorgaanbiederGegevensdienst zg2, zodat | Zorgaanbieders | Zo wordt ervoor gezorgd dat, als een Zorgaanbieder een Gegevensdienst aanbiedt die een andere vereist, deze Zorgaanbieder ook de andere aanbiedt. | niet-lokale afhankelijkheid |
ZorgaanbiederAbonnerenOpGegevensdienst | Voor elke ZorgaanbiederGegevensdienst zg, s.MedMijNode.DeelnemerNode.Deelnemer = d.DeelnemerInRol.Deelnemer | Zorgaanbieders | Deze invariant regelt dat elk subscription endpoint hoort bij een MedMijNode die van dezelfde Deelnemer is die ook de betreffende ZorgaanbiederGegevensdienst aanbiedt. Hoewel de invariant spreekt van "elk SubscriptionEndpoint" en van "elke DeelnemerinRolZorgaanbiederGegevensdienst" zijn er van beide maar één voor elke ZorgaanbiederGegevensdienst. Dat wordt geregeld door andere invarianten, maar daarvan wil deze invariant niet afhankelijk zijn. | niet-lokale afhankelijkheid |
ZorgaanbiederAbonnerenOpGegevensdienstInterfaceversie | Voor elke ZorgaanbiederAbonnerenOpGegevensdienstInterfaceversie zgi geldt: zgi.ZorgaanbiederGegevensdienstInterfaceversie. | Zorgaanbieders | Vooralsnog zijn alleen Abonnementen op verzamelende Gegevensdiensten mogelijk. | niet-lokale afhankelijkheid |
ZorgaanbiederAbonnerenOpGegevensdienstInterfaceversie | Elke ZorgaanbiederAbonnerenOpGegevensdienstInterfaceversie heeft precies één SubscriptionEndpoint. | Zorgaanbieders | Zo kan de OAuth Client bij een Zorgaanbieder die Abonnementen op een Gegevensdienst biedt, per Interfaceversie het SubscriptionEndpoint vinden, in de Zorgaanbiederslijst. | getalsverhouding |
ZorgaanbiederAbonnerenOpGegevensdienstInterfaceversie | Voor elke ZorgaanbiederAbonnerenOpGegevensdienstInterfaceversie zgi geldt: zgi.MaximaleDuur <= zgi.ZorgaanbiederGegevensdienstInterfaceversie. | Zorgaanbieders | 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 /wiki/spaces/MMCatalogus/overview heeft aangegeven. | niet-lokale afhankelijkheid |
ZorgaanbiederGegevensdienst | Voor elke ZorgaanbiederGegevensdienst zg geldt: ALS er een ZorgaanbiederGegevensdienstInterfaceversie zgi1 is zodat:
EN er een GegevensdienstInterfaceversie gi is zodat:
DAN is er een ZorgaanbiederGegevensdienstInterfaceversie zgi2 zodat:
| Zorgaanbieders | Wanneer een Zorgaanbieder een Gegevensdienst aanbiedt op de gepubliceerde Interfaceversie, moet hij deze ook aanbieden op de verplichte Interfaceversie. Dit geldt uiteraard alleen als de Gegevensdienst ook mag worden aangeboden op de verplichte Interfaceversie. Zie Change- en releasebeleid. | niet-lokale afhankelijkheid |
ZorgaanbiederGegevensdienst | Voor elke ZorgaanbiederGegevensdienst zg geldt: ALS er een ZorgaanbiedersAbonnerenOpGegevensdienstInterfaceversie zagi1 is zodat:
EN er een GegevensdienstAbonnerenOpGegevensdienstInterfaceversie agi is zodat:
DAN is er een ZorgaanbiedersAbonnerenOpGegevensdienstInterfaceversie zagi2 zodat:
| Zorgaanbieders | Wanneer een Zorgaanbieder Abonneren op een Gegevensdienst aanbiedt op de gepubliceerde Interfaceversie, moet hij dat ook aanbieden op de verplichte Interfaceversie. Dit geldt uiteraard alleen als de Gegevensdienst ook mag worden aangeboden op de verplichte Interfaceversie. Zie Change- en releasebeleid. | niet-lokale afhankelijkheid |
ZorgaanbiederGegevensdienst | Voor elke ZorgaanbiederGegevensdienst.Gegevensdienst. Systeemrolverzameling.Systeemrol s waarvoor geldt dat s.Transactie.Bedrijfsrol = ZorgaanbiederBedrijfsrol, geldt dat er een ZorgaanbiederGegevensdienstSysteemrol z is zodat z.Systeemrol = s. | Zorgaanbieders | Als in de Catalogus een Systeemrol voor Zorgaanbieders hoort bij een namens een zekere Zorgaanbieder aangeboden Gegevensdienst, dan moet namens dezelfde Zorgaanbieder ook deze Systeemrol worden aangeboden. | niet-lokale afhankelijkheid |
ZorgaanbiederGegevensdienst | Elke ZorgaanbiederGegevensdienst heeft precies één DeelnemerInRolZorgaanbiederGegevensdienst d, en wel zo dat d.DeelnemerInRol.Deelnemer.Rol = DienstverlenerzorgaanbiederDeelnemersrol. | Zorgaanbieders | Zo is duidelijk welke DeelnemerInRol zorgt voor een ZorgaanbiederGegevensdienst en dat dat een Dienstverlener zorgaanbieder betreft. | getalsverhouding en rolbinding |
ZorgaanbiederGegevensdienstInterfaceversie | Elke ZorgaanbiederGegevensdienstInterfaceversie heeft precies één AuthorizationEndpoint. | Zorgaanbieders | Zo kan de OAuth Client bij de combinatie van een Zorgaanbieder, een Gegevensdienst en een Interfaceversie het AuthorizationEndpoint vinden, in de Zorgaanbiederslijst. | getalsverhouding |
ZorgaanbiederGegevensdienstInterfaceversie | Elke ZorgaanbiederGegevensdienst heeft precies één TokenEndpoint. | Zorgaanbieders | Zo kan de OAuth Client bij de combinatie van een Zorgaanbieder, een Gegevensdienst een Interfaceversie het TokenEndpoint vinden, in de Zorgaanbiederslijst. | getalsverhouding |
ZorgaanbiederGegevensdienstSysteemrolInterfaceversie | Elke combinatie van een ZorgaanbiederGegevensdienstInterfaceversie en een ZorgaanbiederGegevensdienstSysteemrol heeft precies één ZorgaanbiederGegevensdienstSysteemrolInterfaceversie. | Zorgaanbieders | Zo kan de OAuth Client bij de combinatie van een Zorgaanbieder, een Gegevensdienst, een Interfaceversie en een Systeemrol het ResourceEndpoint vinden, in de Zorgaanbiederslijst. | getalsverhouding |
ZorgaanbiederGegevensdienstSysteemrolInterfaceversie | ZorgaanbiederGegevensdienstSysteemrolInterfaceversie. Systeemrol.Bedrijfsrol = ZorgaanbiederBedrijfsrol | Zorgaanbieders | Zorgaanbieders kunnen alleen Systeemrollen aanbieden die voor Zorgaanbieders bedoeld zijn. | niet-lokale afhankelijkheid |
ZorgaanbiederGegevensdienstSysteemrolInterfaceversie | Elke ZorgaanbiederGegevensdienstSysteemrolInterfaceversie heeft precies één ResourceEndpoint. | Zorgaanbieders | Zo kan de OAuth Client bij de combinatie van een Zorgaanbieder, een Gegevensdienst en een Systeemrol het ResourceEndpoint vinden, in de Zorgaanbiederslijst. | getalsverhouding |
ZorggebruikerBusinessrol | Er is precies één instantie hiervan. | Rollen | Dit is een eenling in het model. | getalsverhouding |
Basisklassen
Basisklasse | Definitie |
---|---|
Aanbiedertype | String die ZA of BAZB bevat om de aanbieder te typeren als respectievelijk Zorgaanbieder (ZA) en BSN-gerechtigde aanbieder zonder behandelrelatie (BAZB). |
DeelnemerId | String van minimaal één en maximaal 30 tekens. |
Emailadres | Semantiek: e-mailadres volgens sectie 3.4.1 van IETF RFC 5322. Syntax: string van een of meer tekens, gevolgd door het teken |
Endpointpath | Zie adresseringsverantwoordelijkheden op de Interfaces-pagina. |
GegevensdienstId | String van minimaal één en maximaal 30 tekens. |
Hostname | Zie adresseringsverantwoordelijkheden op de Interfaces-pagina. |
HttpsUrl | Semantiek: adres van een resource die via het internet benaderbaar is volgens het HTTPS-protocol. Syntax: string die altijd start met |
InterfaceversieId | String van minimaal één en maximaal 30 tekens. |
LangeWeergavenaam | String van minimaal drie en maximaal 125 tekens. |
NederlandseDatum | Semantiek: datum volgens lokale Nederlandse tijd. Syntax: datum volgens het type |
Nietnegatiefgetal | Conform het type xs:nonNegativeInteger , zoals gespecificeerd in XML Schema 1.0. |
OAuthclientOrganisatienaam | Conform toepasselijk Oauthclient-namenbeleid. |
RequestUri | String van minimaal twaalf en maximaal 2048 tekens. |
Systeemrolcode | String van minimaal één en maximaal 30 tekens. |
Telefoonnummer | Semantiek: internationaal telefoonnummer volgens Recommendation ITU-T E.164 (11/2010). Syntax: string die altijd start met + en vervolgens bestaat uit maximaal vijftien cijfers (0 tot en met 9). |
Versienummer | String van minimaal één en maximaal 30 tekens. |
Weergavenaam | String van minimaal drie en maximaal 50 tekens. |
YesNo | Conform het type xs:boolean , zoals gespecificeerd in XML Schema 1.0. |
Zorgaanbiedernaam | Conform toepasselijk Zorgaanbiedersnamenbeleid. |