Receive a purchase order

Log what arrived from a supplier — every received line becomes a stock batch.

3 min readUpdated 10 September 2026

Receiving is where procurement meets inventory. RxShelf uses the same restock engine under the hood — every received line becomes a new stock batch with its own cost, selling price, batch number, and expiry. There is no separate "GRN" entity; the batches ARE the receiving ledger.

Receive a delivery — one atomic step per PO.
Demo coming soon
Receive a delivery — one atomic step per PO.

Open the PO for receiving

  1. Sidebar: Procurement → Purchase Orders.
  2. Click the PO (must be status sent or partial to receive against).
  3. Click Receive.

A restock-style table opens with every line on the PO.

Fill in each line

For each row, fill in:

ColumnDefaultNotes
Qty receivedoutstanding (ordered − already received)Set to 0 to skip this line this delivery.
Costline unit cost from the POEditable — actual invoice cost may differ.
Markup %product's default markupEditable.
Selling pricecost × (1 + markup / 100)Auto-updates as cost/markup change; still editable for a custom price.
Wholesale % and Wholesale priceproduct's default wholesale markupSame pair as retail: type either and the other recomputes. Only visible if you have the wholesale permission. Leave blank if this batch has no wholesale price.
Batch number—Optional. Real manufacturer lot number, or blank.
Manufacture date—Optional.
Expiry date—Required if qty received > 0 and the product is a drug.

Add an optional note (e.g. "One box damaged, credit note requested") and click Receive.

What happens on submit

Everything lands in one go — each received line becomes a fresh stock batch, your stock counts update, and the PO status advances to received (if every line is fully received) or partial (if any line is short).

Partial receipts

If the supplier only sent part of the PO, receive what came now. The PO stays open as partial — you can receive more later when the rest arrives. Because each delivery creates its own batches, batches from different shipments carry different lots and expiries. FEFO handles them correctly.

Short deliveries — closing early

Sometimes a supplier can't finish the order and you want to move on. From a partial PO, click Close order — the PO is marked received and received_date is stamped. Any outstanding quantities remain unreceived (no phantom batches are created); the PO is just locked as final.

Over-delivery

If you receive more than ordered on a line, RxShelf accepts it and flags the over-delivery on the PO detail page. Nothing is refused — but you'll see a badge on the line so it's visible in the audit trail.

Where the receipt lives

  • On the PO detail page — each received delivery is listed with its date, who received it, and the note.
  • On the product's bin card — every received line shows up as a stock movement with the PO reference and batch number.
  • In stock inventory — the product's stock aggregate updates immediately; the new batch is visible in the product's batches list.

Next steps