Files
Benjamin Admin 529c37d91a
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
chore: diverse Bereinigungen und Fixes
- 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>
2026-03-05 17:24:15 +01:00

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"]