6.2 KiB
Механика расчёта дефицита поверх прогноза
Общая схема
forecast (прогноз) → sp_build_deficit_proposal → deficit_proposal
↑ ↓
stock + inbound + minAvail │ sp_rebuild_stock_plan_by_arrival
│ ↓
└──────────────────── stock_plan_by_arrival
Таблицы
| Таблица | Назначение |
|---|---|
analytics.forecast |
Прогноз спроса по месяцам (scenario_id, 1c_id, code, month, value) |
analytics.deficit_proposal |
Рекомендации к заказу по дефициту (place_month, arrival_month, order_qty) |
analytics.stock_plan_by_arrival |
План по месяцам: opening, inbound_confirmed, inbound_deficit, forecast_demand, closing |
Процедуры
1. sp_build_deficit_proposal
Назначение: Дефицит и рекомендации к заказу с учётом прогноза по сценарию.
Параметры (по умолчанию):
@scenario_id= 4@group_path= '' — path группы ('' = все группы)@lead_time_m= 4 — срок поставки (мес.)@cover_months= 6 — горизонт покрытия (мес.)@from_month= текущий месяц@to_month_excl= '2028-01-01'
Шаги логики:
- Календарь месяцев [from, to)
- SKU по group_path (pbi.groups.path LIKE @path + '%')
- Прогноз из
analytics.forecastпо scenario_id - Inbound — подтверждённые заказы (get_orders_by_group): статусы В пути, В производстве, Выгружен на складе (Согласован закомментирован в коде)
- Stock = остаток склад (get_quantity_by_group) + MP (get_mp_quantity_by_group)
- Последовательность по месяцам: demand_m, inbound_m, served_m, lost_m, net_stock (рекурсивный flow)
- Первый месяц дефицита T: net_stock < minAvailable, месяц >= @from + lead_time
- Якоря: T, T+cover, T+2cover... до to_month_excl
- order_qty = прогноз окна [T .. T+cover) (demand_window)
Результат: INSERT в deficit_proposal (order_qty > 0).
Источники данных:
- forecast ←
analytics.forecast - inbound ←
analytics.get_orders_by_group - stock ←
analytics.get_quantity_by_group,analytics.get_mp_quantity_by_group - SKU/minAvail ←
pbi.nomenclature,pbi.groups
2. sp_rebuild_stock_plan_by_arrival
Назначение: План остатков по месяцам прихода (opening, inbound, forecast, closing).
Параметры: @scenario_id, @from_month, @to_month
Источники по CTE:
- opening_qty — остаток на дату < from_month (pbi.w_ostatok_da_net)
- inbound_confirmed — подтверждённые заказы по месяцу прихода (get_orders_by_group: В пути, В производстве, Выгружен на складе, Согласован)
- inbound_deficit — SUM(order_qty) по deficit_proposal
- forecast_demand — SUM(value) по forecast
Формула closing:
closing = opening + inbound_confirmed + inbound_deficit - forecast_demand
Rolling: opening для месяца M = LAG(closing) по SKU и arrival_month.
Зависимость: НЕ вызывает sp_build_deficit_proposal. Только читает deficit_proposal. Перед вызовом должен быть выполнен sp_build_deficit_proposal или sp_run_deficit_all_skus.
3. sp_run_deficit_all_skus
Назначение: Пересчёт дефицита по всем SKU (group_path = '').
Вызывает sp_build_deficit_proposal с @group_path = N''.
4. sp_загрузка_прогноза_закупки
Назначение: Загрузка прогноза из Excel/внешних источников.
Записывает в forecast (scenario_id = 8), при отсутствии кода — подтягивает из scenario_id = 5.
В конце может вызывать sp_build_deficit_proposal (закомментировано для scenario 8).
5. create_forecast_loop
Назначение: Цикл по группам (path из pbi.groups, lvl=2).
Для каждого path вызывает sp_build_forecast_s4_by_group — наполняет forecast, не вызывает sp_build_deficit_proposal.
6. sp_build_forecast_s4_by_group
Назначение: Построение прогноза по группе (rate_per_day × дни × seasonal_koef).
Вставляет в analytics.forecast. Источник сезонности — analytics.seasonality_groups.
Представления
| View | Источник | Назначение |
|---|---|---|
analytics.deficit_orders |
deficit_proposal + nomenclature | Заказы по дефициту с ценой и суммой (status='Дефицит') |
Порядок выполнения (рекомендуемый)
- Прогноз:
create_forecast_loopилиsp_build_forecast_s4_by_groupилиsp_загрузка_прогноза_закупки - Дефицит:
sp_build_deficit_proposalилиsp_run_deficit_all_skus - План:
sp_rebuild_stock_plan_by_arrival(читает deficit_proposal; сперва должен быть вызван п.2)
Правила данных (дефицит)
- Дефицит определяется как net_stock < minAvailable (nomenclature.minAvailableQty).
- order_qty = прогноз спроса на окно [T .. T+cover_months).
- Статусы заказов «входящих»: см. 01_DATA_RULES. Фактически: sp_build_deficit_proposal — 3 статуса (Согласован закомментирован); sp_rebuild_stock_plan_by_arrival — 4 статуса.
- Интервалы дат — [start, end) (полуоткрытые).