163 строк · в начало
using System;
using Rugrid.Sdaid.Notation.Documents;
using BasementAtticHeatingTypes = Rugrid.Sdaid.Epas.Ntr.Domain.Reference.BasementAtticHeatingTypes;
using InsulationMaterial = Rugrid.Sdaid.Epas.Ntr.Domain.Reference.InsulationMaterial;
using Material = Rugrid.Sdaid.Epas.Ntr.Domain.Reference.Material;
using RoofType = Rugrid.Sdaid.Epas.Ntr.Domain.Reference.RoofType;
namespace Rugrid.Sdaid.Epas.Ntr.Domain.ConsumptionModel
{
/// <summary>
/// Доменная сущность. Перенесено дословно из ntr-01/domain/consumption-model/roof-model.md.
/// </summary>
public class DOC_RoofModel : 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_BasementAtticHeatingTypes>(),
Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Domain.Reference.DOC_BuildingShape>(),
Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Domain.Reference.DOC_InsulationMaterial>(),
Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Domain.Reference.DOC_Material>(),
Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Domain.Reference.DOC_RoofType>(),
};
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, CR «Расчёт площади ВОК для четырёхскатных крыш»: добавлен атрибут «Длина конька, м» — исходный параметр расчёта площади покрытия вальмовой крыши.",
};
public Type Entity => typeof(RoofModel);
}
/// <summary>
/// Доменная сущность «ВОК».
/// Класс — источник структуры: таблица свойств и диаграмма связей на странице документа
/// строятся генератором по нему. Прозу и разбор ведёт документ DOC_RoofModel.
/// </summary>
[DomainEntity]
public class RoofModel
{
/// <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>
[Relation]
[DomainField(Alias = "roof_type_id", RequiredForCalc = "Да")]
public RoofType? RoofType { get; set; }
/// <summary>Площадь ВОК при произвольной форме здания, м²</summary>
[DomainField(
Alias = "custom_upper_enclosure_area",
RequiredForCalc = "Да, при произвольной форме здания (Форма здания. Код = \"other\")",
Unit = "м²",
Range = "вещественное > 0"
)]
public decimal CustomUpperEnclosureArea { get; set; }
/// <summary>Наличие чердачного помещения</summary>
[DomainField(Alias = "has_attic", RequiredOnCreate = true, RequiredForCalc = "Да", Range = "{false; true}", Default = "false")]
public bool HasAttic { get; set; }
/// <summary>Тип отопления чердачного помещения</summary>
[Relation]
[DomainField(Alias = "attic_heating_type_id")]
public BasementAtticHeatingTypes? AtticHeatingType { get; set; }
/// <summary>Уровень верхнего перекрытия, м</summary>
[DomainField(Alias = "upper_floor_level_m", RequiredForCalc = "Да", Unit = "м", Range = "вещественное > 0")]
public decimal UpperFloorLevelM { get; set; }
/// <summary>Длина конька, м</summary>
[DomainField(
Alias = "ridge_length_m",
RequiredForCalc = "Да, если Тип крыши.Код = \"hipped\"",
Unit = "м",
Range = "вещественное, 0 < L_конька < Размер по габариту A"
)]
public decimal RidgeLengthM { get; set; }
/// <summary>Верхнее перекрытие: материал несущего слоя</summary>
[Relation]
[DomainField(Alias = "floor_slab_bearing_material_id", RequiredForCalc = "Да")]
public Material? FloorSlabBearingMaterial { get; set; }
/// <summary>Верхнее перекрытие: толщина несущего слоя, мм</summary>
[DomainField(Alias = "floor_slab_bearing_thickness_mm", RequiredForCalc = "Да", Unit = "мм", Range = "вещественное > 0")]
public decimal FloorSlabBearingThicknessMm { get; set; }
/// <summary>Верхнее перекрытие: материал утеплителя</summary>
[Relation]
[DomainField(Alias = "floor_slab_insulation_material_id")]
public InsulationMaterial? FloorSlabInsulationMaterial { get; set; }
/// <summary>Верхнее перекрытие: толщина утеплителя, мм</summary>
[DomainField(
Alias = "floor_slab_insulation_thickness_mm",
RequiredForCalc = "Да, если указан материал утеплителя перекрытия И Материал утеплителя.Наименование != \"Нет\"",
Unit = "мм",
Range = "вещественное > 0"
)]
public decimal FloorSlabInsulationThicknessMm { get; set; }
/// <summary>Перекрытие крыши: материал утеплителя</summary>
[Relation]
[DomainField(Alias = "roof_surface_insulation_material_id")]
public InsulationMaterial? RoofSurfaceInsulationMaterial { get; set; }
/// <summary>Перекрытие крыши: толщина утеплителя, мм</summary>
[DomainField(
Alias = "roof_surface_insulation_thickness_mm",
RequiredForCalc = "Да, если указан материал утеплителя крыши И Материал утеплителя. Наименование != \"Нет\"",
Unit = "мм",
Range = "вещественное > 0"
)]
public decimal RoofSurfaceInsulationThicknessMm { 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", Calculated = "Да", Unit = "м²·°C/Вт", Range = "вещественное > 0")]
public decimal ThermalResistanceM2cPerWt { get; set; }
/// <summary>Площадь ВОК, м²</summary>
[DomainField(Alias = "area", Calculated = "Да", Unit = "м²", Range = "Вещественное (0; 10000000]")]
public decimal Area { get; set; }
/// <summary>Площадь стен чердака, м²</summary>
[DomainField(
Alias = "attic_wall_area",
Calculated = "Да",
Unit = "м²",
Range = "если \"Наличие чердачного помещения\" = \"Да\", то Вещественное (0; 10000000]"
)]
public decimal AtticWallArea { get; set; }
/// <summary>Площадь покрытия крыши, м²</summary>
[DomainField(Alias = "roof_cover_area", Calculated = "Да", Unit = "м²", Range = "Вещественное (0; 10000000]")]
public decimal RoofCoverArea { get; set; }
}
}