Hoppa till innehållet
ErsviaErsviaSystemarkitekturdokument

7. Driftsättningsvy

7.1 Infrastruktur#

Ersvia körs i containrar på Kubernetes eller OpenShift och har inga beroenden till molnspecifika tjänster. Helm-chartet deploy/helm/ersvia (byggt i F12a, ADR 0020) fungerar i regionens datacenter och hos en leverantör (svar på TV-ADR 1). Lokalt startar .NET Aspire (Ersvia.AppHost) eller deploy/compose (PostgreSQL, Keycloak, OTel-collector) hela miljön. Driften beskrivs i docs/drift/runbook.md, kontinuitet.md, nis2-incidentrutin.md och earkiv-och-gallring.md.

DriftsättningDriftsättningsdiagram: Helm på Kubernetes/OpenShift med två värdar per zon, zonbrygga och nätpolicyerLadda ned SVG: Driftsättningsdiagram: Helm på Kubernetes/OpenShift med två värdar per zon, zonbrygga och nätpolicyerLadda ned PUML: Driftsättningsdiagram: Helm på Kubernetes/OpenShift med två värdar per zon, zonbrygga och nätpolicyer

ArchiMateArchiMate: teknologi- och driftsvyLadda ned SVG: ArchiMate: teknologi- och driftsvyLadda ned PUML: ArchiMate: teknologi- och driftsvy

Images och värdar#

Komponent Image (deploy/docker/*.Dockerfile) Värd Zon Hälsa
patientdata ersvia/patientdata Ersvia.Patientdata (Ersvia:Zon=patientdata) Patientdatazon /healthz, /readyz
api ersvia/api Ersvia.Api (Ersvia:Zon=ersattning, eller alla i utveckling) Ersättningszon /healthz, /readyz
portal ersvia/portal Ersvia.Portal (CSP med nonce, OIDC) Ersättningszon /healthz, /readyz
ai ersvia/ai AI-tjänsten (REST /ai) AI-zon /healthz, /readyz
mcp ersvia/mcp Ersvia.Mcp (/mcp) AI-zon /healthz, /readyz

Alla images har fasta basimages (version och digest), körs som icke-root med skrivskyddat rotfilsystem och följer OpenShift restricted SCC. Driftjobben använder samma images med --jobb <namn>. Hittills har bara API-imagen körts; de övriga är byggda och skannade i CI men inte körda.

Helm-chartets struktur#

Mall (deploy/helm/ersvia/templates/) Innehåll
deployments.yaml Deployment per komponent med probes, säkerhetskontext och miljö per zon
services.yaml ServiceAccount, Service, HorizontalPodAutoscaler och PodDisruptionBudget
ingress.yaml Ingress, och OpenShift Route när det är valt: /v2, /snod, /api/carelisting, /api/kompatibilitet och /api/uppfoljning/v1/val till patientdata; /api, /, /ai, /mcp till ersättnings- och AI-zonen. mTLS-terminering med vidarebefordrat certifikat eller passthrough.
zon-certifikat.yaml cert-manager-certifikat för zonbryggan (zonernas interna CA och tillåtna namn)
networkpolicies.yaml neka-allt, dns-och-telemetri, fran-ingress, till-api, till-ai, zonbryggan och extraEgress per zon (t.ex. VAL från patientdatazonen)
jobb.yaml Job migrera-<zon> (Helm-hook, kör migrationer och zonroller --utfor före utrullningen), CronJobs gallring-<zon>, backup-<zon>, aterlasningstest och e-arkiv
lagring.yaml ConfigMap för backupskript och PersistentVolumeClaims

7.2 Nätzoner, zonbrygga och nätpolicyer#

Nätzon Komponenter Tillåten trafik in Tillåten trafik ut
Ingress (DMZ) Ingress-controller eller OpenShift Route, WAF HTTPS från vårdgivare och regionen; mTLS med SITHS för system Till patientdata, api, portal, ai, mcp enligt sökväg
Patientdatazon patientdata Från ingressen (insamling, fasader, VAL-uttag) och zonbryggan från api Till sin databas, zonbryggan till api, folkbokföringen, VAL (extraEgress), OTel
Ersättningszon api, portal Från ingressen och zonbryggan från patientdata Till sin databas, zonbryggan till patientdata, ekonomisystem, e-arkiv, OTel
AI-zon ai, mcp Från ingressen (MCP, /ai) och portalen Till api (läsning), egen databas, lokal modell eller godkänd extern leverantör
Databaser PostgreSQL per zon (rekommenderat) eller en databas med separata roller Bara från respektive zon WAL-arkiv i objektlagring

Zonbryggan (ADR 0020). Portar som går över zongränsen ersätts av proxyer (DispatchProxy) som anropar POST /intern/zon/v1/{port}/{metod} hos den andra zonen över HTTPS med ömsesidig TLS (port 8443). Klientcertifikatet valideras mot zonernas interna CA och tillåtna namn. Varje värd exponerar bara en vitlista (Zonkopplingar): patientdatazonen exponerar beräkningsunderlag (pseudonym och härledda fält), ersättningszonen referensdata. W3C-spårkontexten följer med. Svar från patientdatazonen passerar personnummervakten på båda sidor (kap. 8.4).

Databasroller per zon (Zonroller). Applikationsroll och gallringsroll per zon, grants bara till zonens scheman, uttryckligt nekande av andra zoners scheman och inga rättigheter för PUBLIC. Plattformsdata (idempotensnycklar) ligger i ett schema per zon. Jobbet zonroller --utfor sätter rollerna.

mTLS från system (F9a). Antingen terminerar ingressen TLS och vidarebefordrar klientcertifikatet i en header (Kompatibilitet:Mtls:VidarebefordratCertifikat), eller så går TLS hela vägen till Kestrel (passthrough eller Route med passthrough). Ersvia validerar kedjan mot SITHS-roten och hämtar HSA-id ur SERIALNUMBER.

7.3 Observerbarhet, kontinuitet och säkerhetsdrift#

Område Lösning (F12a)
OpenTelemetry Spår, mätvärden och loggar med OTLP till regionens collector (otel.endpoint). W3C-traceparent sparas i outboxen och följer med zonbryggan. Viktiga mätvärden: http.server.request.duration, ersvia.sakerhet.handelser, ersvia.zon.anrop och ersvia.zon.personnummerstopp (ska alltid vara 0, larm vid > 0).
Loggar Strukturerade och tvättade från personnummer, samordningsnummer och reservnummer (Personnummertvatt). Säkerhets- och åtkomstloggar går till en separat sink med minst 5 års bevarande; kortare konfiguration vägras vid start.
Backup och WAL WAL-arkivering och PITR via databasoperatorn (archive_timeout = 300, RPO ≤ 5 minuter) till objektlagring utanför klustret; logisk kopia varje dygn (deploy/backup/ersvia-backup.sh); automatiskt återläsningstest varje vecka (ersvia-aterlasning.sh, ersvia-verifiera.sh) med verifiering av hashkedjor.
NIS 2 Incidentrutin med tidig varning inom 24 timmar, incidentanmälan inom 72 timmar och slutrapport inom 1 månad (nis2-incidentrutin.md).
CI Build, test (utan Category=Last), kontrakt, JUnit, dotnet list package --vulnerable, SBOM (CycloneDX), helm lint och kubeconform, compose-kontroll och per image Docker-bygge, Trivy och image-SBOM (.github/workflows/ci.yml).

7.4 Miljöer#

Miljö Syfte Data AI Identitet
utv (lokal, Aspire) Utveckling Syntetisk seed FakeChatClient Keycloak, dev-CA
test Integration, kontrakt, E2E Syntetisk, "Region Exempel" och region Stockholm FakeChatClient eller lokal modell Keycloak, test-CA
acceptans Användartest (KRAV-77), parallellkörning Pseudonymiserad kopia Lokal modell Regionens IdP (test), SITHS test
simulering Isolerade simuleringar med produktionsunderlag Pseudonymiserad, läsbar kopia Lokal modell Regionens IdP
produktion Drift Riktig Lokal modell (standard), extern bara efter explicit aktivering Regionens IdP, SITHS

7.5 Tillgänglighet, backup och återställning#

Krav Lösning
99,5 % tillgänglighet under kontorstid (KRAV-70) Flera repliker med HPA och PodDisruptionBudget, rullande uppgraderingar, /readyz-probes, PostgreSQL med replik via operatorn
Återställning utan dataförlust äldre än 1 timme (KRAV-70) WAL-arkivering och PITR med RPO ≤ 5 minuter, logisk kopia varje dygn, veckovis återläsningstest med hashkedjeverifiering (kontinuitet.md)
RTO Mål 4 timmar under kontorstid (förslag, ska beslutas)
Månadsstängningen är kritisk Körningen kan göras om idempotent; manifest och snapshot ger samma resultat
Tillbakarullning helm rollback; migrationer är framåtkompatibla, och databasen rullas bara tillbaka med PITR

7.6 Övergångsarkitektur och införande#

Bytet sker stegvis enligt strangler fig-mönstret. Ingen utbetalning får avbrytas (F13, B19).

ArchiMateArchiMate: övergångsarkitektur med strangler-mönster och parallellkörningLadda ned SVG: ArchiMate: övergångsarkitektur med strangler-mönster och parallellkörningLadda ned PUML: ArchiMate: övergångsarkitektur med strangler-mönster och parallellkörning

Platå Vad som gäller Utbetalning görs av Klart när
A Dubbelskrivning Kompatibilitet tar emot GVR v2-trafik, sparar i Ersvia och vidarebefordrar till GVR. Listning och väntande speglas. ERSMO/HEJ/VF Alla journalsystem har bytt bas-URL
B Parallellkörning Berakning räknar på samma underlag som ERSMO/HEJ. Migrering jämför per vårdgivare och förklarar skillnaderna (med AI-stöd). ERSMO/HEJ/VF Minst 3 månader med förklarade skillnader (risk 1, KRAV-72)
C Ersvia betalar Fakturering skickar e-faktura till Raindance. Systemen som ersätts är i läsläge. VF-bokföringsfil och AF-rapport skapas av Kompatibilitet. Ersvia Avtalstexterna är ändrade, vårdgivarna informerade
D Avveckling Historiska beräkningar och avstämningar är migrerade (KRAV-73). Systemen som ersätts stängs. Ersvia Arkivleverans av systemen som ersätts

ArchiMateArchiMate: migrations- och implementationsvy med arbetspaket och platåerLadda ned SVG: ArchiMate: migrations- och implementationsvy med arbetspaket och platåerLadda ned PUML: ArchiMate: migrations- och implementationsvy med arbetspaket och platåer

Fasplan#

Tabellen över faser följer den tabell i planen som gäller (docs/plan/PLAN.md avsnitt 8, kontroll 3 Ä1). Ordningen gör att vi tidigt prövar vad regelmotorn kan uttrycka och hur snabb den är. Full paritet med dagens system (legacy) får vänta till F9. Aktuell status finns i Byggstatus.

Fas Innehåll Moduler Krav (urval) Status
F0 Skelett: solution, Aspire, BuildingBlocks, Api-host, arkitekturtester, CI, ADR:er BuildingBlocks KRAV-36, KRAV-71, KRAV-78 Klar
F1 Kontrakt v1 (OpenAPI/AsyncAPI, regelschema) och legacykontrakt (GVR v2/1.9.5, CVR, VF, felkoder) contracts/ KRAV-71, KRAV-72 Klar
F2 Masterdata, Kodverk, Personuppgifter, Överenskommelse, bitemporalt i PostgreSQL med RLS, med mockar Masterdata, Kodverk, Personuppgifter, Overenskommelse KRAV-1 till KRAV-5, KRAV-16 till KRAV-18, KRAV-76 Klar
F3 Regelverk: primitiver, 42 mallar med facit, fyra ögon, körfaser och DAG, import av rapporteringsanvisningar. Identitet med attest- och delegationsmatris. AI-adapter som FakeChatClient. Regelverk, Identitet KRAV-19 till KRAV-23, KRAV-66 Klar
F4 Vårdhändelser och Väntande (GVR v2-kärnan), validering ≤ 1 h, status per vårdhändelse, torrkörning Vardhandelser, Vantande, Kompatibilitet (v2-kärna) KRAV-6 till KRAV-10, KRAV-14, KRAV-15, KRAV-61 Klar
F5 Listning (ListOn) med intervall-lagring, carelisting-producent som mock och folkbokföring Listning KRAV-12, KRAV-24 Klar
F6 Beräkning: walking skeleton (kapitering och produktion), alla mallar, manifest, lasttest 3× (75 miljoner händelser), FUMS/FUL-insamling. Region Exempel i CI. Berakning, MedicinskService, Lakemedel KRAV-13, KRAV-24 till KRAV-38, KRAV-40, KRAV-56 Klar
F7 Simulering, Målrelaterad och Granskning (attest i två steg, kontrollregler, riskpoäng) Simulering, Malrelaterad, Granskning KRAV-41 till KRAV-49, KRAV-64, KRAV-65 Klar (Simulering i F6; Målrelaterad och Granskning i F7)
F8 Fakturering (zongräns, utlämningsexport och återidentifiering, Raindance/Peppol, Migrationsverket, budgetjustering) och Avstämning Fakturering, Avstamning KRAV-38, KRAV-39, KRAV-50 till KRAV-60 Klar
F9 Kompatibilitet fullt ut (GVR v1.9.5/v2 med full paritet, SNOD, CVR, VF-.prn, AF-Excel) och Rapportering (RAPP) Kompatibilitet, Rapportering KRAV-6, KRAV-11, KRAV-72 Klar (F9a och F9b)
F10 Uppföljning/VAL och Migrering/parallellkörning (dubbelmatning från GVR, legacy-manifest) Uppfoljning, Migrering KRAV-62, KRAV-63, KRAV-72, KRAV-73 Klar
F11 Portal (Blazor, WCAG 2.2 AA) och AI/MCP-förmågorna Portal, Ai, Mcp KRAV-5, KRAV-50 till KRAV-52, KRAV-59, KRAV-69, KRAV-77 Klar (F11a och F11b)
F12 E2E-scenario och Region Exempel, Drift (K70-mätning, PITR), e-arkiv, Helm och Docker Drift KRAV-67, KRAV-68, KRAV-70, KRAV-75, KRAV-79 Klar (F12a och F12b: E2E i delat zonläge 24/24, fullstack-smoke 15/15)

Koppling till TestVioras releaser: R1 (insamling, masterdata och avstämning) ≈ F0–F5 och F9. R2 (regelverk och beräkning) ≈ F3, F6 och F7. R3 (granskning, fakturering och uppföljning) ≈ F7, F8, F10 och F11. F12 avslutar.

Händelser som påverkar införandet: Sopra Steria moderniserar BEST, och HSN 2026-0799 är en samlad plan för vårdersättning. Symfoni 2.0 kommer. Kontroller av leverantörer ska upphandlas. NVID gäller för ny registrering från Q1 2027. En Psykiatrinämnd kan komma 2027 (den är föreslagen). Patientregistret för primärvården gäller från 2027-01-01. Cosmic tar över efter TakeCare cirka 2029, och ICD-11 gäller från 2029-01-01.

Ersvia SAD · version b706ca6 (2026-11-11) (med ändringar som inte är incheckade) · byggd 2026-11-11 · Ändringslogg · Diagramgalleri · Källa: docs/arkitektur/kapitel/07-driftsattningsvy.md

Sök i dokumentet

100 % Ladda ned SVG