Вывод зимней надбавки по климатическому району

Запрос на изменение Версия: 0.2 done

InputModel.ClimateRegionAllowance (D_район) обязателен для расчёта, но нигде не отображается в UI. Добавлен вывод на вкладке «Сведения» орг. объекта (запись справочника зимних надбавок по субъекту) и в карточке ТС (субъект эксплуатации и применённая надбавка).

⟨/⟩ Исходник

1. Источник (как есть)

По итогам аудита полноты доменной модели (сверка UI/методики с доменом): поле InputModel.ClimateRegionAllowance (RequiredForCalc = "Да") не имеет прямого [CalcSource] — источник не атрибут ТС, а поиск по цепочке Vehicle.OrgObject → NavEntity.Subject → WinterAllowance (справочник «Предельные значения зимних надбавок», по субъекту РФ). Это ожидаемо и уже задокументировано в InputModel.cs.

Но ни субъект РФ эксплуатации, ни найденная запись справочника, ни сама применённая надбавка нигде не показываются пользователю — ни на карточке ТС, ни на вкладке «Сведения» орг. объекта. При этом у fuel.cf_climate_region уже есть классифицированная ошибка («Субъект РФ эксплуатации не определён — неизвестна зимняя надбавка», DOC_NtsCalcErrors) — но диагностировать её причину в UI нечем.

2. Разбор

Решены два места вывода:

Вкладка «Сведения» орг. объекта. Там уже есть поле «Субъект РФ» (выбирается из справочника субъектов). Под ним — найденная для этого субъекта запись WinterAllowance: срок действия (Period), количество месяцев действия (Months), предельная величина надбавки, % (LimitPercent). Если субъект не выбран или для него нет записи — показывается буквальный текст ошибки классификатора (решение пользователя: не придумывать отдельную формулировку для этого контекста — один факт, один текст, что и в карточке ТС, и в классификаторе).

Карточка ТС, группа «Условия эксплуатации». Два новых read-only поля в начале группы (до полей ввода): «Субъект РФ эксплуатации» (найден по владельцу ТС — другой субъект, чем на вкладке орг. объекта, если ТС и владелец размещены в разных регионах) и «Поправочный коэффициент на климатический район, D_район, %» (предельная величина надбавки найденной записи). Решение пользователя: если субъект/надбавка не определены — текст ошибки показывается в ОБОИХ полях, не только в одном — оба поля одинаково свидетельствуют об одной и той же причине отказа.

3. Blast radius

3.1. Спецификация

Документ Правка
Nts/65_Ui/NtsMainPage.cs раздел «Структура экрана», вкладка «Сведения» — вывод записи WinterAllowance под полем «Субъект РФ»; новые связи на DOC_WinterAllowance, DOC_NtsCalcErrors
Nts/65_Ui/VehicleCard.cs группа «Условия эксплуатации» — два новых read-only поля в начале группы (таблица «Описание полей» + текстовое описание группы); новые связи на DOC_WinterAllowance, DOC_NtsCalcErrors

3.2. Прототип

Файл Правка
Nts/65_Ui/html/main-page.html блок «Зимняя надбавка» под полем «Субъект РФ» на вкладке «Сведения»
Nts/65_Ui/html/vehicle-card.html два новых поля в начале группы «Условия эксплуатации»
Ntr/65_Ui/html/shell.js функция поиска записи WinterAllowance по субъекту (по демо-справочнику), заполнение обоих мест вывода, обработка случая «не найдено» — текст ошибки в оба поля

4. План

  1. NtsMainPage.cs/VehicleCard.cs — правки спецификации (сделано).
  2. Прототип: демо-справочник зимних надбавок по субъектам (если такого ещё нет в nts-ref.js), функция поиска и рендера, оба места вывода.
  3. Собрать (dotnet build, build-html.cmd).
  4. testovich — реальным выполнением: найденная запись совпадает по нескольким субъектам; случай «субъект/запись не найдены» — текст ошибки виден в обоих местах.
  5. Зафиксировать «Итог».

5. Acceptance criteria

6. Итог

Выполнено полностью. Спека: NtsMainPage.cs (блок «Зимняя надбавка» на вкладке «Сведения», с субъектом РФ первым полем группы), VehicleCard.cs (два новых поля в «Условиях эксплуатации»). Прототип: main-page.html, vehicle-card.html, shell.js (fillOrgCard, computeNorm, winterAllowanceByOwnerName).

По пути к закрытию нашлись и были исправлены два не связанных с замыслом CR, но блокировавших его реальных бага прототипа: устаревшая версия ?v= у shell.js/ shell.css в <script>/<link> (браузер не подхватывал новый код без ручной жёсткой перезагрузки) и неверный путь навигации «дерево → Реестр ТС → Сведения», вёдший на общую карточку ЭНТР (mes-info.html/pmes-info.html/company-info.html) вместо инлайн-вкладки ЭНТС на main-page.html — оба зафиксированы и устранены в shell.js по ходу расследования.

testovich (финальный прогон) реальным выполнением подтвердил все три AC и путь навигации: AC-1 — блок виден и заполнен (МЭС Волги: 01.XI..31.III, 5 мес., 10,00 %); AC-2 — оба поля карточки ТС заполнены корректно (Самарская область, 10,00 %); AC-3 — при неизвестном субъекте оба поля показывают буквальный текст ошибки классификатора (fuel.cf_climate_region). Находок нет.