third place corrected

This commit is contained in:
2026-06-26 13:25:39 -05:00
parent a38b3fa517
commit 1985289a37
2 changed files with 324 additions and 12 deletions

View File

@@ -4,6 +4,7 @@ import {
ThirdAssignment, slotLabel,
} from "@/lib/bracket";
import { placeIsSecure } from "@/lib/secure-places";
import { thirdSlotIsSecure } from "@/lib/third-place-security";
// Ein aufgelöster Teilnehmer einer K.o.-Begegnung.
export interface ResolvedSide {
@@ -46,15 +47,6 @@ 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(
@@ -91,9 +83,12 @@ function resolveR32Slot(
const row = thirds.find((r) => r.group === thirdGroup && r.qualifies);
// 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;
// 2. Der Slot ist in allen noch möglichen Konstellationen stabil
// (Enumeration aller Annex-C-Kombinationen)
// 3. Das konkrete Team ist bekannt (Gruppe fertig)
const fix = annexResolved
&& thirdSlotIsSecure(winnerGroup, matches, teams)
&& row?.qualifies === true;
const provisional = !fix;
const prefix = provisional ? "aktuell " : "";
return {