67a69ab073
- 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
285 lines
10 KiB
Markdown
285 lines
10 KiB
Markdown
# 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
|