Inventory
Update Stock in Bulk by Quantity or Percentage
Bulk Stock Update applies one approved formula to many matching items. Preview the scope first because a completed run has no one-click undo.
- Menu path
- Inventory -> Items -> Tools -> Bulk stock update
- Verified from
- Posnic demo and current POS source reviewed on 2026-09-08
Technical source evidence
Live local POS Bulk stock update dialog and dry-run preview audited on 2026-09-10, frontend/modules/items.html bulk_stock_modal, frontend/static/script/js/modules/js/items.js openBulkStock, readBulkStockForm, checkBulkStock and submitBulkStock, api/src/controllers/items.controller.js bulkStockPreview, bulkUpdateStock and getBulkStockUpdates, api/src/repositories/item.repository.js _bulkStockParams, previewBulkUpdateStock, bulkUpdateStock and getBulkStockUpdates
Use Bulk Update Only When One Rule Fits Every Item
The operation recalculates every item in the selected branch/license scope, or every matching item in one category. It is appropriate only when the same addition or removal genuinely applies to that whole set.
| Situation | Correct workflow | Reason |
|---|---|---|
| Every item in one approved category received the same extra quantity | Bulk stock update -> One category -> Add by quantity | One identical change fits the selected category. |
| A documented proportional shrinkage applies to a category | Bulk stock update -> One category -> Remove by % | Each item changes relative to its current quantity. |
| A physical count produced different final totals per item | Stock adjustment -> Inventory count | A bulk formula cannot represent individual counted totals. |
| A supplier delivery contains different item quantities | Purchase / receiving | Preserves supplier, invoice, cost, tax and payment evidence. |
| Only a few named items need different corrections | Stock adjustment | Keeps each item's quantity and reason reviewable before submit. |
| A sale, return or purchase was wrong | Correct the source transaction | Avoids hiding the original business error with inventory movement. |
Understand the Four Calculations
- Results are rounded to two decimal places, so fractional quantities remain possible.
- A percentage is calculated separately from each item's current stock; it is not a percentage of one shared total.
- Removing more than the available quantity stops at zero and never creates negative stock.
- A zero value is accepted but produces no changed rows.
| Selection | Calculation | Example from stock 20 |
|---|---|---|
| Add by quantity 5 | Current stock + 5 | 25 |
| Remove by quantity 5 | Current stock - 5, with a zero floor | 15 |
| Add by 10% | Current stock + 10% of current stock | 22 |
| Remove by 10% | Current stock - 10% of current stock | 18 |
Preview and Apply a Bulk Stock Change
- Obtain manager approval and record the business reason before opening the tool.
- Open Inventory -> Items -> Tools -> Bulk stock update.
- Choose All items or One category. For One category, select the exact category from the category list.
- Choose Add or Remove.
- Choose by quantity or by %, then enter a non-negative value.
- Enter a concise Note / reason, up to 500 characters, with a count sheet, incident, campaign or authorization reference.
- Click Check. This is a dry run and does not write any quantity.
- Review how many items match, how many would actually change, and the first five displayed before-and-after samples.
- Recheck the scope, direction, unit and value. Click Update stock only when all four are correct.
- Wait for the success message and refreshed item table before navigating away or repeating the action.
Read the Check Preview Correctly
Check reports changed items separately from matched items. An item can match the scope but remain unchanged when the formula returns its existing quantity, such as adding a percentage to zero stock or using a zero value.
- The dialog displays up to five sample items even though the server prepares a larger internal sample.
- The remaining changed count appears as and N more; it is not a list of skipped errors.
- Check is not an approval lock. Reopening or editing the form changes the proposed operation, so run Check again after any change.
- For All items, treat an unexpectedly large total as a stop signal and verify the active branch and intended scope.
Check Is a Dry Run, Not a Submission Lock
The current dialog does not require Check before Update stock. It also does not bind the displayed preview to the final submission or automatically clear it when every form control changes. Update stock reads the form again and the server recalculates against quantities that exist at submission time.
- Always run Check after the final scope, category, direction, unit and value are selected.
- If any control or value changes after Check, ignore the old blue preview and run Check again.
- Pause the run when sales, receiving or another stock process is changing the same items; those changes can make the preview stale.
- The Note is not part of the quantity calculation, but it is copied to the batch record and tracked-item movements, so finalize it before Update stock.
- Update stock is the write action. Check only reads and calculates; Cancel closes without applying the proposal.
Know Exactly What Is Updated
The server limits matching items to the signed-in license and active branch access. Applying the run requires Item write permission; preview and history require Item read permission.
| Item condition | Available quantity | Per-item Inventory Log |
|---|---|---|
| Matching item with Track inventory enabled | Changed when the formula produces a new value. | A Bulk Stock movement is attempted with note, user, opening and closing quantity. |
| Matching item without Track inventory | Still changed when the formula produces a new value. | No per-item movement is written. |
| Formula returns the current value | Not changed. | No movement is written. |
| Item outside active branch/license scope | Not matched or changed. | No movement is written. |
Audit the Completed Run
A successful run that changes at least one item creates a batch audit record containing scope, category, operation, direction, value, note, matched and changed counts, user and time. Each changed tracked item separately receives a movement with process Bulk Stock. The current Items UI does not expose the stored batch-history list, so operators must use the success message and Inventory Logs for visible verification.
- Record the success message's changed and matched totals in the stock-control evidence.
- Open Inventory -> Inventory Logs and inspect representative tracked items from the preview.
- Confirm Process or Reason is Bulk Stock, and compare opening, change and closing quantities.
- Confirm the note and operator identify the approved run.
- Do not tell staff to look for a Bulk Stock History tab in Items; no such screen is present in the current interface.
- The application stores a license-level batch record for system/API audit use, but the visible per-item ledger remains branch scoped.
- Remember that disabling branch stock-balance display can make log balances read N/A; the log row is still attempted for tracked items.
Understand Empty and Zero-Change Results
| Result | Meaning | Operator action |
|---|---|---|
| 0 of N item(s) would change | The scope matched items, but the formula returns their current quantities. | Do not submit merely to create evidence; correct the value or cancel. |
| No items matched | The active branch/category scope contains no matching items. | Confirm the branch and category; no batch audit row is created. |
| Updated stock for 0 of N item(s) | The submitted formula caused no quantity changes. | Do not repeat blindly; review the formula and current quantities. |
| Updated stock for X of N item(s) | X current quantities changed; N is the matched scope at submission time. | Compare these counts with the final preview and investigate any difference. |
Recover from a Wrong Bulk Update
There is no one-click undo. Do not blindly apply the opposite percentage: adding 10% and then removing 10% does not return to the original value.
- Stop further stock changes and preserve the run's scope, direction, value, note, user and time.
- Use Inventory Logs and the original count or authorization record to identify affected items and original balances.
- Physically count the affected stock when the correct final quantity is uncertain.
- Use Stock adjustment -> Inventory count to set verified final totals item by item.
- Use a clear correction reason and reference the mistaken bulk run in the note.
- Review untracked items separately because they may have changed without per-item Inventory Log movements.
Acceptance Check
- The same formula is valid for every item in the selected scope.
- All items versus One category, Add versus Remove, and quantity versus percentage were each checked deliberately.
- Check was run after the final form change and its matched, changed and sample values were reviewed.
- The note identifies why and who approved the run.
- The success count and representative item quantities match the preview.
- Tracked item movements were verified in Inventory Logs and untracked items were accounted for separately.