Задание на сбор энергопрофиля (сущность)
Алиасы: Задание на сбор энергопрофиля (сущность). parents: [energy-profile-collection-task-diagram].
Поведение:
- Дата начала / окончания сбора - информационные поля. Пользователь сам устанавливает / снимает флаг "Сбор завершён". Флаг должен определять "обработка_завершена" связанных Энергопрофилей.
- "Создать энергопрофили по заданию" - вызов операции создания энергопрофиля для каждого здания организационного объекта за отчётный период.
Операция "Создать энергопрофили по заданию":
- Область зданий. Выбираются все Здания, у которых
nav_idвходит в поддерево Организационного объекта задания: сам узелtask.org_object_idи все нижестоящие по иерархии (Компания → Исполнительный аппарат / МЭС → ПМЭС → Подстанция). Здания, привязанные к оргобъектам вне этого поддерева, не участвуют. - Период эксплуатации здания (
start_date/finish_date) не учитывается на этапе создания профилей. Возможное ужесточение (фильтрация по пересечению отчётного периода задания и периода эксплуатации здания) — отложено. - Уникальность. На пару
(task_id, building_id)создаётся один Энергопрофиль. Если для такой пары профиль уже существует — он не пересоздаётся и его поля не меняются. Ничего не удаляется. - Идемпотентность. Повторный запуск операции для того же задания безопасен: уже существующие профили остаются без изменений, новые создаются только для зданий, у которых профиля в рамках этого задания ещё не было.
- Предусловие по статусу задания. Если
task_status.code = "completed"(Сбор завершён), запуск операции запрещён — возвращается ошибка. - Начальные значения создаваемого Энергопрофиля:
energy_profile_collection_task_id = task.id;building_id = b.id;name— не сохраняется: формируется при чтении / на UI по формуле из домена (см. Энергопрофиль). При создании профиля не записывается.- все ссылки на модели потребления (
normative_calculation_model_id,standard_calculation_model_id,technological_calculation_model_id,custom_calculation_model_id) —null(заполняются отдельной операцией); status_id— статус Статус энергопрофиля сcode = "in_progress"(Формируется).
Связи
classDiagram
direction LR
class EnergyProfileCollectionTask {
+Guid id
+OrgObject nav_id
+String name
+Int32 report_period_start
+Int32 report_period_finish
+DateTime collect_period_start
+DateTime collect_period_finish
+TaskStatus status_id
}
class OrgObject
class TaskStatus
EnergyProfileCollectionTask "1" --> "1" OrgObject : nav_id
EnergyProfileCollectionTask "1" --> "1" TaskStatus : status_id
Структура
| Наименование | Атрибут | Тип | Обязательно для создания | Вычисляемый, методика | Значение по умолчанию | Неизменяемость | Описание |
|---|---|---|---|---|---|---|---|
| Идентификатор записи | id | Guid | Да | Да | |||
| Организационный объект | nav_id | OrgObject | Да | Да | |||
| Наименование | name | String | Да | Да, вычисляется при чтении / на UI; не хранится. Маска: $"{{FK → Организационный объект. Наименование} ({Год начала отчётного периода}-{Год окончания отчётного периода})" Пример: ПАО «Россети» (2026-2026) | |||
| Год начала отчётного периода | report_period_start | Int32 | Да | Текущий год | |||
| Год окончания отчётного периода | report_period_finish | Int32 | Да | Текущий год | |||
| Дата начала сбора данных | collect_period_start | DateTime | Да | Текущая дата | |||
| Дата окончания сбора данных | collect_period_finish | DateTime | Да | Текущая дата + месяц | |||
| Статус | status_id | TaskStatus | Да | false | устанавливается пользователем |
Исходник
public class EnergyProfileCollectionTask
{
/// <summary>Идентификатор записи</summary>
[DomainField(Alias = "id", RequiredOnCreate = true, Immutable = true)]
public Guid Id { get; set; }
/// <summary>Организационный объект</summary>
[Relation]
[DomainField(Alias = "nav_id", RequiredOnCreate = true, Immutable = true)]
public OrgObject? Nav { get; set; }
/// <summary>Наименование</summary>
[DomainField(
Alias = "name",
RequiredOnCreate = true,
Calculated = "Да, вычисляется при чтении / на UI; не хранится. Маска: $\"{{FK → Организационный объект. Наименование} ({Год начала отчётного периода}-{Год окончания отчётного периода})\" Пример: ПАО «Россети» (2026-2026)"
)]
public string? Name { get; set; }
/// <summary>Год начала отчётного периода</summary>
[DomainField(Alias = "report_period_start", RequiredOnCreate = true, Default = "Текущий год")]
public int ReportPeriodStart { get; set; }
/// <summary>Год окончания отчётного периода</summary>
[DomainField(Alias = "report_period_finish", RequiredOnCreate = true, Default = "Текущий год")]
public int ReportPeriodFinish { get; set; }
/// <summary>Дата начала сбора данных</summary>
[DomainField(Alias = "collect_period_start", RequiredOnCreate = true, Default = "Текущая дата")]
public DateTime CollectPeriodStart { get; set; }
/// <summary>Дата окончания сбора данных</summary>
[DomainField(Alias = "collect_period_finish", RequiredOnCreate = true, Default = "Текущая дата + месяц")]
public DateTime CollectPeriodFinish { get; set; }
/// <summary>Статус</summary>
[Relation]
[DomainField(Alias = "status_id", RequiredOnCreate = true, Default = "false", Description = "устанавливается пользователем")]
public TaskStatus? Status { get; set; }
}
}Структурные связи
Использует
- Доменная сущность Здание (сущность)
- Доменная сущность Организационный объект (сущность)
- Доменная сущность Статус задания
- Доменная сущность Статус энергопрофиля
- Доменная сущность Энергопрофиль
Используется
- Доменная сущность Энергопрофиль
- Компонент Вкладка «Реестр заданий на сбор энергопрофилей»
- Компонент Вкладка «Реестр энергопрофилей»
- Прикладной сервис Эталоны и нормативы потребления ТЭР зданиями
- Экран Карточка "Энергопрофиль здания
- BC-модуль Домен
- Vision Сервис «Эталоны и нормативы расхода ТЭР зданиями и сооружениями» (ЭНЗС)
Связанные артефакты
Документы
- Доменная сущность Здание (сущность)
- Доменная сущность Организационный объект (сущность)
- Доменная сущность Статус энергопрофиля
- Доменная сущность Энергопрофиль