Im globalen /aufgaben/-Kontext ist ausschreibung=None; die direkten FK-IDs
auf dem Aufgabe-Objekt sind immer vorhanden und erfordern kein Queryset-Join.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Aufgabe bekommt ein phase-Feld (1–8). aufgaben_score()-Helper in
core/services.py berechnet abgeschlossen/total/score_pct für jedes
QuerySet. Score-Spalten in Ausschreibungen-Liste, Lose-Liste und
Ausschreibungs-Detail; per-Phase-Scores in der Seitenleisten-Navigation.
Phasenfilter in Aufgaben-Liste. 68 Tests grün.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>