Files
boc/memory/auto-import-resultat.md
T

188 lines
6.1 KiB
Markdown
Raw Normal View History

# 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:<revolut_id>` — 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:<revolut_id>"`
- 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
```