Kundcase

WMS-integration hos Constellation Cold Logistics: från databasskrivningar till en datamodell

Constellation Cold Logistics Denmark driver kyllager i Danmark för livsmedelsproducenter, där varje kolli ska kunna spåras. Kundernas EDI-filer skrevs direkt in i lagersystemets databaser, kund för kund. Med Lobster-integration och en kanonisk datamodell har SublimTech byggt om integrationslandskapet, så att en ny kund är en mappning och lagersystemet kan bytas utan att kundkopplingarna påverkas.

Lösningen är designad och byggd av Jonatan Augustsson, Head of Consultants på SublimTech, och är i drift i dag. Här beskriver vi hela förloppet, från utgångsläge till plan.

  • Kyllager och livsmedelslogistik
  • Lobster Data Platform och Infor WMS
  • Cirka 8 minuters läsning
Lobster Value Added Reseller, Platinum Partner
10 kyllager i Danmark
omkring en tredjedel av Danmarks fryskapacitet
1 kanonisk datamodell per meddelandetyp
ordrar, leveransaviseringar, inleveranser, justeringar
ca 2 mån. mål för onboarding av en ny kund
mot sex till åtta månader tidigare
1 samlad rapport i stället för 40-50 enskilda meddelanden
vid justeringar som gäller många pallar

Källa: SublimTechs eget projektmaterial om Constellation Cold Logistics Denmark. Onboardingsiffran är projektets mål för nya kundkopplingar, inte ett uppmätt genomsnitt.

Kunden

Tio kyllager och en spårbarhet som inte är förhandlingsbar

Constellation Cold Logistics Denmark hette fram till 2025 Agri-Norcold. Företaget grundades 1964 i danska Hobro som slakteri och kylhus och växte till tio anläggningar i Danmark med omkring en tredjedel av landets samlade fryskapacitet. Anläggningen i Vejen är Nordeuropas största kyllager. År 2024 blev företaget en del av Constellation, Europas tredje största kyllageroperatör, med tio förvärv på fyra år i nio länder.

Kunderna är livsmedelsproducenter med allt från djupfryst till kyld mjölk, och många av dem levererar kött. Kött är myndighetsreglerat, så spårningsdata för varje enskilt kolli är inte ett önskemål utan ett krav. Det är den ramen som integrationen ska fungera inom: många kunder, många format och data som ska kunna följas tillbaka till källan.

Filmen illustrerar kylkedjan

Se en kylkedja från början till slut: kött på bandet, pallar, frysar och containrar på väg ut i världen. Klicka för att spela upp.
Före

En delad mapp och filer som skrevs rakt in i databasen

Utgångsläget var en gemensam SFTP-mapp på en lokal server, kopplad till AS/400. Alla kunder lämnade filer på samma ställe, och filerna hämtades och skrevs direkt in i databastabellerna, meddelande för meddelande. Det fanns inget gemensamt lager och ingen gemensam struktur. Varje kunds särdrag satt i den kod som skrev in deras filer i tabellerna, och en ny kund innebar att samma sak byggdes en gång till. En del kunder använde inte EDI alls.

Det dolda problemet

Det var inte bara datamodellen som var odokumenterad. Det var rördragningen också.

  • Varje ny kundkoppling väckte samma frågor: hämtar vi filen, eller levererar de den? SFTP eller ett API som vi själva ska hämta från? Och vilket format finns egentligen i filen?
  • Kunskapen satt hos enskilda personer, inte i dokumentation. De ursprungliga integrationerna var byggda av ett fåtal mycket erfarna personer, och när de går vidare försvinner skälen bakom besluten med dem.
  • Gamla kundprofiler sparades som mallar, enbart för att nästa onboarding skulle ha något att kopiera från.
  • AS/400-tabellerna som allt skrevs in i var lika odokumenterade som filerna som kom in.

Det är som att ärva ett hus utan ritningar, där hälften av rören sitter inne i väggarna. Innan man kan dra nya rör måste man ta reda på var de gamla faktiskt går.

Så började vi

Intervjuer först, sedan de riktiga filerna

Projektet kunde inte börja med en design. Det fick börja med frågor.

  1. Kund för kund: vilka data finns det egentligen?
  2. Och hur rör de sig fysiskt genom systemen?
  3. Svaren stämdes av mot riktiga produktionsfiler, inte mot beskrivningen av dem.

Discovery i Lobster i stället för vid skrivbordet

Riktiga produktionsfiler från varje kund lästes direkt in i en Lobster-profil. Därmed blev meddelandets struktur synlig med en gång, och mappningen kunde justeras löpande utan att något behövde driftsättas för att pröva en teori. EDI är bara en standard till namnet. Varje kunds implementering har sina egna särdrag, och de flesta är odokumenterade, så den enda pålitliga källan var datan själv.

Den kanoniska modellen

En intern modell per meddelandetyp

Kärnan i lösningen är en kanonisk datamodell, på engelska en canonical data model eller CDM, för varje meddelandetyp: ordrar, leveransaviseringar, inleveranser, justeringar med flera. Det är ett standardiserat internt format som Constellation själva har full kontroll över. Modellen definierades utifrån stora mängder riktiga produktionsdata från de olika kunderna, analyserade med hjälp av AI, så att den håller generellt och inte är formad efter en enskild kunds särdrag. Den fastställer de fält som minst måste finnas för att en kund över huvud taget ska kunna kopplas på.

Se det som ett gemensamt arbetsspråk inom diplomatin. I stället för att varje land ska ha en tolk till varje annat land har varje land en tolk: från det egna språket till det gemensamma och tillbaka. Tillkommer ett nytt land tillkommer en tolk. De andra rör man inte.

Så ser en order ut i modellen

NivåFält
HuvudOrdernummer, kund-id, lager-id, orderdatum, önskat leveransdatum
RaderRadnummer, artikelnummer, pall-id, kvantitet, enhet, lotnummer, bäst före
KolliPer pall, när kunden är kollispårad: kolli-id, kvantitet, lotnummer, bäst före, spårbarhetsreferens
MetaKällsystem, modellversion, status, skapad

Två nivåer i raderna, pall och under den kolli, gör att spårbarheten kan ligga på den nivå som den enskilda kunden spåras på. Onboarding är just den här övningen, en enda gång: kundens fält till modellen, in och ut. Allt längre fram i kedjan finns redan.

Så skickar kunderna det, och så kräver modellen det

Typiskt från en kund

Rad 1: artikelnummer 4408, 120 kartonger, 3 pallar

Rad 2: artikelnummer 9120, 1 800 kg, blandade pallar

Strukturen varierar från kund till kund. Sällan en rad per pall, och varje kund har sin egen logik.

Så kräver modellen det

Rad 1: artikelnummer 4408, pall PAL-04007, 36 kolli CTN-0001 till CTN-0036, vart och ett med lot och bäst före

Rad 2: artikelnummer 4408, pall PAL-04014, 36 kolli CTN-0037 till CTN-0072

En rad per pall, och varje pall kan rymma många kolli som spåras var för sig. Eftersom modellen är Constellations egen upprätthålls båda nivåerna på ett ställe, centralt.

Arkitekturen

Kundformat, gemensam modell, lagerformat

Varje led i kedjan är en egen Lobster-profil, frikopplad från de andra. Utgående meddelanden följer samma kedja åt motsatt håll. En ny kund är en mappning som sedan kopplas in i den befintliga processen. Samma flexibilitet gäller åt andra hållet: ett byte av lagersystem, eller ett extra lagersystem som följer med ett förvärv.

1. Kundens EDI

Kundens eget format och egen transport: SFTP, API, push eller pull. Särdragen stannar här, i kundens egen profil.

2. Den kanoniska modellen

En intern modell per meddelandetyp, som SublimTech och Constellation själva definierar och äger. Allt längre fram i kedjan känner bara till den här modellen.

3. Lagerformatet

Modellen översätts till det som lagersystemet förväntar sig. Byts lagersystemet är det bara den här mappningen som ändras.

4. Infor WMS

Lagersystemet tar emot meddelandena i sitt eget format. Utgående meddelanden följer samma kedja åt motsatt håll.

Byggt en gång, använt överallt

Loggning och spårbarhetsfält är gemensamma objekt i Lobster som alla profiler refererar till, i stället för att byggas om i varje profil. Loggningen fångar samma detaljer i samma kolumner i alla flöden, så att supporten kan läsa vilket flöde som helst utan att lära sig det först. En ändring i loggningen eller spårbarheten görs på ett ställe, inte på tjugo.

Vad det betyder

Varje meddelande kan spåras, och varje särdrag är inkapslat

Varje meddelande i modellen bär sina egna metadata: källsystem, modellversion, status och tidsstämpel. Går något fel (felaktiga data från en kund, ett fält som saknas, en leverans som misslyckas) kan det spåras till exakt vilket meddelande, vilken kund och vilken punkt i kedjan. Möjligheten att bevisa och spåra vad som hände med data, och inte bara flytta dem, var ett av de viktigaste skälen till att Constellation valde Lobster som mellanled.

  • Kundspecifik logik finns i kundens egen profil, inte utspridd i kärnprocessen. En kunds undantag kan inte slå ut en annan kunds flöde, och kärnan förblir läsbar.
  • En ny kund är en mappningsuppgift: kundens format till och från modellen, plus transporten. Resten av flödet finns redan, med de obligatoriska fälten definierade.
  • Ingen inlåsning till ett visst lagersystem. I dag är det Infor WMS. Byts det ändras bara mappningen från modellen till lagersystemet, och ett extra lagersystem från ett förvärv är ett tillägg, inte en migrering.

Målet: onboarding på ungefär två månader

Tidigare innebar en enskild kunds onboarding månader av fram och tillbaka, oftast sex till åtta månader. Med modellen på plats är målet för en ny koppling omkring två månader, och den första kunden kopplas just nu på enligt den nya modellen. Planen är fler danska kundkopplingar och därefter koncernens andra länder. Det första lagret går enligt planen i drift på Infor WMS i november 2026, och efter månader av tester håller både standardprocesserna och undantagen runt dem.

Byggt ovanpå

Rapporter, elpriser och intyg på samma plattform

Varje kund är implementerad på sitt eget sätt, särskilt i fråga om vad de klarar och inte klarar på EDI-sidan, så det finns alltid specialfall och rapporter som bara enstaka kunder behöver. Så länge logiken kan förklaras och lagersystemet kan leverera rådata till Lobster bygger och levererar Lobster rapporten.

Rapporter som lagersystemet inte kan ta fram

Lagerlistor i Excel, uppdelade per pall, per artikel med mera, i olika mallar efter behov. Lagersystemet kan bara skicka en justering i taget, så en justering som gäller många pallar utlöser 40-50 enskilda meddelanden. Lobster samlar dem i en databas, och en tidsstyrd profil skickar en samlad rapport per kund och lager, schemalagd efter vad kunden kan hantera.

Elpriser och frysar

Lobster läser elpriserna från nätet timme för timme. Utifrån priset kan frysar slås av och på automatiskt, så att driften reagerar på prissvängningar i realtid.

Intyg från papper till JSON

Det började som en kollegas lösning: ifyllda PDF:er i stället för handstämplade pappersintyg med vattenmärke. I dag genererar Lobster intygsdata som JSON till en partner som rapporterar digitalt till Fødevarestyrelsen, den danska livsmedelsmyndigheten. Bara två till tre typer av intyg finns fortfarande på papper.

Planerat, inte byggt

Bort från den lokala servern och ut som API:er

Allt ovan är byggt och i drift. Det som följer är riktningen, inte leveransen.

  • Kunderna flyttas bort från den AS/400-kopplade SFTP-mappen och över till Lobster: minst SFTP som hostas i Lobster, HTTP direkt för dem som klarar API. Poängen är inte att avskaffa SFTP, för Lobster talar nästan vilket protokoll som helst. Poängen är att lämna den lokala servern.
  • Modellen och rapporterna exponeras som externa API:er med Lobsters egen OAuth2-tjänst och behörighetsstyrning i API Manager, så att kunderna själva kan hämta sina data när de vill.
  • Onboarding via Trading Partner Manager, där partneruppsättning, transport och behörigheter samlas på ett ställe, så att en API-redo kund blir ett konfigurationssteg i stället för ett utvecklingsprojekt.
  • Inte alla kunder behöver, eller har kapacitet för, en fullständig EDI-integration. Visionen är en WebEDI-portal för de mindre, där order- och lagerdata visas i webbläsaren utan att någon EDI behöver sättas upp.

Lösningen var från början tänkt för flera lager och flera länder, uppdelad per kund som en egenskap i strukturen, inte som ett tillägg. Varje förvärv i koncernen kommer med sina egna system och sin egen version av AS/400, precis som Danmark gjorde. Mönstret som har tagits fram här är alltså inte en dansk lösning, utan en återanvändbar ritning för nästa förvärv.

Har ni ett liknande landskap med många kunder, många format och kunskap som sitter hos ett fåtal personer? Då är en gemensam datamodell ofta det första steget.

Boka ett samtal om era integrationer
Frågor

Vanliga frågor om caset

Vad är en kanonisk datamodell (CDM)?

Ett gemensamt internt format per meddelandetyp, till exempel ett sätt att beskriva en order, som alla kundformat översätts till och som lagersystemets format översätts från. Den definierar de fält som minst måste finnas för att en kund över huvud taget ska kunna kopplas på. Fördelen är att varje kund bara behöver mappas en gång och att ingenting längre fram i kedjan behöver känna till den enskilda kundens särdrag. På engelska heter det canonical data model, förkortat CDM. Det ska inte förväxlas med Microsofts Common Data Model, som är något annat.

Varför inte bara mappa varje kund direkt mot lagersystemet?

Därför att antalet kopplingar då växer med varje kombination av kund och system, och därför att varje kunds särdrag hamnar i den kod som skriver till lagersystemet. Det var precis utgångsläget hos Constellation: varje ny kund innebar att samma sak byggdes en gång till. Med modellen emellan är en ny kund en mappning, och ett byte av lagersystem påverkar inte kunderna.

Kan samma tillvägagångssätt användas utanför kyllager?

Ja. Mönstret är detsamma oavsett om det är ett lager, ett affärssystem eller en webbshop i ena änden: kundformat, gemensam modell, systemformat. Det som är speciellt för kyllager och livsmedel är spårbarheten på pall- och kollinivå, och den är inbyggd i modellen som återanvändbara fält i stället för som regler i varje flöde.

Vad händer med kundkopplingarna om lagersystemet byts?

Ingenting. Kunderna talar bara med den kanoniska modellen, så ett nytt lagersystem innebär en ny mappning från modellen till det nya systemet, medan alla kundkopplingar lämnas orörda. Ett extra lagersystem, till exempel från ett förvärv, är ett tillägg, inte en migrering.

Ska era integrationer byggas på en gemensam modell?

Vi går gärna igenom hur en kanonisk datamodell skulle se ut hos er och vad den skulle betyda för onboarding av nya partner.

Kontakta SublimTech