Zum Hauptinhalt springen

Rechnungsstellung

[billing] [admin]

Stripe-Connect-basierte Abrechnung — licensio = Plattform, Tenants = Connected Accounts. Plattformgebühr plan-abhängig (Free 15%, Basic 5%, Pro 2%, Scale 1% — siehe Plans). Stripe Tax automatisch.

Für wen

Admins. Der Tab "Rechnungsstellung" sammelt alle Daten, die Stripe für korrekte Rechnungen, MwSt, Zahlungs-Abwicklung braucht.

Was du einstellst

Rechtlicher Name + Rechtsform

  • z.B. "Plant Technology GmbH"
  • Wird in Stripe als business_profile.name gesetzt
  • Erscheint auf jeder Rechnung als Absender

Adresse

  • Straße, PLZ, Stadt, Land
  • Wird in Stripe als company.address versucht zu setzen (Express-Accounts akzeptieren das oft nur via Onboarding)

Steuer

  • USt-ID — wird zu Stripe-tax_ids hinzugefügt
  • Steuernummer — informativ, auf Rechnungen abgedruckt
  • Stripe Tax muss separat im Stripe-Dashboard aktiviert werden (Tab Tax → Automatic Tax ON)

Kontakt

  • E-Mail (für Stripe-Mails)
  • Telefonnummer

Eigenes Logo das auf Stripe-Rechnungen erscheint. Upload via:

  1. licensio-Storage (für Vorschau im Admin)
  2. Stripe Files API mit purpose: 'business_icon'
  3. accounts.update auf Connected Account mit settings.branding.logo

Empfohlen: PNG quadratisch, ≥256x256, < 200 KB.

Schritt für Schritt

1. Stripe-Connect aktivieren

Einstellungen → Stripe → Account anlegen → Stripe-Onboarding (Express Account). Liefert deine Bankdaten, Person-Verifikation etc.

2. Rechnungsstellung-Tab füllen

Alle Felder ausfüllen + Logo hochladen. Speichern triggert automatisch Stripe-Sync (best-effort).

3. Stripe Tax im Dashboard aktivieren

  • dashboard.stripe.com → Tax → Settings
  • Automatic Tax auf ON
  • Tax registrations → Deutschland hinzufügen
  • Firmenadresse muss vollständig sein

4. Erstes Paket testen

Pakete erstellen → bei Speichern wird Stripe-Product + Price erzeugt. Im Stripe-Dashboard sichtbar unter Products des Connected Accounts.

5. Erste Zahlung

Kunde durchläuft Stripe-Checkout (Subscription für monatliche Pakete oder Single-Charge für einmalige). Webhook-Events bestätigen Zahlung in licensio.

Stripe Tax — Logik

SenderEmpfängerUSt-IDErgebnis
DEDEbeliebig19 % MwSt
DEEUmit USt-IDReverse Charge 0 %
DEEUohne USt-IDLokaler Satz des Empfängerlandes
DENicht-EUbeliebig0 %

Stripe wendet das automatisch an, wenn automatic_tax: { enabled: true } und tax_behavior: 'exclusive' (Netto-Preise).

Webhook-Events (eingehend)

Es gibt zwei Stripe-Webhooks mit unterschiedlichen Zwecken — Verwechslung führt zu Signaturfehlern und kaputten Plan-Updates.

Tenant-Portal-Webhook — /api/stripe/webhook (<slug>.licensio.io)

Verarbeitet Zahlungen deiner Endkunden (Stripe Connect):

  • checkout.session.completed — Erstzahlung erfolgreich
  • setup_intent.succeeded — Payment-Method gespeichert (Flow B)
  • invoice.paid — wiederkehrende Zahlung
  • invoice.payment_failed — Zahlung gescheitert (Notification + Mahnung)
  • charge.refunded — Erstattung
  • customer.subscription.updated / .deleted — Abo-Lifecycle
  • account.updated — Connected-Account-Status

Secret in ENV: STRIPE_WEBHOOK_SECRET (Portal-Vercel-Projekt).

licensio-Platform-Webhook — /api/stripe/licensio-webhook (admin.licensio.io)

Verarbeitet deine eigene Plan-Subscription bei licensio (Basic / Pro):

  • checkout.session.completed — neue Plan-Subscription nach Self-Service-Signup
  • customer.subscription.updated — Plan-Wechsel (Basic ↔ Pro), Renewals
  • customer.subscription.deleted — Kündigung → Tenant fällt zurück auf free
  • invoice.payment_failed — Zahlungsfehler bei deiner Plan-Rechnung

Secret in ENV: LICENSIO_STRIPE_WEBHOOK_SECRET (Admin-Vercel-Projekt). Schreibt direkt in tenants.plan, plan_started_at, licensio_stripe_customer_id, licensio_subscription_id.

Rechnungen im Portal

Kunden sehen ihre Stripe-Rechnungen direkt im Portal-Account-Tab "Lizenz & Vertrag" → Rechnungen-Kachel mit PDF-Download (über Stripe Invoices API).

Häufige Fragen

Wie hoch ist die Plattformgebühr? Plan-abhängig: Free 15%, Basic 5%, Pro 2%, Scale 1% (application_fee_percent auf jeder Stripe-Subscription). Der Rest geht an dich. Sichtbar im Stripe-Dashboard als Application Fee. Details: Plans.

Wer sieht meine Stripe-Daten? Nur du. licensio-Plattform-Admins haben Read-Zugriff für Support-Fälle, aber keine Modifikations-Rechte.

Was wenn der Stripe-Webhook fehlschlägt? Webhook-Endpoint mit STRIPE_WEBHOOK_SECRET validiert Signaturen. Bei Fehler retryt Stripe automatisch (~mehrere Stunden). Fehler-Logs in Vercel-Logs sichtbar.

Kann ich Rechnungen auch ohne Stripe schicken? Aktuell läuft alles über Stripe. Manuelle Rechnungsstellung (PDF generation außerhalb Stripe) ist nicht implementiert.

Reverse Charge bei EU-Kunden — wie? Stripe Tax erkennt EU-USt-IDs automatisch (validiert via VIES). Wenn Kunde im Checkout USt-ID eingibt, wird Reverse Charge angewandt. tax_id_collection ist in unseren Checkouts aktiviert.

Verwandt