dynamisk-rettsstat/docs/inndata.md
Kjell Tore Guttormsen 19858bbda9
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>
2026-11-11 15:46:39 +01:00

176 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Inndata for `diagnose` og `forlop`
`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). Feltnavnene sjekkes av `modell/kjor.py` før kjernen leser fila.
## Enheter
| Hva | Enhet |
|---|---|
| Strømmer (innstrømning, kapasitet, skjult avgang) | saker per **måned** |
| Beholdninger (restanse, restansemål) | saker (et antall, ikke per måned) |
| Tider (mål for saksbehandlingstid, forsinkelse) | måneder |
| Andeler | desimaltall mellom 0 og 1 (0.2 betyr 20 %) |
Tall skrives med punktum som desimaltegn og uten tusenskille: `29044.5`, ikke `29 044,5`.
## Oppbygning
```json
{
"merknad": "fri tekst, valgfritt",
"styring": {"forsinkelse": 3, "reaktivitet": 3},
"ledd": [
{"navn": "Politi", "innstromning": 150, "kapasitet": 175, "restanse": 300, "maal_tid": 2},
{"navn": "Domstol", "innstromning": 134.32, "kapasitet": 105.263, "restanse": 588.95, "maal_tid": 3,
"prognose_innstromning": 134.32, "maks_andel_utenom": 0.2}
]
}
```
- `ledd` (påkrevd): en liste med minst ett ledd, **i kjedens rekkefølge**. Rekkefølgen brukes: leddene etter
skranken omtales som leddene som får sakene sine gjennom den, og `forlop` regner hva flere avgjorte saker betyr
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. 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
| Felt | Påkrevd | Enhet | Standard | Brukes til |
|---|---|---|---|---|
| `navn` | ja | tekst | – | navnet i utskriften; `forlop` kan velge leddet med dette navnet |
| `innstromning` | ja | saker/mnd | – | utnyttelsen, og restanseveksten når `restanse_for_12_mnd` mangler |
| `kapasitet` | ja | saker/mnd | – | det leddet kan avgjøre per måned **slik det virker nå** |
| `restanse` | ja | saker | – | saker i kø nå |
| `maal_tid` | ett av de to | mnd | – | mål for saksbehandlingstid; restansemålet blir `maal_tid` × `kapasitet` |
| `restanse_maal` | ett av de to | saker | – | akseptabel restanse; brukes i stedet for `maal_tid` når begge er oppgitt |
| `prognose_innstromning` | nei | saker/mnd | `innstromning` | strømmen når balansen er gjenopprettet; kapasiteten dimensjoneres etter den |
| `maks_andel_utenom` | nei | andel, under 1 | 0 | hvor stor andel av sakene som kan ledes til forenklede reaksjoner |
| `restanse_for_12_mnd` | nei | saker | – | restansen for tolv måneder siden; gir observert vekst i restansen |
| `skjult_avgang` | nei | saker/mnd | 0 | saker som avsluttes uten behandling og som er regnet med i `kapasitet` |
| `innstromning_for_okning` | nei | saker/mnd | 95 % av kapasiteten | bare `forlop`: strømmen før den begynte å øke |
Krav som kontrolleres før regningen (`sjekk`):
- `navn`, `innstromning`, `kapasitet` og `restanse` må finnes, og `maal_tid` eller `restanse_maal`.
- `navn` må være tekst.
- Alle tallfeltene må være tall som er 0 eller større og endelige. `true`/`false` godtas ikke.
- `kapasitet` minus `skjult_avgang` må være større enn 0.
- `maks_andel_utenom` må være mindre enn 1.
Brudd på kravene gir en norsk melding som sier hvilket ledd og hvilket felt det gjelder, og ingen regning.
**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
Med Z = `kapasitet` − `skjult_avgang` (avgangen med behandling):
| Størrelse | Regnes som |
|---|---|
| Utnyttelse | `innstromning` / Z |
| Saksbeh.tid | `restanse` / `kapasitet`. Vises bare når målet er `maal_tid`; med `restanse_maal` står det «-». Det er ikke målt saksbehandlingstid |
| Restansemål | `restanse_maal`, ellers `maal_tid` × `kapasitet` |
| Restansevekst per måned | (`restanse` − `restanse_for_12_mnd`) / 12, ellers `innstromning` − `kapasitet` (minst 0) |
| Restanse over målet | `restanse` − restansemålet (minst 0) |
| Skranken som binder | høyest utnyttelse på to desimaler; er den lik, leddet der restanseveksten er størst i forhold til Z |
| Leddet binder | utnyttelsen er over 1, eller restansen vokser |
| Utnyttelse med saker ledet utenom | (1 − `maks_andel_utenom`) × `prognose_innstromning` / Z |
| Kapasitetsbehov | ((1 − `maks_andel_utenom`) × `prognose_innstromning` + restanse over målet / 24) / 0,95 |
Kapasitet bestilles bare når (1 − `maks_andel_utenom`) × `prognose_innstromning` + restanse over målet / 24 er større
enn Z. Faste verdier i regningen, som i notatets koordinerte regel (`ENDO` i `sim.py`): målutnyttelse 0,95, restansen
avvikles over 24 måneder, og bestilt kapasitet virker gradvis fra 6 til 24 måneder etter vedtak.
## `styring` (bare `forlop`)
| Felt | Enhet | Standard | Tillatt | Betyr |
|---|---|---|---|---|
| `forsinkelse` | mnd | 3 | over 0, høyst 60 | tiden fra kriminalitetsbildet endrer seg til innsatsen er endret (statistikk, beslutning, iverksetting) |
| `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. Feltnavnene i `styring` sjekkes også når
`diagnose` kjøres, så en skrivefeil der stopper begge.
## Hva `forlop` krever i tillegg
`forlop` legger leddet som binder (eller leddet du velger med navn) inn som modellens ledd med kø. Det stopper med en
melding når tallene ligger utenfor det modellen dekker:
- Innstrømningen før økningen (`innstromning_for_okning`, eller 95 % av Z når feltet mangler) må ligge mellom 86 og
98 % av Z. Utenfor det ville modellens regel ha endret kapasiteten allerede før økningen.
- `prognose_innstromning` (eller `innstromning`) må være høyere enn innstrømningen før økningen, og ikke mer enn om
lag 3 ganger så høy.
- Restansemålet må være større enn 0 (`maal_tid` eller `restanse_maal` over 0).
Leddet velges med navnet slik det står i fila, med samme store og små bokstaver, mellomrom og komma.
## Vanlige feil
**Årstall i stedet for månedstall.** Strømmene (`innstromning`, `kapasitet`, `skjult_avgang`, `prognose_innstromning`,
`innstromning_for_okning`) er per måned. Årstall deles på 12. Beholdningene (`restanse`, `restanse_for_12_mnd`,
`restanse_maal`) deles **ikke** på 12: de er antall saker på et tidspunkt. `maal_tid` er i måneder (60 dager er 2).
**Kapasitet som ikke virker ennå.** `kapasitet` er det leddet avgjør per måned nå. Kapasitet som er bevilget, men ikke
virker ennå, skal ikke med. Trekk den fra behovet verktøyet regner ut.
**Kapasitet med skjult avgang.** Er tallet for kapasitet hentet fra avgjorte saker, og noen av dem ble avsluttet uten
behandling (for eksempel henlagt på grunn av manglende kapasitet), oppgis de som `skjult_avgang`. Verktøyet trekker dem
da fra kapasiteten. Trekk dem ikke fra selv i tillegg, og oppgi ikke `skjult_avgang` hvis `kapasitet` ikke inneholder
dem.
**`maal_tid` eller `restanse_maal`.** `maal_tid` passer når restansen er hele køen og målet er en saksbehandlingstid.
`restanse_maal` passer når målet er et antall saker, eller når restansen bare er en del av køen (for eksempel saker
eldre enn tre måneder). Oppgis begge, brukes `restanse_maal`, og `maal_tid` blir stående ubrukt.
**Andel som prosent.** `maks_andel_utenom` er en andel: `0.2`, ikke `20`.
**Saksenheter.** Hvert ledd kan telle i sine egne enheter (anmeldelser, saker, dommer). Bare utnyttelsen sammenlignes
på tvers av ledd.
## Eksempelfilene
### `eksempler/eksempel_domstol.json`: stiliserte tall
Tallene er ikke norske. Domstolen er modellens tall i måned 24 i avsnitt 9.5 i notatet (`sim.py`, koordinert regel),
ganget med 1000: innstrømning og prognose 134,32 saker/mnd, kapasitet 105,263 (0,10/0,95 × 1000), og restanse 588,95,
som er restansen over målet (273,16) pluss 3 × kapasiteten. De tre andre leddene er satt under full utnyttelse for å
vise diagnosen. `styring` er regime A (forsinkelse 3, reaktivitet 3).
| Ledd | Innstrømning | Kapasitet | Restanse | Mål | Annet |
|---|---|---|---|---|---|
| Politi | 150 | 175 | 300 | 2 mnd | |
| Påtale | 140 | 160 | 200 | 1,5 mnd | høyst 10 % utenom |
| Domstol | 134,32 | 105,263 | 588,95 | 3 mnd | prognose 134,32; høyst 20 % utenom |
| Kriminalomsorg | 90 | 100 | 150 | 2 mnd | |
`diagnose` gir utnyttelse 1,28 i domstolen og 19 % mer kapasitet, som i avsnitt 9.5. `forlop` gir kritisk forsinkelse
7,2 måneder, 19 % mer kapasitet nå og 12 % til året etter.
### `eksempler/norge_2025.json`: offentlige norske tall
Årstall delt på 12. Kilden til hvert tall står i feltet `kilder` i fila, og tall merket «anslag» der er utledet, ikke
oppgitt i kilden. Tallene for politi og domstoler gjelder 2025. For fengsel er avgangen fra 2025 og køen fra oktober
2025 og oktober 2026.
| Ledd | Slik er feltene brukt |
|---|---|
| Politi og påtale | `restanse` er saker eldre enn tre måneder, så målet er `restanse_maal` (10 % av innkomne saker). `skjult_avgang` er lovbrudd henlagt på grunn av manglende saksbehandlingskapasitet (30 334 / 12). |
| Tingrett, meddomsrett | innkomne og avgjorte saker per måned, `maal_tid` 3; `restanse_for_12_mnd` er et anslag |
| Lagmannsrett, bevisanke | to kategorier lagt sammen; `restanse_for_12_mnd` er et anslag |
| Fengsel | `kapasitet` (iverksettelser i fengsel) og `innstromning` (avgang pluss køvekst) er anslag; `maal_tid` 2 (60 dager) |
`diagnose` gir utnyttelse 1,09 for politi og påtale, 1,04 for tingretten, 0,88 for lagmannsretten og 1,09 for fengsel.
Forbeholdene ved disse tallene står i `docs/forbehold.md`.