Er is één metamodel, maar er zijn meerdere logische modellen. Logische modellen bereiden de implementatie voor van bepaalde onderdelen van het metamodel. Deze versie van het MedMij Afsprakenstelsel kent drie logische modellen. Elk daarvan hoort bij een of enkele specifieke implementatie-component(en) in MedMij Afsprakenstelsel. Het gaat om de volgende componenten:
De vier lijsten staan gecombineerd in één logisch model, onder de klasse MedMijBeheerlijst, omdat zij basiskenmerken delen. Iets dergelijks geldt voor de twee rapporten, onder de klasse MedMijRapport.
Logische modellen gehoorzamen het metamodel, maar verbijzonderen dat. In de stap van metamodel naar logisch model kunnen er (logische) klassen, invarianten en basisklassen bijkomen. Maar de logische modellen bouwen vooral ook voort op het metamodel door klassen en attributen daarvan te gebruiken. In dat geval hebben logische klassen, waarde en basisklassen dus overeenkomstige klassen in het metamodel. De overeenkomsten staan hieronder bij het logische model genoemd in een tabel. Waar de tabel bij een zekere logisch klasse, waarde of basisklasse de overeenkomst met het metamodel niet noemt, is deze nieuw voor het logische niveau.
Logische klassen hebben minder of meer attributen dan de overeenkomstige klassen in het metamodel. Waar het er minder zijn, hoeven de weggelaten attributen dus niet te worden opgenomen in de te implementeren component, bijvoorbeeld van een te publiceren lijst. Waar het er meer zijn, worden deze attributen overgeërfd van een klasse in het metamodel waarvan de overeenkomstige klasse in dat metamodel bestaansafhankelijk was. In het metamodel was laatstgenoemde klasse dus toegankelijk voor de bestaansafhankelijke klasse, maar in het specifieke logische model niet meer aanwezig en dus ook niet meer toegankelijk. Zou de betreffende klasse in het logische model het attribuut dus niet hebben overgenomen, zou deze verloren zijn.
Waar een invariant uit het metamodel past binnen de scope van het specifieke logische model, verschijnt deze ook als invariant bij het logische model, hoewel de formulering zal zijn aangepast aan de ordening en naamgeving in het logische model. Daarenboven kunnen op logisch niveau ook nieuwe invarianten verschijnen. De meeste daarvan zijn verervingen: in de stap van het metamodel naar een logisch model raken verbanden verbroken tussen klassen. Als die verbanden toch van belang zijn in het logische model worden er attributen uit het metamodel verorven van een bepaalde klasse in het metamodel naar een lagere klasse, waarvan wel een pendant voorkomt in het logische model. Met "lagere klasse" wordt bedoeld dat deze bestaansafhankelijk is van de andere (hogere) klasse. Zo'n verervingsinvariant staat opgeschreven met een ←. Vóór dat pijltje staat het ervende attribuut van de logische klasse, erachter staat het pad in het metamodel naar de verervende klasse.
Ook de basisklassen uit het metamodel worden, waar van toepassing, overgenomen door het logische model. Op een enkele plek verschijnen in het logische model ook nieuwe basisklassen.
De logische modellen hebben een meer op implementatie toegespitste structuur dan het metamodel. Dat metamodel is gestoeld op associatieklassen en bestaansafhankelijkheid, de logische modellen zijn meer hiërarchisch. Hiërarchie is een insnoering van associatieve bestaansafhankelijkheid, maar past beter bij menige gangbare implementatietechnologie, waaronder zeker XML, waarin de vier lijsten geïmplementeerd worden. Die insnoering betekent wel dat de logische modellen minder duurzaam en minder uitbreidbaar zijn dan het metamodel; wat voor het metamodel een eenvoudige uitbreiding is kan voor de logische modellen een stevige ingreep zijn. Dat is de prijs van hiërarchie.
Bij de vertaling van de associativiteit van het metamodel naar de hiërarchie van de logische modellen is een aantal vuistregels gebruikt.
Gegevensdienst
en Gegevensdiensten
in de logische model van de lijsten en de rapporten). In dat geval worden de namen uitgebreid zodat hun hiërarchische context zichtbaar wordt (namelijk met _GNL
, _OCL
, _ZAL
, _BR
en _PR
).Merk op dat de uses-hiërarchie de bestaansafhankelijkheidsrelatie ondersteboven zet. In de corresponderende klassen in het metamodel wordt in de uses-relatie de gebruikte klasse boven de gebruikende geplaatst, in de logische modellen juist andersom. Dit kenmerkt het doorslaggevende verschil tussen de conceptuele denkwijze van het metamodel en de bouw-gerichte denkwijze van de logische modellen. Voor de consistentie en duurzaamheid van het MedMij Afsprakenstelsel is het zaak om in het modelbeheer het metamodel centraal te plaatsen en vervolgens de logische modellen ermee in overeenstemming te houden. Het metamodel zorgt zo ook voor de duurzame consistentie tussen de verschillende logische modellen. Van die consistentie zijn de betrouwbaarheid en interoperabiliteit afhankelijk die door het MedMij Afsprakenstelsel geleverd moet worden.
Betreft instanties van logische klasse ... | Invariant | Component | Toelichting | Aard | Herkomst |
---|---|---|---|---|---|
Abonneren | Voor elk Abonneren a geldt: a.MaximaleDuur <= de maximale duur van Abonnementen op die Gegevensdienst zoals in de /wiki/spaces/MMCatalogus/overview aangegeven | Zorgaanbiederslijst | Een Zorgaanbieder kan de maximale abonnementsduur die hij aanbiedt voor een Gegevensduur, op een Interfaceversie, beperken. Daarbij moet hij echte blijven onder de maximale duur die MedMij voor die Gegevensdienst in de /wiki/spaces/MMCatalogus/overview heeft aangegeven. | niet-lokale afhankelijkheid | metamodel (zie ZorgaanbiederGegevensdienst |
Abonneren | Voor elk Abonneren a geldt: a.SubscriptionEndpointuri ← | Zorgaanbiederslijst | Zie de Interfaces-pagina. | vererving | logisch model |
AuthorizationEndpoint | Voor elk AuthorizationEndpoint a geldt: a.AuthorizationEndpointuri ← | Zorgaanbiederslijst | Zie de Interfaces-pagina. | vererving | logisch model |
Gegevensdienst_OCL | Voor elke Gegevensdienst_OCL g met haar corresponderende ZorgaanbiederGegevensdienst z geldt: g.GegevensdienstId ← z.Gegevensdienst.GegevensdienstId | Zorgaanbiederslijst | Zo erft de OAuthclientlist de GegevensdienstId's van de Catalogus. | vererving | logisch model |
Gegevensdienst_ZAL | Voor elke Gegevensdienst_ZAL g met haar corresponderende ZorgaanbiederGegevensdienst z geldt: g.GegevensdienstId ← z.Gegevensdienst.GegevensdienstId | Zorgaanbiederslijst | Zo erft de Zorgaanbiederslijst de GegevensdienstId's van de Catalogus. | vererving | logisch model |
Gegevensdienst_ZKL | Voor elke Gegevensdienst_ZKL g met haar corresponderende ZorgaanbiederGegevensdienst z geldt: g.GegevensdienstId ← z.Gegevensdienst.GegevensdienstId | Zorgaanbiederskoppellijst | Zo erft de Zorgaanbiederskoppellijst de GegevensdienstId's van de Catalogus. | vererving | logisch model |
Gegevensdienstnamenlijst | Er is precies één instantie hiervan. | Gegevensdienstnamenlijst | Dit is een eenling in het model. | getalsverhouding | logisch model |
MedMijNode | Voor elke MedMijNode m geldt: | Whitelist | Zo erft de MedMijNode de Hostname van de Node die het is. | vererving | logisch model |
MedMijNode | De hostname van een MedMijNode bevat een domeinnaam die een fully-qualified domain name is, conform RFC3696, sectie 2. | Whitelist | Dit is een maatregel tegen risico 4.4.1.4 uit RFC 6819. | lokale afhankelijkheid | metamodel (bij Node) |
OAuthclient | Voor elke OAuthclient o: o.OAuthclientOrganisatienaam voldoet aan het OAuthclient-namenbeleid. | Applicatie | Zie het OAuthclient-namenbeleid. | lokale afhankelijkheid | metamodel (bij OAuthclient) |
OAuthclient | Voor elke OAuthclient o geldt: o.Hostname ← o.MedMijNode .Hostname. | OAuthclientlist | Zo erft de OAuthclientlist de Hostnames van de Nodes. | vererving | logisch model |
OAuthclientlist | Er is precies één instantie hiervan. | OAuthclientlist | Dit is een eenling in het model. | getalsverhouding | logisch model |
ResourceEndpoint | Voor elk ResourceEndpoint r geldt: r.ResourceEndpointuri ← | Zorgaanbiederslijst | Zie de Interfaces-pagina. | vererving | logisch model |
ResourceNotificationEndpoint | Voor elk ResourceNotificationEndpoint r geldt: r.ResourceNotificationEndpointuri ← combinatie van r.MedMijNode.DeelnemerNode.Node.Hostname en r.AuthorizationEndpointpath, conform de adresseringsverantwoordelijkheden op de Interfaces-pagina. | OAuthclientlist | Zie de Interfaces-pagina. | vererving | logisch model |
SubscriptionNotificationEndpoint | Voor elk SubscriptionNotificationEndpoint s geldt: s.SubscriptionNotificationEndpointuri ← combinatie van s.MedMijNode.DeelnemerNode.Node.Hostname en s.AuthorizationEndpointpath, conform de adresseringsverantwoordelijkheden op de Interfaces-pagina. | OAuthclientlist | Zie de Interfaces-pagina. | vererving | logisch model |
Systeemrol | Voor elke Systeemrol s met haar corresponderende ZorgaanbiederGegevensdienstSysteemrol z geldt: s.Systeemrolcode ← z.Systeemrol.Systeemrolcode. | Zorgaanbiederslijst | Zo erft de Zorgaanbiederslijst de Systeemrolcodes van de Catalogus. | vererving | logisch model |
TokenEndpoint | Voor elk TokenEndpoint t geldt: t.TokenEndpointuri ← | Zorgaanbiederslijst | Zie de Interfaces-pagina. | lokale afhankelijkheid | logisch model |
Whitelist | Er is precies één instantie hiervan. | Whitelist | Dit is een eenling in het model. | getalsverhouding | logisch model |
Zorgaanbiederslijst | Er is precies één instantie hiervan. | Zorgaanbiederslijst | Dit is een eenling in het model. | getalsverhouding | logisch model |
Zorgaanbiederskoppellijst | Er is precies één instantie hiervan. | Zorgaanbiederskoppellijst | Dit is een eenling in het model. | getalsverhouding | logisch model |
Basisklasse | Definitie | Herkomst |
---|---|---|
Aanbiedertype | String die ZA of BAZB bevat om de aanbieder te typeren als respectievelijk Zorgaanbieder en BSN-gerechtigde aanbieder zonder behandelrelatie. | metamodel |
Backchanneluri | Zie adresseringsverantwoordelijkheden op de Interfaces-pagina. De domeinnaam is een fully-qualified domain name, conform RFC3696, sectie 2. | logisch model |
DatumTijd | Conform het type
xs:dateTime , zoals gespecificeerd in XML Schema 1.0 en inclusief een tijdzone-indicatie. | logisch model |
Frontchanneluri | Zie adresseringsverantwoordelijkheden op de Interfaces-pagina. De domeinnaam is een fully-qualified domain name, conform RFC3696, sectie 2 . | logisch model |
GegevensdienstId | String van minimaal één teken en maximaal 30 tekens. | metamodel |
Hostname | Zie adresseringsverantwoordelijkheden op de Interfaces-pagina. | metamodel |
InterfaceversieId | String van minimaal één en maximaal 30 tekens. | metamodel |
OAuthclientOrganisatienaam | Conform toepasselijk Oauthclient-namenbeleid. | metamodel |
Positiefnummer | Een geheel getal ongelijk 0. | logisch model |
Systeemrolcode | String van minimaal één teken en maximaal 30 tekens. | metamodel |
Weergavenaam | String van minimaal drie en maximaal 50 tekens. | metamodel |
Zorgaanbiedernaam | Conform toepasselijk Zorgaanbiedersnamenbeleid. | metamodel |
Klasse in logisch model | Herkomstklasse in metamodel |
---|---|
Abonneren | ZorgaanbiederAbonnerenOpGevensdienstInterfaceversie |
AuthorizationEndpoint | AuthorizationEndpoint |
Gegevensdienst_GNL | Gegevensdienst |
Gegevensdienst_OCL | OAuthclientGegevensdienstInterfaceversie |
Gegevensdienst_ZAL | ZorgaanbiederGegevensdienstInterfaceversie |
Interfaceversie_OCL | OAuthclientInterfaceversie |
MedMijNode | MedMijNode |
OAuthclient | OAuthclient |
ResourceEndpoint | ResourceEndpoint |
ResourceNotificationEndpoint | ResourceNotificationEndpoint |
SubscriptionNotificationEndpoint | SubscriptionNotificationEndpoint |
Systeemrol | ZorgaanbiederGegevensdienstInterfaceversieSysteemrol |
TokenEndpoint | TokenEndpoint |
Zorgaanbieder_ZAL | Zorgaanbieder |
Zorgaanbieder_ZKL | Zorgaanbieder |
De klasse Interfaceversie_ZAL in het logisch model heeft een corresponderende conceptuele klasse "ZorgaanbiederInterfaceversie" die nog niet is opgenomen in het metamodel. Deze klasse is een associatie van de klassen "Zorgaanbieder" en "Interfaceversie". |
Betreft instanties van klasse ... | Invariant | Component | Toelichting | Aard | Herkomst |
---|---|---|---|---|---|
Catalogus | Er is precies één instantie hiervan. | Catalogus | Dit is een eenling in het model. | getalsverhouding | logisch model |
Systeemrol | Voor elke Systeemrol s geldt: s.Presentatievolgordewordt bepaald door de relatieve positie van de systeemrol in de tijdsvolgorde waarin s.Transactie binnen de uitvoering van s.Systeemrolverzameling.Gegevensdienst.Usecase zijn werk moet doen. Daarbij gelden als elkaar aanvullende richtlijnen:
| Catalogus | De volgorde waarin die Systeemrolcodes bij een Gegevensdienst staan opgesomd is formeel om het even, maar voor de presentatie wel relevant. Die volgorde van presentatie komt overeen met de tijdsvolgorde waarin de betreffende Systeemrollen hun werk moeten doen. | lokale afhankelijkheid | logisch model |
Basisklasse | Definitie | Herkomst |
---|---|---|
BedrijfsrolWeergavenaam | String met de waarde "Patiënt" of "Zorgaanbieder". | logisch model |
DeelnemersrolWeergavenaam | String met de waarde "Dienstverlener persoon" of "Dienstverlener zorgaanbieder". | logisch model |
Emailadres | Semantiek: e-mailadres volgens sectie 3.4.1 van IETF RFC 5322. Syntax: string van een of meer tekens, gevolgd door het teken | metamodel |
GegevensdienstId | String van minimaal één teken en maximaal 30 tekens. | metamodel |
HttpsUrl | Semantiek: adres van een resource die via het internet benaderbaar is volgens het HTTPS-protocol. Syntax: string die altijd start met | metamodel |
LangeWeergavenaam | String van minimaal één en maximaal 125 tekens. | metamodel |
NederlandseDatum | Semantiek: datum volgens lokale Nederlandse tijd. Syntax: datum volgens het type | metamodel |
Nietnegatiefgetal | Conform het type
xs:nonNegativeInteger , zoals gespecificeerd in XML Schema 1.0. | metamodel |
Positiefnummer | Een geheel getal ongelijk 0. | logisch model |
Systeemrolcode | String van minimaal één teken en maximaal 30 tekens. | metamodel |
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). | metamodel |
UsecaseWeergavenaam | String met de waarde "Verzamelen" of "Delen". | logisch model |
Versienummer | String van minimaal één en maximaal 30 tekens. | metamodel |
Weergavenaam | String van minimaal drie en maximaal 50 tekens. | metamodel |
Klasse/waarde in logisch model | Herkomstklasse in metamodel |
---|---|
Gegevensdienst | Gegevensdienst |
Usecase | Usecase |
Interfaceversie | Interfaceversie |
Transactie | Transactie |
Bedrijfsrol | Bedrijfsrol |
Ondersteuningsloket | Ondersteuningsloket |
Kwalificatieloket | Kwalificatieloket |
Transactieaanduiding | Transactieaanduiding |
Volledigetransactienaam | Volledigetransactienaam |
Deelnemersrol | Deelnemersrol |
VereisteGegevensdienst | Gegevensdienst |
Betreft instanties van klasse ... | Invariant | Component | Toelichting | Aard |
---|---|---|---|---|
MedMijStelselNode | Voor de MedMijStelselNode m geldt: m.Hostname ← m.Node.Hostname | MedMijStelselNode | Zo erft de MedMijStelselNode, van de Node die het is, de Hostname. | vererving |
Basisklasse | Definitie | Herkomst |
---|---|---|
Hostname | Zie adresseringsverantwoordelijkheden op de Interfaces-pagina. | metamodel |
Klasse in logisch model | Herkomstklasse in metamodel |
---|---|
MedMijStelselNode | MedMijStelselNode |
Betreft instanties van logische klasse ... | Invariant | Component | Toelichting | Aard | Herkomst |
---|---|---|---|---|---|
Beheerrapport | Er is precies één instantie hiervan. | Beheerrapport | Dit is een eenling in het model. | getalsverhouding | logisch model |
Gegevensdienst_BR | Voor elke Gegevensdienst_BR g met haar corresponderende ZorgaanbiederGegevensdienst z geldt: g.GegevensdienstId ← z.Gegevensdienst.GegevensdienstId | Beheerrapport | Zo erft het Beheerrapport de GegevensdienstId's van de Catalogus. | vererving | logisch model |
Gegevensdienst_PR | Voor elke Gegevensdienst_PR g met haar corresponderende ZorgaanbiederGegevensdienst z geldt: g.GegevensdienstId ← z.Gegevensdienst.GegevensdienstId | Portabiliteitsrapport | Zo erft het Portabiliteitsrapport de GegevensdienstId's van de Catalogus. | vererving | logisch model |
Portabiliteitsrapport | Er is precies één instantie hiervan. | Portabiliteitsrapport | Dit is een eenling in het model. | getalsverhouding | logisch model |
Basisklasse | Definitie | Herkomst |
---|---|---|
DatumTijd | Conform het type xs:dateTime , zoals gespecificeerd in XML Schema 1.0 en inclusief een tijdzone-indicatie. | logisch model |
DeelnemerId | String van minimaal één en maximaal 30 tekens. | metamodel |
GegevensdienstId | String van minimaal één teken en maximaal 30 tekens. | metamodel |
Nietnegatiefgetal | Conform het type
xs:nonNegativeInteger , zoals gespecificeerd in XML Schema 1.0. | logisch model |
RequestUri | String van minimaal twaalf en maximaal 2048 tekens. | metamodel |
Zorgaanbiedernaam | Conform toepasselijk Zorgaanbiedersnamenbeleid. | metamodel |
Klasse in logisch model | Herkomstklasse in metamodel |
---|---|
Gegevensdienst_BR | Gegevensdienst |
Gegevensdienst_PR | Gegevensdienst |
ResourceRequest | ResourceRequest |
Zorgaanbieder | Zorgaanbieder |