Individualpreise — API und MCP
Überblick
Dieser Bereich stellt 15 Operationen bereit. Jede davon ist zugleich ein MCP-Werkzeug.
Der Bereich hängt am Modul-Schalter module.customer_prices. Ist das Modul aus, antworten diese Operationen mit 404.
Operationen
| Methode | Pfad | Zweck | Recht | Parameter |
|---|---|---|---|---|
GET | /api/v1/customer-prices | Liste der CustomerPriceList | customerprices.price.view · customerprices.price.manage | page, customerId, active, q, brandId, productId, expiringWithinDays, approvalStatus |
POST | /api/v1/customer-prices | Eine CustomerPriceList anlegen | customerprices.price.manage | + Rumpf |
POST | /api/v1/customer-prices/adopt-quote-item | Angebotspreis als Kundenkondition übernehmen — Legt aus einer Angebotsposition eine dauerhafte Kundenkondition an (Artikel, ab Positionsmenge, gültig ab heute): Netto-Stückpreis nach Positionsrabatt, in Euro. Antwort outcome = created, updated oder exists. Ab der Rabattschwelle wartet die Kondition auf Freigabe. | customerprices.price.manage · finance.quote.view | + Rumpf |
GET | /api/v1/customer-prices/analysis | Auswertung der Sonderkonditionen je Kunde — Umsatz (Netto-Anteil am Beleg), Listenwert und Nachlass ((Listenpreis − Stückpreis) × Menge) der Rechnungspositionen je Kunde und Preisquelle im Zeitraum. Preisquelle: Provider-Schlüssel der Preisfindung, list (Listenpreis) oder manual (abweichender Preis). Verlangt customerprices.analysis.view. | customerprices.analysis.view | customerId, from, to, range, special, brandId |
GET | /api/v1/customer-prices/discount-allowances | Rabatt ohne Rückfrage je Person auflisten — Listet je Person und Marke den zulässigen Rabatt ohne Rückfrage für Sonderkonditionen. Ohne Eintrag gilt die Schwelle der Einstellung. | customerprices.allowance.manage | userUlid |
POST | /api/v1/customer-prices/discount-allowances | Rabatt ohne Rückfrage für eine Person festlegen — Legt fest, bis zu welchem Rabatt (Prozent) eine Person Sonderkonditionen ohne Freigabe speichern darf — je Marke oder für alle Marken (brandId leer). Darüber gibt eine zweite Person mit Freigaberecht frei. 422, wenn es für Person und Marke schon einen Rahmen gibt. | customerprices.allowance.manage | + Rumpf |
DELETE | /api/v1/customer-prices/discount-allowances/{ulid} | Rabatt ohne Rückfrage einer Person entfernen — Entfernt den persönlichen Rahmen — danach gilt für die Person wieder die Schwelle der Einstellung. | customerprices.allowance.manage | ulid |
PATCH | /api/v1/customer-prices/discount-allowances/{ulid} | Rabatt ohne Rückfrage einer Person ändern — Ändert den zulässigen Rabatt ohne Rückfrage. Person und Marke bleiben. | customerprices.allowance.manage | ulid, + Rumpf |
DELETE | /api/v1/customer-prices/{ulid} | Eine CustomerPriceList löschen | customerprices.price.manage | ulid |
GET | /api/v1/customer-prices/{ulid} | Eine CustomerPriceList lesen | customerprices.price.view · customerprices.price.manage | ulid |
PATCH | /api/v1/customer-prices/{ulid} | Eine CustomerPriceList ändern | customerprices.price.manage | ulid, + Rumpf |
POST | /api/v1/customer-prices/{ulid}/approve | Sonderkonditionen freigeben — Gibt alle wartenden Konditionen der Preisliste frei (ab der Rabattschwelle). Ab dann greifen sie in der Preisfindung; der Anfordernde bekommt einen Hinweis. 409, wenn nichts wartet; 403 ohne Freigaberecht in der Marke der Liste. | customerprices.price.approve | ulid, + Rumpf |
POST | /api/v1/customer-prices/{ulid}/expire | Preisliste ablaufen lassen — Beendet die Preisliste: „Gültig bis“ wird auf gestern gesetzt, ab heute greift die normale Preisfindung. Eine noch nicht begonnene Liste wird abgeschaltet. | customerprices.price.manage · customerprices.price.approve | ulid, + Rumpf |
POST | /api/v1/customer-prices/{ulid}/reject | Sonderkonditionen ablehnen — Lehnt alle wartenden Konditionen der Preisliste ab (approvalNote = Grund). Sie bleiben gespeichert, greifen aber nie; der Anfordernde bekommt einen Hinweis mit Grund. 409, wenn nichts wartet. | customerprices.price.approve | ulid, + Rumpf |
GET | /api/v1/product-customer-prices | Liste der ProductCustomerPrice | customerprices.price.view · customerprices.price.manage | productId |
Zweckangaben, die nicht dem Standardmuster folgen, stammen unverändert aus der Schnittstellen-Beschreibung im Code.