Delhivery is one of the largest tech-driven logistics companies, backed by FedEx and SoftBank. Know More →

    Back to blogs

    Eight Ways to Say Detention, and Why Your Spend Report Breaks

    October 20, 2026•6 min read

    Image: EB I-10 Suwannee Co Rest Area; Truck Parking Gore-2 by DanTD, licensed under CC0 1.0.

    Your spend report says detention cost more last quarter than the quarter before. Pull the invoice lines behind the number and the picture dissolves. Three carriers billed a code that reads DET. Two used WTG. One sent a free text line saying DRIVER WAIT 2.0 HRS AT CONS. A drayage provider folded the same event into something it calls terminal delay and billed it by the day instead of the hour.

    The dollars are real. The category is not. You cannot negotiate detention down, prove it is rising, or attribute it to a facility until every one of those lines resolves to the same thing.

    The standard code list is not a taxonomy

    Most shippers assume the EDI code set settles this. It does not, because the set was built so any carrier can describe any charge, not so two carriers describe one charge identically.

    IBM publishes the charge and allowance code list its Sterling transportation product supports, the codes meant to travel in EDI data exchange. Count the entries that mean a vehicle sat waiting: DET for detention of trailers, DEP for detention of power units, DTL for detention loading, DTU for detention unloading, DTV for detention of a vehicle, TDT for truck detention, SDC for a special detention charge, and DSF for detention of a special type flat car. Eight codes, one operational event, and nobody has written a word of free text yet.

    The same list offers five ways to bill for goods sitting still: SRG storage, STR storage in transit, WHC warehouse charge, DEM demurrage, DES demurrage special. It offers three ways to bill for telling somebody the freight is coming: APT appointment notification, MNC notify consignee, NFY carrier notification charge. When none of those fit, a carrier can reach for MSC, other accessorial service charge. Or MSG, miscellaneous charge. Or SUR, surcharge. Or SER, service charge. Or ZZZ, mutually defined.

    A code list with five escape hatches is a vocabulary rather than a classification. It governs what a carrier is permitted to say. It is silent on what two carriers saying different things have in common, which is the only question your audit and your analytics both need answered.

    What free text costs you at the match

    An audit engine comparing a billed line to a contract has to settle a prior question: which clause prices this line? With a canonical code, that is a lookup. With a raw description, it is a guess wearing the costume of a string comparison.

    The failure modes are not symmetrical, and both are expensive. A line that fails to map lands in an exception queue and consumes an analyst, even when the charge is perfectly valid. A line that maps to the wrong clause gets checked against the wrong rate and waved through, which looks exactly like a clean audit until somebody reconciles the contract by hand.

    Ardent Partners' 2025 Accounts Payable Metrics That Matter report puts the average invoice exception rate at 22 percent, against 9 percent for best-in-class teams, with the average cost of processing an invoice at $9.40. Freight bills sit at the hard end of that distribution: a single truckload invoice can carry a dozen accessorial lines, each needing its own clause, and an LTL consolidation invoice carries hundreds.

    Normalisation does not make the hard charges easy. It removes the layer of ambiguity sitting on top of them, so the real question, whether the event happened and who caused it, is the first thing an auditor reaches rather than the third.

    What a canonical code has to carry

    A taxonomy that is only a renaming exercise buys you very little. Mapping WTG and DET to a shared label called DETENTION tidies the report and still leaves you unable to audit the line. The canonical entry has to carry the attributes that make the charge checkable.

    AttributeWhat it settles
    Canonical codeOne identifier per operational event, so every carrier's spelling collapses to a single row
    Event definitionThe physical thing that must have occurred for the charge to be valid at all
    Unit of measurePer hour, per day, per shipment, per container. Demurrage billed daily and waiting time billed hourly are not comparable until this is explicit
    Free time and roundingWhen the clock starts, what is free, how a partial unit rounds
    Causality ownerShipper, consignee, carrier, terminal, customs. The attribute that makes a charge disputable rather than merely payable
    Required evidenceThe record that proves the event: gate in and gate out, geofence dwell, appointment booked against arrival observed
    Clause pointerThe paragraph that prices it, resolved per carrier, lane and equipment type

    Those seven attributes are what separate a canonical code from a label. Penny uses them in order: she resolves the billed line to one entry in the taxonomy, recomputes the amount from the clause that code points at, then tests the event against the evidence the code says is required. A detention charge on a lane with four hours free and no dwell record is not a variance to escalate. It is a charge with nothing behind it, and she drafts the dispute saying so.

    Mapping is the work, and it never finishes

    The taxonomy is the easy half. The hard half is the mapping layer between it and every carrier's billing habits, and that layer has three properties teams routinely get wrong.

    • It is per carrier, not global. The same three letters mean different things in different tariffs. A map keyed on the code alone will quietly merge two charges that your contracts price separately.
    • Free text needs its own path. Descriptions arrive misspelled, abbreviated, concatenated with a reference number, or typed by a dispatcher at 2am. Pattern matching handles the common shapes; the rest needs a model that reads the line in the context of the shipment it sits on.
    • Unmapped must stay unmapped. The most damaging default in freight data is routing an unrecognised description into a bucket called other. It clears the queue and destroys the evidence that your taxonomy has a gap. An unmapped line should block, surface, and get a canonical code added once, permanently.

    That last point is why mapping coverage is worth tracking as a metric in its own right. The share of accessorial spend that resolves cleanly, measured in dollars rather than line count, tells you how much of your freight bill you can currently reason about.

    What normalisation buys on the reporting side

    Matching is the immediate payoff. The larger one arrives at the negotiating table, because a rate conversation needs a quantity.

    Fuel is the clearest case. The Q3 2026 TD Cowen/AFS Freight Index, published in July 2026, reported that the average LTL fuel surcharge in the second quarter ran more than 60 percent above its June 2025 level. A shipper whose fuel lines are scattered across FUE, a numeric 405, a generic SUR and three free text variants cannot see that movement in its own data, let alone separate the part driven by diesel from the part driven by a table change. The same blindness applies anywhere a charge is computed rather than quoted.

    With codes normalised, the questions become answerable and ordinary. Which three consignee facilities generate most of your detention hours. Which carrier charges a notification fee that two of its competitors include in linehaul. What your true cost per stop is once stop-off, driver assist and inside delivery are counted together. Miles takes those numbers into a negotiation as positions rather than impressions, and an accessorial you can quantify is an accessorial you can ask to have folded into the base rate.

    Where to start

    Export every accessorial line from last quarter and group by the raw description string exactly as it arrived. Count the distinct values. Most shippers find several hundred where they expected a few dozen, and the long tail is almost entirely one carrier's formatting.

    Then take the top twenty by spend and write down, for each, the unit of measure and the party responsible. The ones where you cannot answer either question are the charges you are paying on trust, and they are where a canonical taxonomy pays for itself first.

    Book a walkthrough to see Penny map your carriers' charge descriptions against your own contracts.