⟨/⟩ Ntr/60_Epics/ActualConsumption/EPIC_ActualConsumption.cs

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

using Rugrid.Sdaid.Notation.Documents;
using Rugrid.Sdaid.Notation.Glossary;
using Rugrid.Sdaid.Epas.Ntr.Glossary.Terms;

namespace Rugrid.Sdaid.Epas.Ntr.Epics.ActualConsumption
{
    /// <summary>
    /// Учёт фактического потребления ТЭР зданиями: структура хранения данных учёта, загрузка из
    /// АИС ОИА ПЭО, просмотр на UI. Эпик второго этапа, реализует требование ТЗ 5.7.
    /// </summary>
    public class EPIC_ActualConsumption : IEpicDocument, IHasStructuralLinks
    {
        public SdaidLink[] Links => new[]
        {
            Rel.Realizes<Rugrid.Sdaid.Epas.Ntr.Requirements.FR_5_7_ActualConsumption>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Infrastructure.AisOiaPeo.DOC_AisDataImport>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Domain.ActualConsumptionModel.BC_ActualConsumptionModel>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Domain.BuildingModel.DOC_Building>(),
        };

        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 Goal = $"""
            ## Цель

            Реализовать в Сервисе учёт фактического потребления ТЭР: данные о фактическом потреблении
            загружаются из {GlossaryAnchors.RefTo<AisOiaPeo>(AisOiaPeo.Name)} и предоставляются для
            просмотра пользователю в интерфейсе.

            Эпик реализует {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Ntr.Requirements.FR_5_7_ActualConsumption>()}.
            """;

        public static string Scope = $"""
            ## Состав работ

            ### Спецификация

            | Задача | Предмет | Зависит от |
            |---|---|---|
            | S-1 | {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Ntr.Epics.ActualConsumption.UseCases.UC_ActualConsumption>()} — сквозной сценарий на бизнес-уровне. Выполнено | — |
            | S-2 | {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Ntr.Domain.ActualConsumptionModel.DOC_EeConsumption>()}, {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Ntr.Domain.ActualConsumptionModel.DOC_TeConsumption>()}, {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Ntr.Domain.Reference.DOC_Period>()}. Выполнено | — |
            | S-3 | {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Ntr.Infrastructure.AisOiaPeo.DOC_ActualConsumptionImport>()}. Выполнено | S-2 |
            | S-4 | {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Ntr.Ui.Componetns.DOC_ActualConsumptionTab>()} и макет. Выполнено, макет согласован | S-2 |
            | S-5 | {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Ntr.Api.Endpoints.ActualConsumption.DOC_GetActualConsumptionEndpoint>()}, {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Ntr.Backend.Handlers.ActualConsumption.DOC_GetActualConsumptionHandler>()}. Выполнено | S-4 |
            | S-6 | Дополнение {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Ntr.Ui.Componetns.DOC_ActualConsumptionTab>()} ссылками на endpoint. Выполнено | S-5 |

            ### Реализация backend

            | Задача | Предмет | Зависит от |
            |---|---|---|
            | B-1 | Доменные сущности потребления ЭЭ и ТЭ, справочник учётных периодов | S-2 |
            | B-2 | Конфигурации EF, миграция, индексы | B-1 |
            | B-3 | Модели чтения таблиц данных учёта в `AisReadDbContext` (готова только `RefPeriod`), загрузка справочника учётных периодов и данных учёта в составе импорта | S-3, B-2 |
            | B-4 | Модель чтения Сервиса, запрос просмотра, право доступа на чтение | S-5, B-2 |
            | B-5 | Первичная загрузка учётных периодов за прошлые годы | B-3 |

            ### Реализация UI

            | Задача | Предмет | Зависит от |
            |---|---|---|
            | U-1 | Вкладки «Расход ЭЭ» и «Расход ТЭ» на организационном объекте и на здании | S-6, B-4 |
            """;

        public static string OutOfScope = $"""
            ## Вне состава

            **Отчёты.** Вывод фактического потребления в отчёты Сервиса в этом эпике не рассматривается.

            **Точки учёта как сущность Сервиса.** Точки учёта существуют в
            {GlossaryAnchors.RefTo<AisOiaPeo>(AisOiaPeo.Name)} и сводятся к зданию при загрузке; в
            Сервисе они не хранятся и на экране не показываются.

            **Ручной ввод и корректировка факта.** Единственный источник данных учёта —
            {GlossaryAnchors.RefTo<AisOiaPeo>(AisOiaPeo.Name)}; в Сервисе факт только читается.

            **Расчёты на основе факта.** Фактические данные не участвуют в расчёте модели потребления
            и не влияют на класс энергоэффективности.

            **Иные виды ТЭР.** Вода, газ и топливо в модуль не входят.
            """;

        public static string Actors = """
            ## Акторы

            | Роль | Что делает |
            |---|---|
            | Администратор Сервиса | Запускает импорт данных из АИС ОИА ПЭО, в составе которого загружаются данные учёта |
            | `user` (Пользователь) | Просматривает данные учёта на вкладках «Расход ЭЭ» и «Расход ТЭ» |

            Роль администратора Сервиса среди ролей Сервиса не описана: команда импорта существует, но
            ни за одной из трёх ролей не закреплена.
            """;

        public static string Acceptance = """
            ## Acceptance criteria

            | AC | Критерий |
            |---|---|
            | AC-L1 | На организационном объекте вкладки «Расход ЭЭ» и «Расход ТЭ» показывают потребление соответствующего ресурса за выбранный период по его зданиям, а при включённом переключателе «с потомками» — и по зданиям подчинённых объектов |
            | AC-L2 | На здании те же вкладки показывают потребление ресурса этим зданием |
            | AC-L3 | При открытии вкладки выбран период — календарный год, предшествующий текущему |
            | AC-L4 | По каждому зданию выведен итог за год |
            | AC-L5 | Значения показаны в единицах источника: ЭЭ в тыс. кВт·ч, ТЭ в Гкал |
            | AC-L6 | Здания, по которым за выбранный период нет данных учёта, в перечне отсутствуют |
            | AC-L7 | Вкладка здания без данных учёта за выбранный период показывает пустой перечень, а не ошибку |
            | AC-X1 | Повторный импорт тех же месяцев не создаёт вторых записей по тому же зданию, месяцу и виду ТЭР |
            """;
    }
}