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:
@@ -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: '33–35 ₽/кг', 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
|
||||
Reference in New Issue
Block a user