using Rugrid.Sdaid.Notation.Documents;
namespace Rugrid.Sdaid.Epas.Nts.Backend.ModificationSelection
{
/// <summary>
/// Подбор группы модификаций ТС: базовая группа по виду ТС и топливу и мягкое уточнение
/// по распознанным марке, модели и остатку наименования. Группу не сохраняет.
/// </summary>
public class DOC_ModificationGroupSelection : IApplicationServiceDocument, IHasStructuralLinks, IFolder<NtsBackendFolder>
{
public SdaidLink[] Links => new[]
{
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_Vehicle>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModification>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Backend.ModificationSelection.DOC_ModificationNameRecognition>(),
};
public static string _refName = "Подбор группы модификаций ТС";
public string Name => "Подбор группы модификаций ТС";
public string Description =>
@"Подбор группы модификаций ТС: базовая группа по виду ТС и топливу и мягкое уточнение по распознанным марке, модели и остатку наименования.";
public string Version => "0.1";
public string Status => "draft";
public string[] Comments => new string[0];
public static string Purpose = $"""
## Назначение
Процедура собирает группу модификаций, применимых к конкретному ТС: сначала **базовую
группу** по виду ТС и топливу, затем **мягкое уточнение** по распознанным в
наименовании марке, модели и остатку.
Вызывающие:
- приём данных ТС из АИС — {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_AisRefreshPolicy>()};
- предзаполнение маски окна подбора —
{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_ModificationSelectionModal>()}.
В окне подбора используется та же **базовая группа** и та же композиция уточнения, но
результат — значения полей маски, а не сохранённая группа: установка маски остаётся
поведением экрана и описана в спеке окна.
Процедура не сохраняет группу, не меняет статус подбора, способ подбора и
рассчитанные нормы.
""";
public static string BaseGroup = $"""
## Базовая группа
Вход — вид ТС и вид топлива ТС
({SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_Vehicle>()}), справочник —
{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModification>()}.
1. Отбираются все модификации этого вида ТС, у которых установлена норма.
Какое поле справочника считается нормой — открытый вопрос
{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Epics.NtsFuelCalc.OQ_BaseNorm>()};
процедура использует готовый признак «норма установлена» и не решает его сама.
2. Вид топлива — мягкое условие. Если среди отобранных есть модификации с пустым
видом топлива или совпадающие с основным видом топлива ТС, остаются только они.
Если таких нет — группа остаётся по виду ТС.
3. Пустая группа — валидный результат: у вида ТС и топлива нет модификаций с нормой.
Базовая группа — общий вход и для подбора группы при приёме данных АИС, и для маски
окна подбора: маска начинает «Отфильтрованные» с неё, даже когда подбор не
выполнялся (способ «эксперт»).
Базовая группа — также вход эталонной нормы $H_эт$; определение и формула — секция
`fuel.reference_norm` {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_NtsCalc>()}.
""";
public static string Composition = $"""
## Композиция уточнения
Из базовой группы:
1. `DetectBrandIn` по «Марка и модель базы ТС»; если марка найдена — группа сужается
по марке;
2. `DetectModel` по полученной группе; если модель найдена — группа сужается по модели,
а остаток наименования не применяется;
3. иначе `BuildNameRemainder` — остаток наименования используется как подстрока для
фильтра по полному наименованию модификации.
Распознавание — {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.ModificationSelection.DOC_ModificationNameRecognition>()}.
Каждый шаг **мягкий**: если отбор по распознанному значению даёт пустую группу,
значение игнорируется, группа остаётся прежней. Жёстких условий в подборе группы нет —
строгие условия появляются только в маске, когда их задаёт пользователь.
""";
public static string Result = $"""
## Результат
Группа модификаций — набор строк справочника после базовой группы и мягких уточнений,
либо пустая группа. Пустая группа не означает ошибку процедуры: это факт «для этого
ТС подходящих модификаций с нормой нет», который вызывающие интерпретируют по-своему
(статус подбора, сообщение в окне, способ подбора).
""";
}
}