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.
Open the PO for receiving
- Sidebar: Procurement → Purchase Orders.
- Click the PO (must be status sent or partial to receive against).
- Click Receive.
A restock-style table opens with every line on the PO.
Fill in each line
For each row, fill in:
| Column | Default | Notes |
|---|---|---|
| Qty received | outstanding (ordered − already received) | Set to 0 to skip this line this delivery. |
| Cost | line unit cost from the PO | Editable — actual invoice cost may differ. |
| Markup % | product's default markup | Editable. |
| Selling price | cost × (1 + markup / 100) | Auto-updates as cost/markup change; still editable for a custom price. |
| Wholesale % and Wholesale price | product's default wholesale markup | Same 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
- Read the bin card — see every stock movement per product.