Zum Hauptinhalt springen

Kunden verwalten

[admin] [billing]

Kundenverwaltung im Admin: Einladen, Freischalten, Pakete zuweisen, Vertragsdaten, Kündigung, Löschung. Inkl. DSGVO-konformes Archiv.

Für wen

Admins, die ihre Lizenz-Kunden manuell oder per Self-Service-Link aufnehmen, Pakete zuordnen, Verträge verwalten.

Übersicht

Sidebar → Kunden: Liste aller Kunden mit Filter (Status: pending / active / inactive / cancelled). Spalten: Kundennummer, Name/Firma, Paket, Status, Erstellt.

Status-Lifecycle

  • pending — eingeladen, noch nicht oder ausstehend bezahlt / freigeschaltet
  • active — freigeschaltet, hat Portal-Zugang
  • inactive — deaktiviert (z.B. Zahlung gescheitert mehrere Wochen)
  • Gelöscht (deleted_customers-Archiv): DSGVO-konform anonymisiert

Schritt für Schritt — Kunden einladen

1. + Kunde einladen

Kunden → + Kunde einladen.

2. Felder

  • E-Mail (Pflicht) — Empfänger der Einladungs-Mail
  • Vorname / Nachname / Firma
  • Paket auswählen (Dropdown aller aktiven Pakete des Tenants)
  • Add-ons optional zuweisen
  • Notizen (intern, für dich)

3. Versenden

licensio generiert einen Registrierungs-Token, schickt eine Mail mit dem Link /<tenant>.licensio.io/register/<token>. Kunde:

  • Klickt Link → Passwort setzen → Stripe-Checkout für erste Zahlung
  • Zahlung erfolgt → Status bleibt pending
  • Du schaltest manuell auf active frei (im Kunden-Detail oder Bulk-Aktion)

4. Automatische Freischaltung (optional)

Wenn das gewählte Paket auto_activate=true hat, wird der Kunde direkt nach Zahlung freigeschaltet. Mail-Bestätigung geht raus.

Kunden-Detail

Klick auf Kunde in der Liste:

Tab "Stammdaten"

  • Anrede, Vor-/Nachname, Firma, USt-ID, Steuernummer
  • Adresse (Straße, PLZ, Stadt, Land)
  • Verantwortliche Person (für Stripe)
  • Customer-Number (customer_number, auto-generiert: PT-2026-0001)
  • Auto-Sync mit Stripe bei Speichern (Stripe-Customer-Update)

Tab "Pakete"

  • Aktives Basis-Paket (kann gewechselt werden)
  • Add-ons (zuweisen / entfernen)
  • Bei Wechsel: Stripe-Subscription wird angepasst

Tab "Vertrag"

  • Vertragsstart (contract_start_at)
  • Mindestlaufzeit + Kündigungsfrist (vom Paket geerbt)
  • Vertrag-Upload (PDF aus customer_documents)
  • Notizen

Tab "Downloads"

  • Historie der Downloads dieses Kunden (Datum, Produkt, Variante, Datei)
  • DSGVO-konform: keine IP, nur Customer-ID

Tab "Status & Aktionen"

  • Freischalten (pending → active)
  • Deaktivieren (active → inactive, mit Begründung)
  • Aktivierung ablehnen (Migration 043: rejected_at, rejection_reason)
  • Kündigen (mit Datum, ab wann der Account auf inactive geht)
  • Löschen (DSGVO Art. 17): Kunde wird in deleted_customers archiviert (nur customer_number, tenant_id, deleted_at, deleted_by — KEIN PII), Auth-User + Customer-Record werden gelöscht

Kundennummern

Auto-Trigger generiert: PT-2026-0001, PT-2026-0002, ... pro Tenant + Jahr. Nach Kunden-Löschung wird die Nummer NICHT wiederverwendet — sie bleibt im deleted_customers-Archiv reserviert (Migration 013).

Häufige Fragen

Wie lange dauert die Stripe-Synchronisation? Sofort beim Speichern. Bei Stripe-Express-Accounts werden manche Felder (z.B. company.address) nicht akzeptiert — dann silent best-effort, der Rest wird gespeichert.

Was wenn ein Kunde sich selbst registriert hat? Self-Service-Pakete erstellen den Customer mit status='pending'. Du siehst sie in der Liste mit Filter "Pending".

Kann ich Kunden CSV-importieren? Phase 2 — Bulk-Import noch nicht implementiert (product_imports-Tabelle ist Skeleton dafür).

DSGVO-Auskunft für einen Kunden? Aktuell manuell aus DB exportierbar. Self-Service-Auskunft (Phase 2 / nice-to-have).

Was wenn der Stripe-Customer-Update fehlschlägt? licensio-Customer wird trotzdem gespeichert. Du siehst eine Warnung im UI. Stripe-Sync kannst du via "Erneut synchronisieren"-Button wiederholen.

Verwandt