Page History
| Navitabs | ||||
|---|---|---|---|---|
| ||||
Table of Contents
Referencer
[EHMI-ARK] | Målbillede for EHMI ”Maalbillede for meddelelseskommunikation.pdf” |
[EAS-FHIR-IG] | EAS FHIR Implementation Guide |
[EAS US] | EHMI-EAS users-stories ”Sundhedsadressering User stories - ny skabelon.docx” |
[HAPI FHIR] | Open source FHIR service |
[EER-FHIR-IG] | EER FHIR Implementation Guide |
[EHMI-SIK] | Sikkerhedsarkitektur for EHMI Sikkerhedsarkitektur EHMI services v10.pdf |
Baggrund
I 2020 udarbejdede Sundhedsdatastyrelsen Målbillede for meddelelseskommunikation på sundhedsområdet [EHMI-ARK], som dannede grundlag for en efterfølgende pilotafprøvning.
...
Disse funktioner dækker behovene i produktionspiloten, og EAS udbygges løbende med yderligere fremsøgningsscenarier.
Applikationsarkitektur
Et samlet overblik over EAS-applikationsarkitekturen ses i figuren nedenfor.
...
EAS-operationerne er defineret via HL7-FHIR R4 CapabilityStatement.
Adresseringsforretningslogik
EAS realiserer følgende fire use cases (jf. EAS FHIR Implementation Guide):
...
De fire use cases benytter de fire FHIR-operationer beskrevet nedenfor. På den følgende figurI Figur 2 er de fire operationer fremhævet med mørkeblå farve.
Navn op på FHIR operation | Input og output | UseCase |
getReceivingOrganizationByPatientId | Input: 1) CPR-nummer opsat i EasCorePatientFHIR ressourcen 2) Liste af MessageType | UC 1 |
Output Succes) Liste afEasMessagingOrganization og refererede EndpointFHIR ressourcer Error)EasOperationOutcome | ||
getReceivingOrganizationByGPId
| Input: 1) Ydernummer opsat i EasSorOrganizationFHIR ressourcen 2) Liste af MessageType | UC2 |
Output Succes) Liste afEasMessagingOrganization og refererede Endpoint FHIR ressourcer Error)EasOperationOutcome | ||
getListOfGpByPostalCode
| Input: 1) Liste med af postnumre 2) Liste af MessageType. | UC3 |
Output Succes) Liste afEasSorOrganizationFHIR ressourcer Error)EasOperationOutcome | ||
getReceivingOrganizationBySORId
| Input: 1) Liste af SOR-koder opsat i EasSorOrganizationFHIR ressourcen. 2) Liste af MessageType. | UC3 og UC4 |
Output Succes) Liste afEasMessagingOrganization og refererede Endpoint FHIR ressourcer Error)EasOperationOutcome |
...
Af sekvensdiagrammetFigur 3 fremgår der, at operationen getReceivingOrganizationByPatientIdbygger på opslag i følgende autoritative registre:
- Personinformation: CPR-data, hvor det verificeres, om borgeren eksisterer.
- Sikrede: Indeholder sygesikringsinformationer; herfra hentes ydernummeret på den praktiserende læge, som borgeren er tilknyttet(såfremt borgeren er i sygesikringsgruppe 1).
- SOR: Sundhedsvæsenets organisationsregister, hvor ydernumre mappes til SOR-id’er og hvor organisations-data kan aflæses.I SOR-registeret kan et ydernummer være tilknyttet flere SOR-noder indenfor samme organisation. Alle disse SOR-noder skal udtrækkes,samt de SOR-noder, der ligger hierarkisk under og over de SOR-noder, der har ydernummeret tilknyttet*.
- EER: [EER-FHIR-IG]–EHMI Endpoint Register (EER) er et register etableretafMedCom i regi af EHMI-pilotprojektet, som indeholder oplysninger om en SOR-enheds endpoints i form af GLN-numre.EER kaldes med alle returnerede SOR-noder fra SOR-opslaget.
*En organisation (eksempelvis en lægepraksis) er i SOR-registeret repræsenteret som et hierarki af SOR-noder (jf. eksemplet på figuren nedenfor). Som det fremgåraf figuren, såer noderne med SOR-id xx6 og xx7 tilknyttet ydernummer=c. I dette tilfælde skal forældrene også udtrækkes – dvs. det bliver i alt noderne xx6, xx7, xx4 og xx1.Hvis det derimod var ydernummer=b, som skal fremsøges, så bliver det med forældre og børn noderne xx5, xx3 og xx1.
possible
Af sekvensdiagrammet ovenfor fremgår der, at use case 3 (Getpossible General Practitioner for a Patient by PostalCodes) benytter to EAS-opslag:
...
- Anvenderen udvælger de SOR-noder, som repræsenterdeneller delægepraksisser, som meddelelsen skal sendes til.
- Derefterbenyttes EAS-operationen getReceivingOrganizationBySORId til at hente EndPointAdresserne (EasMessagingOrganisation)for de udvalgteSOR-noder.EAS anvender EER-registeret til at hente EndPointAdresserne (disse returneres som FHIR Endpoint-ressourcer side om side med EASMessagingOrganizations).
*I eksemplet på figuren ovenfor (SOR-hierarki) vil det komplette hierarki være alle SOR-noderne (xx1, xx2, xx3, xx4, xx5, xx6 og xx7).
...
- EER (MedCom service)
PersonInformation er en eksisterende REST REST service på NSP (jf. https://www.nspop.dk/display/public/web/SDM+-+Guide+til+anvendere#SDMGuidetilanvendere-5.6CPRregistret:personinformation). Servicen skal anvendes til at afgøre om cpr-nummeret eksisterer.
...
EER udstiller en FHIR-operation getReceivingOrganizationBySORID, der tager en liste med SOR-id’er og en liste af MessageType som input. EER undersøger, om der er tilknyttet eDeliveryendpoints til de SOR-id’er, der fremgår af input. De udvalgte endpoints skal samtidig understøtte en af de meddelelsestyper, som fremgår af listen af MessageType’s. Output fra EER er de EasMessagingOrganization samt deres Endpoint-adresser (GLN-numre), som lever op til ovenstående kriterier. Output pakkes ind i en liste af EerMessagingOrganization FHIRer sidestillede EerMessagingOrganization og deres refererede Endpoint-ressourcer.
Såvel PersonInformation, SikredeInformation og SORES er NSP-interne REST-services og kan kaldes uden sikkerhedsbillet. Derimod er EER en ekstern service, som kræver, at klienten (dvs. EAS) først får udstedt et OAuthaccesstoken ved Sundhedsdatastyrelsens (Keycloak-baserede) Authorization Server. EAS integrerer til Authorization Serveren og EER som beskrevet i afsnit 7.3 i [EHMI-SIK].
EASoperationerne (getReceivingOrganizationByPatientId, getReceivingOrganizationByGPIdog getReceivingOrganizationBySORId)returnereren liste med EasMessagingOrganization og Endpoint FHIR ressourcer til Serviceaftageren. Denne må ikke forveksles med EerMessagingOrganization, da det er to forskellige ressourcer, og output fra henholdsvis EAS- og EER-servicen.
...
- PartOf – reference til forældre SOR-noden
Sikkerhedslogik
EAS servicen realisererOAuthsikkerhedsmodellen som er beskrevet i [EHMI-SIK] og som er illustreret i ovenstående figur. Aftagere af EAS servicen (eksempelvis i et klinisk fagsystem) skal kalde EAS med et accesstoken som de har fået udstedt af Sundhedsdatastyrelsens Authorization Server (Keycloak). Sikkerhedsprotokollen er baseret på 2-vejs TLS, hvor klientens accesstoken er kryptografisk bundet til klientensTLS-klientcertifikatet (se [EHMI-SIK] for detaljer). I EAS deploymentsetup’ettermineres TLS i en foranstillet netværkskomponent (NGINX), som på standard vis viderefører klientens TLS-klientcertifikat til EAS i en HTTP header.
EAS validerer de indkommendeaccesstokensom illustreret i HAPI FHIR Security Interceptor i Figur 6. Konkret validerer EAS at:
- Signaturen på tokenet er valid og at tokenet er signeret af en trusted part (dvs. SDS’ KeycloakAuthorization Server)
- Klientens TLS certifikat(som netværks/TLS-proxy’en viderefører til EAS i en HTTP header)matcher certifikatoplysningen i tokenets ’cnf’ claim.
- Tokenet er gyldig i tid, dvs. hverken er udløbet eller endnu ikke gyldig
- Tokenets level of assurance er på minimum NIST niveau 3
- Tokenetsscopeclaimindeholder de fornødnescopes, som er ’EAS’ og ’system/Organization.rs’
- Tokenets audience (’aud’ claimet) er sat til ’EAS’
Der bemærkes, at NSP AccessHandlervaretager parsningenaf JTP-H access tokenet, samt står for validering 1. og 3. i ovenstående liste.
Access- og audit-logning håndteres viaNSP AccessHandler.
Sikkerhedsmodel for Security API (NSP Accesshandler Ticket)
Følgende afsnit beskriver sikkerhedsmodellen for den Ticket EAS validerer (De grønne processer i billedet ovenfor). Jf. Security API - Guide til anvendere
Ifølge EHMI-SIK er det kun systembrugere der kan kalde EAS.
Et eksempel på en udstedt JTP-H JWT Token for en systembruger mod EAS kan ses i følgende skærmbillede:
| Feltnavn (Nivaeu 1) | Feltnavn (Nivaeu 2) | Værdi |
| Ticket | Audience | https://eas.ehmi.dk |
| IsValid | true | |
| Created | 2026-01-27T:10:39:24+01:00 | |
| ValidFrom | 2026-01-27T:10:44:24+01:00 | |
| ValidTo | 2026-01-27T:10:44:24+01:00 | |
| Message | Identifier | |
| ConversationIdentifier | ||
| Action | ||
| ActingUser | Type | |
| IdentifierFormat | ||
| Identifier | ||
| GivenName | ||
| SurName | ||
| Age | ||
| Relation | ||
| PersistentUniqueKey | ||
| PrincipalUser | Type | |
| IdentifierFormat | ||
| Identifier | ||
| GivenName | ||
| SurName | ||
| Age | ||
| Relation | ||
| Organization | IdentifierFormat | CVR |
| Identifier | 33257872 | |
| Name | Sundhedsdatastyrelsen | |
| Client | Name | |
| PersistentUniqueKey | 89c9afe9-9466-4fb7-a1d2-7776ce57d93c |
| Brugertypen: System | Verifikation | ||
| SecurityContext | Ticket | Audience | Verificeres ikke i ticket - håndteres af anden validator som beskrevet i løsningsarkitekturen |
| Validity | Er valid | ||
| Message | Verificeres ikke - må gerne være der | ||
| ActingUser | Må ikke være der | ||
| PrincipalUser | Må ikke være der | ||
| Organisation | Identifier | Skal være der | |
| IdentifierFormat | Skal være CVR | ||
| Client | PersistentUniqueKey | Skal være der | |



