Retningslinjen sier hva som skjer når Verid, en underleverandør eller en kilde er nede, og hvordan data hentes tilbake. Den skiller mellom det Verid har prøvd, det plattformene tilbyr men Verid ikke har prøvd, og det som ikke er på plass. Tall som ikke er målt, står ikke her.
Sist oppdatert: 10.10.2026. Siste gjenopprettingstest er fra 10.10.2026.
Vilkårene punkt 6.8 viser hit: dette er planen for kontinuitet og gjenoppretting, og den testes minst én gang i året. Foretaket får planen og resultatet av siste test på forespørsel.
1. Hva Verid består av
| Del | Hvor | Hvordan den kommer tilbake |
|---|---|---|
| Kildekoden | GitHub | Hele historikken ligger i git. Alle som har en klon, har en kopi |
| Applikasjonen | Vercel fra1 | Bygges fra git. Tidligere utrullinger ligger hos Vercel |
| Databasen | Neon, AWS eu-central-1 | Plattformens gjenoppretting til et tidspunkt (se punkt 3) |
| Rapportarkivet (PDF) | Vercel Blob, privat | Ingen kopi utenfor Blob (se punkt 3) |
| Hemmeligheter | Miljøvariabler hos Vercel | Må lages på nytt hos hver leverandør hvis de går tapt |
| Planlagte jobber | apps/web/vercel.json | Følger med koden |
2. Mål for gjenoppretting
| Mål | Verdi | Grunnlag |
|---|---|---|
| Tap av data (RPO) | Under 5 minutter | Neon lagrer endringer fortløpende og kan gjenopprette til et hvilket som helst tidspunkt i historikken. Begge testene traff tidspunktet på sekundet |
| Tid til tjenesten er tilbake (RTO) | 4 timer | En gren fra et tidspunkt lages på sekunder (testene). Det som tar tid, er å finne riktig tidspunkt, kontrollere grenen og rulle ut på nytt |
| Hvor langt tilbake | 7 døgn | history_retention_seconds: 604800 i prosjektet verid, lest 10.10.2026 |
Skjer en feil mer enn 7 døgn før den blir oppdaget, finnes ikke tilstanden før feilen lenger. Applikasjonen kan rulles tilbake til en tidligere utrulling i Vercel uten nytt bygg.
Nedetid oppdages av Better Stack, som sjekker /api/helse hvert tredje minutt fra fire regioner og varsler på e-post (monitoren «Verid»). Ruten svarer 503 når databasen ikke svarer. Oppetiden vises på verid.no/status.
3. Gjenoppretting per del
Applikasjonen. Hver push til main gir en ny utrulling. Er en utrulling feil, velger vi en tidligere utrulling i Vercel og gjør den til produksjon («Instant Rollback»). Det krever ikke nytt bygg.
Merk: en tilbakerulling tar ikke skjemaet i databasen med seg. Migreringer kjøres for hånd med pnpm --filter @workspace/db migrer (packages/db/package.json), og filene ligger i packages/db/migrasjoner/. En migrering som ikke virker med forrige utrulling, må rettes framover.
Databasen. Neon tilbyr gjenoppretting til et tidspunkt og grener av databasen, med 7 døgns historikk. Gjenopprettingen er prøvd — se testene under. Planen er:
- Lag en ny gren fra
mainslik den var før feilen. Det rører ikkemain:
`` npx neonctl branches create --project-id late-wildflower-39485757 \ --name gjenoppretting-<dato> --parent <tidspunkt i UTC, ISO 8601> ``
Bruk ikke restore_snapshot for dette. Se advarselen under testen fra 28.09.2026.
- Kontroller grenen: antall saker, siste
hendelse, siste rapport. - Pek
DATABASE_URLogDATABASE_URL_UNPOOLEDi Vercel mot grenen, eller gjenopprett hovedgrenen fra tidspunktet. - Rull ut på nytt, og kontroller innlogging og en sak.
- Skriv i hendelsesnotatet hvilket tidspunkt det ble gjenopprettet til, og hva som ble skrevet etter det og gikk tapt.
Rapportarkivet. PDF-filene i Vercel Blob har ingen sikkerhetskopi i Verid. Hash-summen av PDF-en står i rapport.pdf_sha256, så en fil som er endret, kan påvises. En fil som er slettet, kan ikke hentes fra Verid. Rapporten kan lages på nytt fra saksdataene, men den nye filen er ikke den arkiverte.
Sletting og gjenoppretting. En gjenoppretting til et tidspunkt før slettejobben kan hente tilbake saker som skulle vært slettet. Etter en gjenoppretting skal slettejobben (apps/web/app/api/cron/slett-utlopte) kjøres med én gang, ikke vente til neste natt. Skriptet pnpm --filter @workspace/db slett-utlopte kan bare vise hva som ville blitt slettet. Det sletter ingenting.
Jobben sletter arkivet i Vercel Blob før radene i databasen. Arkivfiler som jobben har slettet, kommer ikke tilbake med en gjenoppretting av databasen.
Gjenopprettingstest 10.10.2026
Resultat: gjenopprettingen virker. En ny gren (gjenopprettingstest-2026-10-10, br-raspy-credit-b10t3ew9) ble laget fra main slik den var 09.10.2026 kl. 07:59:35 UTC, med neonctl branches create --parent <tidspunkt>. main ble ikke rørt. Radene som fantes før tidspunktet, ble sammenlignet med produksjon:
| Produksjon (10.10 kl. 08:40 UTC) | Gjenopprettet gren | |
|---|---|---|
| Saker | 55 | 55 |
| Parter | 104 | 104 |
| Rapporter | 23 | 23 |
| Hendelser | 696 | 696 |
| Foretak | 3 | 3 |
| Brukere | 18 | 18 |
| MD5 over alle hendelsesrader | 92f88870… | 92f88870… |
| MD5 over alle rapportrader | cfc196bc… | cfc196bc… |
Grenen var klar på under ett minutt. Neste test: senest 10.10.2027.
Gjenopprettingstest 28.09.2026
Resultat: gjenopprettingen virker. Et øyeblikksbilde av main fra 07:00 UTC ble hentet tilbake som en egen gren, med tilstanden fra 06:51:
| Produksjon (09:22) | Gjenopprettet kopi | |
|---|---|---|
| Hendelser | 290 | 286 |
| Saker | 53 | 51 |
| Siste hendelse | 08:29:42 | 06:43:59 |
| Migreringer | 21 | 19 |
Kopien hadde nøyaktig det som fantes før tidspunktet, og ingenting etter. Operasjonen tok under ett sekund.
Advarsel — det som gikk galt under testen. restore_snapshot uten finalize: false lager ikke en frittstående kopi. Den tar over kildegrenens navn, rollen som hovedgren og compute-en. I ca. 45 sekunder (09:20:42–09:21:27 UTC) pekte produksjonens compute (ep-patient-cell) på kopien fra 06:51. Compute-en sov hele tiden, og kopien skrev 0 byte, så ingen data gikk tapt. Den ble flyttet tilbake til den opprinnelige grenen (br-cool-sun-b12y6nvu), som igjen er main, hovedgren og standard.
Derfor, ved neste test eller ekte gjenoppretting:
- Bruk
finalize: false, og les kopien før noe flyttes. - Sjekk hvilken gren
ep-patient-cellpeker på før og etter. mainer beskyttet i Neon (protected) fra 28.09.2026, så den ikke kan slettes eller nullstilles ved et uhell.
4. Når en kilde er nede
Kildene er registrene og tjenestene Verid slår opp i. En kilde som er nede, stopper ikke saken. Den blir et dokumentert hull.
- Hvert oppslag har et tidsavbrudd på 15 sekunder og to nye forsøk ved 429 og 5xx (
packages/sources/src/kilde.ts). - Svaret føres med en av fire statuser:
ok,ikke-funnet,utilgjengelig(driftsfeil) ellerikke-tilgang(vi mangler nøkkel eller tilgang). Status, URL og tidspunkt lagres uansett. - Er Enhetsregisteret, grunnboken eller Register over reelle rettighetshavere utilgjengelig, blir det en observasjon med alvorlighet «oppfølging» og tekst om at oppslaget må gjentas eller gjøres manuelt (
packages/pipeline/src/observasjoner.ts). - Feiler screeningen hos OpenSanctions eller søket hos Oxylabs, blir det et punkt på sjekklisten (
packages/pipeline/src/sjekkliste.ts). - Er språkmodellen utilgjengelig, blir søketreffene stående uvurdert og går på sjekklisten (
.env.example,README.md). - Er Vercel Blob utilgjengelig, kan rapporten godkjennes uten arkivert PDF (
README.md).
Megleren kan kjøre saken på nytt når kilden er tilbake.
5. Når en underleverandør er nede
| Leverandør | Hva som stopper | Hva vi gjør |
|---|---|---|
| Vercel | Hele appen, og verid.no/status | Vent. Følg Vercels statusside. Varsle foretakene på e-post. Ingen reserve |
| Neon | Hele appen | Vent. Følg Neons statusside. Ved tap av data: punkt 3. Ingen reserve |
| Resend | Invitasjoner, bekreftelse av e-post, nytt passord, kundeerklæring på e-post | Megleren kan sende lenken til kundeerklæringen selv |
| OpenSanctions, Oxylabs, AI Gateway | Bare den delen av søket | Se punkt 4 |
Er Verid nede over fire timer i arbeidstid, varsler vi foretakene. Et foretak som ikke kan bruke Verid, må gjøre kundetiltakene manuelt i mellomtiden. Plikten etter hvitvaskingsloven ligger hos foretaket.
Gjenstår
| Mangel | Risiko | Plan |
|---|---|---|
| Ingen kopi av rapportarkivet utenfor Vercel Blob | En slettet PDF kan ikke hentes tilbake | Vurder en kopi i en annen lagring i EU, med samme slettefrist |
| Statussiden kjører på Vercel, som appen | Er Vercel nede, er også verid.no/status nede | Statusside hos Better Stack som reserve |
| Migreringer kjøres for hånd | En migrering kan bli glemt eller kjørt mot feil database | Kjør migreringer som et eget, logget steg |