# Номенклатурный производственный план на основе прогнозов (mklab_forecast_mrp)

---

## Описание

Модуль автоматизирует цикл планирования производства на основе анализа истории продаж:

- **Прогнозирование спроса** — анализирует заказы продаж за последние 12 месяцев с учётом дня недели и месяца года (сезонность). Нормализует исторические данные по прошедшим акциям и применяет ожидаемый рост, если на прогнозируемую дату запланирована маркетинговая акция.
- **Планирование производства** — по готовому прогнозу одним действием создаёт заказы на производство (`mrp.production`) для всех позиций.
- **Автоподбор ведомости материалов** — для каждого продукта автоматически находит спецификацию (BOM), для которой все компоненты есть на складе в нужном количестве.
- **Маркетинговые акции** — ведёт реестр акций с датами отгрузки и продаж на полке, привязывает к акции продукты (со скидками и ожидаемым ростом) и контрагентов.
- **Анализ влияния скидок** — мастер-форма для расчёта фактического роста продаж при заданной паре скидок (наша скидка + скидка на полке) на основе реальной истории заказов.

---

## Установка

### Требования

- Odoo 19.0
- PostgreSQL 16+
- Python 3.10+

### Ручная установка

1. Скопировать папку `mklab_forecast_mrp` в директорию `addons` вашего Odoo.
2. В `odoo.conf` добавить путь к папке в `addons_path`.
3. Перезапустить Odoo.
4. Настройки → Приложения → убрать фильтр "Приложения" → найти **mklab_forecast_mrp** → Установить.

---

## Как пользоваться

После установки в главном меню появится раздел **План** с тремя подразделами.

### Стимулирующие мероприятия

Перед работой с прогнозами заведите акции.

**План → Стимулирующие мероприятия → Мероприятия → Создать**

| Поле | Описание |
|---|---|
| Дата начала/окончания отгрузок | Период, когда товар отгружается по акции |
| Дата начала/окончания продаж на полке | Период продаж у покупателя |
| Продукты | Список товаров с размером скидки и ожидаемым ростом продаж (%) |
| Контрагенты | Если заполнено — акция действует только для указанных контрагентов |

---

### Прогнозирование и план производства

**План → Планирование → Прогнозы → Создать**

**Шаг 1.** Указать дату прогноза и при необходимости ограничить список контрагентов.

**Шаг 2.** Нажать **Заполнить строки** — автоматически добавятся все продукты с флагом "Участвует в прогнозах" (настраивается на карточке продукта).

**Шаг 3.** Для каждой строки доступны действия:
- **Прогноз** — рассчитать прогнозное количество на основе истории продаж
- **Факт** — подтянуть фактические данные по заказам и отгрузкам за эту дату
- **Подобрать ВМ** — найти ведомость материалов, для которой все компоненты есть на складе

**Шаг 4.** Включить флаг **Отправить на расчёт** — фоновый cron пересчитает строки автоматически (по 5 штук за итерацию).

**Шаг 5.** Нажать **Создать заказы на производство** — для всех строк с заполненным прогнозом и ведомостью материалов будут созданы заказы на производство.

**Шаг 6.** Нажать **Утвердить** для фиксации прогноза.

> Поле **Ожидаемый рост при акции, %** — применяется как коэффициент роста, если на прогнозируемую дату найдена акция, но продукт не указан в её составе явно.

---

### Анализ влияния скидок

**План → Анализ данных → Мастер анализа данных**

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

1. Указать период анализа и точность сопоставления скидок (±%).
2. Добавить строки: продукт + наша скидка + скидка на полке.
3. Нажать **Расчёт** — система сравнит средние продажи в дни акции и без акции и выведет процент роста.

---

### Настройка продуктов

На карточке продукта (Инвентарь → Продукты) доступны дополнительные поля:

- **Участвует в прогнозах** — продукт будет включён при автозаполнении строк прогноза

На карточке ведомости материалов:

- **Виртуальная** — пометить BOM как сгенерированный автоматически (такие BOM пропускаются при автоподборе)
