Deciding your system of record
A system of record is the one system that is allowed to change a given field. Everywhere else that field is a copy. This sounds like a technical detail and is in fact the single decision that determines whether your integrations are boring or permanently on fire.
The symptom
You will recognise this before you recognise the cause. Somebody in the product
team writes a proper description for article 4711-A: 600 words, application
notes, the comparison that helps a buyer choose. Two days later it is back to
FITTING 3/4 V4A 10BAR, the 40-character line the ERP uses on an invoice.
Nobody deleted it. The nightly ERP feed overwrote it, because the feed carries a
description column and the import was configured to write every column it
finds. The product team writes it again. It disappears again. After the third
time they stop, and the catalog quietly reverts to what the ERP thinks a
description is.
The same fight happens over units of measure, over tax classes, over customer addresses. In every case the cause is identical: two systems believe they own the same field, and the last writer wins.
The rule
For every field, exactly one system may write it. Everything else reads it.
Two consequences follow, and both are uncomfortable in practice:
- A read-only copy must be visibly read-only. If a field is owned by the ERP, people must not be able to edit it in the Cockpit. Otherwise they will, their work will vanish overnight, and they will lose trust in the platform rather than in the process.
- Ownership is per field, not per entity. "The ERP owns products" is too coarse and is where most projects go wrong. The ERP owns the SKU, the weight, the tax class and the purchase price of a product. It does not own the marketing description, the accessory relationships or the images.
The field-ownership table
This is the artefact worth producing. Do it on one page, with names on it, before you build anything. A realistic starting point for a B2B wholesaler running an ERP, with the Revenue Cloud as shop and PIM:
| Field | Owner | Flows | Why |
|---|---|---|---|
| SKU / article number | ERP | ERP → Cloud | It is the key everything else joins on. One issuer, always |
| EAN / GTIN | ERP | ERP → Cloud | Master data, and it appears on invoices |
| Manufacturer part number | ERP or supplier feed | → Cloud | Needed by procurement systems; must match the source |
| Base unit of measure | ERP | ERP → Cloud | The unit orders are placed in. A second opinion here causes wrong quantities |
| Packaging unit / order quantity step | ERP | ERP → Cloud | Drives what can actually be shipped |
| Weight, dimensions | ERP | ERP → Cloud | Shipping and customs need the same number the ERP uses |
| Tax class | ERP | ERP → Cloud | Tax is an accounting fact, not a commerce decision |
| Purchase price, cost | ERP | Stays in the ERP | Never publish it. It has no business in the shop at all |
| List price | ERP | ERP → Cloud | Usually. If the ERP does not carry a sales list price, the Cloud can own it; decide once |
| Customer-specific and contract price | ERP | Read live | Negotiated conditions live where the Vertrieb maintains them |
| Scale prices | ERP | ERP → Cloud | Same source as the contract price, or they will disagree |
| Stock and availability | Warehouse / ERP | Read live | Never write stock in the shop |
| Product name (customer-facing) | Cloud (PIM) | Cloud → out | The ERP name is written for an invoice line rather than for a buyer |
| Description, long text | Cloud (PIM) | Cloud → out | The field the ERP overwrites most often. Fence it |
| Technical attributes | Cloud (PIM) or supplier feed | → Cloud | Structured attributes are how buyers filter. The ERP has no place to hold them |
| Images, datasheets, drawings | Cloud (PIM) | Cloud → out | The shared drive is not a system of record |
| Categories, catalog structure | Cloud (PIM) | Cloud → out | Shop navigation is a merchandising decision rather than an accounting one |
| Accessories, alternatives, cross-sells | Cloud (PIM) | Cloud → out | Selling logic, owned by the people who sell |
| Channel assignment, assortments | Cloud | Cloud → out | Which customer sees what is a contract decision, maintained here |
| SEO fields, landing pages | Cloud | Cloud → out | Only exists in the shop world |
| Customer number | ERP | ERP → Cloud | The key that ties an order to a debtor |
| Customer master: name, addresses, payment terms | ERP | ERP → Cloud | Accounting and dunning depend on it |
| Credit limit, blocked status | ERP | Read live | Must be current at checkout rather than from last night |
| Shop logins, roles, approval rules | Cloud | Cloud only | The ERP has no concept of a shop login |
| Order | Cloud, then ERP | Cloud → ERP, status back | Ownership transfers at transmission. See below |
Copy this into your own project and change it. The value lies in the argument your ERP team and your product team have while filling it in, which is much cheaper now than after go-live.
Handover: the order case
Orders are the one entity where ownership deliberately moves.
While a buyer is filling a cart and before transmission, the Revenue Cloud owns the order. Nothing in the ERP knows about it yet. At transmission, ownership passes: from that moment the ERP owns the order (its status, its deliveries, its invoices) and the Cloud shows a copy.
Get this wrong in either direction and it hurts. If both sides keep editing, you get a shop order that says "shipped" and an ERP order that says "in clarification". If neither side owns the post-transmission status, buyers phone to ask where their delivery is, which was one of the things the shop was supposed to stop. See The order lifecycle.
When the ERP is not actually the answer
"The ERP is führend" is the reflex in the German Mittelstand, and for transactional data it is right. But it is worth checking two cases:
You already run a PIM. Akeneo, Contentserv, inRiver. Then the PIM owns product information, the ERP owns commercial fields, and the Revenue Cloud is a consumer of both. The mistake here is enriching in two places; see How product information management works.
The ERP field exists but is not maintained. Plenty of ERPs have a
Langtext field that is empty on 80% of articles, or a Warengruppe that was
last thought about in 2009. A field that formally exists but is not maintained is
not a system of record. Somebody has to be responsible for keeping it current,
or ownership belongs elsewhere.
Making the decision stick
A table on a wiki page does not stop a nightly job from writing a column. Make it real:
- Map only the fields the source owns. The strongest enforcement is
mechanical: if
descriptionis not in the mapping, no import can overwrite it. See Field mapping. - Prefer "create only" over "always update" for fields you are unsure about. Let the ERP seed a name on a new article, and never touch it again.
- Write the owner into the attribute description. The person editing needs to see "maintained in the ERP; changes here are overwritten" at the moment they are about to type.
- Review after the first month. The fields people keep re-editing are the fields you assigned to the wrong owner.
Next
- Field mapping: where the decision becomes configuration.
- Data quality in practice: catching wrong values as well as missing ones.
Integration patterns
Batch, real-time and hybrid: what each one costs, when each one is right, and why 'real-time everything' is the wrong default.
Punchout explained
OCI, cXML and openTRANS: how your catalog gets rendered inside your customer's procurement system, and why these projects fail on data rather than on protocol.