Jämförda versioner

Nyckel

  • Dessa rader lades till.
  • Denna rad togs bort.
  • Formateringen ändrades.

version PA1

...

Det innebär att GetObservations ska ersättas av en REST-baserad FHIR-användas. Det rimmar också väl med den grundläggande intentionen för FHIR Messaging. Den som sammanfattas så här av HL7:

"In FHIR messaging, a "request message" is sent from a source application to a destination application when an event happens. Events mostly correspond to things that happen in the real world. The request message consists of a Bundle identified by the type "message", with the first resource in the bundle being a MessageHeader resource. The MessageHeader resource has a code - the message event - that identifies the nature of the request message, and it also carries additional request metadata. The other resources in the bundle depend on the type of the request." (http://www.hl7.org/implement/standards/fhir/messaging.html).


Vi gör därför tolkningen att messaging inte är avsett för vårt anvädningsfall (att sammanställa tillväxtinformation baserat på GetObservations-anrop). Nedan illustreras några andra användningsfall där vi bedömer att messaging kan vara mer ändamålsenligt än REST:

Tjänstedomän/TjänstekontraktHändelse i initiativtagande system ("sender")Utförande system ("destination")Typ
EI:UpdateNy information enligt "category"-kodverk har uppstått i det vårdsystem som ska uppdatera EI.EI, som tar emot Update-begäran och utför den bearbetning som beskrivs för men EI:Update-tjänsteproducent.Notification
Skicka en remiss (1.x)Remiss skapad i remittentens journalsystemRemissmottagarens systemNotification

Skicka en biverkningsrapport

Biverkningsrapportering initierad i Journalsystem - direkt eller indirekt via SEBRA-applikationenLäkemedelsverkets mottagningstjänstNotification

Skicka en bilaga till en utomlänsfaktura (ersättningsunderlag)

Ersättningsunderlag för en utomlänspatient har skapats i utomlänets ersättningssystem.Folkbokföringslänets ersättningssystemNotification
Rapportera utomlänslistning till folkbokföringsladnstingetListningssystemet hos utomlänslandstinget har registrerat en ny-listning av en utomlänspatientListningssystemet hos folkbokföringslandstingetNotification

...

KravHantering enligt RIVTA Basic Profile 2.1 TjänsteschemaMappning FHIR
Huvud-version (major)  är en del av profilens identitetAttributet targetNamespace på schema-elementet skall ha ett värde som definieras av följande regel: urn:riv:${tjänsteDomän}:${m}, där "m" är huvudversion.Varje profils StructureDefinition.url ska ha en kanonisk URL där versionssiffran för huvudversion ingår.
Profilen ska dokumentera vilken under-version (minor) den stödjerSchema-attributet version bör sättas till "m.n"

StructureDefinition.version ska ange aktuell version med huvudversion och underversion.

Kunna uttrycka om profiler alltid sam-versioneras eller versioneras individuellt.Tjänstedomäner grupperar tjänstekontrakt som samversioneras. Men domänerna har dubbla roller: de anger BÅDE informatiskt/funktionell gruppering och release-gruppering. 

Förslag (som också kan tillämpas för tjänstekontraktsdomäner): att versionssiffrar (major) anges FÖRE profilnamnet i den kanoniska URL:en för profilens StructureDefnition om den sam-releasas med andra profiler, annars EFTER profilnamnet (tveksamt om det kommer att finnas sådana fall). Profiler som sär-releasas är i regel bas-profiler som är tänkta att återanvändas som byggblock snarare än att tillämpas "as is". Om vi har en helt generisk basprofil for Observation skulle det kunna vara ett exempel. Men även i det fallet kommer en bas-observation att behöva referera till ex. basprofil för Device. 

Exempel på sam-releasad profil:er RIVTA Core Vital Signs: http://rivta.se/fhir/StructureDefinition/se-core-vitalsigns-v1/Observation

http://rivta.se/fhir/StructureDefinition/core/se-core-vitalsigns-v1/BodyWeight

http://rivta.se/fhir/StructureDefinition/core/se-core-vitalsigns-v1/BodyHeight

http://rivta.se/fhir/StructureDefinition/core/se-core-vitalsigns-v1/HeadCircum

Kommentar: Troligen blir det relevant att ha en Implementation Guide per domän.


Huvudversion av en profil ska anges i varje informationsutbyteGenom att WS-I Basic Profile följs i RIV TA Basic Profile garanteras att meddelandets tjänsteschemats namnrymd är meddelandets namnrymd. Huvudversion ingår i namnrymden. Som en konsekvens blir meddelanden med olika huvudversioner inkompatibla mellan kommunicerande agenter.

FHIR styr meddelandets namnrymd till ett fast värde som anges av standarden. Inkompatibilitet kan därför inte automatiskt upptäckas av agenternas XML-tolkar (parsers) via namnrymdskonflikter. Därför behöver programmatiska regler tillföras baserat på att huvudversion anges på annat sätt som del av payload. 

  1. I ett svarsmeddelande ska Resource.meta.profile lista alla profiler som resursen följer. Responsen SKA bara innehåller resurser som stödjer den profil som efterfrågats i begäran.
  2. I en uppdaterande begäran (transaktion) ska Resource.meta.profile ange den profil som måste accepteras av Utföraren/mottagaren (Responder).
  3. En uppdaterande begäran ska enbart accepteras av utföraren/mottagaren om Resource.meta.profile är angiven och innehåller en och endast en profil som mottagaren deklarerar stöd för genom ett CapabilityStatement.
  4. I en frågande begäran SKA konsumenten ange kanonisk URL för den profil man accepterar. Det anges i parametern "_profile". 

Ovanstående förutsätter att Huvud-version (major) är en del av profilens kanoniska URL.

...

KonceptAnvisningDagens lösningRIVTA FHIR
logisk adressRIVTA BPsoap-headerx-riv-logical-address http header
source systemJoL-kontrakt/TKBElement i JoL-header

Resource.meta.source.

Finns i R4. Fram tills dess en extention som appliceras på varje svensk basprofil som motsvarar JoL-kontrakt. PoCObservation anger att .meta.source är obligatorisk. Termen dokumenteras med samma innebörd som i nuvarande JoL-kontrakt.

Aggregerings-headerRIVTA interoperability hadersSOAP-header med svenskt schema i response från aggregerande tjänstSvensk Audit-profil som - enligt textuell regel - bundlas med responsen (del av responsens Bundle)
ApprovedForPatientJoL-kontrakt/TKBElement i JoL-header (true/false)Resource.meta.security. Förekomsten av koden https://www.hl7.org/fhir/v3/ActReason/cs.html#v3-ActReason-PATRQT mappar mot "true" och att koden inte förkommer mappar mot false. Kodverket ingår i standardkodverken för Resource.meta.security. Termen dokumenteras med samma innebörd som i nuvarande JoL-kontrakt. 
Informationsunderlag för spärrkontroll - "infomängd"JoL-kontrakt/TKBSpärrkontroll och åtkomststyrning sker enligt kodverk för infotyper (HSA-förvaltat kodverk med ursprung i NPÖ 1.0). Ingår i informationsstruktur för medarbetaruppdrag. Mappningen mellan infotyp (parameter till spärrkontroll) hanteras programmatiskt i klienten. Ex: Om data kommer från GetLaboratoryOrderOutcome används infotyp för Undersökningsresultat. Observationer och aktiviteter har en mer indirekt mappning, baserat på i vilket syfte observationer hämtas. Om de hämtas för syfte Tillväxtkurvor/Barnhälsodata används infotyp för det tillämpningsområdet vid spärrkontroll. Dessa infotyper finns ännu inte. Inera driver ett projekt för att införa sådan hantering.Inget att mappa. Programatisk regel dokumenteras i tillämpningsanvisningar, certifieringsregelverk etc som ligger utanför profilerna.
Sekretessgränser enligt patientdatalagen (VG/VE)JoL-kontrakt/TKBFör att en informationskonsument ska kunna avgränsa professionsanvändarens åtkomst till avsedd sekretess behöver information vara märkt med vårdenhet (hsa-id) och vårdgivare (hsa-id). Det sker idag med två fält i den s.k. JoL-headern. HSA-id för Vårdenhet mappas till en "identifier" i  performer-listan med type = "XX" (HL7 v2-kodverk). Vårdgivare mappas på samma sätt men med type = "EN".

...

For such a migration to be manageable, a strategy for referencing between resources need to be in place. To our understanding, there is only one option: Use either contained references or identifier references (logical identifiers). </engelska>manageable, a strategy for referencing between resources need to be in place. To our understanding, there is only one option: Use either contained resources or identifier references (logical identifiers). </engelska>

För att FHIR-baserade kontrakt ska kunna samverka med kontrakt som ligger kvar på Basic Profile 2.1 (SOAP), behöver referenser från en informationsresurs till en annan uttryckas på logiskt nivå, istället för genom direkta URL:er. Logiska referenser ska enligt FHIR-standard byggas upp av namnet på den resurs i FHIR som motsvarar informationen följt av identiteten i det lokala systemet. Om en observation som hämtas med FHIR (användningsfallet i denna PoC) refererar till en vårdkontakt (exempelvis) ska referensen anges som "Encounter/<id i källsystemet". Om klienten ska hämta information om vårdkontakten behöver den använda tjänstekontraktet GetCareContacts med sökparametrarna sourceSystemHsaId (från Observation.source), vårdkontakt-id (från <id i källsystemet> ur referensen) och patientens identitet (ur Observation.subject). När GetCareContacts finns i form av en profil för resursen Encounter, kommer motsvarande parametrar att användas för att uttrycka en sök-URL för den eftersökta vård- och omsorgskontakten.

Mapping till JoL-kontraktet Get Observations

...

Det finns några faktorer som kan påverka valet av strategi:

  • US Core kan bara användas för patientåtkomst i Sverige. Det saknas informatik/säkerhetsramverk för att kunna tillämpa Sammanhållen Journalföring. 
  • US Core använder LOINC-kodverket för kliniska kodning. I Sverige används SNOMED.
  • US Core saknar stöd för förutsägbar framåt/bakåtkompatibilitet vilket är krav i flera nationella sammanhang - t.ex. i Sverige och i Nederländerna.
  • US Core är ett protokoll som främst är avsett för en applikations kontakt med sin direkta server. De svenska profilerna ska stödja uttag av grunddata från system som befinner sig "bakom" ett specifikt klient-skydd (exempelvis en fasad för patient-applikationer)
  • Svenska profiler har krav på strukturerad data för t.ex. organisationsidentitet medan US Core tillåter data utan att ange extern identitet
  • FHIR stödjer ännu inte s.k. Mix-ins (eller "Aspects"). Konsekvensen är att allt som vi i Sverige behöver ha gemensamt för ex. Observationer - måste - om vi ärver av US Core - dupliceras på varje svensk subclass till varje US Core-subklas av observation - ex. BodyWeight, BodyHeight etc. 

Sammantaget leder dessa faktorer oss att gå på alternativ 2 - mappning. Det leder till följande arkitektur:

...

parameterbeskrivningvärde
codeSNOMED-kod för eftersökt vitalparameter. Är egentligen överflödig eftersom sökning också avgränsas till den profil som styr in code mot värdet för kroppsvikt. Firely har rekommenderat att vi ska ha med båda parametrarna i sökningarna. Vi får utvärdera det längre fram.Kod för Kroppsvikt: "http://snomed.info/sct|27113001". Notationen innebär att både kodsystem och kod anges. 
categoryAnger vilken typ av observationer som efterfrågas. Parametern kan troligen vara överflödig i de fall alla observationer för en viss "code" hamnar i samma kategori. "vital-signs"
_profileKanonisk url för den profil (structure definition) som svaret ska vara kompatibelt med.Profil för Kroppsvikt: http://rivta.se/fhir/StructureDefinition/core/se-core-vitalsigns-v1/BodyWeight
subjectPatientens identitet. Anges med kodsystem (codesystem) för personnummer (i detta fall) och personumner (code). "urn:oid:1.2.752.129.2.1.3.1|191212121212"

...

[server]/Observation?subject=urn:oid:1.2.752.129.2.1.3.1%7C191212121212&code=http://snomed.info/sct%7C27113001&category=vital-signs&_profile=https://www.inera.se/FHIR/StructureDefintion/PoC-Observation-BodyWeight

Svarsmeddelande (JSON):


Kodblock
languagexml
titleResponse Body


{
  "resourceType": "Bundle",
  "id": "20cdddeb-3d00-4a0c-aefa-a6417541ac0a",
  "meta": {
    "lastUpdated": "2018-06-04T14:34:01.571+02:00"
  },
  "type": "searchset",
  "total": 1,
  "link": [
    {
      "relation": "self",
      "url": "http://localhost:8080/hapi/baseDstu3/Observation?_profile=https%3A%2F%2Fwww.inera.se%2FFHIR%2FStructureDefintion%2FPoC-Observation-BodyWeight&category=vital-signs&code=http%3A%2F%2Fsnomed.info%2Fsct%7C27113001"
    }
  ],
  "entry": [
    {
      "fullUrl": "http://localhost:8080/hapi/baseDstu3/Observation/54957",
      "resource": {
        "resourceType": "Observation",
        "id": "54957",
        "meta": {
          "versionId": "1",
          "lastUpdated": "2018-06-04T14:05:37.731+02:00",
          "profile": [
            "https://www.inera.se/FHIR/StructureDefintion/PoC-Observation-BodyWeight"
          ]
        },
        "status": "final",
        "category": [
          {
            "coding": [
              {
                "system": "http://hl7.org/fhir/observation-category",
                "code": "vital-signs"
              }
            ]
          }
        ],
        "code": {
          "coding": [
            {
              "system": "http://snomed.info/sct",
              "code": "27113001"
            }
          ]
        },
        "subject": {
          "identifier": {
            "system": "urn:oid:1.2.752.129.2.1.3.1",
            "value": "191212121212"
          }
        },
        "effectiveDateTime": "2007",
        "performer": [
          {
            "identifier": {
              "system": "urn:oid:hsaoid",
              "value": "Performer/3211444"
            }
          }
        ],
        "valueQuantity": {
          "value": 1700,
          "unit": "g",
          "system": "http://unitsofmeasure.org",
          "code": "g"
        },
        "comment": "med kläder"
      },
      "search": {
        "mode": "match"
      }
    }
  ]
}


Att hämta information om en patient för en viss klinisk vitalparameter (huvudmått)

REST-url:

Svarsmeddelande:


Kodblock
languagexml

{
  "resourceType": "Bundle",
  "id": "9ac3dfaa-20ac-40d6-ad52-30a4c68ecf81",
  "meta": {
    "lastUpdated": "2018-06-04T14:38:16.351+02:00"
  },
  "type": "searchset",
  "total": 1,
  "link": [
    {
      "relation": "self",
      "url": "http://localhost:8080/hapi/baseDstu3/Observation?_profile=https%3A%2F%2Fwww.inera.se%2FFHIR%2FStructureDefintion%2FPoC-Observation-headCircum&category=vital-signs&code=http%3A%2F%2Fsnomed.info%2Fsct%7C363812007"
    }
  ],
  "entry": [
    {
      "fullUrl": "http://localhost:8080/hapi/baseDstu3/Observation/54956",
      "resource": {
        "resourceType": "Observation",
        "id": "54956",
        "meta": {
          "versionId": "1",
          "lastUpdated": "2018-06-04T14:05:19.920+02:00",
          "profile": [
            "https://www.inera.se/FHIR/StructureDefintion/PoC-Observation-headCircum"
          ]
        },
        "status": "final",
        "category": [
          {
            "coding": [
              {
                "system": "http://hl7.org/fhir/observation-category",
                "code": "vital-signs"
              }
            ]
          }
        ],
        "code": {
          "coding": [
            {
              "system": "http://snomed.info/sct",
              "code": "363812007"
            }
          ]
        },
        "subject": {
          "identifier": {
            "system": "urn:oid:1.2.752.129.2.1.3.1",
            "value": "191212121212"
          }
        },
        "effectiveDateTime": "2007",
        "performer": [
          {
            "identifier": {
              "system": "urn:oid:hsaoid",
              "value": "Organization/3211444"
            }
          },
          {
            "identifier": {
              "system": "urn:oid:hsaoid",
              "value": "Practitioner/9999989"
            }
          }
        ],
        "valueQuantity": {
          "value": 173,
          "unit": "cm",
          "system": "http://unitsofmeasure.org",
          "code": "cm"
        },
        "comment": "med kläder"
      },
      "search": {
        "mode": "match"
      }
    }
  ]
}
1


sökning för kropslängd
Svarsmeddelande 


Kodblock
languagexml
{


  "resourceType": "Bundle",
  "id": "375a0665-abc7-46ea-bad6-66cbec764bbc",
  "meta": {
    "lastUpdated": "2018-06-04T14:39:11.083+02:00"
  },
  "type": "searchset",
  "total": 2,
  "link": [
    {
      "relation": "self",
      "url": "http://localhost:8080/hapi/baseDstu3/Observation?_profile=https%3A%2F%2Fwww.inera.se%2FFHIR%2FStructureDefintion%2FPoC-Observation-BodyHeight&category=vital-signs&code=http%3A%2F%2Fsnomed.info%2Fsct%7C248334005"
    }
  ],
  "entry": [
    {
      "fullUrl": "http://localhost:8080/hapi/baseDstu3/Observation/54955",
      "resource": {
        "resourceType": "Observation",
        "id": "54955",
        "meta": {
          "versionId": "1",
          "lastUpdated": "2018-06-04T13:52:38.688+02:00",
          "profile": [
            "https://www.inera.se/FHIR/StructureDefintion/PoC-Observation-BodyHeight"
          ]
        },
        "status": "final",
        "category": [
          {
            "coding": [
              {
                "system": "http://hl7.org/fhir/observation-category",
                "code": "vital-signs"
              }
            ]
          }
        ],
        "code": {
          "coding": [
            {
              "system": "http://snomed.info/sct",
              "code": "248334005"
            }
          ]
        },
        "subject": {
          "identifier": {
            "system": "urn:oid:1.2.752.129.2.1.3.1",
            "value": "191212121212"
          }
        },
        "effectiveDateTime": "2007",
        "performer": [
          {
            "identifier": {
              "system": "urn:oid:hsaoid",
              "value": "Performer/3211444"
            }
          }
        ],
        "valueQuantity": {
          "value": 1700,
          "unit": "g",
          "system": "http://unitsofmeasure.org",
          "code": "g"
        },
        "comment": "med kläder"
      },
      "search": {
        "mode": "match"
      }
    },
    {
      "fullUrl": "http://localhost:8080/hapi/baseDstu3/Observation/54958",
      "resource": {
        "resourceType": "Observation",
        "id": "54958",
        "meta": {
          "versionId": "1",
          "lastUpdated": "2018-06-04T14:05:41.429+02:00",
          "profile": [
            "https://www.inera.se/FHIR/StructureDefintion/PoC-Observation-BodyHeight"
          ]
        },
        "status": "final",
        "category": [
          {
            "coding": [
              {
                "system": "http://hl7.org/fhir/observation-category",
                "code": "vital-signs"
              }
            ]
          }
        ],
        "code": {
          "coding": [
            {
              "system": "http://snomed.info/sct",
              "code": "248334005"
            }
          ]
        },
        "subject": {
          "identifier": {
            "system": "urn:oid:1.2.752.129.2.1.3.1",
            "value": "191212121212"
          }
        },
        "effectiveDateTime": "2007",
        "performer": [
          {
            "identifier": {
              "system": "urn:oid:hsaoid",
              "value": "Organization/3211444"
            }
          },
          {
            "identifier": {
              "system": "urn:oid:hsaoid",
              "value": "Practitioner/9999989"
            }
          }
        ],
        "valueQuantity": {
          "value": 173,
          "unit": "cm",
          "system": "http://unitsofmeasure.org",
          "code": "cm"
        },
        "comment": "med kläder"
      },
      "search": {
        "mode": "match"
      }
    }
  ]
}