Kvitton in, verifikat ut till Fortnox eller Visma. 8 sek per faktura.
Modul-ID: bookkeeping-agent Version: 1.0.0 Voice: kapaciti (svensk B2B-ton) Modell: claude-haiku-4-5
Bokforingsagenten tar emot ett kvitto eller en faktura, antingen som ren OCR-text eller med forparsade falt fran ett upstream-system, och producerar ett komplett konteringsforslag enligt BAS-kontoplanen. Den extraherar leverantor, belopp, moms och datum, foreslar verifikatsrader pa de korrekta BAS-kontona, raknar fram en JSON-payload redo att skickas till Fortnox eller Visma, och flaggar anomalier som dubbletter, suspekta leverantorer och felberaknad moms. Varje verifikat referar till Bokforingslagen 1999:1078 kapitel 7 paragraf 2, sju ars arkiveringsplikt fran rakenskapsarets slut, sa att kedjan fran kalldokument till bokfort verifikat ar komplett vid revision.
Modulen ar byggd som ett tillagg ovanpa upphandlade ekonomisystem. Den ersatter inte redovisningskonsulten, den forbereder underlaget och gor 80% av jobbet pa atta sekunder per faktura. Varje korning producerar en signerad audit-bundle med hash-chain enligt kapaciti-modules-standarden.
{
document_id: "string",
document_type: "kvitto | faktura | kreditfaktura | annat",
source: "ocr | email-attachment | manual-upload | supplier-api",
raw_text: "string",
metadata: { received_at, file_size_bytes, mime_type },
detected_fields: { vendor_name, vendor_org_nr, invoice_number, invoice_date, due_date, total_amount_sek, vat_amount_sek, currency },
company_context: { org_nr, fiscal_year_start, accounting_system: "fortnox | visma | bjorn-lunden" }
}
Validering sker i validateInput. Saknas raw_text, company_context eller om document_type ligger utanfor whitelistan kastas fel innan modellen anropas. Forparsade falt i detected_fields ar optionella men anvands aktivt om de finns, agenten verifierar dem mot raw_text och flaggar avvikelser.
Modellen returnerar plain text i fast struktur. Finance-integrationen parsar nycklarna och kan kopiera EXPORT_FORMAT_FORTNOX direkt till en POST-request.
DOKUMENTBEDOMNING: validt | osakert | ogiltigt
ANLEDNING: <kort text>
EXTRAHERAT:
- LEVERANTOR, LEVERANTOR_ORGNR, FAKTURA_NUMMER, FAKTURA_DATUM, FORFALLODATUM
- BELOPP_INKL_MOMS_SEK, MOMS_SEK, MOMS_PROCENT, VALUTA
KONTERINGSFORSLAG:
- DEBET: <konto> | <belopp> | <kommentar>
- KREDIT: <konto> | <belopp> | <kommentar>
VERIFIKATIONS_TYP: leverantorsfaktura | kontantkvitto | kreditfaktura | utlagg
PERIODISERING_FORESLAG: ja-period-X | nej
ANOMALIER:
- <0-5 flaggor>
ESKALERA_TILL_REVISOR: ja | nej
ESKALERINGS_ANLEDNING: <text>
EXPORT_FORMAT_FORTNOX:
{ ... JSON ... }
BOKFORINGSLAGEN_REFERENS:
<retention-motivering>
| Konto | Klass | Anvandning | |-------|-------|-----------| | 1510 | Tillgang | Kundfordringar | | 1630 | Tillgang | Skattekonto Skatteverket | | 1930 | Tillgang | Foretagskonto bank | | 2440 | Skuld | Leverantorsskulder | | 2641 | Skuld | Ingaende moms 25% | | 2642 | Skuld | Ingaende moms 12% | | 2643 | Skuld | Ingaende moms 6% | | 2710 | Skuld | Personalens kallskatt | | 2731 | Skuld | Sociala avgifter | | 3001 | Intakt | Forsaljning 25% inom Sverige | | 3041 | Intakt | Forsaljning 12% inom Sverige | | 4010 | Kostnad | Varuinkop inom Sverige | | 4056 | Kostnad | Inkop tjanster tredje land | | 4515 | Kostnad | Inkop tjanster EU omvand skattskyldighet | | 5410 | Kostnad | Forbrukningsmaterial | | 5611 | Kostnad | Drivmedel | | 5800 | Kostnad | Reskostnader | | 6212 | Kostnad | Mjukvara abonnemang | | 6230 | Kostnad | Telefon och internet | | 6552 | Kostnad | Konsultarvoden | | 6991 | Kostnad | Ovriga externa kostnader | | 7610 | Kostnad | Utbildning personal |
Vid svensk faktura kontrollerar agenten att den extraherade momsen stammer mot total inkl moms. 25% moms ger moms = total times 0.20. 12% ger 0.107143. 6% ger 0.056604. Avvikelse over 5% flaggas som ANOMALI och dokumentet markeras som osakert.
Vid utlandsk leverantor med omvand skattskyldighet bokas hela beloppet pa 4515 (EU-tjanster) eller 4056 (tredje land). Ingen ingaende moms ska bokas. Agenten kommenterar detta i konteringen och i ANOMALIER om kallan ar otydlig.
Fem mallar agenten letar efter: duplikatkvitto (samma leverantor, datum och belopp inom 30 dagar), suspekt leverantor (saknar orgnr och webbsida), onormalt belopp (enstaka post over 50000 SEK utan kontext), saknad moms pa svensk faktura, felberaknad moms (avvikelse over 5% mellan detected_fields.vat_amount_sek och beraknat). Vid tva eller fler anomalier eskalerar agenten till revisor.
Varje verifikat och underlag sparas i sju ar fran rakenskapsarets slut enligt Bokforingslagen 1999:1078 kapitel 7 paragraf 2. Modulen lagger in denna referens i varje output med motivering kopplad till dokumenttypen och rakenskapsaret. Audit-bundlen i sig ar en parallell retention-mekanism, signerad och hash-kedjad, sa att kopplingen kalldokument till verifikat till revisor-attest gar att verifiera matematiskt aven flera ar efter handelsen.
Varje korning bygger en audit-trail med blocken input_received, context_loaded, agent_call, output_generated, voice_validated, output_validated, audit_sealed. Bundlen signeras med kapaciti-modules Ed25519-nyckel och verifieras med kapaciti-site/scripts/verify-audit-bundle.mjs eller lib/audit-chain.mjs::verifyBundle. Hash-kedjan ar genesis-baserad sa att ett enda manipulerat block bryter verifieringen fran och med det blocket.
Output passerar validateAgainstVoice("kapaciti"). Forbjudna ord och tankstreck spelar mindre roll i den maskinlasbara delen men granskas anda for SVARSUTKAST och kommentarer.
import { BookkeepingAgent } from "kapaciti-modules/modules/bookkeeping-agent.mjs";
const agent = new BookkeepingAgent();
const res = await agent.run(invoiceInput, { writeBundle: "./bundles/inv-anthropic-may.json" });
if (res.error === "usage_cap") {
// retry senare, claude CLI har natt rate-limit
}
console.log(res.output);
console.log("Audit-bundle:", res.bundle.run_id, "blocks:", res.bundle.entries.length);
Agenten ser inte PDF-bilagor direkt. OCR-laget maste leverera raw_text och eventuellt forparsade falt. Agenten ar konservativ vid utlandsk valuta och flaggar alltid vaxlingsbehov till manuell granskning. Periodiseringsforslag (PERIODISERING_FORESLAG) ar idag enkel logik baserad pa beloppets storlek och tjanstetypen, mer avancerad periodisering kraver kontextfran tidigare verifikat och kommer i v1.1.
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.