Inventory
Stock levels, movements, adjustments, and physical counts
Stock
Documents
Adjustments
Manual stock corrections with required reason codes. Damage, loss, theft, found stock.
3 drafts · 28 completed (30d)
Stock counts
Physical inventory counts with variance calculation and auto-generated adjustments.
1 in progress · last count Apr 28
Coming soon
Price changes
Approve and roll out price updates across locations with audit trail.
Activity
Related
▸ Mockup notes (Option A — full hub)
What this mockup shows: the option I originally recommended before you reduced scope to "Stock snapshot + Low Stock only". It replicates the live SettingsHubPage pattern (apps/qiiub-portal/src/features/settings/routes/SettingsHubPage.tsx) — PageHeader + h2 section labels + grid of Cards with icon tile + title + description + optional metric line.
- New sub-routes under
/inventory: Stock by location, Low stock alerts, Adjustments, Stock counts, Movement log. Each is a fresh route file inapps/qiiub-portal/src/routes/_app/inventory/*.tsx. - Why a hub: Adjustments, Stock counts, and Movement log have backend in production (Phase 6) but no sidebar entry of their own. Forcing them into the sidebar would inflate IA; folding them under
/inventorymatches how the coverage doc groups their endpoints (inventory-mainumbrella inqiiub-portal-coverage.html:451). - "Related" section: Purchase orders, Receipts, and Transfers already have their own sidebar entries — but conceptually they're inventory-adjacent, so the hub cross-links to them with an external-link affordance. Same trick the Settings hub uses with Tax Settings (
/taxesis its own sidebar entry but Settings still surfaces a card). - Coming soon variants: Price changes + Cost history are scaffolded as disabled cards. Backend exists but the UI is unscoped. Matches how SettingsHubPage handles 11 of its 17 cards today.
- Card metrics: each active card shows a live metric (count of drafts, last-action timestamp, low-stock count). Makes the hub feel like a dashboard, not just a directory. Optional — drop if it adds query weight without value.
- Stop and decide: if you go this way the build is roughly 3–5× the scope of Stock-snapshot-only. Worth pinning down with an ADR before starting because it determines IA permanently.
Compare with inventory.html — the narrower option (just the Stock-snapshot list under
/inventory) that you picked. This hub mockup is the broader Option A I originally recommended.