# Fix #4 — Finance Services Konsolidering — Analys & Åtgärder **Datum:** 2026-06-05 **Utfört av:** Loke (subagent) ## Analys: Routes & Roller ### ouroboros-finance (Node.js, port 3202) - **Roll:** Affärsdatalager + persistering (PostgreSQL) - **DB-tabeller:** `prexo_accounts`, `prexo_transactions`, `prexo_invoices`, `prexo_budget`, `prexo_journal_entries`, `prexo_journal_lines` - **Unika routes (ej i financial-engine):** - `POST /api/accounts` — skapa konto (DB) - `GET/POST /api/transactions` — läs/skriv transaktioner (DB) - `DELETE /api/transactions/:id` — void transaktion (DB) - `GET /api/reports/pl` — resultaträkning (DB-beräknad) - `GET /api/reports/balance` — balansräkning (DB-beräknad) - `GET/POST/PUT /api/budget` — budget (DB) - `GET/POST /api/invoices` + status/approve/reject — fakturor (DB) - `GET /api/stats` — stats (DB) - `GET /api/dashboard` — dashboard (DB) - `GET/POST /api/contracts` — kontrakt (DB) - `POST /api/finance/journal-entries` — dubbel bokföring med validering (DB, transaktionell) - `GET /api/finance/trial-balance` — råbalans (DB) - `GET /api/finance/sie-export` — SIE4-export (DB) ### aamos-financial-engine (Rust, port 3203) - **Roll:** Beräkningsmotor — stateless, ingen DB - **Typ:** In-memory / beräknad data (mock-baserad) - **Unika routes (ej i ouroboros-finance):** - `GET /kpis` — KPI-beräkning (MRR, ARR, EBITDA, LTV/CAC, etc.) - `GET /cashflow` — cashflöde med kategorier - `GET /ledger` + `POST /ledger` — ledger (in-memory) - `GET /tax-periods` — skatteperioder (mock) - `GET /banking/live` — banklive-data (forward till AMOS banking + mock fallback) - `GET /summary` — exec-summary - `POST /payroll/calculate` — lönekalkyl (stateless, exakt aritmetik i öre) - `POST /moms/calculate` — momskalkyl (stateless, exakt aritmetik i öre) ### Överlappande routes (ej duplicerade — OLIKA roller) | Route | ouroboros-finance | financial-engine | |-------|-------------------|------------------| | `/accounts` | DB, CRUD | Hardkodad mock (bankonton) | | `/balance` | DB rapport (konton+transaktioner) | Statisk mock (balansräkning) | | `/transactions` | DB, filtrerbar | POST only, in-memory | | `/invoices` | DB, full CRUD | GET only, hardkodad mock | **Slutsats: INTE duplicering — komplementära roller.** ## Namnbyten gjorda ### ouroboros-finance/index.mjs | Var | Gammalt | Nytt | |-----|---------|------| | Header | `PREXO Finance Microservice` | `AAMOS Finance Microservice` | | PORT env | `PREXO_FINANCE_PORT` | `AAMOS_FINANCE_PORT` | | JWT fallback | `'prexo-secret'` | `'aamos-secret'` | | Rate limiter key | `'prexo-finance'` | `'aamos-finance'` | | Health response | `service: 'prexo-finance'` | `service: 'aamos-finance'` | | Webhook router | `webhookRouter('prexo-finance')` | `webhookRouter('aamos-finance')` | | Webhook triggers | `triggerWebhooks('prexo-finance', ...)` | `triggerWebhooks('aamos-finance', ...)` | | Start log | `[PREXO Finance]` | `[AAMOS Finance]` | | DB table names | `prexo_accounts`, `prexo_transactions`, etc. | **Oförändrade** (faktiska DB-tabellnamn) | ### systemd ouroboros-finance.service - `Description=Ouroboros Finance Service` → `Description=AAMOS Finance Service` ### financial-engine/src/main.rs - Lade till arkitekturkommentar i toppen (ASCII-box) som klargör: - Stateless beräkningsmotor - Ingen DB-koppling - Datapersistering → ouroboros-finance (:3202) - Beräkningar/KPIer → denna service (:3203) ## Status **Kräver root-åtgärd** — filer ägda av root: ``` sudo bash /home/bernt/.openclaw/workspace/nginx-pending/apply-finance-rename.sh ``` Skriptet kopierar: - `/tmp/ouroboros-finance-index.mjs` → `/opt/amos/services/ouroboros-finance/index.mjs` - `/tmp/financial-engine-main.rs` → `/opt/amos/rust/financial-engine/src/main.rs` - Uppdaterar systemd unit description + kör `daemon-reload` ## Ingen konsolidering genomfördes Services är komplementära med tydligt separerade roller: - **ouroboros-finance** = datapersistering, bokföring, SIE, fakturor, budget - **aamos-financial-engine** = beräkningsmotor, KPIer, moms, lönekalkyl (stateless) Att slå ihop dem skulle inte ge vinst — de tjänar olika klienter och har olika egenskaper (DB vs stateless).