openspec: goodwill-ui-errors — 409/404, ошибка загрузки и стрелка блока гудвилла (AURORA-2006)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
eed4fbb298
commit
39e942b548
37
openspec/changes/goodwill-ui-errors/proposal.md
Normal file
37
openspec/changes/goodwill-ui-errors/proposal.md
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
# Proposal
|
||||||
|
|
||||||
|
## Why
|
||||||
|
|
||||||
|
AURORA-2006 (PR arm-core #244): дефекты вкладки «Гудвилл», отложенные финальным ревью PR #220 (AURORA-1544).
|
||||||
|
- Ответы 409 и 404 на «Сохранить» не перечитывали таблицу: если версию забрал другой пользователь, экран оставался
|
||||||
|
редактируемым и каждое «Сохранить» снова получало 409; при 404 по исчезнувшей паре подсвечивалась доля строки.
|
||||||
|
- Стрелка раскрытия блока была привязана к номеру колонки: если скрыть «Учет в отчете» в «Настройке таблицы», стрелка
|
||||||
|
уезжала в другую колонку.
|
||||||
|
- После ошибки загрузки таблица писала «Вложений по 58.01 между компаниями периметра нет» вместо ошибки.
|
||||||
|
|
||||||
|
## What Changes
|
||||||
|
|
||||||
|
- 409 и 404 на «Сохранить» и на переключатель «Учитывать гудвилл в КФО» — уведомление с текстом сервера и перечитывание
|
||||||
|
таблицы, без подсветки строки; если после перечитывания `editable = false`, режим редактирования закрывается и
|
||||||
|
введённое сбрасывается. Так же, как в таблице корректировок (`errorOutcome`).
|
||||||
|
- Стрелка раскрытия блока — в колонке «Наименование дочерней организации», где бы она ни стояла; колонка скрыта — в первой
|
||||||
|
видимой.
|
||||||
|
- Ошибка загрузки — текст ошибки и кнопка «Повторить» вместо таблицы.
|
||||||
|
|
||||||
|
## Capabilities
|
||||||
|
|
||||||
|
### Modified Capabilities
|
||||||
|
|
||||||
|
- `goodwill-ui` — «Таблица гудвилла»: стрелка блока и ошибка загрузки; «Редактирование таблицы гудвилла»: 409/404 при
|
||||||
|
сохранении; «Переключатель, фильтр и экспорт гудвилла»: 409/404 при переключении.
|
||||||
|
|
||||||
|
## Impact
|
||||||
|
|
||||||
|
Только фронт arm-core: `web/src/widgets/ConsolidationGoodwill/*`, `web/src/types/goodwill/goodwill.ts` (типы `Ref` и
|
||||||
|
причина «только чтение» — из `types/corrections.ts`), `web/src/hooks/useFullscreen.ts` (переименован из
|
||||||
|
`useFullScreen.tsx`). API, DBML, правила `05-domain-rules.md` не меняются.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Сверка предпросмотра P/G с ответом сервера на реальной паре 58.01 — проверка после выкладки (AURORA-2006, раздел
|
||||||
|
«Проверить после выкладки»), не код.
|
||||||
@ -0,0 +1,93 @@
|
|||||||
|
## MODIFIED Requirements
|
||||||
|
|
||||||
|
### Requirement: Таблица гудвилла
|
||||||
|
Вкладка `goodwill` страницы отчёта версии SHALL загружать таблицу одним запросом `GET /consolidations/versions/{id}/goodwill`
|
||||||
|
(контракт `../docs/dev/api-contract-goodwill.md`) и показывать блоки по ГО в порядке ответа: строка ГО, строки ДО, строка
|
||||||
|
«Всего» блока из `groups[].totals`, внизу «Итого по листу» из `totals`. Колонки — по макету `[31-03]`: «Учет в отчете»,
|
||||||
|
«Наименование дочерней организации», «Доля владения», «Фондовые вложения головной организации», «Доля участия головной
|
||||||
|
организации в уставном капитале», «Уставный капитал», «Гудвилл (+/-)», «Комментарий». Сумма `null` SHALL показываться
|
||||||
|
прочерком, ноль — нулём в выбранных единицах; итоги фронт MUST NOT считать сам. Стрелка раскрытия блока SHALL стоять в
|
||||||
|
колонке «Наименование дочерней организации» при любом наборе видимых колонок; если эта колонка скрыта — в первой видимой.
|
||||||
|
Если загрузка не удалась, вместо таблицы SHALL показываться текст ошибки (сообщение сервера или «Не удалось загрузить
|
||||||
|
таблицу гудвилла») и кнопка «Повторить»; сообщение «Вложений по 58.01 между компаниями периметра нет» MUST NOT
|
||||||
|
показываться при ошибке.
|
||||||
|
|
||||||
|
#### Scenario: Нулевой и нерассчитанный гудвилл
|
||||||
|
- **WHEN** у одной строки `goodwill_amount = "0.00"`, у другой `null`
|
||||||
|
- **THEN** первая показывает «0,00», вторая — «—»
|
||||||
|
|
||||||
|
#### Scenario: Строка «Нет вложений»
|
||||||
|
- **WHEN** у строки `has_investments = false`
|
||||||
|
- **THEN** строка серая, с меткой «Нет вложений», чекбокс недоступен, суммы — прочерки, сохранённые доля и комментарий видны
|
||||||
|
|
||||||
|
#### Scenario: Предупреждения
|
||||||
|
- **WHEN** у строки есть `warnings` (например, `CAPITAL_SOURCE_MISSING`)
|
||||||
|
- **THEN** рядом с названием ДО иконка предупреждения, по наведению — тексты `message`
|
||||||
|
|
||||||
|
#### Scenario: Стрелка блока при скрытой колонке
|
||||||
|
- **WHEN** в «Настройке таблицы» снята колонка «Учет в отчете»
|
||||||
|
- **THEN** стрелка раскрытия блока остаётся в колонке «Наименование дочерней организации»
|
||||||
|
|
||||||
|
#### Scenario: Ошибка загрузки
|
||||||
|
- **WHEN** `GET …/goodwill` отвечает ошибкой
|
||||||
|
- **THEN** вместо таблицы — текст ошибки и «Повторить»; «Повторить» запрашивает таблицу заново и при успехе показывает её
|
||||||
|
|
||||||
|
### Requirement: Редактирование таблицы гудвилла
|
||||||
|
Кнопка «Редактировать» SHALL быть доступна при `editable = true`; иначе — недоступна с подсказкой причины
|
||||||
|
(`read_only_reason`). В режиме редактирования (баннер «Доступны для редактирования столбцы «Доля владения» и
|
||||||
|
«Комментарий».») у действующих строк доступна галочка; у отмеченной действующей строки — поля доли и комментария, P и G
|
||||||
|
строки SHALL пересчитываться предварительно по введённой доле. Доля — 0–100, не больше двух знаков, запятая или точка;
|
||||||
|
ошибочная доля MUST NOT обрезаться или подменяться, а показывается ошибкой у поля. «Сохранить» SHALL быть недоступно,
|
||||||
|
пока у отмеченной действующей строки нет корректной доли или комментария. Групповой чекбокс блока SHALL отмечать и снимать
|
||||||
|
все действующие строки блока, включая скрытые фильтром, и показывать промежуточное состояние при частичном выборе.
|
||||||
|
«Отменить изменения» SHALL возвращать последнее сохранённое состояние. На ответ 409 (версия закрыта, блокировку забрали)
|
||||||
|
или 404 (пары уже нет) при «Сохранить» экран SHALL показать уведомление с текстом сервера и перечитать таблицу, строку
|
||||||
|
MUST NOT подсвечивать; если после перечитывания `editable = false`, режим редактирования SHALL закрыться, введённое —
|
||||||
|
сброситься.
|
||||||
|
|
||||||
|
#### Scenario: Сохранение набора
|
||||||
|
- **WHEN** аналитик отметил две строки, ввёл доли «80,5» и «100» и комментарии и нажал «Сохранить»
|
||||||
|
- **THEN** уходит один `PUT …/goodwill` только с изменёнными строками; ответ заменяет таблицу, режим редактирования закрывается
|
||||||
|
|
||||||
|
#### Scenario: Снятие галочки у строки без доли
|
||||||
|
- **WHEN** аналитик снимает галочку у строки, где доля не вводилась, и сохраняет
|
||||||
|
- **THEN** строка уходит с `ownership_share: null` и сохраняется без ошибки
|
||||||
|
|
||||||
|
#### Scenario: Ошибка строки от сервера
|
||||||
|
- **WHEN** сервер отвечает 422 `COMMENT_REQUIRED` с ключом пары
|
||||||
|
- **THEN** поле комментария этой строки подсвечено ошибкой, режим редактирования не закрыт, введённое не потеряно
|
||||||
|
|
||||||
|
#### Scenario: Лишние знаки доли
|
||||||
|
- **WHEN** аналитик вводит долю «80,123»
|
||||||
|
- **THEN** у поля ошибка «Число от 0 до 100, не больше двух знаков после запятой», значение в поле не меняется, «Сохранить» недоступно
|
||||||
|
|
||||||
|
#### Scenario: Версию забрал другой пользователь
|
||||||
|
- **WHEN** аналитик в режиме редактирования нажимает «Сохранить», сервер отвечает 409 `LOCKED_BY_OTHER`, перечитанная
|
||||||
|
таблица приходит с `editable = false`
|
||||||
|
- **THEN** уведомление с текстом сервера, режим редактирования закрыт, показаны сохранённые значения, «Редактировать»
|
||||||
|
недоступна с подсказкой «Консолидацию редактирует другой пользователь»
|
||||||
|
|
||||||
|
#### Scenario: Пары больше нет
|
||||||
|
- **WHEN** сервер отвечает на «Сохранить» 404 по паре, которой больше нет в версии
|
||||||
|
- **THEN** уведомление с текстом сервера, таблица перечитана, ни одна строка не подсвечена; правки этой пары в запрос
|
||||||
|
больше не попадают
|
||||||
|
|
||||||
|
### Requirement: Переключатель, фильтр и экспорт гудвилла
|
||||||
|
Панель вкладки SHALL содержать переключатель «Учитывать гудвилл в КФО» (`PUT …/goodwill-settings`, доступен при
|
||||||
|
`editable` вне режима редактирования) с подписью суммы `goodwill_in_kfo_amount` или «Гудвилл не учитывается в КФО»;
|
||||||
|
фильтр «Гудвилл»: «Все значения», «Положительные», «Отрицательные», «Нулевые» (нерассчитанный гудвилл — только во «Все
|
||||||
|
значения»); единицы и знаки после запятой; «Настройка таблицы»; «Экспорт» — `GET …/goodwill/export` с текущим фильтром
|
||||||
|
(`sign`); «На весь экран». На ответ 409 или 404 при переключении экран SHALL показать уведомление с текстом сервера и
|
||||||
|
перечитать таблицу.
|
||||||
|
|
||||||
|
#### Scenario: Экспорт с фильтром
|
||||||
|
- **WHEN** выбран фильтр «Положительные» и нажат «Экспорт»
|
||||||
|
- **THEN** запрос уходит с `sign=positive`
|
||||||
|
|
||||||
|
#### Scenario: Выключение гудвилла
|
||||||
|
- **WHEN** аналитик выключает переключатель
|
||||||
|
- **THEN** таблица перечитывается из ответа, под переключателем подпись «Гудвилл не учитывается в КФО», ручной ввод строк не меняется
|
||||||
|
|
||||||
|
#### Scenario: Переключатель после закрытия версии
|
||||||
|
- **WHEN** аналитик переключает «Учитывать гудвилл в КФО», а сервер отвечает 409 `VERSION_NOT_EDITABLE`
|
||||||
|
- **THEN** уведомление с текстом сервера, таблица перечитана, переключатель недоступен
|
||||||
9
openspec/changes/goodwill-ui-errors/tasks.md
Normal file
9
openspec/changes/goodwill-ui-errors/tasks.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Tasks
|
||||||
|
|
||||||
|
- [x] 1.1 arm-core `web/src/widgets/ConsolidationGoodwill/ConsolidationGoodwillContent` — 409/404 при «Сохранить» и при
|
||||||
|
переключателе: `errorOutcome`, перечитывание, выход из редактирования при `editable = false` (PR #244, автор)
|
||||||
|
- [x] 1.2 arm-core `web/src/widgets/ConsolidationGoodwill/ConsolidationGoodwillTable` — стрелка блока по ключу колонки
|
||||||
|
`name`; лишний CSS шахматки удалён (PR #244, автор)
|
||||||
|
- [x] 1.3 arm-core `web/` — ошибка загрузки с «Повторить»; `useFullscreen.ts`; типы из `types/corrections.ts` (PR #244, автор)
|
||||||
|
- [x] 1.4 Ревью: прогон в браузере на ГК «Пример» 2025 К3 — скрытие «Учет в отчете», 409 на `PUT …/goodwill` с
|
||||||
|
перечитыванием `editable = false`, 500 на `GET …/goodwill` и «Повторить» (ответы сервера подменены в Playwright)
|
||||||
Loading…
x
Reference in New Issue
Block a user