Home / Help Center / pos-app-garment / garment / Bulk Stock Count
📇 garment

Bulk Stock Count

Bulk Stock Count lets you scan or paste a whole batch of barcodes/SKUs at once — from a USB barcode scanner, an RFID reader acting as a keyboard, or a plain paste — and instantly compares the scanned counts against system stock, highlighting matches, discrepancies, missing items and unknown SKUs, with a one-click fix for any mismatch.

📍 Menu path: /garment/stock-count
👤 Who uses it: Owner,Manager,Staff

Overview

The core input is a single large text box: paste or scan barcodes/SKUs one per line (each scan from a barcode gun or RFID reader that emulates a keyboard adds a new line automatically), and the page counts duplicate lines as multiple units of the same SKU.

Clicking Compare with System Stock pulls up to 2,000 products and matches every scanned SKU against system stock, classifying each SKU as Match (scanned quantity equals system stock), Discrepancy (scanned but count differs from system), Missing from scan (in the system but not scanned at all), or Not in System (scanned but no matching SKU exists in Products).

Results are shown as four summary tiles (Matched, Discrepancies, Missing, Not in System) plus a full results table sorted with the most actionable rows first — Discrepancy, then Missing, then Not in System, then Match last.

A Fix N Discrepancies button updates system stock to match the scanned count for every row flagged as a discrepancy, in one confirmed action; an Export CSV button downloads the full results table (SKU, Product, System Stock, Scanned Qty, Variance, Status) for offline record-keeping.

Before You Start

Step-by-Step Guide

1 Run a bulk stock count

  1. Scan every item in a section with a USB barcode scanner or RFID reader — each scan appears as its own line in the Scanned Barcodes / SKUs box — or paste a prepared list of SKUs, one per line.
  2. Check the live "Lines" and "Unique SKUs" counters under the text box to confirm the paste/scan looks right before comparing.
  3. Click Compare with System Stock — the page fetches your product list and cross-matches every scanned line against it.

2 Review and act on the results

  1. Check the four summary tiles — Matched, Discrepancies, Missing, Not in System — for a quick read on how clean the count was.
  2. Scroll the results table (sorted with Discrepancies first) to see per-SKU System Stock, Scanned Qty, Variance (colour-coded green for over-count, red for under-count) and a status label.
  3. Click Fix N Discrepancies to update system stock to the scanned quantity for every Discrepancy row in one action (a confirmation prompt shows how many corrections will be applied) — the count is then automatically re-run so the table reflects the corrected state.
  4. Click Export CSV at any point to download the full comparison table for your records.

3 Start a new count

  1. Click Clear to empty the scan box and discard the current results before starting a fresh count on a different section.

Every Field & Button, Explained

Field / ButtonWhat it does
Scanned Barcodes / SKUs boxOne barcode/SKU per line; duplicate lines are tallied as multiple units of that SKU. Accepts direct scanner/RFID input or a pasted list.
Lines / Unique SKUs counterLive count of total lines entered and how many distinct SKUs that represents.
ClearEmpties the scan box and clears any existing comparison results.
Compare with System StockFetches up to 2,000 products and matches every scanned SKU against system stock quantities.
Matched / Discrepancies / Missing / Not in System tilesLive counts of each classification from the most recent comparison.
Fix N DiscrepanciesOnly shown when at least one Discrepancy exists; after confirmation, updates each discrepant product's stock to the scanned quantity, then re-runs the comparison.
Export CSVDownloads the full results table (SKU, Product, System Stock, Scanned Qty, Variance, Status) as a CSV file named with today's date.
Results table — Variance columnScanned Qty minus System Stock; positive (green) means more were scanned than the system expected, negative (red) means fewer.
Results table — Status columnMatch (✓), Discrepancy (⚠), Missing from scan (⬜, in system but not scanned), Not in system (?, scanned SKU has no matching product).

Tips & Best Practices

Troubleshooting & FAQ

A product I definitely scanned shows as "Not in System".
The match is a strict SKU string comparison against the Products list — check for typos, extra whitespace, or a barcode encoding a different code than the product's SKU field; also confirm the product still exists and hasn't been deleted or renamed.
"Fix Discrepancies" only updates some rows.
It only applies to rows classified as Discrepancy with a resolvable system product id — "Not in System" and "Missing from scan" rows are left untouched since there is no matching product (or no scanned data) to reconcile against; any row whose stock update request fails is also skipped and counted separately in the results toast.
The count seems to include items I didn't mean to scan twice.
Every line in the box counts as one unit, including exact duplicates — if your scanner or paste doubled up a line, remove the duplicate before comparing, or account for it when reading the Scanned Qty column.
Comparing fails outright.
This step calls the products endpoint to fetch inventory (capped at 2,000 records) — a network error or a very large catalog near or above that cap can cause it to fail or silently miss some products; check your connection and retry.

🧑‍💻 Developer Notes

Source component(s):

  • frontend-app/pos-app-garment/src/pages/garment/RFIDStockCountPage.jsx

Backend endpoints used:

  • GET /products
  • PUT /products/:id

Related tables (db-core repositories):

  • Product

Redux slices:

  • None — local component state only

Feature flag key: inventory

This is a garment-exclusive sidebar entry point, but it has no garment-specific backend at all: despite the component name RFIDStockCountPage and the "RFID" framing in its help text, it never calls any RFID/hardware API, and it does not call the generic /stock-counts routes mounted in backend/src/server.js (used by the shared StockCountPage feature on other variants) either. It is a fully self-contained, client-side reconciliation tool built on two plain endpoints: GET /products (capped at limit 2000) to read current stock, and PUT /products/:id with only a stock field to apply corrections one product at a time in a for-loop (no bulk-update endpoint). There is no persisted stock-count "session" or audit record on the backend — once you navigate away, the count and its results are gone unless you exported the CSV first. The CSV export function does not escape embedded double-quotes in product names, only wraps each field in quotes, so a product name containing a double-quote character would produce a slightly malformed CSV cell.