Finalize domain model: define event → tournament → class → division hierarchy, multi-tournament account structures, and event-wide cashbox aggregation logic. Add division types and update glossary tasks.
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
---
|
||||
type: RULE_SPEC
|
||||
status: DRAFT
|
||||
owner: Rulebook Expert
|
||||
last_update: 2026-04-02
|
||||
---
|
||||
|
||||
# Validierungsregeln (ÖTO/FEI)
|
||||
|
||||
Ziel: Dieses Dokument definiert präzise, testbare Validierungsregeln als Grundlage für Frontend (Live‑Validation), Backend (serverseitige Validation) und QA (Testfälle). Änderungen erfolgen versioniert und mit Beispielen.
|
||||
|
||||
Quellen/Verweise:
|
||||
- Roadmap: `docs/04_Agents/Roadmaps/Rulebook_Roadmap.md`
|
||||
- Domänen‑Modell: `docs/03_Domain/01_Core_Model/Domain_Model_Veranstaltung_Turnier_Bewerb_Abteilung.md`
|
||||
|
||||
---
|
||||
|
||||
## 1. OEPS‑Mitgliedsnummer (Austria)
|
||||
|
||||
Status: Draft – finale Bestätigung durch OEPS/Verbandsdokumente ausstehend. Regel ist bewusst konservativ und maschinenlesbar formuliert.
|
||||
|
||||
### 1.1 Zweck
|
||||
- Eindeutige Identifikation von Reiter:innen/Vereinsmitgliedern des OEPS in Formularen, Nennungen und Sync‑Schnittstellen.
|
||||
|
||||
### 1.2 Kanonisches Format (Normalform)
|
||||
- Zeichenraum: Großbuchstaben A–Z, Ziffern 0–9, Bindestrich `-`.
|
||||
- Erlaubte Schreibweisen (Regex in PCRE‑Notation):
|
||||
1) Mit Präfix: `^OEPS-[0-9]{6,8}$`
|
||||
2) Ohne Präfix: `^[0-9]{6,8}$`
|
||||
|
||||
Erläuterungen:
|
||||
- Länge der numerischen Komponente: 6 bis 8 Ziffern (Spielraum für Altdaten/neuere Nummernkreise). Engführen auf exakt 7 Ziffern ist möglich, sobald offiziell bestätigt.
|
||||
- Präfix ist optional in der Eingabe, wird bei Speicherung normalisiert (siehe 1.5).
|
||||
|
||||
### 1.3 Verbote / Nicht erlaubt
|
||||
- Leerzeichen innerhalb der Nummer (z. B. `123 4567`).
|
||||
- Punkte, Schrägstriche, Unterstriche oder andere Sonderzeichen (`. / _ + * ? ! …`).
|
||||
- Alphanumerische Suffixe oder Buchstaben in der Nummer (z. B. `123456A`).
|
||||
- Falsches oder gemischtes Präfix (z. B. `OEPS:` oder `Oeps-`).
|
||||
- Führende Nullen sind erlaubt, zählen jedoch zur Gesamtlänge (z. B. `00123456`).
|
||||
|
||||
### 1.4 Beispiele
|
||||
- Gültig:
|
||||
- `123456`
|
||||
- `7654321`
|
||||
- `00123456`
|
||||
- `OEPS-1234567`
|
||||
- `OEPS-00123456`
|
||||
|
||||
- Ungültig (mit Begründung):
|
||||
- `12345` — zu kurz (min. 6 Ziffern)
|
||||
- `123456789` — zu lang (max. 8 Ziffern)
|
||||
- `12A4567` — Buchstaben in der Nummer nicht erlaubt
|
||||
- `OEPS1234567` — fehlender Bindestrich nach Präfix
|
||||
- `OEPS-12 34567` — Leerzeichen nicht erlaubt
|
||||
- `oeps-1234567` — falsche Groß/Kleinschreibung im Präfix (nur `OEPS-` zulässig)
|
||||
- `OEPS-1234.567` — Punkt nicht erlaubt
|
||||
|
||||
### 1.5 Normalisierung (Speicherformat)
|
||||
- Interne Normalform: `NNNNNNNN` (nur Ziffern, links mit Nullen auf 8 Zeichen aufgefüllt), sofern Nummernlänge ≤ 8.
|
||||
- Eingaben mit Präfix werden gespeichert ohne Präfix, jedoch mit Metadatum `source_prefix = OEPS`.
|
||||
- Beispiel: `OEPS-1234567` → `01234567` (Normalform), `source_prefix=OEPS`.
|
||||
|
||||
Hinweise:
|
||||
- Falls sich offiziell herausstellt, dass die Länge fix `7` ist, wird die Normalisierung entsprechend angepasst (kein linksseitiges Auffüllen über 7 hinaus). Diese Änderung wäre eine MINOR Schema/Validation‑Version.
|
||||
|
||||
### 1.6 Pseudocode‑Validierung
|
||||
```kotlin
|
||||
fun validateOepsId(input: String): Boolean {
|
||||
val trimmed = input.trim()
|
||||
val withPrefix = Regex("^OEPS-[0-9]{6,8}$")
|
||||
val plain = Regex("^[0-9]{6,8}$")
|
||||
return withPrefix.matches(trimmed) || plain.matches(trimmed)
|
||||
}
|
||||
```
|
||||
|
||||
### 1.7 Fehlermeldungen (UX‑Texte)
|
||||
- Kurz: "Ungültige OEPS‑Mitgliedsnummer. Erlaubt sind 6–8 Ziffern, optional mit Präfix 'OEPS-'."
|
||||
- Lang: "Bitte eine gültige OEPS‑Mitgliedsnummer eingeben: 6–8 Ziffern (z. B. 1234567 oder OEPS-1234567). Keine Leerzeichen oder Sonderzeichen."
|
||||
|
||||
### 1.8 Offene Punkte / ToDo
|
||||
- Verbandsbestätigung: Fixe Länge (6, 7 oder 8) und eventuelle Prüfziffer klären.
|
||||
- Mapping Altsysteme: Enthalten historische Kartenformat‑Varianten? Falls ja, eigene Legacy‑Regex aufnehmen.
|
||||
- QA: Testfälle für Grenzwerte (6/8 Ziffern), Präfix‑Varianten, Whitespace‑Trimmung.
|
||||
|
||||
---
|
||||
|
||||
## 2. FEI‑ID
|
||||
ToDo: Wird in A‑1 (weiterer Unterpunkt) spezifiziert.
|
||||
|
||||
---
|
||||
|
||||
## 3. Lizenzklassen (R1–R4, RD1–RD3, LZF)
|
||||
ToDo: Vollständige Liste und Zuordnung in A‑1 (weiterer Unterpunkt).
|
||||
|
||||
---
|
||||
|
||||
## 4. Altersklassen Pferd
|
||||
ToDo: Mindestalter je Bewerbsklasse / Höhe und Stichtagsregel (1. Jänner) – folgt in A‑1 (weiterer Unterpunkt).
|
||||
Reference in New Issue
Block a user