All checks were successful
Deploy Development / deploy (push) Successful in 48s
Test Suite / pytest-backend (push) Successful in 45s
Test Suite / lint-backend (push) Successful in 1s
Test Suite / build-frontend (push) Successful in 15s
Test Suite / k6 /health Baseline (push) Successful in 34s
Test Suite / playwright-tests (push) Successful in 1m35s
Document cross-app architecture patterns, Mitai alignment, and family entitlement standards. Documentation only; no runtime changes. Co-authored-by: Cursor <cursoragent@cursor.com>
130 lines
5.0 KiB
Markdown
130 lines
5.0 KiB
Markdown
# Training Planning – Designprinzipien (Extraktion)
|
||
|
||
**Status:** Analyse / Arbeitspapier
|
||
**Stand:** 2026-07-04
|
||
**Geltungsbereich:** Modul „Training Planning“ — Einheiten, Phasen, Rahmen, Coach
|
||
|
||
**Serie:** Designprinzipien für Produktfamilie · Shinkan Dokument 9 von 15
|
||
**Mitai-Vergleich:** — (domänenspezifisch)
|
||
|
||
**Kernkomponenten:**
|
||
|
||
| Bereich | Pfade |
|
||
|---------|-------|
|
||
| Kalender-Einheiten | `backend/routers/training_planning.py` |
|
||
| Module | `backend/routers/training_modules.py` |
|
||
| Rahmen | `backend/routers/training_framework_programs.py` |
|
||
| Phasen/Streams | Migration 063; `PARALLEL_TRAINING_STREAMS_SPEC.md` |
|
||
| Frontend | `TrainingPlanningPage`, `TrainingCoachPage`, `TrainingUnitRunPage` |
|
||
| Utils | `frontend/src/utils/trainingPlanUtils.js` |
|
||
|
||
---
|
||
|
||
## Modul
|
||
|
||
**Training Planning & Frameworks**
|
||
|
||
Planbare Trainingseinheiten mit Sektionen, **Phasen** (Ganzgruppe/Parallel) und **Streams**, Bibliotheks-**Rahmenprogramme** (Ziele/Slots), **Trainingsmodule**, Materialisierung aus Slots, Durchführungs- und Coaching-Ansichten.
|
||
|
||
---
|
||
|
||
## Designprinzipien
|
||
|
||
### 1. Einheit als planbares Aggregate
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Prinzip** | `training_units` + `training_unit_sections` + Items; Kopf: Gruppe, Datum, Trainer, Status. |
|
||
| **Begründung** | Klare Grenze Kalender vs. Bibliothek. |
|
||
| **Quelle** | Domain Model; `training_planning.py` |
|
||
| **Tragfähigkeit** | **hoch** |
|
||
| **Einschränkung** | Große Router-Datei — Refaktor-Schuld. |
|
||
|
||
### 2. Phasen/Streams als explizites Modell (nicht Marker-Sektionen)
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Prinzip** | `training_unit_phases` + `training_unit_parallel_streams`; Sektionen an Phase oder Stream gebunden. |
|
||
| **Begründung** | Breakout-Trainings fachlich korrekt; Coach/Rejoin-Logik. |
|
||
| **Quelle** | `PARALLEL_TRAINING_STREAMS_SPEC.md` |
|
||
| **Tragfähigkeit** | **hoch** |
|
||
| **Einschränkung** | Legacy-Einheiten → Default-Ganzgruppenphase; Vorlagen-Phasen teils offen. |
|
||
|
||
### 3. API: verschachtelte `phases` + flache `sections`
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Prinzip** | GET liefert beides; PUT akzeptiert `phases` atomar; höchstens eines von phases/sections/exercises pro Request. |
|
||
| **Begründung** | Frontend normalisiert; Server validiert CHECK-Regeln. |
|
||
| **Quelle** | Spec §4; Planning-Router |
|
||
| **Tragfähigkeit** | **hoch** |
|
||
| **Einschränkung** | Server-Spiegelung neuer Abschnitte in phases — Handover offen. |
|
||
|
||
### 4. Rahmen-Bibliothek: Slot = Blueprint-Unit
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Prinzip** | `framework_slot_id` auf Blueprint-`training_units`; Materialisierung → Kalender-Einheit für Gruppe. |
|
||
| **Begründung** | Wiederverwendbare Programme ohne Duplikat-Logik pro Slot-Typ. |
|
||
| **Quelle** | Migration 035–037 |
|
||
| **Tragfähigkeit** | **hoch** |
|
||
| **Einschränkung** | UI „Aus Rahmen übernehmen“ nicht flächendeckend. |
|
||
|
||
### 5. Trainingsmodule als wiederverwendbare Übungsfolgen
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Prinzip** | Bibliotheks-Objekt mit Skill-Profil; Übernahme in geplante Einheit. |
|
||
| **Begründung** | Trainer-Bausteine zwischen Einzelübung und Rahmen. |
|
||
| **Quelle** | `training_modules.py`; Skill Scoring Phase 3 |
|
||
| **Tragfähigkeit** | **hoch** |
|
||
| **Einschränkung** | — |
|
||
|
||
### 6. Drei Durchführungsmodi getrennt
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Prinzip** | Planung (edit) · Plan & Ablauf (run) · Coaching (step timeline, Stream-Picks, Nachbereitung). |
|
||
| **Begründung** | Unterschiedliche UX und Payloads; Coach speichert → Run-Ansicht. |
|
||
| **Quelle** | Nutzerfunktionen §4.4; `TrainingCoachPage` |
|
||
| **Tragfähigkeit** | **hoch** |
|
||
| **Einschränkung** | Stream-Tabs in Run-Ansicht optional offen. |
|
||
|
||
### 7. Governance über Gruppe/Verein, keine neuen Mandanten-Entitäten
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Prinzip** | Einheit → `training_group` → Verein; Access Layer für Bibliotheks-Rahmen/Module. |
|
||
| **Begründung** | Planung erbt Organisations-Kontext. |
|
||
| **Quelle** | `PARALLEL_TRAINING_STREAMS_SPEC.md` §4 |
|
||
| **Tragfähigkeit** | **hoch** |
|
||
| **Einschränkung** | Stream-Trainer-Zuweisung UI unvollständig. |
|
||
|
||
### 8. Kombinationsübungen in Planung transparent
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Prinzip** | Items ohne Variante; Coach zeigt Stations-Kandidaten + Archetyp-Hinweise. |
|
||
| **Begründung** | Gleiche Item-Schicht für Standard- und Kombi-Übungen. |
|
||
| **Quelle** | Migration 057; Kombinations-Spec Anhang A |
|
||
| **Tragfähigkeit** | **mittel** |
|
||
| **Einschränkung** | Archetyp-Stufen B/C ausbaubar. |
|
||
|
||
---
|
||
|
||
## Nicht übernehmen
|
||
|
||
1. **Parallele Phasen als reine UI-Konvention ohne DB-Phasen** — Minimalvariante verworfen.
|
||
2. **Rahmen-Slots als separate Exercise-Join-Tabelle** — Legacy `training_framework_slot_exercises` abgelöst.
|
||
3. **Planungs-KI direkt in Router-Strings** — AI Prompt Runtime nutzen.
|
||
4. **Blueprint-Einheiten in Kalenderlisten** — Filter `framework_slot_id IS NOT NULL`.
|
||
|
||
---
|
||
|
||
## Verwandte Dokumentation
|
||
|
||
- [PARALLEL_TRAINING_STREAMS_SPEC.md](../../../.claude/docs/technical/PARALLEL_TRAINING_STREAMS_SPEC.md)
|
||
- [TRAINING_FRAMEWORK_SPEC.md](../../../.claude/docs/technical/TRAINING_FRAMEWORK_SPEC.md)
|
||
- [SKILL_SCORING_DESIGN_PRINCIPLES.md](./SKILL_SCORING_DESIGN_PRINCIPLES.md)
|
||
- [DESIGN_PRINCIPLES_INDEX.md](./DESIGN_PRINCIPLES_INDEX.md)
|