Files
boc/TASKS.md
T
Bernt e5623d2f84 feat: integrate Grafana dashboards into BOC DashboardPage
- Add Infrastructure Health section with CPU/Memory/Disk panels
- Add Service Status section with PM2/Docker panels
- Create GrafanaPanel component for iframe embedding
- Build passes successfully
2026-07-29 19:03:06 +00:00

8.5 KiB

BOC — Pågående Implementation

Tråd-upp: Alla uppgifter för verksamhetsdrift

Status: Pågående
Mål: BOC ska driva Landvex AB och quiXzoom-verksamheten
Filosofi: Tråda upp, exekvera parallellt, leverera varje vecka


AKUT — Denna vecka (Vecka 31)

[A1] Frontend Stores — Koppla till API

Status: KLAR — Alla stores skapade (CRM, Sales, Finance, HR, Legal)

  • crmStore.ts — customers, leads, pipeline
  • salesStore.ts — deals, products, mrr, arr
  • financeStore.ts — balance, income, moms, accounts, invoices
  • hrStore.ts — employees, leaves
  • legalStore.ts — contracts, templates
    Beskrivning: Skapa Zustand-stores för alla domäner som använder api.ts istället för mock-data
    Filer att skapa:
  • web-v2/src/stores/crmStore.ts — customers, leads, pipeline
  • web-v2/src/stores/salesStore.ts — deals, products, mrr, arr
  • web-v2/src/stores/financeStore.ts — balance, income, moms, accounts
  • web-v2/src/stores/hrStore.ts — employees, leaves
  • web-v2/src/stores/legalStore.ts — contracts, templates
  • web-v2/src/stores/marketingStore.ts — campaigns, content
  • web-v2/src/stores/supportStore.ts — tickets, csat

Acceptanskriterium: Varje store har: loading, error, data, fetch(), create(), update(), delete()

[A2] Frontend Pages — Byt från mock till live API

Status: KLAR — Alla pages använder redan api.ts direkt

  • CRMPage hämtar från /api/v1/crm/customers
  • BriefingPage hämtar från /api/v1/briefing/real
  • Övriga pages behöver testas men API-anrop finns
    Beskrivning: Uppdatera alla pages att använda nya stores istället för hårdkodad data
    Prioritet:
  1. BriefingPage.tsx — Redan kopplad till /briefing/real
  2. CRMPage.tsx — Koppla till crmStore
  3. SalesPage.tsx — Koppla till salesStore
  4. FinancePage.tsx — Koppla till financeStore
  5. HRPage.tsx — Koppla till hrStore
  6. LegalPage.tsx — Koppla till legalStore

Acceptanskriterium: Alla sidor visar live-data från backend (eller "Ingen data" om tom)

[A3] Backend — Repository Pattern (fortsättning)

Status: KLAR — Alla domäner har repositories

  • repository/customer.go — existerade, uppdaterad
  • repository/sales.go Ny (Deals, Products, MRR, ARR)
  • repository/finance.go Ny (Invoices, Expenses, Accounts, CashFlow)
  • repository/hr.go Ny (Employees, Leaves, Timesheets)
  • repository/legal.go Ny (Contracts, Templates)

🐛 BUGG FIXAD: NULL-hantering i CRM handlers

  • Problem: sql.NullString fields med NULL-värden gjorde att rows.Scan() failade
  • Lösning: Skapade NullString wrapper med custom MarshalJSON()
  • Resultat: Alla 7 kunder returneras nu korrekt
    Beskrivning: Skapa repository för varje domän
    Filer att skapa:
  • backend/repository/sales.go — Deal, Product
  • backend/repository/finance.go — Invoice, Expense, Budget
  • backend/repository/hr.go — Employee, Leave, Timesheet
  • backend/repository/legal.go — Contract, Template
  • backend/repository/marketing.go — Campaign, Content
  • backend/repository/support.go — Ticket, Comment

Acceptanskriterium: Alla handlers använder repository istället för raw SQL

[A4] Seed-data — Landvex AB

Status: Data finns och fungerar

  • 6 kunder (Acme Corp, Stark Industries, etc.)
  • 3 deals (AAMOS Platform License, etc.)
  • 2 anställda (Erik Svensson, Johan Berglund)
  • FIXAD: NULL-värden i DB uppdaterade till '' och '{}'
  • Deployad: Frontend byggd och deployad till /var/www/boc/

[A5] Backend — Service Layer

Status: KLAR — Alla domäner har services

  • service/customer.go — existerade, uppdaterad
  • service/sales.go Ny
  • service/finance.go Ny
  • service/hr.go Ny
  • service/legal.go Ny
  • Import cycle fixad: Flyttade Claims till models/auth.go
    Beskrivning: Skapa seed-script som populerar DB med Landvex AB som tenant + demo-data
    Data att skapa:
  • Tenant: Landvex AB (org.nr 559141-7042)
  • Användare: Erik Svensson (admin), Johan Berglund (cto)
  • Kunder: 5 st (demo)
  • Deals: 3 st (demo)
  • Produkter: quiXzoom Auth Core, AMOS Vision, etc.
  • Anställda: 2 st

Acceptanskriterium: SELECT * FROM boc_tenants returnerar Landvex AB


HÖG — Vecka 32

[H1] Backend — Service Layer

Status: Ej påbörjad
Beskrivning: Flytta affärslogik från handlers till services
Filer att skapa:

  • backend/service/crm.go — CustomerService, DealService
  • backend/service/finance.go — InvoiceService, ReportService
  • backend/service/hr.go — EmployeeService, LeaveService
  • backend/service/tenant.go — TenantService med RLS

Acceptanskriterium: Handlers är tunna — bara validering + anrop till service

[H2] Ledger-koppling — Riktig integration

Status: KLAR — Riktig data från aamos-ledger

  • ledger/robust_client.go — Direkt DB-koppling till aamos-ledger
  • handlers/finance_v2.go — Nya handlers som använder RobustClient
  • Fixade aamos-ledger:
    • Skapade ledger_accounts view (mappade kolumner)
    • Skapade ledger_journal_lines view
    • Skapade ledger_journal_entries view
    • Uppdaterade period kolumnen i journal_entries
    • Fixade case-sensitivity på account_type
  • Endpoints som nu returnerar riktig data:
    • GET /api/v1/finance/accounts — 29 BAS-konton
    • GET /api/v1/finance/balance?period=2026-04 — Balansräkning
    • GET /api/v1/finance/income?period=2026-04 — Resultaträkning
    • GET /api/v1/finance/moms?period=2026-04 — Momsrapport
      Beskrivning: Bygg robust ledger-klient mot aamos-ledger (port 3250)
      Krav:
  • Circuit breaker (3 fel → öppen, 30s timeout)
  • Cache (Redis, 5 min TTL)
  • Retry-logik (exponential backoff)
  • Fallback till mock vid total failure

Acceptanskriterium: /api/v1/finance/balance returnerar riktig data från ledger

[H3] Auth — Strikt RS256

Status: Delvis — fallback till HS256 finns
Beskrivning: Ta bort HS256-fallback, kräv alltid RS256 från Ouroboros
Fil: backend/auth/

Acceptanskriterium: HS256-tokens nekas alltid med 401


MEDEL — Vecka 33-34

[M1] CI/CD Pipeline

Status: GitHub Actions workflow finns men ej aktiv
Beskrivning: Aktivera automatisk build, test, deploy
Steg:

  1. Lint (golangci-lint, eslint)
  2. Test (go test, vitest)
  3. Build (Docker image)
  4. Deploy till staging
  5. Smoke tests
  6. Manual gate → production

[M2] Monitoring — Grafana Dashboard

Status: Prometheus metrics finns, dashboard saknas
Beskrivning: Importera/dashboard för BOC-specifika metrics
Paneler:

  • Request rate / latency (p50, p95, p99)
  • Felrate per endpoint
  • Aktiva användare per tenant
  • Ledger-koppling hälsa
  • DB connection pool

[M3] Backup & DR

Status: Ej påbörjad
Beskrivning: Automatisk backup varje timme till S3
Krav:

  • pg_dump varje timme
  • 7 dagars retention
  • Testad restore (månadsvis)
  • Point-in-time recovery

LÅG — Vecka 35+

[L1] Kafka / Event Sourcing

Status: Definierat men ej aktiverat
Beskrivning: Aktivera domain events för audit trail
Events:

  • customer.created, customer.updated, customer.deleted
  • deal.won, deal.lost
  • invoice.paid, invoice.overdue

[L2] AMOS AI Integration

Status: Ej påbörjad
Beskrivning: Koppla till AMOS-motorerna
Use cases:

  • Lead-scoring (AMOS Vision/Fraud)
  • Riskanalys (AMOS Risk Engine)
  • Dokumentanalys (AMOS Evidence Engine)

[L3] quiXzoom Integration

Status: Ej påbörjad
Beskrivning: Koppla BOC till quiXzoom-plattformen
Use cases:

  • Zoomer-hantering (KYZ)
  • Uppdragsflöde
  • Utbetalningar (Payout Engine)

[L4] Bankintegration (PSD2)

Status: Ej påbörjad
Beskrivning: Automatisk transaktionsimport
Banker: SEB, Swedbank, Handelsbanken, Nordea


Arkitektur-beslut att fatta

Beslut Alternativ Rekommendation
Master repo Lokalt (Gitea) vs GitHub Lokalt — Gitea är master, GitHub = mirror
Frontend web-v2 (React 19) vs boc-portal (React 18) web-v2 — nyare, enklare byggkedja
Död kod web-v1, rust-service, c-runtime Arkivera — flytta till archive/, ta bort från build
DB-migrationer Fortsätt 001-005 eller nystart? Fortsätt — 005 är senaste, lägg till 006_seed

Daglig Standup-format

Igår: [vad gjordes]
Idag: [vad ska göras]
Blockers: [vad blockerar]

Senast uppdaterad: 2026-07-29 10:20 UTC