Products Module
The Products module remains the core inventory master-data layer of Vendventory, but it now sits inside a broader governance model. Products still define what the organization buys, stores, values, and issues, while the surrounding workflow now determines whether that stock is released, blocked, at risk, or in need of follow-up.
Role of the Products module in the current app
- Every purchase, stock out, valuation, and adjustment still starts from a product record.
- Expiry tracking at the product level determines whether downstream batch and risk logic becomes relevant.
- Archive-aware product lifecycle keeps historical analytics intact while protecting operational selectors from stale records.
- Product pricing and reorder fields continue to feed planning, variance, and valuation logic.
Index and browsing model
The product index is intentionally not a flat list. It is organized category-first so teams can browse inventory as a grouped catalog instead of scanning one long table. This becomes more useful as archived products, low-stock items, and expiry-sensitive items accumulate.
- Category-driven grouping for faster browsing.
- Summary counts such as total, active, inactive, archived, low-stock, near-expiry, and expired products.
- Quick actions such as edit, status change, lifecycle controls, and product history access.
- Visibility into expiry and stock pressure without leaving the module.
Create and edit form structure
The current product form uses the modern admin form system and focuses on the fields most operators need every day. It does not try to push all governance configuration into one overloaded screen.
- SKU: unique stock identifier.
- Name: main product label used across the app.
- Slug: normalized identifier where required.
- Category: selected through the shared custom select pattern.
- Unit: selected through the shared custom select pattern.
- Supplier: optional commercial linkage to a supplier record.
- Description: descriptive notes for internal reference.
- Cost Price: cost-side valuation baseline.
- Selling Price: selling-side commercial reference.
- Current Stock: starting or maintained stock quantity where allowed.
- Reorder Level: low-stock planning threshold.
- Image: product image using the shared
.ui-fileupload pattern. - Status: active or inactive via the shared status control.
- Track Expiry: toggle that controls expiry-specific behavior.
- Expiry Date: current product-level expiry date when expiry tracking is enabled.
Shared UI conventions used by the product CRUD
- Category, unit, and supplier selectors use the shared custom select system.
- Expiry date uses the shared datepicker pattern.
- File upload uses the shared
.ui-filestyling contract. - Status and expiry toggles follow the same admin interaction style used by the modernized forms elsewhere in the app.
Lifecycle, status, and archive behavior
Product lifecycle is one of the most important improvements in the current codebase. The module is no longer documented as a simple create, edit, delete table. It now uses an archive-aware approach so historical integrity is preserved.
- Active: usable in operational selectors and current workflows.
- Inactive: visible in history and admin review, but not intended for normal ongoing use.
- Archived: preserved for history when transactional data exists and destructive deletion would break context.
- Delete: should be treated cautiously because historically used products may be archived instead of removed.
Downstream impact of product data
- Purchases use products as the inbound stock identity.
- Stock outs use products as the outbound issue identity.
- Stock adjustments reconcile product-level quantity variances.
- Reports and dashboard use product linkage for valuation, risk, and watchlists.
- Even though batch governance lives in downstream workflows, the product is still the root record behind those workflows.
- Expiry-enabled products are more likely to appear in risk, rescue, and governance analysis.
- Archived products must remain visible in historical analytics and audit trails.
What changed in the current product documentation
- The page now explicitly reflects archive-aware lifecycle instead of pretending products are always hard-deleted.
- The documented form fields now match the live create and edit blades.
- The narrative now places product CRUD inside the broader governance stack rather than describing it as a standalone inventory table.
- The page now explains which responsibilities remain on the product form and which belong to reports or governance workspaces.
Product media placeholders
Screen-by-Screen Product Breakdown
- Product index: browse, search, filter, and inspect the current catalog with lifecycle, stock, expiry, and governance context.
- Create product: define master identity, pricing, stock settings, barcode, supplier, category, unit, lifecycle, and governance rules in one form.
- Edit product: adjust operational or governance settings for an existing item when business rules change.
- Barcode capture area: this is where a browser scanner or camera scan can store the product barcode directly into the product record.
- Governance fields: batch, expiry, FEFO, cold-chain, recall class, shelf life, storage conditions, and related controls turn an ordinary item into a governed item.
- Why it matters: product data is the bridge between catalog management and everything else in the app, including receiving, release, reports, recall logic, and POS.