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

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

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

using GatesKind = Rugrid.Sdaid.Epas.Ntr.Domain.Reference.GatesKind;

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

        public static string _refName = "Вид воротных проёмов";

        public string Name => "Вид воротных проёмов";

        public string Description => "Алиасы: Вид воротных проёмов. parents: [gates-model-diagram].";

        public string Version => "1.0";
        public string Status => "accepted";
        public string[] Comments => new string[0];
        public Type Entity => typeof(Gates);
    }

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

        /// <summary>ais_gates_id</summary>
        [DomainField(Alias = "ais_id")]
        public Guid AisId { get; set; }

        /// <summary>Модель ворот</summary>
        [Relation]
        [DomainField(Alias = "gate_model_id", RequiredOnCreate = true)]
        public GatesModel? GateModel { get; set; }

        /// <summary>Наименование</summary>
        [DomainField(
            Alias = "name",
            Calculated = "Да, вычисляется при чтении / на UI; не хранится. Формула: $\"{Вид ворот} {(Площадь одного проёма, м²)}\""
        )]
        public string? Name { get; set; }

        /// <summary>Вид ворот</summary>
        [Relation]
        [DomainField(Alias = "gate_kind_id", RequiredOnCreate = true, RequiredForCalc = "Да")]
        public GatesKind? GateKind { get; set; }

        /// <summary>Площадь одного проёма, м²</summary>
        [DomainField(Alias = "opening_area_m2", RequiredForCalc = "Да", Unit = "м²", Range = "вещественное > 0")]
        public decimal OpeningAreaM2 { get; set; }

        /// <summary>Кол-во проёмов на стороне A</summary>
        [DomainField(Alias = "openings_count_side_a", RequiredOnCreate = true, Range = "целое ≥ 0", Default = "0")]
        public int OpeningsCountSideA { get; set; }

        /// <summary>Кол-во проёмов на стороне B</summary>
        [DomainField(Alias = "openings_count_side_b", RequiredOnCreate = true, Range = "целое ≥ 0", Default = "0")]
        public int OpeningsCountSideB { get; set; }

        /// <summary>Кол-во проёмов на стороне C</summary>
        [DomainField(Alias = "openings_count_side_c", RequiredOnCreate = true, Range = "целое ≥ 0", Default = "0")]
        public int OpeningsCountSideC { get; set; }

        /// <summary>Кол-во проёмов на стороне D</summary>
        [DomainField(Alias = "openings_count_side_d", RequiredOnCreate = true, Range = "целое ≥ 0", Default = "0")]
        public int OpeningsCountSideD { get; set; }

        /// <summary>Кол-во проёмов на стороне E</summary>
        [DomainField(Alias = "openings_count_side_e", RequiredOnCreate = true, Range = "целое ≥ 0", Default = "0")]
        public int OpeningsCountSideE { get; set; }

        /// <summary>Кол-во проёмов на стороне F</summary>
        [DomainField(Alias = "openings_count_side_f", RequiredOnCreate = true, Range = "целое ≥ 0", Default = "0")]
        public int OpeningsCountSideF { get; set; }

        /// <summary>Кол-во проёмов на стороне G</summary>
        [DomainField(Alias = "openings_count_side_g", RequiredOnCreate = true, Range = "целое ≥ 0", Default = "0")]
        public int OpeningsCountSideG { get; set; }

        /// <summary>Кол-во проёмов на стороне H</summary>
        [DomainField(Alias = "openings_count_side_h", RequiredOnCreate = true, Range = "целое ≥ 0", Default = "0")]
        public int OpeningsCountSideH { get; set; }

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

        /// <summary>==Надо добавить для всех A..H==&lt;br&gt;Площадь проёмов на стороне A, м²</summary>
        [DomainField(Alias = "openings_area_side_am2", RequiredForCalc = "Да", Calculated = "Да", Unit = "м²", Range = "вещественное ≥ 0")]
        public decimal OpeningsAreaSideAm2 { get; set; }

        /// <summary>Площадь проёмов на стороне B, м²</summary>
        [DomainField(Alias = "openings_area_side_bm2", RequiredForCalc = "Да", Calculated = "Да", Unit = "м²", Range = "вещественное ≥ 0")]
        public decimal OpeningsAreaSideBm2 { get; set; }

        /// <summary>Площадь проёмов на стороне C, м²</summary>
        [DomainField(Alias = "openings_area_side_cm2", RequiredForCalc = "Да", Calculated = "Да", Unit = "м²", Range = "вещественное ≥ 0")]
        public decimal OpeningsAreaSideCm2 { get; set; }

        /// <summary>Площадь проёмов на стороне D, м²</summary>
        [DomainField(Alias = "openings_area_side_dm2", RequiredForCalc = "Да", Calculated = "Да", Unit = "м²", Range = "вещественное ≥ 0")]
        public decimal OpeningsAreaSideDm2 { get; set; }

        /// <summary>Площадь проёмов на стороне E, м²</summary>
        [DomainField(Alias = "openings_area_side_em2", RequiredForCalc = "Да", Calculated = "Да", Unit = "м²", Range = "вещественное ≥ 0")]
        public decimal OpeningsAreaSideEm2 { get; set; }

        /// <summary>Площадь проёмов на стороне F, м²</summary>
        [DomainField(Alias = "openings_area_side_fm2", RequiredForCalc = "Да", Calculated = "Да", Unit = "м²", Range = "вещественное ≥ 0")]
        public decimal OpeningsAreaSideFm2 { get; set; }

        /// <summary>Площадь проёмов на стороне G, м²</summary>
        [DomainField(Alias = "openings_area_side_gm2", RequiredForCalc = "Да", Calculated = "Да", Unit = "м²", Range = "вещественное ≥ 0")]
        public decimal OpeningsAreaSideGm2 { get; set; }

        /// <summary>Площадь проёмов на стороне H, м²</summary>
        [DomainField(Alias = "openings_area_side_hm2", RequiredForCalc = "Да", Calculated = "Да", Unit = "м²", Range = "вещественное ≥ 0")]
        public decimal OpeningsAreaSideHm2 { get; set; }

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

        /// <summary>==Надо добавить==&lt;br&gt;Сопротивление воздухопроницанию, м²·ч/кг</summary>
        [DomainField(
            Alias = "air_permeability_resistance_m2hour_per_kg",
            RequiredForCalc = "Да",
            Calculated = "Да",
            Unit = "м²·ч/кг",
            Range = "вещественное > 0"
        )]
        public decimal AirPermeabilityResistanceM2hourPerKg { get; set; }
    }

}