⟨/⟩ Nts/10_Vision/NtsVision.cs

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

using Rugrid.Sdaid.Notation.Documents;

namespace Rugrid.Sdaid.Epas.Nts.Vision
{
    /// <summary>
    /// Видение модуля ЭНТС — эталоны и нормативы потребления автомобильного топлива
    /// транспортными средствами. Источник — проект ТЗ (ТЗ-ЭНТС.docx).
    /// </summary>
    public class DOC_NtsVision : IVisionDocument, IHasStructuralLinks, IFolder<NtsVisionFolder>
    {
        public SdaidLink[] Links => new[]
        {
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.BC_Nts>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_Vehicle>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleCalc>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_SelectedModifications>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_NavEntity>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_NavType>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_NavCompany>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_NavMes>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_NavPmes>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_Subject>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_WinterAllowance>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleKind>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_FuelKind>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleFunction>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleMark>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleMarkAlias>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModel>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModification>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_CalculationStatus>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_ProcessingStatus>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_NtsModificationSelectionStatus>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_NtsSelectionMethod>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_NtsCalc>(),
            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.Backend.Calc.DOC_NtsCalcModel>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_CalcValidators>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_CalcLog>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_NtsCalcErrors>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_ProcessingStatusPolicy>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_AisRefreshPolicy>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Epics.NtsFuelCalc.EPIC_NtsFuelCalc>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Epics.NtsFuelCalc.UseCases.UC_NtsFuelCalc>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsMainPage>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsReferenceRegistry>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsReferenceRecords>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsReferenceRecordCard>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsAisImportPage>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsDocumentation>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleRegistry>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleCard>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleMarkRegistry>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleModificationRegistry>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Ui.DOC_ModificationSelectionModal>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Infrastructure.AisOiaPeo.DOC_NtsAisImport>(),
        };

        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 General = """"
## Общие сведения

**Полное наименование:** Модуль «Эталоны и нормативы потребления автомобильного топлива
транспортными средствами ПАО „Россети“».

**Условное обозначение:** Модуль ЭНТС.
"""";

        public static string Purpose = """"
## Назначение и цель создания

Модуль предназначен для выполнения расчётов нормативного потребления автомобильного топлива транспортными
средствами при различных условиях эксплуатации, сравнения нормативного и фактического потребления и анализа
эффективности потребления.

Модуль позволяет:

- загрузить актуальные данные о составе, характеристиках, организационной принадлежности и потреблении
  топлива транспортных средств ПАО «Россети» из АИС ОИА ПЭО;
- обогатить информационную модель транспортного средства характеристиками, которые не ведутся
  в АИС ОИА ПЭО, но необходимы для выполнения расчётов нормативного потребления;
- выполнить расчёт нормативного потребления;
- сформировать отчёт с показателями сравнения нормативного и фактического потребления.

"""";

        public static string AutomationObject = $$""""
## Объект автоматизации

Объект автоматизации — процесс расчёта нормативного потребления автомобильного топлива
транспортными средствами при различных условиях эксплуатации и характеристиках ТС. Порядок
расчёта — единственный источник — {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_NtsCalc>()}}.

Исходные данные расчёта собираются из двух источников:

- **АИС ОИА ПЭО.** Основная часть данных о характеристиках и эксплуатации транспортных средств
  уже вносится специалистами в АИС в рамках других автоматизированных процессов. Состав
  загружаемых наборов, ключ сопоставления и карты соответствия —
  {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Infrastructure.AisOiaPeo.DOC_NtsAisImport>()}}.
- **Формы ввода модуля.** Часть данных, необходимых для расчёта, в АИС отсутствует
  и собирается специалистами в рамках процесса расчёта.

Итоговый статус обработки ТС по результатам расчёта и загрузки данных вычисляется политикой
{{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_ProcessingStatusPolicy>()}}. Как на
приём данных из АИС (первый или повторный) реагируют подбор модификации и расчёт — отдельная
политика {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_AisRefreshPolicy>()}}.
"""";

        public static string DataModel = $$""""
## Модель данных

Расчёт нормативного расхода топлива ведётся по транспортному средству: в его карточке
({{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_Vehicle>()}}) хранятся данные АИС ОИА ПЭО и
данные модуля. Результаты, статус расчёта и журнал хранятся отдельно от карточки
({{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleCalc>()}}) — импорт обновляет только
данные АИС, данные модуля и результаты расчёта он не затрагивает. Базовая норма расхода берётся
из справочника «Марка, модель и модификация ТС»
({{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModification>()}}). Полный состав
сущностей и связей, включая организационную структуру и справочники субъектов РФ —
{{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.BC_Nts>()}}.
"""";

        public static string Reports = $""""
## Отчёты

Отчёты формируются для анализа результатов расчёта. Требования к составу отчётов в ТЗ не заданы —
открытый вопрос собран в {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Epics.NtsFuelCalc.OQ_Vision>()}.
"""";

        public static string Ui = $""""
## Пользовательский интерфейс

Экранные формы ЭНТС:

| Экранная форма | Описание | Макет |
|---|---|---|
| Главная страница | {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsMainPage>()} | {SdaidHtml.LinkTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsMainPage>("main-page.html", "макет")} |
| Справочники | {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsReferenceRegistry>()} | {SdaidHtml.LinkTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsReferenceRegistry>("references.html", "макет")} |
| Записи справочника | {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsReferenceRecords>()} | {SdaidHtml.LinkTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsReferenceRecords>("reference-records.html", "макет")} |
| Карточка записи справочника | {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsReferenceRecordCard>()} | {SdaidHtml.LinkTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsReferenceRecordCard>("reference-record-card.html", "макет")} |
| Импорт данных из АИС ОИА ПЭО | {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsAisImportPage>()} | {SdaidHtml.LinkTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsAisImportPage>("ais-import.html", "макет")} |
| Документация | {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsDocumentation>()} | {SdaidHtml.LinkTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsDocumentation>("documentation.html", "макет")} |
| Реестр транспортных средств | {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleRegistry>()} | {SdaidHtml.LinkTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleRegistry>("vehicle-registry.html", "макет")} |
| Карточка транспортного средства | {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleCard>()} | {SdaidHtml.LinkTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleCard>("vehicle-card.html", "макет")} |
| Окно подбора модификаций | {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_ModificationSelectionModal>()} | {SdaidHtml.LinkTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_ModificationSelectionModal>("vehicle-card.html", "макет")} |
| Реестр модификаций ТС | {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleModificationRegistry>()} | — |
| Реестр марок ТС | {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleMarkRegistry>()} | — |

Ведение НСИ: заимствованные из АИС справочники доступны для поиска и просмотра, собственные — для
создания, редактирования и удаления. Организационная структура и характеристики ТС, загруженные
из АИС, в модуле не изменяются; субъект РФ организационного объекта выбирается на вкладке
«Сведения»; остальные характеристики, которых в АИС нет, ведутся в ЭНТС.
"""";

        public static string UseCases = $"""
## Сценарии использования

{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Epics.NtsFuelCalc.EPIC_NtsFuelCalc>()} —
{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Epics.NtsFuelCalc.UseCases.UC_NtsFuelCalc>()}.
""";

        public static string UserRoles = $"""
## Роли пользователей

| Роль | Что делает |
|---|---|
| Пользователь | Выбирает организационный объект, просматривает реестр и карточку ТС, вносит данные, которых нет в АИС, подбирает модификации, запускает расчёт и смотрит результаты |
| Администратор модуля | Запускает импорт данных из АИС ОИА ПЭО, ведёт собственные справочники: марки, модели, модификации, субъекты РФ и зимние надбавки |
""";

        public static string Boundaries = $""""
## Границы

Модуль ЭНТС живёт в одном Сервисе ОПЭС с ЭНЗС и МВЭР и делит с ними платформу: хост API,
организационную структуру, механизм загрузки из АИС ОИА ПЭО, журнал расчёта и правила
валидации исходных данных.

Собственное у ЭНТС — предметная область: транспортные средства, их характеристики и условия
эксплуатации, методика расчёта расхода топлива и её справочники.

Организационная структура и характеристики ТС, загруженные из АИС, в модуле не изменяются;
субъект РФ организационного объекта выбирается на вкладке «Сведения»; остальные характеристики,
которых в АИС нет, ведутся в ЭНТС.

### Открытые вопросы

Открытые вопросы модуля собраны в эпике: {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Epics.NtsFuelCalc.OQ_Vision>()}.
"""";
    }
}