A distributor of workshop supplies carries a broad catalogue, and part of it is dangerous goods: brake cleaner in an aerosol can, solvent-based paint, batteries, adhesives, disinfectants. In the ERP the data is complete, because that is where the delivery note and the transport document draw from. In the shop none of it exists. The cart calculates shipping as if the order contained screws, the checkout offers air freight, and the shipment is stopped at the loading gate. This article describes which fields from the safety data sheet and the dangerous goods master record belong in the shop, how the cart adds quantities across line items, and where the responsibility of the interface ends. Anyone connecting ERP and shop in industrial companies decides at this point whether the online channel produces shippable orders or clarification cases.
Key takeaways
- The safety data sheet is the data source, not a gut feeling: it comprises 16 sections, and section 14 carries the transport information (EUR-Lex).
- Section 14 already is a finished field list. Subsections 14.1 to 14.7 map one to one onto item fields in the shop (EUR-Lex).
- The UN number is a four-digit identification number with a leading prefix, which makes it usable as a technical key in the item master (EUR-Lex).
- The shop does not decide per line item but on the total: net quantities and gross masses are added per shipment before shipping method and surcharge are settled.
- From 1 July 2026 onwards, distance offers have to state the label elements referred to in Article 17 of the CLP Regulation clearly and visibly in the offer (EUR-Lex).
- The interface supplies data and applies rules; the assessment under dangerous goods law stays with the company that ships.
Two bodies of law, one item master
Everyday language blurs two things that are regulated separately. Chemicals law describes the product: classification, labelling, packaging and the safety data sheet. Dangerous goods law describes the state during carriage: UN number, proper shipping name, class, packing group. An item can be classified as a hazardous substance and still not constitute dangerous goods, and there are goods that are tightly regulated in transport without standing out as hazardous substances in the plant. For the interface this means two field groups with different sources, different maintenance cycles and different recipients in the shop. Pressing both into a single flag loses exactly the information the shipping department needs later.
The practical entry point is the safety data sheet, because it carries both worlds in one document and because its form is prescribed. Annex II of the REACH Regulation as amended by Regulation (EU) 2020/878 requires the safety data sheet to contain 16 sections (EUR-Lex). This structure is the reason hazard data can be transferred by machine at all: section 2 carries the labelling, section 9 the physical properties, section 14 the transport information. If you connect an ERP or inventory system to the shop, the section number is the most stable anchor for the mapping this subject area has to offer.
Master data from the data sheet
UN number, proper shipping name, class, packing group and environmental hazards come from section 14. They change rarely, but they do change: with every new version of the data sheet. Version number and revision date therefore belong in the product data pipeline from the PIM.
Labelling under CLP
Signal word, pictograms, hazard statements and precautionary statements belong to the product and therefore on the product page. They come from section 2 of the data sheet and are the visible side of the classification for the customer, while the transport fields work in the background.
Quantities per sales unit
Net quantity and gross mass per sales unit are the basis of every quantity threshold. Without them the cart cannot add up, and without a total no shipping method can be determined. These fields sit in the ERP, not in the data sheet.
Section 14 is the finished field list
Anyone looking for a field list for the item master does not have to invent one. Annex II divides section 14 into subsections 14.1 to 14.7 and names them individually: UN number or ID number, proper shipping name, transport hazard classes, packing group, environmental hazards, special precautions for the user, and transport in bulk according to IMO instruments (EUR-Lex). These seven points are the target columns. Everything else is derivation. The exercise is therefore the same as in any other field mapping between ERP and shop: name the source field, name the target field, define the value range, define the behaviour when the value is empty.
- 14.1 UN number – the four-digit identification number of the substance, mixture or article with a leading prefix (EUR-Lex). In the shop a text field of fixed length, not a numeric field: the leading zero in UN 0333 does not survive a numeric column.
- 14.2 Proper shipping name – the official designation from the dangerous goods list, not the marketing name of the item. It appears later in the transport document and therefore has to be transferred unchanged.
- 14.3 Transport hazard classes – what has to be given are the classes and the subsidiary risks assigned to the substance on the basis of the predominant hazard it presents (EUR-Lex). In the data model that means two fields, not one.
- 14.4 Packing group – the number is assigned to certain substances in accordance with their degree of danger (EUR-Lex). It is optional, because it is not assigned for every class; an empty field is a valid value here and not a maintenance error.
- 14.5 Environmental hazards – a flag that co-determines the marine pollutant designation in sea transport and thus the permissible shipping method.
- 14.6 Special precautions – free text from the data sheet. It belongs in picking and on the delivery note, not on the product page.
- 14.7 Transport in bulk by sea – as a rule irrelevant for parcel goods in online retail, but worth providing for in the data model so that the transfer of the data sheet stays complete.
What is missing from this list is striking: the quantity. Section 14 describes the property of the substance, not the size of the shipment. The net quantity per sales unit, the gross mass per package and the number of packages sit in the item master of the ERP, and without these three values any hazard logic in the shop remains a display without a calculation. It pays to keep them in the same field block as the transport data so that the interface hands them over in one go.
Settle the field names once and keep them
hazard.un_number, hazard.transport_class, hazard.packing_group, hazard.net_quantity_per_unit. What matters is less the spelling than the agreement that every field has exactly one origin. If the shop keeps its own dangerous goods yes/no flag next to the transferred fields, two truths arise and drift apart. The flag may be derived, but it may not be maintained. In the middleware that is a rule of three lines; in the shop backend it is a permanent source of error.What the shop builds from the fields
The fields are not an end in themselves. They drive four decisions the shop has to make before an order is created: which shipping methods are offered, which surcharge applies, which countries are served, and whether a line item may travel in the same box as another. Each of these decisions has a failure pattern when the underlying field is empty, and each of those patterns typically shows up only in shipping, that is, late. The connection to the shipping and logistics interfaces then takes the values over unchanged, which is why a maintenance error in the item master reaches as far as the transport document.
| Field | Effect in the shop | Failure pattern when it is missing |
|---|---|---|
| UN number and class | Filters the shipping methods on offer and marks the line item in the cart | The customer picks a shipping method that is not an option for this shipment |
| Packing group | Influences packaging requirements and mixed packing restrictions | Two line items end up in the same box that belong apart |
| Net quantity per unit | Basis for building totals across the cart | The limited quantity exemption is estimated instead of calculated |
| Gross mass per package | Determines surcharge and threshold check per shipment | The surcharge is missing from the calculation and is invoiced afterwards |
| Environmental hazards | Blocks or allows sea routes and island destinations | A shipment does not reach its destination area and comes back |
| Version of the data sheet | Controls which document the customer downloads | The customer receives a superseded version and calls sales |
The last row is easily overlooked. The safety data sheet is a versioned document, and the version belongs to the item, not in a folder. In the shop that means a document field with identifier, version and revision date, filled from the ERP, plus a reference to the file. That keeps it traceable which version a customer received at which point in time, without anyone having to compare file names.
Add quantities instead of counting line items
The actual arithmetic sits in the cart, not in the item. Whether a shipment can go out as a limited quantity depends on the total across all affected line items, not on the single can. Three cans of paint at 750 millilitres, two bottles of cleaner at one litre and one aerosol can produce a net quantity the shop has to know before it offers a shipping method. The same conversion that is needed for units of measure and pack sizes here becomes the precondition for a shipping decision: sales unit times factor gives the net quantity, net quantity plus packaging gives the gross mass.
German dangerous goods law shows that this total is not only needed internally. Before carriage, the consignor has to inform the carrier in a verifiable form about the gross mass of the dangerous goods to be dispatched in limited quantities (Federal Ministry of Justice). The number the cart needs for the shipping method is therefore the same number that appears later in the communication with the carrier. Calculating it in the shop means having it available in shipping.
{
"sku": "LAC-2001-750",
"name": "Synthetic resin paint, satin, 750 ml",
"hazard": {
"is_dangerous_goods": true,
"un_number": "UN1263",
"proper_shipping_name": "PAINT",
"transport_class": "3",
"subsidiary_risk": null,
"packing_group": "III",
"environmental_hazard": false,
"limited_quantity": true,
"net_quantity_per_unit": 0.75,
"net_quantity_uom": "L",
"gross_weight_per_unit": 0.94,
"sds_document_id": "SDS-LAC-2001",
"sds_version": "4.2",
"sds_revision_date": "2026-03-11"
},
"clp": {
"signal_word": "Warning",
"pictograms": ["GHS02", "GHS07"],
"h_statements": ["H226", "H336"],
"p_statements": ["P210", "P261", "P280"],
"euh_statements": ["EUH066"]
}
}The record shows the separation this is about: hazard describes the transport state, clp the labelling of the product. Both blocks come from the same source but travel to different places in the shop. The fields net_quantity_per_unit and gross_weight_per_unit are the only ones the cart multiplies; everything else is compared or displayed. That is precisely why they should carry a fixed unit and not be kept as free text.
One shipment, two totals
Labelling belongs in the offer
The transport fields work in the background; labelling under the CLP Regulation works on the product page. Article 17(1) lists the elements a label bears: name, address and telephone number of the supplier, nominal quantity, product identifiers, hazard pictograms, signal words, hazard statements, precautionary statements and a section for supplemental information, that is eight items from point (a) to point (h) (EUR-Lex). This information sits in the ERP as codes: H and P statements as short codes, pictograms as GHS numbers. The shop turns them into image and text.
For distance sales an explicit requirement is added. Under Article 48a of the CLP Regulation, where substances or mixtures are placed on the market by means of distance sales, the label elements referred to in Article 17 have to be stated clearly and visibly in the offer (EUR-Lex). The provision was inserted by Regulation (EU) 2024/2865 and applies from 1 July 2026 (EUR-Lex). In practice this means the label elements belong in the product data and are filled from the ERP, not pasted into a description as an image file. The effort resembles the one caused by packaging data under the PPWR: not difficult, but spread across the whole catalogue.
- Transfer signal word, pictograms, H statements and P statements as separate fields instead of running text in the description.
- Store pictograms as codes and map them onto stored graphics in the shop, so that a change of presentation does not trigger a data run.
- Carry supplemental EUH statements along, because they are part of the label elements and should be visible in the offer.
- Link the safety data sheet as a document with version and revision date and keep it reachable without a login.
- Show nominal quantity and sales unit on the product page so that offer and label state the same size.
Restricted substances and delivery countries
Besides dangerous goods and chemicals law, a third layer reaches into selling as soon as certain chemicals are in the range. Restricted explosives precursors shall not be made available to, or introduced, possessed or used by, members of the general public (EUR-Lex). The decisive factor is the concentration: for hydrogen peroxide, Annex I of Regulation (EU) 2019/1148 names a limit value of 12 % w/w (EUR-Lex). For the shop this is not a legal nicety but a field question. Without a concentration figure on the item, assortment control cannot separate these cases from goods anyone may buy.
Technically the solution is the same as for customer-specific assortments: a flag on the item meets a property of the account, and visibility follows from both. The item carries substance, concentration and a flag for restricted sale; the account carries the customer type and the delivery country. The shop hides the line item or refuses the order, and the middleware logs the decision. That keeps it traceable why an item could not be ordered by a particular account.
Handover to the shipping interface
At the end of the chain stands the handover to shipping. This is where it shows whether the fields were separated cleanly: the shipping interface expects a UN number, a class, where applicable the packing group and the net quantity per line item, plus the totals and the chosen shipping method per shipment. Timestamps play a larger role here than it first appears, because collection times and deadlines hang on local times; the pitfalls are described in the article on timestamps in ERP interfaces.
# Mapping of the hazard fields onto the shipping interface
shipment:
method: ${rule.shipping_method} # road | sea | pickup
dangerous_goods: ${line.hazard.is_dangerous_goods}
lines:
- un_number: ${line.hazard.un_number}
class: ${line.hazard.transport_class}
packing_group: ${line.hazard.packing_group}
limited_quantity: ${line.hazard.limited_quantity}
net_quantity: ${line.quantity * line.hazard.net_quantity_per_unit}
net_uom: ${line.hazard.net_quantity_uom}
totals:
net_total_l: ${total.net_litres}
gross_total_kg: ${total.gross_kilograms}
rules:
- if: total.gross_kilograms > threshold.lq_gross
then: shipping_method = freight_forwarder, surcharge = dangerous_goods_ltl
- if: delivery_country not in allowed.countries
then: block_line = trueTwo things matter in this mapping. First, the rule works on totals and not on line items, because the thresholds attach to the shipment. Second, the decision stands there as a rule and not as program code in the shop theme, so that it can be changed without touching the interface. Where such a rule layer is built from scratch, API development is the right place for it: an interface that returns totals and decision is equally usable in the shop, in the customer account and in the back office.
Where the interface stops
Maintenance, versions and responsibility
Hazard data ages differently from prices. It changes rarely, but when it changes the change carries weight: a new classification, a new data sheet, a different supplier for the same precursor. The data flow therefore needs two properties. It has to carry the version along so that it stays visible which state sits in the shop, and it has to treat changes as an event rather than a silent overwrite. The same way of thinking supports the handling of batches and serial numbers, where the current value alone is likewise not what counts, but its origin.
Responsibilities belong in writing, and per field. The transport data is as a rule maintained by the department that also administers the data sheet. The quantities per sales unit are maintained by master data management in the ERP. The presentation in the shop is owned by the online channel, without changing the values. This split sounds obvious, but it is frequently written down only after the first clarification case. A short field catalogue with source, responsible unit and validation rule is, in our experience, the most effective part of the project.
The packing group number is assigned to certain substances in accordance with their degree of danger.
Failure patterns that repeat
The following points recur in projects regardless of the industry. What they have in common is that they are inconspicuous in the shop and become visible only in shipping or in a complaint. Clearing them beforehand saves the detour through clarification. In ranges with many suppliers, as they are common in ERP integration for wholesale, a completeness check across the whole catalogue is worth adding before the channel opens.
- One flag instead of a field group.
Dangerous goods yes/noanswers none of the four decisions in the checkout. The flag may be derived; it may not be the data source. - The UN number as a number. Leading zeros disappear in numeric columns, and UN 0333 becomes 333. Use a text field of fixed length with a validation rule.
- Quantities without a unit. A field
quantity: 0.75without a unit is unusable, and in the unfavourable case it becomes the basis of a wrong total. - Data sheet without a version. A PDF in the media folder without a version number cannot be checked against the ERP state. The version belongs on the item as a field.
- Country logic only in the checkout. If the block applies only in the last step, the customer has already filled the cart. The restriction belongs visibly on the product page.
- Import without a completeness check. A run that silently accepts empty hazard fields turns a maintenance error into a shipping problem. Missing mandatory fields had better block the line item than let it through.
The effort for a clean dangerous goods route rarely lies in the technology. It lies in the decision which fields are binding, who maintains them and what should happen when one of them is empty. Once those three questions are answered, the interface is built in a manageable amount of time, and the shop sells dangerous goods as matter-of-factly as the rest of the range.
Sources and regulations
Related Articles
Food Labelling Data from the ERP in Your Storefront
Ingredients, allergens and nutrition come from the item master, shelf life and lot number from the batch: how both mandatory data sets reach the shop.
Daylight Saving Time: Timestamps in ERP Interfaces
On changeover night one hour occurs twice. How timestamps, delta queries and job schedules between shop and ERP stay unambiguous, plus a test plan for October.
Blanket Orders and Call-Offs in the B2B Shop
Blanket orders and call-offs between shop, middleware and ERP: data model, remaining quantity, contract price, contract term and the way into the document.