# Phase 0a: Minimal Goal System (Strategic + Tactical)

**Status:** ✅ ABGESCHLOSSEN (26.03.2026)
**Labels:** feature, enhancement, goal-system
**Priority:** High (Foundation for Phase 0b)
**Aufwand:** 3-4h (geschätzt) / ~4h (tatsächlich)

---

## Beschreibung

Implementierung des minimalen Zielsystems als Basis für goal-aware KI-Analysen. Zwei-Ebenen-Architektur:
- **Strategic Layer:** Goal Modes (beeinflusst Score-Gewichtung)
- **Tactical Layer:** Konkrete Zielwerte mit Progress-Tracking

---

## Implementiert ✅

### Strategic Layer (Goal Modes)
- `goal_mode` in `profiles` table
- 5 Modi: `weight_loss`, `strength`, `endurance`, `recomposition`, `health`
- Bestimmt Score-Gewichtung für alle KI-Analysen
- **UI:** 5 Goal Mode Cards mit Beschreibungen und Icons

### Tactical Layer (Concrete Goals)
- `goals` table mit vollständigem Tracking:
  - Target/Current/Start values
  - Progress percentage (auto-calculated)
  - Projection date & on-track status
  - Primary/Secondary goal concept
  - 8 Goal-Typen: weight, body_fat, lean_mass, vo2max, strength, flexibility, bp, rhr
- **UI:**
  - Goal CRUD mit Fortschrittsbalken
  - Mobile-friendly Design (full-width inputs, labels above fields)
  - Inline editing vorbereitet

### Training Phases Framework
- `training_phases` table (Auto-Detection vorbereitet für Phase 2)
- 5 Phase-Typen: calorie_deficit, calorie_surplus, deload, maintenance, periodization
- Status-Flow: suggested → accepted → active → completed → rejected
- Confidence scoring für KI-basierte Erkennung
- JSONB detection_params für Flexibilität

### Fitness Tests
- `fitness_tests` table für standardisierte Tests
- 8 Test-Typen: cooper_12min, step_test, pushups_max, plank_max, flexibility_sit_reach, vo2max_est, strength_1rm_squat, strength_1rm_bench
- Norm-Kategorisierung vorbereitet (age/gender-spezifisch)
- Baseline-Tracking für Fortschrittsmessung

---

## Technische Umsetzung

### Backend

**Migration 022:** `backend/migrations/022_goal_system.sql`
```sql
-- Strategic Layer
ALTER TABLE profiles ADD COLUMN goal_mode VARCHAR(50) DEFAULT 'health';

-- Tactical Layer
CREATE TABLE goals (...);
CREATE TABLE training_phases (...);
CREATE TABLE fitness_tests (...);
```

**Router:** `backend/routers/goals.py` (490 Zeilen)
- Vollständiges CRUD für alle 3 Ebenen
- Progress calculation (auto-update current values)
- Linear projection für target_date
- Helper functions für goal-type spezifische Current-Values

**API Endpoints:** `/api/goals/*`
- `GET/PUT /mode` - Strategic goal mode
- `GET /list` - All goals with progress
- `POST /create` - Create goal
- `PUT /{id}` - Update goal
- `DELETE /{id}` - Delete goal
- `GET/POST /phases` - Training phases
- `PUT /phases/{id}/status` - Accept/reject auto-detected phases
- `GET/POST /tests` - Fitness tests

### Frontend

**GoalsPage:** `frontend/src/pages/GoalsPage.jsx` (570 Zeilen)
- **Goal Mode Selector:** 5 Karten mit Icons, Farben, Beschreibungen
- **Goal List:** Cards mit Progress-Balken, Projection-Display, Edit/Delete
- **Goal Form:** Mobile-optimiertes Modal
  - Full-width inputs
  - Labels above fields (not beside)
  - Section headers with emoji (🎯 Zielwert)
  - Unit display as styled badge
  - Primary goal checkbox in highlighted section
  - Text-align: left für Text-Felder, right für Zahlen
- **Empty State:** Placeholder mit CTA

**Navigation Integration:**
- **Dashboard:** Goals Preview Card mit "Verwalten →" Link
- **Analysis Page:** 🎯 Ziele Button neben Titel (direkter Zugang)
- **Route:** `/goals` in App.jsx registriert

**api.js:** 15+ neue API-Funktionen
```javascript
// Goal Modes
getGoalMode(), updateGoalMode(mode)

// Goals CRUD
listGoals(), createGoal(data), updateGoal(id, data), deleteGoal(id)

// Training Phases
listTrainingPhases(), createTrainingPhase(data), updatePhaseStatus(id, status)

// Fitness Tests
listFitnessTests(), createFitnessTest(data)
```

---

## Commits

| Commit | Beschreibung |
|--------|-------------|
| `337667f` | feat: Phase 0a - Minimal Goal System (Strategic + Tactical) |
| `906a3b7` | fix: Migration 022 - remove invalid schema_migrations tracking |
| `75f0a5d` | refactor: mobile-friendly goal form design |
| `5be52bc` | feat: goals navigation + UX improvements |

**Branch:** `develop`
**Deployed to:** `dev.mitai.jinkendo.de` ✅

---

## Dokumentation

- ✅ `.claude/docs/working/GOALS_SYSTEM_UNIFIED_ANALYSIS.md` (538 Zeilen)
  - Analyse beider Fachkonzepte (Konzept v2 + GOALS_VITALS.md)
  - Zwei-Ebenen-Architektur erklärt
  - 120+ Placeholder-Kategorisierung für Phase 0b
- ✅ Migration 022 mit vollständigen COMMENT ON statements
- ✅ API-Dokumentation in Router-Docstrings
- ✅ Dieses Issue-Dokument

---

## Basis für Phase 0b

Phase 0a bietet die Foundation für:

### Phase 0b: Goal-Aware Placeholders (16-20h)
- ✅ 120+ neue Platzhalter die `goal_mode` berücksichtigen
- ✅ Score-Berechnungen abhängig von Strategic Layer
- ✅ Baseline-Berechnungen (7d/28d/90d Trends)
- ✅ Lag-basierte Korrelationen
- ✅ Confidence Scoring

**Beispiel Goal-Mode Impact:**
```python
# Gleiche Daten, unterschiedliche Interpretation:
Δ: -5kg FM, -2kg LBM

goal_mode = "weight_loss"
  → body_progress_score = 78/100 (FM↓ gut, LBM↓ tolerierbar)

goal_mode = "strength"
  → body_progress_score = 32/100 (LBM↓ ist KATASTROPHE!)

goal_mode = "health"
  → body_progress_score = 50/100 (neutral, ohne Bias)
```

---

## Testing

✅ Migration erfolgreich auf dev.mitai.jinkendo.de
✅ Goal Mode wechselbar
✅ Goal CRUD funktioniert
✅ Progress calculation korrekt
✅ Mobile UI responsive
✅ Navigation von Dashboard + Analysis

**Manuelle Tests durchgeführt:**
- [x] Goal Mode ändern
- [x] Ziel erstellen (alle 8 Typen)
- [x] Ziel bearbeiten
- [x] Ziel löschen
- [x] Primary Goal setzen
- [x] Progress-Balken korrekt
- [x] Mobile UI full-width
- [x] Text-Align korrekt

---

## Akzeptanzkriterien

- [x] Migration 022 erfolgreich
- [x] Goal Mode in profiles funktioniert
- [x] Goals CRUD vollständig
- [x] Progress-Tracking funktioniert
- [x] Primary Goal Konzept implementiert
- [x] Mobile-friendly UI
- [x] Navigation von 2+ Stellen
- [x] API-Dokumentation vollständig
- [x] Frontend form validation
- [x] Error handling korrekt

---

## Nächste Schritte

**Empfohlen:**

1. **Option A: Issue #49 - Prompt Page Assignment (6-8h)**
   - Prompts auf Verlaufsseiten zuordnen
   - Quick Win für bessere UX
   - Nutzt bestehendes Unified Prompt System

2. **Option B: Phase 0b - Goal-Aware Placeholders (16-20h)**
   - 120+ neue Platzhalter
   - Score-Berechnungen mit goal_mode
   - Größter strategischer Impact

**Siehe:** `.claude/docs/working/NEXT_STEPS_2026-03-26.md` für detaillierte Planung

---

## Lessons Learned

### Was gut lief:
- ✅ Zwei-Ebenen-Architektur (Strategic + Tactical) macht Sinn
- ✅ Mobile-first Design von Anfang an
- ✅ Unified Analysis vor Implementierung (beide Fachkonzepte)
- ✅ Migration-System funktioniert einwandfrei

### Was zu beachten ist:
- ⚠️ Schema_migrations verwendet `filename`, nicht `version`
- ⚠️ Unnötige DO-Blocks in Migrationen vermeiden
- ⚠️ Text-align: right als Default in form-input (für Textfelder überschreiben)

---

**Erstellt:** 26. März 2026
**Status:** ✅ COMPLETE - Ready for Phase 0b
**Related Issues:** #49 (Prompt Assignment), #47 (Value Table Refinement)
