Blueprint — Ekonomi-Nav

Panda Accounting

Komplett AI-styrt ekonomisystem för fåmansbolag. Fortnox som hub, agenter som motor, k3s som runtime.

ID: ACCT-2026-001 Version: 1.0 Status: Draft — för diskussion Owner: Simon + Kristian Datum: 2026-03-31
Kategori Ekonomi & Automation Multi-bolag
Mognad v2 Spec klar Slice 1 definierad
Målbild Tid → Bokförd intäkt Fullt automatiserad kedja

1. Vision & Scope

Panda Accounting är ett automatiserat ekonomi-nav för fåmansbolag. Fortnox är datahub, AI-agenter hanterar flöden, k3s isolerar bolag från varandra.

Vad systemet gör

Automatiserade flöden

  • Tid → Fakturagrund → Faktura → Betalning → Bokförd intäkt
  • Kvitto/faktura in → OCR-tolkning → Kontering → Bokföring
  • Bankimport → Matchning → Avstämning
  • Lön → AGI → Skattekonto
  • Moms-sammanställning → Deklaration
  • Årsredovisning → Bokslut
Scope-gränser

Vad det inte är

  • Inte full ERP (inget lager, inget CRM)
  • Inte moms utomlands (initialt)
  • Inte personaladministration (bara lönekost)
  • Fokus: Fåmansbolag med 1–3 ägare
  • Första bolag: Panda Rock Holding AB, LDCAB, FTUAB, TASAB
Primär datahub
Fortnox
Tidregistrering
Kimai
Bank
Svea Bank (3) + SEB (1)
Skatt & moms
Skatteverket

2. Systemarkitektur

Bygger på tre-lagersystemet: panda-gitea (change control), panda-ai-agent-organisation (företagsmodell), panda-k3s (runtime). Infisical säkrar secrets. Mainframe visualiserar.

flowchart TB subgraph STEERING["Steering Layer (off-grid)"] D["Distiller
Strukturerar idé"] F["Forge
Grundar repo & org"] CO["Commissioner
Spawnar agenter"] end subgraph GITEA["Gitea (change control)"] REPO["panda-accounting repo
Issues • PRs • Releases"] end subgraph K3S["k3s Runtime"] subgraph NS_LDCAB["Namespace: ldcab"] A1["Finance Lead"] A2["Integration Specialist"] A3["Validation Agent"] end subgraph NS_PRH["Namespace: panda-rock-holding"] A4["Finance Lead"] A5["Integration"] A6["Validation"] end subgraph NS_FTUAB["Namespace: ftuab"] A7["Finance Lead"] A8["Integration"] end subgraph NS_TASAB["Namespace: tasab"] A9["Finance Lead"] A10["Integration"] end end subgraph SECRETS["Infisical"] S1["/ldcab/* (Svea)"] S2["/panda-rock-holding/* (Svea)"] S3["/ftuab/* (SEB)"] S4["/tasab/* (Svea)"] end subgraph EXTERNAL["Externa system"] FN["Fortnox API"] BANK["SEB Bank"] SKV["Skatteverket"] KIM["Kimai"] end MF["Mainframe Dashboard"] D --> F --> CO --> K3S F --> REPO K3S --> SECRETS NS_LDCAB --> FN NS_LDCAB --> BANK NS_PRH --> FN NS_FTUAB --> FN NS_TASAB --> FN K3S --> MF KIM --> K3S
Lager 1

panda-gitea

Change control. Hur arbete förändras: branching, PRs, releases, labels, milestones. Spårbarhet för alla ändringar.

Lager 2

panda-ai-agent-organisation

Företagsmodell. Roller (ROLE-001–011), avdelningar (DEPT-001–007), kärnflöden (FLOW-001–003). Definierar vad agenter gör.

Lager 3

panda-k3s

Runtime-plattform. Company CRD → Operator → Namespace → Pods. Definierar var agenter kör, isolerat och deklarativt.

3. Teknisk plattform — k3s + Infisical under huven

Hur allting faktiskt hänger ihop tekniskt. Från YAML-fil till körande agent med rätt secrets, isolerad från alla andra.

Livscykel: Från YAML till körande agent

När du kör kubectl apply -f company-ldcab.yaml — vad händer steg för steg?

sequenceDiagram participant U as Du / CI participant API as k3s API Server participant OP as Agent Operator participant INF as Infisical participant POD as Agent Pod participant FN as Fortnox API U->>API: kubectl apply company-ldcab.yaml Note over API: Company CRD sparas i etcd API->>OP: Watch-event: ny Company "ldcab" OP->>API: 1. Skapa Namespace "ldcab" OP->>API: 2. Skapa ServiceAccount OP->>API: 3. Skapa NetworkPolicy OP->>INF: 4. Skapa Machine Identity INF-->>OP: Client ID + Client Secret OP->>API: 5. Skapa K8s Secret (auth-creds) OP->>API: 6. Skapa ConfigMap (SOUL.md, AGENTS.md) OP->>API: 7. Skapa Deployment API->>POD: Schemalag + starta pod rect rgb(15, 31, 61) Note over POD,INF: Init Container (secret injection) POD->>INF: Auth: Client ID + Secret INF-->>POD: Access Token (TTL: 1h) POD->>INF: GET /secrets/raw (path: /ldcab/*) INF-->>POD: FORTNOX_API_KEY, BANK_TOKEN Note over POD: Skriver secrets till /tmp/secrets/ end rect rgb(15, 31, 61) Note over POD,FN: Main Container (OpenClaw agent) POD->>POD: Laser SOUL.md + AGENTS.md POD->>POD: Laser secrets fran /tmp/secrets/ POD->>FN: Redo! Forsta API-anrop end
Klusterarkitektur: Namespaces, pods och isolering per bolag
flowchart TB subgraph K3S["k3s Kluster — Panda Accounting"] subgraph SYS["kube-system (plattform)"] CS["CoreDNS"] OP["Agent Operator
(watchar Company + Agent CRDs)"] ARGO["ArgoCD
(GitOps sync)"] INOP["Infisical Operator
(secret injection)"] end subgraph NS_PRH["namespace: panda-rock-holding"] direction TB PRH_FL["Finance Lead
Sonnet • 512Mi"] PRH_INT["Integration
Sonnet • 512Mi"] PRH_VAL["Validation
Haiku • 256Mi"] PRH_NP["NetworkPolicy
egress: Fortnox + Svea Bank"] PRH_SA["ServiceAccount
+ Infisical Identity"] PRH_PVC["PVC 1Gi workspace"] PRH_CM["ConfigMap
SOUL.md • AGENTS.md"] end subgraph NS_LDCAB["namespace: ldcab"] direction TB LDCAB_FL["Finance Lead
Sonnet • 512Mi"] LDCAB_INT["Integration
Sonnet • 512Mi"] LDCAB_VAL["Validation
Haiku • 256Mi"] LDCAB_NP["NetworkPolicy
egress: Fortnox + Svea Bank"] LDCAB_SA["ServiceAccount
+ Infisical Identity"] end subgraph NS_FTUAB["namespace: ftuab"] direction TB FTUAB_FL["Finance Lead
Sonnet • 512Mi"] FTUAB_INT["Integration
Sonnet • 512Mi"] FTUAB_VAL["Validation
Haiku • 256Mi"] FTUAB_NP["NetworkPolicy
egress: Fortnox + SEB"] FTUAB_SA["ServiceAccount
+ Infisical Identity"] end subgraph NS_TASAB["namespace: tasab"] direction TB TASAB_FL["Finance Lead
Sonnet • 512Mi"] TASAB_INT["Integration
Sonnet • 512Mi"] TASAB_VAL["Validation
Haiku • 256Mi"] TASAB_NP["NetworkPolicy
egress: Fortnox + Svea Bank"] TASAB_SA["ServiceAccount
+ Infisical Identity"] end end NS_PRH -.-x|BLOCKERAD| NS_LDCAB NS_LDCAB -.-x|BLOCKERAD| NS_FTUAB NS_FTUAB -.-x|BLOCKERAD| NS_TASAB NS_PRH -.-x|BLOCKERAD| NS_TASAB
4 bolag = 4 namespaces

Total isolering per bolag

Varje bolag får eget namespace med egen NetworkPolicy, ServiceAccount och Infisical-identity. FTUAB (SEB) har annan bank-egress än de andra (Svea).

12 agentpods (3 per bolag)

Resursbudget

Per pod: 250m–1000m CPU, 256Mi–512Mi RAM
Totalt kluster: ~4–6 GB RAM, ~3–4 CPU cores
Workspace: 1Gi PVC per namespace (local-path)

Plattformskomponenter

kube-system

Agent Operator: Watchar CRDs, skapar resurser
Infisical Operator: Injicerar secrets
ArgoCD: GitOps sync från Gitea
CoreDNS: Intern DNS

Infisical: Secrets-flöde i detalj
flowchart LR subgraph INFISICAL["Infisical (secrets.panda-rock.com)"] direction TB subgraph PROJECT["Workspace: panda-ops"] direction TB PRH["/panda-rock-holding
FORTNOX_KEY
SVEA_BANK_TOKEN"] L["/ldcab
FORTNOX_KEY
SVEA_BANK_TOKEN"] F["/ftuab
FORTNOX_KEY
SEB_BANK_TOKEN"] T["/tasab
FORTNOX_KEY
SVEA_BANK_TOKEN"] SH["/shared
SKATTEVERKET_CERT
KIMAI_TOKEN"] end subgraph IDS["Machine Identities (1 per agent)"] I0["prh-finance-svc
read: /panda-rock-holding, /shared"] I1["ldcab-finance-svc
read: /ldcab, /shared"] I2["ftuab-finance-svc
read: /ftuab, /shared"] I3["tasab-finance-svc
read: /tasab, /shared"] end end I0 -->|allow| PRH I0 -->|allow| SH I0 -.-x|DENY| L I0 -.-x|DENY| F I1 -->|allow| L I1 -->|allow| SH I1 -.-x|DENY| PRH I2 -->|allow| F I2 -->|allow| SH I2 -.-x|DENY| L
Principen

Least Privilege + Deny-test

  • En identity per agent — inte delad
  • Scoped till sin path — LDCAB ser bara /ldcab/*
  • Deny-testad — verifierat att läsning av /panda-rock nekas
  • Delad path/shared/* för Skatteverket, Kimai
  • Token-rotation — access tokens har TTL 1h
Auth-utveckling

Universal Auth → K8s Operator → OIDC

  • PoC: Init Container auth:ar med Client ID + Secret
  • Prod: Infisical K8s Operator injicerar secrets som K8s Secrets automatiskt
  • Enterprise: Pod ServiceAccount JWT → Keycloak OIDC → Infisical (noll statiska credentials)
Nätverksisolering: Vad får prata med vad?
flowchart TB subgraph ALLOWED["Tillatet (egress)"] FN["Fortnox API :443"] BANK["Svea/SEB Bank :443"] INF2["Infisical :443"] DNS2["CoreDNS :53"] end subgraph NS_LDCAB["Namespace: ldcab"] FL["Finance Lead"] IS2["Integration"] VA2["Validation"] end subgraph BLOCKED["Blockerat"] NS_PR2["namespace: panda-rock"] NS_T2["namespace: torns"] RANDOM["Godtycklig IP"] end FL -->|HTTPS| FN IS2 -->|HTTPS| FN IS2 -->|HTTPS| BANK FL -->|HTTPS| INF2 FL -->|UDP| DNS2 FL <-->|intern| IS2 FL <-->|intern| VA2 FL -.-x NS_PR2 FL -.-x NS_T2 FL -.-x RANDOM style BLOCKED fill:#1a0a0a,stroke:#f87171 style ALLOWED fill:#0a1a0a,stroke:#86efac
TILLÅTET

Inom eget namespace

Agenter i samma bolag pratar fritt. Finance Lead delegerar till Integration Specialist.

TILLÅTET

Godkänd egress

Fortnox, SEB, Infisical — bara HTTPS 443. Konfigureras per bolag i Helm values.

BLOCKERAT

Cross-namespace + random

LDCAB-pod når aldrig panda-rock-namespace. K3s NetworkPolicy på kernel-nivå (iptables/nftables).

CRD-exempel: Hur YAML:en ser ut
Company CRD

company-ldcab.yaml

apiVersion: panda.rocks/v1
kind: Company
metadata:
  name: ldcab
spec:
  name: "Landvetter Datacenter AB"
  owner: simon
  template: panda-ai-agent-organisation
  orgSlice: light
  infisicalProject: panda-ops
  networkPolicy:
    isolateNamespace: true
    allowedEgress:
      - secrets.panda-rock.com
      - apps.fortnox.se
      - api.sveabank.se
  agents:
    - role: ROLE-003
      name: finance-lead
      model: anthropic/claude-sonnet-4-20250514
    - role: ROLE-005
      name: integration
    - role: ROLE-008
      name: validation
      model: anthropic/claude-haiku-4-5
Resulterande Agent CRD

Genereras av Operator

apiVersion: panda.rocks/v1
kind: Agent
metadata:
  name: finance-lead
  namespace: ldcab
spec:
  role: ROLE-003
  department: DEPT-005
  model: anthropic/claude-sonnet-4-20250514
  secrets:
    infisicalIdentity: ldcab-finance-svc
    scope:
      - /ldcab
      - /shared
  resources:
    cpu: "500m"
    memory: "512Mi"
  skills:
    - fortnox-api
    - bank-reconciliation
GitOps: Från git push till körande ändring
flowchart LR DEV["git push"] --> GITEA["Gitea repo"] GITEA -->|webhook| ARGO["ArgoCD"] ARGO -->|sync| K3S2["k3s API"] K3S2 -->|reconcile| OP2["Operator"] OP2 -->|update| PODS["Agent Pods"] ARGO -->|diff| MM["Mattermost notis"]

Ändra YAML i Git → Gitea webhook → ArgoCD sync → Operator reconcile → pods uppdateras. Ingen manuell kubectl i produktion. Allt spårbart i Git-historiken.

Observability: Prometheus → Grafana → Mainframe
flowchart LR P12["Agent Pod"] -->|:3000/metrics| PROM2["Prometheus (Docker)"] P22["Agent Pod"] -->|:3000/metrics| PROM2 PROM2 --> GRAF2["Grafana"] PROM2 -->|alert rules| ALERT2["Alertmanager"] ALERT2 -->|webhook| MM2["Mattermost"] GRAF2 -->|API| MF2["Mainframe Dashboard"]
Befintlig infra

Prometheus + Grafana (redan igång)

ServiceMonitor i k3s exponerar metrics → Prometheus skrapar automatiskt. UPS-dashboard, Docker-metrics — nu även agent-metrics.

Vad vi övervakar

Agent-specifika alerts

  • Pod restarts — agent kraschar
  • Secret fetch failures — Infisical nere
  • Fortnox API errors — 429 rate limit / 500
  • Avvikelsekö-djup — övermycket exceptions

4. Orkestrering — Vem gör vad?

Från idé till körande system. Steering layer hanterar setup, org-tier kör arbetet.

sequenceDiagram participant S as Simon/Kristian participant DI as Distiller participant FO as Forge participant CM as Commissioner participant FL as Finance Lead participant IS as Integration Specialist participant VA as Validation Agent S->>DI: "Bygg ekonomi-nav för våra bolag" DI->>DI: Strukturerar initiation brief DI->>S: Brief för godkännande S->>DI: Godkänt ✅ DI->>FO: Brief med STATUS: READY_FOR_GROUNDING FO->>FO: Bedömer viktklass (Full) FO->>FO: Skapar repo + labels + issues FO->>FO: Mappar roller från org-modellen FO->>CM: Grounding report CM->>CM: Validerar paket CM->>S: Begär godkännande för standup S->>CM: Godkänt ✅ CM->>CM: Spawnar agenter i k3s CM->>CM: Konfigurerar Infisical-identities CM->>CM: Verifierar handoffs CM->>S: Commissioning report FL->>IS: "Bygg Kimai → Fortnox pipeline" IS->>IS: Implementerar integration IS->>VA: "Verifiera moms-matchning" VA->>FL: Verifieringsrapport FL->>S: Status: Slice 1 klar
Roller i detta projekt
Steering Layer (off-grid)

Setup & Provisionering

  • Distiller — Tar rå idé → strukturerad brief
  • Forge — Skapar repo, mappar org-struktur
  • Commissioner — Spawnar & verifierar agenter

Steering layer äger inte projektet — de skapar det och lämnar över.

Org-tier (Full)

Dagligt arbete

  • Finance Lead (ROLE-003 CFO) — Övervakar KPIs, styr prioritet
  • Integration Specialist (ROLE-005 CASO) — Bygger API-kopplingar
  • Validation Agent (ROLE-008 Quality) — Verifierar data, moms, avstämningar
  • Ops Lead (ROLE-007) — Daglig orkestrering

5. Huvudflöden

Sju kärnflöden från v2-verksamhetsflöde.md. Varje objekt har states från entities-and-states.md. Fortnox API-stöd från fortnox-api-karta.md.

Flöde 1 — Tid → Fakturagrund → Faktura → Betald intäkt

Primära intäktskedjan. Källa: slice-1-spec.md (v2.1). Fullständigt definierad med idempotens, states och felhantering.

stateDiagram-v2 [*] --> captured: Kimai API captured --> validated: Validering (projekt-mappning, billable) validated --> included_in_basis: Bygg fakturagrund included_in_basis --> invoiced: Fortnox POST /invoices invoiced --> locked: Kimai PATCH exported=true state validated { [*] --> ok: Regler passerar ok --> [*] [*] --> exception: E01/E02/E03 } state invoiced { [*] --> created: POST /invoices created --> bookkept: PUT /bookkeep bookkept --> sent: GET /email sent --> paid: Poll betalning (dagligen) sent --> overdue: Förfallen +14d } note right of validated Manuell gate: Granska fakturagrund Godkänn / Avvisa / Justera end note
API-stöd
☆ Fullt byggbart
Manuella gates
Fakturagrundsgranskning
Trigger
Cron: 1:a varje månad
Felfall
E01–E13 (13 definierade)
Flöde 2 — Leverantörskostnader & Kvitton
flowchart LR A["Kvitto / Faktura IN"] --> B["AI-tolkning
(OCR + Vision)"] B --> C["Kontering
(momskod, konto, projekt)"] C --> D["Review
(manuell gate)"] D --> E["Fortnox
POST /supplierinvoices"] E --> F["Betalning
(scheduled)"] F --> G["Avstämd"] B -->|Exception| EX["Avvikelsekö
Saknat underlag / Okänd moms"]
Leverantörsfaktura
  • States: received → interpreted → coded → reviewed → booked → paid → reconciled
  • API: POST /3/supplierinvoices + filkoppling
  • Attestflöde fullt API-stött
Kvitto / Kortköp / Utlägg
  • Insamling: Mobil → Nextcloud → Pipeline
  • Alternativ: Telegram-bot (foto → auto-bokför)
  • States: received → interpreted → coded → booked → reconciled
Flöde 3 — Bank & Skattekonto (kontrollagret)
flowchart LR BANK["SEB Bankhändelser"] --> IMP["Daglig import"] IMP --> CLASS["Klassificering"] CLASS --> MATCH["Matchning mot
reskontra/lön/skatt"] MATCH --> POST["Bokföring"] POST --> REC["Avstämning"] MATCH -->|Omatchad| EX["Avvikelse"] SKV["Skattekonto"] --> SKVIMP["Import"] SKVIMP --> SKVMATCH["Matchning
moms/AGI/prelskatt"] SKVMATCH --> SKVREC["Avstämning"]

Viktigt: Fortnox exponerar inte banktransaktioner via API. Bankmatchning sker i Fortnox UI eller via deras interna bankintegration. Vår pipeline registrerar betalningar (Invoice Payments / Supplier Invoice Payments) och pollar status — själva avstämningen är en manuell checkpoint.

Flöde 4 — Lön
flowchart LR TID["Löneunderlag"] --> REG["Registrera
lönetransaktioner"] REG --> CALC["Lönekörning
(Fortnox UI)"] CALC --> BESKED["Lönebesked"] BESKED --> PAY["Nettolön utbetalas"] PAY --> AGI["AGI rapporteras
(Fortnox UI)"] AGI --> SKV["Skattekonto
reglering"] SKV --> BOK["Bokförd
lönekostnad"]

Lönekörning (beräkning av skatt, avgifter, nettolön), AGI-rapportering och lönebesked sker i Fortnox UI — inte via API. Vår automation förbereder (lönetransaktioner via API) och efterkontrollerar (avstämning mot skattekonto).

Flöde 5 — Moms
flowchart LR BOK["Bokförda intäkter
och kostnader"] --> CALC["Sammanställ
momsgrund"] CALC --> REPORT["Momsrapport"] REPORT --> REVIEW["Kontroll
(manuell gate)"] REVIEW --> DECL["Deklaration
(Skatteverket)"] DECL --> PAY["Betalning/återbetalning
via skattekonto"] PAY --> CLOSE["Period stängd"]

Momsrapport och momsdeklaration kan inte genereras via Fortnox API. Däremot säkerställer vår pipeline att varje transaktion har rätt momskod vid bokföring — det är det som avgör om rapporten blir korrekt. States: open → prepared → reviewed → filed → paid-or-refunded → closed.

Flöde 6 — Bokslut & Årsredovisning
flowchart LR PRE["Alla perioder stängda"] --> CHECK["Avstämningar
bank + reskontra + skattekonto"] CHECK --> PER["Periodiseringar
& justeringar"] PER --> BOKSLUT["Bokslut"] BOKSLUT --> AR["Årsredovisning"] AR --> DECL["Deklaration (INK2)"]

Bokslut är kvalitetstestet på alla tidigare flöden. Om bank, reskontra, moms och skattekonto stämmer är bokslutet en formalisering. Vår automation säkerställer att förutsättningarna är uppfyllda; själva årsredovisningen är semi-manuell.

Fortnox API-stöd per domän

Källa: fortnox-api-karta.md. Rate limit: 25 req/5s per access-token.

Domän Bedömning Kommentar
Kunder & Projekt● ByggbartFull CRUD
Tid → Fakturaunderlag● WorkaroundKimai → egen pipeline → Fortnox
Kundfakturor● ByggbartHela livscykeln API-bar
Leverantörsfakturor● ByggbartInkl. attest och filkoppling
Bokföringsverifikationer● ByggbartSkapa + läsa (ej ändra, by design)
Bankmatchning● Ej via APIFortnox black box. Betalningsreg. möjlig.
Lön● WorkaroundData in/ut OK, lönekörning = Fortnox UI
Moms/Skatt● Rapportering ej APIKontering = API-bar (det som spelar roll)
Bilagor● ByggbartUpload + koppling fullt stödd

6. Säkerhet & Isolering

Agenter får bara åtkomst till sitt bolags data. K3s namespace + Infisical scoped secrets + NetworkPolicy.

flowchart TB subgraph INF["Infisical (secrets.panda-rock.com)"] I1["Machine Identity:
ldcab-finance-svc
Path: /ldcab/*"] I2["Machine Identity:
pr-finance-svc
Path: /panda-rock/*"] end subgraph K3S["k3s kluster"] subgraph NS1["Namespace: ldcab
(NetworkPolicy: isolerad)"] P1["Finance Pod"] P2["Integration Pod"] end subgraph NS2["Namespace: panda-rock
(NetworkPolicy: isolerad)"] P3["Finance Pod"] P4["Integration Pod"] end end I1 -.->|"read-only"| P1 I1 -.->|"read-only"| P2 I2 -.->|"read-only"| P3 I2 -.->|"read-only"| P4 P1 -->|"HTTPS 443"| FN["Fortnox API"] P3 -->|"HTTPS 443"| FN NS1 -.-x|"BLOCKED"| NS2
Namespace-isolering

k3s

Varje bolag = eget namespace. NetworkPolicy: bara utgående till godkända endpoints (Fortnox, SEB). Inget cross-namespace.

Secrets

Infisical

Machine identity per agent. Scoped till /bolag/*. Deny-testad: LDCAB-agent kan inte läsa Panda Rocks secrets.

Audit

Loggning

Alla API-anrop loggas. Avvikelser flaggas automatiskt. Prometheus + Grafana för driftövervakning.

7. Multi-bolag Design

Systemet är designat från grunden för flera bolag. Lägg till nytt bolag = ny Company CRD + Infisical-path.

flowchart LR subgraph CONFIG["Company CRDs (YAML i Git)"] C0["company: panda-rock-holding
bank: Svea
agents: 3"] C1["company: ldcab
bank: Svea
agents: 3"] C2["company: ftuab
bank: SEB
agents: 3"] C3["company: tasab
bank: Svea
agents: 3"] end CONFIG -->|"kubectl apply"| K3S["k3s Operator"] K3S --> NS0["NS: panda-rock-holding"] K3S --> NS1["NS: ldcab"] K3S --> NS2["NS: ftuab"] K3S --> NS3["NS: tasab"]
Att lägga till ett nytt bolag

4 steg

  1. Skapa Company YAML — Namn, Fortnox-instans, önskade agenter
  2. Lägg till secrets i Infisical/nytt-bolag/fortnox-key, /nytt-bolag/bank-token
  3. kubectl apply -f company-nytt-bolag.yaml — Operator skapar namespace, spawnar pods
  4. Verifiera — Agent hämtar rätt secrets? NetworkPolicy blockerar cross-namespace?

8. Implementationsplan

Prioriterad byggordning. Bygg det som gör resten möjligt först.

gantt title Panda Accounting — Implementationsplan dateFormat YYYY-MM-DD axisFormat %d %b section Fas 0: Plan Initiation brief + godkännande : done, f0, 2026-04-07, 2d section Fas 1: Grund Fortnox OAuth + API-access : f1a, after f0, 2d Kimai-Fortnox projektmappning : f1b, after f0, 2d Infisical identities (3-5 st) : f1c, after f0, 3d section Fas 2: Slice 1 Tid-hämtning + validering : f2a, after f1b, 3d Fakturagrund + manuell gate : f2b, after f2a, 3d Fortnox faktura (skapa/bokför) : f2c, after f2b, 2d Betalningspoll + verifiering : f2d, after f2c, 3d section Fas 3: Breddning Leverantörsfakturor : f3a, after f2d, 5d Kvitto-tolkning (OCR) : f3b, after f2d, 5d Bankavstämning (manuell gate) : f3c, after f3a, 3d section Fas 4: Kontroll Momssammanställning : f4a, after f3c, 3d Löneflöde (semi-auto) : f4b, after f3c, 3d Skattekontoavstämning : f4c, after f4a, 2d section Fas 5: Multi-bolag k3s namespace per bolag : f5a, after f4c, 3d Company CRD + secrets : f5b, after f5a, 2d Bolag 2 + 3 onboarding : f5c, after f5b, 3d section Fas 6: Dashboard Mainframe-modul : f6, after f5c, 5d
Slice 1 — Definition of Done (16 krav)

Källa: slice-1-spec.md v2.1. Slicen är klar när:

  1. Tid kan hämtas från Kimai API och valideras mot mappningsregler
  2. Fakturagrund byggs automatiskt med korrekt gruppering och summering
  3. Fakturagrunden visar råtid + fakturerbar tid (avrundad per 0.25h)
  4. Manuell granskning kan godkänna / avvisa / justera fakturagrund
  5. Manuella justeringar loggas med vem/vad/varför (audit trail)
  6. Godkänd fakturagrund skapar korrekt faktura i Fortnox via API
  7. Fakturan bokförs i separat steg efter skapande
  8. Fakturan skickas i separat steg efter bokföring
  9. Pipeline pollar fakturastatus med trippelverifiering
  10. Vid full betalning verifieras att intäkten är bokförd
  11. Behandlade tidrader markeras som exporterade i Kimai
  12. Om Kimai-lock misslyckas hanteras det via terminalstate + periodisk retry
  13. Alla avvikelsefall (E01–E13) loggas i kö med typ och allvarlighet
  14. Hela kedjan kan köras om utan dubbletter (idempotens)
  15. Manuella gates är explicita och dokumenterade
  16. Delbetalning är explicit out-of-scope och stoppar progression

9. Risker & Begränsningar

Kända risker och hur vi hanterar dem.

HÖG RISK

Bankmatchning är en black box

Fortnox exponerar inte banktransaktioner via API. Avstämning sker i Fortnox UI. Mitigation: Registrera betalningar via API, acceptera manuell gate för avstämning.

MEDEL RISK

Fortnox rate limits

25 requests / 5 sekunder per token. Med flera bolag + agenter = risk för throttling. Mitigation: Staggera anrop, respektera Retry-After, köa requests.

MEDEL RISK

Lön/moms kräver manuella steg

Lönekörning, momsdeklaration och AGI-rapportering kan inte automatiseras fullt via API. Mitigation: Automation förbereder och efterkontrollerar; manuellt steg i Fortnox UI.

LÅG RISK

Multi-bolag Fortnox

Separata Fortnox-instanser per bolag? Eller en gemensam med sub-accounts? Påverkar kostnad och isolering. Beslut krävs.

10. Öppna frågor för beslut

Dessa måste besvaras innan byggstart. Markerade med prioritet.

Blockerande

Q1: Fortnox API-åtkomst

Finns OAuth-app registrerad? Vilka scopes? Behöver registreras via Fortnox Developer-portal.

Blockerande

Q2: Fortnox-instanser

En per bolag (isolerat, dyrare) eller en gemensam med kostnadsställen (billigare, delad)?

Blockerande

Q3: Kimai-instans

Vilken Kimai ska vi ansluta mot? URL + API-token. Vilka projekt finns redan?

Innan leverans

Q4: Avrundningsregler

Timmar: närmaste 0.25h (15 min) upprundat? Default-förslag i slice-1-spec.

Innan leverans

Q5: Fakturautsändning

E-post, e-faktura, eller båda? Påverkar steg 5c i slice 1.

Design

Q6: Org-tier

Full (10 roller) eller Light (3 agenter: Foreman, Smith, Warden)? Rekommendation: Light för PoC, uppgradera vid behov.

Kanoniska referenser

Accounting-repo
panda-lab/panda-accounting
Change control
panda-lab/panda-gitea v1.0
Företagsmodell
panda-lab/panda-ai-agent-organisation v1.0
Runtime
panda-ops/panda-k3s v0.1
Secrets
panda-lab/panda-infisical v0.1
Agent-bibliotek
panda-lab/agent-library
Design-standard
panda-lab/design-standard v1.1
Producerat av
Cato (panda-ops) — 2026-03-31