From ee93fcd76a46dec88038eb17cf4209a4c3c0d2e7 Mon Sep 17 00:00:00 2001 From: Dotty Dotter Date: Wed, 6 May 2026 23:39:52 +0200 Subject: [PATCH] =?UTF-8?q?fix(#177):=20=5Frow=5Fto=5Fdetail=20Matrix-Rati?= =?UTF-8?q?ng-Shift=20entfernt=20=E2=80=94=20Wurzel=20von=20'+/++=20gleich?= =?UTF-8?q?farbig'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DB speichert seit langem die volle -5..+5 Skala (siehe models.py MatrixEntry mit ge=-5, le=5), aber _row_to_detail shiftet noch 'rating - 3' (Migration-Reste der alten 1..5 → -2..+2-Skala). Folge: rating=5 wurde zu 2, rating=4 zu 1, beide landeten im matrix_mini auf der m-p-Klasse (rating 1..3) → kraftiges Gruen (m-pp) wurde fast nie ausgespielt. Fix: kein Shift; defensive int-Konversion + Clamp -5..+5. Co-Authored-By: Claude Opus 4.7 (1M context) --- app/main.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/app/main.py b/app/main.py index 394f8d0..349357a 100644 --- a/app/main.py +++ b/app/main.py @@ -421,9 +421,18 @@ def _row_to_detail(row): field = cell.get("field", "") if field: rating_raw = cell.get("rating", 0) - # DB speichert rating als 1-5 Skala (1=−−,2=−,3=○,4=+,5=++), - # matrix_mini erwartet -2..+2. Mapping: DB-3=0, DB-4=+1, DB-5=+2, DB-2=−1, DB-1=−2 - rating_normalized = int(rating_raw) - 3 + # DB speichert rating als −5..+5 Skala (siehe models.py:MatrixEntry). + # matrix_mini erwartet die gleiche Skala — kein Shift. + # (Frueher 1..5 → -2..+2 mit `- 3`; DB-Migration auf -5..+5 ist + # laengst durch, der Shift war ein Bug der ratings={3,4,5} alle + # auf m-p mapped → "+/++ gleichfarbig"-Befund aus #177.) + try: + rating_normalized = int(rating_raw) + except (TypeError, ValueError): + rating_normalized = 0 + # Defensiv: wenn rating ausserhalb -5..+5 liegt, clampen. + if rating_normalized < -5: rating_normalized = -5 + if rating_normalized > 5: rating_normalized = 5 symbol = cell.get("symbol", "○") matrix_dict[field] = {"rating": rating_normalized, "symbol": symbol}