Hoppa till innehållet

Devportalen /portal/dev

Startsideportalens ekosystem för människa och agent

Dokumentationen / Modul

utvecklingsarende

ModulStartsideportalen

Beslutsunderlag för utvecklingsinitiativ: fjorton avsnitt enligt kommunens mall, där fyra är typade radlistor med summeringar i stället för fritext.

källa: packages/modules/utvecklingsarendeuppdaterad: 2026-09-04

Ansvar

  • Äga datakontraktet för ett utvecklingsärende: fjorton avsnitt, sju avsnittstyper, inga fria strängar där en union räcker.
  • Hålla beräkningarna som rena funktioner, så att vyn och servern får samma summor.
  • Härleda kostnadsraderna ur resursbehovet, så att dokumentet inte säger två olika saker om samma sak.
  • Äga fokusrutten /flode/utvecklingsarende och hela vyn bakom den.
  • Bidra med rader i "Att agera på" för underlag som väntar på granskning eller beslut.
  • Aldrig lämna ett ärende för beslut själv – servern avgör.

Filer

Tabell: Sökväg, Roll
SökvägRoll
modules/utvecklingsarende/src/data/types.tsDatakontraktet: avsnittstyper, radtyper, Material, Utvecklingsarende.
modules/utvecklingsarende/src/data/mock.tsExempelärendet ur designfacit. Siffrorna är facit för berakning.test.ts.
modules/utvecklingsarende/src/data/index.tshamtaUtvecklingsarenden(ctx) – enda ingången till datat.
modules/utvecklingsarende/src/berakning.tssummorKostnader, summorNyttor, summorResurser, synkaHarledda.
modules/utvecklingsarende/src/manifest.tsroutes med mode focus, nav, slots.actions och ai.intents.
modules/utvecklingsarende/src/components/UtvecklingsarendeFlode.tsxFyra steg i en vy. Stegraden ritas här, inte i skalets FlowBar.
modules/utvecklingsarende/src/components/Underlag.tsxSteg 1: fälten och uppladdningen med sina gränser.
modules/utvecklingsarende/src/components/Avsnittskort.tsxSteg 3: ett avsnitt som kort, med rätt editor för sin typ.
modules/utvecklingsarende/src/components/Assistent.tsxSamtalet om det avsnitt användaren står i. Flödets enda AI-yta.
modules/utvecklingsarende/src/components/Forhandsvisning.tsxSteg 4: mallens form. Ren presentationskomponent utan state.
modules/utvecklingsarende/src/components/Kontrollista.tsxSteg 4: status per rubrik, bekräftelsedialog och inlämning.
modules/utvecklingsarende/src/store.tsZustand: steg, ärende, samtal och anropen mot serverändarna.
modules/utvecklingsarende/src/flow.tsMALL som DokumentflodeDefinition, KARNAVSNITT, luckor och farLamnas.
modules/utvecklingsarende/src/schema.tsUtkast- och turschema byggda ur MALL, plus byggAvsnitt.
modules/utvecklingsarende/src/prompt.tsSystemprompten ur definitionen. Serverns summor följer med turprompten.
modules/utvecklingsarende/src/motor/mock.tsRegelmotorn bakom AI_PROVIDER=mock. Samma kontrakt som modellen.
modules/utvecklingsarende/src/flode.tsServersidans ingång: definition, prompt, schema och motor utan vyn.
modules/utvecklingsarende/test/berakning.test.ts11 tester på summorna och härledningen.
modules/utvecklingsarende/test/flow.test.ts28 tester på mallen, luckorna, farLamnas och schemat.
modules/utvecklingsarende/test/motor.test.ts18 tester på regelmotorn.
modules/utvecklingsarende/test/store.test.ts7 tester på redigeringarna, bland annat att en ändrad timkostnad räknar om Kostnader direkt.

API

Tabell: Namn, Signatur, Beskrivning
NamnSignaturBeskrivning
hamtaUtvecklingsarenden(ctx: UserContext) => Promise<UtvecklingsarendeSvar>Rollfiltrerade underlag. Mockade – det finns ingen lagring förrän fas 4.
summorKostnader / summorNyttor / summorResurser(avsnitt) => summorRena funktioner över datakontraktet. Treårsfönstret är mallens.
synkaHarledda(kostnader, resurser) => Kostnadsrad[]Räknar om de kostnadsrader som bär harleddFran ur resursbehovet.
MALLDokumentflodeDefinitionFlödet som data. Prompt, schema och förhandsvisning genereras ur den.
farLamnas(arende, modellenForeslar, anvandarenHarBekraftat) => booleanServerns beslut. Tre villkor samtidigt; modellens förslag räcker aldrig.
utkastSchema / turSchema() => ZodObjectStructured outputs-kontraktet, byggt ur MALL i stället för skrivet för hand.
parsaArende(varde: unknown) => Utvecklingsarende | nullValiderar dokumentet klienten skickar. Enda stället formen konverteras.
koraTur / spelaUppUtkastregelmotornDeterministisk tur för offline-demo. Samma kontrakt som modellen.
useUtvecklingsarendezustand storeFlödets tillstånd i klienten. Ingen prompt och ingen nyckel bor här.

Kontrakt

  • Ett avsnittsvärde är ett objekt eller en radlista, aldrig en sträng. Därför passar det inte i FlowDefinition (ADR-015).
  • Avsnittsstatus är tom, utkast, granskad eller last. Allt som står som utkast bär AiChip tills användaren granskat det.
  • Nettonyttan är tre års nytta minus tre års kostnad: engångskostnaden en gång, den löpande tre.
  • Kostnadsrader med harleddFran ägs av resursbehovet och skrivs aldrig för hand.
  • Actions-raden kommer ur datafunktionen och visar mockade underlag. Utkastet som står öppet i en flik känner servern inte till.
  • Allt modellen skrivit bär AiChip tills användaren markerat avsnittet som granskat, och märket följer med in i förhandsvisningen och inlämningen.

Beroenden och beslut

Kvarstår

  • Ingen lagring: ärendet lever i klientens store under sessionen och nollställs när flödet öppnas. Spara utkast finns inte, och verkliga utkast i actions-raden kräver fas 4.
  • Förslagschipet ger AI-fältets knapp till flödet, men flödet läser inte frågan som följer med (?fraga=) än.
  • Word-export hör hemma i BFF:en. Knappen finns men är avstängd.
  • Beslutsavsnittet fylls av beslutsfattaren – den vyn finns inte.
  • Utkastet tar drygt en minut mot modellen och skrivs i ett anrop. Steg 2 visar väntetiden, inte ett påhittat förlopp – och avbryts av sig självt efter tre minuter.