AURORA-1589: экраны консолидаций — таблица, «Взять в работу», «Изменить статус» #166

Merged
aep merged 15 commits from AURORA-1589 into main 2026-10-23 09:59:50 +03:00
Owner

Реализовано:

Таблица консолидаций

  • Кнопка "Взять в работу", модалка с логикой: если во время работы в модалке кто-то другой перехватил версию, модалка открывается заново с указанием новой информации
  • Фильтр "Только в работе"
  • Убрана отрисовка номера версии у первых версий
  • Поправлены фильтры на таблице
  • Пункты в выпадающем меню неактивны

Панель "Организации"

  • Пока консолидация не выбрана - заголовок "Организации. Выберите консолидацию" и подсказка "выберите консолидацию выше" вместо пустой таблицы "0 шт."
  • Статус "Отсутствует - нейтральным серым, как в чеклисте

Модалка "новая консолидация"

  • Выровнял ИНН
  • Убрал звездочки и добавил "+" в кнопку

Карточка версии (отчетность)

  • Кнопка "Изменить статус". Однако API сейчас не позволяет статус менять (выдает 404 на существующую версию)
  • Переходы вшил в моковую функцию mockStatusMappingFetch(), которая возвращает все возможные переходы, маппинг на нужную происходит внутри useEffect. В дальнейшем можно будет заменить на реальный вызов к API
  • Поправил "Коррекция данных" на "Корректировка данных"

Общее

  • Также поправил иконки во множестве мест для соответствия дизайну
    -Ппостарался поправить проблему с кнопкой "Назад" на странице просмотра документов при переключении

В работе:

  • Доделать подзаголовок под названием в карточке консолидации

Не сделано

  • Ограничения переходов между разделами отчетности и между страницами. В процессе написания кода с useBlocker, но требует много изменений. Будет отдельным ПРом
  • Некоторые сценарии не протестированы из-за отсутствия данных от API (например, ГСК и фильтрация по нему или работа с разными версиями)

UPD:

  • Из задачи 1532: добавил возможность выбора единиц измерения и количества знаков после запятой. Попробовал поправить полосу прокрутки в списке табов (она появлялась, если окно стновилось недостаточно широким, тогда в замечаниях ("Необходимо сопоставить ЮЛ без ИНН..." кнопка фильтрации съезжала ниже, что приводит к появлению небольшого скролла по всей странице. Убрал скролл только у подложки. Экспорт в xlsx уже был реализован
  • Поравил пару багов с прошлых коммитов: белый экран на просмотре КФО, у которой нет статуса для перевода; некорректное работа фильтра "Только в работе" при клике на версию; перименовал пару переменных во избежание путаницы
  • Подзаголовок под названием добавлен. Работает из конфига захардкоженного - не по всем статусам аналитики дали описание. Как я понял, не в любом статусе можно просмотривать отчетность - возможно, стоит это потом завести отдельной задачей (запрет перехода из таблицы)
## Реализовано: ### Таблица консолидаций - Кнопка "Взять в работу", модалка с логикой: если во время работы в модалке кто-то другой перехватил версию, модалка открывается заново с указанием новой информации - Фильтр "Только в работе" - Убрана отрисовка номера версии у первых версий - Поправлены фильтры на таблице - Пункты в выпадающем меню неактивны ### Панель "Организации" - Пока консолидация не выбрана - заголовок "Организации. Выберите консолидацию" и подсказка "выберите консолидацию выше" вместо пустой таблицы "0 шт." - Статус "Отсутствует - нейтральным серым, как в чеклисте ### Модалка "новая консолидация" - Выровнял ИНН - Убрал звездочки и добавил "+" в кнопку ### Карточка версии (отчетность) - Кнопка "Изменить статус". Однако API сейчас не позволяет статус менять (выдает 404 на существующую версию) - Переходы вшил в моковую функцию mockStatusMappingFetch(), которая возвращает все возможные переходы, маппинг на нужную происходит внутри useEffect. В дальнейшем можно будет заменить на реальный вызов к API - Поправил "Коррекция данных" на "Корректировка данных" ### Общее - Также поправил иконки во множестве мест для соответствия дизайну -Ппостарался поправить проблему с кнопкой "Назад" на странице просмотра документов при переключении ## В работе: - Доделать подзаголовок под названием в карточке консолидации ## Не сделано - Ограничения переходов между разделами отчетности и между страницами. В процессе написания кода с useBlocker, но требует много изменений. Будет отдельным ПРом - Некоторые сценарии не протестированы из-за отсутствия данных от API (например, ГСК и фильтрация по нему или работа с разными версиями) ## UPD: - Из задачи 1532: добавил возможность выбора единиц измерения и количества знаков после запятой. Попробовал поправить полосу прокрутки в списке табов (она появлялась, если окно стновилось недостаточно широким, тогда в замечаниях ("Необходимо сопоставить ЮЛ без ИНН..." кнопка фильтрации съезжала ниже, что приводит к появлению небольшого скролла по всей странице. Убрал скролл только у подложки. Экспорт в xlsx уже был реализован - Поравил пару багов с прошлых коммитов: белый экран на просмотре КФО, у которой нет статуса для перевода; некорректное работа фильтра "Только в работе" при клике на версию; перименовал пару переменных во избежание путаницы - Подзаголовок под названием добавлен. Работает из конфига захардкоженного - не по всем статусам аналитики дали описание. Как я понял, не в любом статусе можно просмотривать отчетность - возможно, стоит это потом завести отдельной задачей (запрет перехода из таблицы)
maxim added 4 commits 2026-10-22 19:25:57 +03:00
maxim added 1 commit 2026-10-22 23:14:51 +03:00
aep added 3 commits 2026-10-22 23:51:48 +03:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Спека consolidations-ui: список консолидаций [34] (колонки, «Версия», «Только в работе»),
«Взять в работу» и перехват [35], меню «⋯», панель «Организации», подписи статусов,
вид модалки [42], «Изменить статус» [33-01] с зеркалом MANUAL_TRANSITIONS, пояснение
статуса под заголовком, модалка [31-00]. design.md: решения, Known issues ветки 71ef633,
решения без обсуждения; tasks.md: ревьюер / автор / тесты.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep added 6 commits 2026-10-23 00:16:08 +03:00
Подписи и пояснения статусов версии, ручные переходы MANUAL_TRANSITIONS (зеркало
api/src/services/consolidation_status.py, синхронная константа вместо мока), своя
блокировка, активность «Изменить статус», причина ≤ 1000 после обрезки, «Версия»
(1 — пусто, 2+ — номер), разбор ?in_work_only (по умолчанию выключен), «Взять в работу»
по коду статуса CANCELLED. Подпись CANCELLED — «Отменена»; у строки списка — код статуса
(status_code). Хук useBeforeUnload. Тесты vitest.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
formatScaledAmount в utils/money.ts: запятая сдвигается на 3/6/9 разрядов в строке,
округление половины от нуля на BigInt; нулевая сумма — «—» (zeroDash, как до 71ef633).
Подписи «млн руб.», «млрд руб.» без точки. Исправляет коммит 71ef633.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
404 был из-за опечатки в пути (/consolidation/ без s). Модалка берёт статус из карточки
страницы, а после 200 страница берёт карточку из ответа; в «Новом этапе» ничего не
выбрано; ошибки — текст сервера, модалка остаётся открытой. Кнопка в шапке активна при
своей блокировке и наличии ручных переходов, подсказка «Возьмите консолидацию в работу».
Пояснение под заголовком — текст статуса, а не название. Модалка «Остались неуказанные
ИНН» при уходе с «ОСВ» (вкладки шагов пока неактивны). Предупреждение браузера при
начатом вводе.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
«Только в работе» выключен по умолчанию, параметр — boolean; ошибка загрузки списка
показывается; пункты «⋯» disabled с подсказкой «Будет позже», клик не выбирает строку;
«Взять в работу» неактивна по коду CANCELLED. Модалка [35]: опечатки, плейсхолдер,
≤ 1000 символов, «К3», ошибки (403 и прочие) — текст сервера, ФИО без второй точки;
после взятия в работу перечитываются список и панель «Организации» («Ответственный»).
Боковое меню: thunk списка с объектом, отступ секций. Порядок импортов (biome).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Сервер отвечает 422 PERIMETER_TOO_SMALL при одном ЮЛ — кнопка неактивна раньше, у поля
«Выберите не меньше двух ЮЛ». Строка ЮЛ — сам Checkbox (label на всю строку) вместо
div role="checkbox" (biome useSemanticElements). Предупреждение браузера при начатой форме.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Решение владельца 23.10.2026: PR доводим сами, 71ef633 остаётся. design.md: Known issues
1–14 закрыты, открыты 15 (lucide-react в Nexus), 16 (предупреждение вне модалок), 17
(красное поле поиска в [42]); решения без обсуждения (л)–(х), пересмотр (е) и (к).
Спека: несохранённые правки в модалках, ошибки [35], [31-00] при неактивных вкладках.
tasks.md, web/ARCHITECTURE.md, web/CLAUDE.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner

Ревью, раунд 1 (71ef633)

Срок по 1589 сегодня, поэтому замечания я поправил сам в этой же ветке, шесть коммитов поверх твоих. Перед тем как продолжать, сделай git pull.

Главное. API менять статус умеет, 404 был из-за опечатки в пути: в services/api/consolidations.ts стояло /consolidation/versions/{id}/status, а нужно /consolidations/.... С исправленным путём сервер на недопустимый переход нормально отвечает 409 TRANSITION_NOT_ALLOWED, я это проверил на стенде. Мок mockStatusMappingFetch я убрал. Переходы ты угадал верно, теперь это обычная синхронная константа MANUAL_TRANSITIONS в web/src/utils/consolidations.ts, рядом ссылка на api/src/services/consolidation_status.py. API допустимые переходы не отдаёт, поэтому фронт держит у себя зеркало, а с маршрутом согласования его заменит ответ сервера.

Что ещё поправил:

  • 46d553b. Чистые правила вынес из компонентов в utils/consolidations.ts и покрыл тестами: подписи и пояснения статусов, переходы, своя блокировка, активность кнопок, «Версия» (у первой версии пусто, дальше номер), in_work_only по умолчанию false, причина до 1000 символов включительно. Подпись теперь «Отменена». «Взять в работу» блокируется по коду CANCELLED, а не по подписи, для этого у строки списка появился status_code.
  • 54de397. Твой коммит с единицами оставили в PR, но считается теперь на строке без Number(): запятая сдвигается внутри строки, округление на BigInt. Нули снова показываются как «—». Подписи «млн руб.» и «млрд руб.» пишутся без точки.
  • ccca6df. Модалка «Изменить статус» больше не грузит карточку сама: берёт card со страницы, а после 200 страница подставляет карточку из ответа. Так ушли и устаревший статус при повторном открытии, и вечная загрузка без try/catch. По умолчанию ничего не выбрано. Ошибки показываются текстом сервера (e.message), модалка при этом остаётся открытой. Кнопка в шапке активна только при своей блокировке и если из текущего статуса есть ручные переходы, подсказка «Возьмите консолидацию в работу». Под заголовком теперь пояснение статуса, а не его название. Тут же модалка [31-00]: она живёт в OsvTabs, но пока все вкладки шагов неактивны, так что заработает, когда шахматка передаст onNavigate.
  • d71c46e. Список: «Только в работе» по умолчанию выключен и хранится как boolean. Ошибка загрузки списка снова показывается. Пункты «⋯» стали настоящими disabled. После «Взять в работу» перечитываются список и панель «Организации». В Sidebar thunk теперь получает объект, отступ секций вернул. LockModal: опечатки, плейсхолдер, «К3», 1000 символов включительно, на 403 и незнакомые 409 выводится текст сервера.
  • 2fa672a. «+ Создать» включается только при двух ЮЛ и больше. Строку ЮЛ сделал самим Checkbox вместо div role="checkbox", на это ругался biome.
  • Предупреждение браузера о несохранённых правках сделал для трёх модалок: перехват с причиной, «Изменить статус» и «Новая консолидация» (hooks/useBeforeUnload.ts). В остальных формах и при переходе по меню пока нет, это решим отдельно.
  • c8a89d4. Спека и доки: в change consolidations-ui закрыты Known issues, добавлена дельта consolidated-osv-ui про единицы, в design.md записаны решения, обновлены web/ARCHITECTURE.md и web/CLAUDE.md.

Проверки в ветке: tsc 0, biome 0 ошибок (предупреждений 6, на main 7), eslint 0 ошибок (18 предупреждений, на main 19), prettier чистый, vitest 363 зелёных, build собирается. На стенде прошёл список, «Взять в работу», перехват, «Изменить статус» и единицы. Реальные статусы не трогал, отмену и 409 проверял с подменой запроса.

Вопрос: lucide-react@0.263.1 точно есть в зеркале npm банка? Если нет, сборка в контуре упадёт. Тогда либо попросим платформу его добавить, либо вернём иконки на @ant-design/icons.

Ревью, раунд 1 (71ef633) Срок по 1589 сегодня, поэтому замечания я поправил сам в этой же ветке, шесть коммитов поверх твоих. Перед тем как продолжать, сделай `git pull`. Главное. API менять статус умеет, 404 был из-за опечатки в пути: в `services/api/consolidations.ts` стояло `/consolidation/versions/{id}/status`, а нужно `/consolidations/...`. С исправленным путём сервер на недопустимый переход нормально отвечает 409 `TRANSITION_NOT_ALLOWED`, я это проверил на стенде. Мок `mockStatusMappingFetch` я убрал. Переходы ты угадал верно, теперь это обычная синхронная константа `MANUAL_TRANSITIONS` в `web/src/utils/consolidations.ts`, рядом ссылка на `api/src/services/consolidation_status.py`. API допустимые переходы не отдаёт, поэтому фронт держит у себя зеркало, а с маршрутом согласования его заменит ответ сервера. Что ещё поправил: - 46d553b. Чистые правила вынес из компонентов в `utils/consolidations.ts` и покрыл тестами: подписи и пояснения статусов, переходы, своя блокировка, активность кнопок, «Версия» (у первой версии пусто, дальше номер), `in_work_only` по умолчанию false, причина до 1000 символов включительно. Подпись теперь «Отменена». «Взять в работу» блокируется по коду `CANCELLED`, а не по подписи, для этого у строки списка появился `status_code`. - 54de397. Твой коммит с единицами оставили в PR, но считается теперь на строке без `Number()`: запятая сдвигается внутри строки, округление на BigInt. Нули снова показываются как «—». Подписи «млн руб.» и «млрд руб.» пишутся без точки. - ccca6df. Модалка «Изменить статус» больше не грузит карточку сама: берёт `card` со страницы, а после 200 страница подставляет карточку из ответа. Так ушли и устаревший статус при повторном открытии, и вечная загрузка без try/catch. По умолчанию ничего не выбрано. Ошибки показываются текстом сервера (`e.message`), модалка при этом остаётся открытой. Кнопка в шапке активна только при своей блокировке и если из текущего статуса есть ручные переходы, подсказка «Возьмите консолидацию в работу». Под заголовком теперь пояснение статуса, а не его название. Тут же модалка [31-00]: она живёт в `OsvTabs`, но пока все вкладки шагов неактивны, так что заработает, когда шахматка передаст `onNavigate`. - d71c46e. Список: «Только в работе» по умолчанию выключен и хранится как boolean. Ошибка загрузки списка снова показывается. Пункты «⋯» стали настоящими `disabled`. После «Взять в работу» перечитываются список и панель «Организации». В Sidebar thunk теперь получает объект, отступ секций вернул. LockModal: опечатки, плейсхолдер, «К3», 1000 символов включительно, на 403 и незнакомые 409 выводится текст сервера. - 2fa672a. «+ Создать» включается только при двух ЮЛ и больше. Строку ЮЛ сделал самим `Checkbox` вместо `div role="checkbox"`, на это ругался biome. - Предупреждение браузера о несохранённых правках сделал для трёх модалок: перехват с причиной, «Изменить статус» и «Новая консолидация» (`hooks/useBeforeUnload.ts`). В остальных формах и при переходе по меню пока нет, это решим отдельно. - c8a89d4. Спека и доки: в change `consolidations-ui` закрыты Known issues, добавлена дельта `consolidated-osv-ui` про единицы, в `design.md` записаны решения, обновлены `web/ARCHITECTURE.md` и `web/CLAUDE.md`. Проверки в ветке: tsc 0, biome 0 ошибок (предупреждений 6, на main 7), eslint 0 ошибок (18 предупреждений, на main 19), prettier чистый, vitest 363 зелёных, build собирается. На стенде прошёл список, «Взять в работу», перехват, «Изменить статус» и единицы. Реальные статусы не трогал, отмену и 409 проверял с подменой запроса. Вопрос: `lucide-react@0.263.1` точно есть в зеркале npm банка? Если нет, сборка в контуре упадёт. Тогда либо попросим платформу его добавить, либо вернём иконки на `@ant-design/icons`.
aep added 1 commit 2026-10-23 09:59:20 +03:00
Конфликты после #158 (страница отчёта с вкладками по адресу):
- layouts/ConsolidationReportPage: пояснение статуса, тег, «Изменить статус» и модалка [33-01] из ConsolidatedOsvPage;
- widgets/ConsolidatedOsvContent: «Единицы / Знаков» и onUnmappedChange (unmapped_total наверх);
- OsvTabs: вкладки по адресу из main + модалка [31-00] при уходе с «ОСВ»;
- types/api.ts: обе части.
Спека consolidations-ui: решение (ц), Known issues 11 и 15 (lucide-react в зеркале есть), tasks 2.5, 2.8;
ARCHITECTURE.md и web/CLAUDE.md — новая страница отчёта.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep changed title from WIP AURORA-1589 to AURORA-1589: экраны консолидаций — таблица, «Взять в работу», «Изменить статус» 2026-10-23 09:59:44 +03:00
Owner

Ревью, раунд 2: влил main и сливаю

После #158 страница сводной ОСВ стала общей страницей отчёта с вкладками, так что конфликты разрешил сам, 36224dd:

  • шапка (пояснение статуса, «Изменить статус») переехала в ConsolidationReportPage;
  • «Единицы / Знаков» теперь в ConsolidatedOsvContent;
  • модалка [31-00] встроена во вкладки по адресу и срабатывает при уходе с «ОСВ» на «Шахматку».

На стенде проверил: единицы, [31-00] (обе кнопки), открытие «Изменить статус». tsc, lint, biome, vitest и make web-check проходят. Про lucide-react в зеркале отметил в спеке, что он есть. Убрал WIP из заголовка.

Ревью, раунд 2: влил main и сливаю После #158 страница сводной ОСВ стала общей страницей отчёта с вкладками, так что конфликты разрешил сам, `36224dd`: - шапка (пояснение статуса, «Изменить статус») переехала в `ConsolidationReportPage`; - «Единицы / Знаков» теперь в `ConsolidatedOsvContent`; - модалка [31-00] встроена во вкладки по адресу и срабатывает при уходе с «ОСВ» на «Шахматку». На стенде проверил: единицы, [31-00] (обе кнопки), открытие «Изменить статус». tsc, lint, biome, vitest и `make web-check` проходят. Про `lucide-react` в зеркале отметил в спеке, что он есть. Убрал WIP из заголовка.
aep merged commit 000b518ba4 into main 2026-10-23 09:59:50 +03:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-core#166
No description provided.