Zum Hauptinhalt springen

Produkt — Lieferanten (Sub-Route)

Zweck

Sub-Route /products/:id/suppliers listet alle Lieferanten, die das Produkt liefern. Pro Eintrag (ProductSupplier) wird gepflegt:

  • Lieferanten-eigene Artikelnummer (supplierProductNo).
  • Einkaufspreis (purchasePrice).
  • Mindestabnahme-Menge.
  • Lieferzeit.
  • Primary-Flag (Default-Lieferant für dieses Produkt).

Bei Bestellungen über Bestellbelege wird der Primary-Lieferant vorgeschlagen.

Voraussetzungen

- Berechtigung `view:Product` und `view:ProductSupplier`. - Für Pflege: `create`/`update`/`delete:ProductSupplier` und `view:Supplier`.

Berechtigungen (CASL)

ActionSubjectWirkungKeycloak-Rolle
viewFE_Product, ProductDetail aufrufbar
view/create/update/deleteProductSupplierBezugsquellen pflegenAPP_SPEAMCORE_VIEW/CREATE/UPDATE/DELETE_PRODUCT_SUPPLIER
viewSupplierLieferanten-AuswahlAPP_SPEAMCORE_VIEW_SUPPLIER

Schritt-für-Schritt-Anleitung

  1. Produkt (/products/:id) → Tab Lieferanten.
  2. + Lieferant wählt einen Lieferanten und legt einen ProductSupplier-Datensatz an.
  3. Lieferanten-Artikelnummer, Einkaufspreis, Lieferzeit pflegen.
  4. Optional isPrimary = true setzen — wirkt auf Bestellbeleg-Vorbefuellung.

Listenansicht — products-suppliers

Preise, Rabatt und Deckungsbeitrag (Juni 2026)

Das Lieferanten-Grid pflegt pro ProductSupplier Verkaufspreis (VK), Einkaufspreis (EK), Rabatt und zeigt den Deckungsbeitrag (DB) farblich an. Die genaue Berechnung — Rabatt-Kette, EK-Ableitung, Marge — beschreibt das Konzept Produkt-Lieferanten-Preise & Deckungsbeitrag.

FeldnamePflichtDatentypWirkung beim AusfuellenVoraussetzung
salePriceneinDecimal(10,2)Verkaufspreis (VK) des Lieferanten — Basis für den Rabatt.
purchasePriceneinDecimal(10,2)Einkaufspreis (EK). Leer = wird aus VK − Rabatt abgeleitet.
discountneinZahlRabattbetrag (in % oder absolut, je discountType). Ein gesetzter Wert (auch 0) überschreibt Warengruppen-/Lieferanten-Rabatt.
discountTypeneinpercentage/fixed/noneRabatt-Art. none = nicht rabattierfähig → keine Vererbung, EK = VK.
tieredPricesneinJSONMengengestaffelte EK/Rabatte [{fromQuantity, purchasePrice, discount, discountType}]. Unterste Staffel spiegelt in den Basis-EK; VK bleibt ungestaffelt.Produkt mit hasTieredPrices.
packagingUnitneinDecimal(12,3)Verpackungseinheit dieses Lieferanten.
deliveryTimeDaysneinIntegerLieferzeit in Tagen.
stockneinDecimalLagerbestand beim Lieferanten.
minimumOrderQuantityneinDecimalMindestbestellmenge.
mainSupplierneinBooleanKennzeichen Hauptlieferant (Default-Bezugsquelle, Vorschlag im Bestellbeleg).

Das Grid zeigt zusätzlich eine Deckungsbeitrags-Spalte (DB% = (VK − EK) / VK × 100), eingefärbt nach den Marge-Schwellwerten. Eine Auswertung über alle Lieferanten je Produkt bietet die Deckungsbeitrags-Übersicht.

Der **Rabatt** senkt den VK des Lieferanten auf Ihren EK (einkaufsseitig). Der **Deckungsbeitrag** (`VK − EK`) ist Ihre Marge. Beides ist getrennt — Details im [Konzept](/konzepte/produkt-lieferanten-preise).

Wiederverwendbare Konzepte

Verknuepfungen zu anderen Modulen

  • Produkte — Eltern-Modul.
  • Lieferanten — Stamm und Sub-Route /suppliers/:id/products (umgekehrte Sicht).
  • Bestellbelege — verbrauchen Primary-Lieferant.
  • Produkt-Gruppen — pro Gruppe ein eigener Lieferanten-Spiegel via ProductGroupSupplier.

API/Schnittstellen

MethodeEndpointZweckCASL
GET/api/product-suppliers?filter[productId]Listeview ProductSupplier
POST/api/product-suppliersAnlegencreate ProductSupplier
PATCH/api/product-suppliers/:idÄndernupdate ProductSupplier
DELETE/api/product-suppliers/:idSoft-Deletedelete ProductSupplier

Versionshinweise

  • 2026-06-22: Lieferanten-Preise dokumentiert — VK/EK/Rabatt (salePrice, purchasePrice, discount, discountType inkl. none), Staffelpreise (tieredPrices), Logistikfelder und mainSupplier sowie die Deckungsbeitrags-Spalte. Verweis auf Konzept und Übersicht. Verifiziert an productSupplier.model.ts, productSupplierPricing.ts, ProductSupplierDataGrid.tsx.
  • 2026-04-30: Initiale Veroeffentlichung.