Agent skill
warehouse-guide
Reference for the warehouse/inventory tracking system. Use when working with stock management, warehouse status, inventory consumption, or understanding how sales affect stock levels.
Stars
163
Forks
31
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/warehouse-guide
SKILL.md
Warehouse System Guide
This POS system includes a complex warehouse management system for tracking inventory consumption.
Core Concepts
Warehouse Status Types
php
// In WarehouseStatus model
const TYPE_IN = 0; // Stock received (purchase/delivery)
const TYPE_OUT = 1; // Stock consumed (from sales)
const TYPE_RESET = 2; // Manual inventory count/reset
Data Flow
Sale Created → SalesService::parseAndSaveOrder()
→ Creates Sales records
→ Calls populateWarehouse() for each item
→ Looks up WarehouseInventory mappings
→ Creates WarehouseStatus TYPE_OUT entries
Key Models
Warehouse
- Represents a storage location/category
- Has
name,unit,category_id,order - Related to WarehouseCategory (not product Category)
WarehouseInventory
- Maps inventory items to warehouses
- Contains
normfield: consumption rate per sale unit - Example: If
norm = 2.5, selling 1 unit consumes 2.5 warehouse units
WarehouseStatus
- Ledger of all stock movements
- Fields:
warehouse_id,inventory_id,quantity,type,date,batch_id batch_idlinks to invoice ID for TYPE_OUT entries
Key Files
Controllers
WarehouseController- CRUD for warehousesWarehouseStatusController- Stock movements, imports, recalculationWarehouseInventoryController- Inventory-to-warehouse mappingsWarehouseCategoryController- Warehouse categories
Services
services/SalesService.php- ContainspopulateWarehouse()method
Important Patterns
Stock Calculation Query
php
// From WarehouseStatusController::index()
WarehouseStatus::selectRaw('
warehouse_id,
SUM(CASE WHEN type = 0 THEN quantity ELSE 0 END) as import_quantity,
SUM(CASE WHEN type = 1 THEN quantity ELSE 0 END) as sale_quantity,
SUM(CASE WHEN type = 2 THEN quantity ELSE 0 END) as reset_quantity
')
->groupBy('warehouse_id')
->whereBetween('date', $workingDayRange)
Consumption Calculation
php
// In SalesService::populateWarehouse()
$warehouseInventories = WarehouseInventory::where('inventory_id', $order['id'])->get();
foreach ($warehouseInventories as $wi) {
WarehouseStatus::create([
'warehouse_id' => $wi->warehouse_id,
'inventory_id' => $order['id'],
'quantity' => $order['qty'] * $wi->norm, // qty * consumption rate
'type' => WarehouseStatus::TYPE_OUT,
'date' => WorkingDay::setCorrectDateForWorkingDay(),
'batch_id' => $invoiceId,
]);
}
Error Recovery
Failed warehouse operations are logged to ExceptionLog model and can be retried with:
bash
php artisan command:process-unprocessed-imports
API Endpoints
GET /api/backoffice/warehouse - List warehouses
POST /api/backoffice/warehouse - Create warehouse
GET /api/backoffice/warehouse-status - List stock movements
POST /api/backoffice/warehouse-status - Record stock movement
POST /api/backoffice/warehouse-status/recalculate/{id} - Recalculate stock
GET /api/backoffice/warehouse-inventory - List inventory mappings
POST /api/backoffice/warehouse-inventory - Create/update mappings
Working Day Integration
All warehouse dates use the "working day" concept (4am-4am):
php
use Services\WorkingDay;
$date = WorkingDay::setCorrectDateForWorkingDay();
$range = WorkingDay::getWorkingDay();
Didn't find tool you were looking for?