feat: initial dairy report generator

- chart1: линейный график цены + себестоимость + 3 сценария + маржа (bottom panel)
- chart5: сгруппированные бары сценарий маржинальности
- document.js: сборка DOCX (header/footer DT-style, KPI, callout, tables, images)
- index.js: параметрический entry point generateReport(config)
- examples/russia.js: полный пример для РФ
- palette.js: DT-палитра синхронизирована с DESIGN_DAIRYTRENDS.md

Tested: node examples/russia.js → 44KB DOCX, validation PASSED
This commit is contained in:
Alexey Pavlov
2026-06-08 14:57:51 +03:00
commit 00f80dc5cc
10 changed files with 1848 additions and 0 deletions
+103
View File
@@ -0,0 +1,103 @@
# Dairy Report Generator
Универсальный генератор аналитических отчётов в формате **DairyTrends** (стиль DT-палитры) с графиками и таблицами.
## Возможности
- 📊 Многостраничные DOCX отчёты в едином дизайне
- 📈 Графики (линейные, столбчатые, сценарные) — SVG → PNG через sharp
- 🎨 Палитра DairyTrends: оранжевый/зелёный/красный/кремовый
- 📑 Структура: KPI-обложка → выводы → методика → ретроспектива → сравнения → прогноз → рекомендации
- 🔌 Полная параметризация — подавай данные, получай отчёт
## Применение
- **Регионы РФ** — отчёты по областям/краям из БД `region_index` (Bitrix dairy-news.ru)
- **МЗЫ** — отчёт по конкретному хозяйству на основе своих данных (надой, поголовье, закупочная цена)
- **Сравнения предприятий** — анализ группы хозяйств
- **Тематические выпуски** — экспорт, GDT, нетели и т.д.
## Установка
```bash
npm install
```
## Использование
```javascript
const { generateReport } = require('@dairynews/report-generator')
const fs = require('fs')
const buf = await generateReport({
subject: {
name: 'Вологодской области',
shortName: 'Вологда',
type: 'region', // 'region' | 'farm' | 'company' | 'custom'
},
period: {
historicalFrom: '2024-01-01',
historicalTo: '2026-05-31',
forecastTo: '2026-12-31',
},
data: {
prices: [{ date: '2024-01-15', price: 31.05 }, ...],
costs: [{ date: '2024-01-15', cost: 28.50 }, ...],
scenarios: { base: [...], opt: [...], pess: [...] },
kpi: [
{ value: '3335 ₽/кг', label: 'Закуп. цена (базовый)' },
{ value: '+2.1%', label: 'Рост производства I кв.' },
...
],
leaders: [...], // опционально
ebitda: [...], // опционально
regionComparison: [...] // опционально
},
text: {
mainConclusion: '...',
risks: ['Погодные условия...', 'Регуляторные риски...'],
recommendations: { ... },
}
})
fs.writeFileSync('output.docx', buf)
```
## Структура проекта
```
src/
├── index.js # Главный entry-point
├── generators/
│ ├── document.js # Сборка DOCX (header, footer, sections)
│ ├── kpi.js # KPI-блок
│ ├── tables.js # Таблицы (допущения, прогноз, ретроспектива)
│ └── callout.js # Callout-блоки с красной полосой
├── charts/
│ ├── render.js # SVG → PNG через sharp
│ ├── chart1.js # Линейный + маржа (главный)
│ ├── chart2.js # Лидеры (2 горизонтальных бара)
│ ├── chart3.js # EBITDA по группам
│ ├── chart4.js # Сравнение регионов
│ └── chart5.js # Сценарии маржи
├── templates/
│ └── default.js # Шаблон Вологда-style
├── data/
│ └── palette.js # DT-палитра
examples/
├── russia.js # Пример: общероссийский отчёт
└── vologda.js # Пример: Вологодская область
```
## Деплой
Модуль интегрируется как зависимость в `new.dairy-news.ru`:
```bash
# В админке /admin/dairytrends/reports/
# страница даёт UI для выбора региона + кнопку "Сгенерировать"
```
## Лицензия
MIT © ООО «Умный Байт» / Zeroday