Byggstatus
Det här kapitlet visar slutstatus för referensimplementationen: vad som är byggt, hur det är verifierat och vilka avvikelser och luckor som återstår, med länkar till koden och arkitekturbesluten. Det uppdaterades i slutet av varje fas, tillsammans med ändringsloggen. En kortfattad version för styrgruppen finns i Sammanfattning för beslutsfattare. Fasindelningen följer den kanoniska fastabellen i planen (docs/plan/PLAN.md avsnitt 8) och kapitel 7.6.
Slutstatus 2026-11-11 (SAD v7): Alla byggfaser F0–F12 är klara (F9 som F9a och F9b, F11 som F11a och F11b, F12 som F12a och F12b), liksom VC-BESOK-rättelsen och GUI v2. dotnet build ger 0 varningar, och dotnet test ger 1125 av 1125 gröna tester (efter F2: 251, F3: 542, F5: 638, F6/F9a: 796, F7/F10/F11a: 944, F12a/F11b: 1060, F12b: 1089). Portarna kopplas i kompositionsroten Modulkopplingar, Kopplingar/ och, över zongränsen, Zonkopplingar.
Översikt per fas#
| Fas | Status | Commit | Byggt | ADR |
|---|---|---|---|---|
| Förberedelse | Klar | 0c3cf8a, 6b0b781, 63afcbe |
Underlag i docs/underlag/: uppsatsen, TestViora, systembeskrivningar, avtal, GVR-specar, lagregister, fullmäktige, diariet, benchmark och kontroll 3 |
|
| F0 Skelett | Klar | 4d576fe |
Solution, Ersvia.BuildingBlocks, Ersvia.Api, Ersvia.AppHost, arkitekturtester |
0001–0010 |
| F1 Kontrakt | Klar | d837638 |
18 OpenAPI 3.1-kontrakt plus common.yaml (172 operationer), AsyncAPI 3.0 med 23 händelser, regelschema (10 primitiver, 33 mallar), legacykontrakt för GVR 2.0.0/1.9.5, CVR och VF, och felkoder.yaml med 438 koder |
0002 |
| F2 Masterdata, Kodverk, Personuppgifter, Överenskommelse | Klar | e96a50d |
Bitemporal persistens med RLS och fyra moduler (se nedan) | 0011 |
| F3 Regelverk och Identitet | Klar | 84917df |
Ersvia.Regelmotor, modulerna Regelverk och Identitet, regelmappning.yaml, 51 facitfiler |
0013 |
| F4 Vårdhändelser och Väntande | Klar | 8e6d3f1 |
GVR v2-kärnan: partitionerad lagring, idempotens, inskickets livscykel, asynkron validering, faktureringsmånad och periodbilder; lasttest | 0012 |
| F5 Listning | Klar | 0a26dbb |
ListOn-ersättaren med intervall-lagring, regler per regionpaket, carelisting v2.1 (7 operationer), låsta ögonblicksbilder | 0014 |
| F6 Beräkning, Simulering, FUMS/FUL | Klar | 8d4d7f0 |
Beräkning med manifest, retroaktivitet och skuggkörning, Simulering, MedicinskService och Lakemedel med KÖL, Region Exempel i CI, facit maj 2026, 4,5 min för full volym | 0015 |
| F9a Kompatibilitet och Rapportering | Klar | b3adec3 |
GVR v2 59/59 och v1.9.5 54/54, mTLS via SERIALNUMBER, SNOD med nio tjänster, CVR, Rapportering med 34 operationer | 0012 (portar) |
| F7 Målrelaterad och Granskning | Klar | 1017451 |
Indikatorer, måluppfyllelse, årsavstämning, ansökningar; kontrollregler, riskpoäng, ärenden, återkrav med ränta och preskription, attest, årsrapport | 0017 |
| F10 Uppföljning, Migrering, Drift | Klar | 3891443 |
Exportpaket med manifest, nationella exporter, budget, publicering; parallellkörning, skuggning, legacy-körningar; integrationsstatus, loggar, export, e-arkiv | 0018 |
| F11a Portal, AI och MCP | Klar | 28f74ab |
Blazor-portal med tema per regionpaket och Vad gällde när?, AI-tjänst med register och skydd, MCP-server | 0016 |
| F8 och F9b Fakturering, Avstämning, VF/AF | Klar | 9f92684 |
Fakturering med Peppol, attest, kvittning, utlämningsexport och billing:claim; Avstämning; VF-.prn och AF-Excel |
0019 |
| F12a Drift | Klar | 4c08934 |
Fysisk zonseparation med zonbrygga och personnummervakt, Docker, Helm/OpenShift, OTel, backup/RPO, FGS e-arkiv, gallring, NIS 2-rutiner, CI med SBOM och Trivy; VAL-export från patientdatazonen | 0020 |
| F11b Portalsidor | Klar | 02cfdfd |
Sidor för alla roller; axe 45/0 | 0016 |
| F12b E2E och zonuppdelning | Klar | 0f2c1c6 |
E2E i delat zonläge 24/24 för båda regionerna, zonuppdelade F8-adaptrar (IVardhandelsestatusunderlag, IAfUnderlag, IKompatibilitetFakturering, IKompatibilitetReferens), personnummervakt åt båda håll, fullstack-smoke 15/15, kravtäckning |
0020 (tillägg F12b) |
| Rättelse VC-BESOK | Klar | d17d400, b19722f |
Versionerad tabell vdg-yrkesgrupp, regel 04a/04b, nytt facit |
|
| GUI v2 | Klar | 604d2ce, d4d5696 |
Sidomeny per arbetsflöde, Ctrl+K, rollväljare, startsidor per roll, komponentbibliotek, tokens v2; SAD-sajten omdesignad | 0021 |
| SAD | v7 (slutversion) | denna commit | Kapitel 00–18, 60 diagram, skärmdumpar från GUI v2, HTML-sajt |
Verifiering i slutläget#
| Område | Resultat | Källa |
|---|---|---|
| Testsviten | 1125 av 1125 gröna (678 enhet, 274 kontrakt, 21 arkitektur, 37 integration, 24 E2E, 54 portal, 37 AI); bygget ger 0 varningar | dotnet test efter GUI v2 |
| E2E i delat zonläge | 24/24 (12 steg × region-stockholm och region-exempel) med två Kestrel-värdar, mTLS-zonbrygga, zonroller utan grants och GVR-fasad med SITHS-liknande certifikat; beräkningen mot facit har 0 avvikelser; cirka 42 s | tests/Ersvia.Tests.E2E |
| Fullstack i containrar | 15/15 kontroller med alla fem images i docker compose; fem driftfel hittade och rättade | scripts/fullstack-smoke.sh, matningar.md |
| Prestanda | Validering av en dygnsvolym 4,2 min (krav 60 min); månadsberäkning med full volym 4,5 min (krav 4 h) | kapitel 10.3 |
| Kravtäckning | K 78 av 79 (K74 är organisatoriskt); NK 21 av 40 (övriga är backlogg, organisatoriska eller beroende av regionen) | kravtackning.md, bilaga D |
| Funktionsparitet | 107 av 151 gröna, 26 finns, 18 saknas | paritet.yaml, bilaga D.2 |
| Tillgänglighet | axe: 0 överträdelser på 67 portalgranskningar; SAD-sajten 0 överträdelser och 0 brutna länkar | ADR 0021 |
| TestViora | Uppladdat (be1fa89): NK1–NK40 skapade som krav (KRAV-80–KRAV-119), 110 testfall och 589 verifierar-kopplingar, körningen med 110 av 110 godkända. Täckning i TestViora: 119 krav, 100 med test, 0 underkända; 21 NK-krav verifierade, 78 K-krav delvis (de äldre testfallen TC1–TC79 i projektet har aldrig körts), K74 ej kört, 19 NK saknar test |
testviora-uppladdning.md |
Rättelser efter F12#
| Rättelse | Commit | Vad |
|---|---|---|
| VC-BESOK (VDG-yrkeskategori) | d17d400, b19722f |
GVR rapporterar yrkeskategori som VDG-kod (t.ex. "11"), men regel 04 nycklade på namn, så läkarbesök gav 0 kr. Rättelse: den versionerade tabellen vdg-yrkesgrupp i båda regionpaketen, härlett fält vardhandelse.yrkesgrupp i mallen prislistaProduktkod, och regel 04 delad i 04a (före 2026-03-01) och 04b (från 2026-03-01: läkare 200, sjuksköterska 150, undersköterska 75, paramedicinare 150, samtalsbehandlare 200 kr). Nytt facit för maj 2026 och testet BesoksersattningVdgTester. De nationella exporterna använder också tabellen. |
| GUI v2 | 604d2ce, d4d5696 |
Ny design för portalen och SAD-sajten (ADR 0021, kapitel 5.5). |
Avvikelser och kvarstående luckor i slutläget#
| Område | Målbild | Läge | Åtgärd |
|---|---|---|---|
| LMA-spärren i E2E | E2E visar att fakturan spärras för reservnummer utan LMA | E2E prövar LMA via återsökningsunderlaget och förregistreringens format; själva fakturaspärren FA-5006 prövas i enhetstest |
T42 |
| Zonbryggan i compose | mTLS i alla miljöer | Utan mTLS i docker compose (KravMtls=false); mTLS prövas i E2E och Helm |
T39 |
| Produktkod | Produktkod ur BTYP + yrkeskategori + taxa (Kodserverns PRODUKT) | Tabellen finns inte i regionpaketet; besöksersättningen använder vdg-yrkesgrupp |
T40 |
| AF-rapporten | Ett zonanrop | Zonhopp patientdata → ersättning → patientdata | T41 (acceptabelt för månadsrapporter) |
| Mina rapporter | ZIP och kopiering av beställningar | Saknas | T38 |
| Tillägg på fakturaunderlag | Bifogade filer | Saknas i kontraktet | T37 |
| FGS-paket | Validerat mot Riksarkivets krav | Inte validerat i Riksarkivets eller E-ARK:s verktyg | T34 |
| VAL-leveranser | Persistent krypterad utkorg | I minnet i patientdatazonen | T36 |
.prn och billing:claim |
Verifierat mot verkliga filer och XSD | Byggt efter specifikation, inte verifierat | T43 |
| Referensräntor och attestbelopp | Regionens beslut | Exempelvärden | T27 |
| Skuggningskö | Beständig | I minnet | T28 |
| Exportfiler | Objektlagring | Base64-dokument | T29 |
| KPP- och patientregisterlayout | Enligt specifikation | Tolkad | T30 |
| Anthropic-adaptern | Testad mot API:t | Otestad; lokal modell är standard | T32 |
| Beräkningskörning | Bakgrundskö | Synkron | T19 |
| GVR:s akut- och tillgänglighetsfält, SNOD25 | I vårdhändelsen; alla tjänster | Bara i fasaden; SNOD25 saknas | T22, T23 |
| Listningsregler, indikatorer och kontrollregler | I Regelverk | Egna regler i Listning, Malrelaterad och Granskning (avsiktligt för de två senare, ADR 0017) | T12, T26 |
| Lagkrav NK | Alla 40 | 21 gröna; 19 i backlogg, organisatoriska eller beroende av regionen (bilaga D) | Per fas i införandet |
| TestViora | K-kraven verifierade i TestViora | 78 K-krav visas som delvis eftersom de äldre, aldrig körda testfallen TC1–TC79 finns kvar i projektet | Besluta om TC1–TC79 ska markeras som föråldrade, köras eller tas bort (T44) |
Byggt per fas (detaljer)#
F0: BuildingBlocks#
| Byggblock | Kod | Krav |
|---|---|---|
| Bitemporal version, giltighet, as-of-fråga | Bitemporal.cs, Giltighet.cs, BitemporalHistorik.cs, GiltighetsAnalys.cs |
KRAV-3, KRAV-22, KRAV-73 |
| Manifest och kanonisk JSON | Manifest.cs, KanoniskJson.cs |
KRAV-36 |
| Hashkedja och revisionslogg | Hashkedja.cs, Revisionslogg.cs |
KRAV-22, KRAV-67 |
| Belopp och avrundning | Belopp.cs, Avrundningsregel.cs |
KRAV-36 |
| Outbox | Outbox.cs, OutboxBearbetare.cs |
ADR 0006 |
| Tenant | ITenantKontext.cs |
ADR 0010 |
| Modulgränssnitt | IModul.cs, Modulkatalog.cs |
KRAV-71 |
| Arkitekturtester | ModulgransTester.cs, RegionoberoendeTester.cs |
KRAV-71, KRAV-76, KRAV-78 |
F2: Persistens och fyra moduler#
| Byggblock | Vad som är byggt | Kod | Krav |
|---|---|---|---|
Ersvia.BuildingBlocks.Persistens |
En tabell per bitemporal entitetstyp (giltig daterange, registrerad tstzrange, data jsonb, hashkedja per nyckel), exclusion constraint med btree_gist, oföränderlighetstrigger, IBitemporalLager<T> i minne och PostgreSQL, outbox, dokument och revisionslogg per schema, RLS med app.huvudman, gemensam migrerings-SQL |
SchemaSql.cs, PostgresBitemporalLager.cs, PostgresOutbox.cs, PostgresRevisionslogg.cs |
KRAV-3, KRAV-22, KRAV-36, KRAV-67 |
Masterdata |
NIM:s Organisation: huvudman, beställarnämnd, vårdgivare (vg-), vårdenhet (ve-), versionerade alias (HSA-id, uppdrags-id, vårdgivarnummer, kombika), fakturamottagare med Peppol (fm-), HSA-port med mock, NVID-scenario |
Organisation.cs, HsaId.cs, MasterdataEndpoints.cs, MockHsaKatalog.cs |
KRAV-16, KRAV-76 |
Kodverk |
Generisk modell kodsystem + version + kod med mappningar (ICD-11-redo), importörer för ICD-10-SE (TSV), KVÅ (xlsx), NordDRG-viktlista och Kodservertabeller, publicering med fyra ögon |
Kodverk.cs, Importorer.cs, KodverkModul.cs (features i Features/, ADR 0022) |
KRAV-17 |
Personuppgifter |
PersonId (personnummer, samordningsnummer, reservnummer), folkbokföringsport med mock, pseudonymisering med HMAC-SHA-256 per huvudman, skyddad identitet, åtkomstlogg med pseudonym |
PersonId.cs, Personuppgiftstjanster.cs, PersonuppgifterKontrakt.cs |
KRAV-18, KRAV-67 |
Overenskommelse |
Avtal och uppdrag i egen regi (ok-), ersättningsgrunder (eg-), VOK- och HVOContract-mappning, import från avtalssystemet med mock, vårdgivarens villkor |
Overenskommelse.cs, OverenskommelseEndpoints.cs |
KRAV-1 till KRAV-5 |
| Regionpaket | Seed för stockholm och exempel |
packages/region-stockholm/, packages/region-exempel/ |
ADR 0010 |
| Tester | Integration med Testcontainers (as-of, rättelse, exclusion constraint, triggrar, RLS mellan stockholm och exempel, outbox, åtkomstlogg), validering av alla OpenAPI-exempel mot sina scheman, route-test mot kontrakten |
BitemporalPersistensTester.cs, ModulIntegrationTester.cs, OpenApiExempelTester.cs, RouteKontraktTester.cs |
Kontroll 3 Ä5 är åtgärdad i F2: HSA-id-mönstret i contracts/openapi/common.yaml är ^SE[0-9]{10}-[A-Za-z0-9]{1,24}$, och 14 felaktiga kontraktsexempel är rättade.
F3: Regelmotor, Regelverk och Identitet#
| Byggblock | Vad som är byggt | Kod | Krav |
|---|---|---|---|
Ersvia.Regelmotor |
Rent bibliotek utan I/O, reflection eller klocka (arkitekturtest). Elva primitiver inklusive episod, beslutstabeller med träffpolicy, uttrycksspråk (JSON eller formel, decimal, explicit avrundning, typkontroll), nio körfaser med DAG, trace per primitivanrop och SHA-256 över resultatet. 34 mallar täcker alla 42 regeltyper. |
Korning.cs, Primitiver.cs, Tabelluppslag.cs, Uttryck.cs, Mall.cs, Publiceringskontroll.cs |
KRAV-19 till KRAV-23, KRAV-36; NK40 |
| Facit | 51 facitfiler, minst ett per mall, med verkliga exempel ur katalogen | tests/Golden/, regelmappning.yaml |
KRAV-23 |
Regelverk |
Regelversioner (utkast → granskad → publicerad → ersatt, avslagen), fyra ögon, facittest med hashat testbevis, parametertabeller, konsultationsversioner, import av rapporteringsanvisningar, jämförelse och export | RegelverkTjanst.cs, Regelvalidator.cs, Anvisningstolk.cs, Regelverk.cs |
KRAV-19 till KRAV-23 |
Identitet |
Roller, behörigheter per användare och vårdgivare, delegations- och attestmatris som bitemporal data med utkast och godkännande, provning av beslut och attest (egenattest spärras, två steg över gräns), beslutslogg. Portarna IBeslutskontroll och IAttestkontroll. |
Identitet.cs, IdentitetTjanst.cs, Beslutsportar.cs |
KRAV-21, KRAV-49, KRAV-66; NK20 |
F4: Vårdhändelser och Väntande#
| Byggblock | Vad som är byggt | Kod | Krav |
|---|---|---|---|
Vardhandelser |
Besök, inskrivning (flytt, utskrivning), aktivitet, vårdperiod och kontakt med GVR v2-fälten. Partitionerad tabell vardhandelse (en rad per version, per faktureringsmånad), register, idempotens (X-Idempotens-Nyckel, X-Resource-Id), periodbild. Tre statusdimensioner, asynkron validering med FOR UPDATE SKIP LOCKED, torrkörning, brytpunkt sista vardagen 24.00, förfall efter 90 dagar, gräns 30 månader, frysta perioder. |
Statusmodell.cs, Valideringsregler.cs, Faktureringskalender.cs, Bearbetning.cs, PostgresVardhandelselager.cs |
KRAV-6 till KRAV-10, KRAV-15, KRAV-61 |
Vantande |
Väntande som dokument med versionshistorik, avslut | Vantande.cs, VantandeTjanst.cs |
KRAV-14 |
| Lasttest | 70 000 händelser validerade på 4,2 minuter (krav 60 min) | VardhandelseLasttest.cs, matningar.md |
KRAV-15 |
F5: Listning#
| Byggblock | Vad som är byggt | Kod | Krav |
|---|---|---|---|
Listning |
Listningstyper per regionpaket, listning, omlistning och avlistning som bitemporala intervall (aldrig en rad per dag), högst N omlistningar per 12 månader med avsteg, ST-tak, läkare som slutar, listningstak med kö och förtur, uppehåll i basal hemsjukvård, folkbokföringshändelser, låsta ögonblicksbilder med SHA-256, statistik och export | Listningsmodell.cs, Listningsregelmotor.cs, ListningTjanst.cs, ListningLager.cs, Regelkalla.cs |
KRAV-12, KRAV-24; NK17, NK18 |
| carelisting v2.1 | ICarelistingProducent med sju operationer över REST (/api/carelisting/v2), statlig listningstjänst som mock |
CarelistingProducent.cs |
KRAV-12 |
| Regionpaket | listningsregler.json per region |
packages/region-stockholm/ |
ADR 0010 |
F6: Beräkning, Simulering, FUMS och FUL#
| Byggblock | Vad som är byggt | Kod | Krav |
|---|---|---|---|
Berakning |
Körning per period, huvudman och urval (ordinarie, omräkning, reproduktion, torrkörning). Manifest med regler, tabeller, masterdata, överenskommelser, kodverk, konfiguration, vårdhändelsebild, listningsbild per mätdag, FUMS/FUL-hash, tidigare körningar och motorversion. Regelval via ersättningsgrund och omfattning, avtalsparametrar som JSON merge patch, ackumulerade regler i två pass, fakturamottagare via beslutstabell i regionpaketet, rader med trace och källhändelser, omräkning med differensrader, stängd period med torrkörning (BE-5004), reproduktion bit för bit, skuggkörning, MarkeraErsattaAsync och BerakningKlar via outbox. |
BerakningTjanst.cs, Berakningskarna.cs, Berakningskonfiguration.cs, BerakningPortar.cs, BerakningKopplingar.cs |
KRAV-24 till KRAV-38, KRAV-40, KRAV-55 |
Simulering |
Isolerad simulering med KPI och jämförelse per vårdgivare, vårdval och ersättningsslag; parallellkörning mot legacy-CSV | SimuleringTjanst.cs |
KRAV-64, KRAV-65, KRAV-72 |
MedicinskService (FUMS) |
JSON och Ersvias CSV-format, beställare via Masterdata, vidarefakturering med 20 % fördelad per rad | MedicinskServiceTjanst.cs, Leverantorsfil.cs |
KRAV-13, KRAV-56 |
Lakemedel (FUL) |
CSV-adapter, koppling via HSA-id eller arbetsplatskod, undantagsläkemedel, KÖL-riskdelning (50 % utanför ±3 %) | LakemedelTjanst.cs, Ehmfil.cs |
KRAV-13, KRAV-56 |
| Regionpaket | 18 regler med facit och parametertabeller per region, publicerade med fyra ögon. Region Exempel: mätdag den 15:e, egna åldersklasser, annan viktlista och 3,5 % moms utan kodändring. | region-stockholm/berakning/berakning.json, region-exempel/berakning/berakning.json |
ADR 0010 |
| Facit och mätning | Facit för maj 2026; CI kör en hel månad för båda regionerna. Full volym (2 miljoner vårdhändelser, 2,4 miljoner listade) på 4,5 minuter. | tests/Golden/manad-2026-05/, BerakningLasttest.cs, matningar.md |
KRAV-35, KRAV-36 |
F9a: Kompatibilitet och Rapportering#
| Byggblock | Vad som är byggt | Kod | Krav |
|---|---|---|---|
Kompatibilitet |
GVR REST v2.0.0 (59/59 operationer) och v1.9.5 (54/54) på samma sökvägar under fasadens bas-URL; X-Resource-Id (409/313), GvrProblemDetail via felkodskatalogen, schemavalidering ur inbäddad spec, synkron torrkörning, standardavtal; journaler, vårdplatser och kontakter. mTLS med certifikatautentisering, HSA-id ur SERIALNUMBER, vidarebefordrat certifikat från ingress. SNOD-XML med nio tjänster och Basic auth. CVR-filimport med ögonblicksbild, implicit avslut och maskinell kvittens. Kontrakt kompatibilitet.yaml. |
GvrTjanst.cs, GvrOversattning.cs, Snodtjanst.cs, CvrImport.cs, Gvrhttp.cs, KompatibilitetModul.cs, KompatibilitetKopplingar.cs, kompatibilitet.yaml, gvr-fasad.json |
KRAV-6, KRAV-14, KRAV-72 |
Rapportering |
34 operationer: utkast och arbetslista, inskick via torrkörning, efterregistrering med godkännande av annan person, DRG-förslag, MVC, vårdperioder, väntande, kassa och frikort, reservnummer, CSV/JSON-uppladdning | RapporteringTjanst.cs, KassaOchReservnummer.cs, Filinlasning.cs, RapporteringKopplingar.cs |
KRAV-11 |
| Paritetstester | Alla 59 + 54 operationer anropas och svaren valideras mot specens scheman | GvrParitetTester.cs, KompatibilitetIntegrationTester.cs |
KRAV-72 |
F7: Målrelaterad och Granskning#
| Byggblock | Vad som är byggt | Kod | Krav |
|---|---|---|---|
Malrelaterad |
Indikatorer som bitemporala regler med fyra ögon och facit, måluppfyllelse (tröskel, linjär, andel), täckningskrav, efterregistreringsdag, årsavstämning med tak, ansökningar, externa källor; bokföring via Beräkning | MalrelateradTjanst.cs, Malkalkyl.cs, CsvKalla.cs, MalrelateradKopplingar.cs |
KRAV-41 till KRAV-46 |
Granskning |
Avvikelseflaggor, kontrollregler, riskpoäng (profilering, av som standard), ärenden med återkrav, ränta, preskription och kvittning, justeringar, attest i två steg, riskregister och årsrapport | GranskningTjanst.cs, Kontrollmotor.cs, Aterkrav.cs, GranskningKopplingar.cs |
KRAV-47 till KRAV-49; NK3–NK7 |
| Regionpaket | Indikatorer, kontrollregler, riskpoängsaktivering, referensräntor och matriser per region | region-stockholm/granskning/granskning.json |
ADR 0010 |
F10: Uppföljning, Migrering och Drift#
| Byggblock | Vad som är byggt | Kod | Krav |
|---|---|---|---|
Uppfoljning |
Utfall, exportpaket med manifest (CSV, Parquet, JSON) till VAL och nationella mottagare, personnummerkontroll, bitemporal budget, vårduppdrag, budgetindikatorer, publicering med cellundertryckning | UppfoljningTjanst.cs, Nationellaexporter.cs |
KRAV-62, KRAV-63 |
Migrering |
Legacyimport (AF, VF V2), parallellkörning med klassning och täckning, legacy-körningar med differens | MigreringTjanst.cs, Legacyformat.cs |
KRAV-72, KRAV-73 |
Drift |
Integrationslogg och omstart, ändrings- och åtkomstlogg med verifiering, export i öppet format, e-arkiv (METS, FGS/CSIP), hälsa | DriftTjanst.cs |
KRAV-67, KRAV-68, KRAV-75, KRAV-79 |
| Skuggning | GVR-fasaden vidarebefordrar autentiserade skrivande anrop till gamla GVR via en kö | Kompatibilitet (F9a/F10) | KRAV-72 |
F11a: Portal, AI och MCP#
| Byggblock | Vad som är byggt | Kod | Krav |
|---|---|---|---|
Ersvia.Portal |
Blazor Web App med tema per regionpaket, OIDC-roller, sidor för regelverk, Vad gällde när?, vårdhändelser, torrkörning, listning, kodverk, överenskommelser, vårdgivare och AI-register (kap. 5.5) | VadGalldeNar.razor, Program.cs, region-stockholm/portal/portal.json |
KRAV-5, KRAV-69, KRAV-77 |
Ersvia.Ai |
IErsviaAi med adaptrar (Anthropic, lokal, Fake), AI-register, pseudonymiseringsfilter, beloppsvakt, AI-revisionslogg |
ErsviaAi.cs, AiRegister.cs, Pseudonymiseringsfilter.cs, AiRevisionslogg.cs, ai-register.yaml |
NK26, NK40 |
Ersvia.Mcp |
MCP-server med sju verktyg, autentisering per huvudman, REST /ai/* |
ErsviaVerktyg.cs, AiEndpoints.cs, Huvudmansautentisering.cs |
ADR 0007, 0016 |
F8 och F9b: Fakturering, Avstämning och dagens utdata#
| Byggblock | Vad som är byggt | Kod | Krav |
|---|---|---|---|
Fakturering |
Underlag per vårdgivare × fakturamottagare × faktureringsmånad, MOMSK-AVTAL, godkännande och invändning per rad, tillägg och kreditering, attest i två steg, Peppol BIS Billing 3 med kvittens, budgetjustering, asylspärr, självfakturering, kvittning, nummerserie, samfaktura, kontering, LMA, faktureringsschema, aviseringar, utlämningar och utomlänskrav |
FaktureringTjanst.cs, Faktureringsregler.cs, Peppolfaktura.cs, FaktureringPortar.cs, FaktureringKopplingar.cs |
KRAV-38, KRAV-39, KRAV-50 till KRAV-58 |
Avstamning |
Avstämningsrader med drill-down via trace, status per vårdhändelse med AF-kod, månadsfil, prenumerationer, engångsrapporter | AvstamningTjanst.cs, Avstamningsregler.cs |
KRAV-59 till KRAV-61 |
| Utlämningsexport och billing:claim | Utlämningsexport och återidentifiering i patientdatazonen, billing:claim som avsändare och mottagare, VF-.prn (V1, V2, kontering) och AF-Excel (F9b) |
Kompatibilitet (KompatibilitetModul.cs), kompatibilitet.yaml |
KRAV-39, KRAV-40, KRAV-60, KRAV-72 |
F12a: Drift, zonseparation och arkiv#
| Byggblock | Vad som är byggt | Kod | Krav |
|---|---|---|---|
| Värdar och zonbrygga | IModul.Zon, Ersvia:Zon, värdarna Ersvia.Patientdata och Ersvia.Api (ErsviaVard), zonbrygga med mTLS, vitlista och personnummervakt |
ErsviaVard.cs, Zonkopplingar.cs, Zonserver.cs, Zonklient.cs, Zonmtls.cs, Patientdata/Program.cs |
KRAV-18; NK22 |
| Databasroller och nycklar | Roller per zon, gallringsroll, INyckelkalla med Secret eller Vault/KMS |
Zonroller.cs, Nyckelkalla.cs |
KRAV-18 |
| Webbskydd och observerbarhet | CSP med nonce, hastighetsbegränsning, säkerhetslogg (≥ 5 år), personnummertvätt, OpenTelemetry | Webbskydd.cs, Sakerhetslogg.cs, Personnummertvatt.cs, Telemetri.cs |
KRAV-66, KRAV-67, KRAV-68; NK19, NK24 |
| Containrar och Helm | Fem images, Helm-chart med nätpolicyer, cert-manager, Ingress/Route, HPA, PDB och jobb, docker-compose | deploy/helm/ersvia/values.yaml, networkpolicies.yaml, jobb.yaml, api.Dockerfile |
KRAV-70, KRAV-78 |
| Kontinuitet | WAL/PITR (RPO ≤ 5 min), logisk kopia, veckovis återläsningstest | ersvia-backup.sh, kontinuitet.md, runbook.md, nis2-incidentrutin.md |
KRAV-70; NK24 |
| Arkiv och gallring | FGS Paketstruktur 2.0 (CSIP), full export, bitemporal gallring per regionpaket | FgsPaket.cs, Gallring.cs, OppenExport.cs, earkiv-och-gallring.md |
KRAV-75, KRAV-79 |
| VAL-export (rättat krav) | Vårdhändelser och listning med personnummer i klartext från patientdatazonen med ändamålskontroll och loggning | Valexporttjanst.cs |
KRAV-62 |
| CI | Build, test, kontrakt, SBOM (CycloneDX), Trivy, helm lint och kubeconform | ci.yml |
KRAV-78 |
F11b: Portalsidor för alla roller#
Portalsidor för beräkning, simulering, mål, granskning, fakturering, avstämning, uppföljning och migrering. axe: 45 granskningar med 0 överträdelser. Skärmdumpar i kapitel 5.5.
F12b: E2E i delat zonläge och zonuppdelade adaptrar#
| Byggblock | Vad som är byggt | Kod | Krav |
|---|---|---|---|
| Zonuppdelade F8-adaptrar | Fakturering och Avstämning läser i ersättningszonen med pseudonym via IVardhandelseunderlag och den nya IVardhandelsestatusunderlag; AF-Excel, VF-.prn och billing:claim produceras i patientdatazonen med underlag via IAfUnderlag, IKompatibilitetFakturering och IKompatibilitetReferens |
Zonkopplingar.cs, FaktureringKopplingar.cs |
KRAV-18, KRAV-50 till KRAV-61 |
| Personnummervakt åt båda håll | Ersättningszonens server avvisar zonanrop med personnummer i argumenten (422 GEN-0503); patientdatazonens proxy skickar dem aldrig |
Zonserver.cs, Zonklient.cs |
KRAV-18; NK22 |
| E2E | Planens 12 steg plus 9b för maj 2026 i båda regionpaketen | E2eTester.cs, Zonmiljo.cs |
KRAV-36, KRAV-76 |
| Fullstack-smoke och kravtäckning | Alla fem images i compose; kravtäckning ur JUnit | fullstack-smoke.sh, kravtackning.sh, kravtackning.md |
Förvaltning av dokumentet#
Referensimplementationen är färdigbyggd enligt planen. SAD:en och detta kapitel uppdateras vid varje ändring som påverkar arkitekturen, och kvarstående luckor följs i kapitel 11 och i tabellen ovan.