Bei Nutraceuticals-Lohnherstellern sieht die Produktlogik auf den ersten Blick einfach aus: Rohstoffe einkaufen, Produkte herstellen, Produkte verkaufen.
In der Praxis ist es aber deutlich komplizierter. Derselbe Artikel kann gekauft, verkauft, verarbeitet, vom Kunden beigestellt oder als White-Label-Basis verwendet werden. Beispiel: Omega-3 Kapseln können als Bulkware kommen, direkt verkauft werden, in Flaschen abgefüllt werden oder später noch kundenspezifisch etikettiert werden.
Dafür reichen die Odoo-Felder "kann verkauft werden" und "kann eingekauft werden" leider nicht aus. Genau deshalb entstehen in Odoo schnell unsaubere Produktstammdaten. Und wenn die Produktstammdaten nicht sauber sind, wird alles danach schwierig: Einkauf, Lager, Produktion, Stücklisten, Rückverfolgbarkeit, Etiketten, Verkauf und Auswertungen.
Mein Ansatz: Ein einfacher, konfigurierbarer Produktcode. Der Produktcode sollte beschreiben, was ein Produkt ist. Er wird zur einfachen Übersicht in die Artikelnummer codiert. Ob ein Produkt gekauft, verkauft oder produziert wird, erfasse ich wie gewohnt in Odoo über Einkauf, Verkauf, Routen und Stücklisten.

Warum normale Produktgruppen hier nicht reichen
In vielen Produktionsbetrieben gibt es einfache Produktgruppen wie Rohstoff, Halbfabrikat und Fertigprodukt. Das funktioniert gut, wenn die Rollen klar getrennt sind.
Zum Beispiel:
Rohstoffe werden eingekauft und verbraucht.
Halbfabrikate werden intern hergestellt und weiterverarbeitet.
Fertigprodukte werden verkauft.
Bei einem Nutra-Lohnhersteller ist diese Trennung aber oft falsch. Ein Rohstoff kann verkauft werden. Ein Bulkprodukt kann eingekauft und direkt weiterverkauft werden. Ein neutral abgefülltes Produkt kann verkauft oder später noch gelabelt werden. Ein Rohstoff oder Halbfabrikat kann vom Kunden beigestellt werden.
Wenn man diese Logik direkt in Produktgruppen wie Rohstoff, Halbfabrikat oder Fertigprodukt presst, wird es sehr schnell unklar, weil die Rollen innerhalb einer Kategorie gemischt sind.
Ein Beispiel: Omega-3 ohne Label
Nehmen wir ein Omega-3 Produkt. Es ist bereits abgefüllt, verschlossen und lagerfähig, es fehlt aber noch das kundenspezifische Label.
Was ist das jetzt?
Ein Rohstoff? Eher nicht.
Ein Fertigprodukt? Auch nicht wirklich.
Ein Verkaufsprodukt? Vielleicht.
Ein Produkt, das weiterverarbeitet werden kann? Ja.
Genau für diesen Fall braucht es eine eigene Klasse: White-Label-Basis.
Das Produkt ist physisch fast fertig, aber es hat noch keine finale Kunden- oder Markenidentität. Es kann an Kunde A verkauft werden, an Kunde B verkauft werden oder für Kunde C nochmals etikettiert werden.
Ein einfacher Strukturvorschlag für Nutra-Produktstammdaten
Ich würde es bewusst einfach halten und nicht zu viele Klassen einführen. Je mehr Klassen es gibt, desto mehr Diskussionen gibt es später bei jedem neuen Produkt und desto schwieriger ist es, die Daten sauber zu pflegen.
Für Nutra-Lohnhersteller würde ich mit diesen fünf Klassen starten:
MAT = Material / Inhalt
WLB = White-Label-Basis
ART = Kunden-/Markenartikel
PACK = Verpackungsmaterial
SERV = Dienstleistung
Wichtig ist: Diese Klassen sagen nicht, ob ein Produkt gekauft oder verkauft werden darf. Sie sagen, was das Produkt in den Stammdaten ist.
(1) MAT: Material / Inhalt
MAT ist alles, was als Inhalt oder Material verwendet werden kann. Das können klassische Rohstoffe sein, aber auch Mischungen, Bulkware oder lose Kapseln.
Beispiele:
Whey Protein
Kurkuma Pulver
Vitamin Premix
Omega-3 Bulk Kapseln
fertige Mischung im Kanister
Kundenbeistellung als Materialbestand
Ein MAT-Produkt kann gekauft, verkauft, verarbeitet, in einer Stückliste verbraucht oder vom Kunden beigestellt werden.
Wichtig ist: Es ist noch keine finale Kunden- oder Markenartikel-Identität vorhanden.
(2) WLB: White-Label-Basis
WLB ist für White-Label-Produkte. Also verkaufsfertige Produkte, bei denen nur noch das Label bzw. die Deklaration fehlt.
Beispiele:
Omega-3 Flasche ohne Label
neutral abgefüllter Doypack ohne Logo
fertige Tropfflasche, verschlossen, aber noch nicht etikettiert
Die Linie zwischen MAT und WLB ist wichtig. Lose Omega-3 Kapseln in einer Bulkbox gehören zur Klasse "Material". Eine abgefüllte, verschlossene, neutrale Omega-3 Flasche ohne Label ist WLB.
(3) ART: Kunden-/Markenartikel
ART ist der finale Kunden- oder Markenartikel. Hier wird auch der Kunde auf dem Artikel gespeichert (Pflichtfeld).
Beispiele:
Omega-3 60 Kapseln Kunde A
Vitamin D3 K2 Drops Marke B
Kollagen 500g Marke C
(4) PACK: Verpackungsmaterial
PACK ist alles, was Verpackung ist.
Beispiele:
Flaschen
Deckel
Etiketten
Doypacks
Kartonagen
Scoops / Messlöffel
Sleeves
(5) SERV: Dienstleistung
SERV ist alles, was keine lagergeführte Ware ist.
Beispiele:
Konfektionierung
Etikettenproduktion
Laboranalyse
Lieferkosten
Direktfahrt
Gerade bei Lohnherstellern ist diese Klasse wichtig, weil häufig nicht nur Produkte, sondern auch Arbeitsschritte und Zusatzleistungen verkauft werden.
Was passiert, wenn ein Material direkt verkauft wird?
Das Produkt bleibt in der Klasse "Material".
Das ist am Anfang ungewohnt, aber wichtig. Wenn ich 1’000 kg Whey Protein einkaufe, 700 kg davon in einer Mischung verarbeite und 300 kg direkt an einen Kunden weiterverkaufe, bleibt es dasselbe Produkt.
Es wird nicht plötzlich ein Kundenartikel, nur weil ich es verkaufe.
Der Verkauf ist eine Rolle im Prozess. Die Produktklasse beschreibt aber die Identität des Produkts.
Das Gleiche gilt bei Kundenbeistellung. Wenn der Kunde mir Whey Protein sendet, ist es weiterhin MAT. Der Unterschied ist nicht die Produktklasse, sondern der Bestandseigentümer, die Charge, der Lagerort und der Prozess. Das alles sind Attribute, die in den Odoo-Standard-Lagerprozessen abgebildet werden.
Wann wird aus einem White-Label-Produkt ein Artikel?
Ein White-Label-Produkt kommt dann in die Klasse "Artikel", wenn es eine finale Kunden- oder Markenidentität bekommt.
Beispiel einer Stückliste aus diesem Fall:
WLB-00042 Omega-3 Flasche 60 Kapseln ohne Label
PACK-00020 Etikett Kunde A
Mit dieser Stückliste wird über einen Fertigungsauftrag ein neues Produkt produziert:
ART-00001 Omega-3 Flasche 60 Kapseln Kunde A

Warum ich das nicht über Odoo Produktkategorien lösen würde
Am Anfang klingt es logisch, die Produktkategorien dafür zu verwenden. Zum Beispiel:
Material
White-Label
Artikel
Verpackung
Dienstleistung
Das Problem: Produktkategorien werden in Odoo für viele Dinge verwendet. Für Auswertungen, Struktur, Lagerlogik, Kontierung, Routen, Websitefilter und interne Organisation.
Wenn ich die Nutra-Logik direkt auf die Produktkategorie lege, blockiere ich mir schnell andere sinnvolle Nutzungen der Kategorie. Zudem ist es schwierig, das EP-Food-Nutra-Modul bei bestehenden Odoo-Kunden einzuführen, die schon Produktkategorien pflegen.
Deshalb würde ich ein separates Feld verwenden: Nutra Code.
Die Produktkategorie bleibt normale Odoo-Struktur. Der Nutra Code ist die fachliche Klassifikation für den Lohnhersteller.
So würde ich es in Odoo umsetzen
Auf dem Produkt gibt es einen eigenen Tab "Nutra". Dort kommen alle Nutra-spezifischen Informationen hin.
Für den Start reichen wenige Felder:
Nutra Code: MAT, WLB, ART, PACK oder SERV
Brand Owner / Kunde: Pflichtfeld bei Artikel
Der Nutra Code hat eine eigene Sequenz. Wenn die interne Referenz leer ist, erzeugt Odoo automatisch einen Code.
Zum Beispiel:
MAT-00001
WLB-00001
ART-00001
PACK-00001
SERV-00001
Wenn bereits eine interne Referenz eingetragen ist, würde ich sie nicht automatisch überschreiben. Es gibt viele Unternehmen mit bestehenden Artikelnummern. Die dürfen nicht einfach durch ein Add-on kaputtgemacht werden.
Also:
Interne Referenz leer -> Odoo generiert aus dem Nutra Code.
Interne Referenz bereits gesetzt -> Odoo lässt sie unverändert.

Welche Regeln ich technisch erzwingen würde
Bei Stammdaten reicht “bitte sauber pflegen” erfahrungsgemäss nicht aus. Wenn die Regeln wichtig sind, müssen sie in Odoo technisch erzwungen werden, sonst finden Mitarbeiter immer einen Weg, sie zu umgehen ;-).
(1) Nutra Code ist Pflicht
Wenn die Nutra-Stammdatenlogik aktiv ist, muss jedes Produkt einen Nutra Code haben. Ohne Klassifikation entstehen sonst genau die Lücken, die man später mühsam bereinigen muss.
(2) Interne Referenz muss eindeutig sein und gehört nicht zum Lieferanten
Die interne Referenz sollte eindeutig sein, auch wenn ein Produkt archiviert wurde. Sonst importiert man irgendwann ein Produkt neu und hat dieselbe Artikelnummer doppelt im System oder überschreibt Artikelnummern manuell und bekommt so Duplikate. Deshalb habe ich an dieser Stelle einen Validation Error integriert. Damit ist die Artikelnummer immer eine eindeutige, absolute Referenz, die für Produkt-Mapping und Identifikation verwendet werden kann.
(3) Artikel brauchen einen Brand Owner
Wenn ein Produkt ein Kunden- oder Markenartikel ist, muss klar sein, zu welcher Marke oder welchem Kunden es gehört. Deshalb würde ich bei Artikeln den Brand Owner verpflichtend machen.
(4) Artikel dürfen nicht als Stücklistenkomponente verwendet werden
Das ist eine wichtige Regel. Ein ART-Produkt ist ein terminaler Artikel. Es kann produziert werden. Es kann verkauft werden. Aber es sollte nicht wieder als normale Komponente in einer anderen Stückliste verwendet werden.
Wenn ein Produkt weiterverarbeitet werden kann, ist es MAT oder WLB. Nicht ART.
Für diese Regel habe ich eine Prüfung direkt auf der Stücklistenposition hinterlegt. Sie gibt eine Warnung aus, wenn ein Artikel zu einer Stückliste hinzugefügt wird und verhindert das Abspeichern.
Was nicht in den Produktcode gehört
Eine Artikelnummer sollte idealerweise etwas über das Produkt aussagen. Aber sie sollte auch nicht zu lang sein. Je mehr Bedeutung man in eine Artikelnummer packt, desto schneller wird sie schlecht lesbar.
Folgende Dinge gehören für mich nicht in den Produktcode bzw. in die Artikelnummer:
ob ein Produkt gekauft wird
ob ein Produkt verkauft wird
ob ein Produkt produziert wird
ob ein Bestand dem Kunden gehört
welcher Lieferant den Artikel liefert
welche Charge gerade betroffen ist
Diese Informationen gibt es in Odoo bereits an besseren Stellen: Einkauf, Verkauf, Lager, Stücklisten, Routen, Lots, Eigentümer, Lieferanteninfos und Aufträgen.
Der Produktcode soll stabil bleiben.
Warum diese Basis so wichtig ist
Für Nutra-Lohnhersteller ist Produktstammdatenqualität kein Nebenthema. Es ist die Grundlage für fast alles und im Vergleich zu anderen Industrien viel komplexer.
Wenn die Produkte sauber getrennt und klassifiziert sind, werden viele spätere Dinge einfacher:
Stücklisten werden klarer.
Produktionsprozesse werden verständlicher.
White-Label-Prozesse lassen sich sauber abbilden.
Kundenartikel sind sauber einem Brand Owner zugeordnet.
Verpackungsmaterial wird nicht mit Inhaltsstoffen vermischt.
Dienstleistungen landen nicht versehentlich im Lager.
Rückverfolgbarkeit wird einfacher.
Auswertungen können einfacher gemacht werden.
Die Produktsuche und Gruppierung ist einfacher.
Übersichtliche Filteransichten können einfacher erstellt werden.
Das ist noch keine vollständige Nutra-Branchenlösung. Es ist aber der erste Baustein. Ein sehr wichtiger, denn saubere und klare Stammdaten sind die Basis für ein funktionierendes, effizientes Odoo-System.
Wenn die Produktstammdaten am Anfang falsch modelliert werden, wird jede spätere Erweiterung schwieriger oder es ist sogar ein kompletter Neustart notwendig. Das habe ich schon mehrmals gesehen und erlebt!
Wenn du Fragen zu Odoo für Nutra-Lohnhersteller hast, kontaktiere mich gerne oder schreibe einen Kommentar.
Nate
