Dokumentationen / API
POST /api/flows/utvecklingsarende/*
APIStartsideportalenDokumentflödets serverändar: en som skriver hela utkastet ur uppladdat material, en som ändrar ett avsnitt i samtalet.
källa: apps/portal/src/app/api/flows/utvecklingsarende/uppdaterad: 2026-09-04
Ansvar
- Äga prompten, profilen och beslutet att lämna ärendet för beslut.
- Läsa uppladdat underlag på servern: docx, pptx och xlsx blir text, PDF skickas som dokumentblock, och båda vägarna går i samma anrop.
- Garantera svarets form med structured outputs ur ett zod-schema byggt ur flödesdefinitionen.
- Validera hela dokumentet mot arendeSchema innan något av det når prompten.
Filer
| Sökväg | Roll |
|---|---|
| app/api/flows/utvecklingsarende/utkast/route.ts | POST: underlag och filer in, ett komplett utkast ut. |
| app/api/flows/utvecklingsarende/tur/route.ts | POST: en samtalstur mot ett avsnitt. Dokumentet valideras först. |
| app/../ai/strukturerat.ts | koraStrukturerat: det generiska modellanropet båda flödena delar. |
| app/../ai/underlag.ts | Uppladdat material till text eller dokumentblock. Filgränser och styrteckensanering. |
| app/../ai/ooxml.ts | Textuttag ur docx, pptx och xlsx: zip-läsare och XML-plockning, utan beroenden. |
| app/../ai/ooxml.test.ts | 10 tester mot zip-filer som byggs i testet – både lagrade och deflaterade poster. |
| modules/utvecklingsarende/src/schema.ts | arendeSchema och parsaArende: dokumentets form, kontrollerad på servern. |
Kontrakt
- Ordningen i handlern: identitet ur sessionen, takgräns, zod, underlag till text, modellanrop, sanering.
- Att modellen sätter lamna räcker aldrig. farLamnas kräver alla kravs-avsnitt ifyllda, inget kärnavsnitt tomt och användarens bekräftelse.
- Modellen säger lamna, servern svarar lamnad – samma namnbyte som create och created i felanmälan.
- Ingen fältförankring. Varje avsnitt går att skriva i direkt, så klientens värden är inmatningen, inte en väg förbi den – ADR-013 gäller flöden där modellens extraktion är enda källan (ADR-015).
Beroenden och beslut
Kvarstår
- Ingen OCR: en inskannad PDF utan textlager läses av modellen som bild, en skannad docx inte alls. Filer som inte gick att läsa räknas upp i olasta.
- Zip64 stöds inte i ooxml.ts. Ett Office-dokument måste vara mycket stort för att skrivas så, och 10 MB-taket träffar först.
- Takgränsen delas med felanmälan och lever i minnet – den nollställs vid omstart och delas inte mellan instanser.
- Filerna lagras inte. Bilagelistan är metadata.
- Ingen sessionsdata: att användaren bekräftat inlämning kommer från klienten. Servern kontrollerar allt annat själv, men just den flaggan väntar på M3.