Operation — procurement, stock, production, delivery
The document loop
Purchase Request (PR) → sourcing & price comparison → approval → Purchase Order (PO) → Goods Receipt (GR) → stock → Work Order (WO) consumes materials → finished goods → Delivery Note (DN) ships them. Every step posts real quantities and real costs, and everything settles into Job Control — so "what did this job actually cost?" always has an answer.
Purchase Requests
Anyone with pr.create raises a PR: pick products (searchable, with per-warehouse stock shown inline), quantities, and either a Job (cost goes to that job) or Stock (replenishment). Engineers get a deliberately slim form; procurement fills in the commercial detail during sourcing.
Sourcing & the price comparison. Procurement collects vendor quotes on the PR's Comparison tab — one column per vendor, per-line prices, availability, lead time, MOQ and payment terms, with the cheapest line highlighted and quote PDFs attached to each column. Domestic mode compares plain THB; international mode ranks by landed cost (goods + freight + duty + fees), so a cheaper FOB price that loses after duty is visible before you commit. Award per line or per vendor; awarding writes the vendor and price back onto the PR lines.
Approval follows your role setup; material changes after approval automatically send the PR back for re-approval.
Purchase Orders
Generate POs from an approved PR (grouped by vendor automatically), or consolidate approved lines across several PRs to the same vendor into one PO from the Consolidate worklist. Foreign POs carry currency, FX rate, Incoterm and the import cost card: freight, insurance, customs clearance, duty by HS code, and import VAT (tracked as recoverable — it never inflates your stock cost). Landed cost allocates to lines by value or weight and follows the goods all the way into inventory.
Auto-PO: products with a preferred vendor and a dated agreed price can generate draft POs automatically when stock hits the reorder point — drafts only, never auto-submitted, and a stale price blocks the shortcut so nobody orders at last year's number.
Goods Receipts and stock
Receive against a PO line-by-line, per-line warehouse, with over-receipt tolerance and QC hold (quarantined stock that can't be issued until released). Posting a GR writes stock at the PO's landed unit cost into the average-cost (AVCO) ledger. Serial numbers and lots are captured at receipt when the product requires them, and every movement — receipt, issue, adjustment, transfer — is a signed ledger entry you can audit at Inventory → Movements.
Work Orders
A WO takes a product with a BOM (multi-level, with per-product costing overrides and UoM conversions), reserves or issues materials from chosen warehouses — including consume-in-place from a subcontractor's warehouse — and posts finished goods at actual material cost. The lifecycle: draft → released (planned cost snapshot taken) → in progress (issue materials, log routing operations) → completed (backflush, QC hold if flagged, genealogy recorded so a finished serial traces back to its component lots). Late WOs flag on the board; variance vs the release-time plan shows on the WO itself.
Shortages don't block: the availability panel warns, and pooled shortages can raise one draft PR per vendor from the shortage basket.
Delivery Notes
DNs pick from stock (serial/lot enforced when tracked), pack at the /pack kiosk (barcode-driven), issue (stock out), and record proof of delivery — photo, signature, timestamp. Partial shipment is per line. Cancelling or reverting at any stage puts stock and reservations back exactly where they were.
Job Control — where cost lands
Every GR (job purchases), WO (production cost), DN (materials delivered), service PO and expense claim settles to its Job Control. The JC page shows a budget bar and tabs for every document that touched the job — cost by category (materials, services, expenses), committed vs actual, and profitability once you enter the contract value. This is the number your accountant asks for at month end, live all month.