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
- A og B: Opprett LaunchContext og start webapplikasjon
- C: Initier launch-sekvens
- Access token (Payload)
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"
]
}