Überblick
Quotery ist ein mandantenfahiges B2B-SaaS, das eingehende Bestellanfragen — PDFs, Excel-Tabellen, CSV-Positionslisten — in wenigen Minuten in bepreiste, abgeglichene und auditfahige Angebote verwandelt. Entwickelt fur schnelle Distributoren, Handwerksbetriebe und Servicewerkstatten, kombiniert es eine OpenAI-Orchestrierung mit drei Aufrufen und einen deterministischen codebasierten Produkt-Matcher, sodass exakte Treffer nie LLM-Tokens verbrauchen. Vom Angebotsentwurf bis zum gebuchten Lieferschein liegt der gesamte Quote-to-Cash-Prozess auf einer Plattform.
Die Herausforderung
B2B-Vertriebsteams verbringen Stunden damit, Bestellanfragen von Kunden in Angebotssoftware abzutippen, Freitext-Produktbeschreibungen gegen Kataloge abzugleichen, die mehrere Codekonventionen verwenden (Lieferant, intern, Import, Export), und dieselben Daten erneut in Fulfillment- und Inventar-Tools einzugeben. Standard-ERPs sind schwergewichtig und langsam zu konfigurieren; improvisierte Tabellenkalkulationen verlieren Nachvollziehbarkeit in dem Moment, in dem eine Bestandsanpassung passiert.
Die Lösung
Wir haben Quotery als mandantenbezogenes Django 5 + DRF-Backend mit einer React-19-SPA und einer auf Render bereitgestellten Marketing-Website gebaut. Jedes Geschaftsmodell erbt von einer Basisklasse mit UUID-Schlussel und Soft-Delete, jede Abfrage wird automatisch nach Mandant gefiltert, und jede Mutation in der Service-Schicht invalidiert eine prazise Menge von Redis-Cache-Gruppen (dashboard, product-usage, quotes-map) mit einem Schlusselmuster qf:v1:<gruppe>:<scope>:<hash>, das bei Redis-Ausfall sanft fehlschlagt. Der KI-Angebotsimport fuhrt drei sequenzielle OpenAI-Aufrufe innerhalb einer atomaren Transaktion aus: Strukturextraktion aus PDF (pypdf), XLSX (openpyxl), CSV oder Klartext; deterministischer Abgleich gegen vier Produktcode-Felder plus ein LLM-Pick-or-Reject in Batches uber nicht abgeglichene Zeilen mit Halluzinationsschutz; und eine 1- bis 3-Satze-Zusammenfassung, die auf die Locale eingeht. Angebote durchlaufen eine formale Zustandsmaschine (draft -> sent -> closed -> partially_delivered -> delivered), die ein append-only Bestandsjournal uber mehrere Standorte speist, wobei Uberreservierung erlaubt ist, damit der Vertrieb zusagen kann, bevor ein Wareneingang gebucht wird. Lieferscheine, Rucknahmen und Wareneingange teilen sich einen gemeinsamen Entwurf-zu-gebucht-Fluss. PDFs werden uber WeasyPrint gerendert, die Authentifizierung erfolgt uber Google OAuth via django-allauth mit sitzungsbasiertem JWT in HttpOnly-Cookies, RBAC nutzt einen individuellen Berechtigungskatalog, und jede Mutation landet in einem unveranderlichen Audit-Log. Ein eingebetteter Assistent beantwortet Fragen zu Angeboten, Kunden und Bestand genau dort, wo der Benutzer gefragt hat.