142 строк · в начало
using System;
using Rugrid.Sdaid.Notation.Documents;
using BasementAtticHeatingTypes = Rugrid.Sdaid.Epas.Ntr.Domain.Reference.BasementAtticHeatingTypes;
namespace Rugrid.Sdaid.Epas.Ntr.Domain.ConsumptionModel
{
/// <summary>
/// Доменная сущность. Перенесено дословно из ntr-01/domain/consumption-model/ground-contact.md.
/// </summary>
public class DOC_GroundContact : 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.ConsumptionModel.DOC_ShapeAndDimensions>(),
Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Domain.Reference.DOC_BasementAtticHeatingTypes>(),
};
public static string _refName = "Зона контакта с грунтом";
public string Name => "Зона контакта с грунтом";
public string Description => "Алиасы: Зона контакта с грунтом, Зона контакта с грунтом (сущность). parents: [consumption-model-diagram].";
public string Version => "1.0";
public string Status => "changed";
public string[] Comments => new[]
{
"2026-08-31, фаза 5 миграции (сверка спеки с реализацией): в таблицу свойств добавлены атрибуты, которые есть в БД, но не были описаны в спеке.",
};
public Type Entity => typeof(GroundContact);
}
/// <summary>
/// Доменная сущность «Зона контакта с грунтом».
/// Класс — источник структуры: таблица свойств и диаграмма связей на странице документа
/// строятся генератором по нему. Прозу и разбор ведёт документ DOC_GroundContact.
/// </summary>
[DomainEntity]
public class GroundContact
{
/// <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, Immutable = true)]
public ConsumptionModel? ConsumptionModel { get; set; }
/// <summary>Наличие подвала</summary>
[DomainField(Alias = "is_basement", RequiredOnCreate = true, RequiredForCalc = "Да", Default = "false")]
public bool IsBasement { get; set; }
/// <summary>Вид отопления подвала</summary>
[Relation]
[DomainField(Alias = "basement_heating_type_id", RequiredForCalc = "Да, если Наличие подвала=Да")]
public BasementAtticHeatingTypes? BasementHeatingType { get; set; }
/// <summary>Высота подвала</summary>
[DomainField(Alias = "basement_height_m", RequiredForCalc = "Да, если Наличие подвала=Да", Range = "вещественное > 0")]
public decimal BasementHeightM { get; set; }
/// <summary>Уровень пола подвала</summary>
[DomainField(Alias = "basement_floor_level_m", RequiredForCalc = "Да, если Наличие подвала=Да")]
public decimal BasementFloorLevelM { get; set; }
/// <summary>Площадь контакта при произвольной форме здания, м²</summary>
[DomainField(
Alias = "custom_ground_contact_area_m2",
RequiredForCalc = "Да, если Форма и габариты (сущность) Форма здания=Другая",
Unit = "м²",
Range = "вещественное ≥ 0"
)]
public decimal CustomGroundContactAreaM2 { get; set; }
/// <summary>Энергия теплопотерь, кВт·ч</summary>
[DomainField(Alias = "heat_loss_energy_k_kwt_h", Calculated = "Да", Unit = "кВт·ч", Range = "вещественное > 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"
)]
public decimal ThermalResistanceM2cPerWt { get; set; }
/// <summary>Площадь контакта с грунтом, м²</summary>
[DomainField(Alias = "ground_contact_area_m2", RequiredForCalc = "Да", Calculated = "Да", Unit = "м²", Range = "вещественное > 0")]
public decimal GroundContactAreaM2 { get; set; }
/// <summary>Площадь стен подвала, м²</summary>
[DomainField(
Alias = "basement_wall_area_m2",
RequiredForCalc = "Да, если Наличие подвала=Да",
Calculated = "Да",
Unit = "м²",
Range = "вещественное > 0"
)]
public decimal BasementWallAreaM2 { get; set; }
/// <summary>Площадь пола, м²</summary>
[DomainField(Alias = "ground_floor_area_m2", RequiredForCalc = "Да", Calculated = "Да", Unit = "м²", Range = "вещественное > 0")]
public decimal GroundFloorAreaM2 { get; set; }
/// <summary>Площадь пола, м²</summary>
[DomainField(
Alias = "cover_area_m2",
Calculated = "Да",
Unit = "м²",
Description = "Колонка есть в БД, значение не заполняется: сеттер в домене не вызывается"
)]
public decimal CoverAreaM2 { get; set; }
/// <summary>Площадь зоны I</summary>
[DomainField(Alias = "zone_i_area_m2", RequiredForCalc = "Да", Calculated = "Да", Unit = "м²", Range = "вещественное > 0")]
public decimal ZoneIAreaM2 { get; set; }
/// <summary>Площадь зоны II</summary>
[DomainField(Alias = "zone_ii_area_m2", RequiredForCalc = "Да, если ...", Calculated = "Да", Unit = "м²", Range = "вещественное ≥ 0")]
public decimal ZoneIiAreaM2 { get; set; }
/// <summary>Площадь зоны III</summary>
[DomainField(Alias = "zone_iii_area_m2", RequiredForCalc = "Да, если ...", Calculated = "Да", Unit = "м²", Range = "вещественное ≥ 0")]
public decimal ZoneIiiAreaM2 { get; set; }
/// <summary>Площадь зоны IV</summary>
[DomainField(Alias = "zone_iv_area_m2", RequiredForCalc = "Да, если ...", Calculated = "Да", Unit = "м²", Range = "вещественное ≥ 0")]
public decimal ZoneIvAreaM2 { get; set; }
}
}