All checks were successful
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-ai-compliance (push) Successful in 35s
CI / test-python-backend-compliance (push) Successful in 30s
CI / test-python-document-crawler (push) Successful in 20s
CI / test-python-dsms-gateway (push) Successful in 28s
- admin-compliance: .dockerignore + Dockerfile bereinigt - dsfa-corpus/route.ts + legal-corpus/route.ts entfernt (obsolet) - webhooks/woodpecker/route.ts: minor fix - dsfa/[id]/page.tsx: Refactoring - service_modules.py + README.md: aktualisiert - Migration 028 → 032 umbenannt (legal_documents_extend) - docs: index.md + DEVELOPER.md aktualisiert Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
835 lines
33 KiB
Python
835 lines
33 KiB
Python
"""
|
|
Breakpilot Service Module Registry - Seed Data
|
|
|
|
Contains all 51+ Breakpilot services with:
|
|
- Technical details (port, stack, repository)
|
|
- Data categories processed
|
|
- Applicable regulations
|
|
"""
|
|
|
|
from typing import Dict, List, Any
|
|
|
|
# Service Type Constants
|
|
BACKEND = "backend"
|
|
DATABASE = "database"
|
|
AI = "ai"
|
|
COMMUNICATION = "communication"
|
|
STORAGE = "storage"
|
|
INFRASTRUCTURE = "infrastructure"
|
|
MONITORING = "monitoring"
|
|
SECURITY = "security"
|
|
|
|
# Relevance Level Constants
|
|
CRITICAL = "critical"
|
|
HIGH = "high"
|
|
MEDIUM = "medium"
|
|
LOW = "low"
|
|
|
|
|
|
BREAKPILOT_SERVICES: List[Dict[str, Any]] = [
|
|
# =========================================================================
|
|
# CORE BACKEND SERVICES
|
|
# =========================================================================
|
|
{
|
|
"name": "python-backend",
|
|
"display_name": "Python Backend (FastAPI)",
|
|
"description": "Hauptbackend für API, Frontend-Serving, GDPR-Export und alle Core-Funktionen",
|
|
"service_type": BACKEND,
|
|
"port": 8000,
|
|
"technology_stack": ["Python", "FastAPI", "SQLAlchemy", "PostgreSQL"],
|
|
"repository_path": "/backend",
|
|
"docker_image": "breakpilot-pwa-backend",
|
|
"data_categories": ["user_data", "consent_records", "documents", "learning_data"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "critical",
|
|
"owner_team": "Backend Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": CRITICAL, "notes": "Verarbeitet alle personenbezogenen Daten"},
|
|
{"code": "AIACT", "relevance": HIGH, "notes": "Orchestriert KI-Services"},
|
|
{"code": "DSA", "relevance": MEDIUM, "notes": "Content-Moderation"},
|
|
{"code": "NIS2", "relevance": HIGH, "notes": "Kritische Infrastruktur"},
|
|
]
|
|
},
|
|
{
|
|
"name": "consent-service",
|
|
"display_name": "Go Consent Service",
|
|
"description": "Kernlogik für Consent-Management, Einwilligungsverwaltung und Versionierung",
|
|
"service_type": BACKEND,
|
|
"port": 8081,
|
|
"technology_stack": ["Go", "Gin", "GORM", "PostgreSQL"],
|
|
"repository_path": "/consent-service",
|
|
"docker_image": "breakpilot-pwa-consent-service",
|
|
"data_categories": ["consent_records", "user_preferences", "audit_logs"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "critical",
|
|
"owner_team": "Backend Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": CRITICAL, "notes": "Art. 7 Einwilligung, Art. 30 VVZ"},
|
|
{"code": "TDDDG", "relevance": CRITICAL, "notes": "§ 25 Cookie-Consent"},
|
|
{"code": "BSI-TR-03161-2", "relevance": HIGH, "notes": "Session-Management"},
|
|
]
|
|
},
|
|
{
|
|
"name": "billing-service",
|
|
"display_name": "Billing Service",
|
|
"description": "Zahlungsabwicklung, Abonnements und Rechnungsstellung",
|
|
"service_type": BACKEND,
|
|
"port": 8083,
|
|
"technology_stack": ["Python", "FastAPI", "Stripe API"],
|
|
"repository_path": "/billing-service",
|
|
"docker_image": "breakpilot-pwa-billing",
|
|
"data_categories": ["payment_data", "subscriptions", "invoices"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "critical",
|
|
"owner_team": "Backend Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": CRITICAL, "notes": "Zahlungsdaten = besonders schützenswert"},
|
|
{"code": "DSA", "relevance": LOW, "notes": "Transparenz bei Gebühren"},
|
|
]
|
|
},
|
|
{ # Lehrer-Stack (keine Compliance-Runtime-Dependency)
|
|
"name": "school-service",
|
|
"display_name": "School Service",
|
|
"description": "Schulverwaltung, Klassen, Noten und Zeugnisse",
|
|
"service_type": BACKEND,
|
|
"port": 8084,
|
|
"technology_stack": ["Python", "FastAPI", "PostgreSQL"],
|
|
"repository_path": "/school-service",
|
|
"docker_image": "breakpilot-pwa-school-service",
|
|
"data_categories": ["student_data", "grades", "certificates", "class_data"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "high",
|
|
"owner_team": "Education Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": CRITICAL, "notes": "Schülerdaten = besonderer Schutz"},
|
|
{"code": "BSI-TR-03161-1", "relevance": HIGH, "notes": "Sicherheit für Bildungsanwendungen"},
|
|
]
|
|
},
|
|
{ # Lehrer-Stack (keine Compliance-Runtime-Dependency)
|
|
"name": "calendar-service",
|
|
"display_name": "Calendar Service",
|
|
"description": "Kalender, Termine und Stundenplanung",
|
|
"service_type": BACKEND,
|
|
"port": 8085,
|
|
"technology_stack": ["Python", "FastAPI", "PostgreSQL"],
|
|
"repository_path": "/calendar-service",
|
|
"docker_image": "breakpilot-pwa-calendar",
|
|
"data_categories": ["schedule_data", "appointments"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "medium",
|
|
"owner_team": "Backend Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": MEDIUM, "notes": "Terminbezogene Daten"},
|
|
]
|
|
},
|
|
|
|
# =========================================================================
|
|
# AI / ML SERVICES
|
|
# =========================================================================
|
|
{ # Lehrer-Stack (keine Compliance-Runtime-Dependency)
|
|
"name": "klausur-service",
|
|
"display_name": "Klausur Service (AI Correction)",
|
|
"description": "KI-gestützte Klausurbewertung, PDF-Analyse und Feedback-Generierung",
|
|
"service_type": AI,
|
|
"port": 8086,
|
|
"technology_stack": ["Python", "FastAPI", "Claude API", "PyMuPDF"],
|
|
"repository_path": "/klausur-service",
|
|
"docker_image": "breakpilot-pwa-klausur-service",
|
|
"data_categories": ["exam_papers", "corrections", "student_submissions"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": True,
|
|
"criticality": "high",
|
|
"owner_team": "AI Team",
|
|
"regulations": [
|
|
{"code": "AIACT", "relevance": CRITICAL, "notes": "High-Risk KI im Bildungsbereich Art. 6"},
|
|
{"code": "GDPR", "relevance": CRITICAL, "notes": "Automatisierte Entscheidung Art. 22"},
|
|
{"code": "BSI-TR-03161-2", "relevance": HIGH, "notes": "Input-Validierung für Uploads"},
|
|
]
|
|
},
|
|
{
|
|
"name": "embedding-service",
|
|
"display_name": "Embedding Service",
|
|
"description": "Vektor-Embeddings für semantische Suche und RAG",
|
|
"service_type": AI,
|
|
"port": 8087,
|
|
"technology_stack": ["Python", "FastAPI", "SentenceTransformers", "Qdrant"],
|
|
"repository_path": "/embedding-service",
|
|
"docker_image": "breakpilot-pwa-embedding-service",
|
|
"data_categories": ["document_embeddings", "search_queries"],
|
|
"processes_pii": False,
|
|
"processes_health_data": False,
|
|
"ai_components": True,
|
|
"criticality": "medium",
|
|
"owner_team": "AI Team",
|
|
"regulations": [
|
|
{"code": "AIACT", "relevance": MEDIUM, "notes": "General-Purpose AI System"},
|
|
{"code": "GDPR", "relevance": LOW, "notes": "Keine direkten personenbezogenen Daten"},
|
|
]
|
|
},
|
|
{
|
|
"name": "transcription-worker",
|
|
"display_name": "Transcription Worker",
|
|
"description": "Whisper-basierte Audio-Transkription für Meetings und Videos",
|
|
"service_type": AI,
|
|
"port": None,
|
|
"technology_stack": ["Python", "Whisper", "FFmpeg"],
|
|
"repository_path": "/transcription-service",
|
|
"docker_image": "breakpilot-pwa-transcription",
|
|
"data_categories": ["audio_recordings", "transcripts"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": True,
|
|
"criticality": "medium",
|
|
"owner_team": "AI Team",
|
|
"regulations": [
|
|
{"code": "AIACT", "relevance": MEDIUM, "notes": "Audio-Analyse"},
|
|
{"code": "GDPR", "relevance": HIGH, "notes": "Sprachaufnahmen = biometrische Daten"},
|
|
]
|
|
},
|
|
{
|
|
"name": "llm-gateway",
|
|
"display_name": "LLM Gateway",
|
|
"description": "Zentraler Gateway für alle LLM-Anfragen (Claude, OpenAI, Self-Hosted)",
|
|
"service_type": AI,
|
|
"port": 8088,
|
|
"technology_stack": ["Python", "FastAPI", "LiteLLM"],
|
|
"repository_path": "/llm-gateway",
|
|
"docker_image": "breakpilot-pwa-llm-gateway",
|
|
"data_categories": ["llm_prompts", "llm_responses"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": True,
|
|
"criticality": "high",
|
|
"owner_team": "AI Team",
|
|
"regulations": [
|
|
{"code": "AIACT", "relevance": CRITICAL, "notes": "Orchestrierung von KI-Systemen"},
|
|
{"code": "GDPR", "relevance": HIGH, "notes": "Daten an externe APIs"},
|
|
]
|
|
},
|
|
|
|
# =========================================================================
|
|
# DATABASES
|
|
# =========================================================================
|
|
{
|
|
"name": "postgresql",
|
|
"display_name": "PostgreSQL Database",
|
|
"description": "Primäre relationale Datenbank für alle persistenten Daten",
|
|
"service_type": DATABASE,
|
|
"port": 5432,
|
|
"technology_stack": ["PostgreSQL 15"],
|
|
"repository_path": None,
|
|
"docker_image": "postgres:15",
|
|
"data_categories": ["all_persistent_data"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "critical",
|
|
"owner_team": "Infrastructure",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": CRITICAL, "notes": "Art. 32 Sicherheit der Verarbeitung"},
|
|
{"code": "BSI-TR-03161-3", "relevance": CRITICAL, "notes": "Datenbank-Sicherheit"},
|
|
{"code": "NIS2", "relevance": HIGH, "notes": "Kritische Infrastruktur"},
|
|
]
|
|
},
|
|
{
|
|
"name": "qdrant",
|
|
"display_name": "Qdrant Vector DB",
|
|
"description": "Vektordatenbank für Embeddings und semantische Suche",
|
|
"service_type": DATABASE,
|
|
"port": 6333,
|
|
"technology_stack": ["Qdrant"],
|
|
"repository_path": None,
|
|
"docker_image": "qdrant/qdrant",
|
|
"data_categories": ["vector_embeddings", "document_metadata"],
|
|
"processes_pii": False,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "medium",
|
|
"owner_team": "AI Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": LOW, "notes": "Keine direkten PII"},
|
|
{"code": "BSI-TR-03161-3", "relevance": MEDIUM, "notes": "Datenbank-Sicherheit"},
|
|
]
|
|
},
|
|
{
|
|
"name": "valkey",
|
|
"display_name": "Valkey (Redis Fork)",
|
|
"description": "In-Memory Cache und Message Queue",
|
|
"service_type": DATABASE,
|
|
"port": 6379,
|
|
"technology_stack": ["Valkey"],
|
|
"repository_path": None,
|
|
"docker_image": "valkey/valkey",
|
|
"data_categories": ["session_data", "cache_data", "job_queues"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "high",
|
|
"owner_team": "Infrastructure",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": MEDIUM, "notes": "Session-Daten"},
|
|
{"code": "BSI-TR-03161-2", "relevance": HIGH, "notes": "Session-Management"},
|
|
]
|
|
},
|
|
|
|
# =========================================================================
|
|
# STORAGE
|
|
# =========================================================================
|
|
{
|
|
"name": "minio",
|
|
"display_name": "MinIO Object Storage",
|
|
"description": "S3-kompatibler Object Storage für Dateien, Bilder und Backups",
|
|
"service_type": STORAGE,
|
|
"port": 9000,
|
|
"technology_stack": ["MinIO"],
|
|
"repository_path": None,
|
|
"docker_image": "minio/minio",
|
|
"data_categories": ["uploaded_files", "recordings", "backups", "exports"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "critical",
|
|
"owner_team": "Infrastructure",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": CRITICAL, "notes": "Speicherung von Nutzerdaten"},
|
|
{"code": "BSI-TR-03161-3", "relevance": HIGH, "notes": "Speichersicherheit"},
|
|
]
|
|
},
|
|
|
|
# =========================================================================
|
|
# COMMUNICATION SERVICES
|
|
# =========================================================================
|
|
{
|
|
"name": "matrix-synapse",
|
|
"display_name": "Matrix Synapse",
|
|
"description": "Dezentraler Chat-Server für Messaging",
|
|
"service_type": COMMUNICATION,
|
|
"port": 8008,
|
|
"technology_stack": ["Python", "Matrix Protocol", "PostgreSQL"],
|
|
"repository_path": None,
|
|
"docker_image": "matrixdotorg/synapse",
|
|
"data_categories": ["messages", "chat_history", "user_presence"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "high",
|
|
"owner_team": "Communication Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": CRITICAL, "notes": "Chat-Inhalte"},
|
|
{"code": "DSA", "relevance": HIGH, "notes": "Content-Moderation"},
|
|
]
|
|
},
|
|
{
|
|
"name": "jitsi-meet",
|
|
"display_name": "Jitsi Meet",
|
|
"description": "WebRTC-basierte Videokonferenzen",
|
|
"service_type": COMMUNICATION,
|
|
"port": 8443,
|
|
"technology_stack": ["JavaScript", "WebRTC", "Prosody"],
|
|
"repository_path": None,
|
|
"docker_image": "jitsi/web",
|
|
"data_categories": ["video_streams", "audio_streams", "screen_shares"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "high",
|
|
"owner_team": "Communication Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": CRITICAL, "notes": "Video-/Audiodaten"},
|
|
{"code": "BSI-TR-03161-2", "relevance": HIGH, "notes": "WebRTC-Sicherheit"},
|
|
]
|
|
},
|
|
{
|
|
"name": "jitsi-prosody",
|
|
"display_name": "Jitsi Prosody (XMPP)",
|
|
"description": "XMPP-Server für Jitsi Signaling",
|
|
"service_type": COMMUNICATION,
|
|
"port": 5222,
|
|
"technology_stack": ["Lua", "Prosody", "XMPP"],
|
|
"repository_path": None,
|
|
"docker_image": "jitsi/prosody",
|
|
"data_categories": ["signaling_data", "presence"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "high",
|
|
"owner_team": "Communication Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": MEDIUM, "notes": "Signaling-Metadaten"},
|
|
]
|
|
},
|
|
{
|
|
"name": "jitsi-jicofo",
|
|
"display_name": "Jitsi Jicofo",
|
|
"description": "Jitsi Focus Component für Konferenzkoordination",
|
|
"service_type": COMMUNICATION,
|
|
"port": None,
|
|
"technology_stack": ["Java"],
|
|
"repository_path": None,
|
|
"docker_image": "jitsi/jicofo",
|
|
"data_categories": ["conference_metadata"],
|
|
"processes_pii": False,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "medium",
|
|
"owner_team": "Communication Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": LOW, "notes": "Nur Metadaten"},
|
|
]
|
|
},
|
|
{
|
|
"name": "jitsi-jvb",
|
|
"display_name": "Jitsi JVB (Video Bridge)",
|
|
"description": "Video Bridge für Multi-Party Konferenzen",
|
|
"service_type": COMMUNICATION,
|
|
"port": 10000,
|
|
"technology_stack": ["Java", "WebRTC"],
|
|
"repository_path": None,
|
|
"docker_image": "jitsi/jvb",
|
|
"data_categories": ["video_streams"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "high",
|
|
"owner_team": "Communication Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": HIGH, "notes": "Video-Routing"},
|
|
{"code": "BSI-TR-03161-2", "relevance": MEDIUM, "notes": "WebRTC-Sicherheit"},
|
|
]
|
|
},
|
|
{
|
|
"name": "jibri",
|
|
"display_name": "Jitsi Jibri (Recording)",
|
|
"description": "Meeting-Aufzeichnung und Streaming",
|
|
"service_type": COMMUNICATION,
|
|
"port": None,
|
|
"technology_stack": ["Java", "FFmpeg", "Chrome"],
|
|
"repository_path": None,
|
|
"docker_image": "jitsi/jibri",
|
|
"data_categories": ["recordings", "video_files"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "high",
|
|
"owner_team": "Communication Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": CRITICAL, "notes": "Video-Aufzeichnungen"},
|
|
]
|
|
},
|
|
|
|
# =========================================================================
|
|
# CONTENT SERVICES
|
|
# =========================================================================
|
|
{
|
|
"name": "h5p-service",
|
|
"display_name": "H5P Content Service",
|
|
"description": "Interaktive Lerninhalte (H5P)",
|
|
"service_type": BACKEND,
|
|
"port": 8082,
|
|
"technology_stack": ["PHP", "H5P Framework"],
|
|
"repository_path": "/h5p-service",
|
|
"docker_image": "breakpilot-pwa-h5p",
|
|
"data_categories": ["learning_content", "user_progress"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "medium",
|
|
"owner_team": "Education Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": MEDIUM, "notes": "Lernfortschritt"},
|
|
]
|
|
},
|
|
{
|
|
"name": "content-db",
|
|
"display_name": "Content Database",
|
|
"description": "Dedizierte DB für Content-Services",
|
|
"service_type": DATABASE,
|
|
"port": 5433,
|
|
"technology_stack": ["PostgreSQL 15"],
|
|
"repository_path": None,
|
|
"docker_image": "postgres:15",
|
|
"data_categories": ["content_metadata"],
|
|
"processes_pii": False,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "medium",
|
|
"owner_team": "Infrastructure",
|
|
"regulations": [
|
|
{"code": "BSI-TR-03161-3", "relevance": MEDIUM, "notes": "Datenbank-Sicherheit"},
|
|
]
|
|
},
|
|
|
|
# =========================================================================
|
|
# SECURITY SERVICES
|
|
# =========================================================================
|
|
{
|
|
"name": "vault",
|
|
"display_name": "HashiCorp Vault",
|
|
"description": "Secrets Management und Encryption as a Service",
|
|
"service_type": SECURITY,
|
|
"port": 8200,
|
|
"technology_stack": ["Vault"],
|
|
"repository_path": "/vault",
|
|
"docker_image": "hashicorp/vault",
|
|
"data_categories": ["secrets", "encryption_keys", "api_credentials"],
|
|
"processes_pii": False,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "critical",
|
|
"owner_team": "Security Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": HIGH, "notes": "Art. 32 Verschlüsselung"},
|
|
{"code": "BSI-TR-03161-1", "relevance": CRITICAL, "notes": "Schlüsselverwaltung"},
|
|
{"code": "BSI-TR-03161-3", "relevance": CRITICAL, "notes": "O.Cryp Prüfaspekte"},
|
|
]
|
|
},
|
|
|
|
# =========================================================================
|
|
# INFRASTRUCTURE
|
|
# =========================================================================
|
|
{
|
|
"name": "traefik",
|
|
"display_name": "Traefik Reverse Proxy",
|
|
"description": "Reverse Proxy, Load Balancer und TLS Termination",
|
|
"service_type": INFRASTRUCTURE,
|
|
"port": 443,
|
|
"technology_stack": ["Traefik", "Let's Encrypt"],
|
|
"repository_path": None,
|
|
"docker_image": "traefik",
|
|
"data_categories": ["access_logs", "request_metadata"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "critical",
|
|
"owner_team": "Infrastructure",
|
|
"regulations": [
|
|
{"code": "NIS2", "relevance": HIGH, "notes": "Netzwerksicherheit"},
|
|
{"code": "BSI-TR-03161-2", "relevance": HIGH, "notes": "TLS-Konfiguration"},
|
|
]
|
|
},
|
|
|
|
# =========================================================================
|
|
# MONITORING
|
|
# =========================================================================
|
|
{
|
|
"name": "loki",
|
|
"display_name": "Grafana Loki",
|
|
"description": "Log-Aggregation und -Analyse",
|
|
"service_type": MONITORING,
|
|
"port": 3100,
|
|
"technology_stack": ["Loki", "Grafana"],
|
|
"repository_path": None,
|
|
"docker_image": "grafana/loki",
|
|
"data_categories": ["logs", "audit_trails"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "high",
|
|
"owner_team": "Infrastructure",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": MEDIUM, "notes": "Log-Retention"},
|
|
{"code": "BSI-TR-03161-3", "relevance": HIGH, "notes": "O.Log Prüfaspekte"},
|
|
]
|
|
},
|
|
{
|
|
"name": "grafana",
|
|
"display_name": "Grafana",
|
|
"description": "Dashboards und Visualisierung",
|
|
"service_type": MONITORING,
|
|
"port": 3000,
|
|
"technology_stack": ["Grafana"],
|
|
"repository_path": None,
|
|
"docker_image": "grafana/grafana",
|
|
"data_categories": ["metrics", "dashboards"],
|
|
"processes_pii": False,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "medium",
|
|
"owner_team": "Infrastructure",
|
|
"regulations": [
|
|
{"code": "BSI-TR-03161-3", "relevance": MEDIUM, "notes": "Monitoring"},
|
|
]
|
|
},
|
|
{
|
|
"name": "prometheus",
|
|
"display_name": "Prometheus",
|
|
"description": "Metrics Collection und Alerting",
|
|
"service_type": MONITORING,
|
|
"port": 9090,
|
|
"technology_stack": ["Prometheus"],
|
|
"repository_path": None,
|
|
"docker_image": "prom/prometheus",
|
|
"data_categories": ["metrics", "alerts"],
|
|
"processes_pii": False,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "medium",
|
|
"owner_team": "Infrastructure",
|
|
"regulations": [
|
|
{"code": "NIS2", "relevance": MEDIUM, "notes": "Incident Detection"},
|
|
]
|
|
},
|
|
|
|
# =========================================================================
|
|
# WEBSITE / FRONTEND
|
|
# =========================================================================
|
|
{
|
|
"name": "website",
|
|
"display_name": "Next.js Website",
|
|
"description": "Frontend-Anwendung für Nutzer und Admin-Panel",
|
|
"service_type": BACKEND,
|
|
"port": 3000,
|
|
"technology_stack": ["Next.js", "React", "TypeScript", "TailwindCSS"],
|
|
"repository_path": "/website",
|
|
"docker_image": "breakpilot-pwa-website",
|
|
"data_categories": ["frontend_state", "ui_preferences"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "high",
|
|
"owner_team": "Frontend Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": HIGH, "notes": "Cookie-Consent UI"},
|
|
{"code": "TDDDG", "relevance": CRITICAL, "notes": "Cookie-Banner"},
|
|
{"code": "DSA", "relevance": MEDIUM, "notes": "Transparenz-Anforderungen"},
|
|
{"code": "BSI-TR-03161-2", "relevance": HIGH, "notes": "XSS-Prävention, CSRF"},
|
|
]
|
|
},
|
|
|
|
# =========================================================================
|
|
# ERP / BUSINESS
|
|
# =========================================================================
|
|
{
|
|
"name": "erpnext",
|
|
"display_name": "ERPNext",
|
|
"description": "Enterprise Resource Planning für Schulverwaltung",
|
|
"service_type": BACKEND,
|
|
"port": 8080,
|
|
"technology_stack": ["Python", "Frappe", "MariaDB"],
|
|
"repository_path": None,
|
|
"docker_image": "frappe/erpnext",
|
|
"data_categories": ["business_data", "employee_data", "financial_data"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "high",
|
|
"owner_team": "Business Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": CRITICAL, "notes": "Mitarbeiterdaten"},
|
|
]
|
|
},
|
|
{
|
|
"name": "erpnext-db",
|
|
"display_name": "ERPNext Database (MariaDB)",
|
|
"description": "Dedizierte MariaDB für ERPNext",
|
|
"service_type": DATABASE,
|
|
"port": 3306,
|
|
"technology_stack": ["MariaDB"],
|
|
"repository_path": None,
|
|
"docker_image": "mariadb",
|
|
"data_categories": ["erp_data"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "high",
|
|
"owner_team": "Infrastructure",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": HIGH, "notes": "ERP-Daten"},
|
|
{"code": "BSI-TR-03161-3", "relevance": HIGH, "notes": "Datenbank-Sicherheit"},
|
|
]
|
|
},
|
|
|
|
# =========================================================================
|
|
# COMPLIANCE SERVICE (Self-Reference)
|
|
# =========================================================================
|
|
{
|
|
"name": "compliance-module",
|
|
"display_name": "Compliance & Audit Module",
|
|
"description": "Dieses Modul - Compliance-Management, Audit-Vorbereitung, Risiko-Tracking",
|
|
"service_type": BACKEND,
|
|
"port": None,
|
|
"technology_stack": ["Python", "FastAPI", "SQLAlchemy"],
|
|
"repository_path": "/backend/compliance",
|
|
"docker_image": None,
|
|
"data_categories": ["compliance_data", "audit_records", "risk_assessments"],
|
|
"processes_pii": False,
|
|
"processes_health_data": False,
|
|
"ai_components": True,
|
|
"criticality": "high",
|
|
"owner_team": "Compliance Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": HIGH, "notes": "Art. 30 VVZ, Art. 35 DPIA"},
|
|
{"code": "AIACT", "relevance": MEDIUM, "notes": "KI-Interpretations-Feature"},
|
|
]
|
|
},
|
|
|
|
# =========================================================================
|
|
# DSMS - Dezentrales Speichersystem (Private IPFS)
|
|
# =========================================================================
|
|
{
|
|
"name": "dsms-node",
|
|
"display_name": "DSMS Node (IPFS)",
|
|
"description": "Dezentraler IPFS-Node für verteiltes Speichersystem",
|
|
"service_type": STORAGE,
|
|
"port": 5001,
|
|
"technology_stack": ["IPFS", "Go"],
|
|
"repository_path": "/dsms-node",
|
|
"docker_image": "breakpilot-pwa-dsms-node",
|
|
"data_categories": ["distributed_files", "content_hashes"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "medium",
|
|
"owner_team": "Infrastructure",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": HIGH, "notes": "Dezentrale Datenspeicherung"},
|
|
{"code": "BSI-TR-03161-3", "relevance": MEDIUM, "notes": "Speichersicherheit"},
|
|
]
|
|
},
|
|
{
|
|
"name": "dsms-gateway",
|
|
"display_name": "DSMS Gateway",
|
|
"description": "REST API Gateway für DSMS/IPFS Zugriff",
|
|
"service_type": BACKEND,
|
|
"port": 8082,
|
|
"technology_stack": ["Python", "FastAPI"],
|
|
"repository_path": "/dsms-gateway",
|
|
"docker_image": "breakpilot-pwa-dsms-gateway",
|
|
"data_categories": ["file_metadata", "access_logs"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "medium",
|
|
"owner_team": "Backend Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": MEDIUM, "notes": "API für Dateizugriff"},
|
|
]
|
|
},
|
|
|
|
# =========================================================================
|
|
# ADDITIONAL INFRASTRUCTURE
|
|
# =========================================================================
|
|
{
|
|
"name": "mailpit",
|
|
"display_name": "Mailpit (Development Mail Server)",
|
|
"description": "Lokaler E-Mail-Server für Entwicklung und Testing",
|
|
"service_type": INFRASTRUCTURE,
|
|
"port": 8025,
|
|
"technology_stack": ["Go"],
|
|
"repository_path": None,
|
|
"docker_image": "axllent/mailpit",
|
|
"data_categories": ["test_emails"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "low",
|
|
"owner_team": "Infrastructure",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": LOW, "notes": "Nur für Entwicklung"},
|
|
]
|
|
},
|
|
{
|
|
"name": "backup",
|
|
"display_name": "Database Backup Service",
|
|
"description": "Automatisches PostgreSQL Backup (täglich 2 Uhr)",
|
|
"service_type": INFRASTRUCTURE,
|
|
"port": None,
|
|
"technology_stack": ["PostgreSQL Tools"],
|
|
"repository_path": None,
|
|
"docker_image": "postgres:16-alpine",
|
|
"data_categories": ["database_backups"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "critical",
|
|
"owner_team": "Infrastructure",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": CRITICAL, "notes": "Art. 32 Backup-Pflicht"},
|
|
{"code": "BSI-TR-03161-3", "relevance": CRITICAL, "notes": "O.Back_1 Datensicherung"},
|
|
]
|
|
},
|
|
|
|
# =========================================================================
|
|
# BREAKPILOT DRIVE - Unity WebGL Lernspiel
|
|
# =========================================================================
|
|
{
|
|
"name": "breakpilot-drive",
|
|
"display_name": "Breakpilot Drive (Unity Game)",
|
|
"description": "Unity WebGL Lernspiel mit LLM-Integration",
|
|
"service_type": BACKEND,
|
|
"port": 3001,
|
|
"technology_stack": ["Unity", "WebGL", "Nginx"],
|
|
"repository_path": "/breakpilot-drive",
|
|
"docker_image": "breakpilot-pwa-drive",
|
|
"data_categories": ["game_progress", "player_data", "leaderboards"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": True,
|
|
"criticality": "medium",
|
|
"owner_team": "Education Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": MEDIUM, "notes": "Spieldaten und Fortschritt"},
|
|
{"code": "AIACT", "relevance": MEDIUM, "notes": "LLM-Integration"},
|
|
]
|
|
},
|
|
|
|
# =========================================================================
|
|
# CAMUNDA - BPMN Workflow Engine
|
|
# =========================================================================
|
|
{
|
|
"name": "camunda",
|
|
"display_name": "Camunda BPMN Platform",
|
|
"description": "Workflow Engine für Business Process Automation",
|
|
"service_type": BACKEND,
|
|
"port": 8089,
|
|
"technology_stack": ["Java", "Camunda", "PostgreSQL"],
|
|
"repository_path": None,
|
|
"docker_image": "camunda/camunda-bpm-platform",
|
|
"data_categories": ["workflow_instances", "process_variables"],
|
|
"processes_pii": True,
|
|
"processes_health_data": False,
|
|
"ai_components": False,
|
|
"criticality": "medium",
|
|
"owner_team": "Backend Team",
|
|
"regulations": [
|
|
{"code": "GDPR", "relevance": MEDIUM, "notes": "Workflow-Daten können PII enthalten"},
|
|
]
|
|
},
|
|
]
|
|
|
|
|
|
def get_service_count() -> int:
|
|
"""Returns the number of registered services."""
|
|
return len(BREAKPILOT_SERVICES)
|
|
|
|
|
|
def get_services_by_type(service_type: str) -> List[Dict[str, Any]]:
|
|
"""Returns all services of a specific type."""
|
|
return [s for s in BREAKPILOT_SERVICES if s["service_type"] == service_type]
|
|
|
|
|
|
def get_services_processing_pii() -> List[Dict[str, Any]]:
|
|
"""Returns all services that process PII."""
|
|
return [s for s in BREAKPILOT_SERVICES if s["processes_pii"]]
|
|
|
|
|
|
def get_services_with_ai() -> List[Dict[str, Any]]:
|
|
"""Returns all services with AI components."""
|
|
return [s for s in BREAKPILOT_SERVICES if s["ai_components"]]
|
|
|
|
|
|
def get_critical_services() -> List[Dict[str, Any]]:
|
|
"""Returns all critical services."""
|
|
return [s for s in BREAKPILOT_SERVICES if s["criticality"] == "critical"]
|