128 lines
6.9 KiB
Markdown
128 lines
6.9 KiB
Markdown
# DairyTrends Report Generator — состояние на 09.06.2026
|
||
|
||
## Два модуля в 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` |
|
||
|
||
Связь: `dairynews-nextjs` подключает `dairy-report-generator` как `file:../dairy-report-generator` (symlink в node_modules).
|
||
|
||
---
|
||
|
||
## Модуль 1: dairy-report-generator
|
||
|
||
### Что делает
|
||
Генерирует DOCX отчёты в стиле DairyTrends. Принимает конфиг с данными, отдаёт Buffer.
|
||
|
||
### Структура
|
||
```
|
||
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 ← Полный пример для РФ
|
||
```
|
||
|
||
### Дизайн (финальный)
|
||
- DT-квадрат в хедере: **красный** (#CC3300) фон, белый текст
|
||
- Заголовки таблиц: **красный** фон, белый текст
|
||
- Основной красный цвет: `#CC3300` (ярче чем было #C0272D)
|
||
- Chart4: серые бары для всех, красный для isHighlight
|
||
|
||
---
|
||
|
||
## Модуль 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
|
||
cd /var/www/dairynews
|
||
bash scripts/smoke-report.sh rf # РФ
|
||
bash scripts/smoke-report.sh fo:СКФО # Северо-Кавказский
|
||
bash scripts/smoke-report.sh fo:СЗФО # Северо-Западный
|
||
bash scripts/smoke-report.sh fo:ПФО # Приволжский
|
||
```
|
||
|
||
## Деплой после изменений
|
||
```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`
|