klausur-service (11 files): - cv_gutter_repair, ocr_pipeline_regression, upload_api - ocr_pipeline_sessions, smart_spell, nru_worksheet_generator - ocr_pipeline_overlays, mail/aggregator, zeugnis_api - cv_syllable_detect, self_rag backend-lehrer (17 files): - classroom_engine/suggestions, generators/quiz_generator - worksheets_api, llm_gateway/comparison, state_engine_api - classroom/models (→ 4 submodules), services/file_processor - alerts_agent/api/wizard+digests+routes, content_generators/pdf - classroom/routes/sessions, llm_gateway/inference - classroom_engine/analytics, auth/keycloak_auth - alerts_agent/processing/rule_engine, ai_processor/print_versions agent-core (5 files): - brain/memory_store, brain/knowledge_graph, brain/context_manager - orchestrator/supervisor, sessions/session_manager admin-lehrer (5 components): - GridOverlay, StepGridReview, DevOpsPipelineSidebar - DataFlowDiagram, sbom/wizard/page website (2 files): - DependencyMap, lehrer/abitur-archiv Other: nibis_ingestion, grid_detection_service, export-doclayout-onnx Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
495 lines
17 KiB
Python
495 lines
17 KiB
Python
"""
|
|
Phasenspezifische und fachspezifische Vorschlags-Daten (Feature f18).
|
|
|
|
Enthaelt die vordefinierten Vorschlaege fuer allgemeine Phasen
|
|
und fachspezifische Aktivitaeten.
|
|
"""
|
|
|
|
from typing import List, Dict, Any
|
|
|
|
from .models import LessonPhase
|
|
|
|
|
|
# Unterstuetzte Faecher fuer fachspezifische Vorschlaege
|
|
SUPPORTED_SUBJECTS = [
|
|
"mathematik", "mathe", "math",
|
|
"deutsch",
|
|
"englisch", "english",
|
|
"biologie", "bio",
|
|
"physik",
|
|
"chemie",
|
|
"geschichte",
|
|
"geografie", "erdkunde",
|
|
"kunst",
|
|
"musik",
|
|
"sport",
|
|
"informatik",
|
|
]
|
|
|
|
|
|
# Fachspezifische Vorschlaege (Feature f18)
|
|
SUBJECT_SUGGESTIONS: Dict[str, Dict[LessonPhase, List[Dict[str, Any]]]] = {
|
|
"mathematik": {
|
|
LessonPhase.EINSTIEG: [
|
|
{
|
|
"id": "math_warm_up",
|
|
"title": "Kopfrechnen-Challenge",
|
|
"description": "5 schnelle Kopfrechenaufgaben zum Aufwaermen",
|
|
"activity_type": "warmup",
|
|
"estimated_minutes": 3,
|
|
"icon": "calculate",
|
|
"subjects": ["mathematik", "mathe"],
|
|
},
|
|
{
|
|
"id": "math_puzzle",
|
|
"title": "Mathematisches Raetsel",
|
|
"description": "Ein kniffliges Zahlenraetsel als Einstieg",
|
|
"activity_type": "motivation",
|
|
"estimated_minutes": 5,
|
|
"icon": "extension",
|
|
"subjects": ["mathematik", "mathe"],
|
|
},
|
|
],
|
|
LessonPhase.ERARBEITUNG: [
|
|
{
|
|
"id": "math_geogebra",
|
|
"title": "GeoGebra-Exploration",
|
|
"description": "Interaktive Visualisierung mit GeoGebra",
|
|
"activity_type": "individual_work",
|
|
"estimated_minutes": 15,
|
|
"icon": "functions",
|
|
"subjects": ["mathematik", "mathe"],
|
|
},
|
|
{
|
|
"id": "math_peer_explain",
|
|
"title": "Rechenweg erklaeren",
|
|
"description": "Schueler erklaeren sich gegenseitig ihre Loesungswege",
|
|
"activity_type": "partner_work",
|
|
"estimated_minutes": 10,
|
|
"icon": "groups",
|
|
"subjects": ["mathematik", "mathe"],
|
|
},
|
|
],
|
|
LessonPhase.SICHERUNG: [
|
|
{
|
|
"id": "math_formula_card",
|
|
"title": "Formelkarte erstellen",
|
|
"description": "Wichtigste Formeln auf einer Karte festhalten",
|
|
"activity_type": "documentation",
|
|
"estimated_minutes": 5,
|
|
"icon": "note_alt",
|
|
"subjects": ["mathematik", "mathe"],
|
|
},
|
|
],
|
|
},
|
|
"deutsch": {
|
|
LessonPhase.EINSTIEG: [
|
|
{
|
|
"id": "deutsch_wordle",
|
|
"title": "Wordle-Variante",
|
|
"description": "Wort des Tages erraten",
|
|
"activity_type": "warmup",
|
|
"estimated_minutes": 4,
|
|
"icon": "abc",
|
|
"subjects": ["deutsch"],
|
|
},
|
|
{
|
|
"id": "deutsch_zitat",
|
|
"title": "Zitat-Interpretation",
|
|
"description": "Ein literarisches Zitat gemeinsam deuten",
|
|
"activity_type": "motivation",
|
|
"estimated_minutes": 5,
|
|
"icon": "format_quote",
|
|
"subjects": ["deutsch"],
|
|
},
|
|
],
|
|
LessonPhase.ERARBEITUNG: [
|
|
{
|
|
"id": "deutsch_textarbeit",
|
|
"title": "Textanalyse in Gruppen",
|
|
"description": "Gruppenarbeit zu verschiedenen Textabschnitten",
|
|
"activity_type": "group_work",
|
|
"estimated_minutes": 15,
|
|
"icon": "menu_book",
|
|
"subjects": ["deutsch"],
|
|
},
|
|
{
|
|
"id": "deutsch_schreibworkshop",
|
|
"title": "Schreibwerkstatt",
|
|
"description": "Kreatives Schreiben mit Peer-Feedback",
|
|
"activity_type": "individual_work",
|
|
"estimated_minutes": 20,
|
|
"icon": "edit_note",
|
|
"subjects": ["deutsch"],
|
|
},
|
|
],
|
|
LessonPhase.SICHERUNG: [
|
|
{
|
|
"id": "deutsch_zusammenfassung",
|
|
"title": "Text-Zusammenfassung",
|
|
"description": "Die wichtigsten Punkte in 3 Saetzen formulieren",
|
|
"activity_type": "summary",
|
|
"estimated_minutes": 5,
|
|
"icon": "summarize",
|
|
"subjects": ["deutsch"],
|
|
},
|
|
],
|
|
},
|
|
"englisch": {
|
|
LessonPhase.EINSTIEG: [
|
|
{
|
|
"id": "english_smalltalk",
|
|
"title": "Small Talk Warm-Up",
|
|
"description": "2-Minuten Gespraeche zu einem Alltagsthema",
|
|
"activity_type": "warmup",
|
|
"estimated_minutes": 4,
|
|
"icon": "chat",
|
|
"subjects": ["englisch", "english"],
|
|
},
|
|
{
|
|
"id": "english_video",
|
|
"title": "Authentic Video Clip",
|
|
"description": "Kurzer Clip aus einer englischen Serie oder Nachricht",
|
|
"activity_type": "motivation",
|
|
"estimated_minutes": 5,
|
|
"icon": "movie",
|
|
"subjects": ["englisch", "english"],
|
|
},
|
|
],
|
|
LessonPhase.ERARBEITUNG: [
|
|
{
|
|
"id": "english_role_play",
|
|
"title": "Role Play Activity",
|
|
"description": "Dialoguebung in authentischen Situationen",
|
|
"activity_type": "partner_work",
|
|
"estimated_minutes": 12,
|
|
"icon": "theater_comedy",
|
|
"subjects": ["englisch", "english"],
|
|
},
|
|
{
|
|
"id": "english_reading_circle",
|
|
"title": "Reading Circle",
|
|
"description": "Gemeinsames Lesen mit verteilten Rollen",
|
|
"activity_type": "group_work",
|
|
"estimated_minutes": 15,
|
|
"icon": "auto_stories",
|
|
"subjects": ["englisch", "english"],
|
|
},
|
|
],
|
|
},
|
|
"biologie": {
|
|
LessonPhase.EINSTIEG: [
|
|
{
|
|
"id": "bio_nature_question",
|
|
"title": "Naturfrage",
|
|
"description": "Eine spannende Frage aus der Natur diskutieren",
|
|
"activity_type": "motivation",
|
|
"estimated_minutes": 5,
|
|
"icon": "eco",
|
|
"subjects": ["biologie", "bio"],
|
|
},
|
|
],
|
|
LessonPhase.ERARBEITUNG: [
|
|
{
|
|
"id": "bio_experiment",
|
|
"title": "Mini-Experiment",
|
|
"description": "Einfaches Experiment zum Thema durchfuehren",
|
|
"activity_type": "group_work",
|
|
"estimated_minutes": 20,
|
|
"icon": "science",
|
|
"subjects": ["biologie", "bio"],
|
|
},
|
|
{
|
|
"id": "bio_diagram",
|
|
"title": "Biologische Zeichnung",
|
|
"description": "Beschriftete Zeichnung eines Organismus",
|
|
"activity_type": "individual_work",
|
|
"estimated_minutes": 15,
|
|
"icon": "draw",
|
|
"subjects": ["biologie", "bio"],
|
|
},
|
|
],
|
|
},
|
|
"physik": {
|
|
LessonPhase.EINSTIEG: [
|
|
{
|
|
"id": "physik_demo",
|
|
"title": "Phaenomen-Demo",
|
|
"description": "Ein physikalisches Phaenomen vorfuehren",
|
|
"activity_type": "motivation",
|
|
"estimated_minutes": 5,
|
|
"icon": "bolt",
|
|
"subjects": ["physik"],
|
|
},
|
|
],
|
|
LessonPhase.ERARBEITUNG: [
|
|
{
|
|
"id": "physik_simulation",
|
|
"title": "PhET-Simulation",
|
|
"description": "Interaktive Simulation von phet.colorado.edu",
|
|
"activity_type": "individual_work",
|
|
"estimated_minutes": 15,
|
|
"icon": "smart_toy",
|
|
"subjects": ["physik"],
|
|
},
|
|
{
|
|
"id": "physik_rechnung",
|
|
"title": "Physikalische Rechnung",
|
|
"description": "Rechenaufgabe mit physikalischem Kontext",
|
|
"activity_type": "partner_work",
|
|
"estimated_minutes": 12,
|
|
"icon": "calculate",
|
|
"subjects": ["physik"],
|
|
},
|
|
],
|
|
},
|
|
"informatik": {
|
|
LessonPhase.EINSTIEG: [
|
|
{
|
|
"id": "info_code_puzzle",
|
|
"title": "Code-Puzzle",
|
|
"description": "Kurzen Code-Schnipsel analysieren - was macht er?",
|
|
"activity_type": "warmup",
|
|
"estimated_minutes": 4,
|
|
"icon": "code",
|
|
"subjects": ["informatik"],
|
|
},
|
|
],
|
|
LessonPhase.ERARBEITUNG: [
|
|
{
|
|
"id": "info_live_coding",
|
|
"title": "Live Coding",
|
|
"description": "Gemeinsam Code entwickeln mit Erklaerungen",
|
|
"activity_type": "instruction",
|
|
"estimated_minutes": 15,
|
|
"icon": "terminal",
|
|
"subjects": ["informatik"],
|
|
},
|
|
{
|
|
"id": "info_pair_programming",
|
|
"title": "Pair Programming",
|
|
"description": "Zu zweit programmieren - Driver und Navigator",
|
|
"activity_type": "partner_work",
|
|
"estimated_minutes": 20,
|
|
"icon": "computer",
|
|
"subjects": ["informatik"],
|
|
},
|
|
],
|
|
},
|
|
}
|
|
|
|
|
|
# Vordefinierte allgemeine Vorschlaege pro Phase
|
|
PHASE_SUGGESTIONS: Dict[LessonPhase, List[Dict[str, Any]]] = {
|
|
LessonPhase.EINSTIEG: [
|
|
{
|
|
"id": "warmup_quiz",
|
|
"title": "Kurzes Quiz zum Einstieg",
|
|
"description": "Aktivieren Sie das Vorwissen der Schueler mit 3-5 Fragen zum Thema",
|
|
"activity_type": "warmup",
|
|
"estimated_minutes": 3,
|
|
"icon": "quiz"
|
|
},
|
|
{
|
|
"id": "problem_story",
|
|
"title": "Problemgeschichte erzaehlen",
|
|
"description": "Stellen Sie ein alltagsnahes Problem vor, das zum Thema fuehrt",
|
|
"activity_type": "motivation",
|
|
"estimated_minutes": 5,
|
|
"icon": "auto_stories"
|
|
},
|
|
{
|
|
"id": "video_intro",
|
|
"title": "Kurzes Erklaervideo",
|
|
"description": "Zeigen Sie ein 2-3 Minuten Video zur Einfuehrung ins Thema",
|
|
"activity_type": "motivation",
|
|
"estimated_minutes": 4,
|
|
"icon": "play_circle"
|
|
},
|
|
{
|
|
"id": "brainstorming",
|
|
"title": "Brainstorming",
|
|
"description": "Sammeln Sie Ideen und Vorkenntnisse der Schueler an der Tafel",
|
|
"activity_type": "warmup",
|
|
"estimated_minutes": 5,
|
|
"icon": "psychology"
|
|
},
|
|
{
|
|
"id": "daily_challenge",
|
|
"title": "Tagesaufgabe vorstellen",
|
|
"description": "Praesentieren Sie die zentrale Frage oder Aufgabe der Stunde",
|
|
"activity_type": "problem_introduction",
|
|
"estimated_minutes": 3,
|
|
"icon": "flag"
|
|
}
|
|
],
|
|
LessonPhase.ERARBEITUNG: [
|
|
{
|
|
"id": "think_pair_share",
|
|
"title": "Think-Pair-Share",
|
|
"description": "Schueler denken erst einzeln nach, tauschen sich dann zu zweit aus und praesentieren im Plenum",
|
|
"activity_type": "partner_work",
|
|
"estimated_minutes": 10,
|
|
"icon": "groups"
|
|
},
|
|
{
|
|
"id": "worksheet_digital",
|
|
"title": "Digitales Arbeitsblatt",
|
|
"description": "Schueler bearbeiten ein interaktives Arbeitsblatt am Tablet oder Computer",
|
|
"activity_type": "individual_work",
|
|
"estimated_minutes": 15,
|
|
"icon": "description"
|
|
},
|
|
{
|
|
"id": "station_learning",
|
|
"title": "Stationenlernen",
|
|
"description": "Verschiedene Stationen mit unterschiedlichen Aufgaben und Materialien",
|
|
"activity_type": "group_work",
|
|
"estimated_minutes": 20,
|
|
"icon": "hub"
|
|
},
|
|
{
|
|
"id": "expert_puzzle",
|
|
"title": "Expertenrunde (Jigsaw)",
|
|
"description": "Schueler werden Experten fuer ein Teilthema und lehren es anderen",
|
|
"activity_type": "group_work",
|
|
"estimated_minutes": 15,
|
|
"icon": "extension"
|
|
},
|
|
{
|
|
"id": "guided_instruction",
|
|
"title": "Geleitete Instruktion",
|
|
"description": "Schrittweise Erklaerung mit Uebungsphasen zwischendurch",
|
|
"activity_type": "instruction",
|
|
"estimated_minutes": 12,
|
|
"icon": "school"
|
|
},
|
|
{
|
|
"id": "pair_programming",
|
|
"title": "Partnerarbeit",
|
|
"description": "Zwei Schueler loesen gemeinsam eine Aufgabe",
|
|
"activity_type": "partner_work",
|
|
"estimated_minutes": 10,
|
|
"icon": "people"
|
|
}
|
|
],
|
|
LessonPhase.SICHERUNG: [
|
|
{
|
|
"id": "mindmap_class",
|
|
"title": "Gemeinsame Mindmap",
|
|
"description": "Ergebnisse als Mindmap an der Tafel oder digital sammeln und strukturieren",
|
|
"activity_type": "visualization",
|
|
"estimated_minutes": 8,
|
|
"icon": "account_tree"
|
|
},
|
|
{
|
|
"id": "exit_ticket",
|
|
"title": "Exit Ticket",
|
|
"description": "Schueler notieren 3 Dinge die sie gelernt haben und 1 offene Frage",
|
|
"activity_type": "summary",
|
|
"estimated_minutes": 5,
|
|
"icon": "sticky_note_2"
|
|
},
|
|
{
|
|
"id": "gallery_walk",
|
|
"title": "Galerie-Rundgang",
|
|
"description": "Schueler praesentieren ihre Ergebnisse und geben sich Feedback",
|
|
"activity_type": "presentation",
|
|
"estimated_minutes": 10,
|
|
"icon": "photo_library"
|
|
},
|
|
{
|
|
"id": "key_points",
|
|
"title": "Kernpunkte zusammenfassen",
|
|
"description": "Gemeinsam die wichtigsten Erkenntnisse der Stunde formulieren",
|
|
"activity_type": "summary",
|
|
"estimated_minutes": 5,
|
|
"icon": "format_list_bulleted"
|
|
},
|
|
{
|
|
"id": "quick_check",
|
|
"title": "Schneller Wissenscheck",
|
|
"description": "5 kurze Fragen zur Ueberpruefung des Verstaendnisses",
|
|
"activity_type": "documentation",
|
|
"estimated_minutes": 5,
|
|
"icon": "fact_check"
|
|
}
|
|
],
|
|
LessonPhase.TRANSFER: [
|
|
{
|
|
"id": "real_world_example",
|
|
"title": "Alltagsbeispiele finden",
|
|
"description": "Schueler suchen Beispiele aus ihrem Alltag, wo das Gelernte vorkommt",
|
|
"activity_type": "application",
|
|
"estimated_minutes": 5,
|
|
"icon": "public"
|
|
},
|
|
{
|
|
"id": "challenge_task",
|
|
"title": "Knobelaufgabe",
|
|
"description": "Eine anspruchsvollere Aufgabe fuer schnelle Schueler oder als Bonus",
|
|
"activity_type": "differentiation",
|
|
"estimated_minutes": 7,
|
|
"icon": "psychology"
|
|
},
|
|
{
|
|
"id": "creative_application",
|
|
"title": "Kreative Anwendung",
|
|
"description": "Schueler wenden das Gelernte in einem kreativen Projekt an",
|
|
"activity_type": "application",
|
|
"estimated_minutes": 10,
|
|
"icon": "palette"
|
|
},
|
|
{
|
|
"id": "peer_teaching",
|
|
"title": "Peer-Teaching",
|
|
"description": "Schueler erklaeren sich gegenseitig das Gelernte",
|
|
"activity_type": "real_world_connection",
|
|
"estimated_minutes": 5,
|
|
"icon": "supervisor_account"
|
|
}
|
|
],
|
|
LessonPhase.REFLEXION: [
|
|
{
|
|
"id": "thumbs_feedback",
|
|
"title": "Daumen-Feedback",
|
|
"description": "Schnelle Stimmungsabfrage: Daumen hoch/mitte/runter",
|
|
"activity_type": "feedback",
|
|
"estimated_minutes": 2,
|
|
"icon": "thumb_up"
|
|
},
|
|
{
|
|
"id": "homework_assign",
|
|
"title": "Hausaufgabe vergeben",
|
|
"description": "Passende Hausaufgabe zur Vertiefung des Gelernten",
|
|
"activity_type": "homework",
|
|
"estimated_minutes": 3,
|
|
"icon": "home_work"
|
|
},
|
|
{
|
|
"id": "one_word",
|
|
"title": "Ein-Wort-Reflexion",
|
|
"description": "Jeder Schueler nennt ein Wort, das die Stunde beschreibt",
|
|
"activity_type": "feedback",
|
|
"estimated_minutes": 3,
|
|
"icon": "chat"
|
|
},
|
|
{
|
|
"id": "preview_next",
|
|
"title": "Ausblick naechste Stunde",
|
|
"description": "Kurzer Ausblick auf das Thema der naechsten Stunde",
|
|
"activity_type": "preview",
|
|
"estimated_minutes": 2,
|
|
"icon": "event"
|
|
},
|
|
{
|
|
"id": "learning_log",
|
|
"title": "Lerntagebuch",
|
|
"description": "Schueler notieren ihre wichtigsten Erkenntnisse im Lerntagebuch",
|
|
"activity_type": "feedback",
|
|
"estimated_minutes": 4,
|
|
"icon": "menu_book"
|
|
}
|
|
]
|
|
}
|