rebuild
This commit is contained in:
parent
aa51e2ecde
commit
9dc861b25c
311
01_ПОЛНАЯ_СТРУКТУРА_PBI_И_SQL.md
Normal file
311
01_ПОЛНАЯ_СТРУКТУРА_PBI_И_SQL.md
Normal file
@ -0,0 +1,311 @@
|
||||
# База знаний: полная структура SQL (mag_pbi) и Power BI
|
||||
|
||||
> Извлечено из `analytics/sql_db_mag_pbi/mag_pbi_schema.sql` и `analytics/pbi/`. Независимый справочник для трассировки метрик и работы с данными.
|
||||
|
||||
---
|
||||
|
||||
## 1. Схемы базы данных mag_pbi
|
||||
|
||||
| Схема | Назначение |
|
||||
|-------|------------|
|
||||
| `pbi` | Основные таблицы и представления для Power BI |
|
||||
| `analytics` | Дефицит, прогноз, аналитика за 365 дней |
|
||||
| `pbiProd` | Сводная себестоимость, производство |
|
||||
| `ostatki` | Резервы, очереди сборок, склад |
|
||||
| `sebest` | Себестоимость до 2022 |
|
||||
| `stg` | Staging (загрузка прогноза) |
|
||||
| `artem` | Дополнительные данные |
|
||||
| `dbo` | Стандартные таблицы |
|
||||
|
||||
---
|
||||
|
||||
## 2. Таблицы (CREATE TABLE)
|
||||
|
||||
### 2.1 Схема pbi
|
||||
|
||||
| Таблица | Ключевые колонки |
|
||||
|--------|------------------|
|
||||
| `pbi.pricelist` | Цена, Вид цены, 1c_id, artic_id, Дата, _Period |
|
||||
| `pbi.Себестоимость` | id, Период, Статья, Вид операции, artic_id, Количество, Сумма, Закупка, Учетная цена, Номер заказа |
|
||||
| `pbi.СебестоимостьПродажи` | id, 1c_id, artic_id, Количество, Закупка, sebes_id |
|
||||
| `pbi.ostatki_short` | artic_id, 1c_id, Code, sklad, Категория склада, upakovok, quantity, date |
|
||||
| `pbi.enums` | — |
|
||||
| `pbi.nomenclature` | artic_id, 1c_id, code, description, group_id, Цена учетная руб/usd, minAvailableQty |
|
||||
| `pbi.groups` | group_id, path, 1c_id |
|
||||
| `pbi.w_ostatok_da_net` | dt, _IDRREF, artic_id, quantity, upakovok, ostatok, sellable_stock |
|
||||
| `pbi.content_rating` | — |
|
||||
| `pbi.direct_adv_costs` | — |
|
||||
| `pbi.direct_orders` | — |
|
||||
| `pbi.nomenclatureVolumeStorehouse` | — |
|
||||
| `pbi.ostatki` | Остатки полные |
|
||||
| `pbi.ostatki_mp` | Остатки МП |
|
||||
| `pbi.Turnover` | — |
|
||||
| `pbi.Себестоимость2023`, `Себестоимость2024` | — |
|
||||
| `pbi.СебестоимостьДо2022Тест` | — |
|
||||
| `pbi.СебестоимостьСводныйОт2022Тестовый` | — |
|
||||
| `pbi.СебестоимостьПродажиОт2022` | — |
|
||||
| `pbi.СебестоимостьПродажиТест`, `СебестоимостьТест` | — |
|
||||
|
||||
### 2.2 Схема analytics
|
||||
|
||||
| Таблица | Ключевые колонки |
|
||||
|---------|------------------|
|
||||
| `analytics.forecast` | id, scenario_id, 1c_id, code, month, value |
|
||||
| `analytics.forecast_scenarios` | scenario_id, name |
|
||||
| `analytics.deficit_proposal` | scenario_id, 1c_id, code, place_month, arrival_month, order_qty, projected_stock_at_T |
|
||||
| `analytics.stock_plan_by_arrival` | — |
|
||||
| `analytics.аналитика за 365 дн.` | Агрегаты ROIC, ТН, средний остаток |
|
||||
| `analytics.manufacturers` | — |
|
||||
| `analytics.manufacturer_payment_stage` | — |
|
||||
| `analytics.manufacturer_counterparty_map` | — |
|
||||
| `analytics.deficit_money_request` | — |
|
||||
| `analytics.forecast_history` | — |
|
||||
| `analytics.load_log_w_ostatok_da_net` | — |
|
||||
| `analytics.sales_weekly_features` | — |
|
||||
| `analytics.seasonality_groups` | — |
|
||||
| `analytics.seasonality_groups_summ_1` | — |
|
||||
| `analytics.stock_balance` | — |
|
||||
| `analytics.прогноз из excel` | — |
|
||||
| `analytics.срез учетных цен` | — |
|
||||
|
||||
### 2.3 Схема pbiProd
|
||||
|
||||
| Таблица | Назначение |
|
||||
|---------|------------|
|
||||
| `pbiProd.СебестоимостьСводныйОт2022` | Сводная себестоимость |
|
||||
| `pbiProd.СебестоимостьОт2022` | Себестоимость от 2022 |
|
||||
| `pbiProd.СебестоимостьДо2022` | До 2022 |
|
||||
| `pbiProd.СебестоимостьПроизводствоОт2022` | Производство |
|
||||
| `pbiProd.СебестоимостьИтогиДо2022` | — |
|
||||
| `pbiProd.УчетнаяЦенаПоСебестоимости` | — |
|
||||
| `pbiProd.GroupsOfNomenclature` | — |
|
||||
| `pbiProd.НоменклатураВПроизводствеПоУровням` | — |
|
||||
|
||||
### 2.4 Схема stg
|
||||
|
||||
| Таблица | Назначение |
|
||||
|---------|------------|
|
||||
| `stg.forecast_load` | Staging загрузки прогноза из Excel |
|
||||
|
||||
### 2.5 Схема dbo
|
||||
|
||||
| Таблица | Назначение |
|
||||
|--------|------------|
|
||||
| `dbo.content_rating`, `grades_quartal` | — |
|
||||
| `dbo.lineage_edges`, `lineage_objects` | — |
|
||||
| `dbo.order_source`, `site_product` | — |
|
||||
| `dbo.Turnover` | — |
|
||||
| `dbo.yandex_direct_criteria_stats` | — |
|
||||
|
||||
---
|
||||
|
||||
## 3. Представления (CREATE VIEW)
|
||||
|
||||
### 3.1 Схема pbi
|
||||
|
||||
| View | Источник / логика |
|
||||
|------|-------------------|
|
||||
| `pbi.[Себестоимость+СебестоимостьПродаж]` | pbi.Себестоимость + СебестоимостьПродажи, подстановка цен из pricelist |
|
||||
| `pbi.ОстаткиTotal` | ostatki_short, накопительный итог по складу/artic_id |
|
||||
| `pbi.БазоваяУпаковка` | Габариты из MAG_2019 |
|
||||
| `pbi.Заказы_тех` | Заказы поставщику |
|
||||
| `pbi.РекламаМаркетплейсы` | Реклама МП |
|
||||
| `pbi.Стоимость обработки заказа` | Стоимость МП |
|
||||
| `pbi.Резервы` | Резервы |
|
||||
| `pbi.Заказы` | Заказы |
|
||||
| `pbi.Заявки_на_оплату` | Заявки |
|
||||
| `pbi.Внешние остатки` | Внешние остатки |
|
||||
| `pbi.Расходы по годам` | Расходы |
|
||||
| `pbi.node_mp` | Узлы МП |
|
||||
| `pbi.Внешние продажи` | Продажи МП |
|
||||
| `pbi.nomeclature_for_pbi` | Номенклатура для PBI |
|
||||
| `pbi.Заказы в заявках` | — |
|
||||
| `pbi.[Себестоимость+СебестоимостьПродажОт2022]` | — |
|
||||
| `pbi.Сборки`, `Сборки_комплекты` | — |
|
||||
| `pbi.значения доп реквизитов номенклатуры` | — |
|
||||
| `pbi.Сохраненные настройки 1С для PowerBI` | — |
|
||||
|
||||
### 3.2 Схема analytics
|
||||
|
||||
| View | Назначение |
|
||||
|------|------------|
|
||||
| `analytics.get_forecast_by_group` | Прогноз по группе (forecast + nomenclature + groups) |
|
||||
| `analytics.get_forecast_scenarios` | Сценарии |
|
||||
| `analytics.get_orders_list` | Список заказов |
|
||||
| `analytics.get_analytics_by_group` | Аналитика по группе |
|
||||
| `analytics.get_orders_by_group` | Заказы по группе (входящие) |
|
||||
| `analytics.deficit_orders` | deficit_proposal + nomenclature (цена, сумма) |
|
||||
| `analytics.nomenclature` | — |
|
||||
| `analytics.Внешние остатки` | — |
|
||||
| `analytics.Остатки МП` | — |
|
||||
| `analytics.Где товар` | — |
|
||||
| `analytics.Заявки_на_оплату` | — |
|
||||
| `analytics.Заявки_без_проекта_неоплачено` | — |
|
||||
| `analytics.Ожидаемый расход` | — |
|
||||
| `analytics.Ожидаемое_поступление` | — |
|
||||
| `analytics.ForecastBasesKs` | Базы прогноза |
|
||||
| `analytics.doprekvizit`, `doprekvizitvalues` | — |
|
||||
| `analytics.images` | — |
|
||||
| `analytics.Курсы валют на сегодня` | — |
|
||||
| `analytics.Проекты` | — |
|
||||
| `analytics.v_manufacturers_roi_compat` | — |
|
||||
| `analytics.v_contractors`, `v_producers` | — |
|
||||
| `analytics.v_manufacturer_counterparty_mapping` | — |
|
||||
|
||||
### 3.3 Схема pbiProd
|
||||
|
||||
| View | Назначение |
|
||||
|------|------------|
|
||||
| `pbiProd.[СводныйСебестоимость Для PBI]` | **Основной источник Себестоимости в PBI** |
|
||||
| `pbiProd.СводныйСебестоимость` | — |
|
||||
| `pbiProd.ИтогСебестоимостьПродажОт2022` | — |
|
||||
|
||||
### 3.4 Схема ostatki
|
||||
|
||||
| View | Назначение |
|
||||
|------|------------|
|
||||
| `ostatki.РезервыМПиОПТ` | Резервы МП и ОПТ |
|
||||
| `ostatki.OstatkiMarketSklad` | — |
|
||||
| `ostatki.МаркировкаОчередьВРАботе` | — |
|
||||
| `ostatki.НаСогласовании` | — |
|
||||
| `ostatki.ОчередьНаСборкуРазборку` | — |
|
||||
| `ostatki.СборкиРазборкиВРаботе` | — |
|
||||
| `ostatki.СобираетсяИКСборке` | — |
|
||||
| `ostatki.СобраноНеОплачено` | — |
|
||||
| `ostatki.ТоварыВПеремещении` | — |
|
||||
|
||||
---
|
||||
|
||||
## 4. Хранимые процедуры
|
||||
|
||||
### 4.1 analytics — дефицит и прогноз
|
||||
|
||||
| Процедура | Назначение |
|
||||
|-----------|------------|
|
||||
| `analytics.sp_build_deficit_proposal` | Расчёт дефицита и рекомендаций к заказу |
|
||||
| `analytics.sp_rebuild_stock_plan_by_arrival` | План остатков по месяцам прихода |
|
||||
| `analytics.sp_run_deficit_all_skus` | Пересчёт дефицита по всем SKU |
|
||||
| `analytics.sp_build_forecast_s4_by_group` | Прогноз по группе |
|
||||
| `analytics.sp_загрузка_прогноза_закупки` | Загрузка прогноза из Excel |
|
||||
| `analytics.create_seasonality_groups` | Сезонность по группам |
|
||||
| `analytics.sp_create_analytics_365` | Аналитика за 365 дней |
|
||||
| `analytics.sp_load_koef_groups` | Коэффициенты групп |
|
||||
| `analytics.sp_recalc_roic` | Пересчёт ROIC |
|
||||
| `analytics.sp_report_ROI` | Отчёт ROI |
|
||||
| `analytics.Подготовка таблицы продаж к прогнозу` | Подготовка продаж |
|
||||
|
||||
### 4.2 pbi — миграция
|
||||
|
||||
| Процедура | Назначение |
|
||||
|-----------|------------|
|
||||
| `pbi.migrate_ostatki` | Миграция остатков |
|
||||
| `pbi.migrate_nomenclature` | Миграция номенклатуры |
|
||||
| `pbi.migrate_groups` | Миграция групп |
|
||||
| `pbi.migrate_pricelist` | Миграция прайс-листа |
|
||||
| `pbi.migrate_stock_balance` | — |
|
||||
| `pbi.migrate_max_year_quantity` | — |
|
||||
| `pbi.migrate_uchet_summa` | — |
|
||||
| `pbi.создание среза учетных цен` | Срез учётных цен |
|
||||
| `pbi.[Заполнить себестоимостьОт2022(закупки+продажи)]` | — |
|
||||
| `pbi.[Заполнить себестоимостьОт2022(СкладХранение)]` | — |
|
||||
| `pbi.РасчетСебестоимостиОт2022` | — |
|
||||
|
||||
### 4.3 pbiProd — себестоимость
|
||||
|
||||
| Процедура | Назначение |
|
||||
|-----------|------------|
|
||||
| `pbiProd.ЗаполнитьСебестоимостьСводныйОт2022` | — |
|
||||
| `pbiProd.[Пакетное: ...]` | Различные этапы заполнения себестоимости |
|
||||
| `pbiProd.[Подготовка Производство: ...]` | Подготовка производства |
|
||||
|
||||
### 4.4 sebest — себестоимость до 2022
|
||||
|
||||
| Процедура | Назначение |
|
||||
|-----------|------------|
|
||||
| `sebest.Заполнить себестоимость до 2022` | — |
|
||||
| `sebest.Заполнить себестоимость закупкой/продажей` | — |
|
||||
| `sebest.Расчет себестомисти` | — |
|
||||
|
||||
---
|
||||
|
||||
## 5. Power BI — таблицы и источники
|
||||
|
||||
### 5.1 Таблицы модели (из TMDL)
|
||||
|
||||
| Таблица PBI | Режим | SQL источник |
|
||||
|-------------|-------|--------------|
|
||||
| Номенклатура | import | pbi.nomeclature_for_pbi |
|
||||
| Партнер | import | pbi.Партнеры |
|
||||
| Стоимость МП | import | pbi.[Стоимость обработки заказа] |
|
||||
| Себестоимость | import | **pbiProd.[СводныйСебестоимость Для PBI]** |
|
||||
| Основной отчет | import | Calculated (placeholder) |
|
||||
| Группы | import | pbi.groups |
|
||||
| Остатки | import | **pbi.ostatki_short** |
|
||||
| Заявки на оплату | import | pbi.Заявки_на_оплату |
|
||||
| План продаж менеджеров | import | pbi.ПланПродажМенеджеров |
|
||||
| План продаж по группам | import | pbi.ПланыПродажПоГруппам |
|
||||
| Менеджеры | import | pbi.users_1C |
|
||||
| mp остатки | import | pbi.Внешние остатки |
|
||||
| mp аналитика продаж | import | pbi.[Внешние продажи] |
|
||||
| ПРАЙСлист | import | pbi.pricelist |
|
||||
| Упущенные продажи | import | pbi.w_ostatok_da_net (+ трансформации) |
|
||||
| Заказы все | import | pbi.Заказы |
|
||||
| mp реклама | import | pbi.РекламаМаркетплейсы |
|
||||
| План маркеты | import | — |
|
||||
| Резервы | import | pbi.Резервы |
|
||||
| Расходы по годам | import | pbi.[Расходы по годам] |
|
||||
| Я.Директ расходы | import | pbi.direct_adv_costs |
|
||||
| Я.Директ заказы | import | pbi.direct_orders |
|
||||
| mp узел | import | pbi.node_mp |
|
||||
| mp оборот | import | pbi.[Внешний оборот] |
|
||||
| .Календарь | calculated | Calendar |
|
||||
| LocalDateTable_* | calculated | Calendar по диапазону полей |
|
||||
| Организация | calculated | VALUES(Себестоимость[Организация]) |
|
||||
| Закупки | calculated | — |
|
||||
| Параметр цена продажи, % | calculated | GENERATESERIES(-20, 20, 0.5) |
|
||||
|
||||
### 5.2 Сервер
|
||||
|
||||
- **Sql.Database("prdsql", "mag_pbi")** — основной источник
|
||||
- **Sql.Databases("prdsql")** → mag_pbi — альтернативный доступ
|
||||
|
||||
### 5.3 Связи (relationships.tmdl)
|
||||
|
||||
- artic_id → Номенклатура._artic_id (Себестоимость, Остатки, mp остатки, Заказы все и др.)
|
||||
- Период/Дата → .Календарь.Дата
|
||||
- Номенклатура._group_id → Группы.group_id (bothDirections)
|
||||
- Остатки.Дата → LocalDateTable (variation)
|
||||
|
||||
---
|
||||
|
||||
## 6. Цепочка дефицита и прогноза
|
||||
|
||||
```
|
||||
forecast (analytics.forecast)
|
||||
↓
|
||||
sp_build_deficit_proposal → deficit_proposal
|
||||
↓
|
||||
sp_rebuild_stock_plan_by_arrival → stock_plan_by_arrival
|
||||
|
||||
Формула: closing = opening + inbound_confirmed + inbound_deficit - forecast_demand
|
||||
```
|
||||
|
||||
**Источники:**
|
||||
- opening_qty — pbi.w_ostatok_da_net (остаток на дату)
|
||||
- Входящие заказы — статусы: В пути, В производстве, Выгружен на складе, Согласован
|
||||
- Stock quantity — только `quantity` (не sellable_stock)
|
||||
|
||||
---
|
||||
|
||||
## 7. Ключевые таблицы для остатков
|
||||
|
||||
| Объект | Роль |
|
||||
|--------|------|
|
||||
| `pbi.ostatki_short` | Остатки для PBI (date, sklad, artic_id, quantity, upakovok) |
|
||||
| `pbi.w_ostatok_da_net` | Остаток на дату, opening_qty, availability (ostatok) |
|
||||
| `pbi.ostatki` | Полные остатки (накопительная) |
|
||||
| Фильтр | `[Категория склада] <> 'Виртуальный'` — исключение МП из складского остатка |
|
||||
|
||||
---
|
||||
|
||||
*Справочник сформирован по mag_pbi_schema.sql и analytics/pbi.*
|
||||
210
02_КОММЕНТАРИИ_ДЛЯ_ИИ_ПОМОЩНИКА.md
Normal file
210
02_КОММЕНТАРИИ_ДЛЯ_ИИ_ПОМОЩНИКА.md
Normal file
@ -0,0 +1,210 @@
|
||||
# Описание проекта MAG для ИИ-помощника
|
||||
|
||||
> Полное описание проекта: структура, компоненты, API, frontend, аналитика. Используй при ответах, доработках и отладке.
|
||||
|
||||
---
|
||||
|
||||
## 1. Общая архитектура
|
||||
|
||||
### 1.1 Структура репозитория
|
||||
|
||||
```
|
||||
mag/
|
||||
├── api/ # Backend авторизации, задач, корзин (Node.js, port 5710)
|
||||
├── magapi/ # Backend аналитики, MS SQL (Node.js, port 9001)
|
||||
├── quasar/ # SPA на Quasar/Vue 3
|
||||
├── analytics/ # PBI модель, SQL схема, база знаний
|
||||
│ ├── pbi/ # Power BI отчёт (TMDL)
|
||||
│ ├── sql_db_mag_pbi/ # Схема БД mag_pbi
|
||||
│ ├── 01_ПОЛНАЯ_СТРУКТУРА_PBI_И_SQL.md # База знаний SQL/PBI
|
||||
│ └── 02_КОММЕНТАРИИ_ДЛЯ_ИИ_ПОМОЩНИКА.md # Этот файл
|
||||
├── .cursor/rules/ # analize.mdc — правила для AI
|
||||
└── nginx-agent-snippet.conf
|
||||
```
|
||||
|
||||
### 1.2 Схема взаимодействия
|
||||
|
||||
```
|
||||
Quasar (SPA)
|
||||
├── api (axios) → MagAPI (/mag/) — данные аналитики, MSSQL
|
||||
├── apiAuth → API (/mag_backend/) — авторизация
|
||||
└── apiMain → API (/mag_backend/) — JWT, задачи, корзины, endpoints
|
||||
|
||||
MagAPI (9001) ──► MSSQL mag_pbi
|
||||
API (5710) ──► MySQL (users, jobs, basket)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. API (api/) — порт 5710
|
||||
|
||||
### 2.1 Маршруты
|
||||
|
||||
Динамический роутинг: `GET|POST /mag_backend/:lib/:path*`
|
||||
|
||||
| lib | Назначение | Примеры функций |
|
||||
|-----|------------|----------------|
|
||||
| auth | Авторизация | signIn, signInOneC, registerUser |
|
||||
| admin | Админка | users, addUser, updateUser, impersonate |
|
||||
| user | Профиль | fetchMe, myCategories |
|
||||
| jobs | Задачи | createJob, getJobs, startJob, startWBReviewsSync |
|
||||
| basket | Корзины | loadBaskets, addProductToBasket |
|
||||
| endpoints | Файлы, аналитика | uploadExcelToBD, getWBContentAnalytics |
|
||||
| products | Товары | getDetails, search |
|
||||
| potentialOrders | Потенциальные заказы | getPotentialOrders |
|
||||
| suppliers | Поставщики | loadProducts, getSupplierSettings |
|
||||
| ozon, ozonFbo, ozonFbs | Ozon | getOzonStocks, getOzonFboOrders |
|
||||
| agent | ИИ-помощник | **chat**, **chatStatus** |
|
||||
| ImportTask | Импорт | updateForecastFromFile |
|
||||
|
||||
### 2.2 ИИ-агент (`api/lib/agent.js`)
|
||||
|
||||
- **POST /agent/chat** — запуск Cursor Agent. Тело: `{ prompt, history }`. Ответ: `{ jobId }`.
|
||||
- **GET /agent/chatStatus?jobId=xxx** — polling результата. Ответ: `{ content, done }`.
|
||||
- Маркер конца: `__AGENT_DONE__` в файле.
|
||||
- CWD агента: `analytics/` (относительно api).
|
||||
- `CURSOR_API_KEY` в .env — обязателен.
|
||||
|
||||
### 2.3 Система задач (JobManager)
|
||||
|
||||
- **Файлы:** `api/lib/jobManager.js`, `api/lib/jobsInit.js`, `api/lib/jobHandlers/*`
|
||||
- **Модель:** `api/models/Job.js` (Sequelize, SQLite/MySQL)
|
||||
- **Типы:** sync_wb_reviews, sync_ozon_reviews, load_ozon_orders, load_ozon_stocks, update_wb_competitors_prices, update_ozon_competitors_prices, update_magok_content, analyze_wb_content
|
||||
- **Cron:** 02:00 WB, 03:00 Ozon, 04:00 Ozon orders, 05:00 Ozon stocks, 06:00 WB competitors, 07:00 Magok/Ozon competitors
|
||||
- **DISABLE_MARKET_JOBS=true** — отключить задачи маркетов
|
||||
|
||||
### 2.4 Роли и доступ
|
||||
|
||||
| Маршрут | Роли |
|
||||
|---------|------|
|
||||
| /agent/* | admin |
|
||||
| /jobs/* | admin, user |
|
||||
| /admin/* | admin |
|
||||
|
||||
---
|
||||
|
||||
## 3. MagAPI (magapi/) — порт 9001
|
||||
|
||||
### 3.1 Маршруты
|
||||
|
||||
`POST /mag/:lib/:fn`
|
||||
|
||||
| lib | Функции |
|
||||
|-----|---------|
|
||||
| markets | getDopRekvizit, getGroups, getNomenclature, getImages |
|
||||
| mag | getGroups, getPaymentRequests, getForecastScenarios, updateForecastFromFile |
|
||||
| cards | search, filterValues, getSupplierOrderInfo |
|
||||
| contractorProducer | getContractors, getProducers, calcNormalizedRoic |
|
||||
|
||||
### 3.2 База данных
|
||||
|
||||
- **MSSQL** mag_pbi (prdsql)
|
||||
- **Файлы:** `magapi/dbconfig.js`, `magapi/lib/markets.js`, `mag.js`, `cards.js`
|
||||
- **Swagger:** `/docs` — OpenAPI
|
||||
|
||||
---
|
||||
|
||||
## 4. Quasar (quasar/) — frontend
|
||||
|
||||
### 4.1 Конфигурация
|
||||
|
||||
- **settings.js:** baseURL (magapi), authURL (api), MAG_SECRET, AUTH_SECRET
|
||||
- **Роли:** admin, user, stocks, supplier_products, markets_products, uploader, image_uploader, pay, agent
|
||||
|
||||
### 4.2 Страницы и роуты
|
||||
|
||||
| Path | Роли | Страница |
|
||||
|------|------|----------|
|
||||
| / | — | IndexPage |
|
||||
| /auth | — | PageLogin |
|
||||
| /stocks | admin, stocks | PageStocksNew — остатки, прогноз |
|
||||
| /where_in_ozon | admin | PageWhereInOzon |
|
||||
| /where_goods | admin | PageWhereGoods |
|
||||
| /time_line | admin | PageTimeLine |
|
||||
| /potential_orders | admin | PagePotentialOrders |
|
||||
| /supplier_orders | admin, pay, stocks | PageSupplierOrders |
|
||||
| /supplier_products | admin | PageSupplierProducts |
|
||||
| /markets_products | admin | PageMarketsProducts |
|
||||
| /uploader | admin | PageFileUploader |
|
||||
| /image_uploader | admin | PageProductImageUploader |
|
||||
| /pay | admin | PagePayments |
|
||||
| **/agent** | **admin** | **PageAgent — чат с ИИ** |
|
||||
| /admin, /admin/jobs-log | admin | Админка, лог задач |
|
||||
|
||||
### 4.3 Ключевые компоненты отчётов
|
||||
|
||||
- **stocksNew/** — PageStocksNew, ForecastView, CardView, AnalyticsCol
|
||||
- **ForecastView.vue** — прогноз дефицита, план по месяцам
|
||||
- **AnalyticsCol.vue** — ROIC, средний остаток, ТН
|
||||
- **MainLayout.vue** — меню, корзина, drawer
|
||||
|
||||
---
|
||||
|
||||
## 5. Аналитика (analytics/)
|
||||
|
||||
### 5.1 Файлы базы знаний
|
||||
|
||||
- **01_ПОЛНАЯ_СТРУКТУРА_PBI_И_SQL.md** — таблицы, представления, процедуры, PBI-источники. Использовать при трассировке мер и работе с SQL.
|
||||
- **02_КОММЕНТАРИИ_ДЛЯ_ИИ_ПОМОЩНИКА.md** — этот файл.
|
||||
|
||||
### 5.2 Правила данных (соблюдать)
|
||||
|
||||
- **Stock quantity:** только `quantity`. Не `sellable_stock`.
|
||||
- **MP stock:** отдельно.
|
||||
- **Входящие заказы:** В пути, В производстве, Выгружен на складе, Согласован.
|
||||
- **Интервалы:** `[start, end)`.
|
||||
|
||||
### 5.3 Дефицит и прогноз
|
||||
|
||||
1. `analytics.forecast` + `sp_build_deficit_proposal` → `deficit_proposal`
|
||||
2. `sp_rebuild_stock_plan_by_arrival` → `stock_plan_by_arrival`
|
||||
3. opening_qty из `pbi.w_ostatok_da_net`
|
||||
|
||||
---
|
||||
|
||||
## 6. Рекомендации для ИИ-помощника
|
||||
|
||||
### 6.1 При ответах
|
||||
|
||||
- Аналитика: использовать `01_ПОЛНАЯ_СТРУКТУРА_PBI_И_SQL.md`.
|
||||
- Не выдумывать объекты схемы — только из файлов.
|
||||
- Отвечать на русском.
|
||||
|
||||
### 6.2 При доработке
|
||||
|
||||
- API: Express, JWT, checkRole.
|
||||
- Quasar: Vue 3, Pinia.
|
||||
- Аналитика: quantity, не sellable_stock.
|
||||
|
||||
### 6.3 Безопасность
|
||||
|
||||
- Ключи Ozon, WB, CURSOR_API_KEY — в .env.
|
||||
- JWT_SECRET, MAG_SECRET, AUTH_SECRET — в .env.
|
||||
|
||||
### 6.4 Типичные проблемы
|
||||
|
||||
- **Остатки не сходятся:** фильтр `Категория склада <> Виртуальный`, источник ostatki_short vs w_ostatok_da_net.
|
||||
- **Меры PBI пустые:** связи с .Календарь, REMOVEFILTERS.
|
||||
- **Дефицит не считается:** выполнить sp_build_deficit_proposal до sp_rebuild_stock_plan_by_arrival.
|
||||
- **Агент не отвечает:** CURSOR_API_KEY, путь agent.exe (Windows).
|
||||
|
||||
---
|
||||
|
||||
## 7. Файлы для быстрого поиска
|
||||
|
||||
| Вопрос | Файл |
|
||||
|--------|------|
|
||||
| Структура SQL/PBI | analytics/01_ПОЛНАЯ_СТРУКТУРА_PBI_И_SQL.md |
|
||||
| Этот документ | analytics/02_КОММЕНТАРИИ_ДЛЯ_ИИ_ПОМОЩНИКА.md |
|
||||
| API маршруты | api/api.js |
|
||||
| ИИ-агент | api/lib/agent.js |
|
||||
| Задачи cron | api/lib/jobsInit.js |
|
||||
| Роуты frontend | quasar/src/router/routes.js |
|
||||
| Настройки | quasar/src/config/settings.js |
|
||||
| Схема SQL | analytics/sql_db_mag_pbi/mag_pbi_schema.sql |
|
||||
| Меры PBI | analytics/pbi/model/report/Model/tables/Основной отчет.tmdl |
|
||||
| Cursor rules | .cursor/rules/analize.mdc |
|
||||
|
||||
---
|
||||
|
||||
*Документ для загрузки на сервер и использования ИИ-помощником при работе с проектом MAG.*
|
||||
178
STRUCTURE.md
178
STRUCTURE.md
@ -1,178 +0,0 @@
|
||||
# Структура аналитики: SQL и Power BI
|
||||
|
||||
Справочник, объединяющий правила из `context/*.md` со структурой БД и PBI-модели.
|
||||
|
||||
---
|
||||
|
||||
## 1. Правила данных (01_DATA_RULES)
|
||||
|
||||
| Правило | Описание |
|
||||
|---------|----------|
|
||||
| Stock quantity | Только поле `quantity`. **Никогда** не использовать `sellable_stock` в расчётах остатков |
|
||||
| MP stock | Остатки маркетплейса считаются отдельно и добавляются при необходимости |
|
||||
| Входящие заказы | Статусы: `В пути`, `В производстве`, `Выгружен на складе`, `Согласован` |
|
||||
| Интервалы дат | Формат `[start, end)` (полуоткрытый интервал) при агрегации |
|
||||
|
||||
---
|
||||
|
||||
## 2. Глоссарий (02_GLOSSARY)
|
||||
|
||||
| Термин | Значение |
|
||||
|--------|----------|
|
||||
| Stock (шт) | Физическое количество по полю `quantity` |
|
||||
| Stock (руб) | Денежная оценка остатков |
|
||||
| MP | Marketplace (маркетплейс) |
|
||||
| Data mart | SQL view/table, подготовленная для аналитики |
|
||||
|
||||
---
|
||||
|
||||
## 3. SQL: Таблицы (analytics schema)
|
||||
|
||||
### 3.1 Дефицит и прогноз
|
||||
|
||||
| Таблица | Назначение | Ключевые поля |
|
||||
|---------|------------|---------------|
|
||||
| `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 |
|
||||
| `analytics.forecast_scenarios` | Сценарии прогноза | scenario_id, name |
|
||||
| `analytics.seasonality_groups` | Сезонность по группам (для sp_build_forecast_s4_by_group) | — |
|
||||
| `stg.forecast_load` | Staging загрузки прогноза из Excel | — |
|
||||
|
||||
### 3.2 Справочники и остатки (pbi schema)
|
||||
|
||||
| Таблица | Назначение |
|
||||
|---------|------------|
|
||||
| `pbi.nomenclature` | Номенклатура (minAvailableQty для minAvailable) |
|
||||
| `pbi.groups` | Группы (path для group_path) |
|
||||
| `pbi.w_ostatok_da_net` | Остаток на дату (для opening_qty) |
|
||||
|
||||
---
|
||||
|
||||
## 4. SQL: Представления (Views)
|
||||
|
||||
| View | Назначение | Источники |
|
||||
|------|------------|-----------|
|
||||
| `analytics.get_orders_by_group` | Входящие заказы по группе | Заказы со статусами 01_DATA_RULES |
|
||||
| `analytics.get_quantity_by_group` | Остаток склада по группе | quantity (не sellable_stock) |
|
||||
| `analytics.get_mp_quantity_by_group` | MP-остатки по группе | — |
|
||||
| `analytics.get_forecast_by_group` | Прогноз по группе | analytics.forecast |
|
||||
| `analytics.get_forecast_scenarios` | Сценарии прогноза | analytics.forecast_scenarios |
|
||||
| `analytics.deficit_orders` | Заказы по дефициту с ценой и суммой | deficit_proposal + nomenclature (status='Дефицит') |
|
||||
|
||||
---
|
||||
|
||||
## 5. SQL: Хранимые процедуры
|
||||
|
||||
### 5.1 Цепочка дефицита (06_DEFICIT_FORECAST)
|
||||
|
||||
```
|
||||
forecast → sp_build_deficit_proposal → deficit_proposal
|
||||
↑ ↓
|
||||
stock + inbound + │ sp_rebuild_stock_plan_by_arrival
|
||||
minAvail └──────────────────── stock_plan_by_arrival
|
||||
```
|
||||
|
||||
### 5.2 Процедуры
|
||||
|
||||
| Процедура | Назначение | Параметры по умолчанию |
|
||||
|-----------|------------|------------------------|
|
||||
| `sp_build_deficit_proposal` | Дефицит и рекомендации к заказу | @scenario_id=4, @group_path='', @lead_time_m=4, @cover_months=6 |
|
||||
| `sp_rebuild_stock_plan_by_arrival` | План остатков по месяцам прихода | @scenario_id, @from_month, @to_month |
|
||||
| `sp_run_deficit_all_skus` | Пересчёт дефицита по всем SKU | Вызывает sp_build_deficit_proposal с group_path='' |
|
||||
| `create_forecast_loop` | Цикл по группам (lvl=2) | — |
|
||||
| `sp_build_forecast_s4_by_group` | Прогноз по группе (rate×дни×seasonal_koef) | Вставляет в forecast |
|
||||
| `sp_загрузка_прогноза_закупки` | Загрузка прогноза из Excel | forecast scenario_id=8 |
|
||||
|
||||
### 5.3 Рекомендуемый порядок выполнения
|
||||
|
||||
1. **Прогноз:** `create_forecast_loop` ИЛИ `sp_build_forecast_s4_by_group` ИЛИ `sp_загрузка_прогноза_закупки`
|
||||
2. **Дефицит:** `sp_build_deficit_proposal` ИЛИ `sp_run_deficit_all_skus`
|
||||
3. **План:** `sp_rebuild_stock_plan_by_arrival` (читает deficit_proposal; п.2 должен быть выполнен первым)
|
||||
|
||||
### 5.4 Формула closing (stock_plan_by_arrival)
|
||||
|
||||
```
|
||||
closing = opening + inbound_confirmed + inbound_deficit - forecast_demand
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. Power BI: Модель (TMDL)
|
||||
|
||||
### 6.1 Таблицы модели (PBI QueryOrder)
|
||||
|
||||
| Таблица | Источник |
|
||||
|---------|----------|
|
||||
| Номенклатура | Sql.Database |
|
||||
| Партнер | Sql.Database |
|
||||
| Стоимость МП | Sql.Database |
|
||||
| Основной отчет | Sql.Database |
|
||||
| Группы | Sql.Database |
|
||||
| Остатки | Sql.Database |
|
||||
| Закупки | Sql.Database |
|
||||
| Заявки на оплату | Sql.Database |
|
||||
| План продаж менеджеров | Sql.Database |
|
||||
| План продаж по группам | Sql.Database |
|
||||
| Менеджеры | Sql.Database |
|
||||
| mp остатки | Sql.Database |
|
||||
| mp аналитика продаж | Sql.Database |
|
||||
| ПРАЙСлист | Sql.Database |
|
||||
| Заказы все | Sql.Database |
|
||||
| ... (см. model.tmdl) | — |
|
||||
|
||||
### 6.2 Связи и меры
|
||||
|
||||
- Связи: `relationships.tmdl`
|
||||
- Меры: `expressions.tmdl`, таблицы `.tmdl` в `Model/tables/`
|
||||
- Культура: ru-RU
|
||||
- Compatibility level: 1600
|
||||
|
||||
---
|
||||
|
||||
## 7. Workflow: Trace Measure (03_WORKFLOWS, 05_OUTPUT_FORMATS)
|
||||
|
||||
### Последовательность
|
||||
|
||||
1. Найти меру в TMDL
|
||||
2. Показать DAX
|
||||
3. Указать зависимые меры/таблицы
|
||||
4. Извлечь SQL source из partition (Sql.Database, Schema, Item или Query)
|
||||
5. Сформировать объяснение
|
||||
|
||||
### Формат вывода
|
||||
|
||||
1. Measure Name
|
||||
2. DAX Formula
|
||||
3. Dependencies
|
||||
4. SQL Source (server, database, schema, object)
|
||||
5. Business Explanation
|
||||
6. Usage Recommendations
|
||||
7. Validation Checks
|
||||
|
||||
---
|
||||
|
||||
## 8. Workflow: Trace Deficit / Forecast
|
||||
|
||||
1. Прогноз → `sp_build_deficit_proposal` → deficit_proposal
|
||||
2. deficit_proposal + forecast + inbound → `sp_rebuild_stock_plan_by_arrival` → stock_plan_by_arrival
|
||||
3. order_qty = прогноз окна [T .. T+cover); дефицит при net_stock < minAvailable
|
||||
|
||||
---
|
||||
|
||||
## 9. Knowledge Base Policy (04_KB_POLICY)
|
||||
|
||||
- Новая документация — черновик
|
||||
- Только утверждённое содержание — в общую базу знаний
|
||||
- Хранить в `/docs/metrics`
|
||||
- Каждая статья: DAX, SQL lineage, бизнес-объяснение
|
||||
|
||||
---
|
||||
|
||||
## 10. AI Architect (00_SYSTEM)
|
||||
|
||||
- Трассировка мер от TMDL к SQL
|
||||
- Структурированные объяснения метрик
|
||||
- Соблюдение правил данных
|
||||
- **Не придумывать** объекты схемы — только из файлов проекта
|
||||
- Трассировка дефицита/прогноза с процедурами
|
||||
@ -1,20 +0,0 @@
|
||||
# AI Architect System Context
|
||||
|
||||
You are an AI architect for Power BI + MS SQL analytics.
|
||||
|
||||
Main responsibilities:
|
||||
- Trace measures from TMDL to SQL sources.
|
||||
- Build structured explanations of metrics.
|
||||
- Respect project data rules.
|
||||
- Never invent schema objects — always read project files.
|
||||
- Trace deficit/forecast flow (context/06_DEFICIT_FORECAST.md) with procedures.
|
||||
|
||||
Workflow:
|
||||
1. Find measure in TMDL.
|
||||
2. Extract DAX.
|
||||
3. Resolve dependencies.
|
||||
4. Extract partition/source (Sql.Database, Schema, Item or Query).
|
||||
5. Produce structured explanation.
|
||||
|
||||
Language: Russian.
|
||||
Style: structured, precise, no fluff.
|
||||
@ -1,18 +0,0 @@
|
||||
# Data Rules
|
||||
|
||||
## Идентификаторы 1С (схема analytics)
|
||||
|
||||
- **`*_1c_id`** — бинарный ключ 1С (`BINARY(16)`), ссылка на `_IDRRef` справочника/документа.
|
||||
- **`*_id`** — строковый id (GUID в формате `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`) для API, поиска, отображения.
|
||||
|
||||
Пример: `contractor_1c_id` (binary) в таблице, `contractor_id` (nvarchar) в представлении для выдачи во внешние системы.
|
||||
|
||||
---
|
||||
|
||||
- Stock quantity = field 'quantity' only.
|
||||
- Never use 'sellable_stock' in stock calculations.
|
||||
- Marketplace (MP) stock is calculated separately and added if needed.
|
||||
- Orders with statuses:
|
||||
'В пути', 'В производстве', 'Выгружен на складе', 'Согласован'
|
||||
are treated as incoming stock.
|
||||
- Use date intervals as [start, end) when aggregating.
|
||||
@ -1,6 +0,0 @@
|
||||
# Glossary
|
||||
|
||||
- Stock (шт) — physical quantity, based on 'quantity'.
|
||||
- Stock (руб) — monetary valuation of stock.
|
||||
- MP — marketplace.
|
||||
- Data mart — SQL view/table prepared for analytics.
|
||||
@ -1,23 +0,0 @@
|
||||
# Standard Workflows
|
||||
|
||||
## Trace Measure
|
||||
1. Locate measure in TMDL.
|
||||
2. Show DAX.
|
||||
3. List dependent measures/tables.
|
||||
4. Extract SQL source from partition.
|
||||
5. Produce explanation.
|
||||
|
||||
## Trace Deficit / Forecast
|
||||
1. Читай context/06_DEFICIT_FORECAST.md.
|
||||
2. Прогноз → sp_build_deficit_proposal → deficit_proposal.
|
||||
3. deficit_proposal + forecast + inbound → sp_rebuild_stock_plan_by_arrival → stock_plan_by_arrival.
|
||||
4. order_qty = прогноз окна [T .. T+cover); дефицит при net_stock < minAvailable.
|
||||
|
||||
## Documentation Draft
|
||||
Structure:
|
||||
- Purpose
|
||||
- DAX
|
||||
- Dependencies
|
||||
- SQL sources
|
||||
- Business meaning
|
||||
- Usage notes
|
||||
@ -1,6 +0,0 @@
|
||||
# Knowledge Base Policy
|
||||
|
||||
- New documentation starts as draft.
|
||||
- Only approved content becomes shared knowledge.
|
||||
- Store documentation under /docs/metrics.
|
||||
- Each article must include DAX, SQL lineage and business explanation.
|
||||
@ -1,11 +0,0 @@
|
||||
# Output Formats
|
||||
|
||||
## Measure Trace Format
|
||||
|
||||
1. Measure Name
|
||||
2. DAX Formula
|
||||
3. Dependencies
|
||||
4. SQL Source (server, database, schema, object)
|
||||
5. Business Explanation
|
||||
6. Usage Recommendations
|
||||
7. Validation Checks
|
||||
@ -1,133 +0,0 @@
|
||||
# Механика расчёта дефицита поверх прогноза
|
||||
|
||||
## Общая схема
|
||||
|
||||
```
|
||||
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'
|
||||
|
||||
**Шаги логики:**
|
||||
1. Календарь месяцев [from, to)
|
||||
2. SKU по group_path (pbi.groups.path LIKE @path + '%')
|
||||
3. Прогноз из `analytics.forecast` по scenario_id
|
||||
4. Inbound — подтверждённые заказы (get_orders_by_group): статусы В пути, В производстве, Выгружен на складе (Согласован закомментирован в коде)
|
||||
5. Stock = остаток склад (get_quantity_by_group) + MP (get_mp_quantity_by_group)
|
||||
6. Последовательность по месяцам: demand_m, inbound_m, served_m, lost_m, net_stock (рекурсивный flow)
|
||||
7. Первый месяц дефицита T: net_stock < minAvailable, месяц >= @from + lead_time
|
||||
8. Якоря: T, T+cover, T+2cover... до to_month_excl
|
||||
9. 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:**
|
||||
1. opening_qty — остаток на дату < from_month (pbi.w_ostatok_da_net)
|
||||
2. inbound_confirmed — подтверждённые заказы по месяцу прихода (get_orders_by_group: В пути, В производстве, Выгружен на складе, Согласован)
|
||||
3. inbound_deficit — SUM(order_qty) по deficit_proposal
|
||||
4. 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='Дефицит') |
|
||||
|
||||
---
|
||||
|
||||
## Порядок выполнения (рекомендуемый)
|
||||
|
||||
1. Прогноз: `create_forecast_loop` или `sp_build_forecast_s4_by_group` или `sp_загрузка_прогноза_закупки`
|
||||
2. Дефицит: `sp_build_deficit_proposal` или `sp_run_deficit_all_skus`
|
||||
3. План: `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) (полуоткрытые).
|
||||
Binary file not shown.
Loading…
Reference in New Issue
Block a user