148 lines
4.2 KiB
Markdown
148 lines
4.2 KiB
Markdown
|
|
# CLAUDE.md — aamos-ledger
|
|||
|
|
|
|||
|
|
> AI-kontext för alla som jobbar i detta repo.
|
|||
|
|
|
|||
|
|
## Vad är detta?
|
|||
|
|
|
|||
|
|
**aamos-ledger** är LandveX AB:s bokföringsmotor — en komplett, egenutvecklad redovisningsmotor med:
|
|||
|
|
- Dubbel bokföring (debet = kredit, alltid)
|
|||
|
|
- BAS 2024 kontoplan (svensk standard)
|
|||
|
|
- SIE4-import och export
|
|||
|
|
- Multi-tenant isolering (tenant_id på varje rad)
|
|||
|
|
- Full audit trail (varje operation sparas i `ledger_audit_log`)
|
|||
|
|
- Hermes event-publicering (alla ekonomiska händelser)
|
|||
|
|
|
|||
|
|
**Port:** 3250
|
|||
|
|
**Tenant för LandveX AB:** `landvex`
|
|||
|
|
**Tjänstnamn (systemd):** `aamos-ledger`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Arkitektur
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
index.mjs — Express-app, alla API-routes
|
|||
|
|
schema.sql — PostgreSQL-schema (kör vid start via initSchema())
|
|||
|
|
hermes.mjs — Event-publishing till Hermes fabric
|
|||
|
|
sie4-export.mjs — SIE4-exportlogik
|
|||
|
|
Dockerfile.migrate — DB-migration container
|
|||
|
|
package.json — Node ESM-modul
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Databasschema (nyckelltabeller)
|
|||
|
|
|
|||
|
|
| Tabell | Beskrivning |
|
|||
|
|
|--------|------------|
|
|||
|
|
| `ledger_accounts` | Kontoplan (BAS 2024, IFRS, custom) |
|
|||
|
|
| `ledger_journal_entries` | Verifikationer (IMMUTABLE efter `posted`) |
|
|||
|
|
| `ledger_entry_lines` | Kontolinjer per verifikat (debet/kredit) |
|
|||
|
|
| `ledger_periods` | Perioder (`open`/`closed`/`locked`) |
|
|||
|
|
| `ledger_audit_log` | Audit trail för varje operation |
|
|||
|
|
| `ledger_reconciliation_items` | Kontoavstämning |
|
|||
|
|
| `ledger_period_close_tasks` | Periodeclose workflow |
|
|||
|
|
| `ledger_vat_returns` | Momsdeklarationer |
|
|||
|
|
| `ledger_fiscal_years` | Räkenskapsår |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## API-design
|
|||
|
|
|
|||
|
|
Alla endpoints kräver auth (JWT eller API-key). Tenant sätts via:
|
|||
|
|
- Header: `X-Tenant-ID: landvex`
|
|||
|
|
- Body: `{ "tenant_id": "landvex" }`
|
|||
|
|
|
|||
|
|
Exempel:
|
|||
|
|
```bash
|
|||
|
|
GET /api/accounts?tenant=landvex
|
|||
|
|
POST /api/journal-entries
|
|||
|
|
GET /api/periods?tenant=landvex
|
|||
|
|
POST /api/sie4/export
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Trace-propagering via headers:
|
|||
|
|
- `X-Trace-ID` — propageras genom hela systemet
|
|||
|
|
- `X-Correlation-ID` — korrelation per request-träd
|
|||
|
|
- `X-User-ID` — vem som triggar
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Designprinciper (OBRYTBARA)
|
|||
|
|
|
|||
|
|
1. **Determinism före AI** — alla bokföringsbeslut reproducerbara
|
|||
|
|
2. **Audit First** — VARJE operation genererar auditpost
|
|||
|
|
3. **Tenant Isolation** — kunddata korsas aldrig, `tenant_id` filtreras alltid
|
|||
|
|
4. **Hermes** — ekonomiska händelser publiceras via event fabric
|
|||
|
|
5. **Inga direktberoenden** — till andra moduler (utom Hermes via events)
|
|||
|
|
6. **IMMUTABLE journal** — poster ändras ALDRIG efter `status=posted`; annullering = ny `voided`-post
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Etapp 1 — Vertikal stängning (pågår juni 2026)
|
|||
|
|
|
|||
|
|
Checklista:
|
|||
|
|
- [x] Chart of Accounts (BAS 2024)
|
|||
|
|
- [x] Journal Entries med audit trail
|
|||
|
|
- [x] SIE4-import
|
|||
|
|
- [ ] **E1-004** Reconciliation Engine
|
|||
|
|
- [ ] **E1-005** Period Close Workflow
|
|||
|
|
- [ ] **E1-006** SIE4 Export (komplett)
|
|||
|
|
- [ ] Auth mot Identity Service
|
|||
|
|
- [ ] aamos-audit-engine restart-fix
|
|||
|
|
- [ ] **E1-008** Vertikal stängning acceptanstest
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## LandveX AB — Nuläge (per 2026-06-17)
|
|||
|
|
|
|||
|
|
| Mått | Värde |
|
|||
|
|
|------|-------|
|
|||
|
|
| Journalposter totalt | ~710 |
|
|||
|
|
| Alla poster | `posted` (inga drafts) |
|
|||
|
|
| Obalanserade poster | **0** |
|
|||
|
|
| Aktiva konton | 38 |
|
|||
|
|
| Revolut-poster på 1689 (oklassificerade) | ~545 / 966 685 kr |
|
|||
|
|
| Q1-moms förfallen | **202 787 kr** — OBETALD |
|
|||
|
|
| Leon-fordran | **212 922 kr** (konto 1610) |
|
|||
|
|
| Trygg Bil-avtal | 222 916 kr/mån t.o.m. mars 2027 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Ekonomisystem — Fortnox-klonen i Ouroboros
|
|||
|
|
|
|||
|
|
Live-URLer:
|
|||
|
|
- **Fortnox-klonen:** https://landvex.com/ouroboros/finance/
|
|||
|
|
- **Verifikatsvy:** https://landvex.com/ouroboros/finance/ledger.html
|
|||
|
|
- **CFO-dashboard:** https://landvex.com/public/cfo-dashboard.html
|
|||
|
|
|
|||
|
|
Filer på disk:
|
|||
|
|
- `/opt/amos/public/ouroboros/finance/index.html`
|
|||
|
|
- `/opt/amos/public/ouroboros/finance/ledger.html`
|
|||
|
|
- `/opt/amos/public/public/cfo-dashboard.html`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Kör lokalt
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /home/bernt/.openclaw/workspace/aamos-ledger
|
|||
|
|
# eller källkoden live på servern:
|
|||
|
|
sudo -n systemctl status aamos-ledger
|
|||
|
|
sudo -n journalctl -u aamos-ledger -n 50
|
|||
|
|
|
|||
|
|
# Health check
|
|||
|
|
curl -sk http://localhost:3250/health
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Bolagsinfo
|
|||
|
|
|
|||
|
|
- **Bolag:** LandveX AB (org.nr 559141-7042, f.d. Sommarliden Holding AB)
|
|||
|
|
- **Räkenskapsår:** 1 maj – 30 april
|
|||
|
|
- **FY 2025/2026:** avslutat, bokslut senast 31 okt 2026
|
|||
|
|
- **Revisor:** Andreas Vretblad, KPMG, +46 70 865 67 27
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
*Senast uppdaterad: 2026-06-17*
|