⟨/⟩ Ntr/50_Domain/ConsumptionModel/GatesModel.cs

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

using System;
using Rugrid.Sdaid.Notation.Documents;

namespace Rugrid.Sdaid.Epas.Ntr.Domain.ConsumptionModel
{
    /// <summary>
    /// Доменная сущность. Перенесено дословно из ntr-01/domain/consumption-model/gates-model.md.
    /// </summary>
    public class DOC_GatesModel : IDomainEntityDocument, IHasStructuralLinks, IFolder<NtrDomainFolder>
    {
        public SdaidLink[] Links => new[]
        {
            Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Domain.ConsumptionModel.DOC_ConsumptionModel>(),
        };

        public static string _refName = "Модель ворот";

        public string Name => "Модель ворот";

        public string Description => "Алиасы: Модель ворот. parents: [gates-model-diagram].";

        public string Version => "1.0";
        public string Status => "changed";

        public string[] Comments => new[]
        {
            "2026-08-31, фаза 5 миграции (сверка спеки с реализацией): в таблицу свойств добавлены атрибуты, которые есть в БД, но не были описаны в спеке.",
        };

                public Type Entity => typeof(GatesModel);

        
    }

    /// <summary>
    /// Доменная сущность «Модель ворот».
    /// Класс — источник структуры: таблица свойств и диаграмма связей на странице документа
    /// строятся генератором по нему. Прозу и разбор ведёт документ DOC_GatesModel.
    /// </summary>
    [DomainEntity]
    public class GatesModel
    {
        /// <summary>Идентификатор записи</summary>
        [DomainField(Alias = "id", RequiredOnCreate = true, Range = "UUID", Description = "Идентификатор сущности «Модель ворот».", Immutable = true)]
        public Guid Id { get; set; }

        /// <summary>Модель потребления</summary>
        [Relation]
        [DomainField(
            Alias = "consumption_model_id",
            RequiredOnCreate = true,
            Description = "Внешний ключ на корневую модель потребления; подмодуль входит в агрегат."
        )]
        public ConsumptionModel? ConsumptionModel { get; set; }

        /// <summary>Энергия теплопотерь, кВт·ч</summary>
        [DomainField(
            Alias = "heat_loss_energy_k_kwt_h",
            RequiredForCalc = "Да",
            Calculated = "Да",
            Unit = "кВт·ч",
            Range = "вещественное > 0, если Площадь ворот > 0"
        )]
        public decimal HeatLossEnergyKKwtH { get; set; }

        /// <summary>Мощность теплопотерь, кВт</summary>
        [DomainField(Alias = "heat_loss_power_kwt", Calculated = "Да", Unit = "кВт", Range = "вещественное ≥ 0")]
        public decimal HeatLossPowerKwt { get; set; }

        /// <summary>Приведённое сопротивление теплопередаче ворот, м²·°C/Вт</summary>
        [DomainField(
            Alias = "thermal_resistance_m2c_per_wt",
            RequiredForCalc = "Да",
            Calculated = "Да",
            Unit = "м²·°C/Вт",
            Range = "вещественное > 0, если Площадь ворот >0",
            Description = "Приведённое сопротивление теплопередаче ворот модели."
        )]
        public decimal ThermalResistanceM2cPerWt { get; set; }

        /// <summary>Площадь ворот, м²</summary>
        [DomainField(
            Alias = "gates_area_m2",
            RequiredForCalc = "Да",
            Calculated = "Да",
            Unit = "м²",
            Range = "вещественное ≥ 0",
            Description = "Суммарная площадь ворот по всем видам ворот."
        )]
        public decimal GatesAreaM2 { get; set; }

        /// <summary>Количество инфильтрующегося воздуха, кг/ч</summary>
        [DomainField(
            Alias = "air_infiltrating_flow_kg_per_hour",
            RequiredForCalc = "Да",
            Calculated = "Да",
            Unit = "кг/ч",
            Range = "вещественное > 0, если Площадь ворот >0",
            Description = "Суммарное количество инфильтрующегося воздуха через ворота."
        )]
        public decimal AirInfiltratingFlowKgPerHour { get; set; }
    }

}