1 of 49

Patientdatalagen i openEHR-baserade system

Presenteras 2022-05-18, 13:30 i sal F2, på Vitalis 2022

Erik Sundvall

Tekn. Dr. Medicinsk informatik, Civ. ing. IT.

Informationsarkitekt @ Datalager och analys, �Stab Vårdstöd och Teknik, Karolinska Universitetssjukhuset

Affiliated researcher @ HIC, LIME, Karolinska Institutet

Adjunct Senior Lecturer @ IMT, Linköping University

2 of 49

Föreläsningsbeskrivning från vitalisprogrammet

En guidad tur i de delar av journalsystemsstandarden openEHR som är extra intressanta vid tillämning av svenska patientdatalagen (PDL).

Under slutet av 2021 genomfördes första fasen av ett samarbetsprojekt mellan leverantörer och vårdgivare fokuserat på hur openEHR kan tillämpas för att stödja uppfyllnad av patientdatalagen på ett leverantöresneutralt och organisationsöverskridande sätt.

Föredraget orienterar lite allmänt om viktiga relaterade strukturer i openEHR och förklarar många av de designval som nu fomaliserats i en gemensam öppet tillgänglig implementationsguide för PDL i openEHR. Under 2022 fördjupas arbetet med ytterligare aspekter, deltagande i projektet är öppet för alla intresserade.

3 of 49

Snabbrepris från Vitalis 2021

2021 hölls ett helt openEHR-spår, mycket finns fortfarande tillgängligt via

https://discourse.openehr.org/t/openehr-vitalis-2021/1512

Eller sök ”Vitalis” på http://openehr.se (diskussionsforum inkl. länkar till material)

4 of 49

Vitalis openEHR-spår 2021

Intro. Några reprisbilder följer snart

Datauttag, sökfrågor med AQL m.m.

Kolla gärna först

för sammanhang

Svensk förvaltning

5 of 49

Omtolkningsproblem – Var och hur komma överens om vad med vem?

EHR = Electronic Health Record = Elektronisk Patientjournal�

T.ex. openEHR �

T.ex. INERAs nuvarande tjänstekontrakt, �HL7 v2 eller HL7 FHIR

T.ex. openEHR �

6 of 49

Omtolkningsproblem, Typ I

Exempel

System A

System B

Typ I�A <-- --> B �Lösbart med algoritm

(kan automatiseras)

Födelsevikt: 3300g�Datum: 1954-03-13

Kroppsvikt: 3,3 kg�Tidpunkt: 13 Mar 1954

7 of 49

Omtolkningsproblem, Typ II

Exempel

System A

System B

Typ II

A --> B�Semantiska förluster och förvrängningar i omtolkningen.�Algoritmiskt�svårlösbart och riskfyllt �(ofta omöjligt)�…men görs ganska ofta manuellt…�…vid varenda överföring/delning…

B --> A�Saknad information kan ibland efterfrågas, kompletteras och omtolkas manuellt av medicinskt kunnig person.�Algoritmiskt olösbart!

Opereras senast: 2018-01-30�Preliminär operationstid: 2018-01-20 15:30�Huvuddiagnos*: 323291000119108 | osteoartrit i vänster höftled |�Övriga diagnoser*: �25343008 | sekundär lokaliserad osteoartros i bäckenregion |�299308007 | smärta i höftled vid rörelse | �Åtgärd*: �33788003 | insättning av total protes eller protetisk utrustning i höft med metylmetakrylat |�Operationstyp**: Lubinus SP II med klack �Önskad anestesi*: 18946005 | epiduralanestesi |�NEWS2-score vid inskrivning: 1�Anestesibedömning:�- Kondition: klarar lättare fysisk träning�- Hjärta/kärl: u.a. (u.a. = utan anmärkning)�- Lungor: u.a.�- Svalg: u.a.�- Mag/tarm*: 162030005 | halsbränna med sur eller vattnig uppstötning

*)  Koder från Snomed CT�**) en särskild typ av höftledsplastik med cement

Operationsdatum: 2018-01-20�Diagnoskod: M167; Annan sekundär koxartros�Operationskod: NFB49; Primär total höftledsplastik med cement�Anestesikod: ZXH50; Epiduralanestesi�ASA-klass: 1 – Frisk patient

 

8 of 49

Omtolkningsproblem , Typ III

Exempel

System A

System B

Typ III

Omöjligt att veta rätt omtolkning om data t.ex. aggregerats (förvanskats) på �olika sätt.

Antal rökta cigaretter per vecka: 6-10�…angivna i ett system med alternativen:�0, 1-5, 6-10, 11-15, 16-30, 31-50, 51-100, 101+

Antal rökta cigaretter per vecka: ?

…angivna i ett system med alternativen:

0, 1-3, 4-7, 8-14, 15-28, 29-69, 70+

9 of 49

Omtolkningsproblem, Typ I, II & III (nu på samma bild)

Exempel

System A

System B

Typ I�A <-- --> B �Lösbart med algoritm

Födelsevikt: 3300g�Datum: 1954-03-13

Kroppsvikt: 3,3 kg�Tidpunkt: 13 Mar 1954

Typ II

A --> B�Semantiska förluster och förvrängningar i omtolkningen.�Algoritmiskt�svårlösbart och riskfyllt �(ofta omöjligt)�…men görs ganska ofta manuellt

B --> A�Saknad information kan ibland efterfrågas, kompletteras och omtolkas manuellt av medicinskt kunnig person.�Algoritmiskt olösbart!

Opereras senast: 2018-01-30�Preliminär operationstid: 2018-01-20 15:30�Huvuddiagnos*: 323291000119108 | osteoartrit i vänster höftled |�Övriga diagnoser*: �25343008 | sekundär lokaliserad osteoartros i bäckenregion |�299308007 | smärta i höftled vid rörelse | �Åtgärd*: �33788003 | insättning av total protes eller protetisk utrustning i höft med metylmetakrylat |�Operationstyp**: Lubinus SP II med klack �Önskad anestesi*: 18946005 | epiduralanestesi |�NEWS2-score vid inskrivning: 1�Anestesibedömning:�- Kondition: klarar lättare fysisk träning�- Hjärta/kärl: u.a. (u.a. = utan anmärkning)�- Lungor: u.a.�- Svalg: u.a.�- Mag/tarm*: 162030005 | halsbränna med sur eller vattnig uppstötning

*)  Koder från Snomed CT�**) en särskild typ av höftledsplastik med cement

Operationsdatum: 2018-01-20�Diagnoskod: M167; Annan sekundär koxartros�Operationskod: NFB49; Primär total höftledsplastik med cement�Anestesikod: ZXH50; Epiduralanestesi�ASA-klass: 1 – Frisk patient

 

Typ III�Omöjligt att veta rätt omtolkning om data t.ex. aggregerats (förvanskats) på olika sätt.

Antal rökta cigaretter per vecka: 6-10�…angivna i ett system med alternativen:�0, 1-5, 6-10, 11-15, 16-30, 31-50, 51-100, 101+

Antal rökta cigaretter per vecka: ?

…angivna i ett system med alternativen:

0, 1-3, 4-7, 8-14, 15-28, 29-69, 70+

10 of 49

Omtolkningsproblem – Var och hur komma överens om vad med vem?

Typ I kan �lösas bl.a. här

Typ II & III måste �lösas här �löser även typ I

Typ II & III måste �lösas här �löser även typ I

Gemensam tolkning av hur PDL-stöd representeras via openEHR i systemen

Exempel på medverkan i svenska openEHR-förvaltningens PDL-arbetsgrupp hitills

���(ännu fler leverantörer och vårdgivare är med i generella openEHR-förvaltningen)

Erfarenheter från PDL i VGR via deltagande från Mollyware AB

11 of 49

PDL – Patientdatalagen

12 of 49

This caregiver/region

This Ward/division

Other caregivers/regions

Active choice by staff

Active choice by staff + Patient consent

13 of 49

Region X

Region Y

Emergency Ward

Geriatric ward

Active choice by staff

Consent

Patient chosen block/lock

+ Hälsoärende, vårdepisod

(similar to Contys’ Healthcare matters)

14 of 49

Region X

Region Y

Emergency Ward

Geriatric ward

Active choice by staff

Consent

Patient chosen block/lock

+ Hälsoärende, vårdepisod

(similar to Contys’ Healthcare matters)

15 of 49

Bra exempel på PDL-implementation med flera vårdgivare i ett system

16 of 49

17 of 49

Användbara tolkningar 🡪 rimlig användarupplevelse

  • Hos VGR (m.fl.) gäller samtycke till sammanhållen journalföring i 30 dagar.
  • Generellt: Patientens samtycke gäller all personal (med vårdrelation) på den vårdenheten som samtycket ges till. �(Kollega på avdelningen behöver alltså inte fråga en gång till om någon annan redan fått samtycke.)
  • Individuella aktiva val krävs fortfarande för att se detaljer (även efter patientens samtycke), men kan vara naturlig del av navigation (behöver alltså inte vara irriterande ja/nej-dialogruta).

18 of 49

Svensk implementationsguide för PDL i openEHR-baserade system

Framtagen genom samarbete mellan flera leverantörer och vårdgivare

19 of 49

PDL-relaterade implementationsguider från SFMIs openEHR-förvaltning (koordinator):

  1. PDL i openEHR och HSA/Org.nr.-guide�Redo för test-användning�Erik Sundvall

Frågor i AQL är ett exempel på del av lösningsmönster �(t.ex. ”WHERE-clause inject” respektive parametriserade lagrade AQL-frågor)

Testa!

20 of 49

21 of 49

PDL-relaterade delar �& designval i openEHR

…och samtidigt en guidning i:

referensmodell (RM), arketyper, templates (mallar) och frågespråket AQL.

https://openehr.org/

22 of 49

Archetypes (arketyper)�Återanvändbara dokumentationsmönster

Template (mall)�Specifik för ett användningsfall.�Kombinerar och konfigurerar flera arketyper.

Form (formulär/gränssnitt)�Automatiskt genererat från template, sedan manuellt justerat

23 of 49

”Adoptera” de arketyper du vill följa diskussioner för och t.ex. få inbjudan till review för.

Stöder olika språk. Flera arketyper finns redan på svenska.

Ordentlig Sökfunktion

Begränsad namnsökning

Versionshistorik

En ”arketyp”

”Template” (mall) väljer ut & anpassar från arketyper, exempelvis:

= inmatning/datafångst

= ställer in passande default-värde (kan ändras vid behov)�utan pil = fält som inte behövs i just detta exempel/användningsfall, syns då ej i formulär m.m.

24 of 49

25 of 49

Archetypes (arketyper)�Återanvändbara dokumentationsmönster

Template (mall)�Specifik för ett användningsfall.�Kombinerar och konfigurerar flera arketyper.

Form (formulär/gränssnitt)�Automatiskt genererat från template, sedan manuellt justerat

26 of 49

  • ”Legobitar” från referensmodellen (RM)…
  • …sätts ihop, namnges och konfigureras, med hjälp av arketyper och en template.

”Cluster”

PDL-organisationer

Se senare bilder…

Denna generella bild från en openEHR-specifikation matchar

inte exakt det specifika akutmalls-exemplet till vänster

27 of 49

Figure 20. High-level Structure of the openEHR EHR

28 of 49

29 of 49

30 of 49

31 of 49

Vårdenhetens namn

32 of 49

Vårdenhetens ID

33 of 49

Vårdenhetens ID

34 of 49

Notera:

Attributet ”id” syns inte i editorn…

…eftersom det brukar sättas i runtime,

inte begränsas/konfigureras i template

Vårdenhetens ID

35 of 49

Vårdenhet

Roll

36 of 49

Vårdgivare…

…id

…namn

…roll

37 of 49

AQL som filter för tillgång & spärr?

38 of 49

Namn

Org nr �(för enskild firma = PNR)

HSA-id

Funktion i exempel

Stockholms läns sjukvårdsområde

232100-0016

SE2321000016-2GJS*

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 (spärrexempel)

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 (spärrexempel)

Annas Medicinska Fotvård EN

790127-1111

Vårdgivare (Enskild firma)

Annas Medicinska Fotvård

SE2321000016-DGM2

“Vårdenhet”

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

  • care_unit.t.json - En “cluster”-template för Vårdenhet inklusive Vårdgivare som “Parent organisation”, baserad på två nästlade instanser av arketypen “Organisation”)
  • PDL-test-1.t.json - Ett sammansatt litet exempel med en “composition“-arketyp för pulsmätning som även inkluderar ovanstående “care_unit.t.json”-template)

*) Får gärna anges, men behöver ej anges

39 of 49

Demo i frågeverktyg

Reservbilder - körs sannolikt live på Vitalis om inget strular

40 of 49

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

41 of 49

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

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

42 of 49

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

       AND

      (cu_role = "43741000" AND cu/items[at0003]/value/id = "SE2321000016-1003" ) -- vårdenhetsfilter

OFFSET 0 LIMIT 10

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…

43 of 49

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 SLSO

       AND

      (cu_role = "43741000" AND NOT cu/items[at0003]/value/id matches {'SE2321000016-15FL', 'SE2321000016-1K54'} ) -- spärrlista vårdenheter

Om vi söker med på hela vårdgivaren “Stockholms läns sjukvårdsområde“ men en lista med spärrade vårdenheter (beroendekliniken och gyn) också anges så ser “WHERE” delen av frågan ut så här…

44 of 49

Vid sammanhållen journalföring (alltså alla samverkande vårdgivare) och samma spärrlista så ser “WHERE” delen av frågan ut så här…

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 = care unit)

            CONTAINS CLUSTER cp[openEHR-EHR-CLUSTER.organisation.v0] -- vårdgivare (cp = care provider) nästlad som "parent organisation"

    )

WHERE pulse_rate > 10 --  exempel på kliniskt villkor för dataurval

       AND

     (cu_role = "43741000" AND NOT cu/items[at0003]/value/id matches {'SE2321000016-15FL', 'SE2321000016-1K54'}) -- spärrlista vårdenheter

45 of 49

Fortsatt arbete

46 of 49

PDL-relaterade implementationsguider från SFMIs openEHR-förvaltning (koordinator):

  1. PDL i openEHR och HSA/Org.nr.-guide�Redo för test-användning�Erik Sundvall

Frågor i AQL är ett exempel på del av lösningsmönster �(t.ex. ”WHERE-clause inject” respektive parametriserade lagrade AQL-frågor)

Testa!

Exempel på medverkan i svenska

openEHR-förvaltningens PDL-arbetsgrupp hitills

fler än dessa är med i generella openEHR-förvaltningen

Erfarenheter från PDL i VGR via deltagande från Mollyware AB

47 of 49

SFMIs openEHR-utbildning, del 1, 2 & 4 finns på YouTube

  1. Introduktion till openEHR (video 2h 45m inkl. diskussion)
  2. Modellering med openEHR – teori (video 2h 40m grund + 30m diskussion)
  3. Modellering med openEHR – praktik, körs lämpligen i repris live, lokalt/fysiskt
  4. Teknik, applikationsutveckling och arkitektur (video 2h grund + 45m diskussion)

4

För utvecklare, integratörer, leverantörer, IT-arkitekter, och andra som vill veta mer om de tekniska förutsättningarna i openEHR

  • Fristående från tillfälle 2 så delar därifrån repeteras, med teknisk vinkling

3

För informatiker och terminologer och dem som skapar och underhåller sökordsmallar etc. i vård-IT-system.

🡨 Övningar med dator

1

Allmän orientering om openEHR för beslutsfattare, nybörjare inom openEHR, och för den som vill få en samlad bild eller uppdatering av vad som händer inom området.

#1 är förkunskapskrav inför #2 och #4

2

För kliniker, forskare och andra som behöver välstrukturerad, detaljerad data. Den vänder sig även till informatiker, terminologer och personer som skapar och underhåller sökordsmallar i vård-IT-system.

#2 är förkunskapskrav inför #3

Videoinspelningar och presentationer finns gratis tillgängliga:

https://discourse.openehr.org/t/digital-utbildningsserie-om-openehr-nov-2020-jan-2021/1105

Genväg till svenska delen av openEHRs diskussionsforum:

http://openehr.se

48 of 49

Referenser + mer om openEHR

Fördjupningstips SFMIs openEHR-utbildningar och Vitalis-tema 2021 (video + PPT/PDF)

49 of 49

openEHR-relaterade saker (kvar) på Vitalis 🡪��Tack för att ni lyssnade!��Frågor? Diskussion!��Erik Sundvall, erik.sundvall@regionstockholm.se

Genväg till svenska delen av openEHRs diskussionsforum:

http://openehr.se