Profileringsanvisning

InnehÄllsförteckning

Introduktion

Syfte och bakgrund

Profileringsanvisningen innehÄller riktlinjer som ska anvÀndas av Inera vid utveckling av FHIR-profiler. Syftet Àr att standardisera utvecklingen av FHIR-profiler för Ineras produkter, men kan Àven anvÀndas av andra parter som vill standardisera sitt informationsutbyte.

Anvisningen Àr inte en steg-för-steg guide för hur man skapar profiler i FHIR generellt.

Profileringsanvisningar frÄn andra lÀnder (Finlands profileringsanvisning, NederlÀndernas profileringsanvisning, Norges profileringsanvisning, Storbritanniens profileringsanvisning) och organisationer (Firelys profileringsanvisning) har tjÀnat som underlag för framtagning av denna anvisning.

MĂ„lgrupp

MÄlgruppen för profileringsanvisningen Àr informationsarkitekter, lösningsarkitekter och utvecklare som ska ta fram en FHIR-profil.

MÄlgruppen förvÀntas ha grundlÀggande kunskaper inom interoperabilitetsstandarden HL7 FHIR (nedan refererat till som FHIR) och vara bekanta med FHIR:s profileringsriktlinjer och metodik. Denna anvisning kompletterar och förtydligar de internationella riktlinjerna inom vissa omrÄden.

Praktiska riktlinjer

Nedan listas praktiska riktlinjer som ska följas nÀr FHIR-profiler skapas pÄ Inera, respektive kan följas av andra aktörer som vill skapa FHIR-profiler.

ÅteranvĂ€nd existerande arbete

Börja alltid med att inventera tidigare nationella och internationella arbeten, bÄde nÀr du skapar en profil eller extension. Du kan anvÀnda nÄgon av följande kÀllor för att göra det:

För profilering i Sverige ska basprofilerna frÄn HL7 Sverige anvÀndas som grund.

Undvik att skapa extensions för sÄdant som FHIR redan stödjer, dvs. undersök om existerande attribut stödjer behovet utan att den semantiska betydelsen kompromissas.

SprÄk

Profiler och extensions bör dokumenteras pÄ engelska. Detta gÀller sÄvÀl namnsÀttning av nya attribut och element som beskrivningar och kommentarer. Anledningen Àr att de ska kunna anvÀndas av bÄde svenska och internationella aktörer.

Namngivning

Innan du börjar bygga profiler, faststÀll de namnkonventioner som du kommer att anvÀnda i ditt projekt, eftersom det kommer att bli mycket svÄrare att Àndra dem senare. NÄgra allmÀnna regler att följa finns nedan.

Profiler

  • AnvĂ€nd namnet pĂ„ din tjĂ€nst, din region eller annat sammanhang som prefix.

  • Inkludera resurstypen i namnet pĂ„ din profil.

  • Format: [prefix][resursnamn]

  • AnvĂ€nd PascalCase vid namngivning av profiler.

Exempel: RIVCareContact

Extensions

Definition av extension

  • AnvĂ€nd ett lĂ€svĂ€nligt och sjĂ€lvförklarande namn.

  • Format: [prefix][namn pĂ„ extension]Extension

  • AnvĂ€nd PascalCase för definition av extensions.

Exempel: RIVMiddleNameExtension

AnvÀndning av extension i profiler

  • AnvĂ€nd ett lĂ€svĂ€nligt namn utan prefix och utan suffixet extension.

  • Format: [namn pĂ„ extension]

  • AnvĂ€nd camelCase för namngivning av extensions dĂ„ de anvĂ€nds i profiler.

Exempel: middleName

Slices

  • AnvĂ€nd ett lĂ€svĂ€nligt och sjĂ€lvförklarande namn.

  • Format: [namn pĂ„ slice]

  • AnvĂ€nd camelCase för namngivning av slices.

Exempel: nationelltReservnummer

Sökparametrar

  • Sökparameterna ska i möjligaste mĂ„n matcha det element eller attribut i profilen som ligger nĂ€rmast sökparametern.

  • Prefix ska anges för sökparametrar för att understryka att det Ă€r en profilering: prefix-sökparameter.

  • Format: [prefix]-[namn pĂ„ sökparameter]

  • AnvĂ€nd kebab-case för sökparametrar.

Exempel: riv-middle-name

Krav pÄ metadata

Förutom de obligatoriska elementen som definieras i StructureDefinition ska nedanstÄende inkluderas vid definition av profiler, extensions, ValueSet- och CodeSystem-resurser.

Metadataelement

Regelverk

Metadataelement

Regelverk

identifier

Namn pÄ identifier-elementet för profiler och extensions ska vara samma som för name-elementet.

title

-

publisher

Om profileringen görs inom Inera sÄ ska Inera AB stÄ som publisher.

version

-

date

-

description

-

För extensions ska Àven metadataelementet purpose inkluderas och innehÄlla en beskrivning pÄ varför man har skapat denna extension.

Öppen eller sluten modellering

Beroende pÄ profilens tÀnkta anvÀndningsomrÄden bör du övervÀga en öppen eller en sluten modellering.

En öppen profil Àr mer generisk och har fÄ begrÀnsningar och kan lÀttare ÄteranvÀndas, medan en sluten profil Àr mer specifik och har fler begrÀnsningar men underlÀttar vid implementation. NedanstÄende tabell listar för- och nackdelar med öppen och sluten modellering. Dessa Àr direktöversatta 1:1 frÄn NederlÀndernas profileringsanvisning.

 

Öppen

Sluten

 

Öppen

Sluten

Fördelar

  • FramĂ„tkompabilitet

  • Du behöver inte tĂ€nka pĂ„ vad som inte ska stödjas, utan endast pĂ„ vad som mĂ„ste stödjas

  • Du kan inkludera mer data, Ă€ven om det inte Ă€r explicit specificerat i profilen

  • Alla element som kanske kommer att anvĂ€ndas nĂ„gon gĂ„ng enligt modellen behöver inte stödjas

  • Modellen blir mer specifik

  • Modellen blir mindre och mer rak pĂ„ sak

  • Implementatörer ger mer feedback kring element som borde stödjas men inte gör det idag

Nackdelar

  • Alla valbara element som kanske kommer att anvĂ€ndas nĂ„gon gĂ„ng mĂ„ste stödjas

  • Modellen blir mer vag

  • Modellen blir större och mindre rak pĂ„ sak kring vad som faktiskt borde stödjas, och vad som Ă€r valbart att stödja

  • Mindre feedback frĂ„n implementatörer med konsekvens att modellen inte kommer bli förbĂ€ttrad. Element som de vill skicka kan enklare “hackas” i ett icke-explicit element

  • Fler versioner av modellen nĂ€r fler elements behöver stödjas

  • Ingen framĂ„tkompabilitet, endast bakĂ„t

  • Implementatörer behöver vĂ€nta pĂ„ en ny version av modellen om de vill stödja element som för nĂ€rvarande inte Ă€r inkluderade

I de fall profiler tas fram för att stödja hela domÀner och dÀr tanken Àr att mer specifika profiler ska tas fram utifrÄn dessa Àr det alltsÄ lÀmpligt att övervÀga en öppen modellering.

Vid valet av en öppen eller sluten modelleringsmodell bör Ă€ven anvĂ€ndandet av flaggan mustSupport respektive kardinaliteten 0..0 övervĂ€gas. Genom att ange kardinalitet 0..0 kan man utestĂ€nga viss information t.ex. i syftet uppgiftsminimering genom att förbjuda producenter att skicka denna. Profilen blir sĂ„ledes mer stĂ€ngd och svĂ„rare att implementera pĂ„ en generell nivĂ„. Genom att anvĂ€nda flaggan mustSupport kan man istĂ€llet explicit uttrycka vilka element som konsumenten förvĂ€ntas kunna stödja samtidigt som man inte stĂ€nger profilen för andra producenter. Notera dock att meningen av mustSupport inte Ă€r definierad av FHIR:s grundspecifikation, utan behöver definieras för respektive profil i metadatalement. MustSupport bör endast definieras i profiler och inte i extensions, dĂ„ det inte Ă€r sĂ€kert att denna extension “mĂ„ste stödjas” i alla anvĂ€ndningsfall den ska anvĂ€ndas i.

Terminologibindning

CodeSystem

DÄ nationella kodverk ska anvÀndas i profiler sÄ ska motsvarande CodeSystem-resurs definieras i FHIR och göras tillgÀnglig för ÄteranvÀndning av andra tjÀnster. Om möjligt ska resursen publiceras i en öppen FHIR terminologitjÀnst. Den förvaltning som Àger kodverket ska ocksÄ ansvara för förvaltningen av FHIR-resursen.

ValueSet

Alla kodade element i FHIR-profiler ska knytas till ett ValueSet med hjÀlp av ElementDefinition.binding.valueset.

DĂ„ man binder ett ValueSet hĂ„rt till ett kodsystem ska detta uttryckas genom att Coding.system sĂ€tts till “fixed”.

Datatyper

Kodade vÀrden

DÄ vÀrden kodas med hjÀlp av datatypen Coding ska elementen Coding.code och Coding.system sÀttas till obligatorisk: 1..1

MÀtvÀrden

NÀr datatypen Quantity anvÀnds för att uttrycka mÀtvÀrden ska Quantity.value och Quantity.unit vara obligatoriskt, 1..1. Enheter ska anges enligt UCUM.

Identifierare

NÀr datatypen Identifier anvÀnds ska Identifier.system vara obligatoriskt, 1..1. Om det finns behov av att anvÀnds en OID som namespace ska denna konverteras om till en URI.

Slicing

Följande sektion beskriver riktlinjer kring slicing och Àr tagen frÄn NederlÀndernas profileringsanvisning.

Att vÀlja diskriminator

Diskriminator bör vÀljas utifrÄn den mest specifika definitionen av slicen som möjligt samtidigt som man mÄste beakta prestandakostnaden i att vÀlja en diskriminator som blir svÄr för en validerare att utvÀrdera. AnvÀnd mönster istÀllet för en kombination av fasta vÀrden för att hÄlla logiken enkel. Till exempel nÀr slicing ska ske pÄ datatypen Coding/CodeableCocept: anvÀnd ett mönstersegment om koden och systemet för en slice Àr fixerade. Om en slices urskiljs av olika CodeSystems Àr en diskriminator baserad pÄ ett fast system att föredra framför en bindning till ett ValueSet. AnvÀnd det senare om flera CodeSystems kan anvÀndas inom en definierad slice. Undvik diskriminatortypen 'profil' eftersom denna Àr svÄr att utvÀrdera för en validerare.

AnvÀnd inte nÀstlad slicing

NÀstlad slicing innebÀr att man lÀgger till en slice inom en slice. Detta fungerar inte sÄ bra i FHIR - till exempel kan varken Java eller .Net validatorn hantera detta (för tillfÀllet) - sÄ undvik denna mekanism. Som ett alternativ kan du anvÀnda en diskriminator baserad pÄ mönster/kod, och pÄ varje slice.code kan du lÀgga till ett patternCodeableConcept med önskat system och vÀrde. Detta har samma effekt; minst en kod frÄn angivet system krÀvs, men andra kan lÀggas till.

Exemplifiera

Varje profil som tas fram ska ha en exempelresurs publicerad i JSON-format dÀr alla obligatoriska data Àr populerade.

Publicering

Profiler, extensions, CodeSystem- och ValueSet-resurser ska dokumenteras och publiceras i sitt sammanhang i implementationsguider. Detta för att förbÀttra möjligheterna till samarbete och ÄteranvÀndning av befintligt arbete.

Implementationsguiden ska uttrycka ett syftesspecifikt omrÄde för informationsdelning, alternativt kan den uttrycka en gemensam domÀn för ÄteranvÀndning.

Implementationsguider som Inera tar fram ska publiceras öppet pÄ http://inera.se/fhir/ig/[namn pÄ implementationsguide].

URL för publicering

FHIR-resurser som tas fram inom profileringsarbete behöver ha en kanonisk URL. Den kanoniska URL:en bör leda till resursernas definition, men det Àr inte tvingande inom standarden. URL:en anvÀnds frÀmst för att identifiera resurserna och inte för publicering.

För resurser som tas fram av Inera ska definitionen av resursen kunna hÀmtas via den kanoniska URL:en.

Profiler och extensions som tas fram av Inera ska ha följande URL-struktur:

  • http://[domĂ€n]/fhir/ig/[ig]/StructureDefinition/[namn]

DĂ€r

  • [domĂ€n] = http://inera.se

  • [ig] = Namn pĂ„ implementationsguide, t.ex. tidbok

  • [namn] = Namn pĂ„ profil/extension, t.ex. RIVCareContact

Exempel pÄ URL: http://inera.se/fhir/ig/tidbok/StructureDefinition/RIVCareContact

För andra organisationer ska samma struktur anvÀndas men domÀnen dÄ bytas mot den egna.

CodeSystem-resurser som tas fram av Inera ska ha följande URL-struktur:

  • http://[domĂ€n]/fhir/ig/[ig]/CodeSystem/[name]

ValueSet-resurser som tas fram av Inera ska ha följande URL-struktur:

  • http://[domĂ€n]/fhir/ig/[ig]/ValueSet/[name]

Serialisering

Profiler, extensions, ValueSet- och CodeSystem-resurser ska stödja serialisering Ätminstone i JSON format.