Files
boc/LEDGER_ARCHITECTURE.md
T
Bernt bae705aa97 ARCHITECTURE: NFC roadmap, edge AI, audit logging
- 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
2026-06-29 16:24:48 +00:00

6.8 KiB
Raw Blame History

LEDGER_ARCHITECTURE.md — Hållbar struktur för LandveX ekonomisystem

Beslutad: 2026-06-17

Nuläge (vad som faktiskt finns och fungerar)

Fungerar

  • aamos-ledger kör på port 3250, 1 092 journalposter, audit trail, multi-tenant
  • Reconciliation Engine (E1-004) — API finns, POST-routes registrerade
  • Period Close Workflow (E1-005) — state machine open→review→approved→closed
  • SIE4 Export (E1-006) — endpoint finns
  • BAS 2024 kontoplan, 38 konton aktiva
  • Fortnox-klonen UI på https://landvex.com/ouroboros/finance/

⚠️ Trasigt/ofullständigt

  • trial-balance returnerar balanced: null (aggregering bruten)
  • Reconciliation saknar GET /sessions (lista)
  • Ingen period är stängd — alla 6 perioder open
  • 1689 Observationskonto: 966k oklassificerat
  • Auth mot Identity Service inte kopplad
  • Diff D:5 803 792 vs C:5 928 838 = 125 046 kr obalans

🔴 Affärskritiskt

  • Q1-moms 202 787 kr OBETALD
  • Leon-fordran 212 922 kr
  • Konto 2990 Omföringskonto: 244 899 kr residual — betyder att omföringar inte är nollade

Arkitekturen — tre lager

┌─────────────────────────────────────────────────────────────────┐
│  LAGER 3 — AUTOMATION & API                                      │
│  Webhooks · n8n-flows · Skatteverket · Bank-API · Stripe        │
├─────────────────────────────────────────────────────────────────┤
│  LAGER 2 — INTELLIGENCE & PUSH                                   │
│  Checkpoint-motor · Nudge-engine · Task-lista · Dashboards       │
├─────────────────────────────────────────────────────────────────┤
│  LAGER 1 — KÄRNAN (aamos-ledger)                                 │
│  Journal · Kontoplan · Perioder · Reconciliation · SIE4          │
└─────────────────────────────────────────────────────────────────┘

Principen: Lager 1 måste vara komplett och stabil innan Lager 2 byggs. Lager 3 kopplas på när Lager 2 fungerar.


Lager 1 — Fixa kärnan (denna sprint)

L1-FIX-001: trial-balance aggregering

trial-balance returnerar balanced: null. Buggen: totalDebit/totalCredit beräknas inte server-side. Fix: Summera i route-hanteraren.

L1-FIX-002: Reconciliation GET /sessions

Saknar GET /api/ledger/reconciliation/sessions — listan syns aldrig. Fix: Lägg till GET-route.

L1-FIX-003: Stäng perioder 2026-01 t.o.m. 2026-05

Alla 6 perioder är open. En stängd period = oföränderlig historik. Workflow: submit-review → approve → close Förutsättning: trial-balance måste vara balanserad per period.

L1-FIX-004: Rensa konto 2990 (Omföringskonto)

Residual 244 899 kr. Det ska alltid vara 0 — det är ett transitkonto. Fix: Identifiera och bokför rättelseposter.

L1-FIX-005: Förklara den -125 046 kr differensen

D:5 803 792 vs C:5 928 838. Kan vara FX-poster, ej bokförda kostnader, eller periodfel. Fix: Spåra källan, bokför rättelse.


Lager 2 — Intelligence & Push (nästa sprint)

L2-001: Checkpoint-motor (det som pushar dig)

En ledger_checkpoints-tabell med regler som körs automatiskt:

Checkpoint                 | Trigger              | Åtgärd
---------------------------|----------------------|---------------------------
Öppen period > 30 dagar    | Nightly cron         | Push: "2026-03 ej stängd"
Konto 1689 > 0             | On journal save      | Push: "Oklassificerade poster"
Moms förfallen             | Kalenderbaserad      | Push: "Q1-moms OBETALD"
Fordran > 60 dagar         | Nightly cron         | Push: "Leon-fordran 92 dagar"
Debet ≠ Kredit i period    | On journal save      | Blockera post
2990 > 0 vid månadsslut    | Period close trigger | Push: "Omföringskonto ej nollat"

L2-002: Task-lista med status

Varje checkpoint genererar en task. Tasks har:

  • id, type, title, due_date, status (open/snoozed/done), amount, period
  • API: GET /api/ledger/tasks → lista med prioritet
  • UI: Tasks-panel i Fortnox-klonen

L2-003: Dashboard-siffror rätt

Koppla trial-balance till P&L och balansräkning korrekt:

  • Intäkter: klass 3 (credit-saldo)
  • Kostnader: klass 5-7 (debet-saldo)
  • Resultat: intäkter kostnader
  • Balansräkning: tillgångar vs skulder+eget kapital

Lager 3 — Automationer & API (framtida)

Prioritetsordning

  1. Momsdeklaration API (Skatteverket eSkattedeklaration)

    • Trigger: Period close av kvartalets sista period
    • Flow: Beräkna moms → skapa XML → POST till Skatteverket
  2. AGI-fil automatisk (Arbetsgivardeklaration)

    • Trigger: Lönekörning bokförd
    • Flow: Summera löneposter → generera AGI-fil → skicka till Skatteverket
  3. Bank-synk automatisk (Nordea Open Banking / Revolut Webhooks)

    • Trigger: Ny banktransaktion
    • Flow: Importera → auto-kategorisera → skapa draft → notify
  4. SIE4 till revisor automatisk


Stängningsceremonin — hur man stänger böckerna

Varje månad (när Lager 1+2 är klara):

1. Checkpoint-lista = tom (alla poster kategoriserade)
2. Konto 1689 = 0
3. Konto 2990 = 0  
4. D = C (trial-balance balanced: true)
5. Kör: POST /api/ledger/periods/2026-05/submit-review
6. Kör: POST /api/ledger/periods/2026-05/approve
7. Kör: POST /api/ledger/periods/2026-05/close
8. → Period låst. Kan ej ändras.

Kvartalsvis tillägg:

  • Beräkna momsunderlag (konto 2611, 2645)
  • Deklarera och betala moms

Årsvis (FY 2025/2026, deadline 31 okt 2026):

  • Alla 12 perioder stängda
  • Årsredovisning = P&L + Balansräkning från trial-balance
  • SIE4-export till Andreas Vretblom / KPMG

Sprint-plan

Sprint 1 (nu — denna session)

  • L1-FIX-001: trial-balance aggregering
  • L1-FIX-002: Reconciliation GET /sessions
  • L1-FIX-003: Stäng 2026-01 → 2026-03 (de klara perioderna)
  • L1-FIX-004: Diagnostik på 2990 och -125k differensen

Sprint 2

  • L1-FIX-005: Rensa 1689 (auto-kategorisering av Revolut-poster)
  • L2-001: Checkpoint-motor (5 basregler)
  • L2-002: Tasks-API + Tasks-panel i UI

Sprint 3

  • L2-003: Dashboard P&L och balansräkning korrekt
  • L3-001: Momsdeklaration-flow
  • L3-004: SIE4 automatisk till revisor vid period-close

Bernt äger arkitekturen. Erik godkänner.