Inventory Module
The Inventory module manages warehouses, stock receipts (goods received), stock issues (goods dispatched), inter-warehouse transfers, and real-time stock balances with weighted-average costing. It provides a complete audit trail of every stock movement.
Purpose
- Define hierarchical Warehouses with branch and manager assignment
- Record Stock Receipts (GRN) to increase inventory on goods received
- Record Stock Issues (GDN) to decrease inventory on goods dispatched
- Transfer stock between warehouses via Inter-Warehouse Transfers with ship/receive workflow
- Maintain real-time Stock Balances per product, variant, and warehouse
- Track every stock change via Stock Movements for full auditability
- Support batch tracking and expiry dates on receipt items
- Calculate weighted-average cost automatically on receipts and issues
Approval Workflow
Both receipts and issues follow a three-state lifecycle:
Draft → Approved → Cancelled- Draft — can be edited or deleted freely.
- Approved — stock balances are updated; the document becomes read-only.
- Cancelled — stock changes are reversed; the document becomes read-only.
Only approval triggers stock balance changes. Drafts have no effect on inventory.
Sub-Features
| Feature | Description | Link |
|---|---|---|
| Warehouses | Hierarchical warehouse management | warehouses |
| Stock Receipts | Goods received notes (GRN) | receipts |
| Stock Issues | Goods dispatch notes (GDN) | issues |
| Transfers | Inter-warehouse stock transfers | transfers |
| Stock Balances & Stock Card | Current stock levels and movement history | stock-balances |
| Counts & Adjustments | Physical inventory counts and stock adjustments | counts-adjustments |
| Costing Engine | WAC & FIFO costing, cost layers, inventory valuation | costing |
Entity Relationship Overview
API Base Path
All Inventory module endpoints are prefixed with:
/api/inventory/Authentication is required via a Sanctum bearer token on every request. See Authentication for details.
Localization
Every request can include an Accept-Language header set to ar or en to control which language is returned for bilingual fields (name, description). When set to ar, the API returns the Arabic value; otherwise it falls back to English.
Accept-Language: arMonetary Precision
All cost and value fields use decimal(15, 3) to support the Kuwaiti Dinar (KWD), which requires 3 decimal places.