Modulkatalog/quote-bot
Modul, Ekonomi och sälj

Offert-bot

Lead till prissatt PDF-offert inom marginalfönster på 19 min.

16/16
Tester godkända
7
Block per bundle
Ed25519
Signering
Produktion
Status
Ladda ner exempel-bundleVerifiera bundleBoka demo
Vad modulen gör

quote-bot

Offert-bot for svensk B2B-forsaljning. Modulen tar emot en kvalificerad lead tillsammans med saljteamets prisregler, applicerar volymrabatt och storlekskategori-modifierare, och returnerar en strukturerad offert pa svenska redo att renderas som PDF.

Modul-ID ar quote-bot. Version 1.0.0. Voice-profil kapaciti. Default modell claude-haiku-4-5. Modulen extender BaseModule och deltar i samma signerade audit-kedja som ovriga moduler i kapaciti-modules.

Affarsfall

Tiden fran inkommen lead till levererad offert ar den enskilt viktigaste mekaniska parametern i en B2B-saljpipeline. Pilotmatningar visar att den genomsnittliga svenska SME-saljaren spenderar mellan 90 och 150 minuter pa att producera en forsta offert, varav stora delar gar at till att leta prisuppgifter, kontrollera marginal och formatera dokumentet. Den ledtiden forlanger sig genom hela funneln och pressar konverteringsgraden.

Mal-cykeltiden for quote-bot ar 19 minuter fran kvalificerad lead till signerad PDF-offert i kundens inkorg. Modulens egen runtime ar typiskt under 20 sekunder. Resterande tid gar at till CRM-enrichment, account ownerns granskning av intern notering, och rendering till PDF. Det ger saljaren tid att fokusera pa relationen istallet for pa formatering.

Designprincipen ar att prissattning ska vara deterministisk. Modellen far aldrig hitta pa egna priser eller rabattvillkor. All matematik kommer fran inputens prisregler, och varje siffra i SUMMERING-blocket ar transparent spar­bar bakat till radsumma, rabatt och storlekskategori-modifierare.

Indata

Inputen ar ett strukturerat objekt med sex delar.

{
  lead_id: "lead-2026-05-19-031",
  customer: {
    company_name: "Skellefteå Redovisning AB",
    org_nr: "556789-1234",
    contact: { name: "Maria Johansson", email: "maria@..", phone: "+46.." },
    industry: "Redovisning och revision",
    size_category: "small"
  },
  request: {
    products_or_services: [
      { id: "helpdesk-pilot", name: "..", quantity: 1, unit: "pilot", custom_specs: ".." }
    ],
    requested_delivery: "2026-06-15",
    additional_requirements: "GDPR-DPA innan kontraktsstart"
  },
  pricing_rules: {
    base_unit_prices: { "helpdesk-pilot": { unit_price_sek: 24000, currency: "SEK" } },
    volume_discounts: [{ threshold_qty: 6, discount_pct: 5 }, { threshold_qty: 12, discount_pct: 10 }],
    size_category_modifiers: { micro: -10, small: 0, medium: 5, large: 10 },
    payment_terms_options: ["30 dagar netto", "delbetalning 3 manader", "forskott 50%"],
    validity_days: 30,
    vat_pct: 25
  },
  account_owner: { name: "..", email: "..", phone: ".." },
  brand: { name: "Kapaciti", voice_profile_id: "kapaciti" }
}

size_category har fyra niva: micro (under 10 anstallda), small (10-50), medium (50-250), large (over 250). Storlekstillagget pa subtotal efter radrabatter foljer normalt micro -10, small 0, medium +5, large +10 procent.

volume_discounts ar ej staplad. Modulen valjer den hogsta threshold_qty som en rads quantity uppnar och applicerar den procenten.

payment_terms_options ska vara minst en strang. Modulen valjer ett default baserat pa size_category men visar alla alternativ for kunden.

Utdata

Utdata ar text i strikt faltformat. Frontend eller PDF-renderaren parsar den direkt med QuoteBotModule.parse(output) eller med egna regex per falt. Sektioner i ordning:

OFFERT_ID: OFF-YYYY-NNNN
DATUM: YYYY-MM-DD
GILTIG_TILL: YYYY-MM-DD

KUND:
- FORETAG: ..
- ORGNR: ..
- KONTAKT: ..

POSTER:
- ARTIKEL: <id> | <namn> | <qty unit> | a-pris .. SEK | rad-summa .. SEK

SUMMERING:
- DELSUMMA_EX_MOMS_SEK: ..
- RABATT_PCT: ..
- RABATT_SEK: ..
- STORLEKSTILLAGG_PCT: ..
- NETTO_EX_MOMS_SEK: ..
- MOMS_25PCT_SEK: ..
- TOTAL_INKL_MOMS_SEK: ..

LEVERANSVILLKOR: <2-3 meningar>
BETALNINGSVILLKOR: <valt alternativ + ovriga>
OFFERTENS_GILTIGHET: <2 meningar>
VILLKOR_OCH_FORUTSATTNINGAR: <3-5 bullets>
NASTA_STEG: <2-3 meningar>
KONTAKT_VID_FRAGOR: <account owner>
INTERN_NOTERING: <forhandlingsutrymme + uppfoljning>

OFFERT_ID ar deterministiskt genererat fran lead_id genom en stabil hash. Det innebar att samma lead alltid ger samma offert-ID, vilket forenklar CRM-deduplicering och dispatch-spar.

INTERN_NOTERING ar enbart for saljteamet. Den filtreras bort i PDF-rendern men ligger kvar i audit-bundlen for senare upplyftning.

Prismatematik

Modellen ar instruerad att folja exakt foljande algoritm:

  1. Per rad: rad-summa = a-pris * quantity
  2. Per rad: leta upp hogsta threshold_qty som quantity uppnar. Om

tillamplig, applicera discount_pct pa radsumman.

  1. DELSUMMA_EX_MOMS_SEK = sum(rad-summa)
  2. RABATT_SEK = sum(rad-rabatter)
  3. STORLEKSTILLAGG = (DELSUMMA - RABATT_SEK) * size_modifier_pct / 100
  4. NETTO_EX_MOMS_SEK = DELSUMMA - RABATT_SEK + STORLEKSTILLAGG
  5. MOMS = NETTO * vat_pct / 100
  6. TOTAL_INKL_MOMS_SEK = NETTO + MOMS

Avrundning sker till hela kronor, halvor uppat.

validateOutput() extraherar siffrorna med regex och kontrollerar tva saker: att NETTO + MOMS ungefar = TOTAL (inom 2 kr) och att NETTO ligger inom +/- 50 procent av DELSUMMA - RABATT_SEK (rimlighetsfonster for storlekstillagg). Vid avvikelse adderas en math_inconsistent eller math_out_of_range violation till bundlen sa account ownern kan rejekta offerten innan utskick.

Betalningsvillkor

Default per size_category:

  • micro och small: 30 dagar netto
  • medium och large: delbetalning 3 manader

Alla tre alternativ visas alltid i BETALNINGSVILLKOR-blocket. Det ger kunden flexibilitet och saljaren en oppning att forhandla.

Audit-bundle

Varje korning producerar en signerad bundle med foljande block:

  1. input_received (leadens hela payload)
  2. context_loaded (tom i denna modul)
  3. agent_call (modell, system_prompt_length, voice)
  4. output_generated (full output-text)
  5. voice_validated (banned words, banned chars)
  6. output_validated (faltkontroll, math-sanity)
  7. audit_sealed (status, antal block)

Bundlen signeras med samma Ed25519-nyckel som ovriga moduler. Den kan verifieras med scripts/verify-audit-bundle.mjs eller via verifyBundle() fran lib/audit-chain.mjs.

Anrop

import { QuoteBotModule } from "kapaciti-modules/modules/quote-bot.mjs";

const mod = new QuoteBotModule();
const result = await mod.run(input, {
  writeBundle: "/path/to/quotes/OFF-2026-0531.bundle.json"
});

console.log(result.output);
const parsed = QuoteBotModule.parse(result.output);
console.log(parsed.total_inkl_moms_sek);

Begransningar

  • Modulen rakar ut for valutakonvertering. Allt antas vara i SEK enligt

pricing_rules.

  • Volymrabatt galler per rad. Cross-product-rabatt (t ex "kop A och B sa

far du 10% pa hela ordern") stods inte i v1.0.

  • Bunch-rabatter och campaign codes hanteras separat. v1.0 har inget

promo-fall.

  • Modellen kan vid sallsynta tillfallen producera prosa-versioner av

SUMMERING-blocket istallet for strikt faltformat. validateOutput fangar det och returnerar violations som account owner kan agera pa.

Nasta steg (v1.1)

Planerat for nasta minor:

  • Stod for multi-valuta (SEK, EUR, USD) med valutakurs i bundlen.
  • Cross-product-rabatter (bundling) via en bundle_rules-array.
  • Hard reject vid validateOutput-fail istallet for warn-only.
  • PDF-renderer direkt i modulen som genererar OFF-YYYY-NNNN.pdf pa skiva.
  • Approval-gate-integration som postar offert till Discord-kanal innan

utskick till kund.

Prova live

Kör offert-bot i webbläsaren.

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.

Input (quote-bot schema)

JSON-payload som matchar modulens validateInput. Starter-värdena kommer från en riktig produktionskörning. Max 12 000 tecken.

Tecken: 2 142 / 12 000
Audit-kedja, live

Audit-kedjan visas här när scenariot körs

● Nyhetsbrev

EU AI Act, sandbox-status och svensk AI-infrastruktur.

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.

Uppgifterna används endast för nyhetsbrevet. Inga utskick utöver det utan separat samtycke. Avregistrera när som helst via länk i mailet.