Manage Price Lists
As an operator, you will create and maintain price lists — special sales or purchase rates for a customer, vendor, or tier — that override the default item price when you build a document.
What you'll accomplish
As an Operator, you will create and maintain price lists — special sales or purchase rates for a customer, vendor, or tier — that override the default item price when you build a document.
Before you start
Price lists are managed at /[lang]/price-lists. This screen is a table-based manager (create / edit / delete), consistent with Products and Customers — it is not the master-detail list-shell used by invoices and quotations. Each price list has a name, a type (Sales or Purchase), a scope (All / Customer / Vendor / Tier), a currency, and a set of per-product rate rows. Rates are entered in display units and converted to satang at the mutation boundary. The screen requires the canViewProducts permission.
Compliance Note
A price list is reference data, not an accounting entry. It changes which rate a document picks up; it never debits or credits anything on its own. Money is stored in satang so the resolved rate and the document agree exactly.
Steps
Open price lists
Go to /[lang]/price-lists. The table shows existing lists with their name, type, scope, currency, item count, and status.

Create a price list Click New price list. In the editor dialog, name it, choose Sales or Purchase, set the scope (and the specific customer/vendor/tier where applicable), and pick the currency.

Add per-product rates Add product rows and enter the overriding rate for each. Save — the rates are stored in satang and the list becomes available to documents in its scope.

What happens behind the scenes
There is no journal entry. priceLists/mutations.ts (create / update / remove) stores the list and its per-product rates as satang. When a document is built, priceLists/resolver.ts (surfaced through priceLists/queries.ts:resolveRate) resolves the applicable rate for a product given the customer/vendor/tier scope, overriding the item's default price. The GL effect appears only later, when the document that used the resolved rate is issued — and it is identical to any other invoice or purchase posting.
Common problems
- No matching scope: If no price list covers a product/scope, the document falls back to the item's default rate.
- Wrong type: A Sales list does not apply to purchase documents (and vice versa).
- Currency mismatch: A list's currency should match the document currency for the override to apply cleanly.
- Permissions: Without
canViewProductsthe screen is not accessible. - Not an accounting change: Editing a price list does not alter any already-posted document.
Quick Sale
As an operator, you will ring up a fast cash-and-carry sale, issue an instant receipt, and have the cash and revenue post immediately — tagged to your counter session so the shift reconciles.
Quotation to Invoice
As an operator, you will raise a quotation, move it through its lifecycle, and convert an accepted one into a draft tax invoice — so agreed prices flow straight into a receivable without re-keying, and revenue is recognised only once the invoice is issued.