366 Commits

Author SHA1 Message Date
Andrey Epifancev
f05ac656b9 Merge branch 'feat/316-aurora-1880-stages-direction-ui' into feat/318-aurora-1881-stages-filters 2026-11-11 19:37:02 +04:00
Andrey Epifancev
cd15424778 Merge branch 'feat/312-aurora-1879-form-phase-direction' into feat/316-aurora-1880-stages-direction-ui 2026-11-11 19:37:02 +04:00
aep
4dc111a0ce Merge pull request 'AURORA-1984: проекты ПД без программы (+1979, 1980, 1989)' (#306) from feat/305-aurora-1984-pd-standalone-projects into test 2026-11-11 18:12:22 +03:00
aep
90e4084e7d Merge pull request 'AURORA-1978: удаление пустой программы и проекта на форме 4' (#304) from feat/303-aurora-1978-pd-delete-program-project into test 2026-11-11 18:12:05 +03:00
aep
d702e9d5aa Merge pull request 'AURORA-1839: мемоизация ячеек таблицы листа' (#240) from feat/234-aurora-1839-cell-memo into test 2026-11-11 18:11:32 +03:00
aep
f4f9c325e2 Merge pull request 'AURORA-1882: явная метка «На удаление» у задач в списке и на странице задачи' (#314) from feat/313-aurora-1882-deletion-mark-chip into test 2026-11-11 18:11:09 +03:00
PotapovaA
32e697193e добавление крестиков у поиска по столбцам 2026-11-11 17:12:59 +03:00
Andrey Epifancev
59f9ebdafe feat(stages): фильтры и сортировка в окне «Этапы» (AURORA-1881)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 17:10:17 +04:00
Andrey Epifancev
63c368902b feat(stages): чистые функции фильтрации и сортировки этапов, now в getStageStatus (AURORA-1881)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 17:09:56 +04:00
Andrey Epifancev
5e364ac807 fix(stages): направление в строке этапа и в подтверждении удаления, удаление этапа формы для админа (AURORA-1880)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 17:05:09 +04:00
Andrey Epifancev
af44b98d7a fix(stages): этап определяется по листу, направлению и названию; кодирование пути и direction в params (AURORA-1880)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 17:05:09 +04:00
Andrey Epifancev
21b4e93008 feat(tasks): чип «На удаление» в списке и на странице задачи, «Пользователь удалён» (AURORA-1882)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 16:36:18 +04:00
Andrey Epifancev
f8d14194f9 feat(tasks): formatDeletionHint — текст подсказки пометки на удаление (AURORA-1882)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 16:35:17 +04:00
Andrey Epifancev
44e6afc774 fix(table): разрядность не трогает неденежные и текстовые колонки (AURORA-1899)
Возврат тестирования 11.11:
- tableColumns считал множитель по MRT column, у которого нет accessorKey, —
  getMoneyUnit видел пустой ключ и считал денежной любую колонку (НДС, курс,
  сумма в валюте, площадь масштабировались). getMoneyUnit теперь берёт
  column.columnDef ?? column.
- текстовые колонки (комментарии, обоснования, реквизиты договоров, коды)
  попадали в правило «иначе thousand»: «123» в комментарии делилось, а при
  «млн»/«млрд» редактор обоснования закрывался как денежный. Добавлен
  isTextColumn: такие колонки не масштабируются и не форматируются как числа
  (внутренний заказ 10123 и комментарий «123» показываются как есть).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 15:34:08 +04:00
PotapovaA
a2b132e9dc крестик для очистки строки поиска 2026-11-09 14:13:23 +03:00
Andrey Epifancev
f5ce14fd11 AURORA-1984: самостоятельный проект — уровень программы в дереве и в выгрузке
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 23:05:59 +04:00
Andrey Epifancev
b87b12f980 AURORA-1989: номер статьи, сортировка и поиск в окне выбора расхода
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 22:38:04 +04:00
Andrey Epifancev
321943db56 AURORA-1979: подпись программы и проекта в третьем столбце и выгрузке
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 22:35:02 +04:00
Andrey Epifancev
78227b46c0 AURORA-1980: переименование программы и проекта
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 22:32:42 +04:00
Andrey Epifancev
374ac4bd9e AURORA-1984: добавление проекта в разделе на фронте
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 22:29:42 +04:00
Andrey Epifancev
1aec5d2c2d AURORA-1978: удаление пустой программы и проекта на форме 4
«Удалить строку» на строке программы (GROUP) или проекта (ITEM) ничего не
делала: у этих строк нет line_id, окно подтверждения не открывалось, а
события program_deleted / project_deleted, которые сервер уже поддерживает,
фронт не отправлял.

- getDeleteTarget: по выделенной строке выбирает программу, проект или
  строку бюджета; для непустых программы/проекта сразу показывает причину.
- RealtimeContext: deleteProgram / deleteProject и обработка ответов.
- useRealtimeData: строка убирается из дерева, пересчёт ROOT/GROUP из
  ответа сопоставляется по section_code / program_id / project_id
  (alignNodeRows), а не по sort_order — сервер нумерует строки заново, и у
  листа без строк бюджета нет ROOT (найдено при проверке на стенде).
- Окно подтверждения называет удаляемую программу/проект.
- getWsErrorMessage срезает префикс "<class 'asyncpg...'>: " — иначе отказ
  сервера (программа с проектами у устаревшего клиента) показывался с ним.

Refs #303

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 20:02:41 +04:00
Andrey Epifancev
f61647d16c Merge remote-tracking branch 'origin/test' into feat/276-aurora-1892-negative-amounts 2026-11-08 18:11:36 +04:00
Andrey Epifancev
20f1bed336 fix(table): минус красный и в нередактируемых ячейках строки ввода (AURORA-1892)
Возврат тестирования 06.11, критерий «любое отрицательное число выделено
цветом»: NOT_EDITABLE_INPUT_STYLES (AURORA-1890) разворачивался после цвета
текста и перекрашивал минус в серый #5F6B7A — в расчётных колонках вне
перечня отрицательные значения оставались серыми. Цвет текста теперь
решает resolveCellTextColor (utils/cellTextColor.js, с тестами): минус —
красный всегда, серый — только для неотрицательных значений.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 17:09:29 +04:00
Andrey Epifancev
5690b756e9 Merge origin/test в feat/276-aurora-1892-negative-amounts (перед доработкой по возврату 06.11)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 16:43:41 +04:00
Andrey Epifancev
a61c09be18 fix(table): контроль ошибок — агрегатные строки, переход и прокрутка к ячейке, подстановка {year}/{unit} (AURORA-1893)
Доработка по возврату тестирования 06.11:
- у агрегатных строк (ROOT/GROUP/ITEM/SUB_ITEM) нет data.id, ключ ошибки был
  «правило:колонка:null» — все агрегаты одной колонки схлопывались в одну
  запись. Ключ строки теперь getValidationRowKey: line id или sort:<sort_order>;
- переход к ошибке ищет строку по тому же ключу (раньше для агрегата
  прерывался, выделение оставалось на предыдущей ячейке);
- прокрутка: вместо scrollToIndex(rowIndex + 5, 'auto') — центрирование и
  scrollIntoView самой ячейки после отрисовки (у последних строк запас +5
  обрезался, шапка внутри контейнера не учитывалась — ячейка оставалась ниже
  видимой области);
- названия колонок в плашке и в тосте EditCell — с подставленными годом и
  единицами (formatHeaderPaths, как в TableHead);
- рамка активной ячейки дублируется псевдоэлементом ::after: inset-тень td
  перекрывалась красной рамкой ошибочной ячейки.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 16:38:49 +04:00
Andrey Epifancev
e05e3774f0 Merge origin/feat/236 (сервер) в feat/236 (фронт): страницы свода 2 поверх displayFactor и фиксированной высоты строк
Конфликты Svod2Page.jsx: сохранены окно страниц, заглушки и фасеты PR; добавлены
factor/formatHeaderUnit (AURORA-1899/1900). Измерение высоты строки по offsetHeight
заменено фиксированной высотой 2.75rem (AURORA-1836): px считается из rem без чтения layout,
заглушки получают высоту в rem.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 11:04:11 +04:00
Andrey Epifancev
6410a6ae05 Merge remote-tracking branch 'origin/feat/210-aurora-1835-svod1-formatter' into feat/220-aurora-1842-svod2-column-virtual 2026-11-08 11:02:12 +04:00
Andrey Epifancev
e5edcab01e Merge remote-tracking branch 'origin/test' into feat/210-aurora-1835-svod1-formatter 2026-11-08 11:01:52 +04:00
aep
616f8cfe0a Merge pull request 'AURORA-1936: запрет удаления чужих строк, подтверждение удаления' (#257) from feat/249-aurora-1936-row-delete-confirm into test 2026-11-08 10:01:19 +03:00
Andrey Epifancev
455393cc76 Merge origin/test в feat/264-aurora-1895-formula-localstorage
Конфликты (EditCell.jsx, RealtimeTable.jsx, formulaUtils.test.js):
- EditCell: сохранены правки 1891 (editorInitialInput, Esc/Tab/Enter,
  возврат фокуса) и 1892 (warnIfNegativeNotAllowed); поверх них
  повторена логика 1895: формула из localStorage подставляется только
  если совпадает с текущим значением, иначе stale и удаляется.
- Сохранённая формула не подставляется, если редактор открыт набором
  символа (getEditorInitialInput) и не затирает набранный текст при
  изменении value другим пользователем (разрешение один раз при открытии).
- Tab/Enter помечают следующую ячейку (openNextEditableCell) только после
  фактического закрытия редактора: при невычисляемой формуле он остаётся
  открытым и не оставляет висящую цель перехода.
- formulaUtils.js: единственный isSameCellValue из test (с нормализацией
  разделителей); дубль из ветки удалён.
- formulaUtils.test.js: тесты обеих сторон.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 10:24:55 +04:00
Andrey Epifancev
ade2eb05f5 Merge origin/test + feat/210 в feat/220: свод 2 — виртуализация колонок поверх displayFactor и фиксированной высоты строк
Конфликты Svod2Page.jsx: сохранены виртуализация колонок и CSS-классы PR,
добавлены factor/formatHeaderUnit/meta.money (AURORA-1899/1900) и фиксированная
высота строки 2.75rem (AURORA-1836). Высота строки и overflow перенесены в
SVOD2_TABLE_CONTAINER_SX (статичное CSS-правило вместо sx на ячейку).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 10:11:16 +04:00
Andrey Epifancev
4a42c9d31a Merge origin/test в feat/210: форматтер свода 1 перенесён на displayFactor (AURORA-1899/1900)
Конфликт SummaryTable.jsx: взята структура test (getDisplayFactor, meta.money,
formatHeaderUnit), formatSummaryAmount переведён с делителя на множитель и
подключён в новый scaleColumns; тест summaryFormat обновлён.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 10:10:03 +04:00
Andrey Epifancev
3fb1a3b162 Merge remote-tracking branch 'origin/test' into feat/249-aurora-1936-row-delete-confirm 2026-11-08 09:56:16 +04:00
aep
3e00f91c69 Merge pull request 'AURORA-1905: выгрузка форм 1 и 4 — порядок столбцов и заголовки как на экране' (#260) from feat/253-aurora-1905-form1-form4-export-layout into test 2026-11-08 08:51:39 +03:00
aep
e52e8b6cd9 Merge pull request 'AURORA-1902: Смета РФ — выгрузка Операц/АХР/КВ своей раскладкой' (#259) from feat/252-aurora-1902-form2-export-layout into test 2026-11-08 08:51:25 +03:00
aep
e757430801 Merge pull request 'AURORA-1901: Смета РФ — итоги групп и IV кв. на свои места' (#258) from feat/251-aurora-1901-smeta-rf-column-order into test 2026-11-08 08:51:02 +03:00
Andrey Epifancev
5ad5cbb3a3 Мерж feat/252 (AURORA-1902) в feat/253: стек выгрузки FORM_2 + FORM_1/4 (AURORA-1905)
Конфликт export_service.py: «Операц» формы 1 берёт FORM1_OPER_DEPTH_COLUMNS (без «Платежи в year+2»),
остальные листы — кортеж (колонки, цвета, extra, нормализатор) из #259.
Тест test_export_form2_mapping сравнивает Операц Ф.1 с FORM1_OPER_DEPTH_COLUMNS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 09:42:00 +04:00
Andrey Epifancev
a5a4087d9e Мерж origin/test в feat/252: раскладка FORM_2 переносит новые колонки и подписи test (AURORA-1902)
- конфликт export_service.py: кортеж writer_configs расширен до (колонки, цвета, extra, нормализатор);
  FORM_2 использует свой нормализатор и extra {unit}
- АХР формы 2: отдельное дерево FORM2_AHR_DEPTH_COLUMNS с колонками «В пределах лимита, год» и
  «Сверх лимита, год» (AURORA-1907), как на экране
- заголовок группы «Планирование годовых показателей, {unit} (без НДС)» как на экране (AURORA-1900)
- тесты test_export_form2_mapping.py обновлены

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 09:40:56 +04:00
Andrey Epifancev
83372f7aef Merge origin/test в feat/250-aurora-1888-stages-role-filter
Конфликт в api/tests/integration/test_form_phases_api_smoke.py: оставлены
оба набора тестов (тесты фильтра по роли и 404 из этого PR и тест
aware-дат из test).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 09:38:56 +04:00
Andrey Epifancev
6e8942f66f Merge remote-tracking branch 'origin/test' into feat/249-aurora-1936-row-delete-confirm
# Conflicts:
#	web/src/components/RealtimeTable/RealtimeTable.jsx
2026-11-08 09:37:02 +04:00
Andrey Epifancev
79fa992ab4 Мерж origin/test в feat/253: разрешены конфликты export_mappings/export_service и FORM_1 AHR/CAP/OPER (AURORA-1905)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 09:31:32 +04:00
Andrey Epifancev
54f5af6148 fix(table): прокрутка не сбрасывается наверх при перетаскивании ширины колонки (H-1)
MRT при isResizingColumn подменяет MRT_TableBody на Memo_MRT_TableBody, тело
монтируется заново, виртуализатор строк стартует с initialOffset=0 и сбрасывает
scrollTop. rowVirtualizerOptions теперь функция от table, initialOffset читает
текущий scrollTop контейнера. Воспроизведено на чистом MRT и на test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 09:25:41 +04:00
Andrey Epifancev
6255f4a250 Merge origin/test в feat/234-aurora-1839-cell-memo
Конфликты: RealtimeTable.jsx (импорты: оставлены getRowId из test и утилиты мемоизации ветки),
TableHead.jsx (импорты: объединены columnResizeInfo ветки и deadlineFormat/ROLES_NAME_ID/headerYearUtils/ColumnResizer из test).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 09:25:28 +04:00
Andrey Epifancev
64318458e9 Мерж origin/test в feat/251: конфликт SMETA.js (AURORA-1901)
Группа «В тыс. рублей» удалена, как и задумано в AURORA-1901; правка заголовка
из AURORA-1900 к удалённой группе не применяется.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 09:22:29 +04:00
aep
cc2d2627a1 Merge pull request 'AURORA-1840: состояние модалок листа вынесено из RealtimeTable' (#218) from feat/213-aurora-1840-sheet-modals into test 2026-11-08 07:53:18 +03:00
aep
310f099e7f Merge pull request 'AURORA-1944: таблицы форм — шаг прокрутки колесом мыши ×2' (#247) from feat/246-aurora-1944-wheel-scroll-step into test 2026-11-08 07:52:56 +03:00
aep
8bc2c5fe22 Merge pull request 'AURORA-1877: сессия обрывается через 60 минут — нет обновления access-токена' (#256) from feat/248-aurora-1877-token-refresh into test 2026-11-08 07:52:06 +03:00
PotapovaA
ad709fb0f7 правки 2026-11-06 16:06:35 +03:00
Andrey Epifancev
178749aa95 Merge remote-tracking branch 'origin/test' into feat/276-aurora-1892-negative-amounts
# Conflicts:
#	web/src/components/RealtimeTable/constants/FORM_1/AHR.js
#	web/src/components/RealtimeTable/constants/FORM_1/CAP.js
#	web/src/components/RealtimeTable/constants/FORM_1/OPER.js
#	web/src/components/RealtimeTable/utils/validationUtils.test.js
2026-11-03 14:43:24 +04:00
Andrey Epifancev
4675b461d8 fix(table): закрыть пропуски исходного перечня AURORA-1892 по сверке 02.11.2026
validation.js: добавлены колонки, пропущенные в первой реализации (разделы 5/6.1
сверки) — approved.*, collegial.approved, ckk.*, contract_detail.* (включая
amount_foreign), corrected_plan, pay_ho/pay_rf, booking, rem_actual/
residual_after_actual, qN.total, new_plan, data.qN.economy. Отдельно добавлен
transfer_econ формы 2 — явное исключение из общего префикса transfer_*, так как
перечень Салмина прямо требует контроль минуса для этих колонок (раздел 6.3,
противоречие с Word). Тест validationUtils.test.js обновлён под это исключение
и дополнен проверкой полноты перечня и отсутствия дублей с remaining-booking.

FORM_1/OPER.js, AHR.js, CAP.js: перестановка колонок Q4 — «Комментарий» теперь
перед «Скорректированный план 4 кв.» во всех пяти таблицах (раздел 8 сверки).

Не включено (требует отдельного решения заказчика, раздел 12.2 сверки):
контроль месячного факта/СПОД, контроль факта расшифровочных листов сверх
плановых колонок, область действия правила для формы 4.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-11-03 14:38:27 +04:00