У нас в системе сейчас 1011 рекомендаций к закупке. Если просто отсортировать по сроку запаса (priority), 300 SKU выглядят одинаково «горящими» — закупщик не понимает, с какой строки начать. Ранг — это сквозная оценка от 0 до 100, которая собирает в одно число четыре бизнес-аспекта: где сейчас теряются деньги, насколько товар стратегически важен, насколько стабилен спрос, и сколько маржи принесёт заказ. Чем выше Ранг — тем сильнее причина закупать именно эту позицию первой.
Сумма весов = 100, поэтому Ранг попадает в диапазон 0..100.
urgency_pct — это percentile rank упущенной выручки за неделю
среди всех текущих рекомендаций. Значение 0..1.
upущ.выручка/нед = max(0, ср.продажи/день × 7 − доступный остаток) × цена_продажи
Если у товара urgency_pct = 0.95 — он входит в топ-5% самых горящих
по деньгам, которые компания теряет прямо сейчас.
ABC-класс по выручке за 90 дней (классический Парето):
| Класс | Описание | Коэффициент |
|---|---|---|
| A | верхние 80% выручки | 1.0 |
| B | следующие 15% выручки | 0.6 |
| C | остаток (~5% выручки, длинный хвост) | 0.3 |
| — | не классифицирован (новый/слабый) | 0.1 |
Идея: если из 4 000 SKU только 1 000 даёт 80% выручки, дефицит на них больнее, чем дефицит на товарах-долгожителях из «длинного хвоста».
XYZ-класс по коэффициенту вариации продаж:
| Класс | Описание | Коэффициент |
|---|---|---|
| X | стабильный спрос (cv ≤ 0.5) | 1.0 |
| Y | колеблющийся (cv ≤ 1.0) | 0.6 |
| Z | хаотичный, точечные продажи (cv > 1.0) | 0.3 |
| — | мало данных для расчёта | 0.1 |
Стабильные товары (X) предсказуемы — закупать их безопасно. Хаотичные (Z) могут быть «однократный всплеск», их закупать рискованно даже при горящем дефиците.
margin_pct — percentile маржи всего предлагаемого заказа:
маржа_заказа = qty_к_закупке × (цена_продажи − закупочная_цена)
Если закупочной цены в МойСклад нет — считаем её приближённо как sale_price × 0.3
(после получения реальной закупки точность вырастет).
Идея: при равной срочности и важности приоритет — товары, которые принесут больше денег на каждый вложенный рубль.
Цвет «таблетки» Ранга — быстрая визуальная подсказка:
40/25/15/20. Если хотите перевесить
в сторону маржи или, наоборот, в сторону срочности — это правится в одном месте кода.