«Применить» в окне подбора модификаций запускает пересчёт
После «Применить» в окне подбора модификаций статус расчёта и статус обработки ТС сбрасываются в «не выполнялся», хотя подбор прошёл успешно и данные для расчёта полны. Нужен безусловный пересчёт — тем же путём, что и после приёма данных из АИС.
1. Источник (как есть)
По итогам ручного тестирования карточки ТС (Уаз-31512): пользователь открыл окно подбора модификаций, выбрал единственную подходящую модификацию и нажал «Применить» — способ подбора стал «эксперт», статус подбора «Определена», базовая норма заполнена. Все обязательные для расчёта поля (включая дату начала эксплуатации) заданы. При этом Статус расчёта стал серым «Не выполнен», Статус обработки — серым «Не выполнена» («Расчёт ещё не выполнялся»), хотя до открытия окна подбора расчёт мог быть успешным.
Причина в прототипе: обработчик onApply (Ntr/65_Ui/html/shell.js:2356-2359) вызывает
renderNorm() и resetCalculationState() — не computeNorm(). resetCalculationState()
(shell.js:1909-1918) принудительно обнуляет результат и ставит «Не выполнен».
2. Разбор
Ни {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_ModificationSelectionModal>()}}
(правило 7 «Применить»), ни
{{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_AisRefreshPolicy>()}} не
описывали, что должно происходить со статусом расчёта после ручного применения
модификации — AisRefreshPolicy по названию и назначению ограничена реакцией на приём
данных из АИС (два триггера: первый приём, «Обновить из АИС»), «Применить» в окне
подбора — третий, самостоятельный триггер того же действия, не относящийся к АИС.
Решение: «Применить» запускает расчёт безусловно — тем же механизмом, что и любой
другой пересчёт (валидаторы секций {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_CalcValidators>()}}
либо дают результат, либо классифицированную ошибку). Это не расширение
AisRefreshPolicy на чужой для неё триггер, а отдельное, явное правило в
ModificationSelectionModal.cs — у расчёта нет единого «диспетчера триггеров» в спеке,
и вводить его ради этого одного случая избыточно; у каждого триггера — своё правило в
своём документе, принцип безусловности общий и описан один раз в DOC_CalcValidators.
Попутно найдена и правится устаревшая формулировка. Правило 8 «Пустая группа»
(ModificationSelectionModal.cs) всё ещё гласит: «расчёт без базовой нормы не
выполняется вовсе, а не завершается ошибкой» — это текст из модели ДО перехода на
безусловный расчёт (правка сессии 2026-10-29 в AisRefreshPolicy.cs/
ProcessingStatusPolicy.cs/VehicleCard.cs), который не был обновлён в этом файле.
Актуально: расчёт запускается безусловно и в этом случае, валидатор секции
fuel.base_norm возвращает ошибку «Базовая норма не определена», статус расчёта —
«Выполнен с ошибкой», статус обработки — «Нет модификаций»
({{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_ProcessingStatusPolicy>()}},
правило 2).
3. Blast radius
3.1. Спецификация
| Документ | Правка |
|---|---|
| {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_ModificationSelectionModal>()}} | правило 7 «Применить» — добавить безусловный запуск расчёта; правило 8 «Пустая группа» — убрать устаревшее «расчёт не выполняется вовсе», согласовать с безусловной моделью |
3.2. Прототип
| Файл | Правка |
|---|---|
Ntr/65_Ui/html/shell.js:2356-2359 |
обработчик onApply — заменить resetCalculationState() на computeNorm() |
4. План
ModificationSelectionModal.cs— правило 7: добавить предложение о безусловном запуске расчёта после «Применить».ModificationSelectionModal.cs— правило 8: убрать «расчёт не выполняется вовсе», заменить на согласованную сProcessingStatusPolicyформулировку (ошибка валидатора, «Выполнен с ошибкой», «Нет модификаций»).shell.js— обработчикonApply:computeNorm()вместоresetCalculationState().- Собрать (
dotnet build,build-html.cmd), проверитьtestovichреальным выполнением на Уаз-31512 (или эквивалентном сценарии: применить единственную модификацию при уже полных данных — статус расчёта должен стать «Успешно выполнен», не «Не выполнен»). - Зафиксировать «Итог».
5. Acceptance criteria
- AC-1. После «Применить» в окне подбора модификаций (способ «эксперт», статус подбора «Определена» или «Определена группа») расчёт запускается безусловно, статус расчёта отражает его фактический результат — не сбрасывается в «Не выполнен».
- AC-2. Если применённый отбор даёт «Не определена» (пустая группа) — расчёт всё
равно запускается, валидатор
fuel.base_normвозвращает «Базовая норма не определена», статус расчёта «Выполнен с ошибкой», статус обработки «Нет модификаций» — не «Не выполнена».
6. Итог
Реализовано и проверено testovich реальным выполнением (jsdom, Уаз-31512):
AC-1 и AC-2 подтверждены буквально. «Применить» при успешном подборе даёт «Успешно
выполнен»/«Завершена»; при пустой группе — «Выполнен с ошибкой» («Базовая норма не
определена»)/«Нет модификаций». Расхождений спека↔код не найдено.
Структурные связи
Использует
- Документ Политика статуса обработки ТС
- Доменная сущность Валидаторы расчёта
- Экран Окно подбора модификаций