Dokumentationen / API
POST /api/flows/felanmalan
dok · api-felanmalanid: api-felanmalan
namn: POST /api/flows/felanmalan
sammanfattning: Samtalsflödets enda serverända: äger prompten, validerar turen och fattar beslutet om ärendet får skapas.
uppdaterad: 2026-08-30
ansvar:
- Hämta identiteten ur sessionen – aldrig ur klientens payload.
- Hålla takgränsen: 40 anrop per användare och femminutersfönster.
- Validera inkommande med zod och sanera fältvärden innan de kan bli ett ärende.
- Välja regelmotor eller modell utifrån AI_PROVIDER, med samma kontrakt åt båda hållen.
- Avgöra själv om allt obligatoriskt finns. Att modellen sätter create räcker aldrig.
filer:
- app/api/flows/felanmalan/route.ts — POST-handlern: takgräns, validering, förankring, turkörning, beslut.
- ai/faltsignatur.ts — HMAC över fältvärdena, så att klientens förankring bevisligen är serverns egen (ADR-013).
- ai/faltsignatur.test.ts — Tester på signaturen, inklusive att ett tillagt fält avvisas.
kontrakt:
Ordningen är inte utbytbar:
```
const user = await getCurrentUser(); // identitet från servern
if (!inomTakgrans(user.userId)) return 429; // takgräns före arbete
const rad = Body.safeParse(await request.json()); // zod på inkommande
const varden = sanera(tur.varden); // styrtecken bort, 500 tecken
farSkapas(flow, tur.create, varden, antalSvar); // serverns beslut
```
- Meddelandehistoriken är begränsad till 60 meddelanden och 2000 tecken per meddelande.
- Turkontraktet garanteras av structured outputs, inte av en instruktion i prompten.
- Ett omtag vid ogiltigt svar, inte en loop – latensen hålls nere och kostnaden förutsägbar.
- Klienten skickar tillbaka fälten så att assistenten kan återge dem ordagrant, men de når prompten bara om serverns egen signatur stämmer (ADR-013). Utan den kontrollen vore fältvärden en väg att mata in uppgifter förbi samtalet.
- Förankringen påverkar aldrig beslutet: allaObligatoriskaIfyllda och farSkapas läser modellens svar, inte klientens.
beroenden: felanmalan, ai-adapter, module-sdk, skal
beslut: ADR-013
kvarstår:
- Takgränsen ligger i minnet och överlever inte omstart eller flera instanser. Flyttar till Redis i fas 4.
- Ingen ärendeadapter: beslutet att skapa fattas, men ingenting skapas (M3).
- Signaturnyckeln lever i processen. Vid omstart eller flera instanser faller förankringen och fälten kan formuleras om igen – M3:s sessionsdata gör den överflödig.