bae705aa97
- Add NFC ePassport roadmap (ICAO 9303, eIDAS) - Add TensorFlow.js edge face detection (BlazeFace) - Add structured audit logger (GDPR-compliant) - Risk scoring support Part of KYC Apple Native UX v1.1.0
188 lines
6.1 KiB
Markdown
188 lines
6.1 KiB
Markdown
# 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
|
|
```
|