Oppstart og innlogging

sequenceDiagram
    participant EPJ as DIPS Arena
    participant Browser as Integrert Nettleser
    participant App as k9-legeerklaering-on-fhir-klient
    participant App-Backend as k9-legeerklaering-on-fhir-server
    participant AuthServer as DIPS Autorisasjonsserver
    participant FHIR as DIPS FHIR API

    EPJ->>Browser: A: Start webapplikasjon med SMART App Launch Framework
    Browser->>EPJ: B: Opprett LaunchContext (inkl. patient, practitioner, encounter)
    EPJ-->>Browser: B: Returner LaunchContext ID
    Browser->>App: C: Initier launch-sekvens (iss, launch)
    App->>AuthServer: D: Forespør /metadata/ eller .well-known/smart-configuration.json
    AuthServer-->>App: D: Returner URLs til authorize og token endepunkter
    App->>AuthServer: E: Forespørsel mot authorize endepunkt med nødvendige parametere
    AuthServer->>EPJ: E: Sjekk autorisasjon (lokale tilgangsregler, brukers samtykke)
    EPJ-->>AuthServer: E: Autorisasjonsavgjørelse
    AuthServer-->>App: E: Returner autorisasjonskode eller feilkode/-respons
    App->>AuthServer: F: Veksle inn autorisasjonskoden for tilgangstoken
    AuthServer-->>App: F: Returner tilgangstoken (og potensielle andre tokens som id_token, refresh_token)
    App->>App-Backend: G: Forespørsler for helsedata med tilgangstoken
    App-Backend->>FHIR: G: Forespørsler for helsedata med tilgangstoken
    FHIR-->>App-Backend: G: Returner helsedata basert på token og forespørsel
    App-Backend-->>App: G: Returner helsedata basert på token og forespørsel

Sekvensdiagrammet over er utarbeidet i Mermaid Live Editor, og viser hva som skjer når en lege starter SMART on FHIR applikasjonen (legeerklæring pleiepenger sykt barn) inne fra DIPS Arena. En fullskjermsvisning av diagrammet finnes her. Sekvensdiagrammet tar utgangspunkt i implementasjonsguide SMART App Launch Framework utarbeidet av Norsk Helsenett.

Innholdsfortegnelse

Involverte komponenter

  • DIPS Arena. EPJ fra DIPS kjørende Helse Vest’s produksjonsmiljø. Kan i teorien være hvilken som helst EPJ som støtter SMART on FHIR, men løsningen er utvikliet i samarbeid med DIPS og p.t. bare testet med DIPS Arena.
  • Integrert nettleser. Nettleser som kjører inne i DISP Arena. SAMRT on FHIR applikasjoner som vises i denne nettleseren kommer opp som en egen fane i DIPS Arena.
  • k9-legeerklaering-on-fhir-klient. Typescript kode som kjører i den integrerte nettleseren i DIPS Arena. Utviklet av NAV, kildekoden finnes på GitHub
  • k9-legeerklaering-on-fhir-server.

A og B: Opprett LaunchContext og start webapplikasjon

DIPS opprettet LauchContext og benytter integrert nettleser for å starte webapplikasjonen med SMART App Launch Framework. Vet ikke i detalj hvordan DIPS gjør dette, eller om rekkefølgen er korrekt i sekvensdiagrammet, men det er ikke så vesentlig for denne dokumentasjonen. Det viktigste her er å få frem samspillet mellom de forskljellige komponentene DIPS og NAV er ansvarlige for.

C: Initier launch-sekvens

Den integrerte nettleseren i DIPS utfører en HTTP GET-forespørsel til https://k9-legeerklaering.ekstern.dev.nav.no/, som er adressen til SMART on FHIR-applikasjonen i testmiljøet, med ‘iss’ og ‘launch’ som forespørselsparametere.

  • iss: Identifiserer FHIR-endepunktet til elektronisk pasientjournal (EPJ). Webapplikasjonen benytter dette endepunktet for å innhente flere opplysninger om EPJ, inkludert nettadressen til autorisasjonstjeneren.
  • launch: Fungerer som en unik identifikator for den aktuelle oppstartprosessen. Dette parameteret må formidles tilbake til EPJ ved tidspunktet for autorisasjon.

Access token (Payload)

{
 nbf: 1709122957,
 exp: 1709126557,
 iss: "https://api.dips.no/dips.oauth",
 aud: [
  "https://api.dips.no/dips.oauth/resources",
  "patient/*.read",
  "launch",
  "fhirUser"
 ],
 client_id: "NAV_legeerklaering",
 sub: "82e685ca-c0f6-064e-b418-80bb6f28606d",
 auth_time: 1709122956,
 idp: "local",
 name: "NAV-ERIK",
 dips-ticket: "fa23bf6a-e05d-4173-93f9-01c90c36ab58",
 dips://ticket: "fa23bf6a-e05d-4173-93f9-01c90c36ab58",
 hpr-nummer: "987654",
 dips-firstname: "ERIK",
 dips-lastname: "NAV",
 dips-userid: "2018663",
 dips-username: "NAV-ERIK",
 dips-userinuse: "True",
 dips-userwrongpasswordcount: "0",
 dips-userpasswordchangedtime: "3999-12-31T00:00:00.0000000",
 dips-userissystemuser: "False",
 dips-userlastlogintime: "2024-02-22T09:58:49.0000000",
 dips-userpersonproxyid: "82e685ca-c0f6-064e-b418-80bb6f28606d",
 dips-userroleid: "1010248",
 dips-userrolename: "NAV-ERIK Full funksjonstilgang og VID datatilgang (BT)",
 dips-userrolehospital: "1",
 dips-hcpid: "1004491",
 dips-userroledepartment: "22",
 dips-userroleguid: "c1ec1da6-2c7b-344d-98fb-5db6e11a42ff",
 dips-audit-corr-id: "5a545476-03e7-4fa5-9bd4-2de410f7798f",
 scope: [
  "openid",
  "profile",
  "patient/*.read",
  "launch",
  "fhirUser"
 ],
 amr: [
  "pwd"
 ]
}

Validering av token