Centurio System & Module Documentation
🏛️ Platform Architecture 🔑 Login
All Modules / inventory_logistics / Artikel & Leistungen
🛍️

Artikel & Leistungen

products inventory_logistics 🛡️ RLS Protected

Zentraler Artikelstamm, Variantenmatrix, Preislisten, Standardkategorien und dynamische Merkmals-Fieldsets.

Fachliche Bestimmung: Verwaltet den gesamten Produkt-, Material- und Dienstleistungskatalog. Unterstützt Produktvarianten (Größe, Farbe, Material), Staffelpreislisten für Kundengruppen, Stücklistenzuordnungen sowie dynamische Kategorie-Fieldsets mit strenger Typvalidierung (Zahlen mit Komma, Auswahllisten, Pflichtfeld-Prüfungen) für ERP und Kundenportal.

⚡ Workflows & Lifecycles

Benutzerbefehl: warehouse product crud subagent plan:command_warehouse_product_crud_subagent

Geprüfter Durable-Plan (durable_plan), Start: manual_command.

1. warehouse_product_crud_subagent
warehouse_product_crud_subagent
{"key": "execute_command", "label": "Befehl prüfen, ausführen oder zur Freigabe vorlegen", "adapter": "agent.execute", "agent": "warehouse_product_crud_subagent", "condition_fact": null}
Aktionen: warehouse_product_crud_subagent

⚙️ Fachprozesse & Capabilities (System-Fachlogik)

Registrierte Fachoperationen und System-Capabilities dieses Moduls zur Steuerung von Workflows, Kaskaden und KI-Agenten.

Gesamt: 34 manual_entry: 1 engine: 28 operator_surface: 4 durable_plan: 1
Capability & Schlüssel Fachliche Bezeichnung Ausführung / Coverage Risikostufe & Freigabe Effekte & Kaskaden
Agent-Einstieg warehouse_product_crud_subagent agent_entry:warehouse_product_crud_subagent
Agent-Einstieg warehouse_product_crud_subagent
Quelle: code:module_agent_map
manual_entry
✓ Auto
Keine Seiteneffekte deklariert
Stückliste capability:catalog.bom.explode
Op: catalog.bom.explode
Objekt: bom
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • catalog.bom.explode
Location: create location capability:catalog.location.create_location
Op: catalog.location.create_location
Objekt: location
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • location.create_location
Location: merge location capability:catalog.location.merge_location
Op: catalog.location.merge_location
Objekt: location
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • location.merge_location
Location: update location capability:catalog.location.update_location
Op: catalog.location.update_location
Objekt: location
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • location.update_location
Preisliste capability:catalog.price_list.publish
Op: catalog.price_list.publish
Objekt: price_list
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • catalog.price_list.publish
Product: confirm capability:catalog.product.confirm
Op: catalog.product.confirm
Objekt: product
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product.confirm
Product: create product capability:catalog.product.create_product
Op: catalog.product.create_product
Objekt: product
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product.create_product
Product: delete product capability:catalog.product.delete_product
Op: catalog.product.delete_product
Objekt: product
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product.delete_product
Artikel freigeben capability:catalog.product.publish
Op: catalog.product.publish
Objekt: product
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • catalog.product.publish
Product: update product capability:catalog.product.update_product
Op: catalog.product.update_product
Objekt: product
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product.update_product
Product Category: bind attribute capability:catalog.product_category.bind_attribute
Op: catalog.product_category.bind_attribute
Objekt: product_category
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product_category.bind_attribute
Product Category: create capability:catalog.product_category.create
Op: catalog.product_category.create
Objekt: product_category
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product_category.create
Product Category: delete capability:catalog.product_category.delete
Op: catalog.product_category.delete
Objekt: product_category
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product_category.delete
Product Category: seed category sets capability:catalog.product_category.seed_category_sets
Op: catalog.product_category.seed_category_sets
Objekt: product_category
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product_category.seed_category_sets
Product Category: seed default fieldsets capability:catalog.product_category.seed_default_fieldsets
Op: catalog.product_category.seed_default_fieldsets
Objekt: product_category
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product_category.seed_default_fieldsets
Product Category: seed standard fieldsets capability:catalog.product_category.seed_standard_fieldsets
Op: catalog.product_category.seed_standard_fieldsets
Objekt: product_category
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product_category.seed_standard_fieldsets
Product Category: unbind attribute capability:catalog.product_category.unbind_attribute
Op: catalog.product_category.unbind_attribute
Objekt: product_category
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product_category.unbind_attribute
Product Category: update capability:catalog.product_category.update
Op: catalog.product_category.update
Objekt: product_category
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product_category.update
Product Category: update fieldset meta capability:catalog.product_category.update_fieldset_meta
Op: catalog.product_category.update_fieldset_meta
Objekt: product_category
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product_category.update_fieldset_meta
Product Supplier Info: create capability:catalog.product_supplier_info.create
Op: catalog.product_supplier_info.create
Objekt: product_supplier_info
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product_supplier_info.create
Product Supplier Info: delete capability:catalog.product_supplier_info.delete
Op: catalog.product_supplier_info.delete
Objekt: product_supplier_info
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product_supplier_info.delete
Product Supplier Info: set preferred capability:catalog.product_supplier_info.set_preferred
Op: catalog.product_supplier_info.set_preferred
Objekt: product_supplier_info
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product_supplier_info.set_preferred
Product Supplier Info: update info capability:catalog.product_supplier_info.update_info
Op: catalog.product_supplier_info.update_info
Objekt: product_supplier_info
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product_supplier_info.update_info
Product Variant: create attribute capability:catalog.product_variant.create_attribute
Op: catalog.product_variant.create_attribute
Objekt: product_variant
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product_variant.create_attribute
Product Variant: generate variants capability:catalog.product_variant.generate_variants
Op: catalog.product_variant.generate_variants
Objekt: product_variant
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product_variant.generate_variants
Lieferantenartikel capability:catalog.supplier_item.sync
Op: catalog.supplier_item.sync
Objekt: product
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • catalog.supplier_item.sync
Produktvarianten erzeugen capability:catalog.variant.generate
Op: catalog.variant.generate
Objekt: product
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product.variants_generated
Artikel anlegen capability:product.create
Op: product.create
Intent: create_product
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • product.created
product: create form form_surface_anchor:product.create
Objekt: product
Quelle: code:erp_form_surface
operator_surface
✓ Auto
Keine Seiteneffekte deklariert
product: edit form form_surface_anchor:product.edit
Objekt: product
Quelle: code:erp_form_surface
operator_surface
✓ Auto
Keine Seiteneffekte deklariert
product_bom: edit form form_surface_anchor:product_bom.edit
Objekt: product_bom
Quelle: code:erp_form_surface
operator_surface
✓ Auto
Keine Seiteneffekte deklariert
product_supplier: edit form form_surface_anchor:product_supplier.edit
Objekt: product_supplier
Quelle: code:erp_form_surface
operator_surface
✓ Auto
Keine Seiteneffekte deklariert
Benutzerbefehl: warehouse product crud subagent plan:command_warehouse_product_crud_subagent
Benutzerbefehl: warehouse product crud subagent
Quelle: code:reviewed_execution_plan
durable_plan
✓ Auto
Keine Seiteneffekte deklariert

🧠 Fachprozess-Erzählung & Dual Knowledge Architektur

Synthese aus der ideologischen Blaupause (Meta-Fachlogik / Soll), der faktischen System-Implementierung (System-Fachlogik / Ist) und No-Code Customizing für KI-Consultants.

Dual Knowledge Layer
📖

Der durchgängige Businessprozess im Detail (End-to-End Fließtext-Erzählung)

Der durchgängige Lager- und Logistikprozess in der betrieblichen Praxis

Die Lagerlogistik in Centurio ERP steuert den gesamten physischen Materialfluss – von der Vereinnahmung im Wareneingang über die dynamische Einlagerung, interne Puffer- und Nachschubtransfers bis hin zur wegeoptimierten Multi-Order-Kommissionierung und dem Versand.

1. Wareneingang & Identifikation (Goods Inward)

Der logistische Lebenszyklus von Artikeln beginnt an der Laderampe:

  • Eintreffen der Ware: Lieferungen treffen auf Basis von Einkaufsbestellungen (purchasing), internen Umlagerungen oder Kundenretouren (returns) ein.
  • Identifikation & Barcode-Scan: Über mobile Handheld-Terminals oder Scanner wird der Packstück-Barcode (EAN/GTIN, NVE/SSCC) erfasst. Das System verifiziert über die Capability cap:inventory.goods_receipt.create die Bestellbindung und öffnet den Wareneingangsbeleg.
  • Mengen- und Sichtprüfung: Es erfolgt der Abgleich zwischen Lieferschein und physischem Ist. Bei Abweichungen (Unter- oder Überlieferungen) oder Transportschäden wird sofort ein Schadensprotokoll mit Fotodokumentation angelegt.
  • Chargen- und Seriennummernerfassung: Verlangt der Artikel laut Stammdaten Chargen- oder Seriennummernführung (z.B. Stahlchargen, Elektronikkomponenten, verderbliche Chemikalien), erzwingt das System die Eingabe der Losnummer (StockLot) und des Mindesthaltbarkeitsdatums (MHD).
  • Quarantäne-Sperrlager: Beschädigte oder prüfpflichtige Artikel werden nicht sofort frei eingebucht, sondern automatisiert in den gesperrten Quarantänebereich (quarantine_location) gebucht, bis das Qualitätsmanagement die Freigabe erteilt.

2. Einlagerungsstrategien & Platzvergabe (Slotting & Putaway)

Nach erfolgreicher Qualitätsprüfung schlägt die LVS-Engine den optimalen Ziel-Lagerplatz vor:

  • Hierarchische Fachkoordinaten: Lagerplätze sind eindeutig adressiert nach dem Schema Gebäude - Zone - Gang - Regal - Ebene - Fach (z.B. L1-Z2-G04-R12-E03-F02).
  • Chaotische Lagerhaltung vs. Festplatzsystem:
    • Festplatzsystem: Artikel haben feste Stammfächer (ideal für Kleinteile und Schnelldreher an Werkstattstationen).
    • Freie (chaotische) Lagerhaltung: Das System sucht ein freies Fach passender Dimensionierung und Traglast. Das minimiert Fahrwege des Gabelstaplers und maximiert den Raumausnutzungsgrad.
  • ABC-Zonierung (Slotting): Schnelldreher (A-Güter) werden wegeoptimiert in den unteren Ebenen und nahe an der Kommissionierzone platziert; Langsamdreher (C-Güter) auf den oberen Rängen oder in Außenbereichen.

3. Bestandsreservierung & ATP-Logik (Available-to-Promise)

Bestände im Lager sind mehr als nur ein numerischer Zähler:

  • Sobald ein Verkaufsauftrag (sales), Fertigungsauftrag (assembly) oder Arbeitsauftrag (workorders) genehmigt wird, berechnet das System die Verfügbarkeit: $$\text{ATP} = \text{Physischer Bestand} - \text{Reservierter Bestand} + \text{Bestätigter Beschaffungszulauf}$$
  • Über cap:inventory.stock.reserve werden die benötigten Mengen hart reserviert. Das verhindert zuverlässig Überbuchungen (Stock-Outs) und Doppelzusagen an Kunden.
  • Auslagerungsstrategie: Das System reserviert standardmäßig nach FIFO (First-In, First-Out) zur Vermeidung von Veralterung, bzw. nach FEFO (First-Expired, First-Out) bei verfallbaren Gütern.

4. Automatischer Nachschub (Replenishment & Kanban)

Ein kritischer Engpass in Fabriken und Lagern ist das Leerlaufen von Bereitstellungs- und Pufferlagerplätzen:

  • Jeder Lagerplatz oder jede Logistikzone kann mit einem Mindestbestand (Meldebestand) und einem Maximalbestand parametriert werden.
  • Fällt der Bestand an einem Kommissionierfach oder an einem Fertigungs-Arbeitsplatz unter die Meldeschwelle, feuert das System ein Signal.
  • Das Modul erzeugt vollautomatisch eine interne Nachschub-Aufgabe (cap:inventory.stock.transfer): Ein Hubwagen- oder Staplerfahrer erhält auf seinem mobilen Terminal den Fahrauftrag, Nachschubpaletten aus dem Hochregallager in das Kommissionierfach umzulagern.

5. Kommissionierung & Pickvorgang (Order Picking)

Trifft ein Versand- oder Fertigungsauftrag zur Ausführung ein, beginnt das Picking:

  • Picklistenerzeugung: Über cap:inventory.picking.generate fasst das System Auslagerpositionen zusammen. Je nach Lagertyp unterstützt Centurio ERP:
    • Single-Order Picking: Abarbeitung eines einzelnen Auftrags.
    • Batch / Multi-Order Picking: Mehrere Aufträge werden wegeoptimiert in einem Rundgang gepickt und auf Kommissionierwagen mit Fachaufteilung verteilt (Pick-by-Light / Pick-by-Voice fähig).
  • Pick-Quittierung: Der Picker scannt das Fach, den Artikelbarcode und gegebenenfalls die Chargennummer. Buchungsfehler werden durch den Scanner sofort mit Fehlerton abgewiesen.
  • Materialbereitstellung: Die gepickten Artikel werden physisch an den Packtisch des Warenausgangs oder den Bereitstellungspuffer der Fertigung übergeben (cap:inventory.picking.complete).

6. Packtisch, Versand & Warenausgangsbuchung (Dispatch)

Am Packtisch erfolgt die Versandfertigung:

  • Überprüfung des Sendungsinhalts (Scan-Kontrolle gegen Pickliste).
  • Packstückbildung und Wiegen: Erfassung von Bruttogewicht und Abmessungen.
  • Automatischer Druck von Versandetiketten (DHL, UPS, Dachser, Schenker via Speditions-API) und Frachtpapieren.
  • Warenausgangs-Gateway: Der Gateway schließt die Auslagerung ab: Der physische Bestand wird final abgebucht (StockMove: OUT), der Lieferschein GoBD-revisionssicher erzeugt und der Verkaufsauftrag auf versendet geschaltet.

7. Stichtags- und permanente Inventur

Zur Einhaltung handelsrechtlicher Pflichten (HGB § 240) bietet das Modul:

  • Permanente Inventur: Fächer werden rollierend während des Jahres gezählt (z.B. immer dann, wenn ein Fach leergepickt wird (Zero-Crossing Check)).
  • Stichtagsinventur: Sperrung von Lagerbereichen, Zähllistenausgabe, Doppelzählungsabgleich und Genehmigung von Zähldifferenzen über Vier-Augen-Freigabe vor Verbuchung auf das GuV-Bestandsveränderungskonto.
🏛️

Meta-Fachlogik: Ideologische Blaupause, Soll-Weltbild & Normen

Meta-Fachlogik: Die ideologische Blaupause & das normative Weltbild

Die Meta-Fachlogik des Lagers basiert auf Best-Practice-Standards des Supply Chain Council (SCOR-Modell), VDI-Richtlinien zur Intralogistik und gesetzlichen Bewertungsvorschriften nach HGB und GoBD.

1. Logistische Philosophien & Prinzipien

  • SCOR-Modell (Supply Chain Operations Reference - sD1/sD2): Standardisierung der Prozesse Deliver Stocked Product und Deliver Make-to-Order Product. Ziel ist die Maximierung der Liefertreue (OTIF - On-Time In-Full) bei minimalen Lagerhaltungskosten (Holding Costs).
  • Vermeidung von Überbeständen vs. Lieferfähigkeit: Das Spannungsfeld zwischen gebundenem Betriebskapital (Working Capital) und Fehlmengenkosten (Stockout Costs) wird über dynamische Sicherheitsbestände und die Andler-Losgrößenformel optimiert.
  • Wegeminimierung in der Intralogistik: Kommissionierwege machen bis zu 60% der Gesamtarbeitszeit im Lager aus. Das Soll-Modell verlangt strikt wegeoptimierte S-Shape- oder Return-Routen sowie ABC-Klassifikation.

2. Gesetzliche Normen & Standards

  • HGB §§ 240, 241 (Inventur & Bewertung):
    • Pflicht zur Erstellung eines lückenlosen Inventars zum Abschluss des Geschäftsjahres.
    • Gesetzliche Zulässigkeit von Stichprobeninventuren und permanenter Inventur nur bei lückenloser digitaler Lagerbuchführung mit Festschreibung.
    • Gesetzliche Bewertungsvereinfachungsverfahren: FIFO (First-In-First-Out) und LIFO (Last-In-First-Out) nach HGB § 256. Centurio ERP setzt primär FIFO und FEFO ein.
  • GoBD (Grundsätze zur ordnungsmäßigen Führung digitaler Unterlagen):
    • Keine Bestandsbuchung ohne Beleg (Belegprinzip).
    • Jede Ein-, Aus- oder Umlagerung muss einen unveränderbaren Transaktionsstempel mit Zeitstempel, Benutzer-ID und Herkunftsbeleg tragen.
  • Gefahrstoffverordnung (GefStoffV) & Zusammenlagerungsverbote:
    • Vorschriften nach TRGS 510 zur strikten Trennung inkompatibler Gefahrgutklassen (z.B. brennbare Flüssigkeiten vs. brandfördernde Stoffe).

3. Invarianten des Soll-Modells

  1. Kein negativer physischer Lagerbestand (physisches Material kann nicht kleiner Null sein).
  2. Keine Auslagerung oder Reservierung von Chargen im Quarantäne- oder Sperrstatus.
  3. Jede Umlagerung zwischen Lagerplätzen erzeugt einen lückenlos nachvollziehbaren StockMove.
  4. Inventurdifferenzen dürfen nur von autorisierten Rollen (Lagerleiter/CFO) mit Pflichtbegründung verbucht werden.

Normbezug für products

Prüfkatalog Standards-Registry v2026.10.1. Dieser Abschnitt ordnet Prüfreferenzen zu und stellt nicht fest, dass das Modul eine Norm einhält; keine Kataloganforderung ist als PASS bewertet.

Im Prüfkatalog ist keine modulspezifische Anforderung und keine primäre Prüfreferenz hinterlegt.

Im Auditauftrag zusätzlich genannt und nicht im Prüfkatalog v2026.10.1: ISO 22745, ISO 8000, GS1, ETIM, eCl@ss. Dafür gibt es hier keine Klausel und keine Aussage, dass eine Vorgabe eingehalten wird.

Plattformweite Katalogwerke mit Geltungsbereich all (unter anderem WCAG 2.2, EN 301 549 V4.1.1, ISO 9241-110:2020, ISO 9241-210:2019, ISO/IEC 25010:2023, ISO 9001:2026, ISO/IEC 27001:2022, APQC PCF 8.0, DSGVO, EU AI Act) umfassen dieses Modul mit. Wo der Volltext fehlt, bleibt der Zugang ohne Quelle, lizenzpflichtig oder nur als öffentliche Zusammenfassung gekennzeichnet. Auch diese Nennung weist keine eingehaltene Vorgabe nach.

⚙️

Systemische Fachlogik: Faktische Umsetzung in Centurio ERP & Capabilities

Systemische Fachlogik: Die faktische Umsetzung in Centurio ERP

Die System-Fachlogik dokumentiert die konkrete technische Implementierung des LVS im Monolithen unter Nutzung der Datenbankmodelle, Capabilities, Gateways und Events.

1. Datenmodelle & Semantische Schicht (ORM)

  • StockLocation: Hierarchischer Lagerort (Felder: id, tenant_id, name, code, parent_id, location_type [warehouse, zone, aisle, bin, transit, quarantine], is_active, max_weight_kg, max_volume_m3).
  • StockItem: Artikelstamm-Referenz mit Lagerparametern (Felder: product_id, min_quantity, max_quantity, reorder_point, lead_time_days).
  • StockQuant: Der atomare Bestandsnachweis (Felder: id, product_id, location_id, lot_id, serial_number, quantity, reserved_quantity).
  • StockLot: Chargen und Losverwaltung (Felder: lot_number, product_id, expiration_date, quarantine_status, supplier_lot_number).
  • StockMove: Unveränderliches Transaktionsbuch (Felder: source_location_id, destination_location_id, product_id, lot_id, quantity, reference_type, reference_id, created_by, timestamp).
  • PickingOrder: Kommissionierauftrag mit verknüpften PickingLines.

2. Das Capability-Register

  • cap:inventory.goods_receipt.create: Anlegen eines Wareneingangs mit Mengen- und Chargenabgleich.
  • cap:inventory.stock.transfer: Umlagerung von Material zwischen beliebigen Fächern oder Werken.
  • cap:inventory.stock.reserve: Blockieren von Beständen für Kundenaufträge oder Fertigung.
  • cap:inventory.stock.release_reservation: Freigabe reservierter Mengen bei Stornierung oder Änderung.
  • cap:inventory.picking.generate: Erzeugung einer wegeoptimierten Pickliste nach ABC-Zonen.
  • cap:inventory.picking.complete: Quittierung der Entnahme und Übergabe an Packtisch.
  • cap:inventory.replenishment.run: Automatischer Scan nach Meldebeständen und Auslösung interner Transfers.
  • cap:inventory.inventory_count.record: Erfassung von Zählergebnissen bei Stichtags- oder permanenter Inventur.
  • cap:inventory.inventory_count.reconcile: Buchen der Inventurdifferenz auf Aufwandskonten.

3. Der Gateway gw:warehouse_dispatch@v1

Sichert die Warenauslagerung atomar ab:

  • Validierung: Prüft, ob die Pickliste vollständig bestätigt ist und alle Reservierungen auflösbar sind.
  • Buchung: Bucht StockQuant.quantity ab, hebt die Reservierung auf, generiert den StockMove: OUT und aktualisiert den Lieferstatus des Auftrags.
  • Outbox-Signal: Feuert STOCK_LEVEL_CHANGED und ORDER_DISPATCHED zur Benachrichtigung des Kunden und der Buchhaltung.

4. Statusmodelle

  • Lagerort-Status: active (Freigegeben), locked (Gesperrt für Zählung), quarantine (Sperrlager), maintenance (Instandhaltung).
  • Kommissionierauftrag: draft ➔ assigned ➔ in_picking ➔ packed ➔ dispatched.

5. Umgesetzte LVS-Erweiterungen (Code-Stand 2026-10-23, reale Bezeichner)

Bestand bleibt bewegungsbasiert (StockMovement als einziges Ledger); alle Erweiterungen sind operative Schichten darüber.

  • ABC/XYZ & Zonierung (inventory/abc_slotting.py): Klassen nach Wert (Product.abc_class), Zugriffshäufigkeit (Product.slotting_class) und Nachfrageschwankung (Product.xyz_class) nur per geprüfter Übernahme (cap:inventory.abc_classification.apply, unveränderliche abc_classification_runs); ABC-Zonen (WarehouseZone.abc_class) und Greifhöhe je Fach (Location.access_level) steuern die Einlagerung; Umlagerungsliste (cap:warehouse.abc_relocation.execute); Cube-per-Order-Index; tägliche Prüferinnerung.
  • Ladungsträger & SSCC (inventory/inbound.py, HandlingUnit): Palette/Karton/Wanne, verschachtelbar; SSCC (NVE) nach GS1 nur mit hinterlegter GS1-Basisnummer, sonst interner Code; Umlagern bucht je Inhaltsposition (cap:inventory.handling_unit.create, cap:inventory.handling_unit.move); GS1-128-Etikettdaten.
  • Lieferavis & Blindeingang (InboundAdvice): Avis manuell/aus Bestellung/EDI/Agent; Zählung blind (Sollmengen verborgen), Abweichungen über receiving_tolerance_pct nur mit Freigabe der Lagerleitung; Abschluss erzeugt einen Wareneingangsentwurf (cap:inventory.inbound_advice.complete_receiving), Lieferanten-SSCC werden Ladungsträger.
  • Lagerfähigkeit (inventory/storage_rules.py) – geprüft bei jeder Einlagerung und Umbuchung: Fachmaße/-volumen (Location.max_*), Überhang-Alternativen bei Übergröße, Temperaturbereich Artikel ↔ Zone, Gefahrstoff-Zusammenlagerung nach mandantengepflegter Matrix (StorageClassRule, ungeregelte Paare werden abgelehnt; cap:warehouse.storage_class_rule.set), Kartonagenvorschlag (CartonType).
  • Ausführung (inventory/execution.py): Aufgabensteuerung WarehouseTask aus Picks, Einlagerungen, Inventuren, Avisen und ABC-Umlagerungen mit Doppelspiel (gleiche Zone zuerst); Pick-and-Pass-Abschnitte mit Übergabe; Leistungskennzahlen je Mitarbeiter; Sortierwand (PutWall); Hofverwaltung (YardVisit).
  • Geräte & Voice (inventory/devices.py): Pick-/Put-to-Light, AutoStore/AMR/Fördertechnik herstellerneutral über Pull-Gateway (Token-Hash) oder Simulator; Quittungen werden PickConfirmation; Pick-by-Voice mit serverseitig geprüften Prüfziffern; Abschluss immer über den regulären Pickablauf.
🤖

KI-Consultant Leitfaden: Customizing- & No-Code-Konzept (Soll-Ist-Synthese)

AI Solution Architect Blueprint

KI-Consultant Blueprint: Customizing & No-Code Architektur

Dieser Leitfaden dient Beratern und autonomen KI-Agenten zur Konzeptionierung individueller Lagerstrukturen und Automatisierungen.

1. Kundenanforderungsanalyse

  • Handelt es sich um ein Standardlager, ein Tiefkühllager, ein Zolllager oder ein Werkstatt-Konsignationslager?
  • Welche Identifikationsmittel nutzt der Kunde (QR-Codes, EAN-13, GS1-128 mit Chargen-KI, RFID)?
  • Wie viele Lagerstufen existieren (Zentrallager ➔ Regionallager ➔ Servicewagen)?

2. No-Code Zusatzfelder (Custom Fields)

Im No-Code Studio (/semantic/customizing) anzulegen:

  • Auf StockLocation:
    • temperature_zone (Auswahlliste: Normal +15°C bis +25°C, Gekühlt +2°C bis +8°C, Tiefkühl -20°C): Zur Absicherung der Kühlkettenlogistik.
    • floor_load_limit_kg_m2 (Dezimal): Maximale Decken- bzw. Bodenbelastbarkeit.
  • Auf StockLot:
    • country_of_origin (ISO-2 Code): Zollrechtlicher Ursprungsnachweis (KN8/Ursprung).
    • lab_test_report_url (URL/Dokument): Link zum chemischen oder physikalischen Prüfbericht.
  • Auf StockMove:
    • transport_equipment_id (Text): Verwendeter Stapler oder Transportwagen zur Nachverfolgung.

3. No-Code Workflow Canvas DAGs

Blueprint A: Automatischer Kanban-Nachschub (Replenishment DAG)
  • Trigger-Node: Event STOCK_LEVEL_CHANGED.
  • Condition-Node: quant.location.location_type == 'picking_bin' AND quant.quantity <= stock_item.reorder_point.
  • Action-Node: Erzeuge sofort einen internen Transportauftrag von quant.product.default_storage_location zum Zielfach mit Menge stock_item.max_quantity - quant.quantity.
  • Notification-Node: Sende Push-Benachrichtigung an Handheld-Gruppe Staplerfahrer.
Blueprint B: Kühlketten-Alarmierung (Temperature Alert DAG)
  • Trigger-Node: IoT-Webhook über UIP-Connector (temperature_sensor_reading).
  • Condition-Node: sensor_temp > location.max_temp.
  • Action-Node: Sperre alle betroffenen StockLots auf Status quarantine (cap:inventory.stock.lock_lot) und erzeuge eine dringende QM-Prüfaufgabe.

📚 Operative Prozessbegriffe & Transaktionsschnittstellen

Zentrale Fachbegriffe im Prozesszusammenhang (Operatives Modell)
Lagerort & Fachkoordinaten
Physische Lokation im Format Gebäude-Gang-Regal-Ebene-Fach.
ABC-Zonierung
Klassifizierung der Lagerfächer nach Zugriffshäufigkeit (A=Schnelldreher nah am Warenausgang, C=Langsamdreher).
Meldebestand (Reorder Point)
Bestandsschwelle, bei deren Unterschreitung automatisch Nachschub oder Einkauf ausgelöst wird.
Sicherheitsbestand
Eiserne Reserve zur Abdeckung von Lieferzeitverzögerungen oder Nachfragespitzen.
ATP (Available to Promise)
Verfügbare Menge = Physischer Bestand - Reservierungen + bestätigter Zulauf.
Chargenrückverfolgbarkeit
Lückenloser Herkunfts- und Verwendungsnachweis für verderbliche oder normierte Waren.
Sperrlager / Quarantäne
Physische oder logische Lagerzone für ungeprüfte Retouren oder defekte Chargen ohne Buchungsfreigabe.
Pickliste
Wegeoptimierte Zusammenstellung auszulagernder Positionen für einen oder mehrere Aufträge.
XYZ-Analyse
Klassifizierung nach Schwankung der Nachfrage je Periode (X stabil, Y schwankend, Z sporadisch).
Golden Zone
Fächer in Greifhöhe (Knie bis Schulter); bevorzugt für stetige Schnelldreher (AX).
Ladungsträger / NVE (SSCC)
Palette, Karton oder Wanne mit 18-stelliger GS1-Versandeinheitennummer.
Lieferavis (ASN/DESADV)
Vorab übermittelte Lieferankündigung mit Positionen, Mengen und ggf. SSCC.
Blindeingang
Zählung im Wareneingang ohne Kenntnis der Sollmengen; Abweichungen werden danach geprüft.
Zusammenlagerung
Regel, ob zwei Lagerklassen (z. B. nach TRGS 510) gemeinsam, getrennt oder gar nicht lagern dürfen.
Doppelspiel (Interleaving)
Kombination von Einlagern und Auslagern auf einer Fahrt bzw. in einer Zone.
Pick-and-Pass
Zonenkommissionierung, bei der ein Auftrag von Zone zu Zone übergeben wird.
Pick-by-Voice / Pick-by-Light
Belegloses Kommissionieren mit Sprachdialog und Prüfziffern bzw. Lichtanzeige am Fach.
📥 Eingänge & Trigger (Inputs)
  • Wareneingangsbeleg aus Lieferantenbestellung oder Streckengeschäft
  • Fertigmeldung aus der Werkstatt / Montage
  • Reservierungsanforderung aus Verkaufsauftrag oder Werkstattauftrag
  • Umlagerungsauftrag zwischen Filialen, Werken oder Konsignationslagern
  • Kundenretoure mit Quarantäne-Zuweisung
📤 Ausgänge & Arbeitsergebnisse (Outputs)
  • Gebuchte Lagerzugänge mit Fach- und Chargenzuweisung
  • Wegeoptimierte Kommissionier- und Picklisten für das Lagerpersonal
  • Warenausgangsbelege und Speditionsversandpapiere (NVE/SSCC)
  • Permanente Inventur-Zählprotokolle und Buchungsbelege für Differenzen
  • Echtzeit-Bestandsspiegel mit ATP-Verfügbarkeit für den Vertrieb
⚡ Kaskaden & Folgeprozesse (Cascades)
  • goods_receipt_posted -> inventory_level_updated: Sofortige Erhöhung des freien Bestands
  • stock_reserved -> update_atp_view: Aktualisierung der Vertriebsverfügbarkeit
  • picking_completed -> staging_area_docked: Übergabe der Sendung an den Warenausgang
  • dispatch_confirmed -> sales_order_shipped: Statuswechsel des Verkaufsauftrags auf versendet
  • reorder_point_reached -> trigger_replenishment: Automatischer Nachschubauftrag
🛡️ Nebenprozesse & Resilienz
  • Sperrung schadhafter Chargen und Umlagerung in das Quarantänelager
  • Schwund- und Bruchbuchungen bei Beschädigung mit Genehmigungsnachweis
  • Manuelle Fachumbuchungen bei Reorganisation oder Platzoptimierung
  • Zollrechtliche Verwahrung bei Einfuhrgütern bis zur zollamtlichen Abfertigung
💡 No-Code Checkliste & Praxistipps
  • Lagerstruktur mit Gebäuden, Gängen und Fächern im Stammdatenbaum anlegen
  • Auslagerungsstrategie (FIFO oder FEFO nach Verfallsdatum) je Artikelkategorie festlegen
  • Barcode-Scanpflicht für Fächer und Chargen im mobilen Lagerclient aktivieren
  • Temperaturbereich je Zone und je Artikel sowie Gefahrstoff-Lagerklassen direkt pflegen (eingebaute Felder, keine Zusatzfelder nötig)
  • Zusammenlagerungsmatrix mit Quelle (z. B. TRGS 510) erfassen und als geprüft markieren
  • GS1-Basisnummer hinterlegen, damit Ladungsträger echte SSCC erhalten
  • Blindeingang und Wareneingangstoleranz in den Lagereinstellungen festlegen
  • ABC-Zonen, Greifhöhe und Prüfintervall einrichten; Klassen regelmäßig geprüft übernehmen
  • Pick-/Put-to-Light- und Automatik-Gateways registrieren; zuerst mit dem Simulator testen

🗄️ Data Models & Fields

ProductCategories product_categories RLS Aktiv
29 Fields / Columns

Tabelle product_categories

Feldname Data Type Required Schlüssel Functional Meaning
name VARCHAR(255) Ja * - Feld name
parent_id UUID Nein FK ➔ product_categories.id Feld parent_id
complete_name VARCHAR(512) Ja * - Feld complete_name
income_account_code VARCHAR(32) Nein - Feld income_account_code
expense_account_code VARCHAR(32) Nein - Feld expense_account_code
price_difference_account_code VARCHAR(32) Nein - Feld price_difference_account_code
inventory_valuation_account_code VARCHAR(32) Nein - Feld inventory_valuation_account_code
cost_method VARCHAR(32) Ja * - Feld cost_method
property_valuation VARCHAR(32) Ja * - Feld property_valuation
stock_input_account_code VARCHAR(32) Nein - Feld stock_input_account_code
stock_output_account_code VARCHAR(32) Nein - Feld stock_output_account_code
removal_strategy VARCHAR(32) Ja * - Feld removal_strategy
default_location_id UUID Nein FK ➔ locations.id Feld default_location_id
route_purchase BOOLEAN Ja * - Feld route_purchase
route_manufacture BOOLEAN Ja * - Feld route_manufacture
route_dropship BOOLEAN Ja * - Feld route_dropship
active BOOLEAN Ja * - Feld active
portal_visible BOOLEAN Ja * - Feld portal_visible
fieldset_title VARCHAR(255) Nein - Feld fieldset_title
fieldset_description TEXT Nein - Feld fieldset_description
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
created_by UUID Nein - Feld created_by
updated_by UUID Nein - Feld updated_by
source_type VARCHAR(32) Nein - Feld source_type
source_id UUID Nein - Feld source_id
metadata JSONB Ja * - Feld metadata
Products products RLS Aktiv
79 Fields / Columns

Tabelle products

Feldname Data Type Required Schlüssel Functional Meaning
type VARCHAR(48) Ja * - Feld type
name VARCHAR(255) Ja * - Feld name
normalized_name VARCHAR(255) Ja * - Feld normalized_name
description TEXT Nein - Feld description
sku VARCHAR(64) Nein - Feld sku
manufacturer VARCHAR(128) Nein - Feld manufacturer
manufacturer_part_number VARCHAR(128) Nein - Feld manufacturer_part_number
kn8_code VARCHAR(8) Nein - Feld kn8_code
barcode VARCHAR(64) Nein - Feld barcode
unit VARCHAR(16) Ja * - Feld unit
procurement_strategy VARCHAR(20) Ja * - Feld procurement_strategy
removal_strategy VARCHAR(32) Nein - Feld removal_strategy
min_stock NUMERIC(14, 4) Nein - Feld min_stock
target_stock NUMERIC(14, 4) Nein - Feld target_stock
base_unit VARCHAR(16) Ja * - Feld base_unit
packaging_unit VARCHAR(32) Nein - Feld packaging_unit
packaging_factor NUMERIC(14, 4) Nein - Feld packaging_factor
packaging_barcode VARCHAR(64) Nein - Feld packaging_barcode
purchase_price_packaging NUMERIC(14, 2) Nein - Feld purchase_price_packaging
purchase_price NUMERIC(14, 2) Nein - Feld purchase_price
sales_price NUMERIC(14, 2) Nein - Feld sales_price
currency VARCHAR(3) Ja * - Feld currency
tax_rate NUMERIC(6, 4) Nein - Feld tax_rate
active BOOLEAN Ja * - Feld active
is_candidate BOOLEAN Ja * - Feld is_candidate
detection_confidence NUMERIC(4, 3) Nein - Feld detection_confidence
is_accessory BOOLEAN Ja * - Feld is_accessory
is_rentable BOOLEAN Ja * - Feld is_rentable
rental_rate_amount NUMERIC(14, 2) Nein - Feld rental_rate_amount
rental_rate_unit VARCHAR(16) Nein - Feld rental_rate_unit
rental_deposit_amount NUMERIC(14, 2) Nein - Feld rental_deposit_amount
rental_rate_card_id UUID Nein FK ➔ rental_rate_cards.id Feld rental_rate_card_id
categ_id UUID Nein FK ➔ product_categories.id Feld categ_id
uom_id UUID Nein FK ➔ units_of_measure.id Feld uom_id
uom_code VARCHAR(16) Nein - Feld uom_code
sale_ok BOOLEAN Ja * - Feld sale_ok
purchase_ok BOOLEAN Ja * - Feld purchase_ok
description_sale TEXT Nein - Feld description_sale
description_purchase TEXT Nein - Feld description_purchase
standard_price NUMERIC(14, 2) Ja * - Feld standard_price
weight FLOAT Nein - Feld weight
net_weight FLOAT Nein - Feld net_weight
gross_weight FLOAT Nein - Feld gross_weight
length FLOAT Nein - Feld length
width FLOAT Nein - Feld width
height FLOAT Nein - Feld height
volume FLOAT Nein - Feld volume
packaging_type_code VARCHAR(16) Nein - Feld packaging_type_code
packaging_material_type VARCHAR(32) Nein - Feld packaging_material_type
packaging_tare_weight FLOAT Nein - Feld packaging_tare_weight
palette_layer_qty INTEGER Nein - Feld palette_layer_qty
palette_layers INTEGER Nein - Feld palette_layers
tracking VARCHAR(48) Ja * - Feld tracking
abc_class VARCHAR(1) Nein - Feld abc_class
abc_classified_at DATETIME Nein - Feld abc_classified_at
slotting_class VARCHAR(1) Nein - Feld slotting_class
slotting_classified_at DATETIME Nein - Feld slotting_classified_at
xyz_class VARCHAR(1) Nein - Feld xyz_class
xyz_classified_at DATETIME Nein - Feld xyz_classified_at
hazard_storage_class VARCHAR(16) Nein - Feld hazard_storage_class
storage_temp_min_c NUMERIC(5, 1) Nein - Feld storage_temp_min_c
storage_temp_max_c NUMERIC(5, 1) Nein - Feld storage_temp_max_c
responsible_id UUID Nein FK ➔ users.id Feld responsible_id
service_tracking VARCHAR(16) Nein - Feld service_tracking
condition_grade VARCHAR(1) Nein - Feld condition_grade
main_supplier_id UUID Nein FK ➔ suppliers.id Feld main_supplier_id
template_id UUID Nein FK ➔ products.id Feld template_id
variant_signature VARCHAR(512) Nein - Feld variant_signature
variant_strategy VARCHAR(48) Ja * - Feld variant_strategy
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
created_by UUID Nein - Feld created_by
updated_by UUID Nein - Feld updated_by
source_type VARCHAR(32) Nein - Feld source_type
source_id UUID Nein - Feld source_id
metadata JSONB Ja * - Feld metadata
deleted_at DATETIME Nein - Feld deleted_at

🔌 Entry Points (UI & APIs)

Art Method Endpoint / Path Titel & Zweck Required Role
⚡ REST API DELETE /api/v1/catalog/category-taxonomy-bindings/{standard_code}
delete_category_taxonomy_binding
Semantic binding: operator_surface; mutation=True
products
⚡ REST API DELETE /api/v1/catalog/products/categories/{category_id}
delete_product_category
Semantic binding: operator_surface; mutation=True
products
⚡ REST API DELETE /api/v1/catalog/products/categories/{category_id}/fieldset/bindings/{field_key:path}
unbind_category_attribute_api
Semantic binding: operator_surface; mutation=True
products
⚡ REST API DELETE /api/v1/catalog/products/{product_id}/accessories/{accessory_product_id}
remove_product_accessory
Semantic binding: operator_surface; mutation=True
products
⚡ REST API DELETE /api/v1/catalog/products/{product_id}/compatible-equipment/{equipment_product_id}
remove_compatible_equipment
Semantic binding: operator_surface; mutation=True
products
⚡ REST API DELETE /api/v1/catalog/products/{product_id}/compatible-parts/{part_product_id}
remove_compatible_part
Semantic binding: operator_surface; mutation=True
products
⚡ REST API DELETE /api/v1/catalog/products/{product_id}/supplier-info/{info_id}
delete_supplier_info
Semantic binding: operator_surface; mutation=True
products
⚡ REST API DELETE /api/v1/catalog/units/{unit_id}
delete_unit
Semantic binding: operator_surface; mutation=True
products
⚡ REST API GET /api/v1/catalog/barcode/lookup
lookup_barcode
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/barcode/search
search_barcode
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/category-taxonomy-bindings
list_category_taxonomy_bindings
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/category-taxonomy-bindings/{standard_code}/history
category_taxonomy_binding_history
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/locations
list_locations
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/locations/{location_id}/end-customer-aliases
list_end_customer_aliases
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/locations/{location_id}/neighbors
location_neighbors
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/locations/{location_id}/stock
location_stock
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/platform-fieldset-templates
list_platform_fieldset_templates
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/platform-fieldset-templates/{standard_code}
get_platform_fieldset_template
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/product-attributes
list_product_attributes
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/products
list_products
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/products/autocomplete
autocomplete_products
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/products/categories
list_product_categories
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/products/categories/{category_id}
get_product_category
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/products/categories/{category_id}/fieldset
get_category_fieldset_api
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/products/{product_id}/accessories
list_product_accessories
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/products/{product_id}/compatible-equipment
list_compatible_equipment
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/products/{product_id}/compatible-parts
list_compatible_parts
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/products/{product_id}/lots
product_lots
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/products/{product_id}/stock-detail
product_stock_detail
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/products/{product_id}/supplier-info
list_supplier_info
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/products/{product_id}/variants
list_product_variants
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/scan/lookup
scan_lookup
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/standard-categories/search
search_standard_categories
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/standard-categories/top
list_top_level_categories
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/standard-categories/{code}
get_standard_category
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/standard-categories/{parent_code}/children
list_child_categories
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/stock/cockpit
stock_cockpit
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/stock/history
stock_history
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/stock/issues
stock_issues
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/stock/issues/{issue_id}
get_stock_issue
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/stock/issues/{issue_id}/delivery-note.pdf
stock_issue_delivery_note
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/stock/movements
list_movements
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/stock/overview
stock_overview
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/stock/reservations
list_stock_reservations
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/stock/stats
stock_stats
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/stock/valuation
stock_valuation
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/stock/valuation/{product_id}
stock_valuation_for_product
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/catalog/units
list_units
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /api/v1/kn8/search
search_reference
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /portal/{slug}/kategorien/ebene/{level}
portal_category_level
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /portal/{slug}/kategorien/suche
portal_category_search
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /portal/{slug}/kategorien/{category_identifier}/fieldset
portal_category_fieldset
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /portal/{slug}/produkte
products_page
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /products
products_page
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /products/new
product_create_page
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /products/{product_id}
product_detail_page
Semantic binding: inventory_only; mutation=False
products
⚡ REST API GET /products/{product_id}/edit
product_edit_page
Semantic binding: inventory_only; mutation=False
products
⚡ REST API PATCH /api/v1/catalog/locations/{location_id}
update_location
Semantic binding: operator_surface; mutation=True
products
⚡ REST API PATCH /api/v1/catalog/products/categories/{category_id}/fieldset
update_category_fieldset_meta_api
Semantic binding: operator_surface; mutation=True
products
⚡ REST API PATCH /api/v1/catalog/products/categories/{category_id}/fieldset/bindings/{field_key:path}
patch_category_attribute_binding_api
Semantic binding: operator_surface; mutation=True
products
⚡ REST API PATCH /api/v1/catalog/products/{product_id}
update_product
Semantic binding: operator_surface; mutation=True
products
⚡ REST API PATCH /api/v1/catalog/products/{product_id}/supplier-info/{info_id}
update_supplier_info
Semantic binding: operator_surface; mutation=True
products
⚡ REST API PATCH /api/v1/catalog/units/{unit_id}
update_unit
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/categories/suggest-for-product
suggest_categories_for_product
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/categories/suggest-settings
suggest_category_settings
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/locations
create_location
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/locations/structure
create_location_structure
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/locations/{location_id}/end-customer-aliases
allocate_end_customer_alias
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/locations/{location_id}/end-customer-aliases/release
release_end_customer_aliases
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/locations/{location_id}/merge
merge_location
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/locations/{location_id}/unmerge
unmerge_location
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/platform-fieldset-templates/seed
seed_platform_fieldset_templates
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/platform-fieldset-templates/{standard_code}/toggle-active
toggle_platform_fieldset_template
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/product-attributes
create_product_attribute
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products
create_product
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/categories
create_product_category
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/categories/fieldset/bindings/remap-bulk
bulk_remap_category_attributes_api
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/categories/seed-fieldsets
seed_category_fieldsets_api
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/categories/{category_id}/fieldset/bindings
bind_category_attribute_api
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/categories/{category_id}/fieldset/bindings/{field_key:path}/remap
remap_category_attribute_api
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/categories/{category_id}/fieldset/bindings/{field_key:path}/toggle-required
toggle_category_attribute_required_api
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/categories/{category_id}/fieldset/revisions
create_category_fieldset_revision_api
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/categories/{category_id}/fieldset/revisions/{revision_id}/activate
activate_category_fieldset_revision_api
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/categories/{category_id}/fieldset/revisions/{revision_id}/approve
approve_category_fieldset_revision_api
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/categories/{category_id}/fieldset/revisions/{revision_id}/simulate
simulate_category_fieldset_revision_api
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/categories/{category_id}/fieldset/validate
validate_category_fieldset_api
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/{product_id}/accessories
add_product_accessory
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/{product_id}/attributes
update_product_attributes_api
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/{product_id}/compatible-equipment
add_compatible_equipment
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/{product_id}/compatible-parts
add_compatible_part
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/{product_id}/confirm
confirm_product
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/{product_id}/photo
upload_product_photo
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/{product_id}/photo-from-url
import_product_photo_from_url_api
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/{product_id}/supplier-info
create_supplier_info
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/{product_id}/supplier-info/{info_id}/preferred
set_preferred_supplier_info
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/products/{product_id}/variants/generate
generate_product_variants
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/standard-categories/seed
seed_standard_categories
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/standard-categories/{code}/adopt
adopt_standard_category
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/stock/adjustment
stock_adjustment
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/stock/inbound
stock_inbound
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/stock/issues
create_stock_issue
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/stock/issues/{issue_id}/post
post_stock_issue
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/stock/issues/{issue_id}/print-delivery-note
print_stock_issue_delivery_note
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/stock/issues/{issue_id}/reverse
reverse_stock_issue
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/stock/issues/{issue_id}/ship
ship_stock_issue
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/stock/movements
create_movement
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/stock/outbound
stock_outbound
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/stock/reservations
create_stock_reservation
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/stock/reservations/{reservation_id}/release
release_stock_reservation
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/stock/transfer
stock_transfer
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/stock/withdraw-partial
stock_withdraw_partial
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/units
create_unit
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/catalog/units/seed
seed_units
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/kn8/reference/enrich-descriptions
enrich_reference_descriptions
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/kn8/reference/import
import_reference
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/kn8/reference/import-official
import_official
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/kn8/reference/{reference_id}/activate
activate_reference
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /api/v1/kn8/suggest
suggest_reference
Semantic binding: operator_surface; mutation=True
products
⚡ REST API POST /portal/{slug}/kategorien/{category_identifier}/validate
portal_validate_category_fieldset
Semantic binding: operator_surface; mutation=True
products
⚡ REST API PUT /api/v1/catalog/category-taxonomy-bindings/{standard_code}
set_category_taxonomy_binding
Semantic binding: operator_surface; mutation=True
products
⚡ REST API PUT /api/v1/catalog/platform-fieldset-templates/{standard_code}
upsert_platform_fieldset_template
Semantic binding: operator_surface; mutation=True
products
⚡ REST API PUT /api/v1/catalog/products/categories/{category_id}
update_product_category
Semantic binding: operator_surface; mutation=True
products
🖥️ WEB-UI GET /products/{id}/edit
Artikel bearbeiten
Stammdaten, Preise und dynamische Fieldsets pflegen
catalog:write
⚡ REST API POST /api/v1/catalog/products/{id}/attributes
Attribute speichern
Speichert typvalidierte semantische Merkmale
catalog:write

🛡️ Regulatory & Compliance

Dieses Modul unterliegt folgenden gesetzlichen, regulatorischen und Revisionsstandards:

  • UStG Steuersatzzuordnung
  • Zolltarifnummern (KN8 / TARIC)
  • GoBD Stammdatenänderungshistorie
Related Modules:
➔ inventory ➔ semantic_core ➔ finance ➔ portal