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