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.
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
-
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.
-
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.
-
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.
-
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.
-
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
-
Stock that never updates
Frozen quantities, gaps between orders and inventory: the usual causes on PrestaShop and how to isolate them.
-
Wrong VAT and net/gross prices on PrestaShop
Rounding, badly matched tax rules, cent-level gaps on invoices: where to start the diagnosis.
-
Configuring a carrier on PrestaShop
Weight ranges, zones, delivery restrictions: the settings that decide whether sensitive goods can ship at all.
-
VAT miscalculated on WooCommerce
Rate applied to the wrong item, delivery taxed incorrectly: the settings that produce those gaps.
Frequently asked questions
Can use-by dates be managed without a dedicated module?
Should the durability date appear on the product page?
How are several VAT rates handled in one basket?
How do I sell a product invoiced on actual weight?
Should orders be blocked before a weekend?
Describe your need in one minute
A few targeted questions so I can reply with an estimate rather than another questionnaire.