shinkan-jinkendo/.claude/docs/functional/DOMAIN_MODEL.md
Lars dccb065181
All checks were successful
Deploy Development / deploy (push) Successful in 43s
Test Suite / pytest-backend (push) Successful in 44s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 14s
Test Suite / k6 /health Baseline (push) Successful in 34s
Test Suite / playwright-tests (push) Successful in 1m13s
Enhance Slot Difference Annotation and Rematch Suggestion Logic
- Introduced `_annotate_slot_diffs` to mark trivial ID swaps in slot differences, improving clarity in comparison results.
- Added `_actionable_slot_diffs` to filter out non-actionable differences, streamlining the evaluation process.
- Implemented `_build_rematch_suggestion_diffs` to generate suggestions based on rematch logs, enhancing the path optimization workflow.
- Updated `_build_progression_compare_response` to incorporate actionable slot differences and rematch suggestions, improving the response structure.
- Enhanced frontend components to display rematch suggestions and handle trivial differences more effectively.
- Bumped version to reflect the new features and improvements.
2026-06-13 07:55:47 +02:00

24 KiB
Raw Permalink Blame History

Shinkan Jinkendo - Fachliches Domänenmodell

Version: 0.4.6
Stand: 2026-05-14 (Fachlicher Nutzerüberblick: docs/FACHLICHE_NUTZERFUNKTIONEN.md)
Basis: shinkan_anforderungsdokument_entwurf.md + Fähigkeitsmatrix


Übersicht

Dieses Dokument beschreibt die fachliche Datenstruktur von Shinkan Jinkendo.

Zuständig für technische Umsetzung: siehe DATABASE_SCHEMA.md


Fachliche Kernprinzipien

1. Globaler Fähigkeitskatalog (§8.3)

Prinzip: Fähigkeiten werden NICHT pro Modell dupliziert.

Beispiele:

  • Distanzgefühl (in Karate UND Selbstverteidigung)
  • Stabiler Stand (in Karate UND Gewaltschutz)
  • Aufmerksamkeit (in verschiedenen Zielgruppenmodellen)

Konsequenz: Ein globaler Katalog, aber kontextabhängige Ausprägung über Reifegradmodelle.

🆕 Hierarchische Struktur (ab Migration 022):

Haupt-Kategorie (KARATE / ALLGEMEINE)
  └─ Unter-Kategorie (Kihon, Kumite, Kondition, etc.)
      └─ Fähigkeit
          └─ Level-Definitionen (1-5)

🆕 Fokusbereich-Zuordnung (ab Migration 022):

  • Karate-spezifisch (focus_areas: ["karate"])

    • Beispiele: Kata Ablauf, Kihon, Bunkai, Dachi Waza
    • Nur relevant für Karate-Training
  • Universal (focus_areas: ["universal"])

    • Beispiele: Maximalkraft, Konzentration, Deeskalation, Flexibilität
    • Relevant für ALLE Trainingsbereiche (Karate, Selbstverteidigung, Gewaltschutz)

Später möglich: Mehrfachzuordnung

  • ["karate", "selbstverteidigung"] - Fähigkeit in beiden Bereichen relevant
  • ["karate", "gewaltschutz"] - etc.

2. Mehrfachzuordnung von Übungen (§10.7)

Prinzip: Eine Übung kann mehreren Bereichen GLEICHZEITIG zugeordnet sein.

Beispiel: Distanzübung

  • Karate ✓
  • Selbstverteidigung ✓
  • Gewaltschutz ✓

Technische Umsetzung: M:N-Beziehungen mit optionalem is_primary-Flag bei Fokusbereichen, Stilrichtungen, Trainingsstilen und Zielgruppen — nicht bei exercise_skills (dort nur Intensität niedrig|mittel|hoch).

3. Hierarchischer Kontext (§8.1)

Fachliche Grundstruktur (ab Migration 009 - M:N):

Fokusbereich (Sportart/Bereich)
  └─ Stil
      └─ Zielgruppen (M:N Zuordnung, wiederverwendbar)

🔄 ÄNDERUNG: Zielgruppen sind global und können mehreren Stilen zugeordnet sein!

Beispiel-Architektur (vereinfacht):

Global definierte Zielgruppen:
├─ Breitensportler
├─ Leistungssportler
├─ Kinder
├─ Erwachsene
└─ Senioren

Zuordnungen (M:N):
Karate → Shotokan → [Breitensportler, Leistungssportler, Kinder]
Karate → Goju-Ryu → [Breitensportler, Erwachsene]
Karate → Wado-Ryu → [Leistungssportler]

Selbstverteidigung → [Erwachsene, Kinder, Senioren]
Gewaltschutz → [Kinder, Senioren]

Admin-UI Darstellung:

  • Tree-View (Tab "Hierarchie"): Zeigt Fokusbereich → Stil → zugeordnete Zielgruppen
  • Matrix (Tab "Zuordnungen"): Checkbox-Matrix: Stile × Zielgruppen
  • Global (Tab "Zielgruppen"): Verwaltung aller Zielgruppen unabhängig von Stilen

Bedeutung für Reifegradmodelle:

Jede Kombination (Fokusbereich + Stil + Zielgruppe) kann ein eigenes Reifegradmodell haben:

  • Karate / Shotokan / Breitensport → Modell A
  • Karate / Shotokan / Leistungssport → Modell B
  • Selbstverteidigung / Erwachsene → Modell C

Fachliche Dimensionen

Dimension 1: Fokusbereich (Sportart/Bereich)

Definition: Oberste fachliche Kategorisierung der Trainingsinhalte.

Beispiele:

  • Karate
  • Selbstverteidigung
  • Gewaltschutz

Eigenschaften:

  • Name, Kürzel, Beschreibung
  • Farbe (für UI)
  • Icon (Emoji oder Icon-Name)
  • Status (aktiv/archiviert)

Verwaltung:

  • Admin-Level: Systemadmin, Vereinsadmin
  • CRUD: Voll administrierbar
  • Löschen: Nur wenn keine abhängigen Stile oder Übungen

Dimension 2: Trainingsstil

Definition: Spezialisierung innerhalb eines Fokusbereichs.

Beispiele:

  • Shotokan (unter Karate)
  • Goju-Ryu (unter Karate)
  • Wado-Ryu (unter Karate)

Hierarchie:

  • Gehört zu genau EINEM Fokusbereich
  • Kann optional Sub-Stile haben (parent_style_id)

Eigenschaften:

  • Name, Kürzel, Beschreibung
  • Fokusbereich-Zuordnung
  • Optionale Hierarchie (z.B. Kyokushin → Kyokushin IKO)
  • Status

Verwaltung:

  • Admin-Level: Systemadmin, Vereinsadmin
  • CRUD: Voll administrierbar
  • Verschieben: Zwischen Fokusbereichen möglich
  • Löschen: Nur wenn keine Zielgruppen oder Übungen zugeordnet

Dimension 3: Zielgruppe

Definition: Globale Trainingsempfänger-Gruppe, die MEHREREN Stilen zugeordnet werden kann (M:N).

🔄 ÄNDERUNG ab Migration 009: Zielgruppen sind NICHT mehr hierarchisch an Stile gebunden!

Beispiele:

  • Breitensportler (kann in Shotokan, Goju-Ryu, Wado-Ryu gültig sein)
  • Leistungssportler (kann in verschiedenen Stilen genutzt werden)
  • Kinder (6-12 Jahre) (stilunabhängig)
  • Jugendliche (13-17 Jahre)
  • Erwachsene
  • Frauen
  • Senioren
  • Gemischt

Architektur (ab Migration 009):

  • Global unabhängig: Keine direkte FK zu training_style_id
  • M:N Zuordnung: Über Junction-Tabelle training_style_target_groups
  • Wiederverwendbar: Eine Zielgruppe kann mehreren Stilen zugeordnet sein
  • Primary Flag: is_primary kennzeichnet Hauptzuordnung

Eigenschaften:

  • Name, Beschreibung
  • Optionale Altersangabe (min_age, max_age)
  • Status
  • KEINE direkte Stil-Zuordnung mehr!

Verwaltung:

  • Admin-Level: Systemadmin, Vereinsadmin, Spartenadmin
  • CRUD: Voll administrierbar (global)
  • Zuordnungen: Über M:N Matrix im Admin-UI
  • Löschen: Nur wenn keine Übungen UND keine Stil-Zuordnungen

Admin-UI:

  • Tab "Zielgruppen": Global verwalten (ohne Stil-Dropdown)
  • Tab "Hierarchie": Tree-View (Fokusbereich → Stil → zugeordnete Zielgruppen)
  • Tab "Zuordnungen": Checkbox-Matrix für M:N Assignments

Dimension 4: Altersgruppen (separate Dimension!)

Definition: Grobe Alterseinstufung UNABHÄNGIG von Zielgruppe.

Katalog:

  • Minis (3-5 Jahre)
  • Kinder (6-9 Jahre)
  • Schüler (10-12 Jahre)
  • Teenager (13-17 Jahre)
  • Erwachsene (18+)

Abgrenzung zu Zielgruppe:

  • Altersgruppe = didaktische Einstufung
  • Zielgruppe = fachlicher Kontext

Beispiel:

  • Übung kann für "Kinder" + "Schüler" geeignet sein (Altersgruppen)
  • Und gleichzeitig zu Zielgruppe "Karate Breitensport Kinder" gehören

Fähigkeiten-Domäne (§8.3, erweitert ab Migration 022+023)

Fähigkeiten-Hierarchie

🆕 3-Ebenen-Struktur (ab Migration 022):

Haupt-Kategorie (2 Stück)
├─ KARATE Fähigkeiten
│   ├─ Kihon (Unterkategorie)
│   │   ├─ Dachi Waza (Fähigkeit, Level 1-5)
│   │   ├─ Uke Waza
│   │   └─ ...
│   ├─ Kumite
│   ├─ Kata
│   └─ Selbstverteidigung
│
└─ ALLGEMEINE sportliche Fähigkeiten
    ├─ Koordination (Unterkategorie)
    │   ├─ Orientierung (Fähigkeit, Level 1-5)
    │   └─ ...
    ├─ Kondition
    ├─ Kognition
    ├─ Soziale Fähigkeiten
    └─ Psychische Fähigkeiten

Haupt-Kategorien

1. KARATE Fähigkeiten (focus_areas: ["karate"])

  • Anzahl: 32 Skills
  • Bedeutung: Karate-spezifische Techniken und Fähigkeiten
  • Verwendung: Nur für Karate-Training relevant
  • Unterkategorien: Kihon, Kumite, Kata, Selbstverteidigung

2. ALLGEMEINE sportliche Fähigkeiten (focus_areas: ["universal"])

  • Anzahl: 37 Skills
  • Bedeutung: Universelle sportliche und mentale Fähigkeiten
  • Verwendung: Für ALLE Trainingsbereiche einsetzbar
  • Unterkategorien: Koordination, Kondition, Kognition, Soziale Fähigkeiten, Psychische Fähigkeiten

Unterkategorien

KARATE Fähigkeiten

Kihon (Grundtechniken) - 10 Skills:

  • Dachi Waza (Standtechniken)
  • Uke Waza (Blocktechniken)
  • Zuki Waza (Stoßtechniken)
  • Uchi Waza (Schlagtechniken)
  • Geri Waza (Tritttechniken)
  • Nage Waza (Wurftechniken)
  • Nukite Waza (Fingerstichtechniken)
  • Ken Waza (Fausttechniken)
  • Hüfteinsatz
  • Kime (Fokussierung)

Kumite (Kampf) - 10 Skills:

  • Beinarbeit
  • Distanzkontrolle
  • Angriff
  • Abwehr Konter
  • Präzision
  • Antizipation
  • Timing
  • Taktik
  • Fokus
  • Mentale Stärke

Kata (Formen) - 8 Skills:

  • Technik Kombination
  • Kata Ablauf
  • Bunkai (Anwendung)
  • Oyo (Variation)
  • Henka (Veränderung)
  • Kakushi (Versteckte Techniken)
  • Kata Atmung
  • Kata Rhythmus

Selbstverteidigung - 4 Skills:

  • Gefahrenbewustsein
  • Selbstbehauptung
  • Selbstschutz
  • Gefahrenabwehr

ALLGEMEINE sportliche Fähigkeiten

Koordination - 7 Skills:

  • Orientierung
  • Differenzierung
  • Kopplung
  • Gleichgewicht
  • Rhythmisierung
  • Reaktion
  • Umstellung

Kondition - 15 Skills:

  • Kraftfähigkeiten: Maximalkraft, Schnellkraft, Reaktivkraft, Kraftausdauer, Muskelaufbau
  • Schnelligkeitsfähigkeiten: Reaktionsschnelligkeit, Bewegungsschnelligkeit, Handlungsschnelligkeit, Schnelligkeitsausdauer
  • Ausdauerfähigkeiten: Grundlagenausdauer, Aerobe Ausdauer, Anaerobe Ausdauer
  • Regenerationsfähigkeiten: Regenerationsfähigkeit, Ermüdungswiderstandsfähigkeit
  • Beweglichkeit: Flexibilität

Kognition - 5 Skills:

  • Aufmerksamkeit
  • Wahrnehmung
  • Urteilsvermögen
  • Merkfähigkeit
  • Lernfähigkeit

Psychische Fähigkeiten - 6 Skills:

  • Selbstvertrauen
  • Konzentration
  • Emotionale Kontrolle
  • Motivation
  • Stressresistenz
  • Stressregulation

Soziale Fähigkeiten - 4 Skills:

  • Deeskalation
  • Selbstdisziplin
  • Toleranz
  • Fairness

Level-Definitionen (Reifegradmodell)

Konzept: Jede Fähigkeit hat 5 Stufen mit konkreten Beschreibungen.

Struktur (noch nicht vollständig implementiert):

  • Level 1: Einsteiger - Grundlegende Ausführung
  • Level 2: Grundlagen - Kontrollierte Ausführung
  • Level 3: Aufbau - Sichere Anwendung
  • Level 4: Fortgeschritten - Variable Anwendung
  • Level 5: Experte - Meisterhafte Beherrschung

Beispiel (Dachi Waza - Standtechniken):

  • Level 1: Stabiler Stand mit Schwerpunkt und richtiger Ausrichtung
  • Level 2: Korrekter Stand mit guter Balance in verschiedenen Positionen
  • Level 3: Fließender Wechsel zwischen Ständen mit Kontrolle
  • Level 4: Dynamische Stand-Variationen unter Belastung
  • Level 5: Perfekte Stand-Technik in allen Kampfsituationen

Datenbankstruktur:

skill_level_definitions (
  skill_id,
  level (1-5),
  description (Text aus Fähigkeitsmatrix)
)

Status: Schema vorhanden (Migration 022), Daten noch nicht importiert (optional für spätere Phase).


Übungs-Zuordnungslogik (§10)

Primäre vs. Sekundäre Zuordnung

Regel: Eine Übung hat genau EINE primäre Zuordnung pro Dimension.

Beispiel:

Übung: "Maai - Distanzübung"

Fokusbereiche:

  • Karate (primär) ✓
  • Selbstverteidigung (sekundär)

Stile:

  • Shotokan (primär) ✓
  • Goju-Ryu (sekundär)
  • Wado-Ryu (sekundär)

Zielgruppen:

  • Breitensportler (primär) ✓
  • Leistungssportler (sekundär)

Altersgruppen:

  • Schüler ✓
  • Teenager ✓
  • Erwachsene ✓

Fähigkeitsbezug (§10.8)

Übung trainiert MEHRERE Fähigkeiten:

Beispiel: "Kumite-Drill"

Hauptfähigkeiten:

  • Distanzkontrolle (Kumite, target_level: 3, intensity: hoch)
  • Timing (Kumite, target_level: 3, intensity: hoch)

Nebenfähigkeiten:

  • Beinarbeit (Kumite, target_level: 2, intensity: mittel)
  • Reaktion (Koordination, target_level: 2, intensity: mittel)

Attribute pro Fähigkeitsbezug:

  • intensity — Nutzeneinschätzung: niedrig | mittel | hoch (Standard mittel)
  • required_level / target_level — Stufen-Spanne (kanonische Slugs basis … optimierung)
  • is_primary — Legacy-Feld; nicht mehr in der UI, beim Speichern immer false; Scoring ignoriert es

🆕 Fokusbereich-Filterung:

  • Bei Übungen mit Fokusbereich "Karate" sollten primär KARATE-Fähigkeiten zugeordnet werden
  • ALLGEMEINE Fähigkeiten können als Nebenfähigkeiten hinzugefügt werden
  • Bei universellen Übungen (Selbstverteidigung, Gewaltschutz) bevorzugt ALLGEMEINE Fähigkeiten

Trainingscharakter (§10.7)

Katalog:

  • Grundlage (Einführung, Basisvermittlung)
  • Aufbau (Aufbauendes Training)
  • Vertiefung (Vertiefung, Spezialisierung)
  • Festigung (Wiederholung, Festigung)
  • Diagnose (Leistungsdiagnose, Test)
  • Wettkampf (Wettkampfvorbereitung)

Bedeutung:

  • Wichtig für Suche
  • Wichtig für Trainingsplanung
  • Wichtig für KI-Unterstützung (später)

Variantenlogik (§11.2)

Prinzip: Übung besteht aus Stammübung + optionale Varianten.

Beispiele für Varianten:

  • Leicht / Mittel / Schwer
  • Mit Partner / Ohne Partner
  • Mit Hilfsmittel / Ohne Hilfsmittel
  • Kindgerechte Variante
  • Kurzvariante
  • Fortgeschrittene Variante

Varianten-Attribute:

  • Titel/Name
  • Kurzbeschreibung
  • Abweichende Durchführung
  • Abweichende Dauer
  • Abweichende Hilfsmittel
  • Abweichender Fähigkeitsfokus
  • Abweichende Zielgruppen
  • Eigener Medienbezug

Umsetzung (Trainingsplanung): Ein Eintrag in training_unit_exercises kann optional eine konkrete Varianten-ID (exercise_variant_id, Migration 030) tragen; Bindung wird gegen die gewählte Übung validiert. Varianten werden über die Übungs-API verwaltet (technical/EXERCISES_API_SPEC.md).

Progressionsgraph zwischen Übungen (Zwischenstand, CURR002 Stufe 1)

Abgrenzung: Zusätzlich zur Varianten-Reihe innerhalb einer Übung gibt es optional einen Bibliotheks-Progressionsgraphen: gerichtete Kanten zwischen Übungen (Knoten optional auf konkrete Varianten eingegrenzt). Gemeinsamer Kontainer pro Graph (exercise_progression_graphs); Kanten mit Typ z.B. Nachfolger oder Schwester.

Rolle: unterstützend für Planung und spätere Rahmenprogramme — keine Pflicht, jeden Trainingsablauf als Graph zu modellieren (CURR013).

Fachliche Grenze aktuell: Mehrere gleichwertige „Pakete“ paralleler Alternativen sind modellierbar (mehrere ausgehende Kanten), aber noch nicht über eine dedizierte „Alternativgruppe“ in der UI trivial pflegbar; siehe technical/TRAINING_FRAMEWORK_SPEC.md §4.

KI-Planung (Workbench, Stand 0.8.233): Am Graph können Trainer neben Kanten ein planning_roadmap-Artefakt (Curriculum-Stufen) und planning_catalog_context (Primärfokus, Stilrichtung, Trainingsstil, Zielgruppe aus den Katalog-Dimensionen §1) pflegen. Die Roadmap-first-Pipeline matcht Übungen pro Stufe; Didaktik und Reihenfolge kommen aus Roadmap + QS, nicht aus Technik-Hardcoding. Geplant (H1): Katalog-Dimensionen zusätzlich als Prompt-Snippets in LLM-Aufrufen (Priorität Primärfokus → Trainingsstil → Zielgruppe → Stilrichtung) — docs/architecture/PLANNING_CATALOG_PROMPT_SNIPPETS.md. Technische Details: docs/architecture/PLANNING_PROGRESSION_GRAPH_KI.md. Für Trainingsplanung (Einheit, Abschnitt, Rahmen-Slot) gelten dieselben Katalog- und Retrieval-Bausteine mit anderen Scopes — Phase G, siehe Roadmap PLANNING_KI_ROADMAP.md.

TrainingsrahmenVorlage (Rahmenprogramm, CURR002 Stufe2 / CURR009)

Abgrenzung: Eine einzeilige TrainingsplanMikrovorlage (training_plan_template) strukturiert eine Einheit; das Rahmenprogramm ist eine eigene Bibliotheksentität mit sortierten SessionSlots, mindestens einem formulierten Entwicklungsziel (Zielliste, CURR011) und einem vollständigen Ablauf pro Slot (training_unit_sections + training_unit_section_items wie bei geplanten Einheiten — CURR010 inhaltlich, technisch seit 037 identisch zur Planungsstruktur). Der persistierte Progressionsgraph zwischen Übungen bleibt optional (CURR013).

Bibliothek only (036): Kein Kopfplan_mode/keine Kopfgroup_id; Zuordnung zu Gruppe und Datum erfolgt nur über kopierte Kalendertraining_units (Instanz).

Konkretisierung (037/API): POST /api/training-units/from-framework-slot legt eine geplante Einheit aus dem SlotBlueprint an; origin_framework_slot_id dient als Herkunftsreferenz (Lineage light; weiteres Feedback/LineageKonzept: Konzeptpapier Schritt E).

Trainingsmodul (Bibliothek)

Abgrenzung: Wiederverwendbare Übungsfolge (training_modules + training_module_items) — kein Kalendertermin, kein Rahmen-Slot. Übernahme in geplante Einheiten über Planung (apply-training-module).

Governance: wie andere Bibliotheksartefakte (visibility, club_id, library_content_visibility_sql).

Gewichtetes Fähigkeiten-Profil (Planungs-Bausteine, Phase 3)

Zweck: Aus den verknüpften Übungen eines Planungsartefakts wird ein Fähigkeiten-Profil berechnet (Trainingsgewicht je Fähigkeit). Trainer vergleichen Bausteine innerhalb desselben Typs, um z.B. das passendste Modul für eine Ziel-Fähigkeit zu finden.

Artefakttypen (getrennte Peer-Kontexte):

Typ Vergleich
training_module nur sichtbare Module
framework_program nur sichtbare Rahmenprogramme
progression_graph nur sichtbare Regressionspfade

Metriken (Nutzer):

  • Score / Gewicht — absolut (Dauer × Häufigkeit × Intensität × Stufen-Spanne)
  • Prozent — Anteil am stärksten sichtbaren Peer desselben Typs für diese Fähigkeit (max. 100 %)
  • — stärkster Peer in diesem Kontext

UI: Profile in Editoren; KPI-Kacheln und Filter in Listen (/planning/framework-programs, /planning/training-modules); Discovery auf der Fähigkeiten-Seite.

Technik: backend/skill_scoring.py, routers/skill_profiles.py — Spec technical/SKILL_SCORING_SPEC.md.

Parallele Trainingsstreams (Breakout)

Fachlich: Eine KalenderEinheit kann aus Phasen bestehen — z.B. gemeinsamer Block, dann beliebig viele parallele „Teilstrecken“ (Streams) mit je eigenem Miniplan (Abschnitte/Übungen), erneut gemeinsamer Block. Das ist nicht dasselbe wie ein RahmenprogrammSlot (SerienSession über Wochen): Slots strukturieren mehrere Einheiten in einem Programm; Streams strukturieren gleichzeitige Abläufe innerhalb einer Einheit.

Sonderfall Stationen: Rotation kann innerhalb einer StreamPlanung über Kombinationsübungen (Methodenprofil/Archetyp) abgebildet werden; hallenweit synchron getaktete Rotation ist eine erweiterte Ausbaustufe (siehe Fachkonzept).

Umsetzung (2026-05, Migration 063, App 0.8.137 ff.): Tabellen training_unit_phases und training_unit_parallel_streams; training_unit_sections mit phase_id und parallel_stream_id (exakt eine Zuordnung pro Sektion). GET /api/training-units/:id liefert phases (verschachtelt) und flache sections. Coaching und Durchführung nutzen dieselbe Phasenlogik im Frontend (trainingPlanUtils.js).

Dokumentation: functional/PARALLEL_TRAINING_STREAMS_CONCEPT.md, Umsetzung technical/PARALLEL_TRAINING_STREAMS_SPEC.md.

Medien-Archiv & Übungs-Anhänge (Stand 2026-05-07)

  • media_assets: Zentrale Datei-/Asset-Zeile (technisch u.a. SHADedupe, Sichtbarkeit, club_id, Lifecycle, Copyright, Speicherreferenz unter library/…). Siehe DATABASE_SCHEMA.md, MEDIA_ASSETS_AND_ARCHIVE_SPEC.md.
  • exercise_media: Verknüpfung Übung ↔ Asset (media_asset_id) oder Embed ohne Asset; Felder wie context (ablauf | detail | trainer_hint), Sortierung, Primär-Medium.
  • platform_media_storage: Konfiguration effektiver Medienwurzel (Superadmin, relativ zu MEDIA_ROOT).
  • Produkt: Medienbibliothek /media; in der Übungsbearbeitung Upload, Entfernen der Verknüpfung, Aus Archiv verknüpfen; Governance official und Copyright-Regeln wie in der Norm beschrieben.
  • Inline-Verweise in Fließtextfeldern: MEDIA_ASSETS_AND_ARCHIVE_SPEC.md §11, docs/HANDOVER.md §5.

Methodenbezug (§11.5)

Prinzip: Genau EINE Hauptmethode, optional weitere Nebenmethoden.

Beispiele:

  • Hauptmethode: Rollenspiel
  • Nebenmethoden: Strukturierte Übung, Reflexion

Optional später:

  • Sportmethodische Hauptmethode
  • Didaktische Zusatzmethode

Qualitäts- und Bearbeitungsstatus (§11.3)

Statusstufen

Übungsstatus:

  • Entwurf (in Arbeit)
  • In Bearbeitung (aktiv gepflegt)
  • Fachlich geprüft (Review OK)
  • Freigegeben (produktiv nutzbar)
  • Archiviert (nicht mehr aktiv)

Sichtbarkeitsebenen (§5.5)

Freigabeebenen:

  • Privat (nur Ersteller)
  • Für bestimmte Personen (später)
  • Verein (alle Vereinsmitglieder)
  • Sparte (nur bestimmte Sparte)
  • Allgemein/Global (alle Nutzer)
  • Offiziell (Standardinhalte)

Zusätzlich: Thematische Einschränkungen

  • Karate-Inhalte (nur Übungen mit focus_areas: ["karate"])
  • Selbstverteidigungs-Inhalte
  • Gewaltschutz-Inhalte

MediaWiki Import (ab Migration 018)

Import-Typen

1. Übungen (import_type: exercise)

  • Quelle: https://karatetrainer.net Kategorie:Übungen
  • Import-Modus: Vollständig mit Skill-Zuordnungen
  • Status: Produktiv (221 Übungen importiert)

2. Fähigkeiten (import_type: skill)

  • Quelle: https://karatetrainer.net Kategorie:Fähigkeitsbeschreibung
  • Import-Modus: DEPRECATED - Nutze Migration 023 stattdessen
  • Status: ⚠️ Migration 021 fehlerhaft, ersetzt durch Migration 023

3. Trainingsmethoden (import_type: method)

  • Quelle: https://karatetrainer.net Kategorie:Methodenbeschreibung
  • Import-Modus: Vollständig
  • Status: 🔲 Noch nicht implementiert

Import-Tracking

Duplikat-Erkennung:

  • Über wiki_import_references Tabelle
  • Verknüpfung wiki_page_idlocal_id
  • Reimport aktualisiert bestehende Einträge

Import-Metadaten:

  • import_source = 'mediawiki'
  • import_id = Wiki-Seitentitel
  • wiki_page_id = MediaWiki interne Page-ID

Admin-Workflows

Fokusbereich anlegen

  1. Admin navigiert zu Katalogverwaltung
  2. Wählt "Fokusbereiche"
  3. Klickt "Neu anlegen"
  4. Füllt aus: Name, Kürzel, Beschreibung, Farbe, Icon
  5. Speichert
  6. System validiert Eindeutigkeit (Name)
  7. Fokusbereich verfügbar für Stil-Zuordnung

Stil verschieben (zwischen Fokusbereichen)

Szenario: Goju-Ryu soll von "Karate" nach "Karate Traditional" verschoben werden.

Workflow:

  1. Admin wählt Stil "Goju-Ryu"
  2. Klickt "Verschieben"
  3. Wählt Ziel-Fokusbereich "Karate Traditional"
  4. System prüft:
    • Ziel-Fokusbereich existiert
    • Keine Namenskonflikte
  5. System aktualisiert:
    • style_directions.focus_area_id
    • Alle abhängigen Zielgruppen bleiben erhalten
  6. System loggt Änderung
  7. Erfolg-Meldung

Fokusbereich löschen (mit Schutz)

Szenario: "Judo" soll gelöscht werden.

Workflow:

  1. Admin wählt "Judo"
  2. Klickt "Löschen"
  3. System prüft Abhängigkeiten:
    SELECT COUNT(*) FROM style_directions WHERE focus_area_id = :id
    SELECT COUNT(*) FROM exercise_focus_areas WHERE focus_area_id = :id
    
  4. Falls verwendet:
    • Dialog: "Fokusbereich kann nicht gelöscht werden. 5 Stile und 23 Übungen sind zugeordnet."
    • Optionen:
      • "Abbrechen"
      • "Stile/Übungen umrouten" (Admin wählt Ziel)
      • "Archivieren statt löschen"
  5. Falls nicht verwendet:
    • Bestätigung: "Wirklich löschen? (Keine Abhängigkeiten)"
    • Löschen durchführen

Zielgruppe umrouten

Szenario: Alle Übungen für "Kinder" sollen zu "Schüler" umgeleitet werden.

Workflow:

  1. Admin wählt Zielgruppe "Kinder"
  2. Klickt "Umrouten"
  3. Wählt Ziel: "Schüler"
  4. System zeigt Vorschau:
    • "47 Übungen werden aktualisiert"
    • Liste der betroffenen Übungen (mit Scroll)
  5. Admin bestätigt
  6. System führt Batch-Update aus:
    UPDATE exercise_target_groups
    SET target_group_id = :new_id
    WHERE target_group_id = :old_id
    
  7. Optional: Alte Zielgruppe löschen oder archivieren
  8. Erfolg-Meldung mit Log-Referenz

Nächste Schritte

  • Level-Definitionen aus Fähigkeitsmatrix extrahieren (optional)
  • Skills-Beschreibungen aus Wiki importieren (Migration 024)
  • Admin-UI für Fähigkeiten-Kategorien (CRUD)
  • Skill-Filter in Übungssuche (SkillTreeMultiSelect + Stufen)
  • Gewichtetes Fähigkeiten-Profil für Planungs-Bausteine (Module, Rahmen, Pfade) — siehe technical/SKILL_SCORING_SPEC.md
  • Reifegradmodelle definieren (Kombination Fokusbereich + Stil + Zielgruppe)
  • KI-Unterstützung für Trainingsplanung (basierend auf Fähigkeiten-Level)

Letzte Aktualisierung: 2026-05-20
Verantwortlich: Claude Code
Review: Pending