# Metrics System Changes

## Schema Changes

### Product Identifiers
- Changed `product_id` to `pid` throughout all metrics tables and queries
- Changed `category_id` to `cat_id` in category-related queries

### Purchase Orders
- Changed status check from `status = 'closed'` to `receiving_status >= 30`
- Added comment `-- Partial or fully received` for clarity
- Now using `received_date` instead of relying on status changes

### New Product Fields
- Added support for `notions_inv_count`
- Added support for `date_last_sold`
- Added support for `total_sold`
- Using `visible` flag for active product counts

### Field Size Updates
- Increased size of financial fields to handle larger numbers:
  - Changed category metrics `total_value` from `DECIMAL(10,3)` to `DECIMAL(15,3)`
  - Changed brand metrics financial fields from `DECIMAL(10,2)` to `DECIMAL(15,2)`
  - Affects `total_stock_cost`, `total_stock_retail`, `total_revenue`

## Metrics File Changes

### Product Metrics (`product-metrics.js`)
- Updated SQL queries to use new field names
- Enhanced stock status calculations
- Added financial metrics:
  - `gross_profit`
  - `gmroi`
  - `avg_margin_percent`
  - `inventory_value`
- Improved reorder quantity calculations with:
  - Enhanced safety stock calculation
  - Lead time consideration
  - Service level factors
- Added NaN/NULL value handling:
  - Added `sanitizeValue` helper function
  - Properly converts JavaScript NaN to SQL NULL
  - Ensures all numeric fields have valid values

### Vendor Metrics (`vendor-metrics.js`)
- Updated field references to use `pid`
- Modified purchase order status checks
- Enhanced vendor performance metrics:
  - Order fill rate calculation
  - On-time delivery rate
  - Lead time tracking

### Category Metrics (`category-metrics.js`)
- Updated to use `cat_id` instead of `category_id`
- Enhanced category performance tracking:
  - Active vs total products
  - Category growth rate
  - Turnover rate
- Added time-based metrics for:
  - Product counts
  - Revenue tracking
  - Margin analysis
- Added NULL brand handling:
  - Uses 'Unbranded' for NULL brand values
  - Maintains data integrity in category sales metrics

### Brand Metrics (`brand-metrics.js`)
- Updated product references to use `pid`
- Enhanced brand performance metrics:
  - Stock value calculations
  - Revenue tracking
  - Growth rate analysis
- Added time-based aggregates for:
  - Stock levels
  - Sales performance
  - Margin analysis
- Increased field sizes to handle large retailers

### Sales Forecasts (`sales-forecasts.js`)
- Updated to use new product identifiers
- Enhanced forecast calculations:
  - Day-of-week patterns
  - Seasonality factors
  - Confidence levels
- Added category-level forecasts with:
  - Units and revenue predictions
  - Confidence scoring
  - Seasonal adjustments

### Time Aggregates (`time-aggregates.js`)
- Updated field references to use `pid`
- Enhanced financial metrics:
  - GMROI calculations
  - Profit margin tracking
- Added inventory value tracking
- Improved purchase order integration

## Database Impact

### Tables Modified
- `product_metrics`
- `vendor_metrics`
- `vendor_time_metrics`
- `category_metrics`
- `category_time_metrics`
- `brand_metrics`
- `brand_time_metrics`
- `sales_forecasts`
- `category_forecasts`
- `product_time_aggregates`

### New Fields Added
Several tables have new fields for:
- Enhanced financial tracking
- Improved inventory metrics
- Better performance monitoring
- More accurate forecasting

## Frontend Considerations

### Data Access Changes
- All product lookups need to use `pid` instead of `product_id`
- Category references should use `cat_id`
- Purchase order status checks need updating
- Handle 'Unbranded' as a valid brand value

### New Features Available
- Enhanced stock status indicators
- More detailed financial metrics
- Improved forecasting data
- Better category and brand performance tracking

### UI Updates Needed
- Update all API calls to use new field names
- Modify data displays for new metrics
- Add new financial performance indicators
- Update stock status logic
- Enhance forecast displays

## API Route Updates Needed

### Product Routes
- Update ID field references
- Modify stock status calculations
- Add new financial metrics endpoints

### Category Routes
- Update to use `cat_id`
- Add new performance metrics
- Include time-based aggregates

### Vendor Routes
- Update product reference handling
- Add enhanced performance metrics
- Include new time-based data

### Reporting Routes
- Update all ID references
- Add new metrics support
- Include enhanced forecasting data

## Migration Considerations

### Data Migration
- Update existing records to use new IDs
- Backfill new metrics where possible
- Verify data integrity after changes
- Handle NULL to 'Unbranded' brand conversion

### Code Updates
- Update all API endpoints
- Modify database queries
- Update frontend components
- Revise reporting logic

### Testing Requirements
- Verify ID changes throughout system
- Test new metrics calculations
- Validate forecasting accuracy
- Check performance impact
- Verify NULL value handling 