Beschrijving
Koppeltaal genereert informatie in het kader van een taak die toegekend wordt en/of activiteiten die plaats vindt door een participant, gegevensuitwisselingen tussen (verschillende) applicaties en logs met storingen en/of problemen in de context van Koppeltaal. Al deze informatie stelt zorgaanbieders, toezichthouders en cliënten/patiënten in staat om verschillende handelingen te kunnen volgen en naderhand te kunnen controleren, dat dit op een juiste manier gelogd en beheerd wordt.
Overwegingen
Verantwoordelijkheden
De logging binnen Koppeltaal vereist aandacht, met name omdat de logging in een architectuur waar verschillende systemen samenwerken de sleutel vormt tot goed begrip van (fout-) situaties. In Koppeltaal vervult het logging verschillende functies, waar het onderscheid wordt gemaakt tussen de volgende:
Toegangslog, wie heeft wat gedaan. Deze is vereiste voor de NEN-7513 norm, hier valt ook het starten en ontvangen van een launch onder.
Ketenlog, hoe tussen applicaties gebeurtenissen aan elkaar gekoppeld kunnen worden, dit geldt specifiek bij de launch en bij de abonnementen.
Verwerkingslog, dit log geeft aan welke problemen er zich hebben voorgedaan tijdens het verwerken van resources.
Het applicatielog, de logmeldingen van de applicatie. Deze vallen buiten de scope van Koppeltaal en zijn de verantwoordelijkheid van de applicatieleveranciers zelf.
Aangezien alle FHIR resources door de FHIR resource service verwerkt worden, wordt er in Koppeltaal voor gekozen de logging voor het grootste deel door de FHIR resource service te laten uitvoeren. Hiermee worden de applicatieleveranciers ontzorgt en worden inconsistenties en fouten voorkomen.
NEN-7513 en traceerbaarheid
Koppeltaal 2.0 moet voldoen aan de NEN-7513 norm rond traceerbaarheid, dit betekent dat van alle acties op de FHIR resources moet worden bijgehouden wie wat op welk moment heeft gelezen, geüpdatet, aangemaakt of verwijderd, zijnde de gebeurtenissen waarbij persoonlijke gezondheidsinformatie is verwerkt. Koppeltaal Logging moet het mogelijk maken "achteraf onweerlegbaar vast te stellen welke activiteiten waar en wanneer hebben plaatsgevonden in de gehele Koppeltaal keten". De NEN-7513 specificeert het detailniveau waarmee acties worden gelogd die bij een gebeurtenis plaatsvinden. Als er bijvoorbeeld gegevens zijn toegevoegd in een patiëntdossier zal dat als feit worden gelogd.
FHIR AuditEvent en de FHIR resource service
Het FHIR AuditEvent voldoet aan de eisen die er binnen Koppeltaal bestaan rond logging. Verder vinden veruit de meeste interacties plaats op de FHIR resource service. Daarom is er een mapping gemaakt tussen de NEN-7513 en het FHIR AuditEvent. Verder is ervoor gekozen om de FHIR resource service verantwoordelijk te maken voor het aanmaken van het merendeel van de log events, met uitzondering van de volgende events:
Het starten van een launch
Het ontvangen van een launch
Het melden van een verwerkingsprobeem van een specifieke resource.
Als leverancier is het dus goed om in de gaten te houden dat er situaties zijn waarin vereist wordt dat log entries worden aangemaakt. Specifiek het melden van niet goed verwerkte resources en problemen bij de launch worden verwerkt in TOP-KT-012 - Foutafhandeling en Statuscodes.
Relatie AuditEvent en _history
In het FHIR AuditEvent worden geen gegevens opgeslagen waarop de gebeurtenis betrekking heeft, echter, er wordt een relatie gelegd met de betrokken versies van de resources waarop de gebeurtenis betrekking heeft.
Ketenlogging
Koppeltaal maakt gebruik van drie headers in elk request die het mogelijk maken een keten van AuditEvents te kunnen creëren die verschillende gebeurtenissen over systemen kunnen vastleggen, namelijk de X-Request-id, X-Trace-id en X-Correlation-id. Deze doen zich met name voor in de volgende situaties:
Een launch
Bij notificaties van abonnementen.
De waarden in de headers zorgen ervoor dat de verschillende events die voortkomen uit dezelfde gebeurtenis gekoppeld kunnen worden.
Toepassing, restricties en eisen
Vastgelegde events
In de tabel hieronder wordt aangegeven welke events in Koppeltaal worden vastgelegd, wie er voor verantwoordelijk is en waar deze events worden beschreven.
Gebeurtenis | Verantwoordelijkheid | Beschreven in |
---|---|---|
Alle normale interacties met de FHIR Resource Service | FHIR resource service | |
Alle foutmeldingen die voorkomen op de FHIR Resource Service | FHIR resource service | AuditEvent op outcome. |
Het starten en stoppen van applicatie(instanties). | Applicatie | |
Het starten van een launch | Applicatie | |
Het ontvangen van een launch | Applicatie | |
Het verzenden van een notificatie van een abonnement | FHIR resource service | |
Het ontvangen van een notificatie van een abonnement | Applicatie | |
Problemen met de verwerking van de gegevens | Applicatie | |
Problemen met het ontvangen van de launch | Applicatie |
Tracing en ketenlogging
De tracing wordt door middel van een drietal HTTP headers mogelijk gemaakt.
De X-Request-Id kan het beste gezien worden als een unieke request ID voor alle requests die in koppeltaal plaatsvinden. In asynchrone en/of notificaties kan er een hiërarchie van requests gemaakt worden door steeds een nieuw request ID voor elk request te maken, en de ontvangen request ID als bovenliggend request in het X-Correlation-Id in te vulle. De X-Trace-id is ook een unieke identifier die aan een request wordt gegeven, deze wijkt af in hoe deze wordt doorgegeven; deze waarde moet, indien gevuld, ongewijzigd doorgegeven worden.
Deze headers worden hieronder in meer detail besproken.
X-Request-Id
De waarde van dit veld is globaal uniek en heeft een string waarde. Om globaal uniek te zijn wordt aangeraden een uuid v4 te gebruiken.
De X-Request-Id
is uniek voor elk request, onafhankelijk of onderdeel is van een groter geheel.
Indien de waarde ontbreekt: in het request mag de ontvangende partij deze vullen met een waarde, elk request MOET uiteindelijk een waarde krijgen.
Implementatie uitvoerder: altijd een nieuwe waarde.
Implementatie ontvanger: opslaan indien er andere requests uit voorkomen, vullen met een eigen gegenereerde waarde indien ontbreekt of niet voldoet aan de eisen. Loggen in het AuditEvent indien van toepassing. Teruggeven in het response als X-Request-Id
header.
Mapping op AuditEvent: extension.request-id
X-Correlation-Id
De waarde van dit veld is globaal uniek en heeft een string waarde. Om globaal uniek te zijn wordt aangeraden een uuid v4 te gebruiken.
Deze waarde is typisch het X-Request-Id
van het originele request indien er sprake is van een asynchroon request of notificatie. Verder niet gevuld.
Indien ontbreekt: leeg laten
Implementatie uitvoerder: leeg laten indien er geen bovenliggend request is, vullen met X-Request-Id
van het bovenliggend request.
Implementatie ontvanger: loggen in het AuditEvent indien van toepassing, teruggeven in het HTTP response indien de X-Request-Id
gevuld is met aan andere waarde dan in het request is meegegeven.
Mapping op AuditEvent: extension.correlation-id
X-Trace-id
De waarde van dit veld is globaal uniek en heeft een string waarde. Om globaal uniek te zijn wordt aangeraden een uuid v4 te gebruiken.
De X-Trace-id
kan in verschillende requests met dezelfde waarde voorkomen om aan te geven dat deze requests aan elkaar gerelateerd zijn.
Indien de waarde ontbreekt: in het request mag de ontvangende partij deze vullen met de waarde van de X-Request-Id van het bovenliggende request. Het veld mag ook leeg gelaten worden.
Implementatie uitvoerder: vullen met de X-Trace-id
waarde van het bovenliggende request, of eventueel met de waarde van de X-Request-Id
als het bovenliggende request geen waarde voor de X-Trace-id
heeft ingevuld.
Implementatie ontvanger: opslaan indien er andere requests uit voorkomen, vullen met X-Request-Id
indien de X-Trace-id
ontbreekt of leeglaten. Loggen in het AuditEvent indien van toepassing.
Mapping op AuditEvent: extension.trace-id
X-Trace-id en de launch
In het geval van een launch wordt de waarde van de X-Trace-id
gelijk gesteld aan de waarde van het HTI.jti
veld. Deze wordt gebruikt voor het aanmaken van de relevante resources betrokken in de launch, waaronder het AuditEvent. Bij het AuditEvent wordt ook de waarde van extension.trace-id
gevuld met de waarde van HTI.jti
. De applicatie die die launch initieert vult voor de X-Trace-id
en de waarde van het HTI
.jti
veld, of omgekeerd. Zolang beide maar gelijk zijn.
De ontvangende partij gebruikt de waarde van HTI.jti
van het launch token voor bij de interactie met de FHIR resource service in de context van de launch en gebruikt voor de waarde van X-Trace-id
de waarde van het HTI.jti
veld. Ook hier geldt dat het betrokken AuditEvent de extension.trace-id
gelijk heeft aan de waarde van HTI.jti
. Zo wordt het mogelijk door middel van het HTI.jti
veld de AuditEvents te correleren tussen applicaties.
Het AuditEvent
Binnen Koppeltaal onderscheiden we verschillende gebeurtenissen of activiteiten(event types) die gelogd worden. Voor de beschrijving en type van de verschillende velden zie de AuditEvent pagina.
Het AuditEvent is in principe een write once entiteit en wordt met een HTTP POST aangemaakt. De FHIR AuditEvent resource mag NOOIT aangepast of verwijderd worden met HTTP PUT, PATCH of DELETE. Het formaat van de FHIR AuditEvent resource wordt in XML of JSON formaat aangeleverd. Verder gelden alle andere eisen en beperkingen rond het aanmaken van resources.
Read
Veld | Waarde |
---|---|
Event type | Read |
FHIR AuditEvent voor Koppeltaal | RESTful operatie |
verantwoordelijke partij | FHIR Resource Provider |
| { "system": "http://terminology.hl7.org/CodeSystem/audit-event-type" "code": "rest" } |
| { "system": "http://hl7.org/fhir/restful-interaction" "code": "read" "display": "read" } |
|
|
| De referentie naar de applicatie die de actie uitvoert { "reference": "Device/<id|client_id>" } |
| { "coding" : { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110153" "display": "Source Role ID" } } |
|
|
| { "system": "http://hl7.org/fhir/resource-types" "code": "<ResourceType>" "display": "<ResourceType>" } |
| { "reference": "<ResourceType>/<id>/_history/<version>" } |
|
|
| Base URL van de applicatie waar de log wordt aangemaakt. In dit geval is dat de base URL van de fhir-service. |
| De device reference van het device dat het event waarneemt. In dit geval is dat de fhir-resource service. |
| Timestamp van vastlegging, deze wordt door de FHIR server bepaald, bijvoorbeeld: |
Update
Veld | Waarde |
---|---|
Event type | Update |
FHIR AuditEvent voor Koppeltaal | RESTful operatie |
verantwoordelijke partij | FHIR Resource Provider |
| { "system": "http://terminology.hl7.org/CodeSystem/audit-event-type" "code": "rest" } |
| { "system": "http://hl7.org/fhir/restful-interaction" "code": "update" "display": "update" } |
|
|
| De referentie naar de applicatie die de actie uitvoert, cq de applicatie die veroorzaker is van het Event { "reference": "Device/<id|client_id>" } |
| { "coding" : { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110153" "display": "Source Role ID" } } |
|
|
| { "system": "http://hl7.org/fhir/resource-types" "code": "<ResourceType>" "display": "<ResourceType>" } |
| { "reference": "<ResourceType>/<id>/_history/<version>" } |
|
|
| Not Used |
| Not Used |
| Base URL van de applicatie waar de log wordt aangemaakt. In dit geval is dat de base URL van de fhir-service. |
| De device reference van het device dat het event waarneemt. In dit geval is dat de fhir-resource service. |
| Timestamp van vastlegging, bijvoorbeeld: |
Delete
Veld | Waarde |
---|---|
Event type | Delete |
FHIR AuditEvent voor Koppeltaal | RESTful operatie |
verantwoordelijke partij | FHIR Resource Provider |
| { "system": "http://terminology.hl7.org/CodeSystem/audit-event-type" "code": "rest" } |
| { "system": "http://hl7.org/fhir/restful-interaction" "code": "delete" "display": "delete" } |
|
|
| De referentie naar de applicatie die de actie uitvoert, cq de applicatie die veroorzaker is van het Event { "reference": "Device/<id|client_id>" } |
| { "coding" : { "system": "http://dicom.nema.org/resources/ontology/DCM " "code": "110153" "display": "Source Role ID" } } |
|
|
| { "system": "http://hl7.org/fhir/resource-types" "code": "OperationOutcome" "display": "OperationOutCome" } |
| { "reference": "<ResourceType>/<id>/_history/<version>" } |
|
|
| |
| |
| Base URL van de applicatie waar de log wordt aangemaakt. In dit geval is dat de base URL van de fhir-service. |
| De device reference van het device dat het event waarneemt. In dit geval is dat de fhir-resource service. |
| Timestamp van vastlegging, bijvoorbeeld: |
Create
Veld | Waarde |
---|---|
Event type | Create |
FHIR AuditEvent voor Koppeltaal | RESTful operatie |
verantwoordelijke partij | FHIR Resource Provider |
| { "system": "http://terminology.hl7.org/CodeSystem/audit-event-type" "code": "rest" } |
| { "system": "http://hl7.org/fhir/restful-interaction" "code": "create" "display": "create" } |
|
|
| De referentie naar de applicatie die de actie uitvoert, cq de applicatie die veroorzaker is van het Event { "reference": "Device/<id|client_id>" } |
| { "coding" : { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110153" "display": "Source Role ID" } } |
|
|
| { "system": "http://hl7.org/fhir/resource-types" "code": "<ResourceType>" "display": "<ResourceType>" } |
| { "reference": "<ResourceType>/<id>/_history/<version>" } |
|
|
| Not Used |
| Not Used |
| Base URL van de applicatie waar de log wordt aangemaakt. In dit geval is dat de base URL van de fhir-service. |
| De device reference van het device dat het event waarneemt. In dit geval is dat de fhir-resource service. |
| Timestamp van vastlegging, bijvoorbeeld: |
Search
Veld | Waarde |
---|---|
Event type | Search |
FHIR AuditEvent voor Koppeltaal | RESTful operatie |
verantwoordelijke partij | FHIR Resource Provider |
| { "system": "http://terminology.hl7.org/CodeSystem/audit-event-type" "code": "rest" } |
| { "system": "http://hl7.org/fhir/restful-interaction" "code": "search" "display": "search" } |
|
|
| De referentie naar de applicatie die de actie uitvoert, cq de applicatie die veroorzaker is van het Event { "reference": "Device/<id|client_id>" } |
| { "coding" : { "system": "http://dicom.nema.org/resources/ontology/DCM " "code": "110153" "display": "Source Role ID" } } |
|
|
| { "reference": "Bundle/<id>" } |
| { "system": "http://hl7.org/fhir/resource-types" "code": "Bundle" "display": "Bundle" } |
| { "system": "http://terminology.hl7.org/CodeSystem/object-role", "code": "24", "display": "Query" } |
| Query parameters in base64Binary formaat |
| { "reference": "<Resource>/<id>/_history/<version>" } |
entity.type (2) | { "system": "http://hl7.org/fhir/resource-types" "code": "<Resource>" "display": "<Resource>" } |
entity.query (2) | Query parameters in base64Binary formaat |
| |
| Base URL van de applicatie waar de log wordt aangemaakt. In dit geval is dat de base URL van de fhir-service. |
| De device reference van het device dat het event waarneemt. In dit geval is dat de fhir-resource service. |
| Timestamp van vastlegging, bijvoorbeeld: |
(1) → Bundle Referentie (2) Resource Referentie waarvoor een Get wordt uitgevoerd en als response gegevens. Voor elke resource die voorkomt in de query response wordt een entity.what, entity.type en entity.query gelogd.
Capability
Veld | Waarde |
---|---|
Event type | Capability |
FHIR AuditEvent voor Koppeltaal | RESTful operatie |
verantwoordelijke partij | FHIR Resource Provider |
| { "system": "http://terminology.hl7.org/CodeSystem/audit-event-type" "code": "rest" } |
| { "system": "http://hl7.org/fhir/restful-interaction" "code": "capabilities" "display": "capabilities" } |
|
|
| De referentie naar de applicatie die de actie uitvoert, cq de applicatie die veroorzaker is van het Event { "reference": "Device/<id|client_id>" } |
| { "coding" : { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110153" "display": "Source Role ID" } } |
|
|
| { "system": "http://hl7.org/fhir/resource-types" "code": "CapabilityStatement" "display": "CapabilityStatement" } |
| Not Used |
|
|
| Not Used |
| Not Used |
| Base URL van de applicatie waar de log wordt aangemaakt. In dit geval is dat de base URL van de fhir-service. |
| De device reference van het device dat het event waarneemt. In dit geval is dat de fhir-resource service. |
| Timestamp van vastlegging, bijvoorbeeld: |
Launch
Veld | Waarde |
---|---|
Event type | Launch |
FHIR AuditEvent voor Koppeltaal | Application Launch Activity - Launching |
verantwoordelijke partij | Lancerende Applicaties |
| { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110100" "display": "Application Activity" } |
| { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110120" "display": "Application Start" } |
|
|
| De referentie naar de applicatie die de actie uitvoert, de lancerende partij, cq de applicatie die veroorzaker is van het Event { "reference": "Device/<id|client_id>" } |
| { "coding" : { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110151" "display": "Application Launcher" } } |
|
|
| { "system": "http://hl7.org/fhir/resource-types", "code": "Device", "display": "Device" } |
| De referentie naar de applicatie die de launch ontvangt, de ontvangende partij: Na afstemming met de Technical Community van Koppeltaal wordt hier de referentie naar de Task verwacht. Deze aanpassing wordt eerst in de Technical Community besproken. { "reference": "Device/<id|client_id>" } Ent |
entity.name |
|
| Not Used |
| Not Used |
| De publieke URL van de applicatie waarvandaan de launch gestart wordt. Bijvoorbeeld: https://portal.mijnggz.nl |
| De device reference van het device dat het event waarneemt. In dit geval is dat de lancerende applicatie. Deze kan opgesteld worden op basis van de client_id: { "reference": "Device/<id|client_id>" } |
| Timestamp van vastlegging, bijvoorbeeld: |
Launched
Veld | Waarde |
---|---|
Event type | Launched |
FHIR AuditEvent voor Koppeltaal | Application Launch Activity - Launched |
verantwoordelijke partij | Gelanceerde Applicatie |
| { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110100" "display": "Application Activity" } |
| { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110120" "display": "Application Start" } |
|
|
| De referentie naar de applicatie die de actie uitvoert, de ontvangende partij: { "reference": "Device/<id|client_id>" } |
| { "coding" : { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110150" "display": "Application" } } |
|
|
| { "system": "http://hl7.org/fhir/resource-types", "code": "Device", "display": "Device" } |
| De referentie naar de applicatie die de actie uitvoert, de ontvangende partij, cq de applicatie die wordt geactiveerd door de launch. { "reference": "Device/<id|client_id>" } |
|
|
| Not Used |
| Not Used |
| De publieke URL van de applicatie waarheen de launch gaat. Bijvoorbeeld: https://module.mijnaanbieder.nl |
| De device reference van het device dat het event waarneemt. In dit geval is dat de ontvangende applicatie. Deze kan opgesteld worden op basis van de client_id: { "reference": "Device/<id|client_id>" } |
| Timestamp van vastlegging, bijvoorbeeld: |
Send Notification
Veld | Waarde |
---|---|
Event type | Send Notification |
FHIR AuditEvent voor Koppeltaal | Transmit Record Lifecycle Event |
verantwoordelijke partij | FHIR Resource Provider |
| { "system": "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle" "code": "transmit" "display": "Transmit Record Lifecycle Event" } |
| - |
|
|
agent.who (1) | De referentie naar de applicatie die notificatie veroorzaakt. { "reference": "Device/<id|client_id>" } |
agent.type (1) | { "coding" : { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110153" "display": "Source Role ID" } } |
|
|
| De referentie naar de applicatie naar wie de notificatie wordt verstuurd, cq de applicatie waar naartoe de notificatie wordt verstuurd. De destination { "reference": "Device/<id|client_id>" } |
| { "coding" : { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110152" "display": "Destination Role ID" } } |
|
|
entity.type (1) | { "system": "http://hl7.org/fhir/resource-types", "code": "<Resource>", "display": "<Resource>" } |
entity.what (1) | { "reference": "<Resource>/<id>/_history/<version>" } |
entity.query (1) | Query parameters in base64Binary formaat |
| { "system": "http://hl7.org/fhir/resource-types", "code": "Subscription", "display": "Subscription" } |
| De referentie van de subscription: { "reference": "Subscription/<id>/_history/<version>" } |
|
|
| Not Used |
| Query parameters in base64Binary formaat |
| Base URL van de applicatie waar de log wordt aangemaakt |
| De device reference van het device dat het event waarneemt. In dit geval is dat de fhir-resource service. |
| Timestamp van vastlegging, bijvoorbeeld: |
(1) De Patient referentie waarvoor de subscription wordt verstuurd, (2) De reference naar de Resource waarvoor de notification wordt verstuurd.
Receive Notification
Veld | Waarde |
---|---|
Event type | Receive Notification |
FHIR AuditEvent voor Koppeltaal | Transmit Record Lifecycle Event |
verantwoordelijke partij | Ontvangende Applicatie |
| { "system": "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle" "code": "transmit" "display": "Transmit Record Lifecycle Event" } |
| - |
|
|
| De referentie naar de applicatie die notificatie verzendt { "reference": "Device/<id|client_id>" } |
| { "coding" : { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110153" "display": "Source Role ID" } } |
|
|
| De referentie naar de applicatie die notificatie ontvangt. { "reference": "Device/<id|client_id>" } |
| { "coding" : { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110152" "display": "Destination Role ID" } } |
|
|
| { "system": "http://hl7.org/fhir/resource-types", "code": "Device", "display": "Device" } |
| De referentie van de ontvanger van notificatie: { "reference": "Device/<id|client_id>" } |
|
|
| { "system": "http://terminology.hl7.org/CodeSystem/object-role", "code": "9", "display": "Subscriber" } |
| Query parameters in base64Binary formaat |
| Base URL van de applicatie de log wordt aangemaakt |
| De device reference van het device dat het event waarneemt. In dit geval is dat de applicatie die de notificatie ontvangt. Deze kan opgesteld worden op basis van de client_id: { "reference": "Device/<id|client_id>" } |
| Timestamp van vastlegging, bijvoorbeeld: |
Status Change
Veld | Waarde |
---|---|
Event type | Status Change |
FHIR AuditEvent voor Koppeltaal | Application Activity |
verantwoordelijke partij | Applicatie |
| { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110100" "display": "Application Activity" } |
| { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110120" // of andere code "display": "Application Start" // of andere display waarde" } |
|
|
| De referentie van de applicatie die de status change verstuurt. { "reference": "Device/<id|client_id>" } |
| { "coding" : { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110150" "display": "Application" } } |
|
|
| { "system": "http://hl7.org/fhir/resource-types", "code": "Device", "display": "Device" } |
| De referentie naar de applicatie: { "reference": "Device/<id|client_id>" } |
|
|
| Not Used |
| Not Used |
| Base URL van de applicatie waar de log wordt aangemaakt. |
| De device reference van het device dat het event waarneemt. Deze kan opgesteld worden op basis van de client_id: { "reference": "Device/<id|client_id>" } |
| Timestamp van vastlegging, bijvoorbeeld: |
User Authentication
Veld | Waarde |
---|---|
Event type | User Authentication |
FHIR AuditEvent voor Koppeltaal | User Authentication |
verantwoordelijke partij | Authorization Service |
| { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110114" "display": "User Authentication" } |
| { "system": "http://dicom.nema.org/resources/ontology/DCM" "code": "110122" // of andere code "display": "Login" // of andere display waarde" } |
|
|
|
|
|
|
|
|
| { "system": "http://hl7.org/fhir/resource-types" "code": "<ResourceType>" "display": "<ResourceType>" } |
| FHIR reference to Patient / Practitioner: { "reference" : <Patient | Practitioner>/<id> } |
|
|
|
{
} {
} |
| Not Used |
| Base URL van de autorisatieserver waar de log wordt aangemaakt. |
| De device reference van de autorisatieserver dat het event waarneemt. Deze kan opgesteld worden op basis van de client_id: { "reference": "Device/<id|client_id>" } |
| Timestamp van vastlegging, bijvoorbeeld: |
Mapping van Toegangslog (NEN-7513) record naar FHIR AuditEvent
Toegangslog → AuditEvent.
De AuditEvent is gebaseerd op de IHE-ATNA Audit record definitie, oorspronkelijk uit de RFC3881, nu onder beheer van DICOM (zie DICOM Part 15 Annex A5).
Om de privacy en veiligheid van de gezondheidszorg in geautomatiseerde systemen te helpen waarborgen, worden gebruiksgegevens verzameld. Deze gegevens zullen worden beoordeeld door administratief personeel om te verifiëren dat gezondheidsgegevens worden gebruikt in overeenstemming met de gegevensbeveiligingsvereisten van de zorgaanbieder en om verantwoording te kunnen afleggen voor het gebruik van gegevens. Dit gegevensverzamelings- en beoordelingsproces wordt beveiligingsaudits genoemd en de gegevens zelf vormen een audittrail.
Audittrails (kunnen) worden gebruikt voor bewakingsdoeleinden om te detecteren wanneer er interessante gebeurtenissen plaatsvinden die nader onderzoek rechtvaardigen.
Zie ook /wiki/spaces/VZVZFHIR/pages/69895668 voor VZVZ brede logging mapping.
FHIR AuditEvent Resource | |||
Element | Card | Omschrijving | |
---|---|---|---|
extension.request-id | 0..1 | Om één interactie (request of response) eenduidig uniek te kunnen identificeren a.d.h.v. een identifier (X-Request-Id) De waarde van het X-Request-Id veld, indien de waarde ontbreekt in het originele request moet deze zelf gegenereerd worden. | "extension": [ { "url": "http://koppeltaal.nl/fhir/StructureDefinition/trace-id", "valueId": "8385f600-9bf7-4b96-8467-268070c27677" }, { "url": "http://koppeltaal.nl/fhir/StructureDefinition/request-id", "valueId": "fd8f9c51-1807-43bf-ba08-fa55d4cba533" }, { "url": "http://koppeltaal.nl/fhir/StructureDefinition/trace-id", "valueId": "71d21867-ed29-498d-913f-add467c09710" }, { "url": "http://koppeltaal.nl/fhir/StructureDefinition/resource-origin", "valueReference": { "reference": "Device/67aca2ac-3ed3-4ec7-b912-640a5a88a883", "type": "Device" } } ] |
extension.correlation-id | 0..1 | De waarde van het X-Correlation-Id veld in het voorgaande request, indien van toepassing. | |
extension.trace-id | 0..1 | Om een set interacties te groeperen en eenduidig uniek te kunnen identificeren onder een bepaalde (initiërende) type gebeurtenis a.d.h.v. een traceer identifier (X-Trace-Id). De waarde van het X-Trace-id veld, indien van toepassing. | |
extension.resource-origin | 0..1 | De referentie naar de device van de aanvrager van het request. In het geval van de FHIR resource service wordt dit veld automatisch gevuld door de aanvrager van het request voor alle REST operaties op alle resources. | |
Beschrijving van een gebeurtenis. | |||
type | 1..1 | Identificatie van het type gebeurtenis. Coding met als waardeset het audit-event-type, waarvan met name de volgende sets (of een deel daarvan) worden gebruikt: | "type": { "system": "http://terminology.hl7.org/CodeSystem/audit-event-type", "code": "rest", "display": "Restful Operation" } |
subtype | 0..* | Gedetailleerde beschrijving van het type gebeurtenis. Coding met als waardeset AuditEventSub-Type. Afhankelijk van type gebeurtenis kan dit zijn:
| "subtype": [ { "system": "http://hl7.org/fhir/restful-interaction", "code": "create", "display": "create" } ] |
action | 0..1 | Aanduiding van de AuditEventAction bij deze gebeurtenis.
| "action": "C" |
period | 0..1 | De periode waarbinnen de gebeurtenis plaatsvond. Het datatype is Period. | "period": { "start": "2023-06-12T10:27:31.389+00:00", "end": "2023-06-12T10:27:33.456+00:00" } |
recorded | 1..1 | Het tijdstip van de gebeurtenis wordt eenduidig en aan het begin van de gebeurtenis vastgelegd, het tijdstip wordt vastgelegd in de UTC tijdzone. | "recorded": "2023-06-12T10:27:31.389+00:00" |
outcome | 0..1 | Indicatie van het resultaat van de gebeurtenis van het type AuditEventOutcome,
| "outcome": "4" |
outcomeDesc | 0..1 | Beschrijving van de melding, indien een foutmelding. | "outcomeDesc" : "Invalid value for recorded" |
agent | 1..* | Identificatie van een gebruiker. Dit kan een persoon, organisatie of applicatie instantie in een informatie systeem representeren. Bij elke gebeurtenis MOET tenminste één gebruiker geïdentificeerd worden. | "agent": [ { "who": { "reference": "Device/ba33314a-795a-4777-bef8-e6611f6be645" }, "type": { "coding": [ { "system": "http://dicom.nema.org/resources/ontology/DCM", "code": "110153" } ] }, "requestor": true } |
agent.who | 1..1 | Identificator van de gebruiker die de gebeurtenis initieert voor de bron van logging. De gebruiker is bij Koppeltaal is dit altijd een Reference naar een Device. | |
agent.role | 0..* | De veiligheidsrol van de agent, met als waardeset SecurityRoleType, waaronder:
| |
agent.type | 1..1 | Rol van de gebruiker bij de gebeurtenis van het type ParticipationRoleType, waaronder:
| |
agent.requestor | 1..1 | Aanduiding dat deze gebruikers de initiator is van de gebeurtenis. | |
agent.network | 0..1 | Dit veld heeft de waarde van Subscription.channel.endpoint | |
entity | 1..* | Identificatie van de betrokken objecten en typen objecten bij deze gebeurtenis. Verschillende typen objecten worden op verschillende wijzen geïdentificeerd. Ter identificatie van de betrokken objecten MOETEN het Identificatortype en Identificator van het object bepaald worden. | "entity": [ { "what": { "reference": "Patient/f89f5013-4552-40e8-b0de-b217b9c15080/_history/1", "type": "Patient" }, "type": { "system": "http://hl7.org/fhir/resource-types", "code": "Patient", "display": "Patient" } } ] |
entity.type | 0..1 | Geef het type identificator van het betrokken object weer. Coding met als waardeset AuditEventEntityType. Dit veld kan gevuld worden met de ResourceType, zoals
| |
entity.what | 0..1 | Geeft een unieke identificator van een bij de gebeurtenis betrokken object weer, afhankelijk van het Identificatortype van het object. Dit veld kan gevuld worden met de entity referentie, zoals:
| |
| 0..1 |
| |
entity.description | 0..1 | Tekst die de entiteit in verder detail beschrijft, in het geval van een OperationOutcome kan hier de beschrijving in gezet worden. | |
entity.securityLabel | 0..* | Toegangscontrole beleid dat specifiek is voor Koppeltaal, dat wordt gebruikt om één of meer autorisatiebeleidsregels af te dwingen. | "type": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-Confidentiality", "code": "U", "display": "unrestricted", "version": "4.3.0" } ] |
entity.role | 0..1 | Code die de categorie (of rol) van het betrokken object weergeeft. We gebruiken hiervoor de volgende code systemen: Voorbeeld: waarde "Query" De inhoud van een query. Dit wordt gebruikt om de inhoud van elke soort query vast te kunnen leggen. Voor beveiligingstoezicht doeleinden is het erg belangrijk om te weten welke vragen er worden gesteld. | |
entity.lifecycle | 0..1 | Code die het stadium van het betrokken object weergeeft voor die objecten die een bepaalde levenscyclus kennen. We gebruiken hiervoor de volgende code systemen: | "type": [ { "system": "http://terminology.hl7.org/CodeSystem/dicom-audit-lifecycle", "code": "14", "display": "Logical deletion" } ] |
entity.query | 0..1 | De feitelijke formulering van een "Query" in geval het betrokken object als categorie "Query" is. | |
source | "source": { "site": "https://modules.mijnzggz.nl", "observer": { "reference": "Device/ba33314a-795a-4777-bef8-e6611f6be645", "type": "Device" }, "type": [ { "system": "http://terminology.hl7.org/CodeSystem/security-source-type", "code": "4", "display": "Application Server" } ] }, | ||
source.site | 0..1 | Domeinnaam van de locatie waar gelogd is. | |
source.observer | 1..1 | Unieke identificatie van de bron in het informatiedomein waar de gebeurtenis is gelogd. Een referentie naar het Device, bijvoorbeeld: Device/5aa804f8-0b03-4f02-bbfe-53889893a4bb | |
source.type | 0..* | Type (device) van de bron waar de gebeurtenis gelogd is. |
Gebruik van standaarden
https://build.fhir.org/http.html#custom
Voorbeelden
Zie de voorbeelden uitgewerkt in Simplifier.
{"enableNumbering":false}