using Rugrid.Sdaid.Notation.Documents;
namespace Rugrid.Sdaid.Epas.Nts.ChangeRequests
{
/// <summary>
/// `InputModel.ClimateRegionAllowance` (D_район) обязателен для расчёта, но нигде не
/// отображается в UI — ни субъект РФ эксплуатации, ни найденная запись справочника зимних
/// надбавок. Ошибку `fuel.cf_climate_region` диагностировать было нечем. Добавлен вывод на
/// вкладке «Сведения» орг. объекта и в карточке ТС.
/// </summary>
public class DOC_CR_2026_10_30_WinterAllowanceDisplay : IChangeRequestDocument, IHasStructuralLinks, IFolder<NtsChangeRequestsFolder>
{
public SdaidLink[] Links => new[]
{
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsMainPage>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleCard>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_WinterAllowance>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_NtsCalcErrors>(),
};
public static string _refName = "CR 2026-10-30: вывод зимней надбавки по климатическому району";
public string Name => "Вывод зимней надбавки по климатическому району";
public string Description =>
@"InputModel.ClimateRegionAllowance (D_район) обязателен для расчёта, но нигде не отображается в UI. Добавлен вывод на вкладке «Сведения» орг. объекта (запись справочника зимних надбавок по субъекту) и в карточке ТС (субъект эксплуатации и применённая надбавка).";
public string Version => "0.2";
public string Status => "done";
public string[] Comments => new string[0];
public static string Source = """"
## Источник (как есть)
По итогам аудита полноты доменной модели (сверка UI/методики с доменом): поле
`InputModel.ClimateRegionAllowance` (`RequiredForCalc = "Да"`) не имеет прямого
`[CalcSource]` — источник не атрибут ТС, а поиск по цепочке `Vehicle.OrgObject →
NavEntity.Subject → WinterAllowance` (справочник «Предельные значения зимних
надбавок», по субъекту РФ). Это ожидаемо и уже задокументировано в `InputModel.cs`.
Но ни субъект РФ эксплуатации, ни найденная запись справочника, ни сама применённая
надбавка нигде не показываются пользователю — ни на карточке ТС, ни на вкладке
«Сведения» орг. объекта. При этом у `fuel.cf_climate_region` уже есть классифицированная
ошибка («Субъект РФ эксплуатации не определён — неизвестна зимняя надбавка»,
`DOC_NtsCalcErrors`) — но диагностировать её причину в UI нечем.
"""";
public static string Analysis = """"
## Разбор
Решены два места вывода:
**Вкладка «Сведения» орг. объекта.** Там уже есть поле «Субъект РФ» (выбирается из
справочника субъектов). Под ним — найденная для этого субъекта запись
`WinterAllowance`: срок действия (`Period`), количество месяцев действия (`Months`),
предельная величина надбавки, % (`LimitPercent`). Если субъект не выбран или для него
нет записи — показывается буквальный текст ошибки классификатора (решение
пользователя: не придумывать отдельную формулировку для этого контекста — один факт,
один текст, что и в карточке ТС, и в классификаторе).
**Карточка ТС, группа «Условия эксплуатации».** Два новых read-only поля в начале
группы (до полей ввода): «Субъект РФ эксплуатации» (найден по владельцу ТС — другой
субъект, чем на вкладке орг. объекта, если ТС и владелец размещены в разных регионах)
и «Поправочный коэффициент на климатический район, D_район, %» (предельная величина
надбавки найденной записи). Решение пользователя: если субъект/надбавка не определены —
текст ошибки показывается в ОБОИХ полях, не только в одном — оба поля одинаково
свидетельствуют об одной и той же причине отказа.
"""";
public static string BlastRadius = """"
## Blast radius
### Спецификация
| Документ | Правка |
|---|---|
| `Nts/65_Ui/NtsMainPage.cs` | раздел «Структура экрана», вкладка «Сведения» — вывод записи `WinterAllowance` под полем «Субъект РФ»; новые связи на `DOC_WinterAllowance`, `DOC_NtsCalcErrors` |
| `Nts/65_Ui/VehicleCard.cs` | группа «Условия эксплуатации» — два новых read-only поля в начале группы (таблица «Описание полей» + текстовое описание группы); новые связи на `DOC_WinterAllowance`, `DOC_NtsCalcErrors` |
### Прототип
| Файл | Правка |
|---|---|
| `Nts/65_Ui/html/main-page.html` | блок «Зимняя надбавка» под полем «Субъект РФ» на вкладке «Сведения» |
| `Nts/65_Ui/html/vehicle-card.html` | два новых поля в начале группы «Условия эксплуатации» |
| `Ntr/65_Ui/html/shell.js` | функция поиска записи `WinterAllowance` по субъекту (по демо-справочнику), заполнение обоих мест вывода, обработка случая «не найдено» — текст ошибки в оба поля |
"""";
public static string Plan = """"
## План
1. `NtsMainPage.cs`/`VehicleCard.cs` — правки спецификации (сделано).
2. Прототип: демо-справочник зимних надбавок по субъектам (если такого ещё нет в
`nts-ref.js`), функция поиска и рендера, оба места вывода.
3. Собрать (`dotnet build`, `build-html.cmd`).
4. `testovich` — реальным выполнением: найденная запись совпадает по нескольким
субъектам; случай «субъект/запись не найдены» — текст ошибки виден в обоих местах.
5. Зафиксировать «Итог».
"""";
public static string Acceptance = """"
## Acceptance criteria
- **AC-1.** На вкладке «Сведения» орг. объекта под полем «Субъект РФ» показана запись
справочника зимних надбавок для этого субъекта (срок действия, количество месяцев,
предельная величина, %), либо текст ошибки классификатора, если субъект не выбран
или записи нет.
- **AC-2.** В карточке ТС, в начале группы «Условия эксплуатации», показаны «Субъект РФ
эксплуатации» (по владельцу ТС) и «Поправочный коэффициент на климатический район,
D_район, %» (предельная величина найденной записи).
- **AC-3.** Если субъект/запись не определены — текст ошибки показан в ОБОИХ полях
карточки ТС, один и тот же буквальный текст, что и в классификаторе ошибок.
"""";
public static string Result = """"
## Итог
Выполнено полностью. Спека: `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`). Находок нет.
"""";
}
}