Inventory
Use Price Settings for Bulk Margin and Price Changes
Price Settings is where an owner or manager changes many item prices at once, with preview checks, MRP/cost safeguards and history.
- Menu path
- Inventory -> Price Settings
- Verified from
- Posnic demo and current POS source reviewed on 2026-09-08
Technical source evidence
Live local POS Inventory -> Price Settings audited 2026-09-10, frontend/modules/priceSettings.html, frontend/static/script/js/modules/js/report_pricesettings.js, api/src/repositories/item.repository.js calculations, safeguards and audit storage, items/marginPreview, items/bulkSetMargin, items/bulkPricePreview, items/bulkUpdatePrices, items/bulkPriceHistory
Before You Change Prices
Bulk price changes affect customer bills, labels, margin and owner trust. Use this screen only after item cost and MRP are reviewed.
- Check that item cost prices are current. Margin cannot be honest when cost is missing.
- Check MRP where the shop must not sell above maximum retail price.
- Decide whether the change applies to all items or one category.
- Run Check immediately before Apply or Update so the current changed and exception counts are visible.
- Make the change outside a busy counter shift when possible.
Set Margin
- Open Inventory -> Price Settings.
- Stay on the Set Margin tab.
- Choose Which items: All items or One category.
- If One category is selected, choose the category.
- Enter the target Margin percent.
- Choose what the percent means: Margin (% of selling) or Markup (% on cost).
- Leave Skip items whose new price would go above MRP enabled unless the owner approves otherwise.
- Click Check.
- Review how many items would change, how many have no cost price and how many would exceed MRP.
- Click Apply margin only when the preview is acceptable.
- Open the History tab and confirm the run was recorded.
Check Is a Dry Run, Not an Approval Lock
Check calculates a preview without writing item prices. Apply margin and Update prices are still available without a preview, and a preview is not bound to the form: changing a field, category or value does not invalidate the old result on screen. Another user can also edit items after the check.
- Set every control first, then click Check as the final review action.
- Read the scope, field, direction, method, value and safeguard again before applying.
- If any control changes, run Check again even if the previous result remains visible.
- The preview shows aggregate counts, not a reviewable list of every item or old/new price.
- In Custom Change, each displayed violation count is capped at 100 by the current implementation; treat 100 as at least 100, not necessarily the full total.
- For a high-risk all-item change, export or inspect the catalog before and after the run.
Custom Change
Custom Change raises or lowers a selected price field for many items at once by percent or amount.
| Field | Options | Use |
|---|---|---|
| Which items | All items or One category | Scope the change so unrelated products are not touched. |
| Price to change | Selling Price, MRP, Cost Price | Pick the business value that really changed. |
| Direction | Increase or Decrease | Match the price decision exactly. |
| By | by % or by amount | Use percent for broad rises, amount for fixed corrections. |
| Skip safety | Above MRP or below cost | Keep enabled for normal owner-controlled changes. |
How Custom Changes Are Calculated
A percentage is calculated from each item's current value in the selected field; an amount adds or subtracts the same currency amount from every matched item. Results are rounded to two decimal places, and a decrease never produces a value below zero.
| Example | Result | Meaning |
|---|---|---|
| Selling Price 100, increase 10% | 110 | Adds 10% of that item's current selling price. |
| MRP 80, decrease by amount 5 | 75 | Subtracts the fixed amount from MRP. |
| Cost Price 20, increase 7.5% | 21.50 | Updates cost only; selling price is not recalculated. |
| Selling Price 3, decrease by amount 10 | 0 | The value is floored at zero, not made negative. |
| Any field, change 0 | No change | Matched items whose rounded result equals the old value are not updated. |
Understand the Safety Checkbox
The safeguard evaluates the complete price relationship after the proposed field is changed. It skips an item when Selling Price would be above a positive MRP or below a positive Cost Price. A zero or missing MRP/cost does not enforce that particular rule.
| Field changed | Possible violation | Example |
|---|---|---|
| Selling Price | Above MRP or below Cost Price | Raising selling can cross MRP; lowering it can cross cost. |
| MRP | Existing Selling Price becomes higher than the new MRP | Lowering MRP can make an unchanged selling price invalid. |
| Cost Price | Existing Selling Price becomes lower than the new cost | Raising cost can reveal a loss-making selling price. |
| Set Margin | Calculated Selling Price is above MRP | Items without cost are separately left unchanged. |
Audit the History Tab
The History tab lists successful bulk runs that changed at least one item, newest first, with 15 rows per page. It is scoped to the signed-in license, not the active branch, so an owner may see runs affecting another branch. A category run is labelled one category but the category name is not shown.
- Open History after each successful run.
- Confirm the changed-by user is the person who approved the change.
- Review Items Changed and Skipped before printing labels or selling at the new price.
- For Set Margin, Items Skipped counts MRP safeguard skips; items with no cost are reported when applying but are not included in that history count.
- Each changed item also receives an item-level Price History row linked to the bulk batch.
- A zero-change run creates no batch-history row.
- If the wrong scope was used, stop selling those items and correct prices before the next queue.
Margin and Markup Are Different
The Set Margin tab calculates from each item's Cost Price. Items without a usable cost are left unchanged. Margin must be below 100%; markup may be 100% or higher.
| Mode | Formula used | Example with cost 60 and 40% |
|---|---|---|
| Margin (% of selling) | Selling = cost / (1 - margin / 100) | 100 |
| Markup (% on cost) | Selling = cost x (1 + markup / 100) | 84 |
After Applying a Price Run
- Read the success message and record Updated, total matched, skipped and no-cost counts where shown.
- Open History and confirm the user, time, operation, Changed and Skipped values.
- Open representative items from the affected scope and verify Selling Price, MRP and Cost Price together.
- Check a low-price item, a high-price item, an item near MRP and an item near cost.
- Run a test sale without completing it to confirm the selling price presented at the counter.
- Print replacement barcode or shelf labels only after the checks pass.
- Tell active tills and branches when the new prices take effect.
Correct a Wrong Bulk Change
Price Settings has no one-click undo. Do not assume that applying the opposite percentage restores the original value: a 10% increase followed by a 10% decrease leaves 99% of the starting price, before rounding.
- Pause sales of the affected items when the error can overcharge customers or sell below cost.
- Open History and identify the exact run, operator, scope, field and value.
- Use item Price History or a pre-change export to recover the original values.
- For a uniform amount error, use a carefully checked opposite amount only when no later edits occurred.
- For percentage, mixed or partially skipped changes, restore exact item values individually or with a controlled import/update process.
- Recheck the catalog, counter price and labels, and retain both audit runs with the incident record.
Common Mistakes
| Mistake | What happens | Fix |
|---|---|---|
| Cost price is empty | Margin preview leaves the item alone. | Update item cost or receive stock with a proper purchase cost. |
| Old preview left on screen | The displayed counts can describe earlier controls or earlier data. | Run Check again immediately before applying. |
| Wrong category selected | Only that category changes, but History does not name it. | Use item Price History and the catalog to identify and correct affected items. |
| Skip is disabled | Prices may go above MRP or below cost. | Use only with owner approval and verify sample items immediately. |
| Preview count treated as an item list | The screen does not show which individual items will change. | Inspect/export the scope and spot-check known boundary items. |
| No history row expected after zero change | Runs with no updated items are not stored in bulk history. | Confirm the message and correct scope/value before trying again. |
| Labels are printed before review | Shelf price and POS price may conflict. | Spot-check item prices and a test cart before printing barcode labels. |
Permissions and Troubleshooting
| Problem | Likely reason | Action |
|---|---|---|
| Price Settings will not load | Session, branch context or item read access is unavailable. | Reload, confirm the active branch and ask an administrator to review Item access. |
| Apply or Update is rejected | The employee can read items but does not have Item write access. | Use an authorized owner or manager account; do not share credentials. |
| One category asks for a category | Category scope was selected without choosing a category. | Select the intended category and run Check again. |
| Margin is rejected | Margin mode must be below 100, or the value is blank/negative. | Use a valid non-negative value; use Markup when 100% or more is intended. |
| Fewer items changed than matched | Same rounded prices, no-cost items or enabled safeguards left rows unchanged. | Compare the preview and success counts, then inspect boundary items. |
| No items matched | The active branch/category scope contains no eligible items. | Confirm branch and category; no prices or history rows were written. |
| History looks empty | No successful run has changed an item for this license yet. | Apply only an approved change, then reload History. |
| Counts or prices changed after Check | The form or catalog changed after the dry run. | Cancel the decision, review the current controls and run Check again. |