1. Kundens EDI
Kundens eget format og egen transport: SFTP, API, push eller pull. Særhederne bliver her, i kundens egen profil.
Constellation Cold Logistics Denmark driver kølelagre for fødevareproducenter, hvor hver kolli skal kunne spores. Kundernes EDI-filer blev skrevet direkte ind i lagersystemets databaser, kunde for kunde. SublimTech har bygget landskabet om på Lobster med én kanonisk datamodel, så en ny kunde er én mapping, og lagersystemet kan skiftes uden at røre kundeforbindelserne.
Løsningen er designet og bygget af Jonatan Augustsson, CEO for SublimTech i Sverige, og er i drift i dag. Her er forløbet fra udgangspunkt til plan.

Kilde: SublimTechs eget projektmateriale om Constellation Cold Logistics Denmark. Onboarding-tallet er projektets mål for nye kundeforbindelser, ikke et opgjort gennemsnit.
Constellation Cold Logistics Denmark hed indtil 2025 Agri-Norcold. Virksomheden blev grundlagt i Hobro i 1964 som slagteri og kølehus og voksede til ti lokationer i Danmark med omkring en tredjedel af landets samlede frysekapacitet. Anlægget i Vejen er Nordeuropas største kølelager. I 2024 blev virksomheden en del af Constellation, Europas tredjestørste kølelageroperatør med ti opkøb på fire år i ni lande.
Kunderne er fødevareproducenter, fra dybfrost til kølet mælk, og mange af dem leverer kød. Kød er reguleret af myndighederne, så sporingsdata for hver enkelt kolli er ikke et ønske, men et krav. Det er den ramme, integrationen skal virke i: mange kunder, mange formater og data, der skal kunne følges tilbage til kilden.
Udgangspunktet var én fælles SFTP-fildeling på en lokal server, bundet til AS/400. Alle kunder afleverede filer samme sted, og filerne blev hentet og skrevet direkte ind i databasetabellerne, besked for besked. Der var intet fælles lag og ingen fælles struktur. Hver kundes særheder boede i den kode, der skrev deres filer ind i tabellerne, og en ny kunde betød, at den leg blev bygget igen. Nogle kunder var slet ikke på EDI.
Det var ikke kun datamodellen, der var udokumenteret. Rørføringen var det også.
Det svarer til at arve et hus uden tegninger, hvor halvdelen af rørene sidder inde i væggene. Før man kan lægge nye rør, må man finde ud af, hvor de gamle faktisk går.
Projektet kunne ikke starte med et design. Det måtte starte med at spørge.
Rigtige produktionsfiler fra hver kunde blev læst direkte ind i en Lobster-profil. Dermed blev beskedens struktur synlig med det samme, og mappingen kunne justeres løbende, uden at noget skulle deployes for at afprøve en teori. EDI er kun en standard af navn. Hver kundes implementering har sine egne særheder, og de fleste er udokumenterede, så den eneste pålidelige kilde var dataene selv.
Kernen i løsningen er én kanonisk datamodel, på engelsk en canonical data model eller CDM, for hver beskedtype: ordrer, forsendelsesadviser, modtagelser, reguleringer og flere. Det er ét standardiseret internt format, som Constellation selv har fuld kontrol over. Modellen blev defineret ud fra store mængder rigtige produktionsdata på tværs af kunderne, analyseret med hjælp fra AI, så den holder generelt og ikke er formet efter én kundes særheder. Den fastlægger de felter, der som minimum skal være der, for at en kunde overhovedet kan kobles på.
Tænk på det som et fælles arbejdssprog i diplomati. I stedet for at hvert land skal have en tolk til hvert andet land, har hvert land én tolk: fra eget sprog til det fælles og tilbage. Kommer der et nyt land til, kommer der én tolk til. De andre rører man ikke.
| Niveau | Felter |
|---|---|
| Hoved | Ordrenummer, kunde-id, lager-id, ordredato, ønsket leveringsdato |
| Linjer | Linjenummer, varenummer, palle-id, mængde, enhed, lotnummer, bedst før |
| Kolli | Pr. palle, når kunden er kollisporet: kolli-id, mængde, lotnummer, bedst før, sporbarhedsreference |
| Meta | Kildesystem, modelversion, status, oprettet |
To niveauer i linjerne, palle og derunder kolli, gør, at sporbarheden kan hænge på det niveau, den enkelte kunde spores på. Onboarding er denne øvelse, én gang: kundens felter til modellen, ind og ud. Alt nedstrøms findes allerede.
Linje 1: varenummer 4408, 120 kasser, 3 paller
Linje 2: varenummer 9120, 1.800 kg, blandede paller
Strukturen varierer fra kunde til kunde. Sjældent én linje pr. palle, og hver kunde har sin egen logik.
Linje 1: varenummer 4408, palle PAL-04007, 36 kolli CTN-0001 til CTN-0036, hver med lot og bedst før
Linje 2: varenummer 4408, palle PAL-04014, 36 kolli CTN-0037 til CTN-0072
Én linje pr. palle, og hver palle kan rumme mange kolli, der spores hver for sig. Fordi modellen er Constellations egen, håndhæves begge niveauer ét sted, centralt.
Hvert led i kæden er sin egen Lobster-profil, afkoblet fra de andre. Udgående beskeder følger samme kæde den modsatte vej. En ny kunde er én mapping, som derefter kobles ind i den eksisterende proces. Samme fleksibilitet gælder den anden vej: et skifte af lagersystem, eller et ekstra lagersystem, der kommer med et opkøb.
Kundens eget format og egen transport: SFTP, API, push eller pull. Særhederne bliver her, i kundens egen profil.
Én intern model pr. beskedtype, som SublimTech og Constellation selv definerer og ejer. Alt derefter kender kun denne model.
Modellen oversættes til det, lagersystemet forventer. Skiftes lagersystem, er det kun denne mapping, der ændres.
Lagersystemet modtager beskederne i sit eget format. Udgående beskeder følger samme kæde den modsatte vej.
Logning og sporbarhedsfelter er fælles objekter i Lobster, som alle profiler refererer til, i stedet for at blive bygget om i hver profil. Logningen fanger samme detaljer i samme kolonner på tværs af alle flows, så support kan læse et hvilket som helst flow uden at lære det først. En ændring i logning eller sporbarhed er én ændring, ikke tyve.
Hver besked i modellen bærer sine egne metadata: kildesystem, modelversion, status og tidsstempel. Går noget galt, dårlige data fra en kunde, et manglende felt, en fejlet levering, kan det spores til præcis hvilken besked, hvilken kunde og hvilket punkt i kæden. Muligheden for at bevise og spore, hvad der skete med data, og ikke kun flytte dem, var en af de vigtigste grunde til, at Constellation valgte Lobster som mellemlag.
Før betød en enkelt kundes onboarding måneders frem og tilbage, typisk seks til otte måneder. Med modellen på plads er målet for en ny forbindelse omkring to måneder, og den første kunde bliver koblet på efter den nye model i øjeblikket. Planen er flere danske kundeforbindelser og derefter koncernens andre lande. Det første lager går efter planen i drift på Infor WMS i november 2026, og efter måneders test holder både standardprocesserne og undtagelserne omkring dem.
Hver kunde er implementeret forskelligt, især i hvad de kan og ikke kan håndtere på EDI-siden, så der er altid særtilfælde og enkeltstående rapporter. Så længe logikken kan forklares, og lagersystemet kan levere rådata til Lobster, bygger og leverer Lobster rapporten.
Lagerlister som Excel-ark, delt op pr. palle, pr. vare og mere, på forskellige skabeloner efter behov. Lagersystemet kan kun sende én regulering ad gangen, så en regulering på tværs af mange paller udløser 40-50 enkeltbeskeder. Lobster samler dem i en database, og en tidsstyret profil sender én samlet rapport pr. kunde og lager, timet til det, kunden kan håndtere.
Lobster læser elpriserne fra nettet time for time. Ud fra prisen kan frysere slås fra og til automatisk, så driften reagerer på prisudsving i realtid.
Det begyndte som én kollegas løsning: udfyldte PDF'er i stedet for håndstemplede papircertifikater med vandmærke. I dag genererer Lobster certifikatdata som JSON til en partner, der indberetter digitalt til Fødevarestyrelsen. Kun to til tre certifikattyper er stadig på papir.
Alt ovenfor er bygget og i drift. Det følgende er retningen, ikke leverancen.
Løsningen var fra starten tænkt til flere lagre og flere lande, adskilt pr. kunde som en egenskab ved strukturen, ikke som en tilføjelse. Hvert opkøb i koncernen kommer med sine egne systemer og sin egen udgave af AS/400, præcis som Danmark gjorde. Mønstret herfra er ikke en dansk løsning, men en genbrugelig tegning til det næste opkøb.
Har I et lignende landskab med mange kunder, mange formater og viden, der sidder hos få personer? Så er en fælles datamodel ofte det første skridt.
Book en dialog om jeres integrationerÉt fælles internt format pr. beskedtype, fx én måde at beskrive en ordre på, som alle kundeformater oversættes til, og som lagersystemets format oversættes fra. Den definerer de felter, der som minimum skal være der, for at en kunde overhovedet kan kobles på. Fordelen er, at hver kunde kun skal mappes én gang, og at intet nedstrøms behøver kende den enkelte kundes særheder. På engelsk hedder det en canonical data model, forkortet CDM. Det skal ikke forveksles med Microsofts Common Data Model, som er noget andet.
Fordi antallet af forbindelser så vokser med hver kombination af kunde og system, og fordi hver kundes særheder ender i den kode, der skriver til lagersystemet. Det var præcis udgangspunktet hos Constellation: hver ny kunde betød, at den leg blev bygget igen. Med modellen imellem er en ny kunde én mapping, og et skifte af lagersystem rører ikke kunderne.
Ja. Mønstret er det samme, uanset om det er et lager, et ERP-system eller en webshop i den ene ende: kundeformat, fælles model, systemformat. Det, der er særligt for kølelagre og fødevarer, er sporbarheden på palle- og kolliniveau, og den er bygget ind i modellen som genbrugelige felter frem for som regler i hvert flow.
Ingenting. Kunderne taler kun med den kanoniske model, så et nyt lagersystem betyder en ny mapping fra modellen til det nye system, mens alle kundeforbindelser står urørte. Et ekstra lagersystem, fx fra et opkøb, er en tilføjelse, ikke en migrering.
Vi gennemgår gerne, hvordan en kanonisk datamodel ville se ud hos jer, og hvad den ville betyde for onboarding af nye partnere.