⟨/⟩ Nts/60_Epics/NtsFuelCalc/UseCases/UC_CreateVehicleModification.cs

102 строк · в начало

using Rugrid.Sdaid.Notation.Documents;

namespace Rugrid.Sdaid.Epas.Nts.Epics.NtsFuelCalc.UseCases
{
    /// <summary>
    /// Администратор модуля создаёт недостающую запись справочника «Марка, модель и
    /// модификация ТС» из карточки ТС, у которого статус подбора модификации — «Не определена».
    /// </summary>
    public class UC_CreateVehicleModification : IUseCaseDocument, IHasStructuralLinks, IFolder<NtsEpicsFolder>
    {
        public SdaidLink[] Links => new[]
        {
            Rel.Realizes<EPIC_NtsFuelCalc>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleCard>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_ModificationSelectionModal>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleModificationCard>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleModificationRegistry>(),
            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.Calc.DOC_ProcessingStatusPolicy>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Backend.ModificationSelection.DOC_ModificationNameRecognition>(),
        };

        public static string _refName = "Создание модификации ТС из карточки ТС";

        public string Name => "Создание модификации ТС из карточки ТС";

        public string Description =>
            "Администратор модуля создаёт недостающую запись справочника «Марка, модель и модификация ТС», перейдя из карточки ТС, для которого в справочнике нет модификации с нормой.";

        public string PrimaryActor => "Администратор модуля";

        public static string Intro = $"""
            ## Цель сценария

            Пользователь видит в карточке ТС статус подбора модификации «Не определена» — для вида
            ТС и вида топлива этого ТС в справочнике
            {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModification>()} нет ни
            одной модификации с установленной нормой
            ({SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_ProcessingStatusPolicy>()}).
            Сценарий доводит администратора модуля от этого состояния до добавленной записи
            справочника, без выхода в отдельный реестр и без повторного ввода уже известного о ТС.
            """;

        public static string Flow = $"""
            ## Основной поток

            Актор — Администратор модуля.

            **Given** пользователь открыл карточку ТС
            ({SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleCard>()}); статус подбора
            модификации — «Не определена» (подбор проводился, модификаций для вида ТС и вида
            топлива в справочнике нет); у пользователя роль «Администратор модуля».

            **When** администратор выполняет шаги:

            1. открывает карточку ТС со статусом подбора «Не определена»;
            2. открывает окно подбора модификаций ({SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_ModificationSelectionModal>()})
               по иконке «Подобрать модификацию» — окно показывает, что модификаций нет, и кнопку
               «Создать модификацию»;
            3. нажимает «Создать модификация» — открывается
               {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleModificationCard>()} с
               предзаполненными видом ТС и видом топлива (точно, по ТС) и предложенными маркой и
               моделью (разобраны из «Марка и модель базы ТС» сервисом подбора —
               {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.ModificationSelection.DOC_ModificationNameRecognition>()});
            4. при необходимости поправляет марку и модель — выбирает существующую запись
               справочника или вводит новое наименование;
            5. заполняет модификацию и применимые нормы расхода;
            6. сохраняет карточку модификации.

            **Then** в справочнике {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModification>()}
            появляется новая запись (и, если марка или модель вводились как новые — записи
            справочников марок и моделей); администратор возвращается в окно подбора модификаций,
            где новая запись уже доступна для отбора.

            **And** вид ТС и вид топлива новой записи с этой карточки не создаются — только
            выбираются из значений, уже загруженных из АИС.

            **And** автоматического применения группы и пересчёта нет: сохранение карточки
            модификации не закрывает окно подбора и не нажимает «Применить» за пользователя —
            администратор продолжает подбор в том же окне обычным образом.
            """;

        public static string Trace = """
            ## Шаг → артефакты

            | Шаг | Артефакты |
            |---|---|
            | Открытие карточки ТС со статусом «Не определена» | карточка ТС, политика статуса обработки |
            | Открытие окна подбора модификаций | окно подбора модификаций |
            | Переход в карточку модификации | кнопка «Создать модификация», карточка модификации |
            | Выбор/создание марки и модели | марка ТС, модель ТС |
            | Заполнение модификации и норм | справочник «Марка, модель и модификация ТС» |
            | Сохранение | справочник модификаций, окно подбора модификаций |
            """;

        public string Version => "0.1";
        public string Status => "draft";
        public string[] Comments => new string[0];
    }
}