The big picture
Procure to pay — request, order, receive, bill, settle.
Purchasing is the buy-side mirror of Sales. A need becomes a requisition, which sources a purchase order, against which you receive goods (the step that moves stock and costs inventory), record the supplier's bill, and finally pay — with debit notes for returns and expenses for spend outside the PO flow.
Where the invoice is the single stock-out point on the sell side, the GRN (goods receipt) is the single stock-in point on the buy side — it's where quantity and weighted-average cost land. The PO promises; the bill records what's owed; the payment clears it.
Where the screens live
Purchase Orders
The buy orders — approval routing, receipt progress, billing.
/purchasesRequisitions
Internal material requests → RFQ → quote comparison → PO.
/purchases/requisitionsVendor Bills
Supplier invoices, ITC, 3-way match, TDS & MSME.
/purchases/billsPayments Made
Settle bills — multi-bill allocation, advances, TDS.
/purchases/paymentsDebit Notes
Purchase returns against a bill, with restock.
/purchases/debit-notesExpenses
Spend outside a PO — categories, RCM, re-billable.
/purchases/expensesSuppliers
Vendors, GST profile, payables, MSME, quality score.
/purchases/suppliersDelivery Challans
Job-work material sent out (this DOES move stock).
/purchases/delivery-challansWho can do what
| Action | Permission |
|---|---|
| See the module | canViewPurchases |
| Create / edit POs, requisitions, challans | canManagePurchases |
| Record goods receipts (GRN) | canReceiveGoods (or any of the purchase / bill rights) |
| Approve / reject POs, approve requisitions | canApprovePurchase |
| Vendor bills & debit notes | canManageBills |
| Record supplier payments | canRecordPayment |
Purchasing ships in every plan tier (Lite / Growth / Business); only staff permissions or a suspended workspace gate it. Owner/Admin/Manager get the full purchasing set by default; Staff get none.
Requisitions & RFQ
Ask before you buy — and shop the ask around before you commit.
A purchase requisition (PR/FY/NNN) is an internal request for materials — often auto-raised from a shortage on a sales order or work order. It carries lines with target/estimated rates but no committed price until you source it.
Requisition lifecycle (with RFQ)
The sourcing path: Approve the requisition → Send RFQ (each invited supplier gets an inquiry seeded with your lines) → Save quote as each price comes in → open Compare (the Vendor comparison screen ranks quotes cheapest first, with the supplier quality score alongside) and press Convert to PO on the winner. When you already know the vendor and the rate, skip all of that: Raise PO on an approved requisition goes straight to a draft PO. A PO can’t be raised from an unapproved requisition, and there is no "rejected" requisition: one that isn’t wanted is cancelled.
- Closed, not "converted" — the requisition shows Closed only once every line’s quantity is on order. A PO that buys part of it records what it bought per line, and the detail screen shows "N still to order".
- Merge into one PO — tick several requisitions on the list and use the bulk bar. If the items have different preferred suppliers, a split screen proposes one draft PO per supplier (Save N draft purchase orders), or Merge into one PO instead.
- Second approver (optional) — turn on Settings ▸ Purchases ▸ "Requisitions need a second approver" and whoever raised a requisition can’t approve it; the Approve button stays visible but disabled, saying why. The owner is always exempt. Approving needs the approve purchases permission either way.
"Raise PR for shortages" on a work order or BOM (see the Production Control guide) creates a requisition pre-filled with the true shortfall — closing the loop from a stalled job straight into sourcing.
Purchase Orders
The commitment to a supplier — with real approval routing and a receipt-driven status.
A PO commits to buy specific items at agreed prices. It walks an approval workflow (single-shot or multi-step routing by amount), then becomes receivable. Saving a purchase order refuses a line whose HSN or SAC is not a valid code.
PO status lifecycle
Only an approved (or partially-received) PO can be received. Multi-step routing stamps approver steps by total value and notifies each step in turn; the final step flips the PO to approved and records the preferred supplier + last cost on each product. A submitted PO can still be edited while nobody has signed a step.
Cancel is refused once any quantity has been received (return the goods with a debit note instead) or while a live vendor bill points at the PO (cancel the bill first). Cancelling frees the PO’s quantity on its requisition.
A fully-received PO can also be auto-closed (a "Closed" chip) — on the receipt, on the bill, or on both, per Settings ▸ Purchases (off by default). There’s no separate "closed" status value; "Billed" is a chip linking to the bill, not a status.
Goods Receipt (GRN)
The single stock-in point — and where cost is averaged.
Recording a GRN against a PO is where the buy side touches inventory. In one transaction it books received quantities, updates weighted-average cost, and can route goods through incoming QC.
- Partial & close-short — receive some now; "no backorder" cancels the un-received remainder.
- Weighted-average cost — each priced receipt blends into the product's moving-average
costPrice(in base units). - Two-phase QC-HOLD — if a blocking incoming control point applies, the accepted qty lands in
qcHoldQty(ledgergrn_qc_hold), not sellable stock, until the incoming inspection is submitted: the accepted qty is then released to stock (grn_qc_release) and the rejected qty leaves the hold into an NCR — on a pass or a fail. See the Production Control guide. - Subcontract consume — components you supplied are drawn from your own stock at receipt (
subcontract_consume). - Batches & expiry — a batch-tracked item asks which lots the accepted quantity arrived in, and pre-fills the expiry from its shelf life. See the Batch, Lot & Expiry guide.
- Landed cost — freight, duty and clearing belong on the goods, not in an expense. Capitalise them from the bill's Charges card or allocate a carrier's bill to this receipt: Landed Cost guide.
| Reason | When | Δ |
|---|---|---|
grn | Normal receipt into good stock | + |
grn_qc_hold | Received under a blocking incoming gate (→ QC-HOLD) | +* |
grn_qc_release | Incoming inspection submitted → accepted qty released from hold to stock | + |
subcontract_consume | Supplied component consumed at subcontract receipt | − |
purchase_return | Received goods sent back (debit note / PO return) | − |
Vendor Bills
What you owe — with ITC, three-way match, TDS and the MSME clock.
A vendor bill is the supplier's invoice recorded against your books. Create it from a PO (prefilled from received qty) or standalone. The bill number is the supplier's number (dedup-checked per supplier).
A bill can be linked only to an approved, partially received or fully received PO. The bill can’t claim more of an item than has been received less what earlier bills already claimed — two bills for the same delivery are refused rather than paid twice.
Status & the soft gates
Alongside the pay status run three orthogonal flags:
- ITC status —
eligible · ineligible · reverseCharge · pending. Ineligible input tax folds into cost (Purchases) instead of being claimed. - Approval — an optional bill-approval gate blocks payment while
pending. - 3-way match — PO ordered vs GRN received vs bill; surfaces over-billing and price drift (self-heals if the GRN lands late).
TDS u/s 194Q (default 0.1% over a ₹50,00,000 supplier threshold) is pre-filled per bill; the MSME 45-day rule flags overdue micro/small-enterprise bills. Outstanding = grand total − paid − TDS − debited.
Paying suppliers
Settle many bills at once, carry advances, and deduct TDS.
A payment (PAY/FY/NNN) settles one or more vendor bills in a single record. Unlike customer receipts (one invoice each), a supplier payment supports multi-bill allocation.
- Modes:
bankTransfer · upi · cash · cheque · other. - Allocation — split the payment across bills; each allocation can carry its own TDS (default section 194Q).
- Advances — pay a supplier more than the allocated bills and the surplus becomes a supplier advance (
advanceBalance) to consume against future bills. - Cancelled / already-paid / pending-approval bills are refused as allocation targets.
This "Payments Made" screen is the vendor side. Customer receipts live on the invoice detail (Sales guide) and settle a single invoice at a time. Don't mix them up.
Returns & debit notes
Sending goods back, on the books.
A debit note (DN/FY/NNN) records a purchase return against an open or partially-paid bill. Finalising it is immutable. Choose Goods return to send stock back, or Value adjustment for a price difference — custom lines, no stock movement, and a valid HSN/SAC before it can be issued.
- Restock — returnable stocked items are deducted from your stock (ledger
purchase_return−); if the bill links a PO, the PO line's returned qty is bumped so a later PO return can't double-count. - Reduces outstanding — the returned value lowers the bill's outstanding (or is held as vendor credit to apply to other bills).
- The 194Q accumulator is decremented so TDS stays accurate.
Under GST the legal purchase return is the supplier's own credit note; this debit note is your buyer-side record and doesn't flow to your GSTR-1.
Expenses
Spend that doesn't go through a PO.
An expense (EXP/FY/NNN) captures single-line spend — rent, utilities, travel, professional fees — outside the PO/bill flow.
- Categories (rent, utilities, travel, office-supplies, professional-fees, marketing, repairs, misc), each with a default SAC and GST rate.
- Reverse charge (RCM) — when the supplier's GST treatment implies it, the expense self-assesses tax (both input and output legs).
- Paid-through account (bank / cash), tax-inclusive option, and place-of-supply for the CGST/SGST vs IGST split.
- Billable — mark an expense re-billable to a customer and it can be pulled into their invoice.
Suppliers
The vendor master — GST, payables, MSME, and an incoming-quality score.
- GST treatment (registered regular/composition, unregistered, consumer, overseas, SEZ, deemed-export) — unregistered/composition default to reverse charge.
- Ledger fields —
advanceBalance(maintained by payments), opening balance, payment terms, MSME registration (drives the 45-day rule). - Supplier ledger merges PO payments, bill payments, TDS and finalised debit notes chronologically.
- Quality scorecard — the incoming first-pass-yield + open NCRs + top defect (from GRN inspections) surfaces on the supplier profile, the RFQ comparison, and the PO supplier picker (see Production Control).
Job-work challans
Sending material out to a subcontractor — and this one does move stock.
A delivery challan (DC) sends material out to a vendor for job work. Unlike a customer delivery note (Sales, documentary), a job-work challan moves stock into a per-vendor balance and carries the e-way bill number.
| Reason | When | Δ |
|---|---|---|
job_work_out | Material sent out for job work (from shelf) | − |
job_work_move | WIP material relocated (already off-shelf) | 0 |
job_work_received / job_work_produced | Inward — same item back, or a made item | + |
job_work_loss | Written off at the vendor | 0 |
job_work_return | Issued challan cancelled, stock back | + |
Vendor-held stock is tracked per products/{id}/vendorStock/{vendorId}. Job-work receipt can gate on an incoming inspection.
The books (GL)
What posts to the ledger on the buy side.
With a chart of accounts set up, purchasing events auto-post journals (shadow, deterministic). In plain words: when goods arrive, the GRN adds their value to stock and parks the same amount in Goods Received Not Invoiced — "we have it, the supplier hasn’t billed us yet". The bill then clears that parking account and raises the real payable, and the payment clears the payable. A bill waiting for approval posts nothing until it is approved.
Goods received (GRN)
Vendor bill posted
Payment made
Expense
Debit note (return)
See the (upcoming) Accounting & Books guide for the ledger itself.
Quick reference
The tables to keep open while you learn.
Routes
| Screen | Route |
|---|---|
| Purchase Orders | /purchases |
| Requisitions | /purchases/requisitions |
| Vendor Bills | /purchases/bills |
| Payments Made | /purchases/payments |
| Debit Notes | /purchases/debit-notes |
| Expenses | /purchases/expenses |
| Suppliers | /purchases/suppliers |
| Delivery Challans | /purchases/delivery-challans |
Key states & codes
| Concept | Values |
|---|---|
| Purchase-order status | draft · submitted · approved · rejected · cancelled · partially_received · fully_received |
| Requisition status | Draft · Approved · Inquiry sent · Quotes received · Closed · Cancelled (plus a "Partly ordered" badge) |
| Vendor-bill status | open · partially_paid · paid · cancelled |
| ITC status | eligible · ineligible · reverseCharge · pending |
| Debit-note status | draft · finalised |
| Challan status | draft · issued · closed · cancelled |
| Payment modes | bankTransfer · upi · cash · cheque · other |
| Stock reasons (buy) | grn (+) · grn_qc_hold (+) · grn_qc_release (+) · subcontract_consume (−) · purchase_return (−) · job_work_* |
The GRN is the pivot. The requisition asks, the PO commits, the bill records the debt, the payment clears it — but only the goods receipt moves stock and sets cost. Everything else is paperwork around that one physical event.