"""Reservierte Namen (Ausbaustufe 12). Alles, was mit SYSTEM_PREFIX beginnt, gehört dem Tool: synthetische Serien wie „System-Ist" (v_projection) oder „System-Kreditraten" (Planungs-Panel). Kategorien und Szenarien dürfen solche Namen nicht tragen, sonst verschmelzen sie in Grafana mit den Tool-Serien. """ from fastapi import HTTPException SYSTEM_PREFIX = "System-" RESERVED_MESSAGE = (f"Namen, die mit »{SYSTEM_PREFIX}« beginnen, sind für " "vom Tool erzeugte Einträge reserviert") def is_reserved_name(name: str) -> bool: """True, wenn name (ohne Randleerzeichen, Groß/klein egal) mit dem System-Präfix beginnt.""" return name.strip().casefold().startswith(SYSTEM_PREFIX.casefold()) def check_reserved_name(name: str | None) -> None: """None (Feld nicht gesetzt) -> keine Prüfung; reserviert -> 422.""" if name is not None and is_reserved_name(name): raise HTTPException(422, RESERVED_MESSAGE)