Inventory Management System
Real-time inventory tracking, low-stock alerting, multi-warehouse management, and channel synchronization. Keep stock levels accurate across your entire operation.
Key Features
- Real-Time Stock Tracking — Ledger-based quantity management with full audit trail
- Low-Stock Alerts — Configurable thresholds per SKU with notification hooks
- Multi-Warehouse Support — Track inventory across locations with transfer management
- Reorder Point Calculator — Automatic reorder suggestions based on velocity and lead time
- Channel Sync — Push stock updates to connected sales channels
- Batch Operations — Bulk adjustments, cycle counts, and stock imports via CSV
Quick Start
# 1. Extract and configure
unzip inventory-management-system.zip
cd inventory-management-system
cp config.example.yaml config.yaml
# 2. Initialize the inventory database
python -m inventory_management.core --init --config config.yaml
# 3. Import initial stock levels
python -m inventory_management.core --import stock_levels.csv
Architecture
src/inventory_management/
├── core.py # Main inventory engine: adjustments, queries, ledger
├── warehouses.py # Multi-location logic, transfers, allocation
├── alerts.py # Threshold monitoring and notification dispatch
└── utils.py # CSV parsing, unit conversions, validation helpers
Data Model: SKU → Warehouse → Quantity (with ledger entries for every change)
Usage Examples
Stock Adjustment
from inventory_management.core import InventoryManager
mgr = InventoryManager(config_path="config.yaml")
# Record a stock receipt
mgr.adjust(
sku="WIDGET-BLU-LG",
warehouse="warehouse-east",
quantity=500,
reason="PO-20260323 received"
)
# Check current stock
level = mgr.get_stock("WIDGET-BLU-LG", warehouse="warehouse-east")
print(f"Current stock: {level['quantity']} units (reserved: {level['reserved']})")
Low-Stock Detection
from inventory_management.alerts import AlertMonitor
monitor = AlertMonitor(config_path="config.yaml")
low_stock = monitor.check_all()
for alert in low_stock:
print(f"WARNING: {alert['sku']} at {alert['warehouse']}: "
f"{alert['quantity']} units (threshold: {alert['reorder_point']})")
Inventory Snapshot Query
-- Current stock levels across all warehouses
SELECT
s.sku,
p.product_name,
s.warehouse_id,
s.quantity_on_hand,
s.quantity_reserved,
s.quantity_on_hand - s.quantity_reserved AS available,
s.reorder_point,
CASE WHEN s.quantity_on_hand <= s.reorder_point
THEN 'REORDER' ELSE 'OK' END AS stock_status
FROM stock_levels s
JOIN products p ON s.sku = p.sku
ORDER BY stock_status DESC, available ASC;
Warehouse Transfer
mgr.transfer(
sku="WIDGET-BLU-LG",
from_warehouse="warehouse-east",
to_warehouse="warehouse-west",
quantity=100,
reason="Rebalance for Q2 demand shift"
)
Configuration
database:
type: "sqlite" # sqlite | postgres
path: "./data/inventory.db"
warehouses:
- id: "warehouse-east"
name: "East Coast Fulfillment"
timezone: "America/New_York"
- id: "warehouse-west"
name: "West Coast Fulfillment"
timezone: "America/Los_Angeles"
alerts:
enabled: true
check_interval_minutes: 15
default_reorder_point: 50 # Override per-SKU in stock_levels
notification_channels:
- type: "email"
recipients: ["ops@example.com"]
- type: "webhook"
url: "https://api.example.com/webhooks/inventory"
import:
csv_delimiter: ","
duplicate_sku_strategy: "update" # update | skip | error
Best Practices
- Use ledger-based tracking — Never overwrite quantities; always add adjustment entries
- Set per-SKU reorder points — High-velocity SKUs need higher thresholds
- Run daily reconciliation — Compare system counts vs channel-reported stock
- Separate reserved stock — Track reserved (in-cart, processing) vs available
- Audit transfers — Every inter-warehouse move should have a reason code
Troubleshooting
| Issue | Cause | Fix |
|---|---|---|
| Negative stock quantities | Orders processed without stock check | Enable enforce_non_negative: true
|
| Duplicate SKU on import | CSV contains same SKU twice | Set duplicate_sku_strategy: "update"
|
| Alerts not firing | Check interval too long | Reduce check_interval_minutes
|
| Transfer fails | Insufficient stock at source | Verify available quantity before transfer |
This is 1 of 11 resources in the Retail Automation Pro toolkit. Get the complete [Inventory Management System] with all files, templates, and documentation for $49.
Or grab the entire Retail Automation Pro bundle (11 products) for $139 — save 30%.
Top comments (0)