**Lizenzvorschlag bei Kursen im System** (api#861): Die Lizenzvergabe (`GET admin/referee_course_licensing`) nennt je offener Zeile einen `suggestion` mit Stufe, maßgeblicher Saison, gezählten Spielen und Mindestzahl. Nur ein Vorschlag: Die Stufe setzt FD weiterhin selbst. Die Regeln pflegt Admin an der jeweiligen Lizenzstufe (`admin/referee_license_suggestion_rules`): Kurstyp, optionale Mindestzahl an Spielen, Wertung (alle, Kleinfeld, Großfeld) und gezählte Altersklassen. Eine Regel mit Mindestzahl braucht mindestens eine Altersklasse, sonst antwortet die API mit 422; „alle“ heißt alle anhaken. Es gewinnt die erste Regel, deren Stufe der Kurs vergibt und deren Mindestzahl erreicht ist; geprüft werden zuerst die Regeln mit Bedingung (höchste Mindestzahl vorn), danach die ohne als Rückfall, bei Gleichstand nach der Reihenfolge der Lizenzstufen. Vorbelegt mit den bisherigen Regeln: J-Kurs J1 bzw. J2, G-Kurs L3, F-Kurs L1 ab vier Spielen Großfeld ab U15, sonst L2; N1 und N2 ohne Regel. Maßgeblich ist die Saison, die im Kalenderjahr vor dem Kursende begann (Kursende Juni oder September 2026: 2025/26, Januar 2027: die laufende 2026/27). Für den CSV-Kursimport gibt es keinen Vorschlag.
**Einsatzzahlen der Schiedsrichter für laufende Saison und Vorsaison**: Je Saison einmal alle Spiele und einmal nur Großfeld ab U15, damit die Lizenzerteilung nachvollziehbar ist. Dieselben Zahlen stehen in jeder Sicht: `GET admin/referees/:id` und `GET vm/referees/:id` nennen `season_game_stats`, für den Schiedsrichter selbst gibt es `GET referee/history/season_stats`. Gezählt wird wie in der Einsatzhistorie laut Spielbericht, nicht laut Ansetzung. Großfeld ab U15 heißt Feldgröße GF und keine Altersklasse unter U15; Playoff- und Endrundenligen ohne eigene Angaben erben sie von der Hauptrunde, eine GF-Liga ohne Altersklasse zählt mit. Die Vorsaison ist die nächstkleinere Saison in den Einstellungen (`Setting.previous_season_id`); beide hängen allein an der aktiven Saison, der manuelle Saisonwechsel schiebt sie also ohne weiteres Zutun weiter.
**Vereinsmanager sieht E-Mail, Konto und Einsätze seiner Schiedsrichter**: `GET vm/referees` nennt je Schiedsrichter zusätzlich `email` und `has_user` (verknüpftes Benutzerkonto). Neu sind `GET vm/referees/:id` (dieselben Felder für die lesende Detailansicht) und `GET vm/referees/:id/games` (gesamte Einsatzhistorie laut Spielbericht, auch aus der Zeit bei einem früheren Verein). Erreichbar sind nur die Schiedsrichter, die auch in der Vereinsliste stehen, alle anderen antworten mit 404. Telefonnummer, „kurzfristig mobil", Geburtsdatum und Anschrift bleiben außen vor.
**Overage-Regel für Spielerinnen** (feedback#68): An der Liga lässt sich jetzt einstellen, dass Spielerinnen um ein oder mehrere Jahre älter sein dürfen, als der Stichtag „geboren ab“ erlaubt (`leagues.female_overage_years`, 1 bis 9, leer = keine Ausnahme). Damit lassen sich z. B. die bayerischen Overage-Spielerinnen und reinen Mädchenteams einer Jugendliga lizenzieren, ohne den Jahrgang für alle zu öffnen. Maßgeblich ist das Geschlecht am Spielerprofil (`W`); die Regel gilt nur zusammen mit einem Stichtag „geboren ab“ und wandert bei der Liga-Kopie unverändert mit, während der Stichtag um ein Jahr weiterrückt. Eine Höchstzahl je Mannschaft prüft die API bewusst nicht: Die Lizenzlisten der Liga markieren Spielerinnen, die nur über die Regel spielberechtigt sind (`team_license.female_overage`), und der Verband zählt selbst. Die Ablehnung eines zu alten Antrags nennt die Grenze für Spielerinnen mit.
**Highlights melden, ob sie kalibriert sind**: `GET games/:id/highlights.json` liefert jetzt `calibrated` (`true`/`false`, `null` ohne Übertragung). Solange niemand die Aufzeichnung kalibriert hat, liegen die Szenen nur ungefähr; die Spielseite zeigt dann „Kalibrierung ausstehend“.
**„Heute live“ meldet, ob ein Spiel Highlights hat** (saisonmanager#612): `GET live_streams` liefert je Spiel `has_highlights`. Es ist nur true, wenn `games/:id/highlights` mindestens eine öffentliche Szene zeigt, also bei Spielen im Tabletmodus mit einem Tor mit verknüpftem Schuss oder einer vorgemerkten Szene in einer verlinkten Übertragung mit bekanntem Start. Spiele ohne Tabletmodus sind ohne weitere Abfrage false. Bei laufenden Spielen gilt dieselbe Verzögerung wie für die Highlights selbst: Ein Schlüssel ohne Echtzeit-Freigabe sieht den Wert erst, wenn ihm auch die Spielseite die Szene zeigt. Grundlage für den Button „Highlights ansehen“ auf der Live-Seite.
Verbessert
**Kursimport: Vorsaison gesamt und Großfeld ab U15**: Die Spalte „Vorsaison" der Prüfmaske nennt neben `previous_season_game_count` (jetzt alle Spiele) zusätzlich `previous_season_game_count_gf_u15_plus`. Die zweite Zahl entscheidet nach einem F-Kurs über L1 (mindestens vier Spiele) oder L2. Bisher stand dort nur eine Zahl, gefiltert nach Altersklasse, aber ohne Großfeld, also für genau diese Entscheidung die falsche. Gezählt wird wie in den Einsatzzahlen der Schiedsrichter (`RefereeSeasonGameStats`), die Vorsaison ist die nächstkleinere Saison statt `current_season_id - 1`.
**Mail an die Gastmannschaft zum Spieltagsbericht spricht vom Widerspruch**: Passend zum Reiter „Spieltagsbericht widersprechen“ unter „Spieltagsaufgaben“ (fe#621) sagt die Mail jetzt, dass ohne Widerspruch nichts zu tun ist und der Spieltag nach Fristablauf automatisch als bestätigt gilt, dass man vorher schon bestätigen kann und wie man widerspricht. Neuer Betreff „Spieltagsbericht prüfen: Heim gegen Gast“ (vorher „Spieltagsbericht bestätigen – … vs. …“), der Link heißt „Zum Spieltagsbericht im Portal“. Eine im Admin-Bereich gepflegte Vorlage für diese Mail geht weiter vor und muss gegebenenfalls von Hand angepasst werden.
**Mail zum Bearbeiten der Highlights verständlicher**: Die Mail erklärt jetzt, warum kalibriert werden muss (Versatz zwischen Erfassung am Tablet und Livestream) und dass dafür ein Klick beim Tor in einer angezeigten Szene reicht, nennt den Zeitaufwand, sagt, dass die Highlights bis dahin schon sichtbar sind, verlinkt die Spielseite und sagt, an wen die Mail geht (nur an die angeforderte Adresse bzw. die Konten, mit denen am Tablet erfasst wurde, nicht an den Verein). Neuer Betreff ohne Gedankenstriche: „Kalibrierung erforderlich: Spiel 101, Heim gegen Gast“.
**Ausführliche Statistik: Tore ohne eigenen Torhüter nach Spielstärke** (fe#610): Die Kennung „Torwart raus“ am Tablet-Schuss (`extra_attacker`) sagt nur, dass das schießende Team ohne eigenen Torhüter spielt, die Statistik zählte das aber als „6 gegen 5“, auch wenn es in Überzahl 6 gegen 4 war (Spiel 58962). `GET games/:id/detailed_stats` leitet die Spielstärke jetzt aus den zum Schuss laufenden Strafen des Spielberichts ab, mit den Regeln der Anzeigetafel (fe#463): Unterzahl durch 2, 2+2 und 5 Minuten, ein Überzahltor beendet genau eine kleine Strafe. Jede Matchstrafe zählt wie ihre Bankstrafe 2+2, auch wenn die nicht eingetragen ist; steht beim selben Team zur selben Zeit eine 2+2 (Altdaten: 5), zählt sie nicht doppelt. Gezählt wird, was auf dem Feld steht, Strafen beider Teams heben sich nicht auf (eine Strafe je Seite plus Torwart raus ist 5 gegen 4). Jeder Schuss trägt `extra_attacker_strength` (`6v5`, `6v4`, `5v4` usw. oder `null` ohne Kennung bzw. ohne Spielzeit), die Summen je Team und Abschnitt zusätzlich `goals_extra_attacker_6v5`, `_6v4`, `_other` (jede andere Stärke) und `_unknown`. `goals_extra_attacker` bleibt die Summe. Am Tor hängende Schüsse nehmen Abschnitt und Zeit des Tores, sonst die Spielzeit am Schuss; mit der Abschnittslänge der Liga läuft eine Strafe in den nächsten Abschnitt hinüber.
Behoben
**Admin-Detail eines Schiedsrichters lieferte dem Vereinsmanager Geburtsdatum und Anschrift**: `GET admin/referees/:id` ist für Vereinsmanager bei den Schiedsrichtern des eigenen Vereins freigegeben und antwortete dabei mit den vollen Stammdaten (Geburtsdatum, Anschrift, E-Mail, Benutzername). Angezeigt hat das keine Seite, abrufbar war es trotzdem. Wer nur als Vereinsmanager Zugriff hat, bekommt jetzt die Listenfelder; Admin, RSK und Ansetzung sehen unverändert alles.
**Tablet-Schüsse hängen nicht mehr an Eigentoren oder technischen Toren**: Die Verknüpfung von Tor und Tablet-Schuss sah nicht auf die Torart. Ein nach einem Verbindungsabbruch nachgereichter Tor-Schuss konnte so an einem zeitlich näheren Eigentor oder technischen Tor landen, das echte Tor blieb ohne Schuss und ohne Highlight-Szene. Beim Eintragen, beim Nachreichen, beim Zuordnen von Hand (`shots/:client_uuid/link`) und im Highlight-Editor sind beide Torarten jetzt ausgenommen, das technische Tor in jeder Variante, auch mit „nicht angegeben“ (2000) als Schütze (die Ereignisliste trägt dafür `technical_goal: true`); bestehende Verknüpfungen bleiben unangetastet; der Editor listet sie nicht mehr unter `goals`, und wird ein Tor nachträglich zum Eigentor oder technischen Tor, löst sich sein Schuss. Ein abgefälschter Schuss ist kein Eigentor, sondern ein Tor des Schützen.