Kvalitetssystem
Integrasjoner med kvalitetssystemer kobler pasientrelaterte avvik i Aidn til kommunens etablerte avviksprosess. Når et avvik signeres i Aidn, sender Aidn en strukturert JSON-melding med bare nødvendige opplysninger til kvalitetssystemet (QMS). QMS behandler saken og sender én eller flere statusoppdateringer tilbake til Aidn.
Bruksområdet bygger på FHIR-konsepter, men integrasjons-API-et bruker et eget JSON-format. Derfor beskrives API-et her, ikke i FHIR API-referansen.
Scenario
Kommunen bruker Aidn som elektronisk pasientjournal og et separat kvalitetssystem for å håndtere avvik. Ansatte registrerer pasientrelaterte avvik i Aidn. Når et avvik signeres, overfører Aidn det umiddelbart til kvalitetssystemet slik at kommunen kan behandle saken videre i den eksisterende arbeidsflyten.
Aidn lagrer en lenke til saken i kvalitetssystemet og viser den siste statusen som systemet har sendt tilbake.
Påkrevd oppsett
| Konfigurasjon | Eier | Beskrivelse |
|---|---|---|
| OAuth-klient | Kommune eller Aidn-administrator | Klient konfigurert for leverandøren av kvalitetssystemet og riktig miljø. Se Kommuneoppsett. |
| Klientens privatnøkkel | Leverandør | Privatnøkkel som hører til den registrerte offentlige nøkkelen. Leverandøren eller administrasjonsportalen kan generere nøkkelparet under klientoppsettet. Privatnøkkelen må lagres sikkert. |
| Tilgang | Kommune eller Aidn-administrator | Klienten trenger adverseevent.write for å sende statusoppdateringer til Aidn. |
| Avdelingsoversikt | Kommune | Kommunen må gi QMS-leverandøren en liste over avdelingsnavn og Aidn-avdelings-ID-er for avdelingene som skal bruke integrasjonen. |
| Mottaksendepunkt i kvalitetssystemet | Leverandør | HTTPS-endepunkt der Aidn kan sende signerte avvik med POST. Autentisering for kall fra Aidn til kvalitetssystemet avtales under oppstarten. |
| Integrasjon aktivert for kommunen | Kommune eller Aidn-administrator | QMS-integrasjonen må aktiveres før forespørsler tillates for kommunen. |
Kommunen kan velge om integrasjonen skal være aktiv. Hvis kommunen krever det, kan trafikken også begrenses til Helsenettet.
Avdelingsoppsett
Før integrasjonen aktiveres, må kommunen gi avdelingsoversikten til QMS-leverandøren. Oversikten må inneholde avdelingsnavn og Aidn-avdelings-ID for hver avdeling som skal bruke integrasjonen. Leverandøren bruker oversikten når kvalitetssystemet konfigureres.
QMS-leverandøren bruker avdelings-ID-ene og navnene til å fordele, klassifisere eller vise avvik i tråd med kommunens avtalte oppsett.
Dataflyt
sequenceDiagram
participant User as Aidn-bruker
participant Aidn as Aidn
participant IdP as Aidn-identitetstjeneste
participant QMS as QMS-leverandør
User->>QMS: Gi avdelingsnavn og Aidn-avdelings-ID-er
QMS->>QMS: Konfigurer avdelinger for kommunen
User->>Aidn: Aktiver integrasjon for kommunen
User->>Aidn: Registrer og signer et pasientrelatert avvik
Aidn->>QMS: Send avvik som JSON med POST
QMS-->>Aidn: Teknisk kvittering
QMS->>QMS: Behandle saken i kvalitetssystemet
QMS->>IdP: Be om tilgangstoken med private_key_jwt
IdP-->>QMS: Tilgangstoken med godkjente tilganger
QMS->>Aidn: Send statusoppdatering som JSON med PUT
Aidn-->>QMS: Teknisk kvittering
Aidn->>Aidn: Vis siste status fra kvalitetssystemet i avviksbildet
Overføringen fra Aidn til kvalitetssystemet er synkron når det gjelder teknisk kvittering, men asynkron når det gjelder videre behandling. Saksbehandlingen fortsetter i kvalitetssystemet, som sender statusoppdateringer ved behov.
Hvis Aidn ikke kan overføre avviket til kvalitetssystemet når brukeren signerer, blir avviket liggende som kladd i Aidn. Brukeren kan signere det på nytt når integrasjonsfeilen er rettet.
Motta avvik fra Aidn
Aidn sender et signert avvik til kvalitetssystemets mottaksendepunkt som JSON.
POST <QMS_ADVERSE_EVENT_ENDPOINT> HTTP/1.1
Host: <QMS_HOST>
Accept: application/json
Content-Type: application/json
{
"identifier": "019c298c-366b-76a8-b73e-87306ae6550d",
"patientId": "9XFLLS",
"category": {
"code": "1",
"display": "Fall"
},
"severity": {
"code": "5",
"display": "Livstruende/invalidiserende"
},
"occurredDateTime": "2026-02-04T16:39:38.499132+00:00",
"detectedDateTime": "2026-02-04T16:39:38.499132+00:00",
"fields": [
{
"label": "Beskrivelse",
"identifier": 3486,
"value": "Description of adverse event",
"code": null
},
{
"label": "Utførte tiltak",
"identifier": 3492,
"value": "Measures taken",
"code": null
}
],
"reporter": {
"person": {
"name": "Example User",
"nationalId": "<NATIONAL_ID>",
"userPrincipalName": "example.user@example.org",
"actorId": "55598fe4-2826-4a0d-8881-db63ee27afd4"
},
"organization": {
"tenantMunicipalityNumber": "0000",
"tenantName": "Example municipality",
"organizationNumber": "874593842",
"organizationName": "Example nursing home",
"departmentId": "0ed0c8fd-1c82-4b3b-82bc-ae07c2cf38f5",
"departmentName": "Short-term ward"
}
}
}
Avvikspayload
| Egenskap | Type | Beskrivelse |
|---|---|---|
identifier |
string (UUID) | Aidn-identifikator for avviket. Brukes som koblingsnøkkel når status sendes tilbake til Aidn. |
patientId |
string | Anonymisert Aidn-identifikator for pasienten. Pasientens navn og fødselsnummer sendes ikke. |
category |
Coding | Type avvik. |
severity |
Coding | Alvorlighetsgrad. |
occurredDateTime |
string (ISO-tidsstempel) | Dato og tidspunkt for hendelsen. |
detectedDateTime |
string (ISO-tidsstempel) | Valgfritt. Dato og tidspunkt da hendelsen ble oppdaget eller lagt merke til. |
fields |
Field[] | Innhold fra avviksskjemaet. Minst ett felt er med. |
reporter |
Reporter | Tekniske opplysninger om melder og organisatorisk kontekst. |
Delte typer
| Type | Egenskaper |
|---|---|
Coding |
code (string), display (string). |
Field |
label (string), identifier (number), value (string), valgfri code (string). |
Reporter |
person og organization (objekter). |
Person |
name, eventuelt nationalId og userPrincipalName, samt actorId (UUID). Avhengig av kommunens identitetsoppsett inneholder objektet minst én av nationalId og userPrincipalName. |
Organization |
tenantMunicipalityNumber, tenantName, organizationNumber, organizationName, departmentId (UUID) og departmentName. |
Kategori og alvorlighetsgrad
Kategori og alvorlighetsgrad er kodet. Dagens avvikskategorier er:
| Kode | Visningstekst |
|---|---|
1 |
Fall |
2 |
Medisinavvik |
3 |
Ernæring |
4 |
Skade, vold eller trusler |
5 |
Svikt i utstyr |
6 |
Rutinesvikt |
7 |
Tjenesteavvik |
8 |
Personvern og informasjonssikkerhet |
9 |
Annet avvik |
Alvorlighetsgrad angis med kodene 1 til 6, fra ingen skade til død. Den norske teksten i
display-feltet er beregnet på sluttbrukere og bør beholdes når den vises i kvalitetssystemet.
Skjemafelter
Standardfeltene omfatter:
| Identifikator | Ledetekst | Beskrivelse |
|---|---|---|
3486 |
Beskriv avviket | Fritekstbeskrivelse av avviket. |
3492 |
Hvilke tiltak ble iverksatt på grunn av hendelsen | Beskrivelse av tiltakene som ble iverksatt etter hendelsen. |
3493 |
Forslag til fremtidige tiltak | Forslag til tiltak for å hindre lignende hendelser. |
For kategori 1 (Fall) kan Aidn også inkludere kodede felter for aktivitet ved fall,
illebefinnende og brudd:
| Identifikator | Ledetekst | Koder |
|---|---|---|
3487 |
Aktivitet | 1 Ut av eller opp i seng, 2 Bruk av rullestol, 3 Toalettbesøk, 4 Gange med rullator, 5 Fri gange, 6 Opp og ned fra stol, 7 Annet. |
3488 |
Illebefinnende | 1 Ja, 2 Nei, 3 Vet ikke. |
3489 |
Brudd | 1 Ja, 2 Nei, 3 Vet ikke. |
Send statusoppdateringer til Aidn
Kvalitetssystemet sender én eller flere statusoppdateringer til Aidn mens saken behandles. Aidn viser den siste mottatte statusen i avviksbildet.
PUT <OPEN_AIDN_QMS_STATUS_ENDPOINT> HTTP/1.1
Host: <OPEN_AIDN_HOST>
Accept: application/json
Content-Type: application/json
Authorization: Bearer <ACCESS_TOKEN>
{
"qmsId": "QMS-12345",
"identifier": "019c298c-366b-76a8-b73e-87306ae6550d",
"status": {
"code": "closed",
"display": "Ferdig behandlet"
},
"text": [
{
"title": "Status",
"date": 1770219578,
"text": "The adverse event has been handled in the QMS.",
"class": "summary"
}
],
"lastUpdated": 1770219578
}
| Egenskap | Type | Beskrivelse |
|---|---|---|
qmsId |
string | Kvalitetssystemets interne saks-ID. Lagres i Aidn for sporbarhet. |
identifier |
string (UUID) | Aidn-identifikator for avviket. Må matche identifier som Aidn sendte. |
status |
Coding | QMS-definert statuskode og brukervennlig visningstekst. Visningsteksten kan vises direkte til sluttbrukere. |
text |
StatusText[] | Én eller flere tekstblokker med statusinformasjon. |
lastUpdated |
number | UNIX-tidsstempel for tidspunktet avviket sist ble oppdatert i kvalitetssystemet. |
StatusText inneholder title, valgfri date, text, valgfri class og eventuelle nestede
objects for strukturerte tekstblokker definert av kvalitetssystemet.
Personvern og dataminimering
Integrasjonen er utformet for å unngå direkte pasientidentifiserende informasjon:
- Pasientens navn og fødselsnummer sendes ikke.
- Pasienten representeres med en anonymisert Aidn-identifikator.
- Bildevedlegg i Aidns avviksskjema overføres ikke gjennom API-et.
- Fritekstfelt kan likevel inneholde indirekte identifiserende opplysninger. Kommunen bør håndtere dette gjennom opplæring, rutiner og vurdering av personvernkonsekvenser ved behov.
- Kvalitetssystemet bør unngå å lagre melders fødselsnummer eller UPN med mindre dette inngår i det avtalte behandlingsformålet.
I avviksskjemaet informerer Aidn brukeren om at avviket overføres til kvalitetssystemet, og at det ikke må inneholde sensitive pasientopplysninger.
Sjekkliste før produksjonssetting
Kontroller oppsettet sammen med kommunen og QMS-leverandøren før løsningen settes i produksjon:
- Integrasjonen er aktivert for riktig kommune og miljø.
- QMS-klienten kan be om
adverseevent.write. - Kommunen har gitt QMS-leverandøren avdelingsnavn og Aidn-avdelings-ID-er for avdelingene som bruker integrasjonen.
- Aidn når kvalitetssystemets mottaksendepunkt over avtalt nettverksvei.
- Kvalitetssystemet lagrer Aidns
identifierog returnerer verdien uendret i statusoppdateringer. - Kvalitetssystemet håndterer dupliserte eller gjentatte avviksmeldinger uten å opprette feil saker.
- Kvalitetssystemet håndterer norske kodeverdier og visningstekster som avtalt.
- Kvalitetssystemet lagrer ikke opplysninger som kan identifisere pasienten, utover det avtalte formålet.
- Nøkkelrotasjon, driftsmessig overvåking, håndtering av nye forsøk og kontaktpunkter ved hendelser er avtalt.