Case study

WMS integration at Constellation Cold Logistics: from database writes to a single data model

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.

  • Cold storage and food logistics
  • Lobster Data Platform and Infor WMS
  • 8 min read
Lobster Value Added Reseller, Platinum Partner
10 cold stores in Denmark
around a third of the country’s freezer capacity
1 canonical data model per message type
orders, shipping notices, receipts, adjustments
c. 2 months target for onboarding a new customer
compared with six to eight months before
1 combined report instead of 40 to 50 individual messages
for adjustments across pallets

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.

The customer

Ten cold stores and traceability that is non-negotiable

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 film illustrates the cold chain

See an end-to-end cold supply chain: meat on the conveyor belt, pallets, freezers and containers on their way out into the world. Click to play.
Before

One file share, written straight into the database

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 hidden pain

The data model was not the only thing without documentation. The plumbing had none either.

  • Every new customer connection raised the same questions: do we fetch the file, or do they deliver it? SFTP, or an API we have to pull from ourselves? And which format is actually in the file?
  • Knowledge was held by individuals, not written down. The original integrations were built by a few very experienced people, and when they move on, the reasons behind the choices go with them.
  • Old customer profiles were kept as templates, simply so the next onboarding had something to copy from.
  • The AS/400 tables that everything was written into were just as undocumented as the files coming in.

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.

How we started

Interviews first, then the real files

The project could not start with a design. It had to start with questions.

  1. Customer by customer: what data actually exists?
  2. And how does it physically move through the systems?
  3. The answers were checked against real production files, not against descriptions of them.

Discovery in Lobster rather than at the desk

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.

The canonical model

One internal model per message type

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.

What an order looks like in the model

LevelFields
HeaderOrder number, customer ID, warehouse ID, order date, requested delivery date
LinesLine number, item number, pallet ID, quantity, unit, lot number, best-before date
CartonsPer pallet, for customers tracked at carton level: carton ID, quantity, lot number, best-before date, traceability reference
MetadataSource 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.

How customers send it, and what the model requires

Typically from a customer

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.

What the model requires

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.

The architecture

Customer format, shared model, warehouse format

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.

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.

2. The canonical model

One internal model per message type, which SublimTech and Constellation define and own themselves. Everything downstream of this point knows only this model.

3. The warehouse format

The model is translated into what the warehouse system expects. If the warehouse system is replaced, only this mapping changes.

4. Infor WMS

The warehouse system receives the messages in its own format. Outgoing messages follow the same chain in the opposite direction.

Built once, used everywhere

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.

What it means

Every message can be traced, and every quirk is contained

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.

  • Customer-specific logic lives in the customer’s own profile, not scattered through the core process. One customer’s exception cannot bring down another customer’s flow, and the core stays readable.
  • A new customer is a mapping task: their format to and from the model, plus the transport. The rest of the flow already exists, with the mandatory fields defined.
  • No lock-in to one warehouse system. Today it is Infor WMS. If it is replaced, only the mapping from the model to the warehouse system changes, and an additional warehouse system from an acquisition is an addition, not a migration.

The target: onboarding in around two months

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.

Built on top

Reports, electricity prices and certificates on the same platform

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.

Reports the warehouse system cannot produce

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.

Electricity prices and freezers

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.

Certificates from paper to JSON

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.

Planned, not built

Off the local server and out as APIs

Everything above is built and in operation. What follows is the direction of travel, not a delivery.

  • Customers will be moved off the AS/400-bound file share and onto Lobster: at a minimum SFTP hosted in Lobster, and direct HTTP for those that can use an API. The point is not to abolish SFTP, since Lobster speaks almost any protocol. The point is to get off the local server.
  • The model and the reports will be exposed as external APIs with Lobster’s own OAuth2 service and access control in API Manager, so customers can fetch their own data whenever they want.
  • Onboarding via Trading Partner Manager, where partner setup, transport and access are brought together in one place, so an API-ready customer becomes a setup step rather than a development project.
  • Not every customer needs, or has the capacity for, full EDI integration. The vision is a WebEDI portal for the smaller ones, where order and stock data can be viewed in the browser without any EDI setup.

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 integrations
Questions

Frequently asked questions about the case

What is a canonical data model (CDM)?

A 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.

Why not just map each customer directly to the warehouse system?

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.

Can the same approach be used outside cold storage?

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.

What happens to the customer connections if the warehouse system is replaced?

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.

Should your integrations be built on a single model?

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.

Contact SublimTech