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_customersarchiviert (nurcustomer_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
- Pakete — Pakete erstellen + zuweisen
- Rechnungsstellung — Stripe-Setup
- Account — Kundensicht