This commit is contained in:
team3
2026-06-17 11:21:12 +02:00
parent d6b748cb94
commit e8214598ea
2 changed files with 10 additions and 3 deletions

View File

@@ -29,7 +29,8 @@ KRITIK_MAX_RUNDEN = 2 # Generator → Kritiker → ggf. Neu, höchstens so oft
def score_berechnen( def score_berechnen(
score_vor_frage: int, gut: bool, streak: int, tier2: bool, tier3: bool, absolviert: bool, gemeistert: bool, score_vor_frage: int, gut: bool, streak: int, tier2: bool, tier3: bool,
absolviert: bool, verstanden: bool, gemeistert: bool,
) -> int: ) -> int:
"""Neuer Score nach einer Antwort · driftfrei (immer aus dem Basis-Score gerechnet). """Neuer Score nach einer Antwort · driftfrei (immer aus dem Basis-Score gerechnet).
@@ -44,6 +45,12 @@ def score_berechnen(
""" """
if gemeistert: if gemeistert:
return MEISTERN return MEISTERN
# Stufe richtet sich nach dem Baustein-Fortschritt, nicht nur nach den
# Guide-Flags: ein frischer Baustein durchläuft erst Tier 1 (0→3), auch
# wenn der Guide schon tier2/tier3 freigibt. Tier 2 erst ab absolviert,
# Tier 3 erst ab verstanden.
tier2 = tier2 and absolviert
tier3 = tier3 and verstanden
if not tier2: if not tier2:
floor, cap, strafe = (NOETIG if absolviert else 0), NOETIG, 0 floor, cap, strafe = (NOETIG if absolviert else 0), NOETIG, 0
elif not tier3: elif not tier3:

View File

@@ -252,7 +252,7 @@ async def baustein_pruefung_route(req: BausteinPruefungRequest):
) )
if data is None: if data is None:
raise HTTPException(502, "Bewertung fehlgeschlagen — bitte erneut versuchen") raise HTTPException(502, "Bewertung fehlgeschlagen — bitte erneut versuchen")
score = score_berechnen(req.score_vor_frage, data["bewertung"] == "gut", req.streak, req.tier2, req.tier3, absolviert, gemeistert) score = score_berechnen(req.score_vor_frage, data["bewertung"] == "gut", req.streak, req.tier2, req.tier3, absolviert, verstanden, gemeistert)
return {"feedback": data["feedback"], "bewertung": data["bewertung"], "gute_antworten": score, return {"feedback": data["feedback"], "bewertung": data["bewertung"], "gute_antworten": score,
"absolviert": absolviert, "verstanden": verstanden, "gemeistert": gemeistert} "absolviert": absolviert, "verstanden": verstanden, "gemeistert": gemeistert}
@@ -265,7 +265,7 @@ async def baustein_pruefung_route(req: BausteinPruefungRequest):
# Score driftfrei aus dem Basis-Score rechnen (Re-Bewertung ersetzt das vorige Ergebnis). # Score driftfrei aus dem Basis-Score rechnen (Re-Bewertung ersetzt das vorige Ergebnis).
score = score_berechnen( score = score_berechnen(
req.score_vor_frage, data["bewertung"] == "gut", req.streak, req.tier2, req.tier3, absolviert, gemeistert, req.score_vor_frage, data["bewertung"] == "gut", req.streak, req.tier2, req.tier3, absolviert, verstanden, gemeistert,
) )
gute = await set_baustein_score(req.topic, req.baustein, score) gute = await set_baustein_score(req.topic, req.baustein, score)
if score >= NOETIG and not absolviert: if score >= NOETIG and not absolviert: