# goodwill-ui Specification ## Purpose Вкладка «Гудвилл» отчёта версии (AURORA-1544): таблица гудвилла по головным организациям, режим редактирования долей и комментариев, переключатель учёта гудвилла в КФО, фильтр знака и экспорт — по контракту `../docs/dev/api-contract-goodwill.md` и DOC-259025. ## 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** уведомление с текстом сервера, таблица перечитана, переключатель недоступен