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 |
---|---|
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 |
---|---|---|
Fördelar |
|
|
Nackdelar |
|
|
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.