Chapter 2: Product Setup — 2.12 Virtual Stock
Use Virtual Stock to set daily quantity limits for products — useful for items you prepare fresh each day (e.g., only 50 croissants available per day). When the limit is reached, the product automatically shows as "sold out" on the POS and QR ordering page.
When to use this: When you need to allocate or view virtual stock levels across different outlets.

Virtual Stock displays a list of products with their virtual stock quantities per outlet. This feature is used primarily for:
| Concept | Description |
|---|---|
| Physical Stock | Actual inventory count (tracked by Inventory module via stock-in/out) |
| Virtual Stock | A separate number that represents "available for sale" quantity |
| Relationship | Virtual Stock operates independently from Physical Stock |
| Setting | When ON | When OFF |
|---|---|---|
| Use Virtual Stock | Online ordering uses virtual stock as the available quantity. When virtual stock reaches 0, the item shows as "Sold Out" online. | Online ordering uses physical stock (or unlimited if inventory tracking is off). |
| Filter | Type | Description |
|---|---|---|
| Outlet | Dropdown | Select the outlet to manage virtual stock for (e.g., "Bandung") |
| Category | Dropdown | Filter products by category (default: "ALL") |
| Product Type | Dropdown | Filter by product type (optional) |
| Search | Text Input | Search by product name or code |
| 🔍 Search | Button | Execute the search with current filters |
| Button | Style | Function |
|---|---|---|
| Reset To Default Value | Orange outline | Reset all virtual stock quantities in the current view back to their Default Qty values |
| Update All Items | Green outline | Apply changes to all modified items in the current view at once |
| Column | Description |
|---|---|
| Item No | Product code |
| Barcode | Product barcode |
| Item Name | Product display name |
| Current Qty | Current virtual stock quantity (editable — enter new value) |
| Default Qty | Default virtual stock quantity (used during reset) |
| Reset Every | Auto-reset frequency dropdown (e.g., Daily, Weekly, Monthly, Never) |
| ⬇️ (per column) | Blue arrow buttons — apply the column header value to all rows below |
| Last Updated | Timestamp of last virtual stock update |
[!NOTE] The ⬇️ blue arrow buttons below the Current Qty and Default Qty columns let you fill the same value down to all products in the grid. This is useful for setting the same virtual stock across all items quickly.




Expected Result: Virtual stock quantities are saved and reflected in stock reports.
Scenario: A restaurant uses QR ordering and wants to limit daily availability of a special dish.

[!TIP] Use the Reset Every dropdown to automate daily resets. For F&B operations, set
Dailyto reset virtual stock each morning based on the day's prep quantities. For retail, useNeverand manage stock manually.
| Role | View | Create | Edit | Delete |
|---|---|---|---|---|
| Admin | Yes | Yes | Yes | Yes |
| Supervisor | Yes | Yes | Yes | No |
| Cashier | No backend access | — | — | — |
[!NOTE] Exact permissions depend on the Privileges Setup configured for each role. Contact your administrator if you cannot access this page.
Expected Result: The virtual stock balance is updated and reflected on the POS after sync.
[!NOTE] Virtual stock is a display-only stock count for outlets that don't use full inventory management. It does not affect actual inventory movements.
Q: Why is my product not showing on the POS? A: The POS needs to sync first. Check Terminal Status to see the last sync time. Also verify the product is not deleted and is assigned to the correct outlet.
Q: Can I delete a product that has sales history? A: You can soft-delete it (it will be hidden from active lists and POS), but it cannot be permanently removed because it is linked to transaction records.
Q: How do I update prices for multiple products at once? A: Use the Data Importer > Product Importer to bulk update. Export the current list, modify prices in the spreadsheet, then re-import.
| Issue | Possible Cause | Solution |
|---|---|---|
| Cannot save the record | Required fields are empty or invalid | Check all fields marked with * and fill in valid data |
| Record not appearing in POS | POS terminal has not synced yet | Wait for the next sync cycle or manually trigger sync from Terminal Status |
| Cannot delete the record | Record is being used by other modules | Check if the record is linked to active transactions, products, or other settings |
| Changes not taking effect | Browser cache showing old data | Refresh the page (Ctrl+F5) or clear browser cache |
| "Duplicate" error on save | A record with the same name/code already exists | Search the list (including deleted records) for duplicates |
| Page not loading | Session expired or network issue | Log out and log back in. Check your internet connection |
[!NOTE] The following items may vary depending on your system version and configuration:
- Exact permission settings depend on your Privileges Setup configuration
- Sync timing to POS terminals depends on network conditions and sync schedule
- Some features may require additional licensing or module activation
- Field behavior may differ between EQuip versions
If you encounter behavior not described in this manual, contact your system administrator or EQuip support team.
| Field | Required | Description |
|---|---|---|
| Name / Title | Yes | The display name for this record |
| Status / Active | — | Whether this record is active in the system |
| Created Date | Auto | System-generated creation timestamp |
| Modified Date | Auto | System-generated last modification timestamp |
[!NOTE] Additional fields specific to this page are documented in the sections above. The table above shows common fields present across most pages.