← All help topics

🧴 Perishables

The consumables you buy, stock per group, and deliver with every check-out.

The Perishables page (admin only, under Settings) manages your consumables — the things you re-stock at a property on every turnover that are used up on site and never come back: washing liquid, toilet paper, coffee pods, dishwasher tabs, bin bags, and the like. They go out with the clean linen on each check-out but, unlike linen, they never return on the Dirty Queue. The page has two layers: a catalogue of items and a stock ledger with real quantities and prices — exactly like the Linen Vault, but for consumables.

The catalogue

  1. Open Settings → Perishables.
  2. Type a name (e.g. Toilet paper) and an optional unit (roll, bottle, pod), then click + Add perishable.
  3. Edit a name or unit on any row and click Save. Remove drops one you no longer stock — but only once its stock is zero (issue or write it down first, so a delete can never silently discard counted stock).

Stock: buy it, deliver it, count it

Each perishable now carries a quantity and a value, held per property group — just like linen. The group tabs at the top scope the whole page: Default (properties in no group), one tab per group, and a read-only Total that sums them all. The tab you pick is remembered — the page never switches it for you.

  1. Buy stock: in Record a movement choose Purchase, add the item(s) and quantities, and enter a price — either the unit price *or* the total price for the whole purchase; whichever you type, the other fills in automatically (unit = total ÷ quantity). Save, and the stock rises in the tab you’re on, with its value tracked at a weighted-average cost.
  2. Deliver it: when a packer completes a clean bag, the bag’s perishables are deducted from that property’s group automatically (see below) — you don’t issue them here by hand.
  3. Correct a count: choose Adjustment to add or subtract (a miscount, breakage, a write-down). A negative adjustment can never take a group below zero.
  4. Set the unit cost by hand (optional): the unit cost is normally the average of what you paid, but you can override it in the Catalog (the *Unit cost* column) — type a value to pin it (a set tag marks it), or leave it blank to use the automatic average. The cost you set drives the stock value and any product cost that uses this item.
  5. Move between groups: choose Transfer, pick the destination group, and the stock moves as a balanced pair — it leaves one group and lands in the other, so the tenant-wide total never changes.

Products (assembled kits)

Often you buy the parts separately and assemble a finished product — e.g. you buy bulk body wash (in ml), empty bottles and stickers, then fill a bottle and label it. Define that on the Perishables page as a Product with a recipe: *Body Wash 250 ml* = 250 ml Body Wash + 1 Bottle + 1 Sticker. A product holds no stock of its own — its Buildable count is simply how many complete kits your current ingredient stock allows (the lowest of what each ingredient permits), and its cost is the sum of its parts.

On the Clean Queue you deliver the product, not the parts: completing a bag with 2 *Body Wash 250 ml* automatically deducts 500 ml body wash + 2 bottles + 2 stickers from the property’s group. Any ingredient that goes into a product is hidden from the Clean Queue — you hand over the finished product. (You can switch this on per property group: Settings → Property groups has a checkbox to allow packing product ingredients loose on the Clean Queue for that group — off by default, so every other group keeps the standard behaviour.) An ingredient can belong to several products (e.g. the same sticker), and an item stays deletable only while no product uses it.

What a property delivers by default

On a property’s own page you can set its Perishables default set — the standing items it should receive on every turnover, split into Products (assembled kits, e.g. 1 Body Wash) and Individual items (loose consumables that aren’t part of a product, e.g. 2 toilet rolls). That set pre-fills the perishables on its clean bag, where the packer can still edit it before completing. On completion, exactly what’s on the bag — products exploded into their ingredients — is deducted from the property’s group stock.

Watch out Delivery is all-or-nothing with the linen: if the group doesn’t hold enough of a perishable, the whole bag is refused (nothing is packed and nothing is deducted) until you top the stock up here or reduce the amounts. Reopening a completed bag returns its perishables to the same group they came from — the exact reverse of the delivery.
Note Perishables are still not linen: there is no laundry cycle, they never touch the Linen Vault, the At Laundries balance or the loss report, and there is no “loss” to chase (they are meant to be consumed). But the stock ledger is conserved the same way linen is — a delivery, adjustment or transfer can never drive a group below zero, a transfer nets to zero tenant-wide, and if you delete a group its perishable stock is re-homed into Default (never lost).
Note **Run-out forecast — ingredients *and* finished products. The Perishables Spent page (under Statistics) projects when each item runs out from the upcoming turnovers already booked and each property’s standing set. It now also lists each finished product: how many you can assemble right now and when it is expected to run out — a product runs out the moment any one ingredient can no longer make a single kit (the limiting ingredient is named), which can be sooner** than that ingredient’s own run-out. An item that is already at zero stock but still has upcoming demand reads as *runs out today* rather than showing a blank.
Note Plenty of stock? You still get a Used/day and a run-out. An item that IS being used but sits on a big pile of stock — so it outlasts every turnover booked in the window — no longer reads a blank *no upcoming turnovers booked*. It shows its Used/day and an estimated run-out, extrapolated forward at the current daily rate past the end of the booked window, and is clearly marked (a blue tint and a 📦 outlasts booked (through <date>) badge that names the last booked turnover). Treat that date as a floor — it reads long until more turnovers are booked. *No upcoming turnovers booked* now appears only when nothing at all is scheduled to use the item (and, because each group is separate, an item can forecast under the group whose properties actually deliver it, and on Total, while reading blank on a group that never uses it).

Open the Perishables page