Независимость маски и отбора в окне подбора модификаций
Маска окна подбора модификаций больше не хранится и не восстанавливается — формируется заново из данных АИС при каждом открытии. «Отфильтрованные» и «Отобранные» — независимые списки, связанные только явными действиями пользователя (чекбокс добавляет и блокирует строку, «×»/«Очистить» в «Отобранных» удаляют и разблокируют).
1. Источник (как есть)
При разборе реального прототипа (скриншот окна подбора для ТС со способом «эксперт», уже применённой модификацией) обнаружено: «Отфильтрованные» показывали весь справочник без сужения (1204 строки, «Alfa Romeo» первой), потому что действовавшая ветка правила 3 («группа сохранена способом «эксперт», сохранённой маски нет») даёт пустую маску — это прямое следствие OQ-19 (маску негде хранить), а не баг. Разбор показал более глубокую проблему: вся модель «маска либо восстанавливается, либо собирается автоуточнением, либо пустая» в принципе не нужна, если развести две вещи — что показывает поиск (маска → «Отфильтрованные») и что уже решено пользователем («Отобранные») — и сделать их независимыми.
2. Разбор
Принятые решения (обсуждение с пользователем):
- Маска — чистая функция от данных АИС, без хранения. Формируется заново при
каждом открытии окна, тем же автоуточнением (
DetectBrandIn→DetectModel→ остаток), независимо от способа подбора и от содержимого «Отобранных». Закрывает OQ-19 (хранить нечего) и OQ-22 (рассинхронизация с группой невозможна, раз маска не хранится вовсе). - «Отфильтрованные» и «Отобранные» — независимые списки. Смена маски пересчитывает «Отфильтрованные», но не трогает «Отобранные». Исключение — однократное копирование при открытии окна (правило 1: текущая группа → «Отобранные»).
- Связь списков — только через явные действия, однонаправленно. Чекбокс в «Отфильтрованных» добавляет строку в «Отобранные» и блокирует её (серая, недоступна для повторного действия) — а не переключает. «Выбрать все» — массовый аналог того же действия. Кнопка «Снять» в «Отфильтрованных» убрана как бессмысленная при такой модели. «×» / «Очистить» в «Отобранных» — единственный путь убрать запись; после удаления строка в «Отфильтрованных» разблокируется, если всё ещё проходит текущую маску.
- Счётчик «Отфильтровано: N» включает заблокированные строки — N всегда равен числу строк по маске, вне зависимости от того, отобраны они или нет.
- Не решено в этом CR, зафиксировано как OQ-24. Смена вида ТС/топлива через «Обновить из АИС» может сделать уже отобранные модификации не соответствующими новому виду/топливу — сбрасывать ли «Отобранные» в этом случае, не решено.
3. Blast radius
3.1. Спецификация
| Документ | Правка |
|---|---|
Nts/65_Ui/ModificationSelectionModal.cs |
правила 1, 3 (переписано), 3а/3б (новые), 4 (дополнено), 8 (убрано упоминание сохранения маски — противоречило новому правилу 3, найдено doc); таблица интерфейсных элементов; раздел «Поведение»; абзац «Открытые вопросы» (убраны закрытые темы) |
Nts/60_Epics/NtsFuelCalc/EPIC_NtsFuelCalc.cs |
AC-C2 переформулирован; OQ-19, OQ-22 закрыты («снят»); OQ-24 добавлен |
3.2. Прототип
| Файл | Правка |
|---|---|
Ntr/65_Ui/html/shell.js, функция openNormTool |
убрать ветки восстановления/пустой маски (hasRestored, NORM_FILTERS), маска — всегда автоуточнение; блокировка строки после добавления в «Отобранные» вместо чекбокса-тумблера; убрать кнопку «Снять» |
4. План
ModificationSelectionModal.cs,EPIC_NtsFuelCalc.cs— правки спецификации (сделано).- Прототип:
shell.js— убрать персистентность маски (NORM_FILTERS), переписатьopenNormToolна всегда-автоуточнение и блокировку строк. - Собрать (
dotnet build,build-html.cmd). testovich— реальным выполнением: ТС со способом «эксперт» и ранее применённой модификацией вне маски (кейс Alfa Romeo) — «Отобранные» показывают её независимо от маски; блокировка/разблокировка строк при добавлении/удалении.- Зафиксировать «Итог».
5. Acceptance criteria
- AC-1. Маска при открытии окна всегда строится автоуточнением из данных АИС, независимо от способа подбора и от сохранённой группы.
- AC-2. Смена маски (ручная или по переоткрытию) не меняет состав «Отобранных».
- AC-3. Чекбокс в «Отфильтрованных» добавляет строку в «Отобранные» и блокирует её; повторный клик по заблокированной строке ничего не делает. Кнопки «Снять» в «Отфильтрованных» нет.
- AC-4. «×» / «Очистить» в «Отобранных» удаляют запись и разблокируют соответствующую строку в «Отфильтрованных», если она проходит текущую маску.
- AC-5. Счётчик «Отфильтровано: N» включает заблокированные строки.
6. Итог
Реализовано в Ntr/65_Ui/html/shell.js (openNormTool): убрано хранение/восстановление
маски (NORM_FILTERS, hasRestored); автоуточнение теперь безусловное при каждом
открытии; чекбокс в «Отфильтрованных» только добавляет и блокирует строку; кнопка
«Снять» убрана; «×»/«Очистить» в «Отобранных» удаляют и разблокируют. doc нашёл и
исправлены 3 находки в спеке до реализации (правило 8 противоречило правилу 3; абзац
«Открытые вопросы» не обновлён; blast radius не упоминал правило 8). testovich
реальным выполнением подтвердил соответствие всем AC, включая ключевой сценарий
(способ «эксперт», ранее отобранная модификация не совпадает с автоуточнённой маской —
«Отфильтрованные» сузились, «Отобранные» не изменились). Находок нет.
Структурные связи
Использует
- Прикладной сервис Подбор группы модификаций ТС
- Прикладной сервис Распознавание марки и модели ТС
- Экран Окно подбора модификаций