fix stage
This commit is contained in:
@@ -5,14 +5,6 @@ import {
|
||||
} from "@/lib/bracket";
|
||||
import { placeIsSecure } from "@/lib/secure-places";
|
||||
|
||||
// Eine Gruppe gilt als abgeschlossen, wenn alle ihre Gruppenspiele beendet sind.
|
||||
// Wird für die Drittplatzierten-Sicherheit genutzt (gruppenübergreifend).
|
||||
function groupFinished(group: GroupId, matches: Match[]): boolean {
|
||||
const groupMatches = matches.filter((m) => m.group === group);
|
||||
if (groupMatches.length === 0) return false;
|
||||
return groupMatches.every((m) => m.status === "FINISHED");
|
||||
}
|
||||
|
||||
// Ein aufgelöster Teilnehmer einer K.o.-Begegnung.
|
||||
export interface ResolvedSide {
|
||||
teamId: string | null; // null = noch Platzhalter
|
||||
@@ -54,6 +46,15 @@ function loserOf(m: Match | undefined): string | null {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Prüft, ob die gesamte Gruppenphase abgeschlossen ist.
|
||||
// Erst dann stehen die Drittplatzierten-Rangliste und die
|
||||
// Annex-C-Zuordnung final fest.
|
||||
function groupStageComplete(matches: Match[]): boolean {
|
||||
const groupMatches = matches.filter((m) => m.group != null);
|
||||
if (groupMatches.length === 0) return false;
|
||||
return groupMatches.every((m) => m.status === "FINISHED");
|
||||
}
|
||||
|
||||
// Löst einen R32-Slot (W/R/3) zu einer Team-ID auf, sofern bereits bekannt.
|
||||
// provisional = true, solange die zugrunde liegende Gruppe/Zuordnung nicht fix ist.
|
||||
function resolveR32Slot(
|
||||
@@ -88,9 +89,11 @@ function resolveR32Slot(
|
||||
const thirdGroup = assignment[winnerGroup];
|
||||
if (thirdGroup) {
|
||||
const row = thirds.find((r) => r.group === thirdGroup && r.qualifies);
|
||||
// Fix nur, wenn Annex C aufgelöst UND die Quellgruppe abgeschlossen ist
|
||||
// (Drittplatzierten-Qualifikation ist gruppenübergreifend, bis zuletzt offen).
|
||||
const fix = annexResolved && groupFinished(thirdGroup, matches);
|
||||
// Fix nur, wenn ALLE drei Bedingungen erfüllt sind:
|
||||
// 1. Annex C aufgelöst (8 Dritte zuweisbar)
|
||||
// 2. Komplette Gruppenphase beendet (Dritten-Rangliste final)
|
||||
// 3. Das Team gehört gesichert zu den besten 8
|
||||
const fix = annexResolved && groupStageComplete(matches) && row?.qualifies === true;
|
||||
const provisional = !fix;
|
||||
const prefix = provisional ? "aktuell " : "";
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user