# BreakPilot PWA - System-Architektur ## Übersicht BreakPilot ist eine modulare Bildungsplattform für Lehrkräfte mit folgenden Hauptkomponenten: ``` ┌─────────────────────────────────────────────────────────────────────┐ │ Browser │ │ ┌───────────────────────────────────────────────────────────────┐ │ │ │ Frontend (Studio UI) │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │ │ │ │ │Dashboard │ │Worksheets│ │Correction│ │Letters/Companion │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────────────┘ │ │ │ └───────────────────────────────────────────────────────────────┘ │ └───────────────────────────┬─────────────────────────────────────────┘ │ HTTP/REST ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ Python Backend (FastAPI) │ │ Port 8000 │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ API Layer │ │ │ │ /api/worksheets /api/corrections /api/letters /api/state │ │ │ │ /api/school /api/certificates /api/messenger /api/jitsi │ │ │ └────────────────────────────────────────────────────────────────┘ │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ Service Layer │ │ │ │ FileProcessor │ PDFService │ ContentGenerators │ StateEngine │ │ │ └────────────────────────────────────────────────────────────────┘ │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌─────────────┼─────────────┐ ▼ ▼ ▼ ┌─────────────────┐ ┌───────────────┐ ┌──────────────┐ ┌──────────────┐ │ Go Consent │ │ PostgreSQL │ │ LLM Gateway │ │ HashiCorp │ │ Service │ │ Database │ │ (optional) │ │ Vault │ │ Port 8081 │ │ Port 5432 │ │ │ │ Port 8200 │ └─────────────────┘ └───────────────┘ └──────────────┘ └──────────────┘ ``` ## Komponenten ### 1. Admin Frontend (Next.js Website) Das **Admin Frontend** ist eine vollständige Next.js 15 Anwendung für Developer und Administratoren: **Technologie:** Next.js 15, React 18, TypeScript, Tailwind CSS **Container:** `breakpilot-pwa-website` auf **Port 3000** **Verzeichnis:** `/website` | Modul | Route | Beschreibung | |-------|-------|--------------| | Dashboard | `/admin` | Übersicht & Statistiken | | GPU Infrastruktur | `/admin/gpu` | vast.ai GPU Management | | Consent Verwaltung | `/admin/consent` | Rechtliche Dokumente & Versionen | | Datenschutzanfragen | `/admin/dsr` | DSGVO Art. 15-21 Anfragen | | DSMS | `/admin/dsms` | Datenschutz-Management-System | | Education Search | `/admin/edu-search` | Bildungsquellen & Crawler | | Personensuche | `/admin/staff-search` | Uni-Mitarbeiter & Publikationen | | Uni-Crawler | `/admin/uni-crawler` | Universitäts-Crawling Orchestrator | | LLM Vergleich | `/admin/llm-compare` | KI-Provider Vergleich | | PCA Platform | `/admin/pca-platform` | Bot-Erkennung & Monetarisierung | | Production Backlog | `/admin/backlog` | Go-Live Checkliste | | Developer Docs | `/admin/docs` | API & Architektur Dokumentation | | Kommunikation | `/admin/communication` | Matrix & Jitsi Monitoring | | **Security** | `/admin/security` | DevSecOps Dashboard, Scans, Findings | | **SBOM** | `/admin/sbom` | Software Bill of Materials | ### 2. Lehrer Frontend (Studio UI) Das **Lehrer Frontend** ist ein Single-Page-Application-ähnliches System für Lehrkräfte, das in Python-Modulen organisiert ist: | Modul | Datei | Beschreibung | |-------|-------|--------------| | Base | `frontend/modules/base.py` | TopBar, Sidebar, Theme, Login | | Dashboard | `frontend/modules/dashboard.py` | Übersichtsseite | | Worksheets | `frontend/modules/worksheets.py` | Lerneinheiten-Generator | | Correction | `frontend/modules/correction.py` | OCR-Klausurkorrektur | | Letters | `frontend/modules/letters.py` | Elternkommunikation | | Companion | `frontend/modules/companion.py` | Begleiter-Modus mit State Engine | | School | `frontend/modules/school.py` | Schulverwaltung | | Gradebook | `frontend/modules/gradebook.py` | Notenbuch | | ContentCreator | `frontend/modules/content_creator.py` | H5P Content Creator | | ContentFeed | `frontend/modules/content_feed.py` | Content Discovery | | Messenger | `frontend/modules/messenger.py` | Matrix Messenger | | Jitsi | `frontend/modules/jitsi.py` | Videokonferenzen | | **KlausurKorrektur** | `frontend/modules/klausur_korrektur.py` | **Abitur-Klausurkorrektur (15-Punkte-System)** | | **AbiturDocsAdmin** | `frontend/modules/abitur_docs_admin.py` | **Admin für Abitur-Dokumente (NiBiS)** | Jedes Modul exportiert: - `get_css()` - CSS-Styles - `get_html()` - HTML-Template - `get_js()` - JavaScript-Logik ### 2. Python Backend (FastAPI) #### API-Router | Router | Präfix | Beschreibung | |--------|--------|--------------| | `worksheets_api` | `/api/worksheets` | Content-Generatoren (MC, Cloze, Mindmap, Quiz) | | `correction_api` | `/api/corrections` | OCR-Pipeline für Klausurkorrektur | | `letters_api` | `/api/letters` | Elternbriefe mit GFK-Integration | | `state_engine_api` | `/api/state` | Begleiter-Modus Phasen & Vorschläge | | `school_api` | `/api/school` | Schulverwaltung (Proxy zu school-service) | | `certificates_api` | `/api/certificates` | Zeugniserstellung | | `messenger_api` | `/api/messenger` | Matrix Messenger Integration | | `jitsi_api` | `/api/jitsi` | Jitsi Meeting-Einladungen | | `consent_api` | `/api/consent` | DSGVO Consent-Verwaltung | | `gdpr_api` | `/api/gdpr` | GDPR-Export | | **`klausur_korrektur_api`** | `/api/klausur-korrektur` | **Abitur-Klausuren (15-Punkte, Gutachten, Fairness)** | | **`abitur_docs_api`** | `/api/abitur-docs` | **NiBiS-Dokumentenverwaltung für RAG** | #### Services | Service | Datei | Beschreibung | |---------|-------|--------------| | FileProcessor | `services/file_processor.py` | OCR mit PaddleOCR | | PDFService | `services/pdf_service.py` | PDF-Generierung | | ContentGenerators | `services/content_generators/` | MC, Cloze, Mindmap, Quiz | | StateEngine | `state_engine/` | Phasen-Management & Antizipation | ### 3. Klausur-Korrektur System (Abitur) Das Klausur-Korrektur-System implementiert die vollständige Abitur-Bewertungspipeline: ``` ┌─────────────────────────────────────────────────────────────────────┐ │ Klausur-Korrektur Modul │ │ │ │ ┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ │ │ Modus-Wahl │───►│ Text-Quellen & │───►│ Erwartungs- │ │ │ │ LandesAbi/ │ │ Rights-Gate │ │ horizont │ │ │ │ Vorabitur │ └──────────────────┘ └─────────────────┘ │ │ └─────────────┘ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ Schülerarbeiten-Pipeline │ │ │ │ Upload → OCR → KI-Bewertung → Gutachten → 15-Punkte-Note │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌────────────────────┐ ┌──────────────────────────────────┐ │ │ │ Erst-/Zweitprüfer │───►│ Fairness-Analyse & PDF-Export │ │ │ └────────────────────┘ └──────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────┘ ``` #### 15-Punkte-Notensystem Das System verwendet den deutschen Abitur-Notenschlüssel: | Punkte | Prozent | Note | |--------|---------|------| | 15-13 | 95-85% | 1+/1/1- | | 12-10 | 80-70% | 2+/2/2- | | 9-7 | 65-55% | 3+/3/3- | | 6-4 | 50-40% | 4+/4/4- | | 3-1 | 33-20% | 5+/5/5- | | 0 | <20% | 6 | #### Bewertungskriterien | Kriterium | Gewicht | Beschreibung | |-----------|---------|--------------| | Rechtschreibung | 15% | Orthografie | | Grammatik | 15% | Grammatik & Syntax | | **Inhalt** | **40%** | Inhaltliche Qualität (höchste Gewichtung) | | Struktur | 15% | Aufbau & Gliederung | | Stil | 15% | Ausdruck & Stil | #### Abitur-Docs RAG-System ``` ┌─────────────────────────────────────────────────────────────────────┐ │ Abitur-Docs Admin │ │ │ │ ┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ │ │ ZIP-Import │───►│ KI-Datei- │───►│ Metadaten- │ │ │ │ NiBiS PDFs │ │ erkennung │ │ Bestätigung │ │ │ └─────────────┘ └──────────────────┘ └─────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ Vector Store (ChromaDB) │ │ │ │ Indexierung für RAG-Suche nach Fach, Jahr, Niveau │ │ │ └─────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────┘ ``` NiBiS-Dateinamen werden automatisch erkannt: - `2025_Deutsch_eA_I.pdf` → Deutsch, erhöhtes Niveau, Aufgabe I - `2025_Deutsch_eA_I_EWH.pdf` → Erwartungshorizont ### 4. State Engine (Begleiter-Modus) Das State Engine Modul implementiert proaktive Unterstützung für Lehrkräfte: ``` state_engine/ ├── __init__.py # Exports ├── models.py # SchoolYearPhase, TeacherContext, Suggestion ├── rules.py # 15+ Antizipations-Regeln └── engine.py # AnticipationEngine, PhaseService ``` #### Schuljahr-Phasen 1. `ONBOARDING` - Ersteinrichtung 2. `SCHOOL_YEAR_START` - Schuljahresbeginn 3. `TEACHING_SETUP` - Unterrichtsvorbereitung 4. `PERFORMANCE_1` - 1. Leistungsphase 5. `SEMESTER_END` - Halbjahreszeugnisse 6. `PERFORMANCE_2` - 2. Leistungsphase 7. `EXAM_PHASE` - Prüfungsphase 8. `YEAR_END` - Schuljahresende 9. `ARCHIVED` - Archiviert #### Antizipations-Regeln Regeln evaluieren den `TeacherContext` und generieren `Suggestion`-Objekte: ```python @dataclass class Rule: id: str name: str phases: List[SchoolYearPhase] condition: Callable[[TeacherContext], bool] suggestion_builder: Callable[[TeacherContext], Suggestion] ``` ### 4. Go Consent Service Verwaltet DSGVO-Einwilligungen: ``` consent-service/ ├── cmd/server/ # Main entry point ├── internal/ │ ├── handlers/ # HTTP Handler │ ├── services/ # Business Logic │ ├── models/ # Data Models │ └── middleware/ # Auth Middleware └── migrations/ # SQL Migrations ``` ### 5. LLM Gateway (Optional) Wenn `LLM_GATEWAY_ENABLED=true`: ``` llm_gateway/ ├── routes/ │ ├── chat.py # Chat-Completion API │ ├── communication.py # GFK-Validierung │ ├── edu_search_seeds.py # Bildungssuche │ └── legal_crawler.py # Schulgesetz-Crawler └── services/ └── communication_service.py ``` ## Datenfluss ### Worksheet-Generierung ``` User Input → Frontend (worksheets.py) ↓ POST /api/worksheets/generate/multiple-choice ↓ worksheets_api.py → MCGenerator (services/content_generators/) ↓ Optional: LLM für erweiterte Generierung ↓ Response: WorksheetContent → Frontend rendert Ergebnis ``` ### Klausurkorrektur ``` File Upload → Frontend (correction.py) ↓ POST /api/corrections/ (erstellen) POST /api/corrections/{id}/upload (Datei) ↓ Background Task: OCR via FileProcessor ↓ Poll GET /api/corrections/{id} bis status="ocr_complete" ↓ POST /api/corrections/{id}/analyze ↓ Review Interface → PUT /api/corrections/{id} (Anpassungen) ↓ GET /api/corrections/{id}/export-pdf ``` ### State Engine Flow ``` Frontend Companion-Mode aktiviert ↓ GET /api/state/dashboard?teacher_id=xxx ↓ AnticipationEngine.get_suggestions(context) ↓ Rules evaluieren TeacherContext ↓ Priorisierte Vorschläge (max 5) zurück ↓ User führt Aktion aus ↓ POST /api/state/milestone (Meilenstein abschließen) ↓ PhaseService.check_and_transition() prüft Phasenübergang ``` ## Sicherheit ### Authentifizierung & Autorisierung BreakPilot verwendet einen **Hybrid-Ansatz**: | Schicht | Komponente | Beschreibung | |---------|------------|--------------| | **Authentifizierung** | Keycloak (Prod) / Lokales JWT (Dev) | Token-Validierung via JWKS oder HS256 | | **Autorisierung** | rbac.py (Eigenentwicklung) | Domaenenspezifische Berechtigungen | Siehe: [docs/architecture/auth-system.md](auth-system.md) ### Basis-Rollen | Rolle | Beschreibung | |-------|--------------| | `user` | Normaler Benutzer | | `teacher` / `lehrer` | Lehrkraft | | `admin` | Administrator | | `data_protection_officer` | Datenschutzbeauftragter | ### Erweiterte Rollen (rbac.py) 15+ domaenenspezifische Rollen fuer Klausurkorrektur und Zeugnisse: - `erstkorrektor`, `zweitkorrektor`, `drittkorrektor` - `klassenlehrer`, `fachlehrer`, `fachvorsitz` - `schulleitung`, `zeugnisbeauftragter`, `sekretariat` ### Sicherheitsfeatures - JWT-basierte Authentifizierung (RS256/HS256) - CORS konfiguriert für Frontend-Zugriff - DSGVO-konformes Consent-Management - **HashiCorp Vault** fuer Secrets-Management (keine hardcodierten Secrets) - Bundesland-spezifische Policy-Sets - **DevSecOps Pipeline** mit automatisierten Security-Scans (SAST, SCA, Secrets Detection) Siehe: - [docs/architecture/secrets-management.md](secrets-management.md) - [docs/architecture/devsecops.md](devsecops.md) ## Deployment ```yaml services: backend: build: ./backend ports: ["8000:8000"] environment: - DATABASE_URL=postgresql://... - LLM_GATEWAY_ENABLED=false consent-service: build: ./consent-service ports: ["8081:8081"] postgres: image: postgres:15 volumes: - pgdata:/var/lib/postgresql/data ``` ## Erweiterung Neues Frontend-Modul hinzufügen: 1. Modul erstellen: `frontend/modules/new_module.py` 2. Klasse mit `get_css()`, `get_html()`, `get_js()` implementieren 3. In `frontend/modules/__init__.py` importieren und exportieren 4. Optional: Zugehörige API in `new_module_api.py` erstellen 5. In `main.py` Router registrieren Neue State Engine Regel: 1. In `state_engine/rules.py` neue `Rule` definieren 2. `condition` und `suggestion_builder` Funktionen implementieren 3. Zur `RULES` Liste hinzufügen 4. Passende `phases` angeben