Teilnehmer verwalten

Zielgruppe: Event-Manager, Wettkampfleiter, Vereins-Administratoren
Schwierigkeit: ⭐ Einfach
Zeitaufwand: 2-5 Minuten pro Teilnehmer, Massen-Import: 5 Minuten


📋 Übersicht

Die Teilnehmer-Verwaltung ist das Herzstück der Wettkampf-Organisation. Hier verwalten Sie:

  • Athleten erfassen - Persönliche Daten, Verein, Geburtsdatum
  • Startnummern vergeben - Automatisch oder manuell
  • Wettkämpfen zuordnen - Teilnehmer zu Wettkämpfen hinzufügen
  • Labels drucken - Startnummern-Aufkleber
  • Massen-Import - GymNet XML oder CSV
  • Daten exportieren - CSV für weitere Verarbeitung

Wichtig: - Athleten = Personen-Stammdaten (wiederverwendbar) - Teilnehmer = Athleten + Wettkampf-Zuordnung + Startnummer


🎯 Kernkonzepte

1. Athlet vs. Teilnehmer

Athlet (Person): - Stammdaten: Name, Geburtsdatum, Geschlecht, Verein - Wiederverwendbar: Kann an mehreren Events teilnehmen - Langfristig: Bleibt in Datenbank gespeichert

Teilnehmer (Event-spezifisch): - Athlet + Event: Verknüpfung Athlet ↔ Wettkampf - Startnummer: Nur für diesen Wettkampf gültig - Temporär: Nur für aktuelles Event relevant

Beispiel:

Athlet "Max Müller" (TV Musterhausen, *2012)
├─ Teilnehmer Bezirksmeisterschaften 2025 (Startnr. 15)
├─ Teilnehmer Landesmeisterschaften 2025 (Startnr. 42)
└─ Teilnehmer Vereinsmeisterschaften 2025 (Startnr. 3)

2. Altersberechnung

Automatisch berechnet aus Geburtsdatum: - Wettkampfjahr: Jahr des Events - Stichtag: Meist 31.12. des Wettkampfjahres (konfigurierbar)

Beispiel:

Geburtsdatum: 15.06.2012
Wettkampf: 05.11.2025
→ Alter: 13 Jahre (2025 - 2012)
→ Altersklasse: AK 12-13 ✓

Code-Hintergrund:

// Altersberechnung
const calculateAge = (birthdate: string, competitionDate: string): number => {
  const birth = new Date(birthdate);
  const competition = new Date(competitionDate);
  let age = competition.getFullYear() - birth.getFullYear();

  // Korrektur falls Geburtstag im Wettkampfjahr noch nicht war
  const monthDiff = competition.getMonth() - birth.getMonth();
  if (monthDiff < 0 || (monthDiff === 0 && competition.getDate() < birth.getDate())) {
    age--;
  }

  return age;
};

3. Geschlecht-System

Drei Werte (für Wettkampf-Zuordnung):

Wert Datenbank Anzeige Farbe
1 int_geschlecht = 1 🔵 Männlich Blau
2 int_geschlecht = 2 🔴 Weiblich Rosa
3 int_geschlecht = 3 🟣 Divers Lila

Automatische Validierung: - System prüft bei Wettkampf-Zuordnung - Männlich → nur Männer-Wettkämpfe - Weiblich → nur Frauen-Wettkämpfe - Gemischte Wettkämpfe → alle Geschlechter

4. Startnummern-System

Zwei Varianten:

A) Automatische Generierung (empfohlen): - System vergibt fortlaufende Nummern - Sortierung nach: Wettkampf, Geschlecht, Name - Beispiel: 1, 2, 3, 4, ...

B) Manuelle Vergabe: - Sie tragen Startnummer ein - Flexibel für spezielle Fälle - Duplikate werden geprüft

Code-Referenz:

// Automatische Startnummern-Generierung (API)
PUT /api/events/{eventId}/generate-start-numbers

// Logik:
// 1. Alle Teilnehmer des Events laden
// 2. Sortieren nach: Wettkampf, Geschlecht, Nachname
// 3. Fortlaufende Nummern vergeben (1, 2, 3, ...)
// 4. In Datenbank schreiben (tfx_teilnehmer.int_startpassnummer)


✅ Voraussetzungen

  1. Stammdaten angelegt:
  2. Vereine
  3. Regionen/Verbände

  4. Event erstellt - Siehe Wettkämpfe verwalten

  5. Wettkämpfe angelegt - Mit Altersgruppen und Geschlecht

Optional: - 📄 Excel-Liste mit Athleten (für Massen-Import) - 🏷️ Etiketten-Drucker (für Startnummern-Labels)


🚀 Schritt 1: Teilnehmer-Übersicht

1.1 Übersicht öffnen

Teilnehmer Übersicht

Navigation: Hauptmenü → "Teilnehmer"

Übersicht zeigt: - Alle Teilnehmer aller Events - Smart Pagination: Automatisches Laden bei Scrollen - Filter: Verein, Geschlecht, Alter - Suche: Name, Startnummer

1.2 Ansichten

Drei Ansicht-Modi:

Modus Symbol Verwendung
Tabelle 📋 Standard, alle Details auf einen Blick
Karten 🎴 Übersichtlich mit Foto-Platzhaltern
Grid 🔲 Kompakte Kachel-Ansicht

Umschalten: Buttons oben rechts

1.3 Tabellen-Spalten

Spalte Inhalt Sortierbar
Startnr. Startnummer
Name Nachname, Vorname
Verein Vereins-Name (Badge)
Geschlecht 🔵 M / 🔴 W
Alter Berechnetes Alter
Geburtsdatum Datum (optional ausgeblendet)
Aktionen Bearbeiten, Löschen

💡 Tipp: Klicken Sie auf Spalten-Überschrift zum Sortieren


👤 Schritt 2: Teilnehmer hinzufügen

2.1 Neuen Teilnehmer erstellen

Button: "+ Neuer Teilnehmer" (oben rechts)

Teilnehmer bearbeiten

Formular öffnet sich

2.2 Pflichtfelder ausfüllen

Feld Beschreibung Beispiel Pflicht
Nachname Familienname Müller
Vorname Rufname Max
Geburtsdatum Datum (TT.MM.JJJJ) 15.06.2012
Geschlecht Männlich/Weiblich/Divers Männlich
Verein Dropdown-Auswahl TV Musterhausen
Startnummer Manuell oder leer (später generieren) 15

Geschlecht-Auswahl: - ⚪ Männlich - ⚪ Weiblich - ⚪ Divers

Verein-Auswahl: - Dropdown mit allen Vereinen - Falls Verein fehlt: Verein anlegen

2.3 Startnummer

Option A: Leer lassen (empfohlen) - Später automatisch generieren - System vergibt fortlaufend

Option B: Manuell eingeben - Zahl zwischen 1-9999 - System prüft auf Duplikate - Warnung bei Überschneidung

💡 Tipp: Startnummern erst generieren wenn alle Teilnehmer erfasst sind

2.4 Speichern

Button: "Speichern"

System: 1. Validiert Eingaben 2. Berechnet Alter 3. Speichert in Datenbank 4. Aktualisiert Liste

Fehler-Meldungen: - ❌ "Nachname erforderlich" - ❌ "Geburtsdatum ungültig" - ❌ "Startnummer bereits vergeben"


📝 Schritt 3: Teilnehmer bearbeiten

3.1 Teilnehmer auswählen

Klicken Sie auf: Bearbeiten-Symbol (✏️) in der Zeile

Formular öffnet sich mit vorausgefüllten Daten

3.2 Daten ändern

Änderbar: - ✅ Name (Nachname, Vorname) - ✅ Geburtsdatum - ✅ Geschlecht (Achtung: Wettkampf-Zuordnung prüfen!) - ✅ Verein - ✅ Startnummer

Nicht änderbar: - ❌ Teilnehmer-ID (interne Nummer)

3.3 Geschlecht ändern - Warnung!

Problem: Wettkampf-Zuordnung kann ungültig werden

Beispiel:

Teilnehmer: Max Müller (Männlich)
Zugeordnet zu: "Männlich AK 12-13"

Änderung auf: Weiblich
→ Wettkampf-Zuordnung ungültig!
→ Teilnehmer wird aus Wettkampf entfernt (automatisch)

Lösung: 1. Prüfen Sie vor Änderung: Hat Teilnehmer Wettkämpfe? 2. Nach Änderung: Neu zu passenden Wettkämpfen zuordnen

3.4 Speichern

Button: "Speichern"

System aktualisiert: - Teilnehmer-Daten - Alter (neu berechnet) - Wettkampf-Zuordnungen (Validierung)


🗑️ Schritt 4: Teilnehmer löschen

4.1 Löschen-Button

Klicken Sie auf: Löschen-Symbol (🗑️)

Bestätigungs-Dialog:

Möchten Sie diesen Teilnehmer wirklich löschen?

Teilnehmer: Max Müller (TV Musterhausen)
Startnummer: 15

Diese Aktion kann nicht rückgängig gemacht werden.

[Abbrechen]  [Löschen]

4.2 Was wird gelöscht?

Entfernt: - ✅ Teilnehmer-Datensatz - ✅ Wettkampf-Zuordnungen - ✅ Startnummer

Behalten: - ✅ Athlet-Stammdaten (falls Option "Athlet behalten" aktiviert) - ✅ Wertungen (als "gelöschter Teilnehmer" markiert)

💡 Hinweis: Wertungen bleiben für Archiv-Zwecke erhalten

4.3 Vorsicht!

Nicht löschen wenn: - ❌ Wettkampf bereits gestartet - ❌ Wertungen vorhanden - ❌ Urkunden gedruckt

Besser: Teilnehmer als "inaktiv" markieren (zukünftiges Feature)


🔢 Schritt 5: Startnummern generieren

5.1 Event Management öffnen

Navigation: 1. Events → Ihr Event auswählen 2. Event Management öffnen

5.2 Startnummern generieren

Button: "Startnummern generieren" (im Header)

System-Workflow: 1. Lädt alle Teilnehmer des Events 2. Sortiert nach: - Wettkampf (alphabetisch) - Geschlecht (männlich vor weiblich) - Nachname (A-Z) 3. Vergibt fortlaufende Nummern (1, 2, 3, ...) 4. Speichert in Datenbank

Bestätigungs-Dialog:

Startnummern für 87 Teilnehmer generieren?

Bestehende Startnummern werden überschrieben!

[Abbrechen]  [Generieren]

Ergebnis:

✅ 87 Startnummern erfolgreich vergeben
   Bereich: 1 - 87

💡 Tipp: Generieren Sie neu, wenn Sie Teilnehmer nachgetragen haben


🏷️ Schritt 6: Startnummern-Labels drucken

6.1 Label-Ansicht öffnen

Startnummern-Labels

Tab: "Labels" (in Teilnehmer-Übersicht)

6.2 Layout wählen

Vorlagen: - Avery 5160 (30 Labels pro Seite, 2.5x1 inch) - Avery L7160 (21 Labels pro Seite, 63.5x38.1 mm) - Herma 4453 (40 Labels pro Seite) - Benutzerdefiniert (eigene Maße eingeben)

6.3 Inhalt konfigurieren

Felder pro Label: - ☑️ Startnummer (groß, fett) - ☑️ Name (Teilnehmer) - ☑️ Verein (klein) - ☑️ Wettkampf (optional)

Beispiel-Label:

┌──────────────────┐
│      15          │  ← Startnummer (36pt)
│  Max Müller      │  ← Name (12pt)
│  TV Musterhausen │  ← Verein (10pt)
└──────────────────┘

6.4 PDF generieren

Button: "Labels drucken"

System: 1. Generiert PDF mit allen Labels 2. Automatischer Download 3. Dateiname: Startnummern_Labels_[Event]_[Datum].pdf

6.5 Drucken

Drucker-Einstellungen: - Papier: A4 Etiketten-Bogen (passend zur Vorlage) - Randlos: Aus (Etiketten haben eigene Ränder) - Skalierung: 100% (keine Auto-Anpassung!)

Test-Druck: 1. Drucken Sie auf normalem Papier 2. Legen Sie Etiketten-Bogen drauf (gegen Licht halten) 3. Prüfen Sie Passgenauigkeit 4. Falls Versatz: Position in Vorlage anpassen


📥 Schritt 7: Massen-Import

7.1 GymNet XML Import

Datei-Format: GymNet-Export (XML)

Navigation: Events"Importieren" (Button)

Upload: 1. XML-Datei auswählen 2. System analysiert Datei 3. Vorschau der zu importierenden Daten

Mapping (automatisch):

<Person>
  <perNachname>  var_nachname
  <perVorname>  var_vorname
  <perGeburtstag>  dat_geburtstag
  <perGeschlecht>1</perGeschlecht>  int_geschlecht (1=männlich, 2=weiblich)
  <perVerein>  Verein-Zuordnung
  <perStartnummer>  int_startpassnummer
</Person>

Import starten: "Importieren" Button

Fortschritt:

Importiere Teilnehmer... 45/150 (30%)
[████████░░░░░░░░░░░░░░░░░░] 

✅ 142 Teilnehmer erfolgreich importiert
⚠️  5 Duplikate übersprungen
❌  3 Fehler (ungültige Daten)

Siehe: GymNet Import Guide

7.2 CSV Import

Datei-Format: Excel → CSV Export

CSV-Struktur:

Nachname,Vorname,Geburtsdatum,Geschlecht,Verein,Startnummer
Müller,Max,2012-06-15,1,TV Musterhausen,15
Schmidt,Anna,2013-03-22,2,TV Musterstadt,16

Felder: - Geschlecht: 1=männlich, 2=weiblich, 3=divers - Geburtsdatum: YYYY-MM-DD (ISO-Format) - Verein: Exakter Name (muss existieren!)

Import: 1. CSV hochladen 2. Spalten-Mapping prüfen 3. Importieren

Fehlerbehandlung: - Zeile mit Fehler wird übersprungen - Fehler-Log zeigt Problem - Valide Zeilen werden importiert


🔍 Schritt 8: Filtern & Suchen

8.1 Such-Feld

Eingabe: Name oder Startnummer

Beispiele: - "Müller" → Alle mit "Müller" im Namen - "15" → Startnummer 15 - "Max" → Alle mit "Max" im Vornamen

Live-Suche: Ergebnisse während Eingabe

8.2 Filter

Filter-Button (oben): Öffnet Filter-Panel

Verfügbare Filter:

Filter Optionen Verwendung
Verein Alle Vereine (Dropdown) Nur ein Verein anzeigen
Geschlecht Männlich / Weiblich / Divers Nach Geschlecht filtern
Altersgruppe 6-8, 9-11, 12-13, 14-15, 16+ Nach AK filtern
Event Alle Events (Dropdown) Nur ein Event
Wettkampf Wettkämpfe des Events Teilnehmer eines Wettkampfs

Kombinieren: Mehrere Filter gleichzeitig möglich

Beispiel:

Filter: Verein="TV Musterhausen" + Geschlecht="Männlich" + Alter="12-13"
→ Zeigt: Männliche Turner (12-13) vom TV Musterhausen

8.3 Filter zurücksetzen

Button: "Filter zurücksetzen" (X-Symbol)

Setzt alle Filter und Suche zurück → Alle Teilnehmer sichtbar


🎯 Tipps & Best Practices

✅ Do's

  1. Stammdaten zuerst
  2. Vereine vor Teilnehmern anlegen
  3. Regionen/Verbände konfigurieren
  4. Dann Import starten

  5. Massen-Import nutzen

  6. Für >10 Teilnehmer: GymNet XML oder CSV
  7. Fehleranfälliger als manuell, aber viel schneller
  8. Test-Import mit 5 Teilnehmern zuerst

  9. Startnummern automatisch

  10. Nicht manuell vergeben
  11. System macht es konsistent
  12. Neu generieren nach Nachmeldungen

  13. Daten regelmäßig prüfen

  14. Geburtsdatum korrekt?
  15. Verein existiert?
  16. Geschlecht stimmt?

  17. Backup vor Import

  18. Datenbank-Backup erstellen
  19. Falls Import schief geht: Wiederherstellen

❌ Don'ts

  1. Keine Duplikate
  2. Prüfen Sie vor Neuanlage: Existiert Athlet schon?
  3. System erkennt nicht automatisch

  4. Nicht während Wettkampf ändern

  5. Startnummern fest nach Druck von Labels
  6. Geschlecht nicht ändern (Wettkampf-Zuordnung!)

  7. Keine ungültigen Daten

  8. Geburtsdatum in Zukunft → Fehler
  9. Alter < 5 oder > 100 → Warnung

  10. Nicht ohne Test-Lauf importieren

  11. Erst mit 5 Teilnehmern testen
  12. Mapping prüfen
  13. Dann voller Import

❓ Häufige Probleme & Lösungen

Problem 1: "Teilnehmer erscheint nicht in Wettkampf"

Ursachen: - Geschlecht passt nicht - Alter außerhalb Altersgruppe - Teilnehmer nicht zugeordnet

Lösung: 1. Teilnehmer-Daten prüfen: Geschlecht und Alter korrekt? 2. Wettkampf-Zuordnung: Teilnehmer dem Wettkampf hinzufügen - Event Management → Teilnehmer → "+ Hinzufügen" 3. Wettkampf-Einstellungen: Altersgruppe erweitern?

Problem 2: "Startnummer doppelt vergeben"

Ursache: Manuelle Vergabe mit Überschneidung

Lösung: 1. Automatisch neu generieren: - Event Management → "Startnummern generieren" - Überschreibt alle Nummern 2. Oder manuell korrigieren: - Duplikat finden (Filter: Startnummer eingeben) - Eine Nummer ändern

Problem 3: "Import schlägt fehl"

Symptome: - "Verein nicht gefunden" - "Ungültiges Datum" - "Geschlecht fehlt"

Lösung: 1. CSV/XML prüfen: - Vereins-Namen exakt wie in Datenbank - Datum im Format YYYY-MM-DD - Geschlecht: 1, 2, oder 3 (nicht "m"/"w") 2. Test-Import: - Nur erste 5 Zeilen importieren - Fehler beheben - Dann vollständiger Import

Problem 4: "Alter wird falsch berechnet"

Ursache: Geburtsdatum oder Wettkampf-Datum falsch

Lösung: 1. Geburtsdatum prüfen: Teilnehmer bearbeiten → Datum korrekt? 2. Wettkampf-Datum: Event-Daten → Startdatum korrekt? 3. Stichtag: Falls spezielle Regel (z.B. Jahrgangs-Stichtag), Administrator kontaktieren


📈 Nächste Schritte

Nach Teilnehmer-Erfassung:

  1. Wettkämpfe erstellen
  2. Teilnehmer zu Wettkämpfen zuordnen
  3. Altersgruppen prüfen

  4. Riegen bilden

  5. Teilnehmer in Riegen aufteilen
  6. Rotation planen

  7. Zeitplanung

  8. Startzeiten festlegen
  9. Rotationsplan erstellen

  10. Wertungserfassung vorbereiten

  11. Kampfrichter-Zugänge
  12. Tablets einrichten

🔗 Verwandte Dokumentation

Benutzer-Guides

Developer-Guides

Referenz


📞 Support

Probleme bei Teilnehmer-Verwaltung?

  1. Import-Fehler: CSV/XML Format prüfen
  2. Duplikate: Suche nutzen vor Neuanlage
  3. GitHub Issues: github.com/Igel18/turnfix/issues

Version: 2.0
Letzte Aktualisierung: 05.11.2025
Autor: TurnFix Team
Feedback: Gerne als GitHub Issue einreichen!