Trainings-Qualität: zielbezogene Logik + Listen-Filter statt globalem „Hochwertig“-Hide #76

Open
opened 2026-04-11 22:07:49 +02:00 by Lars · 0 comments
Owner

Ausgangslage

  • quality_label / quality_filter_level (Issue #31) filtern aktuell u. a. Aktivitätsliste (routers/activity.py) und KI-Rohkontext (routers/insights.py_get_profile_data) per get_quality_filter_sql().
  • Data-Layer / Platzhalter / Chart-Aggregate (data_layer/activity_metrics.py) nutzen keinen solchen Filter – es werden alle Einträge im Zeitfenster einbezogen (inkl. fehlender Einstufung).
  • Bei Filterstufen ≠ all schließen SQL-IN-Bedingungen NULL und nicht erlaubte Labels aus → Einträge ohne Einstufung oder mit „niedriger“ Stufe sind in Liste und KI-Payload nicht sichtbar.

Problem

  1. Begriff „Qualität“ soll künftig nicht nur Akzeptanz (formales Label / Datenhygiene) meinen, sondern echte Nutzenqualität im Sinne Zielerreichung (Passung zu Goals, Focus Areas, Trainingsphase, Belastungssteuerung o. Ä.). Dafür ist die heutige Filterlogik nur ein erster Schritt und muss inhaltlich und technisch überdacht werden.

  2. Globale Filter auf Profil-Ebene für die Listendarstellung sind problematisch: Nutzer verlieren den Überblick über Einträge ohne oder mit abweichender Einstufung; Pflege (Nachbearbeitung, Bulk-Mapping) wird erschwert. Der globale Filter sollte hier nicht dazu führen, dass „fehlende“ oder „noch nicht bewertete“ Sessions unsichtbar werden.

Zielbild (Richtung, zur Ausarbeitung)

  • Klare Trennung oder Kombination aus: (A) Anzeige-/Arbeitsansicht „alle Daten sichtbar“ vs (B) optionale lokale Filter/Sortierung in der Liste (z. B. nach Label, fehlender Einstufung, Zeitraum).
  • Insights/KI: definieren, ob und wann gefilterte vs vollständige Aktivitätsmenge sinnvoll ist; ggf. explizite Kennzeichnung im Prompt oder konfigurierbar.
  • Zielbezogene Qualität: Konzept/Metrik(en) festlegen (nicht nur excellent/good/acceptable), Anbindung an Goals/Focus/Phasen – Umsetzung kann in Folge-Issues erfolgen.

Akzeptanzkriterien (erste Iteration)

  • Produkt/UX: Vorschlag, wie die Aktivitätsliste standardmäßig alle relevanten Einträge zeigt; Filter optional und nachvollziehbar (inkl. „ohne Einstufung“ / NULL).
  • Backend: API-Parameter oder UI-getriebene Filter statt (oder ergänzend zu) globalem Verstecken – kein unbemerktes Ausblenden unklassifizierter Zeilen in der Hauptliste ohne Nutzeraktion.
  • Dokumentation: Kurz festhalten, wo noch get_quality_filter_sql greift und wie es sich zu Data-Layer-Auswertungen verhält.
  • Verweis auf spätere Ausbaustufe: zielbezogene Qualitätslogik (eigenes Teilziel oder Follow-up-Issue).

Referenzen im Repo

  • backend/quality_filter.py
  • backend/routers/activity.py (list_activity)
  • backend/routers/insights.py (_get_profile_data)
  • backend/data_layer/activity_metrics.py (ungefilterte Aggregationen)

Aufwand (grob)

  • Konzept + Liste: M; KI/Insights-Abgleich: S–M; zielbezogene Qualität: L (Folge).
## Ausgangslage - `quality_label` / `quality_filter_level` (Issue #31) filtern aktuell u. a. **Aktivitätsliste** (`routers/activity.py`) und **KI-Rohkontext** (`routers/insights.py` → `_get_profile_data`) per `get_quality_filter_sql()`. - **Data-Layer / Platzhalter / Chart-Aggregate** (`data_layer/activity_metrics.py`) nutzen **keinen** solchen Filter – es werden alle Einträge im Zeitfenster einbezogen (inkl. fehlender Einstufung). - Bei Filterstufen ≠ `all` schließen SQL-`IN`-Bedingungen **`NULL`** und nicht erlaubte Labels aus → Einträge **ohne Einstufung** oder mit „niedriger“ Stufe sind in Liste und KI-Payload **nicht sichtbar**. ## Problem 1. **Begriff „Qualität“** soll künftig nicht nur **Akzeptanz** (formales Label / Datenhygiene) meinen, sondern **echte Nutzenqualität** im Sinne **Zielerreichung** (Passung zu Goals, Focus Areas, Trainingsphase, Belastungssteuerung o. Ä.). Dafür ist die heutige Filterlogik nur ein erster Schritt und muss inhaltlich und technisch überdacht werden. 2. **Globale Filter auf Profil-Ebene** für die **Listendarstellung** sind **problematisch**: Nutzer verlieren den Überblick über Einträge ohne oder mit abweichender Einstufung; Pflege (Nachbearbeitung, Bulk-Mapping) wird erschwert. Der globale Filter sollte hier **nicht** dazu führen, dass „fehlende“ oder „noch nicht bewertete“ Sessions **unsichtbar** werden. ## Zielbild (Richtung, zur Ausarbeitung) - Klare Trennung oder Kombination aus: **(A)** Anzeige-/Arbeitsansicht „alle Daten sichtbar“ vs **(B)** optionale **lokale** Filter/Sortierung in der Liste (z. B. nach Label, fehlender Einstufung, Zeitraum). - **Insights/KI:** definieren, ob und wann gefilterte vs vollständige Aktivitätsmenge sinnvoll ist; ggf. **explizite** Kennzeichnung im Prompt oder konfigurierbar. - **Zielbezogene Qualität:** Konzept/Metrik(en) festlegen (nicht nur `excellent/good/acceptable`), Anbindung an Goals/Focus/Phasen – Umsetzung kann in Folge-Issues erfolgen. ## Akzeptanzkriterien (erste Iteration) - [ ] Produkt/UX: Vorschlag, wie die **Aktivitätsliste** standardmäßig **alle** relevanten Einträge zeigt; Filter optional und nachvollziehbar (inkl. „ohne Einstufung“ / `NULL`). - [ ] Backend: API-Parameter oder UI-getriebene Filter statt (oder ergänzend zu) globalem Verstecken – **kein** unbemerktes Ausblenden unklassifizierter Zeilen in der Hauptliste ohne Nutzeraktion. - [ ] Dokumentation: Kurz festhalten, wo noch `get_quality_filter_sql` greift und wie es sich zu Data-Layer-Auswertungen verhält. - [ ] Verweis auf spätere Ausbaustufe: zielbezogene Qualitätslogik (eigenes Teilziel oder Follow-up-Issue). ## Referenzen im Repo - `backend/quality_filter.py` - `backend/routers/activity.py` (`list_activity`) - `backend/routers/insights.py` (`_get_profile_data`) - `backend/data_layer/activity_metrics.py` (ungefilterte Aggregationen) ## Aufwand (grob) - Konzept + Liste: **M**; KI/Insights-Abgleich: **S–M**; zielbezogene Qualität: **L** (Folge).
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Lars/mitai-jinkendo#76
No description provided.