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

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

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

using BuildingShape = Rugrid.Sdaid.Epas.Ntr.Domain.Reference.BuildingShape;
using CardinalDirection = Rugrid.Sdaid.Epas.Ntr.Domain.Reference.SysReference.CardinalDirection;

namespace Rugrid.Sdaid.Epas.Ntr.Domain.ConsumptionModel
{
    /// <summary>
    /// Доменная сущность. Перенесено дословно из ntr-01/domain/consumption-model/shape-and-dimensions.md.
    /// </summary>
    public class DOC_ShapeAndDimensions : 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.DOC_BuildingShape>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Domain.Reference.SysReference.DOC_CardinalDirection>(),
        };

        public static string _refName = "Форма и габариты";

        public string Name => "Форма и габариты";

        public string Description => "Алиасы: Форма и габариты. parents: [consumption-model-diagram].";

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

    /// <summary>
    /// Доменная сущность «Форма и габариты».
    /// Класс — источник структуры: таблица свойств и диаграмма связей на странице документа
    /// строятся генератором по нему. Прозу и разбор ведёт документ DOC_ShapeAndDimensions.
    /// </summary>
    [DomainEntity]
    public class ShapeAndDimensions
    {
        /// <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 = "Внешний ключ на корневую модель потребления; подмодуль входит в состав агрегата (1:1).",
            Immutable = true
        )]
        public ConsumptionModel? ConsumptionModel { get; set; }

        /// <summary>Форма здания</summary>
        [Relation]
        [DomainField(
            Alias = "building_shape_id",
            RequiredForCalc = "Да",
            Description = "Классификация геометрической формы; связь на диаграмме «имеет_форму» (* : 1)."
        )]
        public BuildingShape? BuildingShape { get; set; }

        /// <summary>Объём общий, м³</summary>
        [DomainField(Alias = "total_volume", Unit = "м³", Range = "Вещественное (15,4) [0; 10000000]", Description = "Полный объём здания.")]
        public decimal TotalVolume { get; set; }

        /// <summary>Объём отапливаемый, м³</summary>
        [DomainField(
            Alias = "heated_volume",
            RequiredForCalc = "Да",
            Unit = "м³",
            Range = "Вещественное (15,4) (0; 10000000]",
            Description = "Объём отапливаемой части."
        )]
        public decimal HeatedVolume { get; set; }

        /// <summary>Площадь общая, м²</summary>
        [DomainField(Alias = "total_area", Unit = "м²", Range = "Вещественное (15,4) [0; 10000000]", Description = "Общая площадь")]
        public decimal TotalArea { get; set; }

        /// <summary>Площадь отапливаемая, м²</summary>
        [DomainField(
            Alias = "heated_area",
            RequiredForCalc = "Да",
            Unit = "м²",
            Range = "Вещественное (15,4) (0; 10000000]",
            Description = "Отапливаемая площадь."
        )]
        public decimal HeatedArea { get; set; }

        /// <summary>Высота здания, м</summary>
        [DomainField(
            Alias = "building_height",
            RequiredForCalc = "Да",
            Unit = "м",
            Range = "Вещественное (15,4) (0; 100]",
            Description = "Высота здания для геометрии."
        )]
        public decimal BuildingHeight { get; set; }

        /// <summary>Этажность надземная, шт.</summary>
        [DomainField(Alias = "floor_count", RequiredForCalc = "Да", Range = "целое > 0", Description = "Число этажей.")]
        public int FloorCount { get; set; }

        /// <summary>Ориентация стороны А</summary>
        [Relation]
        [DomainField(
            Alias = "cardinal_direction_id",
            RequiredForCalc = "Да",
            Description = "Ориентация условной стороны «А» относительно сторон света; связь «ориентация_стороны_А» (* : 1)."
        )]
        public CardinalDirection? CardinalDirection { get; set; }

        /// <summary>Размер по габариту A, м</summary>
        [DomainField(
            Alias = "dimension_a",
            RequiredForCalc = "Да, если `Форма здания. Код в списке (rect, g, gr, p)`",
            Unit = "м",
            Range = "Вещественное (15,4) (0; 1000]",
            Description = "Линейный габарит A по схеме выбранной формы здания."
        )]
        public decimal DimensionA { get; set; }

        /// <summary>Размер по габариту B, м</summary>
        [DomainField(
            Alias = "dimension_b",
            RequiredForCalc = "Да, если `Форма здания. Код ов списке (rect, g, gr, p)`",
            Unit = "м",
            Range = "Вещественное (15,4) (0; 1000]",
            Description = "Линейный габарит B по схеме выбранной формы здания."
        )]
        public decimal DimensionB { get; set; }

        /// <summary>Размер по габариту C, м</summary>
        [DomainField(
            Alias = "dimension_c",
            RequiredForCalc = "Да, если `Форма здания. Код в списке (g, gr, p)`",
            Unit = "м",
            Range = "Вещественное (15,4) (0; 1000]",
            Description = "Линейный габарит C по схеме выбранной формы здания."
        )]
        public decimal DimensionC { get; set; }

        /// <summary>Размер по габариту D, м</summary>
        [DomainField(
            Alias = "dimension_d",
            RequiredForCalc = "Да, если `Форма здания. Код в списке (g, gr, p)`",
            Unit = "м",
            Range = "Вещественное (15,4) (0; 1000]",
            Description = "Линейный габарит D по схеме выбранной формы здания."
        )]
        public decimal DimensionD { get; set; }

        /// <summary>Размер по габариту E, м</summary>
        [DomainField(
            Alias = "dimension_e",
            RequiredForCalc = "Да, если `Форма здания. Код в списке (g, gr, p)`",
            Unit = "м",
            Range = "Вещественное (15,4) (0; 1000]",
            Description = "Линейный габарит E по схеме выбранной формы здания."
        )]
        public decimal DimensionE { get; set; }

        /// <summary>Размер по габариту F, м</summary>
        [DomainField(
            Alias = "dimension_f",
            RequiredForCalc = "Да, если `Форма здания. Код в списке (g, gr, p)`",
            Unit = "м",
            Range = "Вещественное (15,4) (0; 1000]",
            Description = "Линейный габарит F по схеме выбранной формы здания."
        )]
        public decimal DimensionF { get; set; }

        /// <summary>Размер по габариту G, м</summary>
        [DomainField(
            Alias = "dimension_g",
            RequiredForCalc = "Да, если `Форма здания. Код в списке (p)`",
            Unit = "м",
            Range = "Вещественное (15,4) (0; 1000]",
            Description = "Линейный габарит G по схеме выбранной формы здания."
        )]
        public decimal DimensionG { get; set; }

        /// <summary>Размер по габариту H, м</summary>
        [DomainField(
            Alias = "dimension_h",
            RequiredForCalc = "Да, если `Форма здания. Код в списке (p)`",
            Unit = "м",
            Range = "Вещественное (15,4) (0; 1000]",
            Description = "Линейный габарит H по схеме выбранной формы здания."
        )]
        public decimal DimensionH { get; set; }
    }

}