Bulk Pricing
Bulk Pricing is a catalogue-wide view of quantity-based price tiers — the same tiers you can set per-product inside the Products form, but gathered into one searchable table so you can see and manage every product's bulk/wholesale rates without opening each product individually.
Overview
This page is built directly on top of the generic Product Price Tiers system — anything you set here is exactly what the Price Tiers card inside a product's own edit form would show, and vice versa.
Every product that has at least one price tier appears as a row with all of its slabs shown as pills (e.g. "10–49 → ₹450" or "Contractor · 50+ → ₹420"), so you can audit your entire wholesale pricing at a glance instead of digging through products one at a time.
At billing, the POS automatically applies whichever tier's Min–Max quantity range matches the quantity being sold — cashiers never need to manually pick a tier.
Before You Start
- You need access to the Products section — Bulk Pricing is mounted generically for every pos-app variant and is not gated behind a plan tier.
- To scope a tier to a specific customer group (e.g. a Contractor price list) you must first create that group under Settings → customer groups; otherwise every tier applies to "All customers".
Step-by-Step Guide
1 Review existing bulk prices
- Open Bulk Pricing from the sidebar — every product that already has one or more price tiers is listed with its Base Price and all of its Bulk Slabs as pills.
- Use the search box to filter the list down to a specific product by name.
- Faded/translucent pills indicate a tier that has been marked inactive but not deleted.
2 Add bulk pricing to a new product
- Click "Add Bulk Price" to open the product picker.
- Type at least part of a product name to search; click a result to jump straight into its tier editor.
- Add one or more tiers: Tier Name, Min Qty, Max Qty (leave blank for no upper limit), Price, an optional Customer Group, and an optional Description.
- Click Save Tiers — the editor closes and the main list refreshes automatically to show the product's new slabs.
3 Edit or remove a product's bulk prices
- Click the edit (pencil) icon on any row to reopen its tier editor and adjust quantities, prices or the customer group.
- Click the delete (trash) icon to clear every bulk price tier for that product in one action — you will be asked to confirm first, since this cannot be undone from this screen.
Every Field & Button, Explained
| Field / Button | What it does |
|---|---|
Search products | Filters the bulk-pricing list by product name only (client-side, instant). |
Add Bulk Price | Opens a product-picker modal so you can start adding tiers to a product that does not yet have any. |
Product picker search | Server-side product search (debounced 250ms) used only inside the "Add Bulk Price" modal. |
Product column | Product name plus its base selling unit (e.g. "per kg") when set. |
Base Price column | The product's normal (non-tiered) selling price, shown for comparison against the bulk slabs. |
Bulk Slabs column | One pill per tier, formatted as "[Customer Group ·] Min–Max (or Min+) → Price"; faded pills are inactive tiers. |
Edit (row action) | Opens the same Price Tiers editor used inside the product form, scoped to this one product. |
Delete (row action) | Clears all price tiers for that product after a confirmation prompt. |
Tier editor: Tier Name / Min Qty / Max Qty / Price / Customer Group / Description | Identical fields to the Price Tiers card inside Products → Products; see that page for full field descriptions. |
Tips & Best Practices
- Use this page instead of the per-product Price Tiers card whenever you need to audit or bulk-adjust wholesale pricing across many SKUs — it saves you from opening each product one by one.
- Scope tiers to a Customer Group when a rate should only apply to specific customers (e.g. registered contractors) rather than to everyone buying in bulk.
- Leave Max Qty blank on your top tier so any quantity above your last defined slab still gets your best rate instead of falling back to the base price.
Troubleshooting & FAQ
A product I know has bulk pricing is not showing up in the list.
I deleted a product's bulk prices by mistake.
The cashier billed a bulk quantity but the base price was charged instead of my tier price.
🧑💻 Developer Notes
Source component(s):
frontend-app/packages/pos-react-lib/src/pages/products/BulkPricingPage.jsxfrontend-app/packages/pos-react-lib/src/pages/products/PriceTierManager.jsx
Backend endpoints used:
GET /products/price-tiers/allGET /productsPUT /products/:id/price-tiersGET /settings/customer-groups
Related tables (db-core repositories):
ProductPriceTierProductCustomerGroup
Feature flag key: billing
BulkPricingPage.jsx is a read/aggregate view over the same ProductPriceTier rows the per-product Price Tier Manager edits — it reuses the exact PriceTierManager component inside its edit modal, so there is only one price-tier editing implementation in the codebase, not two.