Files
boc/README.md
T

285 lines
10 KiB
Markdown
Raw Normal View History

# 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