From c01356736f033c18e47e969f35289744919581bf Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Fri, 30 Oct 2026 18:12:29 +0400 Subject: [PATCH] =?UTF-8?q?fix(form2):=20=D0=A1=D0=BC=D0=B5=D1=82=D0=B0=20?= =?UTF-8?q?=D0=A0=D0=A4=20=E2=80=94=20=D0=B8=D1=82=D0=BE=D0=B3=D0=B8=20?= =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=BF=D0=BF=20=D0=B8=20IV=20=D0=BA=D0=B2.=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=81=D0=B2=D0=BE=D0=B8=20=D0=BC=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit На листе «Смета» формы «Смета РФ» итоговые колонки каждой группы (план/утверждённые/факт «Итого: Поддержка» и IV квартал скорректированной сметы) были оторваны от своих групп и собраны в отдельную группу «В тыс. рублей» справа — хотя в шаблоне идут сразу после своего квартала. - Перенёс H/N/T (data.*.support.year) в конец соответствующих групп план/ утверждённые/факт, X (data.corrected.support.q4) — в конец группы скорректированной сметы после III квартала. - Удалил опустевшую группу «В тыс. рублей»; accessorKey групп (v_tys_rubley_*) нигде больше не использовались (grep по web/src). columnLetter и leaf accessorKey (data.*) не менял — видимые значения те же, меняется только расположение колонок. - Тест читает FORM_2/SMETA.js как текст (модуль не грузится напрямую — импортирует '../columnColors' без расширения) и проверяет порядок accessorKey листьев и отсутствие заголовка «В тыс. рублей». Issue: #251 (AURORA-1901, эпик AURORA-1876, Высокий приоритет) Co-Authored-By: Claude Sonnet 5 --- .../RealtimeTable/constants/FORM_2/SMETA.js | 172 +++++++----------- .../utils/form2SmetaConfig.test.js | 45 +++++ 2 files changed, 112 insertions(+), 105 deletions(-) create mode 100644 web/src/components/RealtimeTable/utils/form2SmetaConfig.test.js diff --git a/web/src/components/RealtimeTable/constants/FORM_2/SMETA.js b/web/src/components/RealtimeTable/constants/FORM_2/SMETA.js index 50befa9..356ccc3 100644 --- a/web/src/components/RealtimeTable/constants/FORM_2/SMETA.js +++ b/web/src/components/RealtimeTable/constants/FORM_2/SMETA.js @@ -141,6 +141,26 @@ export const config = { }, }, }, + { + header: "Итого: Поддержка", + accessorKey: + "field_raskhody_planiruemye_rf_na_2026_god_itogopodderzhka", + columns: [ + { + header: "", + accessorKey: "data.plan.support.year", + columnLetter: "H", + size: 150, + filterFn: "contains", + }, + ], + muiTableHeadCellProps: { + sx: { + backgroundColor: "#FFFFFF", + color: "#000000", + }, + }, + }, ], muiTableHeadCellProps: { sx: { @@ -233,6 +253,26 @@ export const config = { }, }, }, + { + header: "Итого: Поддержка", + accessorKey: + "field_utverzhdennye_bazovye_raskhody_na_2026_god_itogopodderzhka", + columns: [ + { + header: "", + accessorKey: "data.approved.support.year", + columnLetter: "N", + size: 150, + filterFn: "contains", + }, + ], + muiTableHeadCellProps: { + sx: { + backgroundColor: "#FFFFFF", + color: "#000000", + }, + }, + }, ], muiTableHeadCellProps: { sx: { @@ -325,6 +365,26 @@ export const config = { }, }, }, + { + header: "Итого: Поддержка", + accessorKey: + "field_fakticheskie_raskhody_za_2026_god_itogopodderzhka", + columns: [ + { + header: "", + accessorKey: "data.fact.support.year", + columnLetter: "T", + size: 150, + filterFn: "contains", + }, + ], + muiTableHeadCellProps: { + sx: { + backgroundColor: "#FFFFFF", + color: "#000000", + }, + }, + }, ], muiTableHeadCellProps: { sx: { @@ -377,114 +437,10 @@ export const config = { }, }, }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "В тыс. рублей", - accessorKey: "v_tys_rubley", - columns: [ - { - header: "Расходы, планируемые РФ на {year} год", - accessorKey: "v_tys_rubley_raskhody_planiruemye_rf_na_2026_god", - columns: [ - { - header: "Итого: Поддержка", - accessorKey: - "v_tys_rubley_raskhody_planiruemye_rf_na_2026_god_itogopodderzhka", - columns: [ - { - header: "", - accessorKey: "data.plan.support.year", - columnLetter: "H", - size: 150, - filterFn: "contains", - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - ], - }, - { - header: "Утверждённые базовые расходы на {year} год", - accessorKey: - "v_tys_rubley_utverzhdennye_bazovye_raskhody_na_2026_god", - columns: [ - { - header: "Итого: Поддержка", - accessorKey: - "v_tys_rubley_utverzhdennye_bazovye_raskhody_na_2026_god_itogopodderzhka", - columns: [ - { - header: "", - accessorKey: "data.approved.support.year", - columnLetter: "N", - size: 150, - filterFn: "contains", - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - ], - }, - { - header: "Фактические расходы за {year} год", - accessorKey: "v_tys_rubley_fakticheskie_raskhody_za_2026_god", - columns: [ - { - header: "Итого: Поддержка", - accessorKey: - "v_tys_rubley_fakticheskie_raskhody_za_2026_god_itogopodderzhka", - columns: [ - { - header: "", - accessorKey: "data.fact.support.year", - columnLetter: "T", - size: 150, - filterFn: "contains", - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - ], - }, - { - header: "Скорректированная смета расходов на {year} год", - accessorKey: - "v_tys_rubley_skorrektirovannaya_smeta_raskhodov_na_2026_god", - columns: [ { header: "IV квартал", accessorKey: - "v_tys_rubley_skorrektirovannaya_smeta_raskhodov_na_2026_god_iv_kvartal", + "field_skorrektirovannaya_smeta_raskhodov_na_2026_god_iv_kvartal", columns: [ { header: "", @@ -502,6 +458,12 @@ export const config = { }, }, ], + muiTableHeadCellProps: { + sx: { + backgroundColor: "#FFFFFF", + color: "#000000", + }, + }, }, ], muiTableHeadCellProps: { diff --git a/web/src/components/RealtimeTable/utils/form2SmetaConfig.test.js b/web/src/components/RealtimeTable/utils/form2SmetaConfig.test.js new file mode 100644 index 0000000..d0639be --- /dev/null +++ b/web/src/components/RealtimeTable/utils/form2SmetaConfig.test.js @@ -0,0 +1,45 @@ +import assert from 'node:assert/strict'; +import { readFileSync } from 'node:fs'; +import test from 'node:test'; +import { fileURLToPath } from 'node:url'; + +// FORM_2/SMETA.js импортирует '../columnColors' без расширения, поэтому node +// не может загрузить модуль напрямую — читаем файл как текст. +const configPath = fileURLToPath(new URL('../constants/FORM_2/SMETA.js', import.meta.url)); +const configSource = readFileSync(configPath, 'utf8'); + +const EXPECTED_LEAF_ORDER = [ + 'data.section_code', + 'data.name', + 'data.plan.support.q1', + 'data.plan.support.q2', + 'data.plan.support.q3', + 'data.plan.support.q4', + 'data.plan.support.year', + 'data.approved.support.q1', + 'data.approved.support.q2', + 'data.approved.support.q3', + 'data.approved.support.q4', + 'data.approved.support.year', + 'data.fact.support.q1', + 'data.fact.support.q2', + 'data.fact.support.q3', + 'data.fact.support.q4', + 'data.fact.support.year', + 'data.corrected.support.q2', + 'data.corrected.support.q3', + 'data.corrected.support.q4', +]; + +function extractLeafAccessorKeys(source) { + const matches = source.matchAll(/accessorKey:\s*"(data\.[^"]+)"/g); + return [...matches].map((m) => m[1]); +} + +test('Смета РФ: итоги групп и IV квартал скорректированной сметы идут в конце своих групп', () => { + assert.deepEqual(extractLeafAccessorKeys(configSource), EXPECTED_LEAF_ORDER); +}); + +test('Смета РФ: группы "В тыс. рублей" больше нет', () => { + assert.ok(!configSource.includes('В тыс. рублей'), 'заголовок "В тыс. рублей" не должен встречаться в конфиге'); +}); -- 2.47.2