Skip to end of banner
Go to start of banner

TOP-KT-011 - Logging en tracing

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 167 Next »


 Versiegeschiedenis...

Versie

Datum

Status

Wijzigingen

1.0.4

26 mar 2024

definitief

Comments Joris verwerkt, aantal zaken omgezet in Backlog items.
- Entity.query, Entity.role & Entity.name worden niet gebruikt in de meeste events. De overige voorgestelde wijzigingen zijn neergelegd in product backlog items.

1.0.3

definitief

verbeterde beschrijving van gehele pagina
- HTI.jti als X-Trace-Id gebruiken

1.0.2

definitief

Aanpassingen tbh IDP

1.0.1

AuditEvent User Authentication toegevoegd

1.0.0

 

definitief


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 de Trace Context standaard om de gebeurtenissen over verschillende systemen te kunnen volgen. Dit houdt in dat er drie headers worden gebruikt in elk request die het mogelijk maken een keten van AuditEvents te kunnen creëren die verschillende gebeurtenissen over systemen kunnen vastleggen. 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

AuditEvent

Alle foutmeldingen die voorkomen op de FHIR Resource Service

FHIR resource service

AuditEvent op outcome.

Het starten en stoppen van applicatie(instanties).

Applicatie

Tabel AuditEvent

Het starten van een launch

Applicatie

Tabel AuditEvent

Het ontvangen van een launch

Applicatie

Tabel AuditEvent

Het verzenden van een notificatie van een abonnement

FHIR resource service

Tabel AuditEvent

Het ontvangen  van een notificatie van een abonnement

Applicatie

Tabel AuditEvent

Problemen met de verwerking van de gegevens

Applicatie

TOP-KT-012b - FHIR REST Client foutafhandeling

Problemen met het ontvangen van de launch

Applicatie

TOP-KT-012c - Foutafhandeling bij de launch

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 vullen. 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

type

{
 "system": "http://terminology.hl7.org/CodeSystem/audit-event-type"
 "code": "rest"
}

subtype

{
 "system": "http://hl7.org/fhir/restful-interaction"
 "code": "read"
 "display": "read"
}

action

R

agent.who

De referentie naar de applicatie die de actie uitvoert

{
 "reference": "Device/<id|client_id>"
}

agent.type

{
 "coding" : {
  "system": "http://dicom.nema.org/resources/ontology/DCM"
  "code": "110153"   
  "display": "Source Role ID"
 }
}

agent.requestor

true

entity.type

{
 "system": "http://hl7.org/fhir/resource-types"
 "code": "<ResourceType>"
 "display": "<ResourceType>"
}

entity.what

{
 "reference": "<ResourceType>/<id>/_history/<version>"
}

entity.name

<ResourceType>.<identifier> als de resourcetype een identifier gebruikt

source.site

Base URL van de applicatie waar het event wordt vastgelegd. In dit geval is dat de base URL van de fhir-service.

source.observer

De device reference van het device dat het event waarneemt. In dit geval is dat de fhir-resource service.

recorded

Timestamp van vastlegging, deze wordt door de FHIR server bepaald, bijvoorbeeld: 2024-02-05T12:06:13+0000

Update

Veld

Waarde

Event type

Update

FHIR AuditEvent voor Koppeltaal

RESTful operatie

verantwoordelijke partij

FHIR Resource Provider

type

{
 "system": "http://terminology.hl7.org/CodeSystem/audit-event-type"
 "code": "rest"
}

subtype

{
 "system": "http://hl7.org/fhir/restful-interaction"
 "code": "update"
 "display": "update"
}

action

U

agent.who

De referentie naar de applicatie die de actie uitvoert, cq de applicatie die veroorzaker is van het Event

{
 "reference": "Device/<id|client_id>"
}

agent.type

{
 "coding" : {
  "system": "http://dicom.nema.org/resources/ontology/DCM"
  "code": "110153"   
  "display": "Source Role ID"
 }
}

agent.requestor

true

entity.type

{
 "system": "http://hl7.org/fhir/resource-types"
 "code": "<ResourceType>"
 "display": "<ResourceType>"
}

entity.what

{
 "reference": "<ResourceType>/<id>/_history/<version>"
}

entity.name

<ResourceType>.<identifier> als de resourcetype een identifier gebruikt

entity.role

Not Used

entity.query

Not Used

source.site

Base URL van de applicatie waar het event wordt vastgelegd. In dit geval is dat de base URL van de fhir-service.

source.observer

De device reference van het device dat het event waarneemt. In dit geval is dat de fhir-resource service.

recorded

Timestamp van vastlegging, bijvoorbeeld: 2024-02-05T12:06:13+0000

Delete

Veld

Waarde

Event type

Delete

FHIR AuditEvent voor Koppeltaal

RESTful operatie

verantwoordelijke partij

FHIR Resource Provider

type

{
 "system": "http://terminology.hl7.org/CodeSystem/audit-event-type"
 "code": "rest"
}

subtype

{
 "system": "http://hl7.org/fhir/restful-interaction"
 "code": "delete"
 "display": "delete"
}

action

D

agent.who

De referentie naar de applicatie die de actie uitvoert, cq de applicatie die veroorzaker is van het Event

{
 "reference": "Device/<id|client_id>"
}

agent.type

{
 "coding" : {
  "system": "http://dicom.nema.org/resources/ontology/DCM "
  "code": "110153"   
  "display": "Source Role ID"
 }
}

agent.requestor

true

entity.type

{
 "system": "http://hl7.org/fhir/resource-types"
 "code": "OperationOutcome"
 "display": "OperationOutCome"
}

entity.what

{
 "reference": "<ResourceType>/<id>/_history/<version>"
}

entity.name

<ResourceType>.<identifier> als de resourcetype een identifier gebruikt

entity.role

entity.query

source.site

Base URL van de applicatie waar het event wordt vastgelegd. In dit geval is dat de base URL van de fhir-service.

source.observer

De device reference van het device dat het event waarneemt. In dit geval is dat de fhir-resource service.

recorded

Timestamp van vastlegging, bijvoorbeeld: 2024-02-05T12:06:13+0000

Create

Veld

Waarde

Event type

Create

FHIR AuditEvent voor Koppeltaal

RESTful operatie

verantwoordelijke partij

FHIR Resource Provider

type

{
 "system": "http://terminology.hl7.org/CodeSystem/audit-event-type"
 "code": "rest"
}

subtype

{
 "system": "http://hl7.org/fhir/restful-interaction"
 "code": "create"
 "display": "create"
}

action

C

agent.who

De referentie naar de applicatie die de actie uitvoert, cq de applicatie die veroorzaker is van het Event

{
 "reference": "Device/<id|client_id>"
}

agent.type

{
 "coding" : {
  "system": "http://dicom.nema.org/resources/ontology/DCM"
  "code": "110153"   
  "display": "Source Role ID"
 }
}

agent.requestor

true

entity.type

{
 "system": "http://hl7.org/fhir/resource-types"
 "code": "<ResourceType>"
 "display": "<ResourceType>"
}

entity.what

{
 "reference": "<ResourceType>/<id>/_history/<version>"
}

entity.name

<ResourceType>.<identifier> als de resourcetype een identifier gebruikt

entity.role

Not Used

entity.query

Not Used

source.site

Base URL van de applicatie waar het event wordt vastgelegd. In dit geval is dat de base URL van de fhir-service.

source.observer

De device reference van het device dat het event waarneemt. In dit geval is dat de fhir-resource service.

recorded

Timestamp van vastlegging, bijvoorbeeld: 2024-02-05T12:06:13+0000

Veld

Waarde

Event type

Search

FHIR AuditEvent voor Koppeltaal

RESTful operatie

verantwoordelijke partij

FHIR Resource Provider

type

{
 "system": "http://terminology.hl7.org/CodeSystem/audit-event-type"
 "code": "rest"
}

subtype

{
 "system": "http://hl7.org/fhir/restful-interaction"
 "code": "search"
 "display": "search"
}

action

R

agent.who

De referentie naar de applicatie die de actie uitvoert, cq de applicatie die veroorzaker is van het Event

{
 "reference": "Device/<id|client_id>"
}

agent.type

{
 "coding" : {
  "system": "http://dicom.nema.org/resources/ontology/DCM "
  "code": "110153"   
  "display": "Source Role ID"
 }
}

agent.requestor

true

entity.what (1)

{
 "reference": "Bundle/<id>"
}

entity.type (1)

{
 "system": "http://hl7.org/fhir/resource-types"
 "code": "Bundle"
 "display": "Bundle"
}

entity.role (1)

{
 "system": "http://terminology.hl7.org/CodeSystem/object-role",
 "code": "24",
 "display": "Query"
}

entity.query (1)

Query parameters in base64Binary formaat

entity.what (2)

{
 "reference": "<Resource>/<id>"
}

entity.type (2)

{
 "system": "http://hl7.org/fhir/resource-types"
 "code": "<Resource>"
 "display": "<Resource>"
}

entity.query (2)

Query parameters in base64Binary formaat

entity.name

<ResourceType>.<identifier> als de resourcetype een identifier gebruikt

source.site

Base URL van de applicatie waar het event wordt vastgelegd. In dit geval is dat de base URL van de fhir-service.

source.observer

De device reference van het device dat het event waarneemt. In dit geval is dat de fhir-resource service.

recorded

Timestamp van vastlegging, bijvoorbeeld: 2024-02-05T12:06:13+0000

(1) → Bundle Referentie (2) Resource Referentie waarvoor een Get wordt uitgevoerd

Capability

Veld

Waarde

Event type

Capability

FHIR AuditEvent voor Koppeltaal

RESTful operatie

verantwoordelijke partij

FHIR Resource Provider

type

{
 "system": "http://terminology.hl7.org/CodeSystem/audit-event-type"
 "code": "rest"
}

subtype

{
 "system": "http://hl7.org/fhir/restful-interaction"
 "code": "capabilities"
 "display": "capabilities"
}

action

R

agent.who

De referentie naar de applicatie die de actie uitvoert, cq de applicatie die veroorzaker is van het Event

{
 "reference": "Device/<id|client_id>"
}

agent.type

{
 "coding" : {
  "system": "http://dicom.nema.org/resources/ontology/DCM"
  "code": "110153"   
  "display": "Source Role ID"
 }
}

agent.requestor

true

entity.type

{
 "system": "http://hl7.org/fhir/resource-types"
 "code": "CapabilityStatement"
 "display": "CapabilityStatement"
}

entity.what

Not Used

entity.name

Not Used

entity.role

Not Used

entity.query

Not Used

source.site

Base URL van de applicatie waar het event wordt vastgelegd. In dit geval is dat de base URL van de fhir-service.

source.observer

De device reference van het device dat het event waarneemt. In dit geval is dat de fhir-resource service.

recorded

Timestamp van vastlegging, bijvoorbeeld: 2024-02-05T12:06:13+0000

Launch

Veld

Waarde

Event type

Launch

FHIR AuditEvent voor Koppeltaal

Application Launch Activity - Launching

verantwoordelijke partij

Lancerende Applicaties

type

{
 "system": "http://dicom.nema.org/resources/ontology/DCM"
 "code": "110100"   
 "display": "Application Activity"
}

subtype

{
 "system": "http://dicom.nema.org/resources/ontology/DCM"
 "code": "110120"   
 "display": "Application Start"
}

action

E

agent.who

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>"
}

agent.type

{
 "coding" : {
  "system": "http://dicom.nema.org/resources/ontology/DCM"
  "code": "110151"   
  "display": "Application Launcher"
 }
}

agent.requestor

true

entity.type

{
 "system": "http://hl7.org/fhir/resource-types",
 "code": "Device",
 "display": "Device"
}

entity.what

De referentie naar de applicatie die de launch ontvangt, de ontvangende partij:

{
 "reference": "Device/<id|client_id>"
}

entity.name

Not Used

entity.role

Not Used

entity.query

Not Used

source.site

De publieke URL van de applicatie waarvandaan de launch gestart wordt. Bijvoorbeeld: https://portal.mijnggz.nl

source.observer

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>"
}

recorded

Timestamp van vastlegging, bijvoorbeeld: 2024-02-05T12:06:13+0000

Launched

Veld

Waarde

Event type

Launched

FHIR AuditEvent voor Koppeltaal

Application Launch Activity - Launched

verantwoordelijke partij

Gelanceerde Applicatie

type

{
 "system": "http://dicom.nema.org/resources/ontology/DCM"
 "code": "110100"   
 "display": "Application Activity"
}

subtype

{
 "system": "http://dicom.nema.org/resources/ontology/DCM"
 "code": "110120"   
 "display": "Application Start"
}

action

E

agent.who

De referentie naar de applicatie die de actie uitvoert, de ontvangende partij:

{
 "reference": "Device/<id|client_id>"
}

agent.type

{
 "coding" : {
  "system": "http://dicom.nema.org/resources/ontology/DCM"
  "code": "110150"   
  "display": "Application"
 }
}

agent.requestor

false

entity.type

{
 "system": "http://hl7.org/fhir/resource-types",
 "code": "Device",
 "display": "Device"
}

entity.what

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>"
}

entity.name

Not Used

entity.role

Not Used

entity.query

Not Used

source.site

De publieke URL van de applicatie waarheen de launch gaat. Bijvoorbeeld: https://module.mijnaanbieder.nl

source.observer

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>"
}

recorded

Timestamp van vastlegging, bijvoorbeeld: 2024-02-05T12:06:13+0000

Send Notification

Veld

Waarde

Event type

Send Notification

FHIR AuditEvent voor Koppeltaal

Transmit Record Lifecycle Event

verantwoordelijke partij

FHIR Resource Provider

type

{
 "system": "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle"
 "code": "transmit"
 "display": "Transmit Record Lifecycle Event"
}

subtype

-

action

E

agent.who

De referentie naar de applicatie die notificatie veroorzaakt, cq de applicatie waar vandaan de notificatie wordt verstuurd.

{
 "reference": "Device/<id|client_id>"
}

agent.type

{
 "coding" : {
  "system": "http://dicom.nema.org/resources/ontology/DCM"
  "code": "110153"   
  "display": "Source Role ID"
 }
}

agent.requestor

false

entity.type

{
 "system": "http://hl7.org/fhir/resource-types",
 "code": "Subscription",
 "display": "Subscription"
}

entity.what

De referentie van de subscription:

{
 "reference": "Subscription/<id>"
}

entity.name

Not Used

entity.role

Not Used

entity.query

Not Used

source.site

Base URL van de applicatie waar het event wordt vastgelegd.

source.observer

De device reference van het device dat het event waarneemt. In dit geval is dat de fhir-resource service.

recorded

Timestamp van vastlegging, bijvoorbeeld: 2024-02-05T12:06:13+0000

Receive Notification

Veld

Waarde

Event type

Receive Notification

FHIR AuditEvent voor Koppeltaal

Transmit Record Lifecycle Event

verantwoordelijke partij

Ontvangende Applicatie

type

{
 "system": "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle"
 "code": "transmit"
 "display": "Transmit Record Lifecycle Event"
}

subtype

-

action

E

agent.who

De referentie naar de applicatie die notificatie ontvangt.

{
 "reference": "Device/<id|client_id>"
}

agent.type

{
 "coding" : {
  "system": "http://dicom.nema.org/resources/ontology/DCM"
  "code": "110152"   
  "display": "Destination Role ID"
 }
}

agent.requestor

false

entity.type

{
 "system": "http://hl7.org/fhir/resource-types",
 "code": "Device",
 "display": "Device"
}

entity.what

De referentie van de ontvanger van notificatie:

{
 "reference": "Device/<id|client_id>"
}

entity.name

Not Used

entity.role

{
 "system": "http://terminology.hl7.org/CodeSystem/object-role",
 "code": "9",
 "display": "Subscriber"
}

entity.query

Not Used

source.site

Base URL van de applicatie waar het event wordt vastgelegd.

source.observer

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>"
}

recorded

Timestamp van vastlegging, bijvoorbeeld: 2024-02-05T12:06:13+0000

Status Change

Veld

Waarde

Event type

Status Change

FHIR AuditEvent voor Koppeltaal

Application Activity

verantwoordelijke partij

Applicatie

type

{
 "system": "http://dicom.nema.org/resources/ontology/DCM"
 "code": "110100"   
 "display": "Application Activity"
}

subtype

{
 "system": "http://dicom.nema.org/resources/ontology/DCM"
 "code": "110120" // of andere code
 "display": "Application Start" // of andere display waarde"
}

action

E

agent.who

De referentie van de applicatie die de status change verstuurt.

{
 "reference": "Device/<id|client_id>"
}

agent.type

{
 "coding" : {
  "system": "http://dicom.nema.org/resources/ontology/DCM"
  "code": "110150"   
  "display": "Application"
 }
}

agent.requestor

true

entity.type

{
 "system": "http://hl7.org/fhir/resource-types",
 "code": "Device",
 "display": "Device"
}

entity.what

De referentie naar de applicatie:

{
 "reference": "Device/<id|client_id>"
}

entity.name

Not Used

entity.role

Not Used

entity.query

Not Used

source.site

Base URL van de applicatie waar het event wordt vastgelegd.

source.observer

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>"
}

recorded

Timestamp van vastlegging, bijvoorbeeld: 2024-02-05T12:06:13+0000

User Authentication

Veld

Waarde

Event type

User Authentication

FHIR AuditEvent voor Koppeltaal

User Authentication

verantwoordelijke partij

Authorization Service

type

{
 "system": "http://dicom.nema.org/resources/ontology/DCM"
 "code": "110100"   
 "display": "Application Activity"
}

subtype

{
 "system": "http://dicom.nema.org/resources/ontology/DCM"
 "code": "110122" // of andere code
 "display": "Login" // of andere display waarde"
}

action

E

agent.who

  1. De referentie naar de applicatie de authenticatie aanvraagt, de module applicatie

    {
     "reference": "Device/<id|client_id>"
    }
  2. (optioneel) De referentie naar de IdP.

agent.type

  1. 110153

    {
     "coding" : {
      "system": "http://dicom.nema.org/resources/ontology/DCM"
      "code": "110153"   
      "display": "Source Role ID"
     }
    }
  2. 110152 (optioneel)

    {
     "coding" : {
      "system": "http://dicom.nema.org/resources/ontology/DCM"
      "code": "110152"   
      "display": "Destination Role ID"
     }
    }

agent.requestor

  1. true

  2. false (optioneel)

entity.type

{
 "system": "http://hl7.org/fhir/resource-types"
 "code": "<ResourceType>"
 "display": "<ResourceType>"
}

entity.what

FHIR reference to Patient / Practitioner:

{
 "reference" : <Patient | Practitioner>/<id>
}

entity.name

Not Used

entity.role

1 of 15 afhankelijk van Patient of Practioner

{

"system": "http://terminology.hl7.org/CodeSystem/object-role"

"code": "1"

"display": "Patient"

}

{

"system": "http://terminology.hl7.org/CodeSystem/object-role"

"code": "15"

"display": "Practitioner"

}

entity.query

Not Used

source.site

Base URL van de applicatie waar het event wordt vastgelegd.

source.observer

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>"
}

recorded

Timestamp van vastlegging, bijvoorbeeld: 2024-02-05T12:06:13+0000



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.

  • C - Creëren van data 

  • R - Lezen van data

  • U - Wijzigen van data

  • D - Verwijderen van Data

  • E - Starten of stoppen van een proces

"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

  • 0: Succes

  • 4: Kleine fout

  • 8: Serieuze fout

  • 12: Fataal

"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:

  • 110150 - Application

  • 110151 - Application Launcher

  • 110152 - Destination Role ID

  • 110153 - Source Role ID

agent.type

1..1

Rol van de gebruiker bij de gebeurtenis van het type ParticipationRoleType, waaronder:

  • 110150 - Application

  • 110151 - Application Launcher

  • 110152 - Destination Role ID

  • 110153 - Source Role ID

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

  • Patient

  • Practitioner

  • Task

  • ....




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:

  • Patient/e7b5f229-8b28-46f7-afef-49cbec94943a

  • Practitioner/d86d79aa-8dea-4bfc-8ea2-a247b9e97a7b

  • Task/c97e2000-e423-401d-9c25-a1b7e65e5b6d

entity.name

0..1

Nadere aanduiding van het betrokken object.

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}

  • No labels