When a temperature sensor alarms in a cold store, three questions have to be answered quickly: which stock was in that zone, how long was it out of range, and is it still saleable. A system that can answer the first two in minutes turns a potential write-off into a decision.

The hour after the alarm

  1. What was affected. Every pallet in the zone, by batch and owner.
  2. For how long, and how far out. The excursion profile, not a single reading.
  3. Against what tolerance. Products differ; some survive a short excursion and some do not.
  4. Decision and record. Release, downgrade or destroy — recorded against the batch with the evidence attached.

Each of those depends on telemetry being tied to a location, and stock being tied to that same location. An alarm that identifies a sensor, not a set of pallets, starts a physical search while the clock runs.

Zones and put-away

Codeunit 50270 Cold Storage WMS Validator.al
codeunit 50270 "Cold Storage WMS Validator"
{
    Access = Public;
    Subtype = Normal;

    [EventSubscriber(ObjectType::Table, Database::"Warehouse Activity Line", 'OnBeforePutAwayRegister', '', false, false)]
    local procedure ValidateTemperatureZone(var WarehouseActivityLine: Record "Warehouse Activity Line"; var IsHandled: Boolean)
    var
        Bin: Record Bin;
        Item: Record Item;
    begin
        if WarehouseActivityLine."Action Type" <> WarehouseActivityLine."Action Type"::Place then
            exit;

        Bin.Get(WarehouseActivityLine."Location Code", WarehouseActivityLine."Bin Code");
        Item.Get(WarehouseActivityLine."Item No.");

        // Check Temperature Zone Compatibility (Deep Freeze -25C, Chilled +2C, Ambient)
        if (Item."Storage Zone Required" <> Bin."Temperature Zone") then begin
            Error('Cold Chain Violation: Item %1 requires %2 zone, but target Bin %3 is %4.',
                Item."No.",
                Item."Storage Zone Required",
                Bin."Code",
                Bin."Temperature Zone");
        end;
    end;

    procedure LogIoTExcursionAlert(LocationCode: Code[10]; BinCode: Code[20]; MeasuredTemp: Decimal)
    var
        Bin: Record Bin;
        LotInfo: Record "Lot No. Information";
    begin
        if Bin.Get(LocationCode, BinCode) then begin
            if MeasuredTemp > Bin."Max Safe Temperature" then begin
                // Lock all Lots in this Bin from shipment
                LotInfo.SetRange("Location Code", LocationCode);
                LotInfo.SetRange("Bin Code", BinCode);
                if LotInfo.FindSet() then begin
                    repeat
                        LotInfo.Blocked := true;
                        LotInfo.Modify(true);
                    until LotInfo.Next() = 0;
                end;

                Message('CRITICAL ALERT: Temperature Excursion detected in Bin %1 (%2 C). Locked all contained lots from shipment.', BinCode, MeasuredTemp);
            end;
        end;
    end;
}

Frozen, chilled, ambient and controlled-atmosphere stock each belong in their own zones, and the validation has to happen at the moment of put-away. A check that runs afterwards reports the mistake instead of preventing it, and in this industry the mistake is the loss.

FEFO, with a shorter clock

Expiry-driven picking applies here as it does in grocery, with less room. Product that spends an extra two days in a cold store because the pick was undirected can arrive at a customer inside their rejection window.

In a third-party operation, a rejected delivery is not only the value of the goods. It is the customer's confidence in the storage, which is the thing they are paying for.

Catch-weight and billing

Stock is handled in pallets and cases, and billed by weight. The weight captured at receipt, at pick and at dispatch all have to reconcile — with each other and with what the customer counts on arrival.

Storage billing adds its own complication: rate by pallet position, by weight, or by period, often several at once and different per customer. Getting it out of spreadsheets is usually the fastest financial improvement available in a 3PL.

Whose inventory it is

QuestionOwn inventoryThird-party storage
Who absorbs a discrepancy?YouYou, and you explain it to the owner.
How often is it reconciled?At countContinuously — it is the service.
Who sees the record?InternalThe customer, ideally in real time.

That last row is worth building for. A customer who can see their own stock and its temperature history stops calling to ask, and starts treating the accuracy as the reason to stay.