Sida: 1 (13) NKRR Regelskrivning i praktiken
Innehåll Sida: 2 (13) 1 Inledning... 3 1.1 Förkortningar och begrepp... 3 2 Ändringshistorik för dokumentet... 4 3 Bakgrund... 5 3.1 Regler i NKRR... 5 3.2 Informationsspecifikation... 5 3.2.1 Klasser... 5 3.2.2 Attribut... 6 3.3 Från informationsspecifikation till regel i NKRR... 6 3.3.1 Klasser - tjänstekontrakt i operatorn datakälla... 6 3.3.2 Attribut i klass - fält som adresseras i regeln... 6 4 Exempel... 8 4.1 Beslutsdatum för välgrundad misstanke om cancer... 8 4.1.1 Informationsspecifkation... 8 4.1.2 Skapa regel... 9 4.1.3 Rapport sammanställning regler... 10 4.2 Screeningupptäckt... 11 4.2.1 Informationsspecifikation... 11 4.2.2 Skapa regel... 12 4.2.3 Rapport sammanställning regler... 13
1 Inledning Sida: 3 (13) Detta dokument innehåller exempel hur du kan skapa regler i NKRR med informationsspecifikationen som utgångspunkt. Dokumentet riktar sig främst till dig som ska skriva regler i NKRR och förutsätter att du har en grundläggande SQL-kunskap. Dokumentet kan dock vara intressant även för andra roller, exempelvis för att få en förståelse för hur informationsspecifikationen används vid regelskrivning. Andra dokument som kan vara till hjälp är Användarhandbok NKRR som du når efter att ha loggat in i användargränssnittet. Dokumentet börjar med en kort introduktion om regler, operatorer och uttryck i NKRR samt mappning mellan klasser som anges i informationsspecifikationen och gällande tjänstekontrakt respektive attribut i klasserna och vanligaste fält i aktuellt tjänstekontrakt vilka adresseras vid regelskrivningen. Tanken är att detta inledande avsnitt ska kunna användas som ett stöd vid regelskrivningen. Observera att de delar som används från informationsspecifikation kan ha korrigerats för att underlätta exemplen i detta dokument. Syftet är inte att ta fram facit för dessa regler, utan att illustrera praktisk regelskrivning. 1.1 Förkortningar och begrepp Begrepp NKRR Tjänstekontrakt Beskrivning Nationell kvalitetsregisterrapportering. Teknisk lösning för att kunna tillhandahålla information anpassad för respektive registers frågeställning via ett tjänstegränssnitt på den nationella tjänsteplattformen. Specifikation av ett tekniskt meddelande format för att kunna överföra en viss informationsmängd. Tjänstekontraktsbeskrivning Beskrivning av tjänstekontrakt. Aktuella tjänstekontraktsbeskrivningar finns att hämta på http://rivta.se/ Operator Sammansatt fält NI En regelkomponent som var för sig bestämmer och sållar ut den information som regeln i helhet ska söka ut. Flera operatorer bygger tillsammans upp en regel. Ett fält med kardinalitet 0..* eller 1..*, dvs. fältet kan förekomma noll till många eller en till många gånger. Sammansatt fält kan jämföras med en lista som itereras igenom med hjälp av For eller ForEach. Nationell informationsstruktur. Generell referensmodell från Socialstyrelsen. För mer information se http://www.socialstyrelsen.se/nationellehalsa/nationellinformationsstruktur.
Sida: 4 (13) 2 Ändringshistorik för dokumentet Utgåva Datum Författare Kommentar 1.0 2018-01-26 Eva Biberg Första versionen
3 Bakgrund 3.1 Regler i NKRR Syftet med regler i NKRR är att specificera hur ett svar på en fråga i ett kvalitetsregister ska ges utifrån tillgänglig vårddata för en patient. Vanligtvis förekommer en regel för varje registervariabel eller fråga. Sida: 5 (13) För att formulera en regel används olika operatorer som semantiskt liknar SQL samt deras uttryck. Syftet med uttrycken är ange hur inhämtad vårddata ska filtreras och användas. Nedanstående bild visar tillgängliga operatorer samt ger en överblick över deras funktion (filtrering eller beräkning) och kategori (inledande, mellanliggande eller avslutande operator). Skriptnod kan dock även användas som en avslutande operator och ange ett svar i form av en sträng om den placeras sist i en regel. För att även ge en överblick hur de olika operatorerna används görs en mappning till den SQLfunktionalitet som respektive operatorer kan liknas vid. 3.2 Informationsspecifikation Som underlag för regelskrivning har vi informationsspecifikation för aktuellt register. I informationsspecifikationen beskrivs en eller flera tillämpade informationsmodeller som visar vilka klasser och attribut som representerar registrets behov av information. De tillämpade informationsmodellerna baseras på den generella referensmodellen Nationell informationsstruktur (NI). 3.2.1 Klasser I en informationsmodell används klasser, vilket är en samling uppgifter som hålls som en enhet. Ett exempel på en klass som kan förekomma i en tillämpad informationsmodell för ett register är Operation: Aktivitet. Registret är i detta fall intresserad av information om operation. Namnet på klassen (Operation: Aktivitet) anger att den är en tillämpning av klassen Aktivitet i NI.
Sida: 6 (13) 3.2.2 Attribut Attribut är egenskaper för att beskriva aktuell klass. Exempelvis används attributen kod, tid och lokalisation för att beskriva klassen Operation: Aktivitet. I informationsspecifikationen ges en detaljerad beskrivning av varje klass och attribut i informationsmodellen, 3.3 Från informationsspecifikation till regel i NKRR I detta avsnitt beskrivs kort hur du tillämpar den information om klasser och attribut som anges i informationsspecifikationen i reglerna som du skapar i NKRR. 3.3.1 Klasser - tjänstekontrakt i operatorn datakälla Som tidigare nämnts så anger namnet på varje klass i informationsmodellen vilken klass i NI som denna är en tillämpning av (exempelvis Observation). Detta talar i sin tur om vilken informationsmängd som vi vill hämta ut och vilket tjänstekontrakt som ska användas för att hämta den. Nedan är en mappning mellan klass i NI och gällande tjänstekontrakt. Det är med hjälp av operatorn Datakälla som du definierar via vilket tjänstekontraktsanrop som källdata ska hämtas. Observera att det finns fler klasser och tjänstekontrakt än de som anges nedan. Tabeller är således inte heltäckande utan visar exempel med två vanligt förekommande klasser. Klass i NI Aktivitet Observation Tjänstekontrakt GetActivities 1.0 (1.x i regeln i NKRR) GetObservations 1.0 (1.x i regeln i NKRR) 3.3.2 Attribut i klass - fält som adresseras i regeln För att få en översikt över samtliga fält som aktuellt tjänstekontrakt hanterar hänvisas till respektive tjänstekontraktsbeskrivning. I efterföljande avsnitt har vi tagit ut de vanligaste attributen som används i informationsspecifikationen i de fall som aktuell klass är en tillämpning av klassen Aktivitet respektive Observation och mappat mot fält i motsvarande tjänstekontrakt. Det är alltså dessa fält som ska adresseras i regeln. Observera att det kan finnas andra fält som ska användas som inte är angivna nedan. 3.3.2.1 Aktivitet I nedanstående tabell anges de vanligaste attributen i de fall som aktuell klass är en tillämpning av klassen Aktivitet. Observera att en aktivitetsgrupp kan innehålla 1..* aktiviteter 1. För att adressera underliggande fält till aktivitet i reglerna behöver man använda uttryckstyp sammansatt fält. Attribut i klass Fält i tjänstekontraktet GetActivities 1.0 kod activitygroup.activity.code.code activitygroup.activity.code.codesystem 1 Enligt tjänstekontraktsbeskrivning för aktuellt tjänstekontrakt, domvänversion 1.0.5
Sida: 7 (13) status lokalisation tid activitygroup.activity.status.code activitygroup.activity.status.codesystem activitygroup.activity.targetsite.code activitygroup.activity.targetsite.codesystem activitygroup.activity.time.start.value (activitygroup.activity.time.end.value) 3.3.2.2 Observation I nedanstående tabell anges de vanligaste attributen i de fall som aktuell klass är en tillämpning av klassen Observation. Observera att en observationsgrupp kan innehålla 1..* observationer 2. För att adressera underliggande fält till observation i reglerna behöver man använda uttryckstyp sammansatt fält. Attribut i klass Fält i tjänstekontraktet GetObservations 1.x typ observationgroup.observation.type.code observationgroup.observation.type.codesystem värde med datatyp PQ värde med datatyp CV lokalisation tid observationgroup.observation.value.pq.value observationgroup.observation.value.pq.unit observationgroup.observation.value.cv.code observationgroup.observation.value.cv.codesystem observationgroup.observation.targetsite.code observationgroup.observation.targetsite.codesystem observationgroup.observation.time.start.value (observationgroup.observation.time.end.value) 2 Enligt tjänstekontraktsbeskrivning för aktuellt tjänstekontrakt, domvänversion 1.0.5
4 Exempel 4.1 Beslutsdatum för välgrundad misstanke om cancer Sida: 8 (13) Här visar vi ett exempel där man vill plocka ut ett värde från inhämtad vårddata och ge som svar till registret. I det aktuella exemplet är det tid för aktiviteten välgrundad misstanke om cancer som man vill ha ut. 4.1.1 Informationsspecifkation Omskrivet kan man säga att vi vill ha ut den senaste registreringen av aktiviteten VG910 (KVÅ) som finns för patienten under de senaste två åren. Vi börjar med att försöka översätta detta till de operatorer som används för att formulera en regel. Vi vill hämta aktiviteter rörande patienten. Detta gör vi genom operatorn Datakälla (FROM) Vi vill filtrera aktiviteter på kod, status och tid. Detta gör vi med hjälp av uttryck i operatorn Datakälla (WHERE) Vi vill ha ut den senaste aktiviteten. Detta gör vi med hjälp av operatorn Välj (TOP 1 + ORDER BY) Vi vill plocka ut tid för aktiviteten. Detta gör vi med hjälp av operatorn Filter (SELECT). Det är denna tid som kommer att returneras till kvalitetsregistret.
Sida: 9 (13) 4.1.2 Skapa regel I de efterföljande tre sektionera beskrivs nedanstående tre operatorer som vi kommer att använda för aktuell regel. Inledande operator Datakälla Mellanliggande operator Välj Avslutande operator - Filter 4.1.2.1 Inledande operator Datakälla Med hjälp av operatorn Datakälla definierar vi att vi vill hämta ut aktiviteter rörande patienten. Med hjälp av uttryck i operatorn Datakälla filtrerar vi aktiviteter på kod, status och tid. För att se vilka fält som vi ska adressera i uttrycken tittar vi i tabellen i avsnitt 3.3.2.1 Aktivitet. Observera att vi i exemplet har utgått från att det datum som anges som inparameter till GetFormData motsvarar aktuellt registreringsdatum och att man vill söka ut aktiviteter från två år tillbaka i tiden och fram till aktuellt registreringsdatum. Datakälla: GetActivities 1.x Uttryckstyp: Sammansatt fält Fält: activitygroup.activity Uttryckstyp: Logiskt uttryck OCH I de underliggande uttrycken ange: activitygroup.activity är ett sammansatt fält Vi vill lägga till flera filtervillkor för varje aktivitet activitygroup.activity.code.code är: VG910 "SVF bröstcancer - beslut välgrundad misstanke om cancer" (1.2.752.116.1.3.2.1.4 "KVÅ") och activitygroup.activity.time.start.value inträffade senare eller samtidigt som 2 år före getformdata.careencounterstartdate och activitygroup.activity.time.start.value inträffade tidigare eller samtidigt som getformdata. careencounterstartdate och (activitygroup.activity.status.code inte förekommer eller activitygroup.activity.status.code är: 398166005 "utförd" (1.2.752.116.2.1.1 "Snomed CT") 3 ) Uttryckstyp: Matcha koder Uttryckstyp: Tidsuttryck Uttryckstyp: Tidsuttryck Uttryckstyp Logiskt uttryck ELLER och sedan förekomst och matcha koder som underliggande uttryck 3 Enligt tjänstekontraktsbeskrivning för aktuellt tjänstekontrakt, domvänversion 1.0.5: Om statuskoden utelämnas antas detta vara en faktiskt utförd aktivitet som dokumenterats.. I praktiken filtrerar regeln bort aktiviteter med status planerad.
Sida: 10 (13) 4.1.2.2 Mellanliggande operator Välj Med hjälp av operatorn Välj tar vi fram den aktivitet som har den senaste tidpunkten. För att se vilket fält som vi ska välja tittar vi i tabellen i avsnitt 3.3.2.1 Aktivitet. Datakälla: GetActivities 1.x Fält: activitygroup.activity.time.start.value Typ: Senaste (max) 4.1.2.3 Avslutande operator Filter Med hjälp av operatorn Filter gör vi en filtrering av utplockat källdata och sorterar ut tid för aktiviteten. Det är detta värde som kommer att returneras till kvalitetsregistret. För att se vilket fält som vi ska välja för att få fram tid tittar vi i tabellen i avsnitt 3.3.2.1 Aktivitet. Datakälla: GetActivities 1.x Fält: activitygroup.activity.time.start.value 4.1.3 Rapport sammanställning regler Vi är nu klara med regeln men för att kontrollera att vi har gjort rätt hämtar vi ut en rapport som beskriver regeln för att enklare kunna verifiera mot informationsspecifikationen. FROM WHERE ORDER BY + TOP 1 SELECT
Sida: 11 (13) 4.2 Screeningupptäckt Här visar vi ett exempel där utifrån inhämtad vårddata översätter till olika svarsalternativ. I det aktuella exemplet vill vi ge svaret Ja i det fall som det förekommer observationer som avser screeningupptäckt och annars Uppgift saknas. Här ges också ett exempel på när en och samma klass i informationsspecifikationen motsvarar flera registervariabler och ska således motsvara separata regler i NKRR. Det värde vi kommer att använda i regeln är således endast värde för screeningupptäckt. 4.2.1 Informationsspecifikation Omskrivet kan man säga att vi vill söka ut eventuella screeningupptäckter som finns för patienten under de senaste två åren. Om det finns så vill vi returnera Ja till registret och annars Uppgift saknas. Vi börjar med att försöka översätta detta till de operatorer som används för att formulera en regel. Vi vill hämta observationer rörande patienten. Detta gör vi genom operatorn Datakälla (FROM) Vi vill filtrera observationer på typ, värde och tid. Detta gör vi med hjälp av uttryck i operatorn Datakälla (WHERE) Vi vill göra om hämtad information till ett svar som kvalitetsregistret kan tolka. Detta gör vi med hjälp av operatorn Översätt (CASE).
Sida: 12 (13) 4.2.2 Skapa regel I de efterföljande två sektionera beskrivs nedanstående två operatorer som vi kommer att använda för aktuell regel. I respektive operator beskrivs hur information filtreras. Inledande operator Datakälla Avslutande operator - Översätt 4.2.2.1 Inledande operator Datakälla Med hjälp av operatorn Datakälla definierar vi att vi vill hämta ut observationer rörande patienten. Med hjälp av uttryck i operatorn Datakälla filtrerar vi observationer på typ, värde och tid. För att se vilka fält som vi ska adressera i uttrycken tittar vi i tabellen i avsnitt 3.3.2.2 Observation. Observera att vi i exemplet har utgått från att det datum som anges som inparameter till GetFormData motsvarar aktuellt registreringsdatum och att man vill söka ut aktiviteter från två år tillbaka i tiden och fram till aktuellt registreringsdatum. Datakälla: GetObservations 1.x Uttryckstyp: Sammansatt fält Fält: observationgroup.observation Uttryckstyp: Logiskt uttryck OCH I de underliggande uttrycken ange: observationgroup.observation är ett sammansatt fält Vi vill lägga till flera filtervillkor för varje observation observationgroup.observation.type.code är: 185351004 "administrativ anledning till vårdkontakt" (1.2.752.116.2.1.1 "Snomed CT") och observationgroup.observation.value.cv.code är: 171176006 "avvikande screeningresultat för brösttumör" (1.2.752.116.2.1.1 "Snomed CT") och observationgroup.observation.time.start.value inträffade senare eller samtidigt som 2 år före getformdata.careencounterstartdate och observationgroup.observation.time.start.value inträffade tidigare eller samtidigt som getformdata.careencounterstartdate Uttryckstyp: Matcha koder Uttryckstyp: Matcha koder Uttryckstyp: Tidsuttryck Uttryckstyp: Tidsuttryck
Sida: 13 (13) 4.2.2.2 Avslutande operator Översätt I den avslutande operatorn vill vi ta fram själva svaret till registret vilket i detta exempel är Ja eller Uppgift saknas beroende på om det finns ett värde eller inte. Villkor 1 Villkor 2: Uttryck: Sammansatt fält Datakälla: GetObservations 1.x Fält: observationgroup.observation Uttryckstyp: Förekomst Datakälla: GetObservations 1.x Fält: observationgroup.observation.id.extension Se till att förekommer är valt Om sant ge svar: Ja Uttryck: Alltid sant Annars, Svar: Uppgift saknas Observera att vi i denna nod har ett antal valmöjligheter för att kontrollera om det förekommer någon observationspost överhuvudtaget (första uttrycket). observationgroup.observation.id.extension är ett obligatoriskt fält i aktuellt tjänstekontraktet men man skulle lika gärna kunna kontrollera något av de fält som adresseras i noden Datakälla, exempelvis kan man använda uttryckstyp matcha koder för att kontrollera om värdet förekommer. 4.2.3 Rapport sammanställning regler Verifiera regeln genom att ta ut en rapport som beskriver reglerna.