# BOC — Business Operations Center **Domän:** boc.aamos.com Företagets kontrollrum. Inte utveckling — utan verksamheten. ## Arkitektur ``` ┌─────────────────────────────────────────────────────────────┐ │ BOC STACK │ ├─────────────────────────────────────────────────────────────┤ │ Frontend (HTML/JS/CSS) │ Mobile-first, extremt enkelt │ ├─────────────────────────────────────────────────────────────┤ │ Go Backend (API Gateway) │ Auth, CRUD, WebSocket, Cron │ ├─────────────────────────────────────────────────────────────┤ │ Redis │ Cache, sessions, rate limit │ ├─────────────────────────────────────────────────────────────┤ │ Kafka │ Event streaming, audit log │ ├─────────────────────────────────────────────────────────────┤ │ Rust Service (Analytics) │ Rapporter, batch, parallel │ ├─────────────────────────────────────────────────────────────┤ │ C Runtime (IPC) │ Shared memory, ring buffers │ ├─────────────────────────────────────────────────────────────┤ │ PostgreSQL │ Fullt schema, migrations │ └─────────────────────────────────────────────────────────────┘ ``` ## Moduler | Modul | Status | Datakälla | Automationsmönster | |-------|--------|-----------|-------------------| | CRM | ✅ | BOC intern | Lead-scoring, påminnelser | | Sales | ✅ | BOC + aamos-ledger | Pipeline-rapporter, forecast | | Finance | ✅ | aamos-ledger, bank | Moms, fakturapåminnelser, avstämning | | HR | ✅ | BOC intern | Lönekörning, ledighet, tidrapporter | | Legal | ✅ | BOC intern | Kontraktsförnyelser, påminnelser | | Marketing | ✅ | BOC intern | Content-publicering, kampanjer | | Support | ✅ | BOC intern | Ärendeprioritering, CSAT | | Analytics | ✅ | Alla moduler | Dashboard, rapporter, trender | | Automation | ✅ | Alla moduler | Workflows, cron, event-triggers | ## Teknikstack ### Backend (Go) - **Router:** chi/v5 - **Auth:** JWT - **DB:** PostgreSQL med migrations - **Cache:** Redis (go-redis) - **Events:** Kafka (segmentio/kafka-go) - **Log:** zerolog - **WebSocket:** gorilla/websocket - **Automation:** Intern motor med cron-support ### Cache (Redis) - **Sessions:** Användarsessioner med TTL - **Rate limiting:** Sliding window per endpoint - **Analytics cache:** 5-minuters TTL på metrics - **Dashboard cache:** 1-minuts TTL - **Pub/Sub:** Realtidsnotifikationer ### Event Streaming (Kafka) - **Topics:** boc.events, boc.audit, boc.analytics, boc.notifications - **Producers:** Alla CRUD-operationer publicerar events - **Consumers:** Audit log, analytics aggregation, notifications - **Schema:** JSON events med tenant_id, entity_id, timestamp ### Analytics (Rust) - **Framework:** axum + tokio - **Parallel:** rayon för batch-processing - **Cache:** dashmap i minnet - **Rapporter:** financial_summary, sales_pipeline, customer_analytics, revenue_forecast, expense_breakdown, cashflow_projection ### IPC (C) - **Shared memory:** POSIX shm - **Ring buffers:** Lock-free för hög genomströmning - **Cache:** Inline analytics-cache med TTL ## Bygga ```bash # Allt make build # Separat make build-go make build-rust make build-c ``` ## Kör ### Docker (rekommenderat) ```bash make docker-up # Starta allt make docker-down # Stoppa make docker-logs # Loggar ``` ### Utveckling ```bash # Kräver PostgreSQL på localhost:5432 make dev ``` ### Manuellt ```bash # Go backend cd backend export PORT=9092 export DB_URL=postgres://boc:boc@localhost:5432/boc?sslmode=disable export JWT_SECRET=*** ./boc # Rust service cd rust-service cargo run --release # C runtime cd c-runtime make ``` ## API Endpoints ### Auth - `POST /api/v1/auth/login` — Inloggning - `GET /api/v1/auth/me` — Aktuell användare ### CRM - `GET /api/v1/crm/customers` — Lista kunder - `POST /api/v1/crm/customers` — Skapa kund - `GET /api/v1/crm/customers/{id}` — Hämta kund - `PUT /api/v1/crm/customers/{id}` — Uppdatera kund - `DELETE /api/v1/crm/customers/{id}` — Ta bort kund - `GET /api/v1/crm/leads` — Lista leads - `GET /api/v1/crm/pipeline` — Pipeline - `POST /api/v1/crm/interactions` — Skapa interaktion ### Sales - `GET /api/v1/sales/deals` — Lista deals - `POST /api/v1/sales/deals` — Skapa deal - `GET /api/v1/sales/deals/{id}` — Hämta deal - `PUT /api/v1/sales/deals/{id}` — Uppdatera deal - `GET /api/v1/sales/mrr` — MRR - `GET /api/v1/sales/arr` — ARR - `GET /api/v1/sales/products` — Lista produkter - `POST /api/v1/sales/products` — Skapa produkt ### Finance - `GET /api/v1/finance/balance` — Balansräkning (från aamos-ledger) - `GET /api/v1/finance/income` — Resultaträkning (från aamos-ledger) - `GET /api/v1/finance/moms` — Momsrapport (från aamos-ledger) - `GET /api/v1/finance/accounts` — Konton (från aamos-ledger) - `GET /api/v1/finance/invoices` — Fakturor - `GET /api/v1/finance/cashflow` — Kassaflöde - `GET /api/v1/finance/budget` — Budget - `POST /api/v1/finance/expenses` — Skapa utgift - `GET /api/v1/finance/expenses` — Lista utgifter ### HR - `GET /api/v1/hr/employees` — Lista anställda - `POST /api/v1/hr/employees` — Skapa anställd - `GET /api/v1/hr/employees/{id}` — Hämta anställd - `PUT /api/v1/hr/employees/{id}` — Uppdatera anställd - `GET /api/v1/hr/leaves` — Lista ledigheter - `POST /api/v1/hr/leaves` — Skapa ledighet - `GET /api/v1/hr/timesheets` — Lista tidrapporter - `POST /api/v1/hr/timesheets` — Skapa tidrapport ### Legal - `GET /api/v1/legal/contracts` — Lista kontrakt - `POST /api/v1/legal/contracts` — Skapa kontrakt - `GET /api/v1/legal/contracts/{id}` — Hämta kontrakt - `PUT /api/v1/legal/contracts/{id}` — Uppdatera kontrakt - `GET /api/v1/legal/reminders` — Påminnelser ### Marketing - `GET /api/v1/marketing/campaigns` — Lista kampanjer - `POST /api/v1/marketing/campaigns` — Skapa kampanj - `GET /api/v1/marketing/content` — Lista content - `POST /api/v1/marketing/content` — Skapa content ### Support - `GET /api/v1/support/tickets` — Lista ärenden - `POST /api/v1/support/tickets` — Skapa ärende - `GET /api/v1/support/tickets/{id}` — Hämta ärende - `PUT /api/v1/support/tickets/{id}` — Uppdatera ärende - `POST /api/v1/support/tickets/{id}/comments` — Lägg till kommentar - `GET /api/v1/support/csat` — CSAT-score ### Analytics - `GET /api/v1/analytics/users` — Aktiva användare - `GET /api/v1/analytics/revenue` — Intäkt - `GET /api/v1/analytics/retention` — Retention - `GET /api/v1/analytics/dashboard` — Dashboard-data ### Automation - `GET /api/v1/automation/workflows` — Lista workflows - `POST /api/v1/automation/workflows` — Skapa workflow - `POST /api/v1/automation/workflows/{id}/trigger` — Trigga workflow - `GET /api/v1/automation/jobs` — Lista schemalagda jobb - `POST /api/v1/automation/jobs` — Skapa schemalagt jobb - `GET /api/v1/automation/runs` — Lista körningar ### WebSocket - `GET /ws` — Realtidsuppdateringar ### Rust Service - `GET /health` — Hälsokontroll - `POST /api/v1/reports/generate` — Generera rapport - `POST /api/v1/analytics/query` — Analytics-fråga - `POST /api/v1/analytics/batch` — Batch-analytics ## Automation ### Schemalagda jobb (cron) - **Rapportgenerering** — Dagligen/veckovis/månadsvis - **Påminnelser** — Kontraktsförnyelser, fakturor - **Synkronisering** — Externa system - **Städning** — Gammal data - **Backup** — Databasbackup ### Workflows - **Event-triggers** — Vid skapande/uppdatering av entiteter - **Schedule-triggers** — Cron-baserade - **Webhook-triggers** — Externa händelser - **Manuella triggers** — Via API/UI ### Åtgärdstyper - `send_email` — Skicka e-post - `send_notification` — Push-notis - `create_task` — Skapa uppgift - `update_record` — Uppdatera post - `webhook` — Anropa extern URL - `generate_report` — Generera och skicka rapport ## Databasschema Fullt schema med: - Multi-tenant (boc_tenants) - Audit log (boc_audit_log) — immutable - Alla moduler med proper indexes - Triggers för updated_at - JSONB för flexibla metadata - Foreign keys med CASCADE Se `backend/db/migrations/001_initial_schema.sql` ## Miljövariabler | Variabel | Default | Beskrivning | |----------|---------|-------------| | PORT | 9092 | Go backend port | | DB_URL | postgres://... | PostgreSQL connection string | | JWT_SECRET | change-me... | JWT signing secret | | AMOS_BASE_URL | http://localhost:9000 | aamos-ledger URL | | MIGRATIONS_DIR | ./db/migrations | Migration files path | | RUST_SERVICE_URL | http://localhost:9093 | Rust service URL | | REDIS_URL | redis://localhost:6379 | Redis connection string | | KAFKA_BROKERS | localhost:9092 | Comma-separated Kafka brokers | ## Säkerhet - JWT-autentisering på alla endpoints utom /health och /login - CORS-konfigurerbart - SQL-injection skyddat via parameteriserade queries - Audit log på alla förändringar - HTTPS i produktion (via nginx) ## Roadmap - [ ] Full integration med aamos-ledger - [ ] Bank-API koppling (Nordea, Revolut) - [ ] E-postutskick (SMTP) - [ ] PDF-generering för fakturor - [ ] Advanced analytics (Rust) - [ ] Machine learning för lead-scoring - [ ] Mobile app (React Native/Flutter) - [ ] SSO-integration ## Licens Proprietär — Landvex Inc