# 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*