fix(#177): _row_to_detail Matrix-Rating-Shift entfernt — Wurzel von '+/++ gleichfarbig'

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) <noreply@anthropic.com>
This commit is contained in:
Dotty Dotter 2026-05-06 23:39:52 +02:00
parent c87b99f778
commit ee93fcd76a

View File

@ -421,9 +421,18 @@ def _row_to_detail(row):
field = cell.get("field", "") field = cell.get("field", "")
if field: if field:
rating_raw = cell.get("rating", 0) rating_raw = cell.get("rating", 0)
# DB speichert rating als 1-5 Skala (1=,2=,3=○,4=+,5=++), # DB speichert rating als 5..+5 Skala (siehe models.py:MatrixEntry).
# matrix_mini erwartet -2..+2. Mapping: DB-3=0, DB-4=+1, DB-5=+2, DB-2=1, DB-1=2 # matrix_mini erwartet die gleiche Skala — kein Shift.
rating_normalized = int(rating_raw) - 3 # (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", "") symbol = cell.get("symbol", "")
matrix_dict[field] = {"rating": rating_normalized, "symbol": symbol} matrix_dict[field] = {"rating": rating_normalized, "symbol": symbol}