92 строк · в начало
using System;
using Rugrid.Sdaid.Notation.Documents;
using HeatingPeriodConditionsSrc = Rugrid.Sdaid.Epas.Ntr.Domain.Reference.SysReference.HeatingPeriodConditionsSrc;
namespace Rugrid.Sdaid.Epas.Ntr.Domain.ConsumptionModel
{
/// <summary>
/// Доменная сущность. Перенесено дословно из ntr-01/domain/consumption-model/heating-period-model.md.
/// </summary>
public class DOC_HeatingPeriodModel : IDomainEntityDocument, IHasStructuralLinks, IFolder<NtrDomainFolder>
{
public SdaidLink[] Links => new[]
{
Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Domain.ConsumptionModel.DOC_ConsumptionModel>(),
Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Domain.Reference.SysReference.DOC_HeatingPeriodConditionsSrc>(),
};
public static string _refName = "Модель отопительного периода";
public string Name => "Модель отопительного периода";
public string Description => "Алиасы: Модель отопительного периода. parents: [consumption-model-diagram].";
public string Version => "1.1";
public string Status => "changed";
public string[] Comments => new[]
{
"2026-08-31, фаза 5 миграции (сверка спеки с реализацией): в таблицу свойств добавлены атрибуты, которые есть в БД, но не были описаны в спеке.",
"2026-09-03, CR 2026-09-03 «Обработка источников климатических данных»: добавлен атрибут «Широта (данные пользователя)».",
};
public Type Entity => typeof(HeatingPeriodModel);
}
/// <summary>
/// Доменная сущность «Модель отопительного периода».
/// Класс — источник структуры: таблица свойств и диаграмма связей на странице документа
/// строятся генератором по нему. Прозу и разбор ведёт документ DOC_HeatingPeriodModel.
/// </summary>
[DomainEntity]
public class HeatingPeriodModel
{
/// <summary>Идентификатор записи</summary>
[DomainField(Alias = "id", RequiredOnCreate = true, Range = "UUID", Immutable = true)]
public Guid Id { get; set; }
/// <summary>Модель потребления</summary>
[Relation]
[DomainField(Alias = "consumption_model_id", RequiredOnCreate = true)]
public ConsumptionModel? ConsumptionModel { get; set; }
/// <summary>Источник данных</summary>
[Relation]
[DomainField(Alias = "heating_period_conditions_src_id", RequiredOnCreate = true, RequiredForCalc = "Да", Default = "\"Справочные данные\"")]
public HeatingPeriodConditionsSrc? HeatingPeriodConditionsSrc { get; set; }
/// <summary>Продолжительность отопительного периода (данные пользователя), сут.</summary>
[DomainField(Alias = "cust_heating_period_duration_days", RequiredForCalc = "Да", Calculated = "Нет", Unit = "сут.", Range = "[0, 366]")]
public int CustHeatingPeriodDurationDays { get; set; }
/// <summary>Средняя температура наружного воздуха (данные пользователя), °C</summary>
[DomainField(Alias = "cust_ext_air_temp_c", RequiredForCalc = "Да", Calculated = "Нет", Unit = "°C", Range = "[-50; 50]")]
public decimal CustExtAirTempC { get; set; }
/// <summary>Широта (данные пользователя), °</summary>
[DomainField(Alias = "cust_latitude", RequiredForCalc = "Да, если Источник климатических данных = \"Данные пользователя\"", Calculated = "Нет", Unit = "°", Range = "Целое [-90; 90]")]
public int? CustLatitude { get; set; }
/// <summary>Средняя скорость ветра (данные пользователя), м/с</summary>
[DomainField(Alias = "cust_avg_wind_speed_m_per_second", RequiredForCalc = "Да", Calculated = "Нет", Unit = "м/с", Range = "[0; 50]")]
public decimal CustAvgWindSpeedMPerSecond { get; set; }
/// <summary>Средняя скорость ветра (данные АИС), м/с</summary>
[DomainField(Alias = "avg_wind_speed_m_per_second", RequiredForCalc = "Да", Calculated = "Нет", Unit = "м/с", Range = "[0; 50]")]
public decimal AvgWindSpeedMPerSecond { get; set; }
/// <summary>Средняя температура наружного воздуха (данные АИС), °C</summary>
[DomainField(Alias = "ext_air_temp_c", RequiredForCalc = "Да", Calculated = "Нет", Unit = "°C", Range = "[-50; 50]")]
public decimal ExtAirTempC { get; set; }
/// <summary>Продолжительность отопительного периода (данные АИС), сут.</summary>
[DomainField(Alias = "heating_period_duration_days", RequiredForCalc = "Да", Calculated = "Нет", Unit = "сут.", Range = "[0, 366]")]
public int HeatingPeriodDurationDays { get; set; }
/// <summary>Градусо-сутки отопительного периода, ℃·сут.</summary>
[DomainField(Alias = "degree_days", RequiredForCalc = "Да", Calculated = "Да", Unit = "℃·сут.", Range = "[0; 10000]")]
public decimal DegreeDays { get; set; }
}
}