cb4a2737339e277fd27f6f07b01f645f766169db
- Add GrafanaPanel component for system health monitoring - Update DashboardPage with Grafana iframe panels - Fix Ledger auth middleware (TICKET-009) - Update PM2 proxy package.json versions - Deploy BOC frontend via PM2
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
# Allt
make build
# Separat
make build-go
make build-rust
make build-c
Kör
Docker (rekommenderat)
make docker-up # Starta allt
make docker-down # Stoppa
make docker-logs # Loggar
Utveckling
# Kräver PostgreSQL på localhost:5432
make dev
Manuellt
# 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— InloggningGET /api/v1/auth/me— Aktuell användare
CRM
GET /api/v1/crm/customers— Lista kunderPOST /api/v1/crm/customers— Skapa kundGET /api/v1/crm/customers/{id}— Hämta kundPUT /api/v1/crm/customers/{id}— Uppdatera kundDELETE /api/v1/crm/customers/{id}— Ta bort kundGET /api/v1/crm/leads— Lista leadsGET /api/v1/crm/pipeline— PipelinePOST /api/v1/crm/interactions— Skapa interaktion
Sales
GET /api/v1/sales/deals— Lista dealsPOST /api/v1/sales/deals— Skapa dealGET /api/v1/sales/deals/{id}— Hämta dealPUT /api/v1/sales/deals/{id}— Uppdatera dealGET /api/v1/sales/mrr— MRRGET /api/v1/sales/arr— ARRGET /api/v1/sales/products— Lista produkterPOST /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— FakturorGET /api/v1/finance/cashflow— KassaflödeGET /api/v1/finance/budget— BudgetPOST /api/v1/finance/expenses— Skapa utgiftGET /api/v1/finance/expenses— Lista utgifter
HR
GET /api/v1/hr/employees— Lista anställdaPOST /api/v1/hr/employees— Skapa anställdGET /api/v1/hr/employees/{id}— Hämta anställdPUT /api/v1/hr/employees/{id}— Uppdatera anställdGET /api/v1/hr/leaves— Lista ledigheterPOST /api/v1/hr/leaves— Skapa ledighetGET /api/v1/hr/timesheets— Lista tidrapporterPOST /api/v1/hr/timesheets— Skapa tidrapport
Legal
GET /api/v1/legal/contracts— Lista kontraktPOST /api/v1/legal/contracts— Skapa kontraktGET /api/v1/legal/contracts/{id}— Hämta kontraktPUT /api/v1/legal/contracts/{id}— Uppdatera kontraktGET /api/v1/legal/reminders— Påminnelser
Marketing
GET /api/v1/marketing/campaigns— Lista kampanjerPOST /api/v1/marketing/campaigns— Skapa kampanjGET /api/v1/marketing/content— Lista contentPOST /api/v1/marketing/content— Skapa content
Support
GET /api/v1/support/tickets— Lista ärendenPOST /api/v1/support/tickets— Skapa ärendeGET /api/v1/support/tickets/{id}— Hämta ärendePUT /api/v1/support/tickets/{id}— Uppdatera ärendePOST /api/v1/support/tickets/{id}/comments— Lägg till kommentarGET /api/v1/support/csat— CSAT-score
Analytics
GET /api/v1/analytics/users— Aktiva användareGET /api/v1/analytics/revenue— IntäktGET /api/v1/analytics/retention— RetentionGET /api/v1/analytics/dashboard— Dashboard-data
Automation
GET /api/v1/automation/workflows— Lista workflowsPOST /api/v1/automation/workflows— Skapa workflowPOST /api/v1/automation/workflows/{id}/trigger— Trigga workflowGET /api/v1/automation/jobs— Lista schemalagda jobbPOST /api/v1/automation/jobs— Skapa schemalagt jobbGET /api/v1/automation/runs— Lista körningar
WebSocket
GET /ws— Realtidsuppdateringar
Rust Service
GET /health— HälsokontrollPOST /api/v1/reports/generate— Generera rapportPOST /api/v1/analytics/query— Analytics-frågaPOST /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-postsend_notification— Push-notiscreate_task— Skapa uppgiftupdate_record— Uppdatera postwebhook— Anropa extern URLgenerate_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
Description
Languages
D
34.6%
HTML
28.4%
Go
22.3%
TypeScript
11%
CSS
0.7%
Other
2.9%