smithery.ai

event-sourcing

Guide til Event Sourcing arkitekturen. Bruk ved arbeid med events, state-projeksjoner, eller forretningsregler.

First seen Mar 28, 2026

Installation

$ npx skills add https://smithery.ai

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery.ai · top by installs.

npx skills add https://smithery.ai

Browse all from smithery.ai

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Skill metadata

Parsed from SKILL.md frontmatter.

Allowed toolsRead, Grep, Glob

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 6,081 B
  • docs SUMMARY.md 133 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 2 installs

SKILL.md

Event Sourcing & Datamodell

Oversikt

Systemet bruker Event Sourcing Light - alle endringer lagres som immutable events som kan prosesseres uavhengig på tre parallelle spor.

Kjerneprinsipp

Events (immutable) → Projeksjon → SakState (computed view)
  • Events lagres i Supabase event store
  • SakState beregnes fra event-loggen ved hver request
  • Ingen direkte state-mutasjon - kun nye events

Event-Typer

Grunnlag (TE sender, BH responderer)

Event Aktør Beskrivelse
grunnlag_opprettet TE Oppretter varsel om endring
grunnlag_oppdatert TE Oppdaterer eksisterende varsel
grunnlag_trukket TE Trekker tilbake varselet
respons_grunnlag BH BH responderer (godkjent/avslått/delvis)
responsgrunnlagoppdatert BH BH endrer standpunkt ("snuoperasjon")

Vederlag (TE sender krav, BH responderer)

Event Aktør Beskrivelse
vederlagkravsendt TE Sender vederlagskrav
vederlagkravoppdatert TE Oppdaterer krav
vederlagkravtrukket TE Trekker krav
respons_vederlag BH BH responderer på vederlag
responsvederlagoppdatert BH BH endrer standpunkt

Frist (TE sender krav, BH responderer)

Event Aktør Beskrivelse
fristkravsendt TE Sender fristkrav (nøytralt/spesifisert)
fristkravoppdatert TE Oppdaterer krav
fristkravspesifisert TE Spesifiserer dager for nøytralt varsel
fristkravtrukket TE Trekker krav
respons_frist BH BH responderer på frist
responsfristoppdatert BH BH endrer standpunkt

Forsering (§33.8)

Event Aktør Beskrivelse
forsering_varsel TE Varsler om forsering
forsering_respons BH BH aksepterer/avslår forsering
forsering_stoppet TE Stopper pågående forsering
forseringkostnaderoppdatert TE Oppdaterer påløpte kostnader
forseringkoelagt_til TE Legger til KOE i forseringssak
forseringkoefjernet TE Fjerner KOE fra forseringssak

Endringsordre (§31.3)

Event Aktør Beskrivelse
eo_opprettet BH Oppretter EO-sak
eokoelagt_til BH Legger KOE til i EO
eokoefjernet BH Fjerner KOE fra EO
eo_utstedt BH Utsteder EO formelt
eo_akseptert TE TE aksepterer EO
eo_bestridt TE TE bestrider EO
eo_revidert BH BH reviderer EO

System-Events

Event Aktør Beskrivelse
sak_opprettet System Oppretter ny sak i systemet

Spor-Status

Hvert spor har en status som endres basert på events:

IKKE_RELEVANT → UTKAST → SENDT → UNDER_BEHANDLING → GODKJENT/AVSLÅTT/DELVIS_GODKJENT
                                       ↓                    ↓
                                UNDER_FORHANDLING      TRUKKET
                                       ↓
                                    LAAST

Statuser:

  • UNDER_FORHANDLING - BH har avslått/delvis godkjent, forhandling pågår
  • LAAST - Grunnlag låst etter godkjenning

Data-Strukturer

SakEvent (Base)

class SakEvent:
    event_id: str           # Unik ID
    sak_id: str             # Hvilken sak
    event_type: EventType   # Type hendelse
    tidsstempel: datetime   # Når (UTC)
    aktor: str              # Hvem
    aktor_rolle: "TE" | "BH"
    kommentar: Optional[str]
    refererer_til_event_id: Optional[str]  # For responser

SakState (Projeksjon)

class SakState:
    sak_id: str
    sakstittel: str
    sakstype: SaksType                           # standard/forsering/endringsordre
    grunnlag: GrunnlagTilstand
    vederlag: VederlagTilstand
    frist: FristTilstand
    relaterte_saker: List[SakRelasjon]
    forsering_data: Optional[ForseringData]      # Kun for sakstype=forsering
    endringsordre_data: Optional[EndringsordreData]  # Kun for sakstype=endringsordre
    opprettet: Optional[datetime]
    siste_aktivitet: Optional[datetime]

Frontend/Backend Synkronisering

KRITISK: Typer må matche mellom frontend og backend!

Frontend Backend Formål
src/types/timeline.ts backend/models/events.py Event-typer
src/types/timeline.ts backend/models/sak_state.py State-modell
src/constants/categories.ts backend/constants/grunnlag_categories.py Kategorier

Bruk python scripts/check_drift.py for å verifisere synkronisering.

API Flyt

Sende event

POST /api/events
{
  "sak_id": "SAK-001",
  "event_type": "grunnlag_opprettet",
  "aktor": "Ola Nordmann",
  "aktor_rolle": "TE",
  "data": { ... }
}

Hente state

GET /api/cases/{sak_id}/state
→ Returns: SakState (projisert fra alle events)

Regler og Validering

Rekkefølge-regler

  • Kan ikke sende responsgrunnlag før grunnlagopprettet finnes
  • Kan ikke sende vederlagkravsendt på trukket grunnlag
  • BH kan bare respondere på events fra TE og vice versa

Forretningsregler

Se backend/services/business_rules.py for komplett liste.

Vanlige oppgaver

Legge til ny event-type

  1. Legg til i EventType enum i backend/models/events.py
  2. Opprett data-klasse hvis nødvendig
  3. Legg til i AnyEvent union type
  4. Oppdater src/types/timeline.ts (frontend)
  5. Oppdater state-projeksjon i timeline_service.py
  6. Kjør python scripts/check_drift.py for å verifisere

Endre state-modell

  1. Oppdater Pydantic-modell i backend/models/sak_state.py
  2. Oppdater TypeScript interface i src/types/timeline.ts
  3. Oppdater projeksjon i backend/services/timeline_service.py
  4. Kjør python scripts/state_drift.py for å verifisere