docs: bring skills and docs in line with the fixed code

Skills ask before using a working copy found in the user's folder and state
its check level first. The drift of the queue models before the shock is
stated in the caveats and the README. README shows how to run the check and
the tests. The drift line names the month a gradual drive begins.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-11-11 15:46:39 +01:00
commit 19858bbda9
Signed by: ktg
SSH key fingerprint: SHA256:JakMjO6FTBBzN0Bhfj9saOoEjaFxlSdYuZQQpM/lF9Q
13 changed files with 314 additions and 113 deletions

View file

@ -1,7 +1,8 @@
# Forbehold
Forbeholdene ved modellen, diagnosen, forløpet og de norske eksempeltallene. De er hentet fra notatet *Den dynamiske
rettsstaten* (avsnitt 9.8 og 10, vedlegg C), README i notatets repo og koden i `modell/kjerne/` (commit 2badc25).
Forbeholdene ved modellen, simuleringene, diagnosen, forløpet og de norske eksempeltallene. De er hentet fra notatet *Den dynamiske
rettsstaten* (avsnitt 9.8 og 10, vedlegg C), README i notatets repo, koden i `modell/kjerne/` (commit 2badc25) og kjøringer med
den.
Ferdighetene tar med de forbeholdene som gjelder for svaret de gir.
## Modellen som helhet
@ -18,6 +19,13 @@ Ferdighetene tar med de forbeholdene som gjelder for svaret de gir.
måleimperfeksjon. Resultatene er enkeltbaner uten parameterusikkerhet.
- **Bare ett ledd har kø.** I notatets simuleringer er det domstolen; i `forlop` er det leddet som binder i dine tall.
Etterforskning, påtale og straffegjennomføring har ellers verken kø, frafall eller kapasitet i modellen.
- **Utgangspunktet i modellene med kø er nesten, men ikke helt, en likevekt.** Notatet kaller starttilstanden
«utgangslikevekten», men i modellene der domstolen har kø, står den ikke helt i ro: saker som faller fra køen
(henleggelse, foreldelse), blir aldri trukket fra kriminaliteten i modellens regnskap. Kjørt helt uten sjokk, med
notatets verdier, går kriminaliteten fra 1,000 til 1,007 i måned 11, 1,015 i måned 120 og 1,018 i måned 240, og
saksbehandlingstiden fra 3,0 til 3,1, 4,2 og 4,6 måneder, fortsatt stigende (målt 2026-11-11 med notatets kode,
`eksempler/scenarioer/uten_sjokk_kjede.json`). Notatet nevner det ikke. En liten del av det kjedescenarioene viser
etter sjokket, er denne driften.
- **Kostnader er ikke regnet i kroner.** Målfunksjonen er stilt opp, men ikke brukt. Ingen kostnader eller gevinster
er tallfestet, og modellens størrelser er normaliserte, ikke årsverk eller kroner.
- **Beslutningsreglene er stiliserte.** Reglene for påtale og budsjett er representasjoner av hvordan myndighetene kan
@ -26,6 +34,24 @@ Ferdighetene tar med de forbeholdene som gjelder for svaret de gir.
- **Andelen som kan ledes utenom** er i praksis bestemt av sakenes art og av hjemlene i straffeprosessloven. Den er
et rettspolitisk valg, ikke en styringsparameter.
## Simuleringene (`simuler`)
- **Notatets verdier, normaliserte størrelser.** Alt scenariofila ikke setter, er notatets stiliserte verdier. Kø,
strøm og kapasitet er modellens normaliserte størrelser, ikke saker, årsverk eller kroner. Køen står i sammendraget
i måneder av innstrømningen før sjokket.
- **Driften i modellene med kø** (over) gjelder alle scenarioer med domstolskø. Sammendraget viser hvor langt
modellen har drevet fram til sjokket. Når små virkninger betyr noe, sammenlign med en kjøring uten sjokk med samme
parametere og horisont, og trekk driften fra.
- **Endrede grunnparametere.** Endres en parameter som bestemmer utgangspunktet (for eksempel politiets effektivitet
eller tilliten ved start), står modellen ikke lenger i ro ved start. Kjøreren stopper da, med mindre scenarioet sier
om utgangspunktet skal kalibreres på nytt eller kjøres fra ubalansen (`startlikevekt` i `docs/scenarioformat.md`).
De to valgene svarer på ulike spørsmål og gir ulike tall.
- **Beslutningsreglene** (`simulate_endo`) bruker notatets strøm av saker ved start som observasjon de første
månedene. Et scenario som endrer den strømmen, stopper; det krever en endring i kjernen.
- **Store utslag.** Går kriminaliteten utenfor området kjernen er laget for (K mellom 0,01 og 12), kjøres scenarioet,
men sammendraget har en merknad: ligningene er ikke laget for så store utslag. Vokser løsningen over alle grenser,
stopper kjøringen.
## Diagnosen (`diagnose`)
- **Saksbeh.tid** er restanse delt på kapasitet, ikke målt saksbehandlingstid. Kolonnen vises bare når målet er

View file

@ -3,7 +3,7 @@
`diagnose` og `forlop` leser samme fil: en JSON-fil med ett objekt per ledd i straffesakskjeden. Denne siden
beskriver hvert felt slik kjernens kode leser det (`modell/kjerne/diagnose.py`: `sjekk`, `analyser`, `TALLFELT`;
`modell/kjerne/forlop.py`: `les_styring`, `modell`). Kjernen er en uendret kopi av koden i notatet *Den dynamiske
rettsstaten* (commit 2badc25).
rettsstaten* (commit 2badc25). Feltnavnene sjekkes av `modell/kjor.py` før kjernen leser fila.
## Enheter
@ -35,7 +35,8 @@ Tall skrives med punktum som desimaltegn og uten tusenskille: `29044.5`, ikke `2
for dem.
- `styring` (valgfritt): brukes bare av `forlop`. Se under.
- Andre felt på øverste nivå (for eksempel `merknad` og `kilder`) leses ikke av koden. Bruk dem til å skrive ned
hvor tallene kommer fra.
hvor tallene kommer fra. I hvert ledd og i `styring` kan merknadsfeltene `merknad`, `kilde` og `kilder` stå i
tillegg til feltene under; de leses heller ikke av regningen.
## Feltene i hvert ledd
@ -62,9 +63,15 @@ Krav som kontrolleres før regningen (`sjekk`):
Brudd på kravene gir en norsk melding som sier hvilket ledd og hvilket felt det gjelder, og ingen regning.
**Feltnavn med skrivefeil blir ikke oppdaget.** Koden leser bare feltene over og ser bort fra alt annet. Står det
`prognose_innstrømning` (med ø) eller `maks_andel_utenfor`, regner verktøyet stille med standardverdien. Feltnavnene
skrives uten æ, ø og å, nøyaktig som i tabellen.
**Feltnavn med skrivefeil stopper regningen.** Før `diagnose` og `forlop` regner, sjekker `kjor.py` feltnavnene i
hvert ledd og i `styring`. Et navn som ikke er et av feltene over eller et merknadsfelt (`merknad`, `kilde`,
`kilder`), gir exit-kode 2 og en melding som sier hvilket ledd det gjelder og foreslår det nærmeste gyldige navnet:
```
Feil i inndata, ledd 3 (Domstol): feltet "prognose_innstrømning" finnes ikke. Mente du "prognose_innstromning"? Gyldige felt: navn, innstromning, kapasitet, restanse, maal_tid, prognose_innstromning, maks_andel_utenom, restanse_for_12_mnd, restanse_maal, skjult_avgang, innstromning_for_okning, merknad, kilde, kilder.
```
Feltnavnene skrives uten æ, ø og å, nøyaktig som i tabellen. Felt på øverste nivå sjekkes ikke.
## Hvordan feltene brukes i regningen
@ -94,7 +101,8 @@ avvikles over 24 måneder, og bestilt kapasitet virker gradvis fra 6 til 24 mån
| `reaktivitet` | – | 3 | over 0, høyst 50 | prosent mer innsats per prosent avvik fra målet (3 betyr at 10 % over målet gir 30 % mer innsats) |
Uten `styring` brukes regime A i notatet (3 og 3), og `forlop` sier fra om det. Står `styring` i fila, men ett av
feltene mangler, brukes standardverdien for det feltet uten merknad.
feltene mangler, brukes standardverdien for det feltet uten merknad. Feltnavnene i `styring` sjekkes også når
`diagnose` kjøres, så en skrivefeil der stopper begge.
## Hva `forlop` krever i tillegg

View file

@ -11,7 +11,10 @@ hvilke kontroller som skal holde etter en endring.
## (a) Tilstandsvariabler og avledede størrelser
Tidsenhet: måned. Nivåene er normalisert slik at referanselikevekten har K = 1, T = 1 og Λ = 0,80.
Tidsenhet: måned. Nivåene er normalisert slik at referanselikevekten har K = 1, T = 1 og Λ = 0,80. I modellene med kø i
domstolen er starttilstanden nesten, men ikke helt, en likevekt: ved start er K′ = ϑ ς_D Q_D > 0, fordi det som faller
fra køen, aldri trekkes fra K (ligningen for K′ under). Uten sjokk kryper K og τ_D derfor sakte oppover; se
`forbehold.md` for hvor mye.
| I koden | Symbol | Betyr | Merknad |
|---|---|---|---|
@ -267,3 +270,6 @@ alle 22 datafilene ble byte-like notatets.
`simulate_soc` har ingen utskrevet grensetilfelle. `forlop.py` kontrollerer sin egen kopi mot `simulate_endo` i hver
kjøring (bit for bit, se over). Den som endrer kjernen, kjører kontrollene på nytt og ser at avvikene fortsatt er 0
eller på avrundingsnivå, og at de 22 datafilene er byte-like med mindre endringen skal endre resultatene.
`kjor.py kontroll` gjør dette og mer: den måler kjernen og fasiten mot notatets sjekksummer, kjører diagnosen,
forløpet, hele `sim.py`, grensetilfellene i utvidelsene og scenariokjøreren, og sier hvilke av notatets resultater som
har flyttet seg.