feat(abrechnung): Credits-Uebertrag komplett entfernt

Produktentscheidung 07/2026: ungenutzte Credits verfallen zum
Periodenende. Uebertrag-Checkbox aus allen drei Formularen
(Kontingent bearbeiten, Lizenz anlegen, Org anlegen) samt
Ausgrau-Logik raus, credits_rollover/credits_carried aus Modellen,
Endpoints (overview/current/PUT budget) und insert_license_row raus,
Anzeige inkl. Uebertrag im Org-Detail raus. Migrationsskript legt die
beiden Spalten nicht mehr an. Gegenstueck zum Monitor-Commit f8499c4,
Promote-Reihenfolge wie immer Monitor VOR Portal.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Dieser Commit ist enthalten in:
claude-dev
2026-07-25 21:51:02 +00:00
Ursprung 16a9b9c436
Commit 9bf3adbacb
8 geänderte Dateien mit 214 neuen und 116 gelöschten Zeilen

Datei anzeigen

@@ -27,8 +27,8 @@ class LicenseParams(BaseModel):
Wird zweifach genutzt, direkt beim Lizenz-Anlegen (LicenseCreate) und
verschachtelt beim Org-Anlegen (OrgCreate.license). Die Laufzeitfelder
(credits_used, credits_carried, credits_period_start, budget_warning_sent)
verwaltet der Monitor, das Portal setzt nur Stellwerte.
(credits_used, credits_period_start, budget_warning_sent) verwaltet der
Monitor, das Portal setzt nur Stellwerte.
"""
license_type: str = Field(pattern="^(trial|annual|permanent)$")
max_users: int = Field(default=5, ge=1, le=1000)
@@ -40,11 +40,9 @@ class LicenseParams(BaseModel):
unlimited_budget: bool = False
# 'monthly' = Kontingent wird zum Monatswechsel neu gefuellt (der Monitor
# setzt den Verbrauch traege zurueck), 'total' = gilt fuer die Laufzeit.
# Ungenutzte Credits verfallen zum Periodenende (kein Uebertrag,
# Produktentscheidung 07/2026).
credits_period: str = Field(default="monthly", pattern="^(monthly|total)$")
# Uebertrag ungenutzter Credits in den Folgemonat, der Monitor deckelt
# auf ein Monatskontingent. Standard AUS (Entscheidung Nutzer 25.07.2026),
# pro Kunde bewusst zuschaltbar.
credits_rollover: bool = False
class OrgCreate(BaseModel):
@@ -97,8 +95,6 @@ class LicenseResponse(BaseModel):
# Neue Kontingent-Felder, alle optional mit Default, damit Responses auch
# von einer noch nicht migrierten Datenbank validieren.
credits_period: Optional[str] = "monthly"
credits_rollover: Optional[bool] = False
credits_carried: Optional[float] = 0
credits_period_start: Optional[str] = None
created_at: str
globe_access: bool = False