feat(m2): add sak skill with case templates

This commit is contained in:
Kjell Tore Guttormsen 2026-09-05 21:55:37 +02:00
commit 4496c19045
4 changed files with 556 additions and 0 deletions

View file

@ -0,0 +1,89 @@
# Statusmaskinen: tilstander, hendelser og stillhet
Referanse for `sak`. Alt her er implementert i
`${CLAUDE_PLUGIN_ROOT}/scripts/sak_status.py` og utledes derfra — denne fila
beskriver, den bestemmer ikke. Er de to uenige, er scriptet fasit og uenigheten
en feil som skal meldes.
## Tilstander
Hovedkjeden, i rekkefølge:
| Tilstand | Betyr | Ventende part ved ankomst |
|---|---|---|
| `vurderer` | Saken finnes, beslutningen er ikke tatt | `meg` |
| `soker` | Beslutningen er `ja`, søknaden er ikke sendt | `meg` |
| `sendt` | Søknaden er sendt | `dem` |
| `dialog` | Det er en toveis samtale i gang | veksler |
| `intervju` | Intervju er avtalt eller gjennomført | `ingen` / `dem` |
| `tilbud` | Tilbud er mottatt | `meg` |
| `avsluttet` | Operatøren har lukket saken | `ingen` |
To terminale sidetilstander: `avslag` og `trukket`.
Ingenting går ut av en terminal tilstand. En hendelse etter `avsluttet`,
`avslag` eller `trukket` er en feil, ikke en gjenåpning: en sak som starter på
nytt er en ny sak med ny sak-id.
## Hendelser — lukket vokabular på elleve
Build-brief 5.3. Ingen tolvte finnes, og en hendelse utenfor lista blir avvist
ved navn når loggen leses.
| Hendelse | Skriver seg fra | Lander på |
|---|---|---|
| `opprettet` | saken lages | `vurderer` |
| `soknad_sendt` | søknaden er sendt | `sendt` |
| `bekreftelse_mottatt` | automatisk kvittering | `sendt` |
| `henvendelse_mottatt` | de tok kontakt | `dialog` |
| `svar_sendt` | operatøren svarte | `dialog` |
| `intervju_avtalt` | tidspunkt er satt | `intervju` |
| `intervju_gjennomfort` | intervjuet er holdt | `intervju` |
| `tilbud_mottatt` | tilbud foreligger | `tilbud` |
| `avslag` | de sa nei | `avslag` |
| `trukket` | operatøren trakk seg | `trukket` |
| `stille` | operatøren noterer at det er stille | ingen overgang |
`stille` flytter ingenting. Den er en notering, ikke en tilstandsendring, og
den legges bare til av operatøren — ingenting i denne pluginen skriver den av
seg selv.
## To poster som ikke er hendelser
To rader i overgangstabellen kommer ikke fra hendelses-enumen, og de skrives
med `type` i stedet for `hendelse`:
| Post | Form i saksloggen | Lander på |
|---|---|---|
| Beslutning `ja` | `{"type": "beslutning", "beslutning": "ja", ...}` | `soker` |
| Operatøren lukker | `{"type": "utfall", "utfall": "avsluttet", ...}` | `avsluttet` |
Begge er poster build-brief 5.7 uansett speiler inn i saksloggen. `beslutning`
skriver den første; uten den kommer ingen sak videre fra `vurderer`. En
`beslutning: nei` er ingen overgang — et nei skaper ingen sak.
## Stillhet: tre regler
Terskler i dager, målt mot den datoen som faktisk står i loggen:
| Flagg | Regel | Terskel |
|---|---|---|
| `sendt_14` | `sendt` uten noe innkommende | 14 dager |
| `dialog_7` | `dialog` med ventende part `dem` uten noe innkommende | 7 dager |
| `intervju_10` | intervju gjennomført uten utfall | 10 dager |
**En automatisk kvittering er ikke kontakt.** `bekreftelse_mottatt` teller ikke
som innkommende og nullstiller derfor ikke stillhetsklokka. Det er hele grunnen
til at den står utenfor lista over innkommende hendelser.
`neste_frist` som statusmaskinen utleder, er den tidligste terskeldatoen blant
reglene som gjelder nå — altså **datoen saken går stille**. I `vurderer` og
`soker` gjelder ingen regel, og da står operatørens egen søknadsfrist urørt i
frontmatteren.
## «Ingen innkommende registrert» er ikke «ingen har svart»
Rapporterer scriptet at ingen innkommende hendelse er registrert, er det et
utsagn om denne loggen og ikke om verden. E-postserveren er utsatt til M4, så
ingenting leser innboksen ennå. Gjengi merknaden som den er, og ikke presenter
saken som stille på grunnlag av den.