feat(boc): v1.0 - Complete Business Operations Center
- Go backend API with full CRUD for all modules - Rust analytics service with parallel processing - C runtime with POSIX shared memory IPC - PostgreSQL schema with 30+ tables - Redis cache, Kafka event streaming - WebSocket hub, automation engine - PDF generation, Resend email integration - JWT auth, multi-tenant - Docker Compose deployment - Nginx reverse proxy Refs: BOC-001
This commit is contained in:
@@ -0,0 +1,284 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user