README and docs/forbehold.md said that the note does not mention that the starting point in the models with a court queue is not an exact equilibrium. The note says so in section 10 as of its commit dbcab3f. The model, the core and the reference output are unchanged. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
239 lines
13 KiB
Markdown
239 lines
13 KiB
Markdown
# dynamisk-rettsstat
|
|
Plugin for Claude som kjører modellen i Den dynamiske rettsstaten på egne tall: finn leddet som binder, følg tiltaket over tid, simuler egne scenarioer og endre modellen.
|
|
|
|
Notatet *Den dynamiske rettsstaten* har en modell av straffesakskjeden: hvor den binder, hva slags tiltak det krever,
|
|
og hva som skjer over tid. Med denne pluginen kan du bruke modellen ved å snakke med Claude, uten å programmere: legg
|
|
inn tall per ledd, eller spør «hva om …», og få svaret med modellens egne tall og forbehold. Den er laget for dem som
|
|
arbeider i straffesakskjeden og for forskere som vil prøve, etterprøve eller forbedre modellen.
|
|
|
|
Prinsippet bak notatet: «Innsatsen for å håndheve lover og regler bør løpende stå i forhold til hvor mye, og hvor
|
|
alvorlig, de faktisk brytes.» Straffebud og strafferammer ligger fast.
|
|
|
|
## Install
|
|
|
|
I Claude Code:
|
|
|
|
```bash
|
|
claude plugin marketplace add https://git.fromaitochitta.com/open/ktg-plugin-marketplace.git
|
|
claude plugin install dynamisk-rettsstat@ktg-plugin-marketplace
|
|
```
|
|
|
|
I Claude Cowork: last ned zip-fila for nyeste utgivelse fra
|
|
[utgivelsessiden](https://git.fromaitochitta.com/open/dynamisk-rettsstat/releases) og last den opp som plugin. Cowork
|
|
tar zip-fila slik den er.
|
|
|
|
Det som trengs:
|
|
- **Python 3.** Flaskehalsdiagnosen trenger ikke noe mer.
|
|
- **numpy og scipy** for forløpet over tid, simuleringene og kontrollen. Mangler de, spør Claude før noe installeres,
|
|
og installerer dem da fra PyPI i en egen mappe for pluginen (krever internett). Ingenting installeres uten at du
|
|
sier ja. I Cowork fantes begge fra før da pluginen ble prøvd, så ingenting ble installert.
|
|
|
|
Status: prøvd i Claude Code og i Cowork. Hva som er målt i Cowork, og hva som ikke er det, står under «Prøvd i
|
|
Cowork» lenger ned.
|
|
|
|
## Hva du kan gjøre med den
|
|
|
|
Pluginen har fire ferdigheter. Du trenger ikke kunne navnene: si hva du vil, så velger Claude riktig ferdighet.
|
|
Eksemplene under er virkelige svar fra pluginen, kortet ned.
|
|
|
|
### Finn leddet som binder (`diagnose`)
|
|
|
|
Du sier: *«Finn flaskehalsen i straffesakskjeden. Her er tallene våre for saker inn, kapasitet og restanse per ledd.»*
|
|
Claude spør etter det som mangler, viser tallene slik de er forstått, og regner når du har sagt ja. Med eksempeltallene:
|
|
|
|
```
|
|
Ledd Utnyttelse Saksbeh.tid Mål Restansevekst/mnd
|
|
Politi 0,86 1,7 2,0 0
|
|
Påtale 0,88 1,2 1,5 0
|
|
Domstol 1,28 5,6 3,0 29
|
|
Kriminalomsorg 0,90 1,5 2,0 0
|
|
|
|
Skranken som binder: Domstol (utnyttelse 1,28, restanse 589 mot mål 316; vekst: innstrømning minus kapasitet).
|
|
...
|
|
Kapasitet: (0,80 x 134,3 + 273/24) / 0,95 = 125,1 saker/mnd, det vil si 19 % mer.
|
|
```
|
|
|
|
Svaret har tiltakene i rekkefølgen utnytt leddet, led saker utenom, utvid, etter *Theory of Constraints*.
|
|
|
|
### Følg tiltaket over tid (`forlop`)
|
|
|
|
Du sier: *«Hva skjer måned for måned hvis vi følger anbefalingen? Tåler styringen forsinkelsen?»* Med samme tall:
|
|
|
|
```
|
|
Kritisk forsinkelse: 7,2 mnd. Forsinkelsen er kortere, så styringen er stabil (margin 4,2 mnd).
|
|
...
|
|
- nå: bestill 19 % mer kapasitet
|
|
- om 12 mnd: bestill 12 % mer kapasitet
|
|
```
|
|
|
|
Deretter en tabell med kapasitet, andel ledet utenom, restanse, saksbehandlingstid, politiinnsats, kriminalitet og
|
|
tillit, med og uten tiltak, og hva det betyr for leddene etter.
|
|
|
|
### Kjør modellen med egne forutsetninger (`simuler`)
|
|
|
|
Du sier: *«Hva om restansen avvikles over 6, 12, 24 eller 48 måneder i stedet for 24 i den koordinerte regelen?»*
|
|
Claude beskriver scenarioet med ord, kjører det når du har sagt ja, og viser nøkkeltallene. Utdrag:
|
|
|
|
```
|
|
| Nøkkeltall | T_clear=6 | T_clear=12 | T_clear=24 | T_clear=48 | T_clear=96 | T_clear=inf |
|
|
|-----------------------------------------------------------|----------:|-----------:|-----------:|-----------:|-----------:|------------:|
|
|
| Kriminalitet K, gjennomsnitt fra mnd 12 | 1,093 | 1,096 | 1,098 | 1,102 | 1,111 | 1,128 |
|
|
| Saksbehandlingstid i domstolen, lengste (mnd) | 8,0 | 8,1 | 8,3 | 8,5 | 8,6 | 8,8 |
|
|
| Kapasitet, høyeste (1,00 = ved start) | 1,91 | 1,53 | 1,31 | 1,19 | 1,10 | 1,07 |
|
|
| Kapasitetsår over utgangsnivået | 6,28 | 4,66 | 3,52 | 2,22 | 1,21 | 0,88 |
|
|
```
|
|
|
|
Parameterne er notatets stiliserte verdier, og tallene viser modellens dynamikk, ikke prognoser; det står i hvert
|
|
svar. Hver kjøring skriver et sammendrag, tidsseriene som CSV og alle parametere slik de ble brukt. Claude tilbyr en
|
|
figur laget av de samme tallene. Pluginen har seks ferdige scenarioer, og 21 scenariofiler som lager notatets
|
|
figurgrunnlag på nytt.
|
|
|
|
### Forbedre modellen (`forbedre`)
|
|
|
|
Du sier: *«Jeg vil legge til en mekanisme i modellen»* eller *«Jeg vil endre en ligning og se hva det gjør med
|
|
notatets resultater.»* Claude lager en kopi av modellen som du eier, finner ligningen i modellkartet, gjør endringen
|
|
sammen med deg og kjører kontrollen. Uendret modell gir `Nivå: bit for bit som notatet.` Her er kjernen i en kopi
|
|
endret slik at frafallet fra domstolskøen er 0,02 i stedet for 0,01 per måned:
|
|
|
|
```
|
|
1. Kjernen: endret fra notatet (https://git.fromaitochitta.com/open/den-dynamiske-rettsstaten @ 2badc25): sim.py er endret.
|
|
1. Fasit: uendret fra notatet (27 filer).
|
|
...
|
|
4. Full kjøring: 11 av 22 datafiler like byte for byte med notatet; utskriften endret.
|
|
kjede_s2.dat (endret): største absolutte avvik per kolonne: K 9,5e-03, U 2,8e-03, L 8,4e-03, T 2,8e-02, Q 1,8e+00, tauD 1,7e+01
|
|
...
|
|
6. Scenariokjøreren: 6 av 14 av notatets datafiler gjenskapt byte for byte fra eksempler/scenarioer/notatet/.
|
|
...
|
|
Nivå: endret: Kjernen, forlop, Full kjøring, Scenariokjøreren.
|
|
Dette er en arbeidskopi, så det er en opplysning, ikke en feil: detaljene over viser hvilke av notatets resultater som har flyttet seg, og hvor mye.
|
|
```
|
|
|
|
## Prøv uten egne tall
|
|
|
|
To eksempelfiler følger med. Si for eksempel *«Prøv flaskehalsdiagnosen på eksempeltallene»*:
|
|
|
|
- **Stiliserte tall** (`eksempler/eksempel_domstol.json`): modellens egne tall, ikke norske. Domstolen binder, og
|
|
svaret gjenskaper avsnitt 9.5 i notatet: utnyttelse 1,28 og 19 % mer kapasitet.
|
|
- **Offentlige norske tall for 2025** (`eksempler/norge_2025.json`): politi og påtale 1,09, tingrett 1,04,
|
|
lagmannsrett 0,88 og fengsel 1,09. Flere av tallene er anslag, og kildene står i fila. Forbeholdene står i
|
|
[docs/forbehold.md](docs/forbehold.md).
|
|
|
|
## Forholdet til notatet
|
|
|
|
Notatet, simuleringskoden og PDF-ene ligger i
|
|
[den-dynamiske-rettsstaten](https://git.fromaitochitta.com/open/den-dynamiske-rettsstaten).
|
|
|
|
- Kjernen i `modell/kjerne/` er uendrede kopier av notatets `sim.py`, `diagnose.py` og `forlop.py` ved commit 2badc25,
|
|
låst med sha256 i `modell/kjerne/KILDE.json`. En test feiler hvis en av dem endres.
|
|
- Kontrollen måler kjernen og fasiten mot notatets egne sjekksummer, kjører hele notatets simulering og
|
|
sammenligner med notatets 22 datafiler og utskriftene, og kjører notatets scenariofiler gjennom scenariokjøreren.
|
|
Målt 2026-11-11 med Python 3.14.0, numpy 2.5.4 og scipy 1.18.1 (macOS): alle 22 datafilene er like byte for byte,
|
|
og 14 av 14 scenariofiler gjenskaper notatets datafiler byte for byte. Samme dag i Cowork med Python 3.13.18,
|
|
numpy 2.5.3 og scipy 1.18.1 (Linux): samme resultat. Med andre versjoner av numpy og scipy sier kontrollen om
|
|
tallene er like bit for bit eller innenfor én enhet i siste siffer.
|
|
- Scenariokjøreren kaller kjernen uendret. Scenariofilene i `eksempler/scenarioer/notatet/` gjenskaper notatets
|
|
datafiler, og testene sammenligner dem med fasiten.
|
|
|
|
Du kan sjekke dette selv. Kontrollen tar et par minutter, testene noen minutter til:
|
|
|
|
```bash
|
|
git clone https://git.fromaitochitta.com/open/dynamisk-rettsstat.git
|
|
cd dynamisk-rettsstat
|
|
python3 -m venv .venv
|
|
.venv/bin/pip install --group dev
|
|
.venv/bin/python modell/kjor.py kontroll
|
|
.venv/bin/python -m pytest
|
|
```
|
|
|
|
Kontrollen skal ende med `Nivå: bit for bit som notatet.` når Python, numpy og scipy er versjonene over. Med andre
|
|
versjoner kan den ende med `Nivå: innenfor toleranse`; det er ikke sett i noen av målingene. `kontroll --alt` viser
|
|
alle linjene som er ulike, ikke bare de 40 første per sammenligning. `pip install --group dev` trenger pip 25.1
|
|
eller nyere.
|
|
|
|
## Forbedre modellen selv
|
|
|
|
Modellen er en første versjon, og notatet er skrevet som en invitasjon til videre arbeid. Pluginen er bygd for at du
|
|
skal kunne endre den:
|
|
|
|
- **Arbeidskopi.** Endringer gjøres i en kopi av modellen i din egen mappe (`rettsstat-modell/`), ikke i pluginen,
|
|
som byttes ut når den oppdateres. Finnes en kopi i mappa du jobber i, spør Claude om den skal brukes, og sier hva
|
|
kontrollen sier om den før tallene legges fram.
|
|
- **Modellkart.** [docs/modellkart.md](docs/modellkart.md) går fra notatets ligninger til funksjonene og
|
|
parameterne i koden, med status for hver ligning.
|
|
- **Utvidelser med grensetilfelle.** En ny mekanisme legges ved siden av kjernen, med en verdi der den forsvinner og
|
|
modellen gir nøyaktig kjernens tall. Regelen er notatets egen. Mal og et gjennomført eksempel står i
|
|
[docs/utvidelser.md](docs/utvidelser.md).
|
|
- **Kontrollen** sier etter hver endring om notatets resultater står fast, eller hvilke som har flyttet seg og hvor
|
|
mye.
|
|
|
|
Forskere som bruker git, kan også klone dette repositoryet og starte Claude Code med `claude --plugin-dir .` i mappa.
|
|
Slik sender du en forbedring tilbake: [BIDRA.md](BIDRA.md).
|
|
|
|
## Prøvd i Cowork
|
|
|
|
Forfatteren prøvde v0.1.0 i Cowork i Claude-skrivebordsappen 2026-11-11. Dette ble målt:
|
|
|
|
- **Installasjon.** Zip-fila for v0.1.0 fra Forgejo ble lastet opp uten advarsler, og de fire ferdighetene var på
|
|
plass.
|
|
- **Diagnosen** ga tallene som står i dette dokumentet, på eksempeltallene (1,28 og 19 %), på de norske tallene
|
|
(1,09 / 1,04 / 0,88 / 1,09) og på egne tall oppgitt per år. Claude delte årstallene på 12, viste tallene slik de
|
|
var forstått, og spurte før regningen.
|
|
- **Forløpet** ga 7,2 måneder, 19 % nå og 12 % om 12 måneder, også i en ny økt.
|
|
- **Kontrollen** endte med `Nivå: bit for bit som notatet.`: 22 av 22 datafiler og 14 av 14 scenariofiler.
|
|
- **Miljøet.** Cowork kjørte kommandoene i en Linux-maskin (Ubuntu 24.04) der Python 3.13.18, numpy 2.5.3 og scipy
|
|
1.18.1 fantes fra før. Pluginen installerte derfor ingenting.
|
|
- **Arbeidskopi.** En kopi med frafallet fra domstolskøen satt til 0,02 ga `Nivå: endret`, med 11 av 22 datafiler
|
|
flyttet. Kopien ble laget i Linux-maskinen, og Claude ga den tilbake som en zip-fil sammen med kontrollutskriften.
|
|
|
|
Ikke målt i Cowork:
|
|
|
|
- En egen simulering fra «hva om …» til tabell og figur. Prøven stoppet ved spørsmålet Claude stilte før kjøringen.
|
|
Scenariokjøreren selv ble kjørt av kontrollen.
|
|
- Installasjon av numpy og scipy fra pluginen, siden de fantes fra før.
|
|
- Om en arbeidskopi blir liggende til neste økt.
|
|
|
|
Windows er ikke prøvd, verken i Cowork eller i Claude Code.
|
|
|
|
## Status og begrensninger
|
|
|
|
- Modellen er ikke kalibrert på norske data. Parameterne er stiliserte, og simuleringene illustrerer mekanismer. De
|
|
er ikke prognoser.
|
|
- Av notatets 39 nummererte ligninger er 18 implementert, 12 forenklet og 9 ikke implementert.
|
|
- Bare ett ledd har kø i modellen. Alle simuleringene antar feilfrie observasjoner, og resultatene er enkeltbaner
|
|
uten parameterusikkerhet.
|
|
- I modellene med kø i domstolen er utgangspunktet nesten, men ikke helt, en likevekt: uten noe sjokk går
|
|
kriminaliteten fra 1,000 til 1,018 og saksbehandlingstiden fra 3,0 til 4,6 måneder over 240 måneder. Notatet
|
|
omtaler det under begrensningene i avsnitt 10. En liten del av det kjedescenarioene viser, er denne driften, og
|
|
sammendraget viser hvor langt den har kommet fram til sjokket.
|
|
- Kostnader og gevinster er ikke regnet i kroner.
|
|
- Svarene er tekst og tabeller, med tilbud om en figur etter en simulering. Pluginen bruker ikke det Cowork ellers
|
|
kan av visuelle svar. Det er en opplagt videreutvikling for den som vil bygge videre på den.
|
|
- Diagnosen regner på tallene slik de er oppgitt, og kapasitetsbehovet er et grovt anslag.
|
|
|
|
Alle forbeholdene, for modellen, diagnosen, forløpet og de norske tallene: [docs/forbehold.md](docs/forbehold.md).
|
|
|
|
## Non-goals
|
|
|
|
- Ingen prognoser. Kjøringene viser modellens dynamikk.
|
|
- Erstatter ikke budsjettarbeidet. Den viser hvor kjeden binder, hvilken type tiltak som følger, og omtrent hvor
|
|
stort tiltaket bør være.
|
|
- Sier ingenting om enkeltsaker eller enkeltpersoner, og skal bare brukes på aggregerte tall.
|
|
- Ingen persondata og ingen data fra enkeltsaker, verken i pluginen eller i det den skal brukes på.
|
|
- Kalibrerer ikke modellen mot norske tidsserier.
|
|
- Foreslår ikke å endre straffebud eller strafferammer.
|
|
|
|
## Slik er arbeidet gjort
|
|
|
|
Arbeidet er et privat eksperiment. Modellen, koden og denne pluginen er i praksis laget av kunstig intelligens
|
|
(Claude, Anthropic) etter forfatterens retning. Forfatteren har ikke selv etterprøvd all matematikken, og det kan være
|
|
feil og mangler. Forfatteren har ansvaret for innholdet.
|
|
|
|
Innspill og kritikk er velkomne, særlig fra dem som arbeider i straffesakskjeden og fra forskere som vil prøve
|
|
modellen mot data. Send en e-post til hello@fromaitochitta.com.
|
|
|
|
## Lisens
|
|
|
|
[MIT](LICENSE).
|
|
|
|
## Changelog
|
|
See [CHANGELOG.md](CHANGELOG.md).
|