Available for projects & agency overflow · Quick reply, from the person who does the work

Selling food online: dates, batches and dispatch

As soon as a product perishes, stock stops being a counter. It becomes a set of dated batches that have to be sold in the right order, traced down to the order line and dispatched within a narrow window.

Describe my issue Send a message

Dated batches, not a counter

For a grocery, a bakery or a catering business, knowing that twelve units remain is useless: what matters is how many belong to which use-by date and how many to which best-before date. Picking runs on FEFO, first expired first out, otherwise the oldest batches sit still while the newest go out, and end up written off.

None of the common platforms carries the batch number or the date on the order line. The consequence is immediate: without specific development a recall cannot be traced, since nothing links a dispatched order to the batch it contained. That is what I look at first, before catalogue presentation, because everything that happens in picking depends on it.

Checking dates in the shop and organising production runs come up regularly in the requests I receive from food businesses.

Mandatory information is product data

Regulation (EU) No 1169/2011 governs food information to consumers. For distance selling of prepacked food, the particulars listed in its Article 9 must be available to the buyer before the purchase is concluded and at no extra cost: name of the food, list of ingredients with allergenic substances emphasised, net quantity, nutrition declaration, special storage and use conditions, among others. Only the date of minimum durability may be supplied at delivery instead.

Technically, that rules out a photo of the label and an attached PDF. These particulars belong in structured product fields: translatable language by language, indexable, exportable to a feed, and editable without opening an image editor. An ingredient list trapped inside a picture can neither be searched by an allergic customer nor corrected when a recipe changes.

Frictions specific to food

  • A single basket mixes several VAT rates: food, alcoholic drinks and products sold for immediate consumption are not taxed alike.
  • Delivery charges have to be apportioned across those rates with consistent rounding, otherwise the invoice is out by a few cents.
  • Chilled goods cannot leave on any day: dispatching a refrigerated product the day before a weekend leaves it two days in a depot.
  • Insulated packaging and cooling packs weigh something, and that weight belongs in the carrier calculation rather than being absorbed silently.
  • Delivery zones shrink: some destinations are simply out of transit time for chilled goods, even where the carrier serves them.
  • Variable weight breaks payment: cut cheese or a piece of meat is sold by the item but invoiced on actual weight.
  • The gap between the authorised amount and the amount genuinely due calls for an authorisation then a partial capture or an adjustment, which not every gateway supports.

How I work on a food shop

  1. I split stock into batches

    I add a batch entity holding its quantity, date and origin, then have picking consume that stock in FEFO order. The batch number goes down onto the order line, which makes a recall traceable: from a date I can pull the affected orders instead of alerting the whole customer base.

  2. I structure the regulated particulars

    Each Article 9 particular becomes a dedicated field, translated and shown on the page before the add-to-basket. Allergens are emphasised within the ingredient list rather than flagged by an isolated icon, and the nutrition declaration is tabular data, not free text.

  3. I clean up VAT

    I check the rate applied to each reference, the rule apportioning delivery across the rates present in the basket, and the rounding method chosen. A one-cent gap on an invoice shows up quickly in the accounts and is awkward to fix afterwards.

  4. I constrain dispatch days and zones

    I set a dispatch calendar that closes days incompatible with keeping quality, restrict the destinations eligible for chilled goods, and fold the weight of insulated packaging into the rate table. The buyer sees the possible dispatch date before paying, not after.

  5. I handle variable weight at the payment stage

    For weighed items I separate the amount authorised at ordering from the amount captured after weighing, using a partial capture or an adjustment depending on what the gateway allows. That constraint, rather than the catalogue, often decides which payment provider fits.

Stock, VAT and shipping

Frequently asked questions

Can use-by dates be managed without a dedicated module?
On a very small catalogue, a single date per reference can hold for a while. As soon as two batches of the same reference sit in the stockroom together, a separate batch entity is needed: otherwise the displayed date is wrong for part of the physical stock.
Should the durability date appear on the product page?
The rules accept that this date is supplied at delivery for distance selling. Storage conditions and a sense of the remaining shelf life, however, are things buyers ask for constantly, and stating them cuts complaints noticeably.
How are several VAT rates handled in one basket?
Each reference carries its own tax rule, and delivery charges are apportioned in proportion to the rates present in the order. The sensitive point is rounding: applied per line or on the total, it shifts the invoice by a few cents, which is enough to create a recurring accounting gap.
How do I sell a product invoiced on actual weight?
By separating payment authorisation from capture. The order authorises an estimate based on an average weight, weighing during picking fixes the amount due, then the capture is adjusted. Everything depends on what the gateway permits after the fact.
Should orders be blocked before a weekend?
For chilled goods, yes, on the products concerned. I prefer to close incompatible dispatch slots in the checkout rather than let the order through and treat it as an exception the following Monday.

Describe your need in one minute

A few targeted questions so I can reply with an estimate rather than another questionnaire.

type
existant
stack (facultatif)
utilisateurs (facultatif)
echeance (facultatif)
Please provide an email or a phone number so I can get back to you.

Please provide an email or a phone number so I can get back to you.