diff --git a/NEXT_SESSION.md b/NEXT_SESSION.md index 692d49b..3c87aff 100644 --- a/NEXT_SESSION.md +++ b/NEXT_SESSION.md @@ -1,53 +1,94 @@ # DairyTrends Report Generator — состояние на 09.06.2026 -## Репозитории -- **Генератор**: 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 -## Что сделано и работает +| Модуль | 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) -- Обложка: хедер 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 аудитории) +## Модуль 1: dairy-report-generator -### Данные -- **127 недель РФ** + **413 по 8 ФО** с 2024-01-01 по сегодня -- Источник: 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` +### Что делает +Генерирует DOCX отчёты в стиле DairyTrends. Принимает конфиг с данными, отдаёт Buffer. -### Дизайн -- Единый серо-красный стиль chart4 (серые соседи + красный выбранный субъект) -- Падеж субъекта в текстах: предложный "в Северо-Западном" (через FO_PREP) -- Динамические пороги кластеризации (фикс/квантильный fallback) +### Структура +``` +src/ + 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` -- gpt-image-2 через aiguoguo199, баланс = лимит − потрачено -- Таймаут nginx 300s (был 504) +### Дизайн (финальный) +- DT-квадрат в хедере: **красный** (#CC3300) фон, белый текст +- Заголовки таблиц: **красный** фон, белый текст +- Основной красный цвет: `#CC3300` (ярче чем было #C0272D) +- Chart4: серые бары для всех, красный для isHighlight -## Что нужно сделать (backlog) +--- -1. **Региональный отчёт (не ФО)** — для конкретной области типа Вологды нужны данные надоя (model RegionalIndicator или внешний источник). Сейчас chart4 умеет independentScales=true, но данные надоя в БД нет. -2. **МЗЫ-отчёт** — для хозяйства Агромилк/МЗЫ: надой, поголовье, собственная цена. Нужна своя схема. -3. **Данные 2025 год в Таблице 2** — некоторые кварталы показывают прочерки, т.к. БД заполнена только с dec 2025 для РФ (ФО с 2024). Можно добрать из dn региональных данных. +## Модуль 2: dairynews-nextjs (new.dairy-news.ru) + +### Ключевые файлы +``` +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-тест ```bash @@ -58,10 +99,29 @@ bash scripts/smoke-report.sh fo:СЗФО # Северо-Западный bash scripts/smoke-report.sh fo:ПФО # Приволжский ``` -## Ключевые файлы -``` -/var/www/dairynews/src/lib/dairytrends-report-config.ts ← данные, тексты, таблицы -/var/www/dairy-report-generator/src/charts/chart1-5.js ← SVG-генераторы -/var/www/dairy-report-generator/src/generators/document.js ← сборка DOCX -/var/www/dairynews/scripts/sync-region-index.js ← cron-синхронизация +## Деплой после изменений +```bash +# После правок в dairynews-nextjs или dairytrends-report-config.ts: +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" + +# После правок только в 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`