TotalApp Docs

Inventory Management

Real-time stock tracking with AI demand forecasting, SKU search, and movement logs.

Overview

Inventory Management is the source of truth for all physical stock in your warehouse. It tracks real-time stock levels for every SKU, records every movement with a full audit trail, surfaces low-stock alerts before you run out, and provides an AI-powered demand forecasting panel that tells you which SKUs to reorder and when.

Ctrl+K Global Search

Press Ctrl+K anywhere to open an instant search overlay. Type a SKU code, product name, or category. The matching row highlights and scrolls into view immediately.

AI Demand Forecasting

The Predict Restock Dates panel calculates velocity per SKU and ranks urgency. Items needing immediate reorder are flagged red; monitoring items are flagged blue.

10-Period Sparklines

Each inventory row displays an SVG sparkline of the last 10 stock history periods. Green lines are trending up; red lines are declining — spot trouble at a glance.

Movement Log

The 8 most recent stock movements are always visible: in, out, and adjustments — each with actor, delta, product name, notes, and a relative timestamp.

Quick Start

  1. Switch to Warehouse mode (or Project Management mode — this screen is visible in both) using the mode switcher in the header.
  2. Click Stock & Inventory in the left sidebar.
  3. The inventory table loads with all active SKUs. Use the filter tabs to narrow by status.
  4. Press Ctrl+K at any time to instantly jump to any SKU by name, code, or category.
  5. Click the Predict Restock Dates button in the right sidebar to run AI demand forecasting across your entire catalog.

Keyboard Shortcut

Ctrl+K works everywhere on the page — you do not need to click a search box first. It is the fastest way to find a specific SKU in a large catalog. Press Escape to dismiss the overlay without navigating.

Adding a New Product

Click Add Product in the header bar (next to Export/Import) to create a brand-new SKU directly from this screen — no need to switch to Purchasing. The form asks for name, SKU, category, and cost price only.

New Products Start at 0 Stock

Creating a product here defines its identity (name, SKU, category, cost price) — it does not add stock. Every new product starts at 0 units. Use the existing stock-adjustment tools on this screen (or a Purchase Order receipt) to bring the quantity up once inventory physically arrives.

Products created from this screen are marked not sellable by default, so warehouse-only supplies (packing tape, pallets, internal consumables) don't clutter the product picker in Sales Quotations or POS. If a warehouse-created item should also be sold to customers, enable it from Purchase → Products & Variants ("Can Sell" flag).

SKU Is Unique — Saving Updates the Matching Product

Every product's SKU is unique across the warehouse catalog. If you save a product with a SKU that already belongs to another record — whether through Add Product here, the Purchasing product form, or a Purchase Products CSV import — that existing product is updated in place with your new values instead of a second, duplicate record being created. This applies everywhere the warehouse catalog is written to, since Sales, Purchase, POS, Pick & Pack, and Warehouse Link all share this one product list.

Dashboard Stat Tiles

Four summary tiles at the top of the screen give an instant health snapshot of your warehouse before you look at any individual row.

TileWhat It ShowsVisual Alert
Total Stock Value Sum of quantity × unit price for every active SKU in the warehouse None — informational
Stock Alerts Count of Low Stock + Out of Stock items combined Pulses orange when count is non-zero
Active Shipments Incoming and outgoing shipments currently in transit None — informational
Storage Capacity Percentage of total warehouse slots currently occupied Turns red when above 85%

Inventory Table

The main table displays every active SKU. Each column is sortable. The table respects the active filter tab selection (All, In Stock, Low Stock, Out of Stock).

ColumnDescription
SKUUnique stock-keeping unit code displayed in monospace font for visual distinction
Item NameFull product name as configured in the product record
CategoryProduct category — Electronics, Furniture, Networking, Safety, or Office Supplies
StatusColor-coded badge indicating current stock health (see Status Badges below)
Stock LevelHorizontal progress bar showing quantity / maxCapacity ratio, plus the raw unit count beside it
Trend10-period SVG sparkline — green if stock is generally increasing, red if declining
LocationPrimary bin address in Building-Aisle-Shelf format (e.g. A-A1-S3)
Unit PriceCost per single unit in USD, used for the Total Stock Value calculation

Stock Status Badges

BadgeColorCondition
In Stock Green quantity > minThreshold
Low Stock Yellow (pulsing) 0 < quantity ≤ minThreshold
Out of Stock Red quantity = 0

Low Stock Pulsing Animation

Low Stock badges use a CSS pulse animation to draw the eye — they are designed to be noticed during a quick scan of a large table. If you are seeing many pulsing badges, click the Stock Alerts tile to filter down to only the affected rows and address them as a batch.

Ctrl+K Global Search

The Ctrl+K global search overlay is the fastest way to navigate a large catalog. It queries all active SKUs simultaneously across three dimensions:

  • SKU code — exact or partial match (e.g. MAC matches MACBOOK-PRO-16)
  • Product name — case-insensitive substring match (e.g. macbook)
  • Category — matches any product in the category (e.g. electronics)

Results appear as you type. Press Enter or click a result row to jump directly to that product in the main table — the row highlights with a brief animation and scrolls into the viewport. Press Escape to close the overlay without navigating.

Example Searches

  • Type macbook → Enter → jumps to the MacBook Pro row
  • Type electronics → shows all electronics category items; click one to jump
  • Type OUT → matches SKUs containing "OUT"; combine with the Out of Stock filter for a targeted reorder review

AI Demand Forecasting

Click Predict Restock Dates in the right sidebar panel to run the forecasting engine across your entire catalog. The engine uses the 10-period rolling stockHistory array stored per product to calculate demand velocity and project when each SKU will reach zero.

Reading a Prediction Card

Each SKU with a meaningful forecast appears as a card in the results panel, ranked from most urgent to least urgent.

FieldMeaning
Days leftEstimated periods until stock hits zero at current consumption velocity
VelocityAverage units consumed per historical period (lower = slower-moving stock)
Recommend orderingSuggested reorder quantity to refill to 80% of maxCapacity

Urgency Color Coding

ColorDays LeftRecommended Action
Red 4 days or fewer Order immediately — stockout is imminent
Yellow 5–10 days Plan a reorder this week
Blue 11–29 days Monitor closely — add to next regular PO

How Velocity Is Calculated

The engine takes the 10-period stockHistory array (a rolling window of stock levels over past periods) and computes the average decrease per period. SKUs with erratic histories (large single drops followed by restocks) may show a higher velocity than their true consumption rate — review these manually before committing to a large reorder.

Movement Log

The Movement Log panel always shows the 8 most recent stock movements across all SKUs. Each entry includes all the information you need for a quick audit review without navigating away from the main screen.

ElementMeaning
Direction arrow↓ green = stock in (receipt/return); ↑ red = stock out (pick/shipment); ⟳ blue = manual adjustment
ActorThe user or system process that created the movement
Quantity delta+N for increases, −N for decreases
Product nameThe SKU display name
NotesFree-form reason or reference (e.g. PO number, adjustment reason code)
Time agoRelative timestamp (e.g. "3 min ago", "yesterday")

Investigating Discrepancies

If a SKU's stock level looks wrong, check the Movement Log first. A large unexpected −N entry may indicate a Pick & Pack commit that ran against the wrong bin, or a manual adjustment entered with an incorrect sign. All movements are immutable — corrections require a subsequent adjustment entry, not an edit of the original.

Batch Actions

Select one or more rows in the inventory table using the checkboxes in the leftmost column. Once at least one row is selected, the batch action toolbar appears above the table with the following actions:

  • Print Labels — generates a printable label sheet for the selected SKUs. Each label includes the SKU code, product name, bin location, and a barcode.
  • Bulk Edit — opens a modal to update shared fields (min threshold, max capacity, or category) across all selected rows simultaneously.
  • ✕ Clear — deselects all rows and dismisses the batch toolbar.

Label Printing Workflow

To reprint bin labels for all Out of Stock items: click the 🔴 Out filter tab → Ctrl+A to select all visible rows → Print Labels. This generates a complete label sheet for the zero-stock SKUs so your team can update bin signage when stock arrives.

Appearance Follows List Style

The selection checkboxes and overall table layout are driven by the same List Style setting used across My Workspace list screens (Settings → Appearance). That single setting controls the checkbox shape (circle or square), whether a check icon is drawn inside a selected checkbox, the corner rounding of the table (sharp or rounded), and the row layout itself — table rows or a card-based grid. Switching to card layout replaces the table with individual product cards, each carrying its own selection control in the same shape and style. Any change you make in Settings → Appearance applies instantly here, with no page reload required.

Data Persistence

All inventory data is stored server-side via warehouseInventoryService.ts. There is no local storage involvement — all reads and writes go through the JSON API endpoint.

EndpointFileUsed For
GET /api/data/warehouse-inventorywarehouse-inventory.jsonLoad all inventory products on screen open
POST /api/data/warehouse-inventorywarehouse-inventory.jsonSave all inventory changes (adjustments, edits)

Product Data Shape

Each product record in the JSON store contains the following fields:

FieldTypeNotes
idstringUnique identifier, used as the foreign key in pick-and-pack records
skustringHuman-readable stock code — must be unique across all products
namestringDisplay name shown in tables, pick lists, and labels
categorystringOne of the five supported categories
quantitynumberCurrent on-hand units — updated by Pick & Pack commits and manual adjustments
minThresholdnumberLow Stock alert trigger level
maxCapacitynumberMaximum capacity of the assigned bin — used for the stock level progress bar and reorder recommendations
pricenumberUnit price in USD — used for Total Stock Value tile
locationobject{ building, aisle, shelf } — the three-part bin coordinate
stockHistorynumber[]Rolling 10-period array used by the AI forecasting engine
lastUpdatedstringISO 8601 timestamp of the last quantity change

stockHistory Array

The stockHistory array is maintained automatically as quantities change — do not manually edit it in the JSON file. If the history array is corrupted or empty, the AI forecasting engine will skip that SKU rather than display a misleading prediction. Truncated history arrays are treated as valid — the engine will use however many periods are available, with less confidence the shorter the history.

AI Assistant

Select one or more inventory items and open the AI Assistant panel to analyze stock levels, identify stock-outs and reorder needs, and get demand-based optimisation suggestions grounded in your actual inventory data.

Click Attach Knowledge in the assistant's bottom dock to ground its answers in your My Knowledge library — your own sources, or anything a colleague has shared tenant-wide.

Opening the panel does not cover the inventory table. The main content area shrinks to make room on the right edge of the screen, so the table remains visible (at a narrower width) while you continue chatting with the assistant. Closing the panel smoothly restores the table to full width.

Frequently Asked Questions

How does the inventory table know when Pick & Pack commits a shipment?
Pick & Pack's Ship & Commit operation calls warehouseInventoryService directly to deduct stock. The inventory table therefore reflects the committed quantities immediately — there is no sync delay. When you return to Inventory Management after completing an order in Pick & Pack, the quantities will already be updated.
Can I set different min thresholds for the same SKU stored in multiple bins?
Currently each product record has a single minThreshold and a single primary bin location. If you store the same SKU in multiple bins, the recommended approach is to use the Bulk Edit action to set the threshold at the total combined quantity level, and manage bin allocation manually through the location field and movement notes.
The AI forecasting panel shows a SKU with a very high velocity — is something wrong?
High velocity can result from a single large pick that consumed most of the stock in one period. The forecasting engine averages across all 10 history periods, so a single spike will eventually smooth out as more periods accumulate. In the meantime, check the Movement Log for any unexpectedly large −N entries. If the spike was a one-off event, the next few restock periods will bring the velocity estimate back to its true level.