Python (6 files in klausur-service): - rbac.py (1,132 → 4), admin_api.py (1,012 → 4) - routes/eh.py (1,111 → 4), ocr_pipeline_geometry.py (1,105 → 5) Python (2 files in backend-lehrer): - unit_api.py (1,226 → 6), game_api.py (1,129 → 5) Website (6 page files): - 4x klausur-korrektur pages (1,249-1,328 LOC each) → shared components in website/components/klausur-korrektur/ (17 shared files) - companion (1,057 → 10), magic-help (1,017 → 8) All re-export barrels preserve backward compatibility. Zero import errors verified. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
120 lines
6.9 KiB
TypeScript
120 lines
6.9 KiB
TypeScript
// ==================== SYSTEM INFO CONFIG ====================
|
|
|
|
export const companionSystemInfo = {
|
|
title: 'Companion Module System Info',
|
|
description: 'Technische Details zur Classroom State Machine',
|
|
version: '1.1.0',
|
|
architecture: {
|
|
layers: [
|
|
{
|
|
title: 'Frontend Layer',
|
|
components: [
|
|
'companion.py (Lesson-Modus UI)',
|
|
'Mode Toggle (Begleiter/Stunde/Klassisch)',
|
|
'Timer Display Component',
|
|
'Phase Timeline Component',
|
|
'Suggestions Cards',
|
|
'Material Design Icons (CDN)',
|
|
],
|
|
color: 'bg-blue-50',
|
|
},
|
|
{
|
|
title: 'API Layer',
|
|
components: [
|
|
'classroom_api.py (FastAPI Router)',
|
|
'POST /sessions - Session erstellen',
|
|
'POST /sessions/{id}/start - Stunde starten',
|
|
'POST /sessions/{id}/next-phase - Naechste Phase',
|
|
'POST /sessions/{id}/pause - Timer pausieren',
|
|
'POST /sessions/{id}/extend - Phase verlaengern',
|
|
'GET /sessions/{id}/timer - Timer Status',
|
|
'GET /sessions/{id}/suggestions - Vorschlaege',
|
|
'GET /history/{teacher_id} - Session History',
|
|
'GET /health - Health Check mit DB-Status',
|
|
'GET/PUT /v1/context - Schuljahres-Kontext',
|
|
'GET/POST/DELETE /v1/events - Events CRUD',
|
|
'GET/POST/DELETE /v1/routines - Routinen CRUD',
|
|
'GET /v1/federal-states, /v1/school-types, etc.',
|
|
],
|
|
color: 'bg-green-50',
|
|
},
|
|
{
|
|
title: 'Engine Layer',
|
|
components: [
|
|
'classroom_engine/ Package',
|
|
'models.py - LessonPhase, LessonSession',
|
|
'fsm.py - LessonStateMachine',
|
|
'timer.py - PhaseTimer',
|
|
'suggestions.py - SuggestionEngine',
|
|
'context_models.py - TeacherContextDB, SchoolyearEventDB, RecurringRoutineDB',
|
|
'antizipation.py - AntizipationsEngine (geplant)',
|
|
],
|
|
color: 'bg-amber-50',
|
|
},
|
|
{
|
|
title: 'Storage Layer',
|
|
components: [
|
|
'Hybrid Storage (Memory + PostgreSQL)',
|
|
'SessionRepository (CRUD)',
|
|
'TeacherSettingsRepository',
|
|
'TeacherContextRepository (Phase 8)',
|
|
'SchoolyearEventRepository (Phase 8)',
|
|
'RecurringRoutineRepository (Phase 8)',
|
|
'Alembic Migrations (007: Phase 8 Tables)',
|
|
'Session History API',
|
|
],
|
|
color: 'bg-purple-50',
|
|
},
|
|
],
|
|
},
|
|
features: [
|
|
{ name: '5-Phasen-Modell', status: 'active' as const, description: 'Einstieg, Erarbeitung, Sicherung, Transfer, Reflexion' },
|
|
{ name: 'Timer mit Warning', status: 'active' as const, description: '2 Minuten Warnung vor Phasen-Ende' },
|
|
{ name: 'Overtime Detection', status: 'active' as const, description: 'Anzeige wenn Phase ueberzogen wird' },
|
|
{ name: 'Phasen-Suggestions', status: 'active' as const, description: '3-6 Aktivitaets-Vorschlaege pro Phase' },
|
|
{ name: 'Visual Pie Timer', status: 'active' as const, description: 'Kreisfoermiger Countdown mit Farbverlauf' },
|
|
{ name: 'Quick Actions Bar', status: 'active' as const, description: '+5min, Pause, Skip Buttons' },
|
|
{ name: 'Tablet-First Design', status: 'active' as const, description: 'Touch-optimiert fuer Tablets' },
|
|
{ name: 'Phasen-Farbschema', status: 'active' as const, description: 'Blau→Orange→Gruen→Lila→Grau' },
|
|
{ name: 'Keyboard Shortcuts', status: 'active' as const, description: 'Space=Pause, N=Next, E=Extend, H=Contrast' },
|
|
{ name: 'Audio Cues', status: 'active' as const, description: 'Sanfte Toene bei Phasenwechsel' },
|
|
{ name: 'Offline Timer', status: 'active' as const, description: 'Client-seitige Fallback bei Verbindungsverlust' },
|
|
{ name: 'DB Persistenz', status: 'active' as const, description: 'PostgreSQL Hybrid Storage' },
|
|
{ name: 'Session History', status: 'active' as const, description: 'GET /history/{teacher_id} API' },
|
|
{ name: 'Alembic Migrations', status: 'active' as const, description: 'Versionierte DB-Schema-Aenderungen' },
|
|
{ name: 'Teacher Auth', status: 'active' as const, description: 'Keycloak Integration mit Optional Fallback (Phase 7)' },
|
|
{ name: 'WebSocket Real-time', status: 'active' as const, description: 'Echtzeit-Updates mit 1-Sekunden-Genauigkeit (Phase 6)' },
|
|
{ name: 'Schuljahres-Kontext', status: 'active' as const, description: 'Makro-Phasen, Bundesland, Schulart (Phase 8)' },
|
|
{ name: 'Events & Routinen', status: 'active' as const, description: 'Klausuren, Konferenzen, Elternabende (Phase 8)' },
|
|
{ name: 'Antizipations-Engine', status: 'active' as const, description: '12 Regeln fuer proaktive Vorschlaege (Phase 8)' },
|
|
{ name: 'Dynamische Sidebar', status: 'active' as const, description: 'Top 5 relevante Module + Alle Module (Phase 8)' },
|
|
{ name: 'Schuljahres-Pfad', status: 'active' as const, description: '7 Meilensteine mit Fortschrittsanzeige (Phase 8)' },
|
|
],
|
|
roadmap: [
|
|
{ phase: 'Phase 1: Core Engine', priority: 'high' as const, items: ['FSM', 'Timer', 'Suggestions', 'API'] },
|
|
{ phase: 'Phase 2: Frontend', priority: 'high' as const, items: ['Lesson-Modus UI', 'Timer Display', 'Timeline'] },
|
|
{ phase: 'Phase 2b: UX Optimierung', priority: 'high' as const, items: ['Visual Timer', 'Farbschema', 'Tablet-First', 'Quick Actions'] },
|
|
{ phase: 'Phase 3: Persistenz', priority: 'high' as const, items: ['PostgreSQL', 'Keycloak Auth', 'Session History'] },
|
|
{ phase: 'Phase 4: Content', priority: 'medium' as const, items: ['Unit-Vorschlaege', 'Templates', 'Hausaufgaben'] },
|
|
{ phase: 'Phase 5: Analytics', priority: 'medium' as const, items: ['Statistiken (ohne Bewertung)', 'PDF Export'] },
|
|
{ phase: 'Phase 6: Real-time', priority: 'low' as const, items: ['WebSocket', 'Offline Fallback', 'Multi-Device'] },
|
|
],
|
|
technicalDetails: [
|
|
{ component: 'Backend', technology: 'Python FastAPI', version: '0.123+', description: 'Async REST API' },
|
|
{ component: 'State Machine', technology: 'Python Enum + Dataclass', description: 'Finite State Machine Pattern' },
|
|
{ component: 'Timer', technology: 'datetime.utcnow()', description: 'Server-side Time Calculation' },
|
|
{ component: 'Frontend', technology: 'Vanilla JavaScript ES6+', description: 'In companion.py eingebettet' },
|
|
{ component: 'Icons', technology: 'Material Design Icons', description: 'Via Google Fonts CDN (Apache-2.0)' },
|
|
{ component: 'WebSocket', technology: 'FastAPI WebSocket', description: 'Echtzeit-Updates mit 1-Sekunden-Genauigkeit + Polling Fallback' },
|
|
{ component: 'Database', technology: 'PostgreSQL + SQLAlchemy 2.0', description: 'Hybrid Storage (Memory + DB)' },
|
|
{ component: 'Migrations', technology: 'Alembic 1.14', description: 'Versionierte Schema-Migrationen' },
|
|
],
|
|
privacyNotes: [
|
|
'Keine Schueler-Daten werden gespeichert',
|
|
'Session-Daten sind nur waehrend der Stunde verfuegbar',
|
|
'Lehrer-ID wird fuer Session-Zuordnung verwendet',
|
|
'Keine Tracking-Cookies oder externe Services',
|
|
'Analytics ohne bewertende Metriken (keine "70% Redezeit"-Anzeigen)',
|
|
],
|
|
}
|