Compatibility and fits-with
"Passend für FS-200" in a description field answers nobody's question. The question is "does this fit my machine, the one with serial FS200-2014-0871" — and answering it needs compatibility modelled as data.
1. Decide how machines are modelled
Associations connect products to products. Reference records are shared records with their own attributes, pointed at by a reference attribute. Both work; they suit different businesses.
| Machines as products | Machines as reference records | |
|---|---|---|
| Where | PIM › Products | PIM › References |
| Compatibility expressed as | An association fits_machine from the part to the machine | A multi-value reference attribute fits_machines on the part |
| Navigable both ways | Yes, natively | Yes, by filtering products on the attribute |
| Machine can carry a parts list | Yes — quantified associations | No — needs a bridging product |
| Machine can be sold | Yes | No |
| Machine can have a price and stock | Yes | No |
| Suits | Machine builders selling machines and parts | Distributors and part makers who never sell the machine |
If you build the machines, model them as products. The parts list has to hang
off something, and hanging it off a product is what makes
quantified associations available. Set
enabled to false, or exclude the machine category from your shop channel, if
the machine itself should not be orderable.
If you make parts for other people's machines, model machines as reference records. You will have thousands of them, they carry manufacturer, series and build years, and none of them will ever be sold.
2. Create the compatibility relationship
As an association. Go to PIM › Data model › Association types and create
fits_machine: not quantified, and not two-way — you want the part page to
list machines and the machine page to list parts, but the semantics differ in
each direction and a two-way flag makes them the same relationship. Then add the
association on each part, pointing at the machine products it fits.
As a reference attribute. Create a machine reference entity with records
per machine or series (see
Reference entities), then create
a multi-value reference attribute fits_machines on your parts family
pointing at it. Set it filterable — that is what turns it into a
"choose your machine" filter in the storefront.
3. Qualify with serial ranges
A part fits an FS-200 — but only from serial FS200-2016-0001 onward, because
the dosing head changed. Without that qualifier you have made a promise you
cannot keep.
Two places the range can live, and the choice matters:
- On the BOM position, as
valid_from_serialandvalid_to_serialattributes. This is the accurate model: the parts list of a machine changes at a serial break, and the position is what changes. - On the part, as a note field. This is the cheap model. It is readable, it is not filterable, and the shop cannot use it to warn anybody.
Start with the cheap model only if you are certain you will not need to resolve serials, and know that migrating from prose to data later is a re-entry of every affected position.
Record the ranges the way your service department writes them. If they think in
build years rather than serial numbers, use valid_from_year. A field nobody
can fill correctly is worse than no field.
4. Model supersessions
Compatibility and supersession are different relationships and are constantly confused. Compatibility says this fits that machine. Supersession says this part is no longer supplied; ship that one instead.
- Create the association type
replaced_by: not quantified, not two-way. - Create
replacesas its mirror, for display on the successor's page. - On
4711-A, addreplaced_by→4711-B. On4711-B, addreplaced_by→4711-C. The chain resolves by following it to the end. - Disable the superseded parts for ordering — set
enabledto false, or use a lifecycle attribute your channel filters on. Do not delete them. They are the bridge between the customer's 2014 invoice and your current catalogue, and deleting them breaks the order history of everyone who bought one. - Where the successor is not a drop-in, record why. An attribute
supersession_notecarrying "14 mm bore instead of 12 mm; requires adapterAD-14" prevents a return.
5. Publish it in the storefront
Compatibility data only pays off when it is visible in three places:
- On the part page — the list of machines this fits, and the parts it replaces or is replaced by.
- As a filter — "choose your machine" narrowing a category to what fits. This requires the attribute to be filterable and indexed; see Facets.
- As a check at the point of adding to cart — when the buyer has a registered machine and the part does not list it, say so before the order, not after the delivery. See The customer's installed base.
What to check
- Pick five parts and five machines and verify both directions. The part lists the machine, the machine lists the part.
- No supersession loops. Follow every
replaced_bychain to its end; a chain that returns to its start will hang whatever resolves it. - No superseded part is still orderable, and no successor is disabled.
- Serial ranges do not overlap or leave gaps. Two positions valid for the same serial is an ambiguity; a serial covered by neither is a hole.
Next
- The customer's installed base — let buyers register their machines and shop from them.
- Maintain BOMs and drawings — keeping supersessions current.