uit:
TOP-KT-001 - Componenten, Interfaces en Diensten - [review]
Beschrijving
Koppeltaal 2.0 bestaat uit systeem componenten. In ArchiMate (een EA modelleer taal) wordt hier de term "applicatie component" gebruikt) die andere systeem componenten functies en diensten (component instanties) aanbiedt, zonder die andere systeem component te belasten met hoe dat precies gebeurt. De functies of aangeboden diensten wordt ontsloten of aangeboden via interfaces. De interfaces zijn dus de koppelvlakken tussen de verschillende systeem componenten. Bij elke interface is er sprake van een aanbieder die volgens de interface specificaties functies of (gegevens) diensten aanbiedt aan afnemers.
Overwegingen
In de doelstelling van stichting Koppeltaal is middels het woord ‘interne’ een beperking voor de interfaces en de daarbij behorende Koppeltaal diensten opgenomen. Met deze beperking wordt bedoeld dat de interfaces aangeboden worden onder de verantwoordelijkheid van één zorgaanbieder (domein). De dienstverlenende componenten worden geleverd door verschillende leveranciers. Deze leveranciers kunnen hun componenten ontsluiten via het Koppeltaal platform onder de verantwoordelijkheid van de zorgaanbieder (domein).
Toepassing en restricties
Specifiek voor Koppeltaal:
Koppeltaal 2.0 bestaat uit de volgende systeem componenten en collaboraties:
- "Koppeltaal voorziening" : Alle producten, functies en diensten die nodig zijn om de informatiestromen tussen (zorg) toepassingen op een veilige manier tot stand te brengen in de context van "Blended Care" (combinatie tussen traditionele therapie en digitale therapie/interventies)
- "Koppeltaal domein": Het geheel van samenwerking tussen de Koppeltaal voorziening en Koppeltaal platform onder de verantwoordelijkheid van een zorgaanbieder.
- "Koppeltaal platform" : Een platform geeft toegang tot een palet aan gestandaardiseerde informatiesystemen en technologie. Het platform kan gebruik maken van, of diensten verlenen aan een applicatie of eHealth module.
- "Portaal" : Een toegangspoort of -(verzamel)punt tot informatie over een bepaald onderwerp die een gebruiker een uniforme toegang biedt naar achterliggende systeem componenten. Het kan ook worden beschouwd als een bibliotheek met gepersonaliseerde en gecategoriseerde inhoud voor een groep personen die toegang krijgen tot functionaliteiten over of het gebruik van activiteiten. Een portaal handelt HTTP berichten af.
- "Client Applicatie": Is een zelfstandig (software) programma module die rechtstreeks met de gebruikers communiceert en gebruik maakt van de Koppeltaal voorziening om met andere eHealth modules gegevens uit te kunnen wisselen, in het zorgproces.
- "eHealth Module": Software dat een eHealth toepassing is, dat aangeboden wordt aan cliënten zonder tussenkomst van behandelaren, met als doel de gezondheid van de cliënten te ondersteunen en te verbeteren.
- "Bevoegdheden": Het component dat bevoegdheden aan concrete component instanties (diensten) toekent en het verklaren daarvan, tot aan het intrekken (verwijderen) van bevoegdheden.
- "Toegangscontrole": Systeem component dat besluit of een concreet component instantie toegang krijgt tot de FHIR Resource Provider. Gebaseerd op het OAuth 2.0 autorisatie raamwerk (RFC6749).
- "Identiteit & Authenticatie": Systeem component dat de identiteit van concrete component instanties (diensten) tot stand brengt (en onderhoud en actualiseert) met de daarbij behorende authenticatie middelen.
- "FHIR Resource Provider": Systeem component die de benodigde gegevens afschermt en reageert op verzoeken om gegevens beschikbaar te stellen en te bewaren met gebruikmaking van toegangstokens.
- "Logging": Systeem component die alle uitvoerende handelingen vastlegt, zoals bedoeld in de AVG (Algemene Verordening Gegevensbescherming) en NEN7513:2018. Daarnaast wordt er functionaliteit aangeboden om de geregistreerde handelingen te kunnen opvragen.
De Koppeltaal 2.0 Interfaces:
- "FHIR REST API" : Worden gegevens op een consistente manier uitgewisseld op basis van de HL7 FHIR R4 - specificaties.
- "OAuth2" : Een Open Autorisatie protocol dat gebruikt wordt om toegang te krijgen tot beveiligde resources via (FHIR) REST API's.
- "AppRegistratie": Worden gegevens van een concrete component instantie op een consistente en veilige manier vastgelegd.
- "LogEntry" : Het vastleggen van een FHIR REST API interactie (tussen de systeem componenten) in een logregel.
- "Subscription Channel": Een abonnementskanaal voor het versturen van notificaties door de FHIR Resource Provider bij bepaalde gebeurtenissen. De systeem componenten kunnen zelf de gebeurtenis (criteria) aangeven waarin zij geïnteresseerd zijn.
Het beheer van de Koppeltaal voorzieningen gebeurt via de dienst:
- "Beheerdersportaal": Is een beveiligde online omgeving waarin beheerders (technische) configuraties voor Koppeltaal kunnen doorvoeren en beheren, zoals identiteiten, authenticatie middelen en bevoegdheden.
Opmerking: De Koppeltaal 2.0 diensten, zoals hierboven beschreven, kunnen afwijken of gecombineerd worden. De mogelijkheden (rol beschrijving) van een dienst wordt in een Autorisatie matrix vastgelegd en zijn meestal gebaseerd op het "need-to-know" principe.
Voorbeelden
Toepassingsgebied
Koppeltaal domein
Onderbouwen
FHIR RESTful API's en SMART on FHIR
We hebben te maken met verschillende (onafhankelijke) ICT leveranciers waarmee we samen een Koppeltaal stelsel willen ontwikkelen. De functionaliteit van deze systeem componenten worden beschikbaar gesteld middels FHIR RESTful API’s (zie basis interacties) en SMART on FHIR, een op standaarden gebaseerd applicatie platform om (medische) informatie uit te wisselen op een eenduidige, veilige en betrouwbare manier.
De ontwikkelaars van bijvoorbeeld de verschillende zorgtoepassingen integreren functionaliteit van een groot aantal systeem componenten met behulp van deze FHIR REST API’s en SMART on FHIR specificaties. Om de integratie inspanning zo laag mogelijk te houden, dient de leercurve van de FHIR RESTful API’s zo kort mogelijk te zijn. Dit wordt o.a. bereikt door een goed FHIR RESTful API-ontwerp, herkenbaarheid over de FHIR RESTful API’s heen, toepassen van de-facto standaarden en goede documentatie.
Dit vereist dat de FHIR RESTful API ’s op een uniforme manier zijn opgezet en bruikbaar zijn, en goed gedocumenteerd zijn. Met OpenAPI Specification (OAS) kunnen we de eigenschappen beschrijven van de data die een API als input accepteert en als output teruggeeft. OAS 3.0 specificeert alleen welke attributen de API verwerkt en hun datatypen, niet welke implementatie er achter de API schuilgaat. OAS 3.0 is dus een beschrijvende taal en heeft geen binding met specifieke programmeertalen. Een specificatie conform OAS 3.0 is een tekstbestand met een gestandaardiseerde YAML of JSON structuur.
De volgende basis eisen stellen we aan de FHIR RESTful API’s
- Maak gebruik van web, SMART on FHIR en beveiliging standaarden (zie toegangsbeheersing)
- Gebruiksvriendelijk voor ontwikkelaars (zie de basis interacties)
- Eenvoudig en consistent in gebruik (zie de basis interacties)
- Kanaal onafhankelijk en flexibel (Koppeltaal is gebaseerd op de FHIR RESTful API's en SMART on FHIR)
SMART on FHIR definieert een workflow die een toepassing kan gebruiken om veilig toegang tot gegevens aan te vragen en die gegevens vervolgens te ontvangen en te gebruiken.
Bovenstaande beschreven strategie gaat uit van een FHIR RESTful API-first aanpak. Dit betekent dat de FHIR RESTful API ontworpen en gebouwd wordt, onafhankelijk van de applicaties waarin deze gebruikt wordt.
De FHIR RESTful APIs is een product op zichzelf. Een API moet elk kanaal kunnen bedienen en niet één specifiek kanaal. Dit wil niet zeggen dat de FHIR RESTful API los van de werkelijkheid wordt ontwikkeld. Er wordt nauw afgestemd met verschillende partijen, en hun input wordt gebruikt bij het ontwikkelen, beheren en onderhouden van de FHIR RESTful APIs.
Een FHIR RESTful API is een combinatie van het koppelvlak, documentatie en andere ondersteunende hulpmiddelen, zoals de registratie, autorisatie en logging van de systeem componenten.
Eisen
CID - Eisen (en aanbevelingen) voor Componenten, Interfaces, en Diensten
Links naar gerelateerde onderwerpen
FHIR RESTful API's (volgens HL7 FHIR R4 specificatie)
SMART on FHIR: https://docs.smarthealthit.org/
OAS 3.0: https://spec.openapis.org/oas/v3.1.0
OAuth2: https://oauth.net/2/; Rfc 6749: https://www.rfc-editor.org/rfc/rfc6749
TOP-KT-009
Oude tekst
In onderstaande tabel zijn de verplichte velden van de FHIR resources R4 opgenomen, aangevuld met de functioneel verplichte velden binnen Koppeltaal 2.0 en optionele velden binnen Koppeltaal 2.0.
Deze lijst is samengesteld op basis van Architectuur besluit AB.XII (AB.XII - Attributen en dialecten) en betreft de resources voorzien van oranje header. Binnen Koppeltaal is afgesproken alleen van deze velden gebruik te maken.
De CapabilityStatement, Bundle en OperationOutcome zijn niet opgenomen in de tabel, omdat deze resource niet in de FHIR Store worden opgenomen.
Koppeltaal 2.0 profielen
Van bovenstaande FHIR resources zijn Koppeltaal 2.0 profielen aangemaakt en gepubliceerd in https://simplifier.net/Koppeltaalv2.0.
Deze worden als basis gebruikt voor Koppeltaal 2.0.
FHIR R4 Resource | Element | Type | Verplicht in KT 2.0 (profile) | Functioneel nodig in KT 2.0 | Omschrijving en reden |
Meta | Elke FHIR R4 Resource bevat een "meta" element van het type Meta wat een set metadata is die technische content meegeeft aan de resource. Binnen de context van Koppeltaal zullen we gebruik maken van enkele elementen uit de metadata set. | ||||
---|---|---|---|---|---|
versionId | id | X | De waarde van versionId verandert elke keer als de inhoud van de resource verandert. Er kan naar worden verwezen in een resource referentie (voorbeeld: ResourceType/id/_history/versionId). Dit veld wordt door FHIR Resource Provider bijgehouden. | ||
lastUpdated | instant | X | Dit element verandert de waarde als de content van de resource verandert. | ||
source | uri | X | Een samengestelde string die het resource systeem en interactie (bv create, update, etc) uniek identificeert. In de context van Koppeltaal wordt voor het resource systeem het "applicatie of client id" gebruikt. Voorbeeld: "source": "urn:uuid:client_id#interaction_id" | ||
profile | canonical(StructureDefinition) | Een bewering of toekenning dat de inhoud van de resource overeenkomt met een resource profile (vastgelegd in een StructureDefinition). Zie FHIR Profiles voor verdere uitleg. Een profile wordt gewijzigd als de waardensets wijzigen of het systeem de conformiteit opnieuw controleert. De profile kan worden gebruikt om aan te geven aan welke versie(s) de FHIR resource moet voldoen. | |||
Patient | De persoon die in behandeling is bij de zorgaanbieder. | ||||
identifier | Identifier | X..* | Elke patiënt moet uniek te identificeren zijn a.d.h.v. een identifier, zodat we altijd de gegevens kunnen opvragen. Er mogen meerdere type identifiers gebruikt worden | ||
active | boolean | X | Of de patiënt actief is, binnen de Koppeltaal context. Initieel op 'true' zetten. | ||
name | HumanName | X..* | Eén of meerdere namen die aan de patiënt wordt geassocieerd. | ||
name.nameInformation.use | code | X | Fixed value: Official | ||
name.nameInformation .family | string | X | Achternaam | ||
name.nameInformation.given | string | X..* | Voorna(a)m(en) | ||
telecom | ContactPoint | De contactdetails (telefoonnummers, emailadressen)van de patiënt. | |||
gender | code | X | Het geslacht van de patiënt. Zie https://www.hl7.org/fhir/valueset-administrative-gender.html | ||
birthDate | date | X | Geboorte datum van de patiënt. | ||
adress | nl core AddressInformation | Adres van de patient (straat, huisnummer, woonplaats, postcode, land) | |||
managingOrganization | Reference | ||||
Practitioner | De zorgverlener die in overleg met de patiënt een eHealth activiteit toewijst. | ||||
identifier | Identifier | X..* | Elke behandelaar moet uniek te identificeren zijn a.d.h.v. identifiers, zodat we altijd de gegevens kunnen opvragen. | ||
active | boolean | X | Of de behandelaar actief is, binnen de Koppeltaal context. Initieel op 'true' zetten. | ||
name | HumanName | X..* | De naam die aan de behandelaar wordt geassocieerd. | ||
telecom | ContactPoint | X | Contact details van de behandelaar. (email adres is verplicht, telefoonnummer optioneel) | ||
gender | code | Het geslacht van de behandelaar. Zie https://www.hl7.org/fhir/valueset-administrative-gender.html. | |||
birthDate | date | Geboortedatum van de behandelaar | |||
RelatedPerson | (Voorlopig out of scope) | Naaste van de patiënt die betrokken is in het behandelproces. (voorlopig out of scope) | |||
identifier | Identifier | X..* | Elke naaste moet uniek te identificeren zijn a.d.h.v. een identifier, zodat we altijd de gegevens kunnen opvragen. | ||
active | boolean | X | Of de naaste persoon actief betrokken is, binnen de Koppeltaal context. Initieel op 'true' zetten. | ||
patient | Reference(Patient) | Uit FHIR R4. De patiënt waarmee deze persoon een relatie mee heeft. | |||
telecom | ContactPoint | Contactdetails van deze persoon. | |||
birthDate | date | X | Geboortedatum van deze persoon. | ||
address | Address | Adres waar deze persoon bereikt kan worden (straat, huisnummer, woonplaats, postcode, land). | |||
name | HumanName | X..* | De naam die aan deze persoon wordt geassocieerd. | ||
name.nameInformation.use | code | X | Fixed value: Official | ||
name.nameInformation.family | string | X | Achternaam | ||
name.nameInformation.given | string | X..* | Voorna(a)m(en) | ||
gender | code | X | Het geslacht van deze persoon. Zie https://www.hl7.org/fhir/valueset-administrative-gender.html | ||
Task | De aan een patiënt toegewezen eHealth activiteit. | ||||
identifier | Identifier | X..* | Identificatie van een activiteit | ||
description | string | Leesbare uitleg van taakomschrijving | |||
code | CodeableConcept | Taaktype | |||
instantiatesCanonical | canonical(ActivityDefinition) | X | Een referentie naar een beschrijving van een eHealth activiteit moet bij het opvoeren van een taak In de context van Koppeltaal altijd gevuld worden. | ||
status | code | X | In de context van Koppeltaal moet altijd de status van een eHealth activiteit bekend zijn. Initieel wordt de taak op 'ready' gezet om aan te geven dat de taak toegewezen en geaccepteerd is. Zie https://www.hl7.org/fhir/valueset-task-status.html. | ||
intent | code | X | Uit FHIR R4. De intentie vertegenwoordigt een 'order' tot een eHealth activiteit en autorisatie voor uitvoering van de taak door een participant. Zie http://hl7.org/fhir/R4/codesystem-request-intent.html. | ||
requester | Reference(Practitioner) | In Koppeltaal wordt dit veld uitgevoerd met een referentie naar de aanvrager van de eHealth activiteit. | |||
owner | Reference(Patient) | X | Een verplichte referentie naar de patiënt die verantwoordelijk is voor de uitvoering van de toegewezen eHealth activiteit. | ||
restriction.recipient | Reference(Practitioner) | Wordt in Koppeltaal gebruikt voor het koppelen van betrokkenen aan de eHealth activiteit. | |||
restriction.period | Period | Taak periode (beperking) | |||
for | Reference(Patient) | Bevat een referentie naar voor wie we het doen of wie er baat bij heeft. Bij Koppeltaal is dit de Patient. | |||
authoredOn | dateTime | Creatie datum van de eHealth activiteit. | |||
lastModified | dateTime | Datum waarop laatste wijziging is doorgevoerd op de eHealth activiteit. | |||
ActivityDefinition | Beschrijving van een eHealth activiteit. | ||||
ext: publisherIdentifier | id | X | Verplichte identificatie van de uitgever van de eHealth activiteit. | ||
ext: endpoint | Reference(Endpoint) | X..* | Verplichte referentie naar de dienstverlenende applicatie (endpoint) die de eHealth activiteit levert. Kunnen er meerdere van zijn | ||
version | string | Bedrijfsversie van deze eHealth activiteit. | |||
url | uri | X | Een herkenbare identifier voor deze eHealth activiteit dat als een URI gepresenteerd wordt. | ||
identifier | Identifier | Een extra (globale) identificatie element voor het kunnen identificeren van een eHealth activiteit. | |||
name | string | De naam van de eHealth activiteit. | |||
title | string | X | Dit titel van de eHealth activiteit wordt (verplicht) getoond aan gebruikers en moet gevuld worden. Nodig voor het kunnen toewijzen van een eHealth activiteit. | ||
subtitle | string | Ondergeschikte titel van de ehealth activiteit.typexxxxx | |||
status | code | X | Uit FHIR R4. Zodra de eHealth activiteit gepubliceerd wordt, wordt deze op 'active' gezet. Indien de activiteit NIET meer gebruikt wordt, wordt deze op 'retired' gezet. Zie: http://hl7.org/fhir/publication-status | ||
subject | SubjectReference | Onderwerp | |||
description | markdown | Een omschrijving van de eHealth activiteit. | |||
Endpoint | Een eHealth (eind)punt is een technische representatie van een adres of Uniform Resource Locator (URL) van een applicatie instantie die eHealth of FHIR REST diensten aanbiedt. | ||||
identifier | Identifier | Unieke endpoint identifier. | |||
status | code | X | Uit FHIR R4. De status van een endpoint. Standaard wordt deze op 'active' gezet. Andere mogelijke modes zijn beschreven in https://www.hl7.org/fhir/valueset-endpoint-status.html | ||
name | string | Naam waarmee het endpoint geïdentificeerd kan worden. | |||
address | url | X | Uit FHIR R4. Het technische basis adres waarmee de verbinding wordt opgezet. | ||
connectionType | Coding | X | Uit FHIR R4. Het protocol wat gebruikt wordt bij dit endpoint. Standaard voor Koppeltaal op 'hl7-fhir-rest' zetten. Zie ook: https://www.hl7.org/fhir/valueset-endpoint-connection-type.html. | ||
payloadType | CodeableConcept | X | Uit FHIR R4. Type inhoud wat gebruikt wordt voor dit endpoint. Zie ook: https://www.hl7.org/fhir/valueset-endpoint-payload-type.html. | ||
Device | Een (gefabriceerde) applicatie instantie (in Koppeltaal terminologie) dat gebruikt wordt ter ondersteuning of het verlenen van gezondheidszorg. | ||||
identifier | Identifier | X | Instantie identifier van het product. Is de client id | ||
status | code | X | De status van het product | ||
type | CodeableConcept | Soort/type product. Zie: http://hl7.org/fhir/ValueSet/device-type | |||
url | uri | Netwerk adres om applicatie te bereiken | |||
specialization | BackboneElement | Mogelijkheden van product | |||
deviceName.name | string | X | Naam van het product | ||
deviceName.type | code | X | Standaard waarde: user-friendly-name | ||
Subscription | Een abonnement wordt gebruikt om geïnformeerd te worden over wijzigingen op (resource) gegevens door andere systemen. Nadat een abonnement is geregistreerd en wijzigingen op (resource) gegevens voorkomen die overeen komen met een vastgelegde criteria, verzendt deze een bericht (notificatie) op een voor gedefinieerde "kanaal", zodat een ander systeem hierop actie kan ondernemen. | ||||
status | code | X | Uit FHIR R4. Status van het abonnement. Zie: http://hl7.org/fhir/subscription-status. | ||
criteria | string | X | Uit FHIR R4. De vastgelegde criteria waarop er een bericht (notificatie) wordt verstuurd. | ||
reason | string | X | Uit FHIR R4. Omschrijving waarom dit abonnement is gecreëerd. | ||
channel | BackboneElement | X | Uit FHIR R4. Voor gedefinieerd kanaal waar het bericht wordt verstuurd. | ||
channel.type | code | X | Uit FHIR R4. Ondersteunen alleen: "rest-hook" kanaal. | ||
channel.endpoint | url | X? | Omdat we rest-hook als kanaaltype verplichten, moet ook het endpoint vastgelegd worden. Endpoint zou niet raadbaar moeten zijn en uniek per subscription. | ||
channel.header | string | X? | Om DOS aanvallen te voorkomen, wordt een "Authorization" header verplicht (voor afgesproken token meesturen). Men kan ook de vastgelegde criteria in de header vastleggen. | ||
channel.payload | code | XXX (NIET) | Dit veld MOET NIET gebruikt worden. De notificaties worden zonder payload verstuurd. Extra informatie over een notificatie kan via de channel.header meegegeven worden. | ||
CareTeam | Beschrijft het zorgteam met de participanten. | ||||
identifier | Identifier | X | Elke zorgteam moet uniek te identificeren zijn a.d.h.v. een identifier, zodat we altijd de gegevens kunnen opvragen. | ||
status | code | X | In de context van Koppeltaal moet altijd de status van het zorgteam bekend zijn. | ||
subject | Reference(Patient) | X | Uit FHIR R4. Voor wie het team aan de slag is. In de context van Koppeltaal is dit een referentie naar Patient. | ||
period | Period | Tijdsperiode van het zorgteam. | |||
participant | BackboneElement | Lijst van betrokken participanten bij het zorgproces | |||
participant.role | CodeableConcept | x | Uit FHIR R4. Verplichte rol van de participant, bij toevoeging van participant. | ||
participant.member | Reference (Practitioner|RelatedPerson) | x | Uit FHIR R4. Verplichte type participant, bij toevoeging van participant. | ||
AuditEvent | Een logrecord van een interactie tussen systemen. Koppeltaal Logging moet het mogelijk maken "achteraf onweerlegbaar vast te stellen welke activiteiten waar en wanneer hebben plaatsgevonden. | ||||
type | Coding | X | Soort gebeurtenis. Zie "system": http://terminology.hl7.org/CodeSystem/audit-event-type. Standaard "code": "rest" Bij het lanceren van applicaties wordt het: "system":"http://dicom.nema.org/resources/ontology/DCM", "code":"110100", "display":"Application Activity" | ||
subtype | Coding | X? | Gedetailleerde beschrijving van FHIR gebeurtenis. Zie system: http://hl7.org/fhir/restful-interaction Bij het lanceren van applicaties gebruiken we: "system":"http://dicom.nema.org/resources/ontology/DCM", "code":"110120", "display":"Application Start" | ||
action | code | Welke CRUDE acties is uitgevoerd. Zie: http://hl7.org/fhir/audit-event-action | |||
recorded | instant | X | Tijdstip van logmoment. | ||
agent.who | Reference(Device) | X? | De device actor (audit participant) van de zendende of ontvangende partij. | ||
agent.type | CodeableConcept | X? | Zie: system: http://dicom.nema.org/resources/ontology/DCM
| ||
agent.role | CodeableConcept | Kunnen we onze applicatie rollen hier voor gebruiken, als deze zijn vastgelegd? | |||
agent.requestor | boolean | X | Is de agent de initiator van de gebeurtenissen, dan 'true' anders 'false'. | ||
entity.type | CodeableConcept | X? | Type resource. Zie: "http://hl7.org/fhir/resource-types". Zie het KT 2.0 FHIR Resource Model. | ||
entity.what | Reference(Any) | X? | Over welke (FHIR) resource gaat het Reference(Any). B.v: entity.what=Patient/123 | ||
entity.name | string | resource.identifier | |||
source.site | string | Naam van de omgeving (domein!) | |||
source.observer | Reference(Device) | X | Wie heeft het gelogd. Misschien een aparte Log Device. | ||
source.type | Coding | Wat voor systeem is dit. Zie: http://terminology.hl7.org/CodeSystem/security-source-type |
? = in Simplifier 0..1
Beschrijving
In de doelstelling van stichting Koppeltaal is middels het woord ‘interne’ een beperking voor de gegevensuitwisseling opgenomen. Met deze beperking wordt bedoeld dat gegevensuitwisseling altijd plaatsvindt onder de verantwoordelijkheid van één zorgaanbieder.
Gegevens worden uitgewisseld tussen verschillende dienstverlenende applicaties. In Koppeltaal staat het begrip applicaties voor alle vormen van ICT-systemen en eHealth platformen die voor een zorgaanbieder relevant zijn om gegevens tussen uit te wisselen in de context van eHealth activiteiten. De dienstverlenende applicaties worden geleverd door verschillende leveranciers. Deze leveranciers kunnen hun dienstverlenende applicaties ontsluiten via Koppeltaal onder de verantwoordelijkheid van de zorgaanbieder. Alle FHIR resources van één zorgaanbieder kunnen via de Koppeltaal (FHIR Resource) Provider ontsloten worden, voor die dienstverlenende applicaties die aangesloten zijn op Koppeltaal. Daarbij maken wij gebruik van gemeenschappelijke begrippen en standaarden die gebaseerd zijn op HL7/FHIR (https://www.hl7.org/fhir/http.html).
Het volgende diagram geeft een overzicht van de FHIR Resources (Koppeltaal basis set) en de onderlinge relaties tussen de resources voor Koppeltaal 2.0.
Alle FHIR Resources en de daarbij behorende elementen in Koppeltaal 2.0 zijn gebaseerd op FHIR Release #4 (4.0.1 2019-10-30) - http://hl7.org/fhir/R4/.
Bij daadwerkelijke uitwisseling kunnen de FHIR Resources worden weergegeven in XML en/of JSON formaten.
Nieuwe plaat:
- Kleuren verwijderd omdat niemand wist wat ze voorstelden
- Related person Out of Scope geplaatst.
Volgend lijstje geeft de verplichte velden weer van de FHIR resources R4, die binnen Koppeltaal 2.0 worden gebruikt.
Dit lijstje is door VZVZ samengesteld. De CapabilityStatement, Bundle en OperationOutcome zijn niet opgenomen in dit lijstje, omdat deze resource niet in de FHIR Store worden opgenomen.
Koppeltaal 2.0 profielen
Van bovenstaande FHIR resources zijn Koppeltaal 2.0 profielen aangemaakt en gepubliceerd in https://simplifier.net/Koppeltaalv2.0.
Deze worden als basis gebruikt voor Koppeltaal 2.0.
FHIR R4 Resource | Element | Type | Verplicht in KT 2.0 (profile) | Functioneel nodig in KT 2.0 | Omschrijving en reden |
Meta | Elke FHIR R4 Resource bevat een "meta" element van het type Meta wat een set metadata is die technische content meegeeft aan de resource. Binnen de context van Koppeltaal zullen we gebruik maken van enkele elementen uit de metadata set. | ||||
versionId | id | X | De waarde van versionId verandert elke keer als de inhoud van de resource verandert. Er kan naar worden verwezen in een resource referentie (voorbeeld: ResourceType/id/_history/versionId). Dit veld wordt door FHIR Resource Provider bijgehouden. | ||
lastUpdated | instant | X | Dit element verandert de waarde als de content van de resource verandert. | ||
source | uri | X | Een samengestelde string die het resource systeem en interactie (bv create, update, etc) uniek identificeert. In de context van Koppeltaal wordt voor het resource systeem het "applicatie of client id" gebruikt. Voorbeeld: "source": "urn:uuid:client_id#interaction_id" | ||
profile | canonical(StructureDefinition) | Een bewering of toekenning dat de inhoud van de resource overeenkomt met een resource profile (vastgelegd in een StructureDefinition). Zie FHIR Profiles voor verdere uitleg. Een profile wordt gewijzigd als de waardensets wijzigen of het systeem de conformiteit opnieuw controleert. De profile kan worden gebruikt om aan te geven aan welke versie(s) de FHIR resource moet voldoen. | |||
Patient | De persoon die in behandeling is bij de zorgaanbieder. | ||||
identifier | Identifier | X..* | Elke patiënt moet uniek te identificeren zijn a.d.h.v. een identifier, zodat we altijd de gegevens kunnen opvragen. Er mogen meerdere type identifiers gebruikt worden | ||
active | boolean | X | Of de patiënt actief is, binnen de Koppeltaal context. Initieel op 'true' zetten. | ||
name | HumanName | X..* | Eén of meerdere namen die aan de patiënt wordt geassocieerd. | ||
name.nameInformation.use | code | X | Fixed value: Official | ||
name.nameInformation.family | string | X | Achternaam | ||
name.nameInformation.given | string | X..* | Voorna(a)m(en) | ||
telecom | ContactPoint | De contactdetails (telefoonnummers, emailadressen)van de patiënt. | |||
gender | code | X | Het geslacht van de patiënt. Zie https://www.hl7.org/fhir/valueset-administrative-gender.html | ||
birthDate | date | X | Geboorte datum van de patiënt. | ||
adress | nl core AddressInformation | Adres van de patient (straat, huisnummer, woonplaats, postcode, land) | |||
managingOrganization | Reference | ||||
Practitioner | De zorgverlener die in overleg met de patiënt een eHealth activiteit toewijst. | ||||
identifier | Identifier | X..* | Elke behandelaar moet uniek te identificeren zijn a.d.h.v. identifiers, zodat we altijd de gegevens kunnen opvragen. | ||
active | boolean | X | Of de behandelaar actief is, binnen de Koppeltaal context. Initieel op 'true' zetten. | ||
name | HumanName | X..* | De naam die aan de behandelaar wordt geassocieerd. | ||
telecom | ContactPoint | X | Contact details van de behandelaar. (email adres is verplicht, telefoonnummer optioneel) | ||
gender | code | Het geslacht van de behandelaar. Zie https://www.hl7.org/fhir/valueset-administrative-gender.html. | |||
birthDate | date | Geboortedatum van de behandelaar | |||
RelatedPerson | Voorlopig out of scope) | Naaste van de patiënt die betrokken is in het behandelproces. (voorlopig out of scope) | |||
identifier | Identifier | X..* | Elke naaste moet uniek te identificeren zijn a.d.h.v. een identifier, zodat we altijd de gegevens kunnen opvragen. | ||
active | boolean | X | Of de naaste persoon actief betrokken is, binnen de Koppeltaal context. Initieel op 'true' zetten. | ||
patient | Reference(Patient) | Uit FHIR R4. De patiënt waarmee deze persoon een relatie mee heeft. | |||
telecom | ContactPoint | Contactdetails van deze persoon. | |||
birthDate | date | X | Geboortedatum van deze persoon. | ||
address | Address | Adres waar deze persoon bereikt kan worden (straat, huisnummer, woonplaats, postcode, land). | |||
name | HumanName | X..* | De naam die aan deze persoon wordt geassocieerd. | ||
name.nameInformation.use | code | X | Fixed value: Official | ||
name.nameInformation.family | string | X | Achternaam | ||
name.nameInformation.given | string | X..* | Voorna(a)m(en) | ||
gender | code | X | Het geslacht van deze persoon. Zie https://www.hl7.org/fhir/valueset-administrative-gender.html | ||
Task | De aan een patiënt toegewezen eHealth activiteit. | ||||
identifier | Identifier | X..* | Identificatie van een activiteit | ||
description | string | Leesbare uitleg van taakomschrijving | |||
code | CodeableConcept | Taaktype | |||
instantiatesCanonical | canonical(ActivityDefinition) | X | Een referentie naar een beschrijving van een eHealth activiteit moet bij het opvoeren van een taak In de context van Koppeltaal altijd gevuld worden. | ||
status | code | X | In de context van Koppeltaal moet altijd de status van een eHealth activiteit bekend zijn. Initieel wordt de taak op 'ready' gezet om aan te geven dat de taak toegewezen en geaccepteerd is. Zie https://www.hl7.org/fhir/valueset-task-status.html. | ||
intent | code | X | Uit FHIR R4. De intentie vertegenwoordigt een 'order' tot een eHealth activiteit en autorisatie voor uitvoering van de taak door een participant. Zie http://hl7.org/fhir/R4/codesystem-request-intent.html. | ||
requester | Reference(Practitioner) | In Koppeltaal wordt dit veld uitgevoerd met een referentie naar de aanvrager van de eHealth activiteit. | |||
owner | Reference(Patient) | X | Een verplichte referentie naar de patiënt die verantwoordelijk is voor de uitvoering van de toegewezen eHealth activiteit. | ||
restriction.recipient | Reference(Practitioner) | Wordt in Koppeltaal gebruikt voor het koppelen van betrokkenen aan de eHealth activiteit. | |||
restriction.period | Period | Taak periode (beperking) | |||
for | Reference(Patient) | Bevat een referentie naar voor wie we het doen of wie er baat bij heeft. Bij Koppeltaal is dit de Patient. | |||
authoredOn | dateTime | Creatie datum van de eHealth activiteit. | |||
lastModified | dateTime | Datum waarop laatste wijziging is doorgevoerd op de eHealth activiteit. | |||
ActivityDefinition | Beschrijving van een eHealth activiteit. | ||||
ext: publisherIdentifier | id | X | Verplichte identificatie van de uitgever van de eHealth activiteit. | ||
ext: endpoint | Reference(Endpoint) | X..* | Verplichte referentie naar de dienstverlenende applicatie (endpoint) die de eHealth activiteit levert. Kunnen er meerdere van zijn | ||
version | string | Bedrijfsversie van deze eHealth activiteit. | |||
url | uri | X | Een herkenbare identifier voor deze eHealth activiteit dat als een URI gepresenteerd wordt. | ||
identifier | Identifier | Een extra (globale) identificatie element voor het kunnen identificeren van een eHealth activiteit. | |||
name | string | De naam van de eHealth activiteit. | |||
title | string | X | Dit titel van de eHealth activiteit wordt (verplicht) getoond aan gebruikers en moet gevuld worden. Nodig voor het kunnen toewijzen van een eHealth activiteit. | ||
subtitle | string | Ondergeschikte titel van de ehealth activiteit.typexxxxx | |||
status | code | X | Uit FHIR R4. Zodra de eHealth activiteit gepubliceerd wordt, wordt deze op 'active' gezet. Indien de activiteit NIET meer gebruikt wordt, wordt deze op 'retired' gezet. Zie: http://hl7.org/fhir/publication-status | ||
subject | SubjectReference | Onderwerp | |||
description | markdown | Een omschrijving van de eHealth activiteit. | |||
Endpoint | Een eHealth (eind)punt is een technische representatie van een adres of Uniform Resource Locator (URL) van een applicatie instantie die eHealth of FHIR REST diensten aanbiedt. | ||||
identifier | Identifier | Unieke endpoint identifier. | |||
status | code | X | Uit FHIR R4. De status van een endpoint. Standaard wordt deze op 'active' gezet. Andere mogelijke modes zijn beschreven in https://www.hl7.org/fhir/valueset-endpoint-status.html | ||
name | string | Naam waarmee het endpoint geïdentificeerd kan worden. | |||
address | url | X | Uit FHIR R4. Het technische basis adres waarmee de verbinding wordt opgezet. | ||
connectionType | Coding | X | Uit FHIR R4. Het protocol wat gebruikt wordt bij dit endpoint. Standaard voor Koppeltaal op 'hl7-fhir-rest' zetten. Zie ook: https://www.hl7.org/fhir/valueset-endpoint-connection-type.html. | ||
payloadType | CodeableConcept | X | Uit FHIR R4. Type inhoud wat gebruikt wordt voor dit endpoint. Zie ook: https://www.hl7.org/fhir/valueset-endpoint-payload-type.html. | ||
Device | Een (gefabriceerde) applicatie instantie (in Koppeltaal terminologie) dat gebruikt wordt ter ondersteuning of het verlenen van gezondheidszorg. | ||||
identifier | Identifier | X | Instantie identifier van het product. Is de client id | ||
status | code | X | De status van het product | ||
type | CodeableConcept | Soort/type product. Zie: http://hl7.org/fhir/ValueSet/device-type | |||
url | uri | Netwerk adres om applicatie te bereiken | |||
specialization | BackboneElement | Mogelijkheden van product | |||
deviceName.name | string | X | Naam van het product | ||
deviceName.type | code | X | Standaard waarde: user-friendly-name | ||
Subscription | Een abonnement wordt gebruikt om geïnformeerd te worden over wijzigingen op (resource) gegevens door andere systemen. Nadat een abonnement is geregistreerd en wijzigingen op (resource) gegevens voorkomen die overeen komen met een vastgelegde criteria, verzendt deze een bericht (notificatie) op een voor gedefinieerde "kanaal", zodat een ander systeem hierop actie kan ondernemen. | ||||
status | code | X | Uit FHIR R4. Status van het abonnement. Zie: http://hl7.org/fhir/subscription-status. | ||
criteria | string | X | Uit FHIR R4. De vastgelegde criteria waarop er een bericht (notificatie) wordt verstuurd. | ||
reason | string | X | Uit FHIR R4. Omschrijving waarom dit abonnement is gecreëerd. | ||
channel | BackboneElement | X | Uit FHIR R4. Voor gedefinieerd kanaal waar het bericht wordt verstuurd. | ||
channel.type | code | X | Uit FHIR R4. Ondersteunen alleen: "rest-hook" kanaal. | ||
channel.endpoint | url | X? | Omdat we rest-hook als kanaaltype verplichten, moet ook het endpoint vastgelegd worden. Endpoint zou niet raadbaar moeten zijn en uniek per subscription. | ||
channel.header | string | X? | Om DOS aanvallen te voorkomen, wordt een "Authorization" header verplicht (voor afgesproken token meesturen). Men kan ook de vastgelegde criteria in de header vastleggen. | ||
channel.payload | code | XXX (NIET) | Dit veld MOET NIET gebruikt worden. De notificaties worden zonder payload verstuurd. Extra informatie over een notificatie kan via de channel.header meegegeven worden. | ||
CareTeam | Beschrijft het zorgteam met de participanten. | ||||
identifier | Identifier | X | Elke zorgteam moet uniek te identificeren zijn a.d.h.v. een identifier, zodat we altijd de gegevens kunnen opvragen. | ||
status | code | X | In de context van Koppeltaal moet altijd de status van het zorgteam bekend zijn. | ||
subject | Reference(Patient) | X | Uit FHIR R4. Voor wie het team aan de slag is. In de context van Koppeltaal is dit een referentie naar Patient. | ||
period | Period | Tijdsperiode van het zorgteam. | |||
participant | BackboneElement | Lijst van betrokken participanten bij het zorgproces | |||
participant.role | CodeableConcept | x | Uit FHIR R4. Verplichte rol van de participant, bij toevoeging van participant. | ||
participant.member | Reference(Practitioner|RelatedPerson) | x | Uit FHIR R4. Verplichte type participant, bij toevoeging van participant. | ||
AuditEvent | Een logrecord van een interactie tussen systemen. Koppeltaal Logging moet het mogelijk maken "achteraf onweerlegbaar vast te stellen welke activiteiten waar en wanneer hebben plaatsgevonden. | ||||
type | Coding | X | Soort gebeurtenis. Zie "system": http://terminology.hl7.org/CodeSystem/audit-event-type. Standaard "code": "rest" Bij het lanceren van applicaties wordt het: "system":"http://dicom.nema.org/resources/ontology/DCM", "code":"110100", "display":"Application Activity" | ||
subtype | Coding | X? | Gedetailleerde beschrijving van FHIR gebeurtenis. Zie system: http://hl7.org/fhir/restful-interaction Bij het lanceren van applicaties gebruiken we: "system":"http://dicom.nema.org/resources/ontology/DCM", "code":"110120", "display":"Application Start" | ||
action | code | Welke CRUDE acties is uitgevoerd. Zie: http://hl7.org/fhir/audit-event-action | |||
recorded | instant | X | Tijdstip van logmoment. | ||
agent.who | Reference(Device) | X? | De device actor (audit participant) van de zendende of ontvangende partij. | ||
agent.type | CodeableConcept | X? | Zie: system: http://dicom.nema.org/resources/ontology/DCM
| ||
agent.role | CodeableConcept | Kunnen we onze applicatie rollen hier voor gebruiken, als deze zijn vastgelegd? | |||
agent.requestor | boolean | X | Is de agent de initiator van de gebeurtenissen, dan 'true' anders 'false'. | ||
entity.type | CodeableConcept | X? | Type resource. Zie: "http://hl7.org/fhir/resource-types". Zie het KT 2.0 FHIR Resource Model. | ||
entity.what | Reference(Any) | X? | Over welke (FHIR) resource gaat het Reference(Any). B.v: entity.what=Patient/123 | ||
entity.name | string | resource.identifier | |||
source.site | string | Naam van de omgeving (domein!) | |||
source.observer | Reference(Device) | X | Wie heeft het gelogd. Misschien een aparte Log Device. | ||
source.type | Coding | Wat voor systeem is dit. Zie: http://terminology.hl7.org/CodeSystem/security-source-type |
? = in Simplifier 0..1
Rationale
FHIR Resources zijn in de basis generiek en worden met behulp van profielen uitgebreid en specifieker gemaakt voor specifieke toepassingen, zoals Koppeltaal. In Koppeltaal worden FHIR resources toegepast om gegevens uit te wisselen. In Koppeltaal zijn de gegevens die worden uitgewisseld beperkt tot de afspraak. Binnen deze afspraak ligt vast welke gegevens uitgewisseld moeten worden en wat dit voor alle applicaties in het domein betekend. Dit vormt zogenaamd de "maximale gegevensset". Het is in Koppeltaal expliciet niet toegestaan meer gegevens dan zijn afgesproken uit te wisselen. Dit omdat door het uitwisselen van gegevens impliciet bepaald gedrag verwacht wordt, en in dat geval moeten alle partijen in het domein hier mee overweg kunnen. Een goed voorbeeld om dit idee toe te lichtten is de deceased waarde in de patient. Indien deze gevuld zou worden, wordt van de gekoppelde systemen in het domein bepaald gedrag verwacht. Zonder over dit gedrag afspraken te maken, is het niet de bedoeling van dit veld gebruikt te maken. De koppeltaal FHIR resources kunnen gezien worden als een koppelvlak, en niet als een resource service of database.