Quittio Managed verwaltet die Rechnungen deiner Laravel-App: lückenlose Nummernkreise, unveränderbare Rechnungen, ein Archiv mit Prüfsummen, Storno, Korrektur, Versand und Audit-Log. In deiner eigenen Datenbank, ohne SaaS und ohne Gebühr pro Rechnung.
Lebenszyklus einer Rechnung: Ein Entwurf wird mit issue() ausgestellt. Teilstornos führen zu teilstorniert, ein Storno oder eine Korrektur zu storniert. Nach issue() ändert sich eine Rechnung nie wieder. Storno und Korrektur sind eigene Rechnungen mit eigener Nummer.
Brauchst du Managed?
Wer die Rechnung ausstellt, muss sie auch verwalten.
Quittio reicht, wenn …
ein ERP, eine Buchhaltung oder ein Shop die Rechnungen führt und die Nummern vergibt. Quittio erzeugt dann nur die Dateien.
Du brauchst Managed, wenn …
deine App die Rechnungen ausstellt. Dann müssen Nummern eindeutig und lückenlos sein, ausgestellte Rechnungen dürfen sich nie ändern, und alles muss 8 Jahre aufbewahrt werden (UStG, AO, GoBD).
Vergleich
Ohne und mit Managed
Aufgabe
Ohne Managed
Mit Managed
Verkäufer
seller in config/quittio.php oder ->seller() pro Rechnung
Ausstellerprofile in der Datenbank, auch für mehrere Firmen, Marken oder Mandanten
Kunden
Käuferdaten für jede Rechnung übergeben
Rechnungen hängen an deinen Modellen, z. B. $user->invoices()
Rechnungsnummern
selbst vergeben und auf Lücken achten
lückenlos und eindeutig aus einem Muster wie RE-{Y}-{seq:4}, sicher bei paralleler Ausstellung
Speichern
Daten, PDF und XML selbst ablegen
Entwürfe (änderbar, Vorschau mit Wasserzeichen) und ausgestellte Rechnungen als Datensätze
Nach dem Ausstellen
nichts verhindert Änderungen
unveränderbar: Modell, Query Builder und optionale Datenbank-Trigger blockieren Änderungen
Archiv
save() überschreibt vorhandene Dateien
Write-once-Archiv mit SHA-256, Dokumentversionen und Integritätsprüfung
Storno und Korrektur
Storno-Beleg selbst rendern, Historie selbst führen
cancel(), cancelPartially() und correct(); Nummern, Verweise, Umsatzsteuer und Status werden geführt
Versand
eigene Mailable schreiben
$invoice->send() mit Protokoll jedes Zustellversuchs
Audit und Aufbewahrung
eigene Aufzeichnungen
Audit-Log, Aufbewahrungsfrist pro Rechnung, Legal Hold, Löschbefehl nach Ablauf
Verkäufer
Ohne Managed: seller in config/quittio.php oder ->seller() pro Rechnung
Mit Managed: Ausstellerprofile in der Datenbank, auch für mehrere Firmen, Marken oder Mandanten
Kunden
Ohne Managed: Käuferdaten für jede Rechnung übergeben
Mit Managed: Rechnungen hängen an deinen Modellen, z. B. $user->invoices()
Rechnungsnummern
Ohne Managed: selbst vergeben und auf Lücken achten
Mit Managed: lückenlos und eindeutig aus einem Muster wie RE-{Y}-{seq:4}, sicher bei paralleler Ausstellung
Speichern
Ohne Managed: Daten, PDF und XML selbst ablegen
Mit Managed: Entwürfe (änderbar, Vorschau mit Wasserzeichen) und ausgestellte Rechnungen als Datensätze
Nach dem Ausstellen
Ohne Managed: nichts verhindert Änderungen
Mit Managed: unveränderbar: Modell, Query Builder und optionale Datenbank-Trigger blockieren Änderungen
Archiv
Ohne Managed: save() überschreibt vorhandene Dateien
Mit Managed: Write-once-Archiv mit SHA-256, Dokumentversionen und Integritätsprüfung
Storno und Korrektur
Ohne Managed: Storno-Beleg selbst rendern, Historie selbst führen
Mit Managed: cancel(), cancelPartially() und correct(); Nummern, Verweise, Umsatzsteuer und Status werden geführt
Versand
Ohne Managed: eigene Mailable schreiben
Mit Managed: $invoice->send() mit Protokoll jedes Zustellversuchs
Audit und Aufbewahrung
Ohne Managed: eigene Aufzeichnungen
Mit Managed: Audit-Log, Aufbewahrungsfrist pro Rechnung, Legal Hold, Löschbefehl nach Ablauf
Der Weg einer Rechnung
Vom Entwurf bis zum Storno in fünf Schritten.
InvoiceService.php
use Quittio\Managed\Models\Issuer;$issuer = new Issuer;$issuer->setSellerParty(Party::make('Muster GmbH') ->vatId('DE123456789') ->address('Hauptstraße 1', '12345', 'Musterstadt', 'DE') ->buildSeller());$issuer->forceFill(['key' => 'default', 'is_default' => true])->save();
Deine Firma als Ausstellerprofil mit Bankverbindung, Standardwerten, Texten, Design und Nummernkreis. Das Installationsprogramm fragt das erste Profil ab.
InvoiceService.php
$draft = Invoice::draft(Quittio::invoice() ->buyer($customer) ->deliveryDate('2026-09-30') ->line('Consulting', netPrice: '120.00', quantity: 8));return $draft->preview(); // PDF mit Wasserzeichen „ENTWURF“
Entwürfe sind frei änderbar, haben noch keine Nummer und lassen sich als PDF mit Wasserzeichen ansehen.
InvoiceService.php
$invoice = $draft->issue(); // heute, in der Zeitzone des Ausstellers$invoice->number; // RE-2026-0001
issue() validiert, vergibt die nächste Nummer und friert die Daten ein. Schlägt die Validierung fehl, wird keine Nummer verbraucht.
InvoiceService.php
$invoice->send(); // an die E-Mail-Adresse des Käufers
Die archivierten Dokumente gehen per Mail raus, jeder Zustellversuch wird protokolliert.
Eine ausgestellte Rechnung ändert sich nie. Ein Storno ist eine eigene Rechnung mit eigener Nummer, die auf das Original verweist.
Funktionen
Was Managed übernimmt
Ausstellerprofile
Eine oder mehrere Firmen mit Bankverbindungen, Texten, Design und Nummernkreis.
Deine Modelle
Rechnungen verweisen auf Kunden, Bestellungen oder Verträge deiner App.
Nummernkreise
Muster mit Platzhaltern, jährliche oder monatliche Rücksetzung, getrennte Nummernräume.
Lückenlos
Auch bei paralleler Ausstellung keine doppelten Nummern und keine Lücken.
Entwürfe
Ändern, vorab prüfen und als PDF mit Wasserzeichen ansehen.
Unveränderbar
Modell, Query Builder und Datenbank-Trigger für MySQL, MariaDB, PostgreSQL und SQLite.
Archiv
Write-once mit SHA-256, Dokumentversionen, Manifest und Integritätsprüfung.
Storno und Korrektur
Voll- und Teilstorno, Umsatzsteuer kumulativ abgestimmt, Korrektur per Storno und Neuausstellung.
Versand
Mail mit den archivierten Dokumenten und Protokoll jedes Versuchs.
Audit-Log
Nur anhängbar: wer hat wann was getan.
Aufbewahrung
Frist pro Rechnung, Legal Hold und ein Befehl, der abgelaufene Rechnungen löscht.
Mandanten und Rechte
Tenancy-Scope, Policies und Factories für deine Tests.
Unveränderbar heißt unveränderbar
Ausgestellt ist ausgestellt.
Nach issue() blockieren das Modell, der Query Builder und optionale Datenbank-Trigger jede Änderung an den Rechnungsdaten. Ändern dürfen sich nur Zahlungs-, Zustell- und Renderstatus.
Wir sagen auch, was nicht verhindert wird: Ohne Trigger umgehen der Basis-Query-Builder und rohes SQL die Regeln, und MySQL löst bei TRUNCATE keine Trigger aus. Details stehen in der Dokumentation.
Rechnungen bleiben in deiner Datenbank. Keine Daten an Dritte, kein Ausfallrisiko eines SaaS, keine Kosten pro Rechnung. Keine Lizenzprüfung zur Laufzeit: issue(), cancel() und das Archiv scheitern nie an einem Lizenzserver.
Regulatorische Updates
Neue XRechnung-, Peppol- und CII/UBL-Versionen, KoSIT-Regeln, Codelisten und Rechtsänderungen erscheinen mindestens 4 Wochen, bevor eine Regel verbindlich wird, sofern die Spezifikation rechtzeitig veröffentlicht wurde.
Laravel-Kompatibilität
Neue Laravel-Hauptversionen werden innerhalb von 4 Wochen nach ihrem Release unterstützt.
Sicherheitsfixes
Kritische Lücken innerhalb von 72 Stunden, alle anderen mit dem nächsten Patch. Auch nach Ablauf der Lizenz.
Versand über Peppol, Eingangsrechnungen prüfen und freigeben
1.4.0
Wiederkehrend
Abos, Anzahlungs- und Schlussrechnungen
1.5.0
Export
DATEV-Export, Auswertungen
Die Standardwerte für Storno, Korrektur und die Abstimmung der Umsatzsteuer bei Teilstornos werden von einer Steuerberatung geprüft. Ergebnisse veröffentlichen wir im Changelog.
Preise
Einmal pro Projekt und Jahr.
Nur zum Start
Founders Lifetime
Einmal zahlen, Updates ohne Ablauf: Solo für 449 €, Agency für 1.299 €. Höchstens 100 Lizenzen oder 3 Monate nach dem Launch, je nachdem, was früher eintritt. Gilt für alle künftigen Versionen von quittio/managed, nicht für separate Add-ons.
Alle Preise netto, nur für Unternehmen (B2B). Der Verkauf startet mit Version 1.0.0; bis dahin sind die Preise eine Vorschau.
Häufige Fragen zu Managed
Welche Stufe brauche ich?
Ein Projekt: Solo. Mehrere Kundenprojekte: Agency. Stellen deine Kunden in deiner App selbst Rechnungen aus (Mandanten über tenancy.scope): SaaS.
Was passiert, wenn ich nicht verlängere?
Du nutzt die zuletzt erhaltene Version unbefristet weiter und bekommst Sicherheitsfixes. Regulatorische Updates, neue Funktionen und Support gibt es nur mit aktiver Lizenz.
Prüft Managed die Lizenz zur Laufzeit?
Nein. Es gibt keinen Lizenzserver und kein Phone-home. Die Lizenz gilt nur für den Zugang zum privaten Composer-Repository.
Kann ich Managed vorher testen?
Local, Staging und CI sind in jeder Lizenz frei. Nach dem Kauf hast du 14 Tage Rückerstattung ohne Begründung.
Läuft Managed ohne Laravel?
Nein. Managed nutzt Eloquent, Queue und Mail und braucht Laravel 13. Ohne Laravel nutzt du den Open-Source-Kern.
Welche Datenbanken werden unterstützt?
SQLite, MySQL 8 und MariaDB sowie PostgreSQL. Getestet wird gegen MySQL 8.4 und PostgreSQL 16.
Early Access
Sei beim Start dabei.
Wir melden uns einmal zum Start, mit dem Founders-Angebot.