Overblik over servicen
Nedstående diagram viser opbygningen af FGVHR-servicen:
Sikkerhed
Brugertyper
Der findes følgende brugertyper i FGVHR:
- Borger
- Administrativ
- System
De enkelte brugertyper bestemmes udfra modellen, der udstilles i Security API. Disse regler er opsummeret i tabellerne nedenfor.
Brugertypen: Borger | Verifikation | Mapning til FgvhrActor | ||
SecurityContext | Ticket | Audience | Matche audience som findes som konfiguration | |
Validity | Er valid | |||
Message | Verificeres ikke - må gerne være der | |||
ActingUser | UserType | Skal være Citizen | actorType | |
IdentifierFormat | Skal være CPR | |||
Identifier | Skal være sat | actorId | ||
GivenName | Verificeres ikke - må gerne være der | |||
SurName | Verificeres ikke - må gerne være der | |||
Credentials | Verificeres ikke - må gerne være der | |||
PersistentUniqueKey | Verificeres ikke - må gerne være der | |||
PrincipalUser | Må ikke være der | |||
Organisation | Må ikke være der | |||
Client | Verificeres ikke - må gerne være der |
Brugertypen: Administrativ | Verifikation | Mapning til FgvhrActor | ||
SecurityContext | Ticket | Audience | Verificeres ikke - må gerne være der | |
Validity | Er valid | |||
Message | Verificeres ikke - må gerne være der | |||
ActingUser | UserType | Skal være HealthcareProfessional | actorType | |
IdentifierFormat | Skal være CPR | |||
Identifier | Skal være sat | actorId | ||
GivenName | Verificeres ikke - må gerne være der | |||
SurName | Verificeres ikke - må gerne være der | |||
Credentials.NationalRole | Skal være der - og skal matche config variable i FGVHR | |||
PersistentUniqueKey | Verificeres ikke - må gerne være der | |||
PrincipalUser | Må ikke være der | |||
Organisation | Identifier | Skal være der | organisationIdentifier | |
identifierFormat | Skal være der og skal være CVR | |||
name | Skal være der | organisationName | ||
Client | Verificeres ikke - må gerne være der |
Brugertypen: System | Verifikation | Mapning til FgvhrActor | ||
SecurityContext | Ticket | Audience | Verificeres ikke - må gerne være der | |
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 | actorId | |
IdentifierFormat | Skal være der og skal være CVR | actorIdType | ||
persistentUniqueKey | Skal være der ved kald gennem FSK snitflade. Bruges til whitelisting af de anvendersystemer der skal hente status for en borger. FGVHR skal konfigureres med de certifikater der har adgang. | clientKey |
Database model
Datamodel
Datamodellen består af en tabel der hedder 'citizen_consent' og den har følgende kolonner:
kolonne | Type | beskrivelse |
---|---|---|
id | INT(11) | Tabellens primære nøgle (ikke relevant for scenarierne). |
uuid | Unik ID for rækken | |
patient_id | VARCHAR(64) | Patientens cpr nummer |
patient_id_source | VARCHAR(64) | Typen af patient_id. Dvs. kun 'CPR' lige nu |
created_date | DATETIME(3) | Tidspunktet hvor rækken oprettes i databasen. Bemærk at for dette tidstempel er præcisionen millisekunder. |
citizen_signing_date | DATE | Datoen borgeren har angivet på blanketten (tom hvis den ikke kommer fra en blanket) |
valid_from | DATE | Datoen hvor registreringen er gældende (= created_date + 7 dage). Bemærk dette felt indeholder ikke noget tidsstempel, da fravalget er gældende fra denne dato. |
status | VARCHAR(20) | Nuværende status for borgerens fravalg ('ACTIVE', 'INACTIVE', 'ENTERED-IN-ERROR') |
actor_role | VARCHAR(20) | Angiver hvem der har foretaget registreringen. Mulige værdier: 'CITIZEN' eller 'ADM' (Borger eller Administrativ medarb. vha. blanket) |
actor_id | VARCHAR(64) | Angiver id for den der har foretaget registreringen. Dvs. enten et cpr nummer eller en SOR kode |
actor_id_source | VARCHAR(64) | Typen af actor_id. Dvs. enten 'CPR' eller 'SOR' |
Scenarier
I det følgende beskrives en række scenarier og hvordan de tilhørende data ser ud. Rækker bliver aldrig slettet eller rettet - der bliver altid kun tilføjet nye rækker. Så fordelen ved denne løsninger er at historikken bevares.
Der er anvendt forsimplede uuid'er for læsbarhedens skyld.
Nr | Scenarie | uuid | patient_id | patient_id_source | created_date | citizen_signing_date | valid_from | status | actor_role | actor_id | actor_id_source |
---|---|---|---|---|---|---|---|---|---|---|---|
Registrering | |||||||||||
1 | Borger over 60år opretter selv registrering | dab09aa6fec | 0101611234 | 'CPR' | 09/08/2023 12:00:00.000 | NULL | 15/08/2023 | 'ACTIVE' | 'CITIZEN' | 0101611234 | 'CPR' |
2 | Borger under 60år opretter selv registrering | Oprettes ikke | |||||||||
3 | Adm opretter registrering for borger over 60 år | b5636bd8d16c | 0101611234 | 'CPR' | 09/08/2023 12:00:00.000 | 01/08/2023 | 15/08/2023 | 'ACTIVE' | 'ADM' | 275421000016009 | 'SOR' |
4 | Borger over 60år opretter selv registrering | 55e8864cb06d | 0101611234 | 'CPR' | 09/08/2023 12:00:00.000 | NULL | 15/08/2023 | 'ACTIVE' | 'CITIZEN' | 0101611234 | 'CPR' |
Borger sletter registreringen | f265453da124 | 0101611234 | 'CPR' | 07/09/2023 12:00:00.000 | NULL | 07/09/2023 | 'INACTIVE' | 'CITIZEN' | 0101611234 | 'CPR' | |
Sletning | |||||||||||
5 | Adm opretter registrering for borger over 60 år | 03c2aed5b856 | 0101611234 | 'CPR' | 09/08/2023 12:00:00.000 | 01/08/2023 | 15/08/2023 | 'ACTIVE' | 'ADM' | 275421000016009 | 'SOR' |
Adm sletter registreringen | 8b3eed7ed6c8 | 0101611234 | 'CPR' | 07/09/2023 12:00:00.000 | 27/08/2023 | 07/09/2023 | 'INACTIVE' | 'ADM' | 275421000016009 | 'SOR' | |
6 | Adm opretter registrering for borger over 60 år | 12a97d33c361 | 0101611234 | 'CPR' | 09/08/2023 12:00:00.000 | 01/08/2023 | 15/08/2023 | 'ACTIVE' | 'ADM' | 275421000016009 | 'SOR' |
Adm sletter registreringen der markere som fejlregistrering | 40215a3ef2c9 | 0101611234 | 'CPR' | 07/09/2023 12:00:00.000 | NULL | 'ENTERED-IN-ERROR' | 'ADM' | 275421000016009 | 'SOR' | ||
7 | Adm opretter registrering for borger over 60 år | b893fa943e45 | 0101611234 | 'CPR' | 09/08/2023 12:00:00.000 | 01/08/2023 | 15/08/2023 | 'ACTIVE' | 'ADM' | 275421000016009 | 'SOR' |
Adm sletter registreringen | 17b18c1720be | 0101611234 | 'CPR' | 07/09/2023 12:00:00.000 | 27/08/2023 | 07/09/2023 | 'INACTIVE' | 'ADM' | 275421000016009 | 'SOR' | |
Adm sletter registreringen der markere som fejlregistrering | 8c20aaef3f08 | 0101611234 | 'CPR' | 08/09/2023 12:00:00.000 | NULL | 'ENTERED-IN-ERROR' | 'ADM' | 275421000016009 | 'SOR' | ||
Opdatering | |||||||||||
8 | Adm opretter registrering for borger over 60 år | 817db31e97d3 | 0101611234 | 'CPR' | 09/08/2023 12:00:00.000 | 01/08/2023 | 15/08/2023 | 'ACTIVE' | 'ADM' | 275421000016009 | 'SOR' |
Adm sletter registreringen der markere som fejlregistrering | ba8c620ba79d | 0101611234 | 'CPR' | 09/08/2023 13:00:00.000 | NULL | 'ENTERED-IN-ERROR' | 'ADM' | 275421000016009 | 'SOR' | ||
Adm opretter registrering for borger over 60 år | cd2dcc3c1b54 | 0101611234 | 'CPR' | 09/08/2023 13:05:00.546 | 04/08/2023 | 15/08/2023 | 'ACTIVE' | 'ADM' | 275421000016009 | 'SOR' |
Modellen skal læses på følgende måde:
Indenfor et givent CPR nummer er det altid rækken med den seneste 'created_date' der er gældende.
Hvis status er 'ENTERED-IN-ERROR', så er denne og den foregående række ikke gyldige. Dvs. i scenarie nr. 6 har borgeren ikke et aktivt fravalg, mens i scenarie nr. 7 har borgeren et aktivt fravalg.
Integrationer
MinLog
Der er lavet en integration til MinLog der anvendes, når der ændres i en borgers fravalg. Se detaljerne under afsnittet "Beslutninger" længere nede på siden.
Ved manglende adgang til MinLog-servicen vil servicekaldet fejle.
FGVHR anvender MinLog Producer-biblioteket til at registrere i Minlog2.
NAS
Alle ændringer af aktive fravalg afstedkommer adviseringer til NAS. Dog sendes advisering kun straks ved sletninger. Ved fravalg der først bliver aktive i fremtiden, opsamles adviseringer og afsendes af et baggrundsjob, på den dato hvor fravalget bliver aktivt.
Bemærk, der sendes ikke adviseringer ved sletning af fravalg, der ikke er aktive.
Ved manglende adgang til NAS-servicen vil servicekaldet til sletning fejle.
Beskedformat
Det anvendte topic kan konfigureres (se driftsvejledningen).
Indholdet i notifikationen består af et ConsentUpdatedNotification-objekt, som blot indeholder dags dato. Borgerens ID sættes på NotifyContent i id-attributten.
Se følgende schema for ConsentUpdatedNotification:
Her ses et eksempel på en advisering til NAS:
Person Information Service.
Gennem kald til "person information service" foretages validering af CPR-nummer og en persons alder. Minimumsalderen for fravalg er konfigurerbart (se driftsvejledningen).
Beslutninger ift. arkitektur og jura
Følgende tabel er beslutninger, som har indvirkning på arkitekturen bag FGVHR
Dato | Emne | Problem, beskrivelse og beslutning | Afklaret med |
---|---|---|---|
14.08.2023 | Optimistisk låsning ved skrivning til registeret | Problem: Er der behov for optimistisk låsning, således der ikke sker en oprettelse/ændring af data bagom ryggen på den visning man nu ser? Beskrivelse: Der er kun to klienter som kan skrive data til register for fravalg. Den ene er borgeren selv via sundhed.dk, den anden er en administrativ medarbejder via NADM snitfladen. Administrative medarbejdere indtaster borgerens data fra papirblanketter indsendt fra de borgere som ikke er kyndige med det digitale. Sandsynligheden for at en borger skriver egne data via sundhed.dk på samme tid en administrativ medarbejder skriver borgerens data via NADM er defor minimal. Beslutning: Der indføres ikke optimistisk låsning ved skrivning ift nuværende snitflade | NSP |
14.08.2023 | Historik på data i FGVHR | Problem: Må borgerens historiske registrering af fravalg samt tilbagetrækninger opbevares i FGVHR? Beskrivelse: "Fravalgs-registeret" er lige nu designet til at opbevare al historik på borgerens registrerede fravalg, og ikke kun den aktuelle registrering. Data slettes først et år efter borgeren er registreret som afdød i CPR-registeret. | SDS's Juridiske afdeling |
25.05.2023 | Version af FHIR profil | Problem: Den 26.03.2023 blev FHIR release 5 frigivet, skal FGVHR's snitflade opdateres tilsvarende? Beskrivelse: Oprindeligt er snitfladen til FGVHR profileret efter version 4: http://hl7.org/fhir/R4/consent.html i mellemtiden 26/3 er FHIR release 5 blevet frigivet http://hl7.org/fhir/R5/consent.html Beslutning: Da der er tale om mindre justeringer baseret på en R4-R5 sammenligning, og vi samtidig kan sige, at hvis R5 havde været til rådighed, da vi lavede den første modellering, så havde vi vel valgt R5 uden at blinke ret meget, så peger de to ting tilsammen på, at vi skal basere os på version 5. | NSP |
27.03.2023 | Skrivning til Minlog | Problem: I hvilke situationer skal FGVHR skrive til Minlog? Beslutning:
Det vil forventeligt være meget få logninger, og desuden vil enhver tvivl om hvornår noget er ændret, derfor udvides den sædvanlige logning med retistreringer fra borgeren selv. | SDS's Juridiske afdeling |
23.01.2023 | Sundhedsfaglig adgang til borgerens registrering | Problem: Der er efterspurgt adgang til borgerens registrering uden om Fælles Stamkort, eksempelvis via replikering - kan det tillades? Beslutning: Status om borgerens fravalg for genoplivningsforsøg ved hjertestop udestilles kun til sundhedsfaglige systemer via Fælles Stamkort. | NSP SDS's juridiske afdeling |