10. Kvalitetskrav
10.1 Kvalitetsträd#
Kvalitetsträdet delar upp målen för kvalitet i kapitel 1.4 (ISO/IEC 25010:2023) i scenarier. Ett scenario är ett konkret fall som går att pröva och mäta.
| Kvalitetsegenskap | Delegenskap | Scenarier |
|---|---|---|
| Funktionell lämplighet | Korrekthet | Q1, Q2, Q3 |
| Fullständighet | Q4 | |
| Säkerhet | Konfidentialitet | Q5, Q6 |
| Spårbarhet och oavvislighet | Q7, Q8 | |
| Integritet | Q9 | |
| Prestanda | Tidsbeteende | Q10, Q11 |
| Kapacitet | Q12 | |
| Tillförlitlighet | Tillgänglighet | Q13 |
| Återställbarhet | Q14 | |
| Feltolerans | Q15 | |
| Kompatibilitet | Interoperabilitet | Q16, Q17 |
| Underhållbarhet | Modifierbarhet | Q18, Q19 |
| Modularitet | Q20 | |
| Testbarhet | Q21 | |
| Flexibilitet | Anpassningsbarhet | Q22 |
| Interaktionsförmåga | Tillgänglighet och lärbarhet | Q23, Q24 |
| Flyttbarhet | Installerbarhet och utbytbarhet | Q25, Q26 |
10.2 Kvalitetsscenarier#
Varje scenario har källa, stimulus, miljö, svar och mått, som i den vanliga mallen. Källan är den som gör något, och stimulus är det som händer. Miljön är läget när det sker. Svaret är vad systemet gör, och måttet visar om det räcker.
| Id | Källa och stimulus | Miljö | Svar | Mått | Krav | Verifiering |
|---|---|---|---|---|---|---|
| Q1 | Controller kör om majberäkningen 2026 i november med samma manifest | Produktion, efter flera retroaktiva beslut | Samma belopp per ersättningsrad | Bitidentiskt resultat (samma hash över ersättningsraderna) | KRAV-36 | POST /korningar/{id}/reproducera, facit maj 2026, IntegritetTester |
| Q2 | Nämnden beslutar i augusti om nya belopp från maj | Normal drift | Omräkning med nytt manifest och differensunderlag med bara skillnaden | Differensen stämmer mot facit på kronan. Den ursprungliga körningen finns kvar. | KRAV-55 | Golden-test, s05 |
| Q3 | Parallellkörning mot ERSMO/HEJ | Acceptans | Skillnader per vårdgivare förklaras | 100 % av skillnaderna förklarade under 3 månader i rad före bytet | KRAV-72, risk 1 | Migrering-rapport |
| Q4 | En ny ersättningsform beslutas (t.ex. en trappa på CNI) | Normal drift | Controllern bygger den av befintliga mallar | Ingen kodändring. Minst 95 % av regeländringarna under ett år utan utveckling. | Mål 2, KRAV-20 | Uppföljning av ändringsärenden |
| Q5 | En utvecklare försöker referera Personuppgifters interna typer från Berakning |
Bygge | Bygget stoppas | Arkitekturtestet faller | KRAV-18, ADR 0001 | ModulgransTester |
| Q6 | Ett fakturaunderlag skapas för en patient med skyddad identitet | Normal drift | Inga personnummer eller namn i underlaget | 0 träffar för personnummermönster i fakturor och exporter (automatisk skanning) | KRAV-18, planen 4f | Integrationstest |
| Q7 | En handläggare läser en vårdhändelse med personuppgifter | Normal drift | Läsningen loggas | 100 % av läsningarna finns i revisionsloggen med aktör, tid och objekt | KRAV-67 | Integrationstest, logguppföljning |
| Q8 | Samma controller försöker godkänna sin egen regelversion | Normal drift | Godkännandet avvisas | RV-5001, och försöket loggas |
KRAV-21 | Enhetstest, s06 |
| Q9 | Någon ändrar en revisionspost direkt i databasen | Angrepp | Ändringen upptäcks | VerifieraAsync pekar ut den första trasiga posten |
KRAV-67 | OutboxOchRevisionTester |
| Q10 | Ett journalsystem skickar 10 000 vårdhändelser under en topptimme | Toppbelastning | Alla valideras | Valideringsresultat för 100 % inom 1 timme, p95 inom 10 minuter. Uppmätt i F4: 70 000 händelser validerade på 4,2 minuter (marginal cirka 14 gånger) | KRAV-15 | VardhandelseLasttest (matningar.md) |
| Q11 | Månadsstängning för alla vårdgivare | Månadsskifte | Hela beräkningen klar | Högst 4 timmar. Uppmätt i F6: 2 miljoner vårdhändelser och 2,4 miljoner listade på 4,5 min; 3× volym cirka 13,6 min | KRAV-35 | BerakningLasttest (matningar.md) |
| Q12 | Ett år med vårdhändelser | Normal drift | Systemet klarar volymen | 25 miljoner öppenvårdstillfällen och 300 000 slutenvårdstillfällen per år, med partitionering per månad | B3 | Lasttest |
| Q13 | En nod i klustret går ned under kontorstid | Produktion | Trafiken flyttas till andra repliker | Tillgänglighet minst 99,5 % under kontorstid | KRAV-70 | Driftstatistik |
| Q14 | Primärdatabasen förstörs | Produktion | Återställning från WAL-arkiv | Dataförlust högst 1 timme (RPO). Återställning inom 4 timmar (RTO, förslag) | KRAV-70 | Kvartalsvis återställningsövning |
| Q15 | Raindance svarar inte när fakturor skickas | Produktion | Fakturan köas och skickas om | Ingen faktura går förlorad eller skickas två gånger (idempotens) | KRAV-54 | Integrationstest med mock |
| Q16 | Ett journalsystem byter till Ersvia | Övergång | Systemet fortsätter som i dag | Bara bas-URL ändras. 100 % av GVR v2-paritetstesterna gröna. Uppfyllt i F9a: 59/59 (v2.0.0) och 54/54 (v1.9.5) operationer, svaren validerade mot specens scheman | KRAV-6, KRAV-72 | GvrParitetTester |
| Q17 | Inera anropar carelisting Create |
Normal drift | Listningen registreras enligt kontraktet | Kontraktstest mot WSDL/schema för v2.1 | KRAV-12 | Kontraktstest |
| Q18 | SKR ändrar riksavtalets pris för digitala kontakter | Normal drift | Ny parameterversion | Klart inom en arbetsdag, utan release | KRAV-19 | Användartest |
| Q19 | Uppgradering av .NET eller PostgreSQL | Förvaltning | Komponenten uppgraderas för sig | Ingen ändring i andra moduler | KRAV-78 | CI |
| Q20 | Regionen vill byta ut beräkningen mot ett standardsystem | Förvaltning | Beräkningen byts ut bakom sina kontrakt | Övriga moduler oförändrade | KRAV-71, KRAV-74 | Kontraktstester |
| Q21 | Ett skall-krav saknar test | CI | Täckningsrapporten visar luckan | 100 % av skall-kraven har ett taggat test eller en dokumenterad mätning | Planen avsnitt 9 | JUnit till TestViora |
| Q22 | En ny region (Region Exempel) installerar Ersvia | Installation | Fungerar med eget regionpaket | Ingen kodändring. E2E-scenariot grönt för båda paketen. | KRAV-76, ADR 0010 | E2E |
| Q23 | En vårdgivare som använder skärmläsare granskar sitt fakturaunderlag | Portal | Alla uppgifter går att utföra | WCAG 2.2 AA, 0 allvarliga axe-fel | KRAV-69 | axe och manuella test |
| Q24 | En ny controller gör en regeländring och en månadsgranskning | Användartest före driftstart | Klarar uppgifterna | Efter högst en dags utbildning | KRAV-77 | Användartest |
| Q25 | Regionen byter leverantör | Avveckling | All data exporteras | Regler, avtal, underlag och beräkningar i öppet format, fullständigt | KRAV-79 | Exporttest |
| Q26 | Leverans till e-arkiv | Enligt dokumenthanteringsplanen | Paketen godtas | FGS Paketstruktur 2.0 validerar | KRAV-75 | Validering mot FGS |
10.3 Uppmätta värden (slutversion)#
Mätningarna finns i docs/plan/matningar.md. Maskinen var en WSL2-maskin med 12 kärnor och cirka 7–8 GB RAM. Den delades med andra agenter som byggde.
| Scenario | Krav | Uppmätt | Marginal | Test eller skript |
|---|---|---|---|---|
| Q10 Validering av en dygnsvolym (70 000 vårdhändelser) | Högst 60 min (KRAV-15) | 4,2 min: inskick 687 händelser/s, asynkron validering 281 händelser/s med 4 arbetare | cirka 14 gånger | VardhandelseLasttest |
| Q11 Månadsberäkning, full volym (2 miljoner vårdhändelser, 2,4 miljoner listade, 240 vårdcentraler) | Högst 4 timmar (KRAV-35) | 4,5 min (272,8 s), 7 330 vårdhändelser/s; 3× volym cirka 13,6 min; toppminne 4,5 GB | cirka 50 gånger | BerakningLasttest |
| Q1 Reproduktion | Bitidentiskt (KRAV-36) | Samma resultathash efter omstart och efter att händelserna markerats som ersatta | – | BerakningIntegrationTester, E2E steg 9b |
| Q22 Två regioner utan kodändring | E2E grönt för båda regionpaketen (KRAV-76) | 24/24 gröna (12 steg × 2 regioner) i delat zonläge med mTLS-zonbrygga; beräkningen mot facit har 0 avvikelser; cirka 42 s för båda regionerna inklusive containerstart och migrationer | – | tests/Ersvia.Tests.E2E |
| Fullstack i containrar | Alla images startar och samverkar | 15/15 kontroller gröna i docker compose (hälsa ×6, zonurval, zonbrygga, OIDC-inloggning, portalen inloggad, GVR med certifikat); 34 s till grön smoke; cirka 1,15 GB minne totalt | – | scripts/fullstack-smoke.sh |
| Q16 GVR-paritet | 100 % av operationerna | 59/59 (v2.0.0) och 54/54 (v1.9.5) | – | GvrParitetTester |
| Q23 Tillgänglighet | WCAG 2.2 AA, 0 allvarliga fel (KRAV-69) | 0 överträdelser på 67 axe-granskningar i portalen; SAD-sajten 0 överträdelser | – | axe.mjs, sad-sajt.mjs |
| Q14 Återställning | RPO ≤ 1 timme (KRAV-70) | WAL-arkivering med archive_timeout = 300 ger RPO ≤ 5 min; veckovis återläsningstest med hashkedjeverifiering |
– | deploy/backup/, kontinuitet.md |
| Q21 Kravtäckning | Alla skall-krav har test | 78 av 79 K-krav har grönt test (K74 är organisatoriskt); 21 av 40 lagkrav (NK); i TestViora har 100 av 119 krav test och 0 är underkända | – | kravtackning.md, testviora-uppladdning.md |
| Testsviten | Allt grönt | 1125 av 1125 (678 enhet, 274 kontrakt, 21 arkitektur, 37 integration, 24 E2E, 54 portal, 37 AI); 0 varningar i bygget | – | dotnet test |
Smoken (ett snabbt test av att allt startar och hänger ihop) hittade fem fel i drift och compose. De rättades i F12b. Det var dubbla appsettings när patientdata publicerades, och migrationsjobb som körde samtidigt. Det var också zonroller som saknade en anslutning som administratör, och värdar som migrerade vid start som zonroll. Det sista var GVR-certifikat bakom en ingress som avslutar TLS.
Allt är mätt i en miljö för utveckling, inte i regionens miljö för produktion. Tillgänglighet (99,5 %) och RTO (hur snabbt systemet är i gång igen efter ett avbrott) kan bara mätas i drift.