Inventory Management
Add products, manage stock, generate barcodes, and track low-stock alerts — all from the Inventory page.
Adding products
Go to Inventory → Add Product. Each product has the following fields:
- Name (required) — the product name that appears on receipts and the POS search.
- Barcode — the EAN-13, CODE128, or any other barcode. Scan directly into this field with your scanner, type it, or click Generate to create an internal EAN-13 (see Barcode Generator below).
- Price / MRP (required) — the selling price. This is treated as the final price the customer pays (GST-inclusive if GST is enabled). GST is never added on top; it is only broken out on the receipt.
- GST Rate — select from 0%, 5%, 12%, 18%, 28%, or type a custom rate. Quick-select chips for common rates are shown. Optional — leave at 0% for non-GST items.
- HSN / SAC code — the Harmonised System / Services Accounting Code for the product. If you have imported the HSN/SAC reference data (Settings → Reference Data), this field autocompletes.
- Category — free-text with datalist suggestions from your existing catalog. Groups products in search and filtering.
- Unit (UQC) — standard Unit Quantity Code (PCS, KGS, LTR, BOX, etc.). Shown on receipts and snaphotted at sale time so it never changes retroactively.
- Stock quantity — current stock count. Decremented automatically on every sale.
- Discount % — a standing per-product discount percentage applied automatically every time this item is sold. Distinct from the per-sale discount on the POS screen.
- Description — optional internal notes; not shown on receipts.
Scanning to edit stock
On the Inventory page, scan a barcode to instantly jump to that product’s edit form. If the barcode is not in the catalog, the Add Product form opens with the barcode field pre-filled — the fastest workflow for onboarding new products at the counter.
Editing and deleting products
Click any row in the inventory list to edit. Changes to name, price, GST rate, and unit are not retroactive — existing invoices snapshot the values at the time of sale and are unaffected. Deleting a product is permanent; invoices that referenced it retain their snaphotted data.
Barcode generator
Products that arrive without a barcode (loose goods, house brands, repackaged items) can be assigned an internal code in one click:
- Open the Add Product form.
- Click Generate next to the Barcode field.
- A valid EAN-13 is produced using the
20–29GS1 internal-use prefix range. It is checked against your catalog for uniqueness and retried automatically if there is a collision. - Print a barcode or QR label for the product from the Inventory list (barcode icon on the row).
Barcode and QR labels
Click the barcode icon on any Inventory row to open the label modal. You can:
- Toggle between Barcode (EAN-13/CODE128) and QR code views.
- Click Print label to open a print-ready tab and trigger
window.print(). - Click Download PNG or Download JPG to save the label as an image.
All rendering is done client-side with jsbarcode / qrcode — no network call, works fully offline.
Low-stock alerts
The Sales Dashboard shows a low-stock alert list for any product whose quantity is at or below the low-stock threshold you set during onboarding (editable in Settings). Products with zero stock are highlighted separately.
Allow negative stock
Under Settings → Inventory → Allow negative stock, you can enable selling products whose stock count would go below zero. Useful when your stock counts lag reality (e.g. physical counts happen weekly) and you do not want the register to block sales. When enabled, the product’s stock is simply decremented past zero and shown in red on the Inventory page.
When disabled (the default), attempting to sell more than available stock shows an error at checkout.
Bulk product import
Admin users can import products from a CSV file via Settings → Reference Data. The expected columns are:
name, barcode, price, gstRate, hsnCode, category, unit, stock, discountPercentOnly name and price are required. The import replaces matching barcodes and inserts new rows — it is safe to re-import an updated file.