docs: NEXT_SESSION.md — полное актуальное состояние на 09.06.2026
This commit is contained in:
+105
-45
@@ -1,53 +1,94 @@
|
|||||||
# DairyTrends Report Generator — состояние на 09.06.2026
|
# DairyTrends Report Generator — состояние на 09.06.2026
|
||||||
|
|
||||||
## Репозитории
|
## Два модуля в Gitea
|
||||||
- **Генератор**: https://git.zeroday.su/admin/dairy-report-generator → `/var/www/dairy-report-generator/`
|
|
||||||
- **Next.js приложение**: https://git.zeroday.su/admin/dairynews-nextjs → `/var/www/dairynews/`
|
|
||||||
- **Сервер**: dev2 (77.222.43.248)
|
|
||||||
|
|
||||||
## Что сделано и работает
|
| Модуль | Gitea | Сервер |
|
||||||
|
|--------|-------|--------|
|
||||||
|
| **dairy-report-generator** | https://git.zeroday.su/admin/dairy-report-generator | `/var/www/dairy-report-generator/` |
|
||||||
|
| **dairynews-nextjs** | https://git.zeroday.su/admin/dairynews-nextjs | `/var/www/dairynews/` |
|
||||||
|
| **Сервер** | dev2 | `77.222.43.248` |
|
||||||
|
|
||||||
### 5 графиков (SVG → sharp → PNG → DOCX)
|
Связь: `dairynews-nextjs` подключает `dairy-report-generator` как `file:../dairy-report-generator` (symlink в node_modules).
|
||||||
|
|
||||||
| Файл | Описание | Статус |
|
---
|
||||||
|------|----------|--------|
|
|
||||||
| chart1.js | Линейный: цена + себестоимость + 3 сценария + барчарт маржи | ✅ |
|
|
||||||
| chart2.js | Две панели: горизонт. бары (красный=переработчик, серый=производитель) + верт. бары объёма | ✅ |
|
|
||||||
| chart3.js | Горизонт. бары EBITDA, цвет по группе (А=красный, Б=серый, В=красный приглушённый) | ✅ |
|
|
||||||
| chart4.js | Две панели, серые бары + красный highlight; режим independentScales для регионов | ✅ |
|
|
||||||
| chart5.js | Группированные бары сценариев, зелёный/красный/серый | ✅ |
|
|
||||||
|
|
||||||
### Документ (document.js)
|
## Модуль 1: dairy-report-generator
|
||||||
- Обложка: хедер DT, 4 KPI-блока, callout "Главный вывод"
|
|
||||||
- Раздел 1: Ключевые выводы
|
|
||||||
- Раздел 2: Введение
|
|
||||||
- Раздел 3: Методика + Таблица 1 (допущения)
|
|
||||||
- Раздел 4: Ретроспектива + **Таблица 2** (кварталы 2024/2025/2026) + Рисунок 1
|
|
||||||
- Раздел 5: Анализ предприятий (5.1 лидеры + Рис.2, 5.2 кластеры + Рис.3, callout разрыв, Рис.4)
|
|
||||||
- Раздел 6: Прогноз + Рис.5 + **Таблица 3** (3 сценария × 3 квартала + Пр-во тыс.т)
|
|
||||||
- Раздел 7: Рекомендации (3 аудитории)
|
|
||||||
|
|
||||||
### Данные
|
### Что делает
|
||||||
- **127 недель РФ** + **413 по 8 ФО** с 2024-01-01 по сегодня
|
Генерирует DOCX отчёты в стиле DairyTrends. Принимает конфиг с данными, отдаёт Buffer.
|
||||||
- Источник: dn MySQL `region_index` → Prisma `DairyIndex`
|
|
||||||
- Автосинхронизация: cron пн 06:00 → `scripts/sync-region-index.js`
|
|
||||||
- `BITRIX_MYSQL_URL=mysql://dt_reader:DT_reader_2026!@188.127.243.10:3306/dn_ru`
|
|
||||||
|
|
||||||
### Дизайн
|
### Структура
|
||||||
- Единый серо-красный стиль chart4 (серые соседи + красный выбранный субъект)
|
```
|
||||||
- Падеж субъекта в текстах: предложный "в Северо-Западном" (через FO_PREP)
|
src/
|
||||||
- Динамические пороги кластеризации (фикс/квантильный fallback)
|
data/palette.js ← DT-палитра (#CC3300, серые, зелёный)
|
||||||
|
charts/
|
||||||
|
chart1.js ← Линейный: цена + себестоимость + 3 сценария + барчарт маржи
|
||||||
|
chart2.js ← Две панели: горизонт. бары (красный=переработчик, серый=производитель) + верт. объём
|
||||||
|
chart3.js ← Горизонт. EBITDA: цвет по группе А/Б/В + легенда
|
||||||
|
chart4.js ← Две панели: серо-красный стиль; режим independentScales для регионов
|
||||||
|
chart5.js ← Сценарии маржи: зелёный/красный/серый
|
||||||
|
generators/
|
||||||
|
document.js ← Сборка DOCX: хедер (DT красный квадрат), таблицы с красным заголовком, разделы
|
||||||
|
index.js ← Entry point: generateReport(config) → Buffer
|
||||||
|
examples/
|
||||||
|
russia.js ← Полный пример для РФ
|
||||||
|
```
|
||||||
|
|
||||||
### Генерация картинок
|
### Дизайн (финальный)
|
||||||
- Страница `/admin/content/images`
|
- DT-квадрат в хедере: **красный** (#CC3300) фон, белый текст
|
||||||
- gpt-image-2 через aiguoguo199, баланс = лимит − потрачено
|
- Заголовки таблиц: **красный** фон, белый текст
|
||||||
- Таймаут nginx 300s (был 504)
|
- Основной красный цвет: `#CC3300` (ярче чем было #C0272D)
|
||||||
|
- Chart4: серые бары для всех, красный для isHighlight
|
||||||
|
|
||||||
## Что нужно сделать (backlog)
|
---
|
||||||
|
|
||||||
1. **Региональный отчёт (не ФО)** — для конкретной области типа Вологды нужны данные надоя (model RegionalIndicator или внешний источник). Сейчас chart4 умеет independentScales=true, но данные надоя в БД нет.
|
## Модуль 2: dairynews-nextjs (new.dairy-news.ru)
|
||||||
2. **МЗЫ-отчёт** — для хозяйства Агромилк/МЗЫ: надой, поголовье, собственная цена. Нужна своя схема.
|
|
||||||
3. **Данные 2025 год в Таблице 2** — некоторые кварталы показывают прочерки, т.к. БД заполнена только с dec 2025 для РФ (ФО с 2024). Можно добрать из dn региональных данных.
|
### Ключевые файлы
|
||||||
|
```
|
||||||
|
src/lib/dairytrends-report-config.ts ← buildReportConfig() — данные + тексты
|
||||||
|
src/app/admin/dairytrends/reports/ ← Страница генерации отчётов
|
||||||
|
src/app/admin/content/images/ ← AI-картинки (gpt-image-2)
|
||||||
|
src/app/api/admin/dairytrends/reports/generate/route.ts
|
||||||
|
src/app/api/admin/content/images/generate/route.ts
|
||||||
|
scripts/sync-region-index.js ← Cron пн 06:00 — цены из dn
|
||||||
|
scripts/sync-yield-stats.js ← Cron пн 06:30 — надой/производство/поголовье из dn
|
||||||
|
```
|
||||||
|
|
||||||
|
### Данные в PostgreSQL (dev2)
|
||||||
|
| Таблица | Источник | Записей | Период |
|
||||||
|
|---------|----------|---------|--------|
|
||||||
|
| DairyIndex (DAIRY_INDEX_RU) | region_index dn MySQL | 876 | 2023–2026 |
|
||||||
|
| DairyIndex (MILK_YIELD) | refion_stat_msx dn MySQL | ~1330 | 2023–2026 |
|
||||||
|
| DairyIndex (MILK_PRODUCTION) | refion_stat_msx | ~1330 | 2023–2026 |
|
||||||
|
| DairyIndex (COW_COUNT) | refion_stat_msx | ~1330 | 2023–2026 |
|
||||||
|
| Organization + OrganizationFinancial | СБИС вручную | 10 орг, год 2024 | |
|
||||||
|
|
||||||
|
### Автосинхронизация (cron на dev2)
|
||||||
|
```
|
||||||
|
0 6 * * 1 node scripts/sync-region-index.js # цены по ФО + РФ
|
||||||
|
30 6 * * 1 node scripts/sync-yield-stats.js # надой, производство, поголовье
|
||||||
|
```
|
||||||
|
|
||||||
|
### KPI блок обложки (динамический)
|
||||||
|
| Карточка | Источник |
|
||||||
|
|----------|----------|
|
||||||
|
| Закуп. цена (базовый) | scenarios.base min–max из DairyIndex |
|
||||||
|
| Рост производства I кв. | +2,1% (Росстат, статичный до добавления PRODUCTION_VOLUME) |
|
||||||
|
| Надой / корову | DairyIndex MILK_YIELD × 365, по regionCode |
|
||||||
|
| Ключевая ставка ЦБ | 14,5% (статичный, обновлять вручную при изменении) |
|
||||||
|
|
||||||
|
### Структура отчёта (7 разделов)
|
||||||
|
1. Обложка: KPI × 4 + Главный вывод
|
||||||
|
2. Ключевые выводы (5 пунктов)
|
||||||
|
3. Введение и источники
|
||||||
|
4. Методика + Таблица 1 (допущения)
|
||||||
|
5. Ретроспектива + **Таблица 2** (кварталы 2024/2025/2026) + Рисунок 1
|
||||||
|
6. Анализ предприятий (5.1 лидеры + Рис.2, 5.2 кластеры + Рис.3, callout, Рис.4)
|
||||||
|
7. Прогноз + Рис.5 + **Таблица 3** (3 сценария × 3 кв. + Пр-во тыс.т)
|
||||||
|
8. Рекомендации (3 аудитории)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Smoke-тест
|
## Smoke-тест
|
||||||
```bash
|
```bash
|
||||||
@@ -58,10 +99,29 @@ bash scripts/smoke-report.sh fo:СЗФО # Северо-Западный
|
|||||||
bash scripts/smoke-report.sh fo:ПФО # Приволжский
|
bash scripts/smoke-report.sh fo:ПФО # Приволжский
|
||||||
```
|
```
|
||||||
|
|
||||||
## Ключевые файлы
|
## Деплой после изменений
|
||||||
```
|
```bash
|
||||||
/var/www/dairynews/src/lib/dairytrends-report-config.ts ← данные, тексты, таблицы
|
# После правок в dairynews-nextjs или dairytrends-report-config.ts:
|
||||||
/var/www/dairy-report-generator/src/charts/chart1-5.js ← SVG-генераторы
|
screen -dmS build bash -c "cd /var/www/dairynews && NODE_ENV=production node_modules/.bin/next build > /tmp/build.log 2>&1; pm2 restart dairynews; echo DONE >> /tmp/build.log"
|
||||||
/var/www/dairy-report-generator/src/generators/document.js ← сборка DOCX
|
|
||||||
/var/www/dairynews/scripts/sync-region-index.js ← cron-синхронизация
|
# После правок только в dairy-report-generator (charts, document):
|
||||||
|
pm2 restart dairynews # symlink — достаточно перезапуска
|
||||||
```
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Backlog
|
||||||
|
|
||||||
|
1. **Организации за 2025** — данные в OrganizationFinancial только за 2024. Нужно добавить при появлении отчётности СБИС.
|
||||||
|
2. **Региональный отчёт по области** (Вологда и т.д.) — chart4 готов с independentScales=true, но нужно заполнять regionComparison с надоем vs ценой из DairyIndex.
|
||||||
|
3. **МЗЫ-отчёт** — хозяйство Агромилк, нужна отдельная схема данных.
|
||||||
|
4. **Ключевая ставка ЦБ** — сейчас статичная (14,5%), хорошо бы парсить с cbr.ru автоматически.
|
||||||
|
5. **Рост производства** — сейчас статичный +2,1%, нужна модель с объёмами производства по ФО.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Инфраструктура
|
||||||
|
- **BITRIX_MYSQL_URL**: `mysql://dt_reader:DT_reader_2026!@188.127.243.10:3306/dn_ru`
|
||||||
|
- **DATABASE_URL**: `postgresql://dairynews_user:dn_secret_2026@localhost:5432/dairynews`
|
||||||
|
- **AIGUOGUO_API_KEY**: в `.env` на dev2
|
||||||
|
- **Gitea token**: `8ad58dd00430d58eb9415b50a01c31b1405b5490`
|
||||||
|
|||||||
Reference in New Issue
Block a user