Inventory · receiving

Stock in.

Every time a supplier delivers, you record a goods-received note (GRN). This is the only legitimate way new units land in your branch inventory — the system blocks ad-hoc quantity edits because they break weighted-average cost math.

Who can receive

Org owner, regional manager, and branch manager. Anyone else won't see the menu item or the page — RLS rejects the write at the database level if someone tries to bypass.

Open the form

Sidebar → Receive stock. Or visit /inventory/receive directly. You can also land here from a supplier page with + Receive from this supplier, which pre-fills the supplier dropdown.

Top panel collects the receipt header:

FieldNotes
BranchWhere the stock physically lands. Defaults to your branch. Branch managers can only see their own; regional + owner see all.
SupplierPick from active suppliers. If none exist, the form links to /suppliers/new to add one inline. Leave blank for internal transfers or unknown sources.
Supplier invoice #From the printed invoice the supplier handed you. Optional but recommended for audit.
Invoice date / Received onTwo separate dates because suppliers sometimes invoice ahead of shipment. Both optional.

Add line items

Type to search SKUs — by code, brand, model, or colour. Or hit Scan for the camera-based barcode reader. Each match shows the SKU code, brand, colour, and the SKU's default GST rate.

The killer button: + Create new SKU

When you unbox a delivery and find a frame model you've never sold before, you don't need to leave this page. At the bottom of every search dropdown there's a + Create new SKU row. Click it and a drawer opens from the right with a quick-create form: brand, model, variant, pricing, tax. Save and it's added to your catalogue and dropped into your receipt as the next line.

Brand and model use case-insensitive dedup — “Ray Ban” and “Ray-Ban” collide so you don't end up with two versions.

What goes in each line

ColumnWhat it means
QtyHow many units of this SKU you received.
Cost (₹ excl. GST)Per-unit cost from your supplier's invoice — BEFORE tax. The system adds GST automatically using the rate column. Most common typo: putting MRP or selling price here. Don't.
Discount (₹)Total discount for the line (not per-unit). If your supplier gave you ₹500 off a batch of 10, put 500.
GST %Defaults from the SKU. Override if your supplier invoiced you at a different rate.

The amber variance warning

When you pick a SKU you've received before, the system looks up the running weighted-average cost for that SKU at that branch. If your typed cost is more than 15% above the running average, an amber banner appears under the line:

⚠️ Cost is 23% above the running average (₹3,250) — supplier price increase, or a typo?

Two reasons it might fire: (a) supplier really did raise prices and you should review your selling price, or (b) you typed a zero too many. Either way you want to know before confirming, not after — once the receipt commits, the new cost blends into the weighted average and contaminates downstream margin reports.

Confirm

Hit Record receipt →. The action runs atomically — receipt header, lines, branch_inventory bump, and weighted-average cost recompute all live or die together. You land back on the receive page with a green success banner showing the receipt number (RCP-2026-NNNNN).

How weighted-average cost works

Every SKU at every branch has a running weighted-average cost. When you receive a new batch:

new_avg = (old_qty × old_avg + received_qty × new_cost)
          ────────────────────────────────────────────
                       old_qty + received_qty

Example: 5 wayfarers on the shelf at ₹3,500 cost. Supplier sends 3 more at ₹4,000. New average becomes (5×3500 + 3×4000) / 8 = ₹3,687.50. Every sale from that batch records its cost basis at ₹3,687.50 — frozen, so future receipts don't retroactively shift the margin on already-sold units.

Each receipt line also stores its own unit cost forever. So even though the running average blends, the audit trail of “we paid X on date Y from supplier Z” survives. Visible on the per-SKU history page.

Adding suppliers

/suppliers/new takes name, legal name, GSTIN (validates the 15-character format), contact name + phone + email, address, and payment terms (net 15 / 30 / 45 / 60). All editable later.

On the supplier detail page you'll see total purchases, outstanding amounts, and a per-receipt history.

Next up

Transfers & per-SKU history

Moving stock between branches once you have more than one — plus the lifetime view of any SKU.