Files
Alexey Pavlov 00f80dc5cc 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
2026-06-08 14:57:51 +03:00

104 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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