Stop discovering the missing 4 kg on the morning of the batch.
The stock sheet says one thing, the production plan another, and the order still gets typed from memory on Sunday evening. Then Thursday’s batch is short 4 kg of habanero, the fast vendor is out, and the week reorganizes itself around a shortage that was knowable ten days earlier.
The Buying screen does that cross-checking for you. BatchDash reads your planned batches and your restock levels, subtracts what the shelf holds and what is already on order, and lays out only what is left to buy, one decision per vendor. You arrive with the thinking done; the choices stay yours.
One card per vendor, with the deadline on it
You stop assembling orders and start approving them. What is left to buy arrives grouped by the vendor it would come from, and every quantity is already a real order: whole packs, the vendor’s minimum honored, enough to clear the shortfall rather than land exactly on it. Each card knows the last day to order so the delivery still beats the batch, and says what that card costs. Filters narrow the list to what is short for planned batches, what has dropped under its restock level, or what nobody has ordered yet.

Every line says why it is there
Needed, on hand, on order, order this much: the arithmetic sits on the row, so a quantity is never a number you have to take on faith. The Why column names the batches waiting on it, with their dates, and links to each one. A line that no batch asked for says Below restock instead, because that is a different reason and should read like one. Overrule any quantity and the rest of the math follows it.

BatchDash optimizes for the batch date, then the price
The cheapest line-by-line answer is often the worst basket, so the default vendor is picked the way a good buyer picks:
- Among vendors that can deliver by the day the batch needs it, the cheapest wins. A ten-day supplier does not win a batch due Friday.
- When one vendor could also cover lines sitting on another card, the card says what consolidating would cost or save, in euros, before you move anything.
- It also says when the saving is a trap: moving the habanero here saves €30.80 and lands after the batch needs it, so the offer arrives with the reason to refuse it.
Delivery is part of the price, until it is not
A vendor charging €12 to deliver is not the cheapest vendor at the same unit price, so the card carries both figures: what the goods cost, and what lands. And when a free-delivery threshold is within reach it says so in the only terms that matter, which is how much more it would take. Another €10.30 at this vendor and the charge disappears. That is usually one more line you were going to order anyway.

One click writes the draft orders
Tick the lines you want and Create orders writes one draft purchase order per vendor, quantities and prices carried over. Nothing is emailed, nothing is committed; a person reviews and sends. If a colleague is doing the ordering today, share the list and every tick and quantity saves as they work.
Then it arrives, and rarely exactly
An order stays a document until something turns up. Receive a line and it books at what you actually paid, with the supplier’s lot and its best-before, so the ledger and the trace both get what they need from the same act. Twelve of the twenty kilos came: the line says so and the order reads Partial. The apricots are not coming at all before March, so you close that line short with the reason in your own words and it stops asking. The invoice can be photographed rather than typed, which is its own story.
