AI Asist
v2
Д
Д

Плейбук: допоставка WB по статичному прогнозу

← Заметки  ·  Раздел: Wildberries  ·  Файл: data/notes/wb/replenishment-playbook.md

Плейбук: допоставка WB по статичному прогнозу

Срабатывает, когда пользователь просит:

  • «расчет поставки»;
  • «сколько допоставить»;
  • «допоставка с учетом прогноза»;
  • «план поставки по размерам»;
  • «куда поставить по регионам»;
  • «поставка с учетом ИЛ / локализации» (ранее ИРП — отменён WB для заказов с 13.07.2026; теперь действует индекс локализации ИЛ, см. data/knowledge/wb/localization-index.md).

Использует результат плейбука:

data/notes/wb/static-orders-sales-forecast-playbook.md

Цель

Сделать простой операционный план допоставки:

  1. Сколько штук нужно по размерам на 4 недели.
  2. Куда разложить поставку по доступным регионам.
  3. Где есть перекос текущего FBO-остатка и вместо закупки/новой поставки нужно сначала делать перераспределение.

Главный принцип

Для закупки/допоставки основной объем считать от прогноза продаж/выкупов, а не от прогноза заказов.

Но для WB и ИЛ (индекса локализации) обязательно держать в голове, что заказный поток тоже важен:

  • прогноз продаж показывает, сколько товара реально будет потреблено;
  • прогноз заказов показывает нагрузку на FBO и локализацию;
  • если buyout низкий, товар временно уезжает клиентам и часть вернется позже.

В ответе можно показывать оба числа, но рекомендацию по новой поставке делать от прогноза продаж/выкупов, если пользователь не просит страховой запас под весь заказный поток.


Источники

Метрика Источник
Прогноз заказов/продаж плейбук static-orders-sales-forecast-playbook.md
Текущий FBO последний stocks_snapshot.quantity
В пути к клиенту stocks_snapshot.in_way_to_client
В пути от клиента stocks_snapshot.in_way_from_client
Регион склада app.reference.warehouses.region_for(warehouse)
Доступные регионы поставки бизнес-контекст / REGION_AVAILABILITY / REDISTRIBUTION_TARGETS

По задаче с ограниченной поставкой использовать только разрешенные пользователем регионы. Например: «можем поставить только в Центр, Юг, Поволжье».


Обязательные таблицы в ответе

1. Таблица прогноза

Формат:

Размер | Прогноз заказов | Прогноз выкупов/продаж | Текущий FBO | Довезти по продажам

Пример:

Размер | Прогноз заказов | Прогноз выкупов/продаж | Текущий FBO | Довезти по продажам
L      |             102 |                    34 |          4 |                 30
M      |             167 |                    49 |          6 |                 43
S      |             114 |                    40 |         41 |                  0
ИТОГО  |             384 |                   123 |         51 |                 73

Формула:

Довезти по продажам = max(0, Прогноз выкупов/продаж − Текущий FBO)

Если нужно учитывать возвраты из пути:

Доступно с возвратами = FBO + in_way_to_client × (1 − buyout_rate) + in_way_from_client

Но для рабочей поставки по умолчанию не уменьшать план на весь ожидаемый возврат: возвраты не гарантированы по сроку и региону.

Можно упомянуть минимальный сценарий с возвратами отдельно, но не делать его основной рекомендацией без явного запроса.

2. Таблица допоставки

Формат:

Регион поставки | L | M | S | Итого

Пример:

Регион поставки | L | M | S | Итого
Центр           | 10 | 12 | 0 |    22
Юг + СК         |  9 | 20 | 0 |    29
Поволжье        | 11 | 11 | 0 |    22
ИТОГО           | 30 | 43 | 0 |    73

Как распределять допоставку по регионам

  1. Взять регионы, куда пользователь реально может поставить.
  2. Взять доли спроса по заказам в этих регионах.
  3. Нормализовать доли внутри доступного пула.
  4. Разложить каждую размерную потребность по этим долям.
  5. Округлить до целых штук и поправить остаток округления на регион с максимальной долей/дефицитом.

Пример доступного пула:

Центр:    47 заказов
Юг + СК:  53 заказа
Поволжье: 34 заказа
Итого:   134 заказа

Нормализованные доли:

Центр:    35.1%
Юг + СК:  39.6%
Поволжье: 25.4%

Если есть текущий региональный перекос по конкретному размеру, распределение допоставки можно смещать в пользу дефицитных регионов, а не строго по долям спроса.


Перекос остатков и перераспределение

Обязательная пометка в ответе:

Если по размеру текущий FBO уже покрывает прогноз продаж, но товар лежит не там, где спрос, новую поставку по этому размеру не делать. Сначала делать перераспределение между складами.

Типовой случай:

S: прогноз продаж 40 шт, текущий FBO 41 шт → допоставка 0.
Но S перекошен в Центр, а спрос есть в Юге и Поволжье.
Решение: не закупать S, а перераспределить часть S из Центра в Юг/Поволжье.

Почему это важно:

  • закупка лишнего размера замораживает деньги;
  • товар может лежать в регионе с избытком и не улучшать локализацию;
  • для ИЛ важна локальность заказов (ступенчатый КТР по артикулу — см. data/knowledge/wb/localization-index.md), поэтому перекос FBO может портить локализацию даже при нормальном общем остатке; причём зоны ИЛ — официальные ФО WB (Москва+МО входят в ЦФО, ЮФО+СКФО и СФО+ДФО объединены), а не наши бизнес-кластеры.

SQL: текущий FBO по размерам

SELECT
  tech_size,
  SUM(quantity) AS fbo,
  SUM(in_way_to_client) AS in_way_to_client,
  SUM(in_way_from_client) AS in_way_from_client
FROM stocks_snapshot
WHERE shop_id = :shop_id
  AND sku = :sku
  AND snapshot_at = (
    SELECT MAX(snapshot_at)
    FROM stocks_snapshot
    WHERE shop_id = :shop_id
      AND sku = :sku
  )
GROUP BY tech_size
ORDER BY tech_size;

SQL: текущий FBO по регионам и размерам

Регион склада лучше считать в Python через:

from app.reference.warehouses import region_for

Базовая выгрузка:

SELECT
  warehouse,
  tech_size,
  SUM(quantity) AS fbo,
  SUM(in_way_to_client) AS in_way_to_client,
  SUM(in_way_from_client) AS in_way_from_client
FROM stocks_snapshot
WHERE shop_id = :shop_id
  AND sku = :sku
  AND snapshot_at = (
    SELECT MAX(snapshot_at)
    FROM stocks_snapshot
    WHERE shop_id = :shop_id
      AND sku = :sku
  )
GROUP BY warehouse, tech_size
ORDER BY warehouse, tech_size;

Расчёт с возвратами, если нужен минимальный сценарий

Если пользователь просит «минимум с учетом возвратов», использовать:

available = FBO + in_way_to_client × (1 − buyout_rate_size) + in_way_from_client
need_min = max(0, forecast_sales_size − available)

В ответе явно подписать:

Это минимальный сценарий. Он рискован, потому что возвраты могут прийти позже нужного срока
и не в тот регион.

Чек-лист

  1. Есть таблица прогноза: заказы, продажи, FBO, довезти.
  2. Есть таблица допоставки по регионам и размерам.
  3. Допоставка считается от прогноза продаж/выкупов, если пользователь не просил иначе.
  4. Доступные регионы ограничены тем, что указал пользователь.
  5. Если размер покрыт общим FBO, но есть региональный перекос, указано перераспределение.
  6. Не уменьшать основной план на ожидаемые возвраты без явного запроса.
  7. В ответе есть короткий вывод: что покупать/везти, а что не трогать.
Фильтры