Introduktion

En viktig aspekt av att utvärdera åtkomst till patientinformation är att rätt metadata finns sparad i den. Utvärdering av åtkomst utgår från läsarens kontext (varifrån det läses och i vilket syfte) samt patientinformationens kontext (vilken organisation eller process den tillhör). Mer information om regelutvärdering vid åtkomst till patientinformation finns i Ineras dokument Behörighetsmodell för vård och omsorg som nedanstående illustration är hämtad från.

Alla journalanteckningar i openEHR lagras inuti objektstrukturer av typen COMPOSITION. Förenklat kan man se COMPOSITION som en sorts “kuvert” eller dokumenthuvud med kontextuell information.

Krav

Nedan listas alla de krav som ställs av denna implementationsguide på lagring av PDL-relaterade grundattribut.

Krav-ID

Beskrivning

Fördjupnings-avsnitt

COMPOSITION.contextEVENT_CONTEXT.other_context MÅSTE ange vårdenhet och vårdgivare som ska användas för utvärdering av åtkomst ur PDL-perspektiv.

Lagring av vårdenhet och vårdgivare

COMPOSITION.contextEVENT_CONTEXT.other_context MÅSTE innehålla template …

COMPOSITION.contextEVENT_CONTEXT.health_care_facility BÖR ange den mest specifika enheten där vården bedrivs, om sådan finns, annars MÅSTE vårdenhet anges.

Lagring av den mest specifika enheten

COMPOSITION.contextEVENT_CONTEXT.health_care_facility FÅR INTE användas för utvärdering av åtkomst ur PDL-perspektiv.

Lagring av den mest specifika enheten

Information från olika vårdenheter FÅR INTE journalföras inom ramen för samma COMPOSITION vid ett och samma tillfälle om de ur PDL-synpunkt borde ha journalförts hos olika vårdenheter.

Dokumentation gemensam för flera vårdenheter (eller vårdgivare)

Flera ENTRY-objekt (t.ex. mätvärden) från olika vårdenheter FÅR INTE blandas i samma COMPOSITION-version om de ur PDL-synpunkt borde ha journalförts hos olika vårdenheter.

Dokumentation gemensam för flera vårdenheter (eller vårdgivare)

COMPOSITION.contextEVENT_CONTEXT.health_care_facility som anger den specifika enheten MÅSTE ha en identifierare angiven som ett element i listan PARTY_IDENTIFIED.identifiers.

Fördjupning

Lagring av vårdenhet och vårdgivare

Följande attribut från openEHR är aktuella för att utvärdera åtkomst ur PDL-perspektiv:

Lagring av den mest specifika enheten

Den mest specifika enheten där vården bedrivs anges separat och används ofta som information i användargränssnitt.

Förväxlingsrisker

Andra relaterade fält i openEHR vars funktion inte används för utvärdering av åtkomst enligt PDL och som inte ska förväxlas med ovanstående är exempelvis:

Diagram och klassbeskrivningar

I nedanstående UML-diagram och klassbeskrivningar är viktiga delar för PDL-hanteringen markerade med gul överstrykning. Hur de används för PDL beskrivs i avsnitten efteråt.

Källa: https://specifications.openehr.org/releases/RM/latest/ehr.html#_ehr_information_model.
Notera att PARTY_IDENTIFIED, PARTY_PROXY och PARTICIPATION detaljeras mer i nästa bild.


Källa: https://specifications.openehr.org/releases/RM/latest/common.html#_common_information_model

Källa: https://specifications.openehr.org/releases/RM/latest/data_types.html#_overview_3

Dokumentation gemensam för flera vårdenheter (eller vårdgivare)

Fördjupning om Vårdgivare och Vårdenhet

Det MÅSTE gå att ta reda på hos vilken Vårdenhet och Vårdgivare en COMPOSITION skapades (avseende PDL-tillämpning). Implementationsguiden styr/begränsar inte hur Vårdenhet och Vårdgivare enligt HSA sparas och tillämpas inuti ett enskilt openEHR-baserat system utan beskriver istället via vilka logiska sökvägar i en COMPOSITION informationen om vårdgivare/vårdenhet MÅSTE kunna nås om den exporteras (t.ex. bulkexport vid systembyte eller arkivering) eller om den exponeras via API till externa system (t.ex. via anropen /ehr/{ehr_id}/composition eller /query/... i openEHRs officiella REST-API. Internt FÅR detta tekniskt lösas på valfritt sätt, exempelvis genom att:

På liknande sätt kan vårdgivarens och vårdenhetens namn tekniskt sett slås upp i en versionshanterad katalog (istället för att lagras) om den som designar systemet så önskar, men vid data export samt exponering via API MÅSTE namnen kunna nås via de nedan beskrivna logiska sökvägarna.

När Vårdenhet och Vårdgivare i en COMPOSITION exponeras/exporteras så MÅSTE informationen logiskt sett ligga i nästlade instanser av arketypen openEHR-EHR-CLUSTER.organisation.v0 som läggs under attributet i COMPOSITION.contextEVENT_CONTEXT.other_context. Vid tidpunkten för skapande av denna implementationsguide så pågår internationell review av organisation-arketypen, men den anses vara lämplig för det här användningsfallet. Den senaste svenska översättningen ligger i en “branch” på https://ckm.openehr.org/ckm/archetypes/1013.1.6158

Organisation-arketypen används dels för vårdenhet och dels en gång till nästlad inuti vårdenheten under attributet “Överordnad organisation” för att även beskriva vårdgivaren, se bild nedan.

Vårdenhet

Vårdgivare

Exempel på grundattribut och mallar/templates

Exempelmallar (templates) finns i https://github.com/modellbibliotek/Arbetsyta-openEHR/tree/master/local i form av filerna

Värden från tabellen nedan används i efterföljande exempel. Kursiverade uppgifter i tabellen är påhittade.

Namn

Org nr
(för enskild firma = PNR)

HSA-id

Funktion

Stockholms läns sjukvårdsområde

232100-0016

SE2321000016-2GJS
(Behöver ej anges, men har angetts i ett exempel nedan)

Vårdgivare

Brandbergens vårdcentral

SE2321000016-1003

Vårdenhet (Vårdcenral)

Distriktssköterskemottagning (vid Brandbergens vårdcentral)

SE2321000016-14LF

Den mest specifika enheten

Täby Vårdcentral

SE2321000016-150H

Vårdenhet (Vårdcenral)

Beroendecentrum Stockholm

SE2321000016-15FL

Vårdenhet

Namy Nursington

SE2321000016-7ABC

Distriktssköterska
(“Composer” ansvarig för journalanteckningen)

Urban Uskman

SE2321000016-1CBA

Undersköterska (medverkade)

Danderyds Sjukhus AB

556575-6169

SE2321000016-1K2W

Vårdgivare

Ortopedkliniken
(vid Danderyds Sjukhus AB)

SE2321000016-1K6Q

Vårdenhet

Vårdavdelning 14 gynekologi
(vid Danderyds Sjukhus AB)

SE2321000016-1K54

Vårdenhet

Annas Medicinska Fotvård EN

790127-1111

Vårdgivare (Enskild firma)

Annas Medicinska Fotvård

SE2321000016-DGM2

“Vårdenhet”

Anna Nnamn

SE2321000016-2222

Fotvårdsterapeut

Exemplet nedan är i ett av openEHRs förenklade format: structSDT genererat via EhrScape https://www.ehrscape.com/api-explorer.htmlBehöver uppdateras om strukturändringsförslaget 2022-02-08 genomförs

OLD INVALID EXAMPLE!!!
{
  "pdl-test-1": {
    "_uid": [
      "e34ef1a9-7994-48cd-b1e5-d7481648b8e8::stockholm.ehrscape.com::1"
    ],
    "language": [
      {
        "|code": "en",
        "|terminology": "ISO_639-1"
      }
    ],
    "territory": [
      {
        "|code": "en",
        "|terminology": "ISO_3166-1"
      }
    ],
    "context": [
      {
        "care_provider": [
          {
            "name": [
              "Stockholms läns sjukvårdsområde"
            ],
            "identifier": [
              {
                "|id": "232100-0016",
                "|type": "urn:oid:2.5.4.97"
              }
            ],
            "role": [
              {
                "|code": "1.2.752.29.6.10",
                "|value": "Vårdgivare",
                "|terminology": "urn:oid"
              }
            ]
          }
        ],
        "care_provider_subunit": [
          {
            "name": [
              "Brandbergens vårdcentral"
            ],
            "identifier": [
              {
                "|id": "SE2321000016-1003",
                "|type": "urn:oid:1.2.752.29.4.19"
              }
            ],
            "role": [
              {
                "|code": "1.2.752.29.6.13",
                "|value": "Vårdenhet",
                "|terminology": "urn:oid"
              }
            ]
          }
        ],
        "start_time": [
          "2021-12-21T01:19:46.693335+01:00"
        ],
        "setting": [
          {
            "|code": "238",
            "|value": "other care",
            "|terminology": "openehr"
          }
        ]
      }
    ],
    "pulse_heart_beat": [
      {
        "any_event": [
          {
            "rate": [
              {
                "|magnitude": 99,
                "|unit": "/min"
              }
            ],
            "time": [
              "2021-12-21T01:19:46.693335+01:00"
            ]
          }
        ],
        "method": [
          {
            "|code": "at1033",
            "|value": "Auscultation",
            "|terminology": "local"
          }
        ],
        "body_site": [
          {
            "|code": "at1038",
            "|value": "Radial Artery - Left",
            "|terminology": "local"
          }
        ],
        "language": [
          {
            "|code": "en",
            "|terminology": "ISO_639-1"
          }
        ],
        "encoding": [
          {
            "|code": "UTF-8",
            "|terminology": "IANA_character-sets"
          }
        ]
      }
    ],
    "category": [
      {
        "|code": "433",
        "|value": "event",
        "|terminology": "openehr"
      }
    ],
    "composer": [
      {
        "|name": "regionstockholm"
      }
    ]
  },
  "ctx": {
    "generic_fields": {}
  }
}

Exemplet nedan är ett manuellt redigerat (ofärdigt och overiferat) exempel som avser visa mer om composer, health_care_facility, participation samt en vårdgivare som angett ett extra HSA-id utöver det obligatoriska organisationsnumret.

Behöver uppdateras om strukturändringsförslaget 2022-02-08 genomförs

OLD INVALID EXAMPLE!!!
{
  "ctx/language": "sv",
  "ctx/territory": "SE",
  "ctx/composer_name": "Namy Nursington", 
  [TODO: +ID?]
  "ctx/id_namespace": "HOSPITAL-NS",
  "ctx/id_scheme": "HOSPITAL-NS",
  "ctx/participation_name": "Urban Uskman",
  [TODO: +ID?]
  "ctx/participation_function": "performer",
  "ctx/participation_mode": "face-to-face communication",
  "ctx/participation_id": "198",
  "ctx/health_care_facility|name": "Distriktssköterskemottagning, Brandbergens vårdcentral",
  "ctx/health_care_facility|id": "SE2321000016-14LF",
  "pdl-test-1": {
    "context": [
      {
        "care_provider": [
          {
            "name": [
              "Stockholms läns sjukvårdsområde"
            ],
            "identifier": [
              {
                "|id": "232100-0016",
                "|type": "urn:oid:2.5.4.97"
              }
              {
                "|id": "SE2321000016-2GJS",
                "|type": "urn:oid:1.2.752.29.4.19"
              }         
            ],
            "role": [
              {
                "|code": "urn:oid:1.2.752.29.6.10",
                "|value": "Vårdgivare"
              }
            ]
          }
        ],
        "care_provider_subunit": [
          {
            "name": [
              "Brandbergens vårdcentral"
            ],
            "identifier": [
              {
                "|id": "SE2321000016-1003",
                "|type": "urn:oid:1.2.752.29.4.19"
              }
            ],
            "role": [
              {
                "|code": "1.2.752.29.6.13",
                "|value": "Vårdenhet"
              }
            ]
          }
        ]
      }
    ],
    "pulse_heart_beat": [
      {
        "any_event": [
          {
            "rate": [
              {
                "|magnitude": 112,
                "|unit": "/min"
              }
            ]
          }
        ],
        "method": [
          {
            "|code": "at1032"
          }
        ],
        "body_site": [
          {
            "|code": "at1038"
          }
        ]
      }
    ]
  }
}

Filtrering och utvärdering baserat på lagrade grundattribut och spärrar

Bakgrundsmaterial från Inera om spärrtjänster: “SAD - Spärr” samt “Användarhandbok Spärradministration”.

Tabellen nedan och dess ID/radnummer används för att klargöra de omfång som olika AQL-frågor gäller. (Se bakgrundskapitlet för mer information om omfång och spärrar.)

ID

Förutsättningar på att öka omfång

Exempel på fråga

00

Information ej kräver aktivt val

Finns dokument för patienten där vårdenhet är samma som användarens vårdenhet?

01

Aktivt val för att få se vart ytterligare ospärrad information finns inom vårdgivaren

Finns det för patienten ospärrade vårdenheter med dokument inom vårdgivaren, där vårdenheten inte är användarens vårdenhet men vårdgivaren är användarens vårdgivare?

02

Aktivt val för att visa information inom vårdgivaren

Vilka dokument finns baserat på ett urval av ospärrade vårdenheter, där vårdgivaren är användarens vårdgivare?

03

Aktivt val för att få se att det finns spärrad information inom vårdgivaren

Finns det för patienten spärrade vårdenheter med dokument inom vårdgivaren, där vårdenheten inte är användarens vårdenhet men vårdgivaren är användarens vårdgivare?

04

  1. Hävning av spärr inom vårdgivare med patientens samtycke registreras.

  2. Hävning av spärr på grund av rådande nödsituation.

N/A

05

Aktivt val att visa vald spärrad information inom vårdgivaren

Vilka dokument finns baserat på ett urval av spärrade vårdenheter, där vårdgivaren är användarens vårdgivare?

06

Aktivt val för att få se att det finns ospärrade uppgifter hos annan vårdgivare

Finns det för patienten ospärrade vårdenheter med dokument inom en vårdgivare, där vårdgivaren inte är användarens vårdgivare?

07

Kontroll att Samtycke till Sammanhållen Journalföring existerar för patient. Om detta ej finns så måste ett samtycke inhämtas och registreras för patienten.

N/A

08

Aktivt val för att visa valda ospärrade uppgifter inom annan vårdgivare

Vilka dokument finns baserat på ett urval av ospärrade vårdenheter hos annan vårdgivare?

09

Aktivt val att visa hos vilka andra vårdgivare det finns spärrade uppgifter för en patient

Finns det för patienten spärrade vårdenheter med dokument inom en vårdgivare, där vårdgivaren inte är användarens vårdgivare?

10

Registrera att vårdapplikationen har visat vilka vårdgivare som har spärrad information för patienten vid rådande nödsituation. Det krävs även ett aktivt samtycke för att visa vårdenheter hos en annan vårdgivare.

N/A

11

Kontakt behöver tas och den andra vårdgivaren kan, efter egen bedömning, välja att häva spärren tillfälligt. Försök att hämta informationen kan då göras på nytt

N/A

12

Passera samtycke till sammanhållen journalföring på grund av rådande nödsituation

N/A

13

Sammanslagning av 00, 01, 03, 06, 09

Hämta alla vårdenheter där patienten har dokument, segmentera dessa vårdenheter enligt VE, VG, SJF utifrån användarens medarbetareuppdrag.

Varje vårdenhet behöver annoteras med om den är spärrad eller ej.

14

Sammanslagning/förenkling av 00, 02, 05, 08

Vilka dokument finns baserat på ett urval av vårdenheter?

AQL-fråga och svar behöver uppdateras om strukturändringsförslaget 2022-02-08 genomförs

Sammanhang och förutsättningar

Vi beskiver inte engegemansindex här… utan tittar främst på en enskild CDR (jfr VGRs bild och funktion) där det kan finnas data från flera vårdgivare (dock sannolikt långt ifrån alla som har info om denna patient)

Spärrtjänst anropas - det man får som svar är en lista på HSAIDn som representerar spärrade enheter och vårdgivare samt typ av spärr (inre resp yttre spärr)

informationCareUnitId

HsaId

Anger HSA-id för den vårdenhet som informationen tillhör. Anges ej för yttre spärrar.

0..1

informationCareProviderId

HsaId

Anger HSA-id för den vårdgivare som informationen tillhör.

1

blockType

BlockTypeType

Enumerationsvärde som anger om spärren är en inre (inom vårdenhet) eller yttre (inom vårdgivare).

1

Värdemängd för BlockTypeType

"Inner"

Representerar en inre spärr (inom vårdenhet).

"Outer"

Representerar en yttre spärr (inom vårdgivare).

Den inre spärren (för en vårdenhet) blir automatiskt även en yttre spärr

https://rivta.se/tkview/#/domain/informationsecurity:authorization:blocking

Konstruera lista till AQL-filtrering och till GUI som listar spärrlista

Nedanstående exempel på AQL-sökfråga söker fram alla pulsmätningar som passerar tillgångsfiltreringen baserad på vårdgivare eller vårdenhet.

Förprocessning

Spärrtjänsten returnerar (informationCareUnitId, informationCareProviderId, blockType)

Förprocessning av svar från spärrttjänsten krävs för att välja ut vilka enheter i denna CDR som är spärrade

Variabler/variabellistor som kommer ut ur förprocessning

Notera att varken care_unit_of_user eller care_provider_of_user får finnas i spärrlistorna efter förprocessningen, om de är listade av spärrtjänsten måste de alltså tas bort ur listan innan den infogas i AQL-frågan.

*) omvandlad till organisationsnummer (kan ha varit HSA-ID som input från tjänsten)

Varning: Den förenklade (relativt effektiva) lösningen nedan förutsätter att blocked_care_unit är globalt unik, alltså att exakt samma vårdenhets-id inte får finnas hos mer än en vårdgivare. Om man t.ex. använder HSA-ID så stämmer detta automatiskt. Om det inte är unikt behöver någon annan typ av filtrering läggas till, t.ex. en mer avancerad AQL-fråga eller efterprocessning.
TODO: Sannolikt kommer vi ändra text i tidigare avsnitt och kräva globalt unika vårdenhets-id

En öppen fråga som letar pulsmätningar över 10 slag/minut utan PDL-koll alls, visar den totala mängden matchande exempel i testdatabasen:

Om patienten inte har några spärrar alls så motsvarar detta fall 02, där allt hos vårdgivaren “Stockholms läns sjukvårdsområde“ listas:

SELECT obs/data[at0002]/events[at0003]/data[at0001]/items[at0004]/value/magnitude AS pulse_rate,
       cu/items[at0001]/value AS cu_name,
       cu/items[at0003]/value AS cu_id,
       cu/items[at0004]/value/defining_code/code_string AS cu_role,
       cp/items[at0001]/value AS cp_name,
       cp/items[at0003]/value AS cp_id,
       cp/items[at0004]/value/defining_code/code_string AS cp_role
FROM EHR e
CONTAINS COMPOSITION c[openEHR-EHR-COMPOSITION.encounter.v1] 
    CONTAINS (
        OBSERVATION obs[openEHR-EHR-OBSERVATION.pulse.v2] -- exempel på klinisk data
        AND
        CLUSTER cu[openEHR-EHR-CLUSTER.organisation.v0]  -- Vårdenhet (cu)
            CONTAINS CLUSTER cp[openEHR-EHR-CLUSTER.organisation.v0] -- vårdgivare (cp) nästlad som "parent organisation"
    ) 
WHERE   pulse_rate > 10 --  exempel på kliniskt villkor för dataurval
        AND
        (cp_role = "143591000052106" AND cp/items[at0003]/value/id = "232100-0016" ) -- vårdgivarfilter
OFFSET 0 LIMIT 10

Vilket ger nedanstående svar, där vi även har valt detaljerad vy i frågeverktygets gränssnitt för att även visa identifierarnes typ:

Fall 00: …och om “vårdenhetsfiltret” också läggs till och sätts till “Brandbergens vårdcentral“ så ser “WHERE” delen av frågan ut så här…

WHERE pulse_rate > 10 --  exempel på kliniskt villkor för dataurval
       AND
      (cp_role = "143591000052106" AND cp/items[at0003]/value/id = "232100-0016" ) -- vårdgivarfilter
       AND
      (cu_role = "43741000" AND cu/items[at0003]/value/id = "SE2321000016-1003" ) -- vårdenhetsfilter

…vilket ger följande urval:

och samma resultat i verktygets “raw”-format

[
    {
        "pulse_rate": 93,
        "cu_name": {
            "@class": "DV_TEXT",
            "value": "Brandbergens vårdcentral"
        },
        "cu_id": {
            "@class": "DV_IDENTIFIER",
            "id": "SE2321000016-1003",
            "type": "urn:oid:1.2.752.29.4.19"
        },
        "cu_role": "43741000",
        "cp_name": {
            "@class": "DV_TEXT",
            "value": "Stockholms läns sjukvårdsområde"
        },
        "cp_id": {
            "@class": "DV_IDENTIFIER",
            "id": "232100-0016",
            "type": "urn:oid:2.5.4.97"
        },
        "cp_role": "143591000052106"
    },
    {
        "pulse_rate": 94,
        "cu_name": {
            "@class": "DV_TEXT",
            "value": "Brandbergens vårdcentral"
        },
        "cu_id": {
            "@class": "DV_IDENTIFIER",
            "id": "SE2321000016-1003",
            "type": "urn:oid:1.2.752.29.4.19"
        },
        "cu_role": "43741000",
        "cp_name": {
            "@class": "DV_TEXT",
            "value": "Stockholms läns sjukvårdsområde"
        },
        "cp_id": {
            "@class": "DV_IDENTIFIER",
            "id": "232100-0016",
            "type": "urn:oid:2.5.4.97"
        },
        "cp_role": "143591000052106"
    }
]