RMA till fraktsedel och kreditering. Tillägg i helpdesk.
Modul-ID: return-flow-agent Version: 1.0.0 Voice: kapaciti (svensk B2B-ton) Modell: claude-haiku-4-5
Returflöde-agenten tar emot en strukturerad RMA-förfrågan (Return Merchandise Authorization) från en e-handel och producerar ett komplett returbeslut. Den bedömer förfrågan mot kundens returvillkor, räknar ut krediteringsbeloppet inklusive eventuell restocking-avgift, bestämmer om en fraktsedel ska skickas och vad den ska kosta, samt flaggar bedrägeri-signaler för manuell granskning. Output är dels ett maskinläsbart nyckel-värde-block för helpdesken och ERP-integrationen, dels ett färdigt kundsvar på svenska som handläggaren kan godkänna och skicka direkt.
Modulen är byggd som ett tillägg ovanpå befintliga helpdesk-system. Den ersätter inte agenten, den förbereder beslutet. Varje körning producerar en signerad audit-bundle med hash-chain enligt kapaciti-modules-standarden, så att beslutet kan auditeras i efterhand.
{
rma_request_id: "string",
customer: { id: "string", email: "string", name: "string?" },
order: {
order_id: "string",
purchased_at: "ISO-datum",
items: [{ sku, name, qty, price_sek, returnable: boolean }]
},
return_request: {
item_skus: ["sku"],
reason_code: "string",
reason_text: "string?",
condition: "oppen | oanvand | skadad | annat"
},
return_policy: {
days_window: 14,
restocking_fee_pct: 0,
free_shipping: boolean,
fraud_threshold_sek: 5000
},
prior_returns_count_90d: number
}
Validering sker i validateInput. Saknas något obligatoriskt fält kastas ett fel innan modellen anropas, så att felaktiga RMA-förfrågningar fångas tidigt och loggas i audit-chain som ett input_received-block med en följande error-output.
Modellen returnerar plain text i en fast struktur. Helpdesken parsar nycklarna och plockar ut värdena. SVARSUTKAST_TILL_KUND är 200-400 ord svensk prosa, redo att skickas efter mänskligt godkännande.
RMA_BESLUT: godkand
NEKAD_ANLEDNING: n/a
RETURBARA_ITEMS: TSH-BLK-L
KREDITERING_SEK: 299
KREDITERING_METOD: ursprunglig
FRAKTSEDEL_KRAVS: ja
FRAKTSEDEL_KOSTNAD_SEK: 0
BEDRAGERIRISK: lag
SVARSUTKAST_TILL_KUND:
<kundsvar>
INTERNA_NOTERINGAR:
- <bullets>
Returfönstret är hårt. Köp äldre än days_window kalenderdagar nekas, även vid annars giltigt skick. Artiklar med returnable=false nekas alltid. Vid skick skadad eller annat krävs konkret motivering i reason_text. Saknas motivering eller är den vag, godkänns returen partiellt och eskaleras till manuell granskning.
Restocking-avgiften dras av krediteringsbeloppet om varan inte är oanvand. Vid free_shipping=true är fraktsedeln gratis för kunden, annars bär kunden frakten. Krediteringsmetoden är som standard ursprungligt betalsätt. Presentkort används bara om kunden uttryckligen ber om det. Bankgiroöverföring används när det ursprungliga betalsättet är ogiltigt, till exempel ett utgånget kort.
Risksignaler kombineras till en samlad bedömning: lag, medel eller hog. Signaler:
fraud_threshold_sekannat med vag eller saknad motiveringskadad utan foto-bevisVid hog risk skrivs det in i både kundsvaret och de interna noteringarna att ärendet eskaleras till manuell granskning. Krediteringen pausas tills en handläggare godkänt.
Svenska standardtider för återbetalning anges alltid i kundsvaret. Kortbetalningar 3-5 bankdagar, Swish 1-3 bankdagar, bankgiro 5-10 bankdagar. Modellen får inte lova snabbare än så.
Varje körning bygger en audit-trail med blocken:
input_receivedcontext_loadedagent_calloutput_generatedvoice_validatedoutput_validatedaudit_sealedBuntan signeras med kapaciti-modules Ed25519-nyckel och kan verifieras med kapaciti-site/scripts/verify-audit-bundle.mjs eller lib/audit-chain.mjs::verifyBundle. Hash-kedjan är genesis-baserad, så att ett enda manipulerat block bryter verifieringen från och med det blocket.
Output passerar validateAgainstVoice("kapaciti"). Förbjudna ord: ensure, crucial, journey, delve, dive, navigate, sammanfattningsvis, TL;DR. Förbjudna tecken: tankstreck. Modellen instrueras att använda komma eller punkt istället.
import { ReturnFlowAgent } from "kapaciti-modules/modules/return-flow-agent.mjs";
const agent = new ReturnFlowAgent();
const res = await agent.run(rmaInput, { writeBundle: "./bundles/rma-001.json" });
if (res.error === "usage_cap") {
// Claude Code usage-cap, retry senare
}
console.log(res.output);
console.log("Audit-bundle:", res.bundle.run_id, "blocks:", res.bundle.entries.length);
Agenten ser inte foton. Om policyn kräver foto-bevis vid skadad måste integrationen själv kontrollera bilagor innan modulen anropas. Vid saknat foto bör reason_text antingen innehålla en hänvisning till foto-id eller flagga att foto saknas, vilket triggar bedrägeririsk-medel.
Modulen läser inte order-historik utöver prior_returns_count_90d. För djupare återköpsmönster kopplas modulen mot fraud-rules-agenten (modul 12) i ett senare steg.
Justera input-objektet eller använd starter-värdena. När du trycker på Kör modulen anropas samma agent som i produktion. Audit-kedjan byggs framför dig och hela sessionen signeras med Ed25519 i samma format som exempel-bundlen ovan.
JSON-payload som matchar modulens validateInput. Starter-värdena kommer från en riktig produktionskörning. Max 12 000 tecken.
Audit-kedjan visas här när scenariot körs
● Nyhetsbrev
En sammanfattning ungefär en gång i månaden. Vad förändrats i regelverket, vilka pilot-cases vi sett och vilka vendor-shifts som påverkar svenska bolag. Skickas av oss, inte av en automation som låtsas vara oss.