{% extends "shared/frontend/base.html" %} {% block title %}Indstillinger - BMC Hub{% endblock %} {% block extra_css %} {% endblock %} {% block content %}

Indstillinger

System konfiguration og brugerstyring

Firma Oplysninger
vTiger CRM
e-conomic
Nextcloud

Administrer kunde‑instanser, credentials og audit‑log

Kunde Base URL Bruger Status Sidst opdateret Handlinger
Audit‑log retention
Manuel sletning pr. kunde (tidsbaseret)
Notifikation Indstillinger
Email Skabeloner

Administrer system- og kundespecifikke email skabeloner

Navn Emne Kategori Type Sidst opdateret Handlinger
Brugerstyring
Bruger Email Status Sidst Login Oprettet Handlinger
Tag Administration

Administrer tags der bruges på tværs af hele systemet

0
Total Tags
0
Workflow
0
Status
0
Category
0
Priority
0
Billing
Pipeline Stages

Administrer faser i salgspipelinen

Navn Sortering Standard % Status Handling
Data Synkronisering

Synkroniser firmaer og kontakter fra vTiger og e-conomic

Firmaer i Hub
-
Med vTiger ID
-
Med e-conomic ID
-
Sync fra vTiger

Hent firmaer og kontakter fra vTiger CRM. Matcher på CVR nummer eller firma navn.

Sidst synkroniseret: Aldrig
Sync fra e-conomic

Hent kundenumre fra e-conomic. Matcher på CVR nummer eller firma navn.

Sidst synkroniseret: Aldrig
Synkroniserings Log

Indlæser log...

AI System Prompts

Her kan du se de prompts der bruges til forskellige AI funktioner i systemet.

📦 Modul System

Dynamisk feature loading - udvikl moduler isoleret fra core systemet

API ikke implementeret endnu
Quick Start

Opret nyt modul på 5 minutter:

# 1. Opret modul
python3 scripts/create_module.py invoice_scanner "Scan fakturaer"

# 2. Kør migration
docker-compose exec db psql -U bmc_hub -d bmc_hub \\
  -f app/modules/invoice_scanner/migrations/001_init.sql

# 3. Enable modul (rediger module.json)
"enabled": true

# 4. Restart API
docker-compose restart api

# 5. Test
curl http://localhost:8000/api/v1/invoice_scanner/health
Aktive Moduler

Indlæser moduler...

Safety First
  • ✅ Moduler starter disabled
  • ✅ READ_ONLY og DRY_RUN defaults
  • ✅ Error isolation - crashes påvirker ikke core
  • ✅ Graceful degradation
Database Isolering
  • ✅ Table prefix pattern (fx mymod_customers)
  • ✅ Separate migration tracking
  • ✅ Helper functions til queries
  • ✅ Core database uberørt
Modul Struktur
app/modules/my_module/
├── module.json          # Metadata og konfiguration
├── README.md            # Dokumentation
├── backend/
│   ├── __init__.py
│   └── router.py        # FastAPI endpoints (API)
├── frontend/
│   ├── __init__.py
│   └── views.py         # HTML view routes
├── templates/
│   └── index.html       # Jinja2 templates
└── migrations/
    └── 001_init.sql     # Database migrations
Konfiguration

Modul-specifik konfiguration i .env:

# Pattern: MODULES__{MODULE_NAME}__{KEY}
MODULES__MY_MODULE__API_KEY=secret123
MODULES__MY_MODULE__READ_ONLY=false
MODULES__MY_MODULE__DRY_RUN=false

I kode:

from app.core.config import get_module_config

api_key = get_module_config("my_module", "API_KEY")
read_only = get_module_config("my_module", "READ_ONLY", "true")
Eksempel: API Endpoint
from fastapi import APIRouter, HTTPException
from app.core.database import execute_query, execute_insert
from app.core.config import get_module_config

router = APIRouter()

@router.post("/my_module/scan")
async def scan_document(file_path: str):
    """Scan et dokument"""
    
    # Safety check
    read_only = get_module_config("my_module", "READ_ONLY", "true")
    if read_only == "true":
        return {"error": "READ_ONLY mode enabled"}
    
    # Process document
    result = process_file(file_path)
    
    # Gem i database (bemærk table prefix!)
    doc_id = execute_insert(
        "INSERT INTO mymod_documents (path, result) VALUES (%s, %s)",
        (file_path, result)
    )
    
    return {"success": True, "doc_id": doc_id}
Dokumentation
Quick Start

5 minutter guide til at komme i gang

docs/MODULE_QUICKSTART.md
Full Guide

Komplet reference (6000+ ord)

docs/MODULE_SYSTEM.md
Template

Working example modul

app/modules/_template/
✅ DO
  • Brug create_module.py CLI tool
  • Brug table prefix konsistent
  • Enable safety switches i development
  • Test isoleret før enable i production
  • Log med emoji prefix (🔄 ✅ ❌)
  • Dokumenter API endpoints
  • Version moduler semantisk
❌ DON'T
  • Skip table prefix
  • Hardcode credentials
  • Disable safety uden grund
  • Tilgå andre modulers tabeller direkte
  • Glem at køre migrations
  • Commit .env files
  • Enable direkte i production
System Indstillinger
Sags-typer

Administrer tilladte typer for sager

Indlæser...
{% endblock %} {% block extra_js %} {% endblock %}