Stock Metrics Calculation

Cálculo de Métricas de Estoque: turn_rate_12m e days_supply

📐 Fórmulas de Cálculo

1. Vendas Diárias Médias (avg_daily_sales)

avg_daily_sales = total_qty_12m / 365.0

Onde:
- total_qty_12m: Soma de qty dos últimos 12 meses de core.core_order_items
- 365.0: Número de dias em um ano

Significado: Quantas unidades são vendidas em média por dia.


2. Days Supply (days_supply)

days_supply = current_stock / avg_daily_sales

Ou simplificado:

days_supply = current_stock / (total_qty_12m / 365.0)

Onde:
- current_stock: Estoque atual de core.core_inventory.stock
- avg_daily_sales: Vendas diárias médias (calculado acima)

Significado: Quantos dias de estoque temos baseado na velocidade atual de vendas.

Exemplo:
- Estoque: 1.000 unidades
- Vendas 12m: 3.650 unidades (10 unidades/dia)
- Days Supply: 1.000 / 10 = 100 dias


3. Turn Rate 12m (turn_rate_12m)

turn_rate_12m = total_qty_12m / current_stock

Onde:
- total_qty_12m: Vendas dos últimos 12 meses
- current_stock: Estoque atual

Significado: Quantas vezes o estoque gira por ano.

Exemplo:
- Estoque: 1.000 unidades
- Vendas 12m: 3.650 unidades
- Turn Rate: 3.650 / 1.000 = 3.65 vezes/ano


🔍 Fonte dos Dados

total_qty_12m

Calculado a partir de:

SELECT SUM(oi.qty) 
FROM core.core_order_items oi
INNER JOIN core.core_orders o ON oi.order_id = o.order_id
WHERE o.order_date >= DATE_SUB(CURDATE(), INTERVAL 12 MONTH)
  AND (o.status IS NULL OR o.status = '' OR o.status = 'BX' OR o.status LIKE 'BX%')
  AND oi.sku = :sku_id

current_stock

Buscado de:

SELECT stock 
FROM core.core_inventory 
WHERE sku = :sku_id

📊 Classificação de stock_level

Baseado em days_supply (ajustado para importadores):

Condição stock_level Significado
days_supply < 60 "low" Estoque baixo - menos de 60 dias
60 <= days_supply < 120 "normal" Estoque normal - entre 60 e 119 dias
days_supply >= 120 "high" Estoque alto - 120 dias ou mais

⚠️ Casos Especiais

Quando days_supply é NULL:

Quando turn_rate_12m é NULL:

Produtos sem vendas (Curva D e E):


📈 Exemplo Prático

Produto: SKU 12345

Dados:
- Estoque atual: 500 unidades
- Vendas últimos 12 meses: 1.825 unidades

Cálculos:
1. Vendas diárias médias:
avg_daily_sales = 1.825 / 365 = 5.0 unidades/dia

  1. Days Supply:
    days_supply = 500 / 5.0 = 100 dias

  2. Turn Rate 12m:
    turn_rate_12m = 1.825 / 500 = 3.65 vezes/ano

  3. Stock Level:
    days_supply = 100 dias 60 <= 100 < 120 → "normal"

Resultado:
- days_supply: 100.00 dias
- turn_rate_12m: 3.6500
- stock_level: "normal"


🔄 Onde é Calculado

Arquivo: csuite-pricing/sql/sp_sync_product_classification_from_inventory.sql

Linhas: 109-122

UPDATE tmp_sku_metrics
SET 
    avg_daily_sales = CASE WHEN total_qty_12m > 0 THEN total_qty_12m / 365.0 ELSE 0 END,
    days_supply = CASE 
        WHEN total_qty_12m > 0 AND current_stock > 0 THEN 
            current_stock / (total_qty_12m / 365.0)
        ELSE NULL
    END,
    turn_rate_12m = CASE 
        WHEN current_stock > 0 THEN 
            total_qty_12m / current_stock
        ELSE NULL
    END;

📝 Notas Importantes

  1. Período de análise: Últimos 12 meses (365 dias)
  2. Status de pedidos: Apenas pedidos com status NULL, '', 'BX' ou 'BX%'
  3. Apenas SKUs numéricos: Filtro REGEXP '^[0-9]+$'
  4. Apenas produtos com receita: HAVING total_revenue_12m > 0
  5. Thresholds para importadores: Ajustados para ciclos de importação mais longos

🔊 Text-to-Speech

1.0x
1.0
Pronto para reproduzir