Purchasing Module
Purchasing in BigLedger is a chain of documents tied together by knock-off: a requisition is knocked off into an order, the order into a receipt, the receipt into the supplier’s bill, and the bill is settled by a payment. Each link copies the previous document’s open lines forward and reduces what is still outstanding. Nothing in the chain compares the numbers for you, and only two of the documents move stock.
Applets in this module
Membership is an editorial judgement — the product has no module↔applet relationship in its data —
and it is written down in planning/specs/module-applet-membership.md rather than left to the
folder each page happens to sit in. Purchasing owns 26 applets; 24 are documented and two are not
yet (see the end of this list). One applet the module cannot work without,
Purchase Invoice (Internal), is filed under
Financial Accounting because it is the accounts-payable document; it is listed here as well because
the person raising it is in a purchasing process.
Deciding what to buy
| Applet | What it is for |
|---|---|
| Purchase Requisition (Internal) | The internal “we need to buy this” — item, quantity, branch, preferred supplier. Record only. The one purchasing document, with the order, that can carry an approval |
| Purchase Quotation (Internal) | A supplier’s quoted price recorded as a document, so it can be compared and later pulled into an order. Record only |
| Blanket Purchase Order | A long-term agreement — validity window, items, agreed prices and quantities — that orders are drawn down from. It orders nothing itself |
| Purchase Order (Internal) | The commitment to buy. Finalising it opens its lines for the receipt and the invoice to knock off. Also home to the open-order queue, the ordered-versus-received reports, multi-order entry and stock-driven replenishment |
Receiving
| Applet | What it is for |
|---|---|
| Purchase GRN (Internal) | The record that goods arrived and were counted. Moves nothing and posts nothing — it knocks the order down and queues itself for the invoice |
| Purchase GRN Stock In (Internal) | The receipt that does book stock, and accrues the supplier liability as goods-received-not-invoiced. The other half of its pair is Purchase Invoice No Stock In |
| Purchase GIN (Internal) | A goods-issue note toward a supplier. A dispatch record only: no stock movement, no journal. The document that really sends goods back is the Purchase Return |
Billing, paying and adjusting
| Applet | What it is for |
|---|---|
| Purchase Invoice (Internal) | The supplier’s bill. In the standard flow this is the document that books the stock and creates the amount you owe |
| Purchase Invoice No Stock In (Internal) | The supplier’s bill when the stock was already booked by a GRN Stock In. Posts the money and clears the accrual; touches no stock |
| Payment Voucher (Internal) | Money leaving the bank, contra’d against the invoices it settles. Filed under Financial Accounting |
| Purchase Return (Internal) | Goods going back. Takes them out of stock and debits the supplier |
| Purchase Debit Note (Internal) | Reduces what you owe a supplier — an overcharge, a rebate, a short delivery. Amounts only |
| Purchase Credit Note (Internal) | Increases what you owe — it posts on the same side as an invoice. Read the direction twice before using it |
| Purchase Refund Note (Internal) | A supplier giving value back after an invoice, with its own settlement lines. Since April 2026 it behaves like a return: stock out, supplier balance down |
Consignment from a consignor
Stock a supplier places with you and still owns. Four of the six documents live here; the two that move the stock are filed under Inventory.
| Applet | What it is for |
|---|---|
| Consignment Purchase Order (Internal) | Your request to a consignor to place stock with you. Record only |
| Consignment GRN (Internal) | The consigned stock arriving: stock in, and a consignment-stock / consignment-liability journal instead of a purchase |
| Consignment GIN (Internal) | Consigned stock leaving again, without a sale |
| Consignment Return (Internal) | Reverses the value the consignment GRN booked. Moves no stock |
| Consignment Billing (Internal) | The consignor’s bill for what sold — a purchase invoice that also clears the consignment holding. Filed under the sales folder by its name; it is a purchase document |
| Consignor Purchase Billing (Internal) | A period record of what became billable per consignor. Its own tables; no journal, no stock, no creditor balance |
Reporting
| Applet | What it is for |
|---|---|
| Purchase Report | Two reports over finalised purchase invoices, no-stock-in invoices and returns: by document and by item code |
What you owe suppliers, by age, is in the Creditor Report, under Financial Accounting. See Reports for what exists and what does not.
The supplier’s window
Seven applets show a supplier, signed in with a login linked to their supplier record, the documents you have raised on them. Six are read-only copies of the buyer’s applets; the seventh lets the supplier raise delivery orders.
| Applet | The supplier can |
|---|---|
| Purchase Order Supplier Access (Internal) | Read FINAL orders raised on them, advance the order’s workflow status, export a PDF, import orders from CSV, run a PO-versus-GRN report |
| Purchase GRN Supplier Access (Internal) | Read FINAL receipts posted against them and export a PDF |
| Purchase Invoice Supplier Access (Internal) | Read FINAL invoices posted against them |
| Purchase Credit Note Supplier Access (Internal) | Read FINAL credit notes raised against them |
| Purchase Return Supplier Access (Internal) | Read returns raised against them, at any status |
| Blanket Purchase Order Supplier Access | Read the blanket agreements on them and run two supplier-scoped reports |
| Supplier Delivery Order | Create outbound delivery orders on the tenant and register their drivers. Note that the document it writes is the tenant’s ordinary outbound delivery order — it moves no stock and sits in no purchase chain |
All seven resolve the signed-in user through the Supplier Login tab of the Supplier applet. Without that link the supplier can sign in and sees nothing.
Reconciling supplier e-Invoices
Two applets that read the chain rather than add to it. They belong as much to E-Invoice as here.
| Applet | What it is for |
|---|---|
| AP Automation | Reads supplier e-Invoices — OCR of e-mailed or uploaded PDFs, or Peppol receptions — and matches them by delivery-order number against your purchase order, the supplier’s delivery note and your GRN, recording document and value matching, the amount difference and a payment-status label. This is the nearest thing the module has to matching, and it matches e-Invoices to receipts, not purchase invoices to orders; it posts nothing and gates nothing |
| AP Automation Supplier Access | The supplier’s window on the same rows, scoped by a Consolidated Arap group rather than the Supplier Login link, where they explain unmatched cases and set an action deadline |
Which documents actually move stock, and which post
A document moves stock only if its server document type carries a non-zero quantity signum; it reaches the general ledger only if it carries a non-zero amount signum. Both are fixed in the backend per document type, are not settings, and overwrite whatever the applet sends.
flowchart LR
subgraph NONE["Quantity 0 · Amount 0 — record only"]
PR["Purchase Requisition"] --> PQ["Purchase Quotation"]
PQ --> PO["Purchase Order"]
BPO["Blanket Purchase Order"] --> PO
PO --> GRN["Purchase GRN"]
GIN["Purchase GIN"]
CPO["Consignment Purchase Order"]
end
GRN -->|knock-off| PI
PO -->|knock-off| PI
PO -->|knock-off| GRNSI
subgraph MOVES["Moves stock and posts"]
PI["Purchase Invoice<br/>qty +1 · amt −1<br/>Dr Purchase, Dr Input Tax / Cr Creditor"]
GRNSI["Purchase GRN Stock In<br/>qty +1 · amt −1<br/>Dr Inventory Not Invoiced / Cr Creditor Not Invoiced"]
RET["Purchase Return<br/>qty −1 · amt +1<br/>Dr Creditor / Cr Purchase Return"]
RFN["Purchase Refund Note<br/>qty −1 · amt +1"]
CGRN["Consignment GRN<br/>qty +1 · amt −1<br/>Dr Consignment Stock / Cr Consignment Liability"]
CGIN["Consignment GIN<br/>qty −1 · amt +1"]
end
GRNSI -->|knock-off| PINSI
subgraph MONEY["Posts, moves no stock"]
PINSI["Purchase Invoice No Stock In<br/>qty 0 · amt −1<br/>Dr Purchase / Cr Creditor, then<br/>Dr Creditor Not Invoiced / Cr Inventory Not Invoiced"]
PDN["Purchase Debit Note<br/>qty 0 · amt +1<br/>Dr Creditor / Cr Purchase"]
PCN["Purchase Credit Note<br/>qty 0 · amt −1<br/>Dr Purchase / Cr Creditor"]
CRET["Consignment Return<br/>qty 0 · amt +1"]
CBILL["Consignment Billing<br/>qty 0 · amt −1"]
PV["Payment Voucher<br/>Dr Creditor / Cr Bank"]
end
Four things this module is often believed to do, and does not
There is no three-way matching engine. No tolerance band, no variance report, no block when a supplier bills a different price or quantity than you ordered. Knock-off copies the order’s or the receipt’s real lines onto the invoice; comparing them with the supplier’s paper is a person’s job, and the moment to do it is before FINAL. The Purchase Invoice applet’s Knock Off Settings screen exists but is read by nothing — its switches appear nowhere in the backend, and in the applet layer only on the unlinked screens that write them.
Approvals do not gate anything. The document-approval engine covers three document types — Purchase Order, Purchase Requisition and Stock Requisition — is off until a tenant creates an Approval Setting, and when the last approver signs it causes FINAL. It never blocks FINAL: an order with a request still pending can be finalised by hand. There is no approval at all on receipts, invoices, payment vouchers, returns, credit or debit notes. Your control over those is who holds the finalise permission.
A plain GRN does not accrue goods-received-not-invoiced. The GR/IR (Goods Received / Invoice Received) accrual — Dr Inventory Not Invoiced / Cr Creditor Not Invoiced — is posted by GRN Stock In, and cleared by the No Stock In invoice that knocks it off. A plain GRN posts nothing, so on the standard pair there is no accrual to reconcile; the exposure between delivery and bill is stock that is on the floor and not yet in the ledger.
A supplier’s credit limit and credit terms are records, not rules. The Supplier applet stores purchase credit limits and credit terms; nothing in the backend reads the purchase limit, and no purchase document type is checked against it. Credit terms drive a due date that the applet computes and the server stores — the server itself computes no due date. The only credit hard-stop in the product is the sales-side blacklist, and it covers four sales document types.
What this module needs from others
| Module | What it supplies |
|---|---|
| Core | Supplier — the supplier record, whose AR/AP type decides which creditor account every purchase document credits, plus credit terms, item prices and the Supplier Login tab. Doc Item Maintenance — the item you buy, its link to an inventory item (only linked lines reach stock), the Consignment Item flag. Organization — companies, branches, locations, and the company Knock Off Configuration that decides which document can knock off which. Chart of Account — the company default GL codes every posting resolves against. Tax Configuration, Forex, Pricebook |
| Financial Accounting | The bill and the payment — Purchase Invoice (Internal), Payment Voucher (Internal) — and where you read the result: Creditor Report, Debtor and Creditor Report, Ledger And Journal |
| Inventory | Stock Availability — where a finalised-but-not-invoiced plain GRN shows as GRN quantity; Stock Balance; Stock Replenishment, which raises purchase orders from minimum and maximum levels; the two consignment stock documents |
| E-Invoice | Self-billed e-Invoices: a purchase invoice, return, credit or debit note flagged self-billed is picked up by MY E-Invoice Portal after FINAL. Once a company’s e-Invoice status is enabled, purchase invoices can no longer be voided from the applet |
Where to go next
User guides: Standard Procurement Workflow · Direct GRN Workflow · Direct Invoice Workflow · Invoice-First Workflow · Consignment Purchasing · Document Approvals