Manuel Hartmann ITK Dienstleistungen

Projekt

mediakiss

Eine Warenwirtschaft, zweimal gebaut

Warenwirtschaft für Handel über mehrere Kanäle: Lieferantenkataloge, Preisbildung, Marktplätze, Rechnungswesen, Regulatorik — ohne Framework, in zwei Instanzen.

Nicht weil Standardsoftware schlecht wäre

Sondern weil der Zuschnitt nicht passte: Handel über mehrere Kanäle mit sechsstelligen Artikelmengen, Lieferantenkatalogen, eigener Preisbildung, Produktrecht und Buchhaltung — in einem Betrieb, in dem niemand eine Woche auf ein Ticket warten kann. Das erste mediakiss entstand dafür Stück für Stück: 40 Fachbereiche über anderthalb Jahrzehnte, von der Kasse über Werkstattaufträge bis zu Provisionen und Zeiterfassung.

Irgendwann kam ein gewachsenes System nicht mehr mit — erkennbar, und zwar vor dem Zusammenbruch. Das zweite mediakiss ist ein Neubau mit derselben Handschrift auf anderer Grundlage: kein Framework, ein eigener Kern, mandantenfähig von der ersten Zeile an.

Der Kern besteht aus Router, Datenbankschicht, Rechteverwaltung, Migrationslauf und einer Oberfläche, die im Browser wie ein Arbeitsplatz mit mehreren Fenstern funktioniert — weil Sachbearbeitung nun einmal parallel läuft und nicht in einem einzigen Tab stattfindet.

Die einzigen fremden Bausteine sind ein Mailversender, ein PDF-Erzeuger, eine Tabellenbibliothek und eine Vorlagensprache. Das ist Absicht: Jede Abhängigkeit, die man nicht hat, kann auch nicht in drei Jahren zum Sicherheitsproblem werden.

Vom Lieferantenkatalog bis zur Buchhaltung

Oben der Weg der Ware durch das System, unten die drei Schichten, die jeden Schritt tragen. Nichts davon wird von Hand nachgetragen.

Aufbau der Warenwirtschaft Fünf Stationen von links nach rechts: Lieferantenkataloge einlesen, Stammdaten anreichern, Angebote je Kanal erzeugen, Preise gegen den beobachteten Wettbewerb bilden, Rücklauf aus Bestellungen, Beständen, Retouren und Abrechnungen. Darunter drei Schichten, die alles tragen: Rechnungswesen, Regulatorik und das Änderungsjournal für den Rollout auf weitere Instanzen. Kataloge 24 Lieferanten, 49 Importprofile Stammdaten Texte, Bilder, Merkmale, Pflichtangaben — einmal befüllt Kanäle Kaufland, eBay, Amazon, Shopware — je eigener Feed Preise beobachteter Wettbewerb, Untergrenze aus Einstand Rücklauf Bestellungen, Bestände, Retouren, Abrechnungen Rechnungswesen Abrechnungsberichte je Kanal, Bankzeilen, Beleg-Abgleich, Export in die Buchhaltung Regulatorik Produktsicherheit, Energielabel, Zolltarif, Herkunft, Altgeräte — Vorschlag, Prüfung, Freigabe Änderungsjournal jede Änderung mit Risikostufe, Dateiliste und Anleitung — so kommt der Stand auf Instanz 2 LÄUFT ZEITGESTEUERT — NIEMAND KOPIERT HIER ETWAS VON HAND
Jeder Schritt ist einzeln nachvollziehbar. Wo etwas hängt, sieht man welcher Schritt.
  1. 01

    Kern ohne Framework

    Router, Datenbankschicht, Rechte, Migrationslauf, Fenster-Oberfläche. Alles, was ein Framework mitbrächte, ist hier bewusst selbst geschrieben und deshalb vollständig bekannt.

  2. 02

    Fachmodule

    29 Module decken die Kette ab: Aufträge, Lager, Einkauf, Versand und Packtisch, Retouren, Gebrauchtware, Kunden, Lieferanten, Tickets, Rechnungswesen, Bank, Liquidität, Regulatorik, Systemverwaltung.

  3. 03

    Lieferanten-Importe

    Preislisten und Kataloge per FTP, SFTP, HTTP und Mail; schema-fest, weil ein Lieferant seinen Export ohne Ankündigung um Spalten erweitert. Stammdaten werden einmal befüllt und nie mehr überschrieben.

  4. 04

    Preisbildung

    Gegen beobachteten Wettbewerb je Kanal, mit Untergrenze aus Einstand, Gebühren und Versand. Sichtbarkeit vor Maximalmarge — solange kein Verlust entsteht.

  5. 05

    Marktplatz-Anbindungen

    Angebote, Bestände, Bestellungen, Tickets und Abrechnungen je Kanal. Für eine der Schnittstellen musste die digitale Signatur von Anfragen selbst gebaut werden — fertige Bibliotheken gab es nicht.

  6. 06

    Rechnungswesen

    Abrechnungsdaten je Kanal einlesen, Gebühren zuordnen, Bankzeilen erzeugen, gegen Ausgangsrechnungen abgleichen, in die Buchhaltung exportieren — erst nachdem ein Mensch die Zeilen gesichtet hat.

  7. 07

    Eingangsrechnungen

    PDF oder strukturierte E-Rechnung, erkannt, geprüft, auf Doppelungen gemessen, abgelegt. Was unklar ist, bleibt liegen — billiger als ein falscher Beleg im System.

  8. 08

    Regulatorik

    Pflichtangaben über 112.832 Artikel: Vorschlag durch Agenten oder Regel, unabhängige Nachrechnung, Freigabe durch einen Menschen.

  9. 09

    Mandantenfähigkeit

    Kein betriebsspezifischer Wert im Code — Adressen, Zugänge, Lieferantennamen, Pfade stehen in 453 Konfigurationsschlüsseln. Eine neue Instanz heißt: Werte setzen, Migrationen laufen lassen.

  10. 10

    Änderungsjournal

    854 dokumentierte Änderungen, jede mit Risikostufe und Rollout-Anleitung. Der unbeliebteste Teil der Arbeit und der wichtigste: ohne ihn driften Installationen in Monaten auseinander.

  11. 11

    KI-Jobs

    Produkttexte, Klassifikation, Preisfreigaben — mit Schreiber und unabhängigem Prüfer, fail-closed. Ein Ausfall des Modells ist kein fachliches Ergebnis.

  12. 12

    Agenten-Fassaden

    Lese- und Vorschlagswerkzeuge für die Agenten-Plattform. Was ein Agent schreibt, landet als Antrag — die Freigabe im Panel ist die einzige Schranke, und sie ist keine Prompt-Anweisung.

Was angebunden ist

Kanäle

  • Kaufland
  • eBay
  • Amazon
  • Shopware 6

Lieferanten

  • ITScope
  • Icecat
  • Ingram Micro
  • Wortmann
  • Herweck
  • ENO
  • BAB
  • Komsa
  • Kosatec
  • Avides

Dienste

  • lexoffice
  • DHL
  • PayPal
  • FritzBox
  • EPREL
  • Google Merchant
  • OpenAI-Feed
  • Odoo

Technik

  • PHP 8.3
  • MariaDB
  • nginx
  • PDO
  • PHPMailer
  • Cron
  • MCP

Drei Vorfälle, die Regeln wurden

  1. 01

    Aufbewahrung gehört zur Tabelle

    Die Preishistorie wuchs unbemerkt, bis ein einziger Aufräumlauf 723,5 Mio. Zeilen entfernen musste — in gut fünf Stunden, ohne Betriebsunterbrechung. Seitdem entsteht die Aufbewahrungsregel zusammen mit der Tabelle, nicht danach.

    Lehre: Ein Job, der sich selbst beschäftigt, kostet bei dieser Größenordnung innerhalb von Tagen sichtbar Geld. Messen statt vermuten →

  2. 02

    Eine Sicherung, die nicht zurückgespielt wurde, ist keine

    Der Datenbank-Sicherungslauf war über Wochen still gescheitert — nicht an einer Ursache, sondern an fünf gleichzeitig, jede für sich harmlos. Seitdem gilt: destruktive Datenbankarbeit erst, wenn der letzte Sicherungslauf nachweislich grün war.

    Lehre: Ein grüner Haken ist eine Selbstauskunft. Am Artefakt prüfen →

  3. 03

    Stammdaten, die sich gegenseitig überschreiben

    Siebzehn Importprofile schrieben dieselben Felder — Bezeichnung, Hersteller, Herstellernummer — und jeder Lauf machte den vorigen rückgängig: über tausend Titelwechsel am Tag, und daraus falsch zusammengesetzte Angebote. Seitdem werden diese Felder einmal befüllt und nie mehr überschrieben.

    Lehre: Zwei Jobs, die dasselbe Feld schreiben, brauchen eine Reihenfolge — oder einer von beiden darf es nicht. Ein KI-Job braucht einen Zustand, in dem er fertig ist →

Vier Baustellen, nach Priorität

Dazu gehört