using Rugrid.Sdaid.Notation.Documents;
namespace Rugrid.Sdaid.Epas.Nts.Epics.NtsFuelCalc.UseCases
{
/// <summary>
/// Сквозной сценарий эпика: пользователь от авторизации в ОПЭС доходит до расчётного
/// нормативного расхода топлива по выбранному ТС — выбирает ТС, дозаполняет данные ЭНТС,
/// подбирает модификации и запускает расчёт.
/// </summary>
public class UC_NtsFuelCalc : IUseCaseDocument, IHasStructuralLinks, IFolder<NtsEpicsFolder>
{
public SdaidLink[] Links => new[]
{
Rel.Realizes<EPIC_NtsFuelCalc>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleRegistry>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleCard>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_Vehicle>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModification>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_SelectedModifications>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleCalc>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_NtsCalc>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_NtsCalcModel>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_InputModel>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_OutputModel>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Infrastructure.AisOiaPeo.DOC_NtsAisImport>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_AisRefreshPolicy>(),
};
public static string _refName = "Получение нормативного расхода топлива по ТС";
public string Name => "Получение нормативного расхода топлива по ТС";
public string Description =>
"Пользователь выбирает ТС в реестре, дозаполняет данные, которых нет в АИС, подбирает модификации и получает расчётный нормативный расход топлива.";
public string PrimaryActor => "Пользователь";
public static string Intro = $"""
## Цель сценария
Сценарий доводит пользователя до расчётного нормативного расхода топлива по одному ТС:
от входа в модуль и выбора ТС до результата расчёта. Расчёт ведётся по методике
{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_NtsCalc>()}; входные данные
собираются из характеристик ТС
({SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_Vehicle>()}) — частично из АИС
ОИА ПЭО, частично введённых в модуле.
""";
public static string Flow = $"""
## Основной поток
Актор — Пользователь.
**Given** пользователь имеет доступ к Сервису ОПЭС и к модулю ЭНТС; характеристики ТС,
от которых зависит расчёт, в АИС ОИА ПЭО заполнены.
**When** пользователь выполняет шаги:
1. авторизуется в ОПЭС;
2. переходит в модуль ЭНТС;
3. выбирает организационный объект в блоке навигации — модуль получает реестр ТС
организационного объекта ({SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleRegistry>()});
4. выбирает ТС в реестре и открывает его карточку
({SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleCard>()});
5. Модуль получает актуальные сведения о ТС из АИС ОИА ПЭО
({SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Infrastructure.AisOiaPeo.DOC_NtsAisImport>()})
и в рамках того же приёма данных пытается подобрать модификацию автоматически —
правила реакции подбора и расчёта на приём данных (первый или повторный) — один факт,
{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_AisRefreshPolicy>()};
6. дозаполняет сведения о ТС, заполняемые в ЭНТС:
{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_InputModel>()} (пробег,
данные по надбавкам, время работы отопителя, масса прицепа);
7. подбирает модификации ТС из справочника «Марка, модель и модификация ТС»
({SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModification>()},
отобранное сохраняется в {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_SelectedModifications>()});
8. запускает расчёт («Сохранить и рассчитать»).
**Then** Модуль выполняет расчёт по методике и сохраняет результат в
{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleCalc>()}.
**And** пользователь получает расчётный нормативный расход
({SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_OutputModel>()}),
показанный в карточке ТС и в реестре ТС.
**And** статус расчёта — «Успешно выполнен»; при нарушениях исходных данных —
«Выполнен с ошибкой» с текстом ошибки. Итоговый статус обработки ТС вычисляется
по статусу расчёта, статусу подбора и способу подбора.
""";
public static string Trace = """
## Шаг → артефакты
| Шаг | Артефакты |
|---|---|
| Авторизация и переход в модуль | платформенные механизмы Сервиса ОПЭС |
| Выбор организационного объекта | реестр ТС |
| Выбор ТС | реестр ТС, карточка ТС |
| Получение сведений о ТС | ТС, приём данных из АИС ОИА ПЭО |
| Дозаполнение сведений | ТС, модель входных данных |
| Подбор модификаций | справочник «Марка, модель и модификация ТС», отобранные модификации ТС |
| Расчёт | методика, модель расчёта, расчёт ТС |
Таблица заполняется типизированными ссылками по мере появления артефактов: ссылка на ещё
не созданный документ ломает сборку спеки.
""";
public string Version => "0.1";
public string Status => "draft";
public string[] Comments => new string[0];
}
}