feat: chart2/3/4 + section 5 (regional breakdown)
- chart2_leaders: horizontal ranked bars with highlight & category coloring - chart3_ebitdaGroups: vertical bars colored by sign (green ≥0, orange <0) - chart4_regionCompare: side-by-side bar panels with shared y-scale - document.js: new section 5 'Региональный разрез и эффективность' between sections 4 and 6, renders chart2/3/4 with figure captions - index.js: render hooks for data.leaders, data.ebitda, data.regionComparison - examples/russia.js: demo data for all three new charts
This commit is contained in:
@@ -3,6 +3,9 @@
|
||||
*/
|
||||
|
||||
const { chart1_priceAndMargin } = require('./charts/chart1')
|
||||
const { chart2_leaders } = require('./charts/chart2')
|
||||
const { chart3_ebitdaGroups } = require('./charts/chart3')
|
||||
const { chart4_regionCompare } = require('./charts/chart4')
|
||||
const { chart5_scenarioMargins } = require('./charts/chart5')
|
||||
const { buildDocument } = require('./generators/document')
|
||||
const { PALETTE } = require('./data/palette')
|
||||
@@ -42,6 +45,34 @@ async function generateReport (config) {
|
||||
})
|
||||
}
|
||||
|
||||
if (data.leaders && data.leaders.items) {
|
||||
charts.chart2 = await chart2_leaders({
|
||||
items: data.leaders.items,
|
||||
categories: data.leaders.categories || null,
|
||||
highlightName: data.leaders.highlightName || null,
|
||||
unit: data.leaders.unit || 'руб./кг',
|
||||
sort: data.leaders.sort !== false,
|
||||
regionLabel: `${subject.name} · ${data.leaders.title || 'Лидеры по закупочной цене'} · ${data.leaders.unit || 'руб./кг'}`
|
||||
})
|
||||
}
|
||||
|
||||
if (data.ebitda) {
|
||||
charts.chart3 = await chart3_ebitdaGroups({
|
||||
groups: data.ebitda.groups || data.ebitda,
|
||||
unit: (data.ebitda.unit) || 'EBITDA-маржа, %',
|
||||
regionLabel: `${subject.name} · Эффективность по группам хозяйств · %`
|
||||
})
|
||||
}
|
||||
|
||||
if (data.regionComparison) {
|
||||
charts.chart4 = await chart4_regionCompare({
|
||||
left: data.regionComparison.left,
|
||||
right: data.regionComparison.right,
|
||||
unit: data.regionComparison.unit || 'руб./кг',
|
||||
regionLabel: `${subject.name} · Сравнение регионов · ${data.regionComparison.unit || 'руб./кг'}`
|
||||
})
|
||||
}
|
||||
|
||||
// 2) Собираем DOCX
|
||||
return buildDocument({ subject, period, data, text, meta, charts })
|
||||
}
|
||||
@@ -52,6 +83,9 @@ module.exports = {
|
||||
// Экспортируем внутренности для возможности кастомизации
|
||||
charts: {
|
||||
chart1_priceAndMargin,
|
||||
chart2_leaders,
|
||||
chart3_ebitdaGroups,
|
||||
chart4_regionCompare,
|
||||
chart5_scenarioMargins,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user