11. Risker och teknisk skuld
11.1 Risker#
Riskerna R1–R5 kommer från TestViora (sannolikhet och konsekvens på skalan 1–5). R6 och framåt har tillkommit i arkitekturarbetet.
| Id | Risk | S | K | Ägare | Åtgärd i arkitekturen | Status |
|---|---|---|---|---|---|---|
| R1 | Fel i ersättningen vid systembytet | 3 | 5 | Controller på HSF | Parallellkörning i minst 3 månader med förklarade skillnader per vårdgivare (Migrering, AI-förklaring). Golden files. Reproducerbara körningar. |
Öppen |
| R2 | Regelverket blir för komplext för verksamheten | 3 | 4 | Systemförvaltningen | Regler som tabeller med villkor och utfall. Åtta primitiver och färdiga mallar. Tidig prototyp med controllers. Regelassistent. | Öppen |
| R3 | Det nya systemet upprepar gamla strukturer | 3 | 4 | HSF | Målarkitektur som grund. Workshoppar med vårdgivare, handläggare och uppföljning. Kanonisk modell i stället för GVR-modellen i kärnan. | Öppen |
| R4 | Bristande datakvalitet i underlagen | 4 | 4 | Systemförvaltningen | Validering vid mottagandet, svar inom 1 h, begripliga felkoder med AI-förklaring, datakvalitetsmått, nattlig omkörning av RF. | Öppen |
| R5 | Obehörig åtkomst till känsliga personuppgifter | 2 | 5 | Systemförvaltningen | Zoner, pseudonymisering, behörighet per roll och vårdgivare, läsloggning, hashkedjad revisionslogg, logguppföljning. | Öppen |
| R6 | Legacyformat som saknar publik specifikation (Kodserverns XML, FUMS-filer, VF:s e-faktura, SNOD25) | 4 | 3 | Arkitekt | Bygg efter publicerade specar. Beställ formaten från förvaltningarna. Adaptrar isolerar formaten. | Öppen |
| R7 | Ineras tjänstekontrakt för listning och anslutningen till NTjP/RTP försenas | 3 | 4 | HSF | Mock i MVP. Port med två adaptrar (egen listning eller statlig tjänst). Tidig dialog med Inera. | Öppen |
| R8 | Prestanda för månadsberäkningen (≤ 4 h) nås inte | 2 | 4 | Utvecklingsteamet | Parallellisering per vårdgivare, förberäknade ögonblicksbilder, lasttest redan i F7. | Öppen |
| R9 | AI ger felaktiga regelutkast eller läcker personuppgifter | 3 | 4 | Arkitekt | Utkast, fyra ögon, simulering och facittest. Pseudonymisering och utgående filter. Eval-svit. Lokal modell. | Öppen |
| R10 | Avtalstexterna kräver i dag VF, HEJ, AF, FUMS och FUL | 5 | 3 | HSF | Införandeaktivitet: avtalsändring och information till vårdgivarna före platå C. | Öppen |
| R11 | Cirka 40 avtalsområden publicerar inga ersättningsvillkor | 5 | 3 | HSF | Begär ut villkoren från HSF eller E-avrop. Mallarna är generella. OCR för OSAS-villkoren. | Öppen |
| R12 | Omorganisation (föreslagen Psykiatrinämnd 2027, RS 2026-0416) och nya föreskrifter (patientregistret 2027, ICD-11 2029) | 4 | 3 | HSF | Beställarnämnd som bitemporal dimension. Generisk kodverksmodell. | Öppen |
| R13 | Inloggningsuppgifter till NTjP-API:er finns i Ineras publika JavaScript | 3 | 3 | Användaren | Uppgifterna har inte använts. Användaren kan välja att rapportera det till Inera. | Öppen |
| R14 | Leverantörs- och kompetensberoende för en egenutvecklad produkt | 3 | 3 | HSF | Öppen källkod i stacken, dokumenterade kontrakt, SAD och ADR, export utan inlåsning. | Öppen |
| R15 | Införanderisk: BEST-moderniseringen (Sopra Steria), Symfoni 2.0, Cosmic 2029 och upphandlingen av leverantörskontroller (HSN 2026-0081) kan överlappa eller konkurrera | 3 | 4 | HSF | Kontaktplan för HSN 2026-0799 (samlad plan för vårdersättning). Modulpaket som kan köpas var för sig. | Öppen | | R16 | AI-förordningens högriskkrav från 2027-12-02 och GDPR-profilering av enskilda näringsidkare | 3 | 4 | Arkitekt | AI-register, högriskfunktioner avstängda som standard, DPIA, konsekvensbedömning art. 27 (kap. 8.6) | Öppen | | R17 | NIS 2-ansvar hos leverantör vid drift som tjänst | 3 | 4 | HSF | ADR om säkerhetsdrift, avtalskrav, incidentflöde 24 h/72 h/1 mån (kap. 8.4) | Öppen |
Arkitekturrisker från kontroll 3#
Den oberoende granskningen (docs/underlag/verifiering/kontroll3.md avsnitt 4) gav tolv arkitekturrisker. De tas in som ADR:er i den fas de berör.
| Id | Risk | Åtgärd | Fas | Status |
|---|---|---|---|---|
| K3-R1 | Rättelse av en delperiod i bitemporal lagring är felbenägen, och ersattTid omfattas inte av hashkedjan |
Rättelse som en operation i lagret, stängningen kedjas som egen händelse | F2–F3 | Delvis (F2: oföränderlighetstrigger och AvslutaAsync) |
| K3-R2 | As-of-uppslag per vårdhändelse blir dyrt | Manifestet kompileras till en oföränderlig ögonblicksbild i minnet vid körningens start | F6 | Öppen |
| K3-R3 | Prestanda: cirka 2,1 miljoner händelser per månad, trace på flera GB, retroaktiva omräkningar över 12+ månader, listning per dag ger cirka 900 miljoner rader per år | Mängdbaserad beräkning partitionerad per huvudman och period, intervall-lagring av listning, lasttest 3× | F5, F6 | Öppen |
| K3-R4 | Zonerna är bara logiska i en monolit | Egen process och deploybar enhet, DB-roll utan grants, HMAC per tenant och ändamål med nyckel i KMS/HSM, test som visar att ersättningszonen inte når patientdata | F8, F12 | Öppen |
| K3-R5 | Pseudonymiserade data är fortfarande personuppgifter | DPIA, k-anonymitet och aggregering före AI, extern LLM avstängd tills beslut | F11 | Öppen |
| K3-R6 | Återidentifiering saknas för drill-down och utlämning | Återidentifieringstjänst och utlämningsexport i patientdatazonen | F8 | Öppen |
| K3-R7 | NIS 2 i leveranskedjan | ADR om säkerhetsdrift | F12 | Öppen |
| K3-R8 | AI Act och GDPR: profilering av enskilda näringsidkare, art. 50.1 | AI-register med klassning (kap. 8.6) | F11 | Öppen |
| K3-R9 | Multi-tenant: läckage via poolade anslutningar, bakgrundsjobb eller outbox utan tenant; app-roll med BYPASSRLS; KSON passar inte "huvudman = region" | SET LOCAL per transaktion, test som misslyckas om tenant saknas, app-roll utan BYPASSRLS |
F2–F4 | Delvis (F2: RLS ENABLE + FORCE, app-roll utan BYPASSRLS, explicit filtrering, RLS-test stockholm/exempel) |
| K3-R10 | Regelmotorns uttrycksförmåga (pooler, årstak mitt i period, avrundning) | Fyra körfaser, DAG, avrundningsregel per mall | F3 | Öppen |
| K3-R11 | ERSMO/HEJ saknar transaktionstid | Legacy-manifest med källsystem och hash, differens mot importerat utfall, tee från GVR under parallellkörningen | F10 | Öppen |
| K3-R12 | Beroenden i organisationen | Se R15 | Löpande | Öppen |
11.2 Teknisk skuld (känd och avsiktlig)#
| Id | Skuld | Orsak | Planerad åtgärd | Fas |
|---|---|---|---|---|
| T1 | F0-skelett | Åtgärdad i F2: PostgresOutbox och PostgresRevisionslogg per schema (ADR 0011) |
F2 | |
| T2 | Masterdata använder in-memory-lager och saknar migrationer |
F0 | Åtgärdad i F2: EF-migrationer per modul, PostgresBitemporalLager |
F2 |
| T3 | Nio moduler finns i Modulkatalog efter F5 (Masterdata, Kodverk, Personuppgifter, Overenskommelse, Vardhandelser, Vantande, Identitet, Regelverk, Listning) |
Fasordning | Moduler läggs till fas för fas | F6–F11 |
| T4 | Åtgärdad: AsyncAPI i F1, ADR 0006 reviderad i SAD v3. Åtta planerade händelser saknas fortfarande i kontraktet (kap. 8.8). | F1, löpande | ||
| T5 | Felkodskatalogen bygger delvis på dokument från 2015. FA-5101 (utomläns äldre än 6 månader) saknas. |
Underlag | Verifiera med förvaltningarna, lägg in FA-5101 |
F8, F9 |
| T6 | Fasordning | Åtgärdad i F12a (ADR 0020): två värdar, zonbrygga, databasroller, INyckelkalla. Kvar: F8-adaptrarna i delat zonläge (T33) |
F12a | |
| T10 | Listfrågor och aggregering filtrerar i minnet efter AllaAsOf (masterdata, avtal och listning; ögonblicksbildens poster lagras som dokument) |
ADR 0011, ADR 0014 | Vårdhändelser och idempotens är åtgärdade i F4 (partitionerad tabell och idempotens-tabell). Listning behöver indexerade kolumner (enhet, typ) eller en materialiserad vy per dag, och posterna en egen tabell, vid lasttestet i F6 |
F6 |
| T11 | SAD före koden | Delvis åtgärdad i SAD v3: d02–d05, e01, e02 och e04 visar det byggda (F2–F5). d06–d08 och e03 är märkta som målbild och stäms av i F7–F8. | F7–F8 | |
| T7 | Ingen riktig mTLS eller OIDC i F0 | F0 | Keycloak och dev-CA i Aspire | F2–F5 |
| T8 | Integrationsadaptrar saknas (bara README) | F0 | Port, adapter och mock per integration | F2–F9 |
| T9 | Diagram och tabell- och gränssnittsnamn i SAD:en är delvis före koden (vardhandelse_version, idempotens, trace, manifest_post, listningsogonblicksbild, IVardhandelseMottagning, IPseudonymisering, IRegelversionLas) |
SAD skrivs före F2–F7 | SAD:en uppdateras efter varje fas, och avvikelser rättas i den riktning koden visar | Löpande |
| T12 | Listningsreglerna ligger i Listnings egen konfiguration (listningsregler.json, regler_version, Listningsregelmotor) och inte i Regelverk |
F3 och F5 byggdes parallellt (ADR 0014) | Byt IListningsregelkalla mot en adapter mot Regelverk när motorn kan uttrycka listningsregler som beslutstabell per regionpaket |
F6–F7 |
| T13 | Kö, index och uppehåll i Listning är dokument utan transaktion över flera dokument; listning körs sekventiellt per huvudman | MVP | Egen tabell eller transaktion över dokument | F6 |
| T14 | Fasordning | Åtgärdad i F9a utom SNOD25 (T23) och VF-.prn/AF-Excel (F9b) |
F9a | |
| T15 | carelisting v2.1 exponeras över REST, inte RIVTA via NTjP | MVP | NTjP/RIVTA-adapter ovanpå ICarelistingProducent |
F9–F12 |
| T16 | Personuppgifters hashkedjade åtkomstlogg skrivs seriellt per huvudman (flaskhals i lasttestet), och PostgreSQL:s gräns på 100 anslutningar räcker bara upp till cirka 16 samtidiga valideringar | F4-mätning | Batchad loggning eller partitionerad kedja; anslutningspooler | F6 |
| T17 | Parallellt arbete | Åtgärdad (1d377a2): 0012 vårdhändelser, 0013 regelmotor, 0014 listning | Klar | |
| T18 | Regelmotorns kända luckor: mätning vid flera tidpunkter i mål, riskpott i tandvård, LOL-undantag över tak 2, arvode som passerar tak 1 mitt i ett besök | ADR 0013 | Byggs i F6–F7 | F6–F7 |
| T19 | Beräkningskörningen är synkron i anropet (202 med avslutat jobb) | ADR 0015 | Bakgrundskö och jobbstatus | F12 |
| T20 | ADR 0015 | Åtgärdad i F8: faktureringsdatum i periodfiltret (ADR 0019) |
F8 | |
| T21 | ADR 0015 | Åtgärdad i F8: raden MOMSK-AVTAL på allt fakturerat (ADR 0019) |
F8 | |
| T22 | GVR:s akut- och tillgänglighetsfält lagras bara i kompatibilitetsfasadens gvrpost, inte i Vårdhändelser |
F9a | Ta in fälten i den kanoniska vårdhändelsen om de behövs för ersättning eller uppföljning | F10 |
| T23 | SNOD25 med fast postlayout och SNOD-XSD saknas i underlaget och är inte byggda | F9a | Begär specifikation från GVR-förvaltningen (öppen fråga F1) | F9b |
| T24 | Listningsbilden hålls i minnet för alla listade (toppminne 4,5 GB vid full volym) | F6-mätning | Hämta listning per vårdenhet ur porten eller sänk parallelliteten | F12 |
| T25 | Rader och trace lagras som dokument per körning och vårdgivare | ADR 0015 | Egen tabell om Avstämning (F8) kräver det | F8 |
| T26 | Indikatorer och kontrollregler ligger i egna moduler (Malrelaterad, Granskning) och inte i Regelverk | ADR 0017 | Avsiktligt; omprövas om regelmotorn får indata för täljare, nämnare och kontrollhändelser | Löpande |
| T27 | Referensräntor och beloppsnivåer i attest- och delegationsmatriserna är exempelvärden i regionpaketet | Inget publicerat attestreglemente | Regionen fyller i från beslutsordningen och Riksbankens beslut varje halvår | Införande |
| T28 | Skuggningskön till gamla GVR ligger i minnet; full kö eller omstart tappar anrop | ADR 0018 | Beständig kö (outbox) före skuggning med full volym | F12 |
| T29 | Leveranser och exporter lagras base64-kodade som dokument | ADR 0018 | Objektlagring eller leveranskatalog, bara manifestet i databasen | F12 |
| T30 | KPP-layouten 2025 och patientregistrets variabelförteckning finns inte i underlaget; layouten är tolkad | ADR 0018 | Begär specifikationerna från SKR och Socialstyrelsen | F12 |
| T31 | ADR 0016 | Åtgärdad i F12a: AI-zonens databas | F12a | |
| T32 | Anthropic-adaptern är otestad mot det riktiga API:t | F11a | Integrationstest med nyckel i en godkänd miljö | F11b |
| T33 | IFaktureringsunderlag, IAvstamningsunderlag, IKompatibilitetIdentitet, IKompatibilitetFakturering, IKompatibilitetAvstamning) blandar data från båda zonerna och klarar inte delat zonläge |
F8 och F12a parallellt | Åtgärdad i F12b (ADR 0020, tillägg F12b) | F12b |
| T34 | FGS-paketen är inte validerade i Riksarkivets eller E-ARK:s verktyg; METS/PREMIS-XSD saknas och arkivbeskrivningen är inte EAD | F12a | Validera och samråd med Regionarkivet | Införande |
| T35 | F12a | Åtgärdad i F12b: alla fem images körda i fullstack-smoken (15/15) | F12b | |
| T36 | VAL-leveranserna (personnummer i klartext) hålls i minnet i patientdatazonen | ADR 0020 tillägg | Persistent krypterad utkorg | Införande |
| T37 | Tillägg på fakturaunderlag saknar bifogade filer (finns inte i kontraktet) | F11b | Utöka kontraktet fakturering.yaml |
F11c |
| T38 | Mina rapporter saknar ZIP och kopiering av beställningar | F11b | Bygg i Avstämning och portalen | F11c |
| T39 | Zonbryggan går utan mTLS i docker compose (KravMtls=false); mTLS mellan zonerna prövas i E2E och i Helm med cert-manager |
Compose för utveckling | Aktivera mTLS i compose med dev-CA | Införande |
| T40 | Produktkodstabell för BTYP + yrkeskategori + taxa finns inte i regionpaketet; besöksersättningen härleds via den versionerade tabellen vdg-yrkesgrupp (VC-BESOK-rättelsen) |
Underlag saknas | Läs in Kodserverns PRODUKT-tabell och bygg produktkodsregeln | Införande |
| T41 | AF-rapporten gör zonhopp patientdata → ersättning → patientdata | ADR 0020 tillägg F12b | Strömma underlaget vid full volym | Vid behov |
| T42 | E2E prövar LMA-kontrollen via återsökningsunderlaget och förregistreringens format, inte själva fakturaspärren FA-5006 (den prövas i enhetstest) |
E2E-scenariots omfång | Lägg till fakturaspärren i E2E steg 7 | Införande |
| T43 | .prn-filens teckenkodning och beloppsformat, och billing:claim-XML:en, är inte verifierade mot verkliga filer och tjänstekontraktets XSD |
Underlag saknas | Verifiera med VF-förvaltningen och Inera | Införande |
| T44 | I TestViora visas 78 K-krav som delvis verifierade, eftersom de äldre testfallen TC1–TC79 aldrig har körts (uppladdningen är gjord, be1fa89) |
Äldre testfall i projektet | Markera TC1–TC79 som föråldrade, kör eller ta bort dem | Beslut |