1. The customer’s EDI
The customer’s own format and own transport: SFTP, API, push or pull. The quirks stay here, in the customer’s own profile.
Constellation Cold Logistics Denmark runs cold stores for food producers, where every carton has to be traceable. The customers’ EDI files used to be written straight into the warehouse system’s databases, customer by customer. With Lobster integration and a single canonical data model, SublimTech has rebuilt the landscape, so a new customer is now one mapping and the warehouse system can be replaced without touching the customer connections.
The solution was designed and built by Jonatan Augustsson, Head of Consultants at SublimTech, and is in operation today. Here is the full story, from where it started to what is planned next.

Source: SublimTech’s own project material on Constellation Cold Logistics Denmark. The onboarding figure is the project’s target for new customer connections, not a measured average.
Until 2025, Constellation Cold Logistics Denmark was called Agri-Norcold. The company was founded in 1964 in Hobro, Denmark, as a slaughterhouse and cold store, and grew to ten locations in Denmark with around a third of the country’s total freezer capacity. Its site in Vejen, also in Denmark, is the largest cold store in Northern Europe. In 2024 the company became part of Constellation, Europe’s third-largest cold storage operator, which has made ten acquisitions in nine countries in four years.
Its customers are food producers, from deep-frozen goods to chilled milk, and many of them supply meat. Meat is a regulated product, so tracking data for every single carton is a requirement, not a nice-to-have. That is the framework the integration has to work within: many customers, many formats, and data that must be traceable back to its source.
The starting point was a single shared SFTP file share on a local server, tied to the AS/400. All customers delivered files to the same place, and the files were fetched and written straight into the database tables, message by message. There was no shared layer and no shared structure. Each customer’s quirks lived in the code that wrote their files into the tables, and every new customer meant building the same thing all over again. Some customers were not on EDI at all.
The data model was not the only thing without documentation. The plumbing had none either.
It is like inheriting a house without plans, where half the pipes run inside the walls. Before you can lay new pipes, you have to find out where the old ones actually go.
The project could not start with a design. It had to start with questions.
Real production files from each customer were read straight into a Lobster profile. That made the structure of each message visible immediately, and the mapping could be adjusted as we went, without deploying anything to test a theory. EDI is a standard in name only. Each customer’s implementation has its own quirks, and most of them are undocumented, so the only reliable source was the data itself.
At the heart of the solution is a canonical data model, or CDM, for each message type: orders, shipping notices, receipts, adjustments and more. It is a single standardised internal format that Constellation has full control over. The model was derived from large volumes of real production data from across the customer base, analysed with the help of AI, so it holds up across customers rather than being shaped around one customer’s quirks. It sets out the minimum fields that must be present for a customer to be connected at all.
Think of it as a shared working language in diplomacy. Instead of every country needing an interpreter for every other country, each country has one interpreter: from its own language into the shared one and back. When a new country joins, you add one more interpreter. Everyone else stays as they are.
| Level | Fields |
|---|---|
| Header | Order number, customer ID, warehouse ID, order date, requested delivery date |
| Lines | Line number, item number, pallet ID, quantity, unit, lot number, best-before date |
| Cartons | Per pallet, for customers tracked at carton level: carton ID, quantity, lot number, best-before date, traceability reference |
| Metadata | Source system, model version, status, created |
Having two levels in the lines, the pallet and the cartons beneath it, means that traceability can sit at whatever level each customer is tracked at. Onboarding is this exercise, done once: mapping the customer’s fields to the model, in both directions. Everything downstream already exists.
Line 1: item number 4408, 120 cases, 3 pallets
Line 2: item number 9120, 1,800 kg, mixed pallets
The structure varies from customer to customer. Rarely one line per pallet, and each customer has its own logic.
Line 1: item number 4408, pallet PAL-04007, 36 cartons CTN-0001 to CTN-0036, each with lot number and best-before date
Line 2: item number 4408, pallet PAL-04014, 36 cartons CTN-0037 to CTN-0072
One line per pallet, and each pallet can hold many cartons that are tracked individually. Because the model is Constellation’s own, both levels are enforced in one place, centrally.
Each link in the chain is a separate Lobster profile, decoupled from the others. Outgoing messages follow the same chain in the opposite direction. A new customer is one mapping, which is then plugged into the existing process. The same flexibility applies the other way: a change of warehouse system, or an additional warehouse system arriving with an acquisition.
The customer’s own format and own transport: SFTP, API, push or pull. The quirks stay here, in the customer’s own profile.
One internal model per message type, which SublimTech and Constellation define and own themselves. Everything downstream of this point knows only this model.
The model is translated into what the warehouse system expects. If the warehouse system is replaced, only this mapping changes.
The warehouse system receives the messages in its own format. Outgoing messages follow the same chain in the opposite direction.
Logging and traceability fields are shared objects in Lobster that all profiles refer to, instead of being rebuilt in each profile. The logging captures the same details in the same columns across all flows, so support can read any flow without having to learn it first. A change to logging or traceability is one change, not twenty.
Every message in the model carries its own metadata: source system, model version, status and timestamp. If something goes wrong (bad data from a customer, a missing field, a failed delivery), it can be traced to the exact message, customer and point in the chain. Being able to prove and trace what happened to the data, and not just move it, was one of the main reasons Constellation chose Lobster as the middle layer.
Previously, onboarding a single customer meant months of back and forth, typically six to eight months. With the model in place, the target for a new connection is around two months, and the first customer is currently being connected under the new model. The plan is to connect more Danish customers first and then move on to the group’s other countries. The first warehouse is scheduled to go live on Infor WMS in November 2026, and after months of testing, both the standard processes and the exceptions around them are holding up.
Every customer is implemented differently, especially in what they can and cannot handle on the EDI side, so there are always special cases and one-off reports. As long as the logic can be explained and the warehouse system can supply raw data to Lobster, Lobster builds and delivers the report.
Stock lists as Excel spreadsheets, broken down by pallet, by item and more, using different templates as needed. The warehouse system can only send one adjustment at a time, so an adjustment across many pallets triggers 40 to 50 individual messages. Lobster collects them in a database, and a scheduled profile sends one combined report per customer and warehouse, timed to what the customer can handle.
Lobster reads electricity prices hour by hour. Based on the price, freezers can be switched on and off automatically, so operations respond to price swings in real time.
It started as one colleague’s solution: filled-in PDFs instead of hand-stamped paper certificates with a watermark. Today Lobster generates certificate data as JSON for a partner that reports digitally to the Danish Veterinary and Food Administration (Fødevarestyrelsen). Only two or three certificate types are still on paper.
Everything above is built and in operation. What follows is the direction of travel, not a delivery.
From the start, the solution was designed for several warehouses and several countries, with each customer kept separate as part of the structure, not as an add-on. Every acquisition in the group comes with its own systems and its own version of AS/400, exactly as Denmark did. The pattern established here is not a Danish solution but a reusable blueprint for the next acquisition.
Do you have a similar landscape with many customers, many formats and knowledge held by a few people? Then a shared data model is often the first step.
Book a call about your integrationsA single shared internal format per message type, for example one way of describing an order, which all customer formats are translated into and which the warehouse system’s format is translated from. It defines the minimum fields that must be present for a customer to be connected at all. The advantage is that each customer only has to be mapped once, and nothing downstream needs to know about the individual customer’s quirks. It should not be confused with Microsoft’s Common Data Model, which is something else.
Because the number of connections then grows with every combination of customer and system, and because each customer’s quirks end up in the code that writes to the warehouse system. That was exactly the situation at Constellation: every new customer meant building the same thing all over again. With the model in between, a new customer is one mapping, and changing the warehouse system does not touch the customers.
Yes. The pattern is the same whether there is a warehouse, an ERP system or a web shop at one end: customer format, shared model, system format. What is special about cold storage and food is traceability at pallet and carton level, and that is built into the model as reusable fields rather than as rules in each flow.
Nothing. The customers only talk to the canonical model, so a new warehouse system means a new mapping from the model to the new system, while all the customer connections stay untouched. An additional warehouse system, for example from an acquisition, is an addition, not a migration.
We are happy to talk you through what a canonical data model would look like in your business, and what it would mean for onboarding new partners.