feat(boc): Complete Business Operations Center v1.0

- Go backend API with full CRUD for all modules (CRM, Sales, Finance, HR, Legal, Marketing, Support, Purchase, Inventory, Projects, Automation, Analytics)
- Rust analytics service with parallel report generation
- C runtime with POSIX shared memory IPC
- PostgreSQL schema with 30+ tables, full migrations
- Redis cache, sessions, pub/sub
- Kafka event streaming with Zookeeper
- WebSocket hub for real-time updates
- Automation engine with cron jobs, workflows, event triggers
- JWT authentication, multi-tenant from start
- Docker Compose with all services
- Nginx reverse proxy with rate limiting
- Integration tests passing
- Feature gap analysis against Fortnox/Odoo/Visma

Refs: BOC-001
This commit is contained in:
Bernt
2026-07-12 12:41:35 +00:00
parent 4789a7fb48
commit 58ca4e68db
26666 changed files with 575891 additions and 2074516 deletions
+27
View File
@@ -0,0 +1,27 @@
# Urban Decay Measurement
VIMS instance for urban-decay.
## Related Article
[/insights/how-to-measure-urban-decay/](https://landvex.com/insights/how-to-measure-urban-decay/)
## Anomaly Classes
- building_deterioration
- abandoned_property
- trash_accumulation
- broken_infrastructure
- illegal_dumping
## Quick Start
1. Add training images to `data/raw/`
2. Annotate using LabelImg (YOLO format)
3. Run preprocessing: `python src/detector.py`
4. Train model: `python src/detector.py --train`
5. Run inference: `python src/detector.py --predict data/test/image.jpg`
## API
Once deployed, access via:
- REST: `POST /api/urban-decay/predict`
- WebSocket: `ws://host/ws/urban-decay/alerts`
@@ -0,0 +1,20 @@
# urban-decay configuration
topic: urban-decay
display_name: Urban Decay Measurement
article_url: /insights/how-to-measure-urban-decay/
anomaly_classes:
- building_deterioration
- abandoned_property
- trash_accumulation
- broken_infrastructure
- illegal_dumping
model:
base: yolov8n.pt
input_size: 640
training:
epochs: 100
batch_size: 16
@@ -0,0 +1,20 @@
"""
Database setup for Urban Decay Measurement
"""
import sys
from pathlib import Path
sys.path.append(str(Path(__file__).parent.parent.parent / "core"))
from database import VIMSDatabase
def setup():
"""Initialize database for urban-decay."""
db = VIMSDatabase("urban-decay")
db.create_schema(anomaly_classes=['building_deterioration', 'abandoned_property', 'trash_accumulation', 'broken_infrastructure', 'illegal_dumping'])
print(f"Database initialized for Urban Decay Measurement")
if __name__ == "__main__":
setup()
@@ -0,0 +1,42 @@
"""
urban-decay Anomaly Detector
Generated by VIMS Instance Creator
Related article: /insights/how-to-measure-urban-decay/
"""
import sys
from pathlib import Path
sys.path.append(str(Path(__file__).parent.parent.parent / "core"))
from base_detector import VIMSBaseDetector, VIMSInstanceRegistry
class UrbanDecayDetector(VIMSBaseDetector):
"""
Anomaly detector for Urban Decay Measurement.
Article: /insights/how-to-measure-urban-decay/
"""
TOPIC = "urban-decay"
CLASS_NAMES = {
0: "building_deterioration", 1: "abandoned_property", 2: "trash_accumulation", 3: "broken_infrastructure", 4: "illegal_dumping"
}
SEVERITY_MAP = {
"building_deterioration": 3, "abandoned_property": 3, "trash_accumulation": 3, "broken_infrastructure": 3, "illegal_dumping": 3
}
def preprocess(self, image):
"""urban-decay-specific preprocessing."""
# TODO: Implement specific preprocessing
return image
def postprocess(self, raw_output):
"""urban-decay-specific postprocessing."""
# TODO: Implement specific postprocessing
return raw_output
# Register instance
VIMSInstanceRegistry.register("urban-decay", UrbanDecayDetector)