# Auto-Import Resultat — LandveX AB Revolut Auto-Kategorisering **Datum:** 2026-06-17 **Utfört av:** Subagent (aamos-ledger-auto-cat) **Status:** ✅ KLART --- ## Sammanfattning Automatiskt nattligt bokföringssystem för Revolut-transaktioner är nu byggt och aktiverat. Systemet hämtar okategoriserade transaktioner från 1689 (observationskonto) och bokar dem till rätt kostnadskonton — helt automatiskt, varje natt 02:00 UTC. **Initial inventering (dry-run test):** - 923 transaktioner med 1689-konton hittades - 751 kan kategoriseras automatiskt - 172 kräver manuell granskning (oklara mottagare) - 0 fel --- ## Infrastruktur ### Befintlig bank-import - **Tjänst:** `aamos-bank-import` — **aktiv** på port 3253 - **Funktion:** Tar CSV från Swedbank/SEB/Handelsbanken/Nordea, skapar journal entries - **Revolut-pattern:** Transaktioner bokas med `source_type=bank`, `source_id=revolut_id`, utgifter går till 1689 (observationskonto) + krediterar Revolut-kontot (1932/1934/1935) ### Ledger API - **URL:** http://localhost:3250 - **Token:** `wavult-amos-internal-2026` (intern service-token) - **Tenant:** `landvex` - **Idempotency:** Nya auto-cat-poster skapas med `source_type=auto_cat` och `source_id=auto-cat:` — aldrig dubbletter --- ## Skapade filer ### `/opt/amos/services/aamos-ledger-auto-cat/auto-categorize.mjs` Kategoriseringsmotorn. Innehåller: - `CONFIG` — konfiguration (URL, token, tenant, log-dir) - `RULES` — kategoriseringsregler i prioritetsordning (8 regler + fallback) - `categorize(description)` — matchar beskrivning mot regler - `fetchUncategorizedRevolutEntries()` — hämtar alla bank-poster med 1689 som inte auto-cat:ats - `postAutoCatEntry(entry, log)` — skapar och kontera omföringspost (draft→posted) - `createLogger(date)` — loggare till /opt/amos/logs/auto-cat-YYYY-MM-DD.log - `run(opts)` — huvudfunktion, returnerar stats ### `/opt/amos/services/aamos-ledger-auto-cat/run.mjs` Startup-script för manuell körning. Körbart direkt: ```bash cd /opt/amos/services/aamos-ledger-auto-cat # Normal körning TENANT_ID=landvex node run.mjs # Dry-run (ingen faktisk bokning) DRY_RUN=true TENANT_ID=landvex node run.mjs # Hjälp node run.mjs --help ``` --- ## Kategoriseringsregler | Prioritet | Regex-match | Konto | Kategori | |-----------|-------------|-------|----------| | 1 | anthropic, claude, openai, aws, amazon, google, lovable, supabase, bunnycdn, gandi, 46elks, 1office, transcriptapi, duix, roamless | **6230** | IT/molntjänst | | 2 | grab.com, grabcar, thai airways, 2c2p\*tha, air\*asia, booking.com, flights, didi taxi, didi\*cab, aimo park, easypark | **5801** | Resekostnader affärsresa | | 3 | cafe del mar, the zula, al yemen, thaiitalian, sugar phuket, emerald isle, villa market, big c, lotus, 7-11, tops, mozza | **6072** | Representation ej avdragsgill | | 4 | alipay, alp\* | **6071** | Representation avdragsgill | | 5 | avgift\*nordea, stripe\*fee, revolut\*fee | **6570** | Bankkostnader | | 6 | dhl, postnord, fedex, ups | **5800** | Frakt och porto | | 7 | airbnb | **5800** | Resekostnader logi | | 8 | .\* (fallback) | **1689** | Observationskonto — kräver granskning | --- ## Bokföringslogik ### Utgifter (1689 hade debit — typ CARD_PAYMENT) ``` Debet: 6230/5801/6072/etc (kostnadskonto) X.XX SEK Kredit: 1689 (observationskonto rensat) X.XX SEK ``` ### Återbetalningar (1689 hade kredit — typ CARD_REFUND) ``` Debet: 1689 (observationskonto rensat) X.XX SEK Kredit: 6230/etc (minskar kostnaden) X.XX SEK ``` ### Idempotens - Varje auto-cat-post får `source_id = "auto-cat:"` - Innan varje körning hämtas alla befintliga `source_type=auto_cat` poster - Revolut-transaktioner som redan har auto-cat hoppas över automatiskt - Kan köras hur många gånger som helst utan dubbletter --- ## Cron-jobb **ID:** `61fae14e-226c-4627-9a65-261b0e3d7a91` **Fil:** `/home/bernt/.openclaw/cron/jobs.json` **Schema:** `0 2 * * *` UTC (varje natt 02:00 UTC) **Enabled:** `true` **Delivery:** Telegram → 8783557028 (announce) **Timeout:** 300 sekunder Jobbet kör: ```bash cd /opt/amos/services/aamos-ledger-auto-cat && TENANT_ID=landvex node run.mjs ``` och rapporterar sammanfattning till Telegram. --- ## Loggar Varje körning skriver till: ``` /opt/amos/logs/auto-cat-YYYY-MM-DD.log ``` Format: ``` [2026-06-17T02:00:01.234Z] AAMOS Ledger Auto-Cat startar (tenant: landvex) [2026-06-17T02:00:01.456Z] Hämtar okategoriserade Revolut-transaktioner... [2026-06-17T02:00:01.890Z] Hittade 42 transaktioner att kategorisera [2026-06-17T02:00:02.100Z] Behandlar: [REVOLUT abc123] CARD_PAYMENT: Anthropic... [2026-06-17T02:00:02.150Z] ✓ Bokfört ver#6600: IT/molntjänst (6230) — 1190.79 SEK ... [2026-06-17T02:00:05.000Z] SAMMANFATTNING 2026-06-17: [2026-06-17T02:00:05.000Z] Totalt hittade: 42 [2026-06-17T02:00:05.000Z] Kategoriserade: 38 [2026-06-17T02:00:05.000Z] Skippade (1689/okänd): 4 [2026-06-17T02:00:05.000Z] Fel: 0 ``` --- ## Tekniska detaljer ### Varför inte via aamos-bank-import? Bank-import-tjänsten hanterar CSV-filer (Swedbank, SEB, etc). Revolut-data läggs in direkt som `source_type=bank` poster av `agent:revolut-full`. Auto-cat-tjänsten arbetar *efter* importsteget — det är en andra pass som klassificerar observationskonto-poster. ### Revolut-konton i ledger - `1932` = Revolut SEK Main - `1934` = Revolut EUR Main - `1935` = Revolut USD Main ### Dubbelbokföring Alla poster valideras av aamos-ledger (debet = kredit) innan de sparas. Systemet skapar draft → postar omedelbart (draft→posted i samma körning). --- ## Testresultat (dry-run 2026-06-17) ``` Totalt hittade: 923 Kategoriserade (dry-run): 751 Skippade (1689/okänd): 172 Fel: 0 Körtid: 0.3s ``` De 172 skippade är transaktioner utan matchning i regellistan (okända mottagare, privata uttag, etc) — dessa förblir på 1689 och kräver manuell granskning. --- ## Nästa körning Nästa automatiska körning: **Imorgon natt 02:00 UTC** För att köra manuellt nu: ```bash cd /opt/amos/services/aamos-ledger-auto-cat && TENANT_ID=landvex node run.mjs ```