Purchase options
Purchase options let one product be bought several different ways — different suppliers, different brands, different pack shapes — while your inventory counts, recipes, and reports stay on the single product.
When you need this
You probably already know if you do. The telltale is a product you buy from more than one place, or in more than one shape:
- Ground beef — your distributor sells a 4×5 lb case (20 lb), but when you run short mid-week you grab 10 lb tubes at Costco.
- Flour — a 50 lb bag from your bulk supplier normally, 25 lb bags from a backup when they're out.
- Olive oil — a case of 6 bottles on the truck, single bottles from the restaurant store in a pinch.
Without purchase options, kitchens handle this by creating a second product ("Ground Beef — Costco"), and everything downstream splits in two: counts have two lines for the same shelf, recipes only deduct from one of them, and cost reports can't see the whole picture. Purchase options exist so you never have to do that.
The idea: one product, many ways to buy
Each purchase option records one way to buy the product:
- Option name — how you'd say it: "Costco 10 lb tube", "Seymour's 4×5 lb case".
- Supplier — optional, and each option can have a different one.
- Pack size — how many of the product's counting units one pack adds to inventory. A 10 lb tube on a product counted in
lbis pack size10. This is the number that makes the math work. - Sold as — what to call one pack (case, bag, tube, pail). Receipts and history use this word, so deliveries in Rinvy read like the supplier's invoice. Defaults to
case. - Cost per pack — each option remembers its own latest price, updated automatically every time you receive against it.
Everything else about the product is unchanged. You still count it in one unit, recipes still reference the one product, and stock is one number.
Adding your first option
On the Products page, open the product for editing. The Purchase options section appears below the cost fields (edit mode only — save a new product first).
Tap Add option and describe the alternate pack: name it, pick its supplier if it has one, and enter its pack size in the product's counting unit. Cost per pack is optional — it fills in automatically on the first delivery. Estimates are fine for pack size; you can refine it any time.
The moment the first option is added, your product's current supplier, case size, and case cost become the default option automatically — so the list immediately shows both ways you buy: the way you always did, and the new one.

The default option
One option is always the default — it represents the product's normal configuration. The product's supplier, case size, and case cost fields become a read-only reflection of it, and the option editor becomes the one place to change them. Ordering suggestions and case-based counting stay keyed on the default, which is why its pack size must be a whole number (fractional packs — say a bag with an estimated yield — are fine on any other option).
Use the star to make a different option the default when your "normal" source changes for good.
Receiving against an option
On Receive products, each line's unit picker lists the product's units and its purchase options. Pick the option that matches what came off the truck and Rinvy does the pack math:
- Receive
2 × Costco 10 lb tube→ 20 lb enters inventory. - The line's cost is per pack ("Cost per tube"), prefilled from that option's last price.
- If you've set the receipt's supplier at the top, picking a product auto-selects that supplier's option — a Costco receipt starts ground beef on the Costco tube without you touching the unit picker.

Nothing changes for the rest of the flow: the receipt, activity history, and reports all show the delivery in real units, labeled the way the option is sold.
Invoice scanning learns your options
Emailed and uploaded invoices can book lines against options too — and Rinvy learns which option a supplier's item code means, the same way it learns which product a code matches:
On an invoice under review, open a matched line's Change controls and set Received as to the pack that line really is. The line immediately re-reads as packs — quantity means packs, cost means per pack — and the choice is remembered for that supplier's item code. (The line editor's unit dropdown can also switch a single line to an option without teaching the code — useful for a one-off.)
The next invoice carrying the same item code matches straight to the option:
3 × tubeon the paper becomes 30 lb in inventory, priced into that option's own stream. With auto-approve on, the whole invoice can complete without review.
A few guardrails worth knowing:
- Weight-stated lines always stop for review. If the supplier bills an option-coded line by weight (catch-weight items — "12.5 LB" instead of "1 CS"), Rinvy won't guess how many packs that is. The line arrives in review with the option pre-applied so you confirm the quantity.
- Correcting the invoice's supplier resets its option links. They were learned from the old supplier's codes, so the lines fall back to standard units for you to re-pick.
- "Standard units" un-learns. Setting a line's Received as back to standard units clears the remembered link, so the same code books plain quantities on the next invoice.
Ordering in the packs you buy
The order list handles options end to end:
- Wider supplier reach. Filtering the order list to a supplier also includes products you buy from them as an option. Filter to Costco and ground beef shows up as tubes at the tube price, even though its everyday source is Sysco.
- "Order as" on every line. Each suggested line carries a picker listing the product's options. Picking one restates the suggestion in that pack — quantity repacked from the same underlying need, cost from that option's last price. Pick an option that belongs to a different supplier and the line rides that supplier's truck: it is called out under the draft and marked as its own separate order when you submit.
- Honest netting. Pending orders net against suggestions in your counting units. A pending 10 lb tube against a product counted in 20 lb cases reads 0.5 cases on order — partial coverage reduces the suggestion instead of hiding the item, and the On order list shows single option orders in their own packs ("2 tubes").
- Receiving follows the order. Receiving a pending order pre-fills each line as the option it was ordered as — pack quantities at per-pack cost, so what you ordered is what books. If the option was retired in the meantime, the line falls back to plain units for the same total quantity; receiving is never blocked.

Per-source price history and smarter alerts
Every option keeps its own price stream, and price change detection compares within a stream, never across streams:
Why per-stream pricing matters
Ground beef, counted in lb:
- Default: Seymour's 4×5 lb case, last received at
$92.00($4.60/lb) - Option: Costco 10 lb tube, last received at
$35.00($3.50/lb)
You receive Costco tubes at $35.00 the week after a Seymour's delivery at $92.00. No price
alert fires — that's a different source, not a price change. Next month Costco charges $38.50
for the same tube. Now an alert fires: +10% within the Costco stream, which is a real move.
The product report's price chart shows one line per option, so you can see both sources' trends side by side — the raw material for deciding where to buy.
The product's blended cost (used by inventory value and food-cost reports) still averages across everything you actually received, whatever the source — see how cost is computed.
Retiring an option
When you stop buying from a source, deactivate the option (the archive button) rather than deleting it. A deactivated option disappears from the receive picker and can't be used on new deliveries, but its receipt history and price trail stay intact — and you can reactivate it if the source comes back. Deleting is only possible for options that have never been received against and aren't on a pending order right now; anything with history or a live order refuses to delete and points you at deactivate instead (receive or cancel the order first if you really want it gone).
Counting in packs
When you count a product on the recount sheet, you can count it in one of its packs instead of its default case — handy when what's on the shelf is easier to count as "3 tubes and a bit" than in pounds.
Any product with a non-default option shows a Count in selector on its counting row (in both the list view and speed mode). It starts on the default (cases); switch it to the pack you're eyeballing, listed by its own name — "Costco 10 lb tube".
The first box re-labels to that pack ("Tubes") and the second stays your loose unit. Count
3tubes and4loose lb and the total reads 34 lb — decomposed against the tube's 10 lb, not the case's size.

The pack you pick is only a data-entry aid: what gets saved is the resolved total in the product's own unit, so switching between cases and a pack never changes the number that lands in the count. It's remembered only for the count you're on.
Common mistakes
Creating a second product for the second supplier
That splits your counts, recipes, and reports in two forever. Add an option to the existing product instead — one shelf, one product, many ways to buy it.
Trying to edit supplier or case cost on the product form
While options exist those fields are managed by the default option, so the form shows them read-only. Edit the default option in the Purchase options section — the product fields follow it automatically.
Leaving the editor without tapping Save option
Changes to an option are saved by its own Save option button, not by the product's save. Rinvy will warn you if you try to leave an option half-edited, but the habit to build is: edit the option, save the option.
Deleting an option to hide it
If it has deliveries behind it, delete is blocked on purpose — that history prices your reports. Deactivate instead; it vanishes from receiving but keeps the record.