⟨/⟩ Ntr/55_Backend/Calc/TtrCalc.cs

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

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

namespace Rugrid.Sdaid.Epas.Ntr.Backend.Calc
{
    /// <summary>
    /// Перенесено дословно из ntr-01/ntr-calc/ttr-calc.md.
    /// Каждый заголовок источника — отдельная секция; идентификаторы methodSectionId
    /// сохранены статиками и служат ключом трассировки на калькуляторы src/Ntr.Calc.
    /// </summary>
    public class DOC_TtrCalc : IApplicationServiceDocument, IHasStructuralLinks, IFolder<NtrBackendFolder>
    {
        public SdaidLink[] Links => new[]
        {
            Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Backend.Calc.DOC_CalcModel>(),
        };

        public static string _refName = "Теплотехнический расчёт";

        public string Name => "Теплотехнический расчёт";

        public string Description => @"Этот файл является **единственным источником** методики теплотехнического расчёта здания в проекте. Других источников методики ТТР (в подмодулях домена или в требованиях) нет. Расчёт по электричеству (освещение, токоприёмники) описан в [domain/ee_calc.md](ee_calc.md).";

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

        public string[] Comments => new[]
        {
            "2026-09-03, CR «Обработка источников климатических данных»: широта перенесена из исходных данных здания в условия отопительного периода — она определяется выбранным источником климатических данных.",
        };
    }

    /// <summary>Секция методики.</summary>
    public class TtrIshodnyeDannyeDlyaRascheta : ISdaidDocumentSection
    {
        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(object);
        public int Order => 10;
        public string Number => "";
        public string Name => "Исходные данные для расчёта";

        public string Body => """"
Ниже перечислены исходные данные, используемые в теплотехническом расчёте. Для каждого параметра указана доменная сущность (по диаграммам в `domain/consumption-model/*.md`), атрибут, единица измерения и обозначение, применяемое в формулах.

| Сущность (наименование с диаграммы)                | Атрибут (наименование с диаграммы)                                            | Единица измерения | Обозначение                 | Объект (domain-schema)                            | Поле (domain-schema)                                                     |
| -------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------- | --------------------------- | ------------------------------------------------- | ------------------------------------------------------------------------ |
| **ФормаИГеометрическиеРазмеры**                    | Высота здания                                                                 | м                 | $H$                         | buildingGeometry                                  | buildingHeight                                                           |
| ФормаИГеометрическиеРазмеры                        | Отапливаемый объём здания                                                     | м³                | $V_h$                       | buildingGeometry                                  | heatedVolume                                                             |
| ФормаИГеометрическиеРазмеры                        | Отапливаемая площадь                                                          | м²                | $A_h$                       | buildingGeometry                                  | heatedArea                                                               |
| ФормаИГеометрическиеРазмеры                        | Форма здания                                                                  | —                 | —                           | buildingGeometry                                  | buildingFormId                                                           |
| ФормаИГеометрическиеРазмеры                        | Размеры по габаритам A…H                                                      | м                 | $L_A,\ldots,L_H$            | buildingGeometry                                  | dimensionA..dimensionH                                                   |
| ФормаИГеометрическиеРазмеры                        | Ориентация стороны A                                                          | —                 | —                           | buildingGeometry                                  | orientationSideAId                                                       |
| **Стены**                                          | Толщина несущего слоя                                                         | мм                | $δ_{w0}$                    | walls                                             | materialThickness                                                        |
| Стены                                              | Толщина основного утеплителя                                                  | мм                | $δ_{w1}$                    | walls                                             | mainInsulationThickness                                                  |
| Стены                                              | Толщина дополнительного утеплителя                                            | мм                | $δ_{w2}$                    | walls                                             | additionalInsulationThickness                                            |
| Стены                                              | Теплопроводность несущего слоя                                                | Вт/(м·К)          | $λ_{w0}$                    | materials *(по `walls.materialId`)*               | thermalConductivity                                                      |
| Стены                                              | Теплопроводность основного утеплителя                                         | Вт/(м·К)          | $λ_{w1}$                    | insulations *(по `walls.mainInsulationId`)*       | thermalConductivity                                                      |
| Стены                                              | Теплопроводность дополнительного утеплителя                                   | Вт/(м·К)          | $λ_{w2}$                    | insulations *(по `walls.additionalInsulationId`)* | thermalConductivity                                                      |
| **Верхние ограждающие (крыша)**                    | Уровень верхнего перекрытия                                                   | м                 | $z_{ВП}$                    | roofs                                             | upperFloorLevel                                                          |
| Верхние ограждающие (крыша)                        | Площадь ВОК при произвольной форме здания                                     | м²                | `customUpperEnclosureArea`  | roofs                                             | customUpperEnclosureArea                                                 |
| Верхние ограждающие (крыша)                        | Толщина несущего слоя верхнего перекрытия                                     | мм                | $δ_{c0}$                    | roofs                                             | floorMaterialThickness                                                   |
| Верхние ограждающие (крыша)                        | Толщина утеплителя верхнего перекрытия                                        | мм                | $δ_{c1}$                    | roofs                                             | floorInsulationThickness                                                 |
| Верхние ограждающие (крыша)                        | Толщина утеплителя крыши                                                      | мм                | $δ_{g1}$                    | roofs                                             | roofInsulationThickness                                                  |
| Верхние ограждающие (крыша)                        | Теплопроводность несущего слоя верхнего перекрытия                            | Вт/(м·К)          | $λ_{c0}$                    | materials *(по `roofs.floorMaterialId`)*          | thermalConductivity                                                      |
| Верхние ограждающие (крыша)                        | Теплопроводность утеплителя верхнего перекрытия                               | Вт/(м·К)          | $λ_{c1}$                    | insulations *(по `roofs.floorInsulationId`)*      | thermalConductivity                                                      |
| Верхние ограждающие (крыша)                        | Теплопроводность утеплителя крыши                                             | Вт/(м·К)          | $λ_{g1}$                    | insulations *(по `roofs.roofInsulationId`)*       | thermalConductivity                                                      |
| **ЗонаКонтактаСГрунтом**                           | Наличие подвала                                                               | —                 | —                           | groundContacts                                    | hasBasement                                                              |
| ЗонаКонтактаСГрунтом                               | Высота потолка подвала                                                        | м                 | $h_b$                       | groundContacts                                    | basementHeight                                                           |
| ЗонаКонтактаСГрунтом                               | Уровень пола подвала                                                          | м                 | $z_b$                       | groundContacts                                    | basementFloorLevel                                                       |
| ЗонаКонтактаСГрунтом                               | Площадь зоны контакта с грунтом (при произвольной форме здания)               | м²                | `customGroundContactAreaM2` | groundContacts                                    | customGroundContactAreaM2                                                |
| **Окна — ВидОстекленияПроёмов**                    | Площадь одного проёма                                                         | м²                | $a_{окон}^j$                | windows                                           | openingArea                                                              |
| ВидОстекленияПроёмов                               | Количество проёмов по стороне $i\in(A…H)$ здания j-го вида остекления проёмов | шт                | $N_{окон}^{i,j}$            | windows                                           | openingsSideA..openingsSideH                                             |
| ВидОстекления                                      | Сопротивление теплопередаче                                                   | м²·°С/Вт          | $r_{окон}^{транс, j}$       | windowTypes *(по `windows.windowTypeId`)*         | thermalResistance                                                        |
| ВидОстекления                                      | Коэффициент затенения                                                         | —                 | $K_{окон}^{j}$              | windowTypes *(по `windows.windowTypeId`)*         | shadingCoefficient                                                       |
| ВидОстекления                                      | Коэффициент проникания солнечной радиации                                     | —                 | $τ_{окон}^{j}$              | windowTypes *(по `windows.windowTypeId`)*         | solarRadiationCoefficient                                                |
| ВидОстекления                                      | Воздухопроницаемость при $δ p=10$ Па                                          | кг/(м²·ч)         | $g_{окон}^{инф, j}$         | windowTypes *(по `windows.windowTypeId`)*         | airPermeability                                                          |
| **Ворота — ВидВоротныхПроёмов**                    | Площадь одного проёма                                                         | м²                | $a_{ворот}^j$               | doors                                             | openingArea                                                              |
| ВидВоротныхПроёмов                                 | Количество проёмов по стороне $i\in(A…H)$ здания j-го вида воротных проёмов   | шт                | $N_{ворот}^{i,j}$           | doors                                             | openingsSideA..openingsSideH                                             |
| ВидВорот                                           | Сопротивление теплопередаче ворот                                             | м²·°С/Вт          | $r_{ворот}^{транс, j}$      | doorTypes *(по `doors.doorTypeId`)*               | thermalResistance                                                        |
| ВидВорот                                           | Воздухопроницаемость при $δ p=10$ Па                                          | кг/(м²·ч)         | $g_{ворот}^{инф, j}$        | doorTypes *(по `doors.doorTypeId`)*               | airPermeability                                                          |
| **Условия эксплуатации**                           | Численность персонала                                                         | чел               | $n_p$                       | operatingConditions                               | workplacesCount                                                          |
| Условия эксплуатации                               | Средняя внутренняя температура                                                | °C                | $t_{int}$                   | operatingConditions                               | internalTemperature                                                      |
| Условия эксплуатации                               | Назначение здания (ссылка на справочник)                                      | —                 | —                           | operatingConditions                               | buildingPurposeFk                                                        |
| **НазначениеЗдания (справочник)**                  | Удельный расход воздуха                                                       | м³/(чел·ч)        | $l_{вент}$                  | buildingPurposes                                  | airConsumption                                                           |
| Условия эксплуатации                               | Тип регулирования системы отопления (ссылка на справочник)                    | —                 | —                           | operatingConditions                               | heatingRegulationTypeFk                                                  |
| **ТипыРегулированияСистемыОтопления (справочник)** | Коэффициент эффективности регулирования подачи теплоты ($K_{рег}$)            | отн. ед.          | $K_{рег}$                   | heatingSystemRegulationTypes                      | kReg                                                                     |
| **Условия отопительного периода**                  | Продолжительность отопительного периода                                       | сут               | $z_{ht}$                    | heatingPeriodConditions                           | duration                                                                 |
| Условия отопительного периода                      | Средняя температура наружного воздуха                                         | °C                | $t_{ext}$                   | heatingPeriodConditions                           | externalTemperature                                                      |
| Условия отопительного периода                      | Средняя скорость ветра                                                        | м/с               | $v$                         | heatingPeriodConditions                           | windSpeed                                                                |
| Условия отопительного периода                      | Широта (градус северной широты)                                               | °                 | $φ$                         | heatingPeriodConditions                           | latitude                                                                 |
| **ССР (справочник)**                               | Солнечная радиация для стороны света и месяца                                 | МДж/м²            | $I_{рад}^{d,m}$             | solarRadiationData                                | солнечная_радиация *(по ключам: сторона_света_fk, широта, номер_месяца)* |
| **НУР_ТЭ (справочник)**                            | Удельный расход (норматив)                                                    | Вт/(м³·°C)        | $q_{норм}$                  | normativeSpecificHeatConsumptions                 | specificConsumption *(по ключам: `buildingPurposeId`, `floorCount`)*     |
| **КлассыЭнергоэффективности (справочник)**         | Нижняя граница отклонения                                                     | %                 | $δ q_{min}$                 | energyEfficiencyClasses                           | deviationMinPercent                                                      |
| КлассыЭнергоэффективности (справочник)             | Верхняя граница отклонения                                                    | %                 | $δ q_{max}$                 | energyEfficiencyClasses                           | deviationMaxPercent                                                      |
| КлассыЭнергоэффективности (справочник)             | Класс энергоэффективности                                                     | —                 | $EE$                        | energyEfficiencyClasses                           | code/name *(по диапазону: `deviationMinPercent..deviationMaxPercent`)*   |

**Коэффициенты и нормативные константы методики ТТР** (используются в формулах методики; часть хранится в справочниках прототипа, часть задана как константы методики):

| Обозначение / описание                                                   | Значение / формула | Где используется                                               | Хранение в прототипе                                        |
| ------------------------------------------------------------------------ | ------------------ | -------------------------------------------------------------- | ----------------------------------------------------------- |
| Коэффициенты в формуле разности давлений $Δp$                            | 0,55; 0,03         | Окна, ворота (расчёт $Δp$)                                     | не хранится (константа методики)                            |
| Эталонное давление в степенных зависимостях воздухопроницаемости         | 10 Па              | Окна, ворота (формулы для $R_{окон}^{inf}$, $R_{ворот}^{inf}$) | не хранится (константа методики)                            |
| Сопротивление теплообмену на поверхности (константа методики в $R^{пр}$) | 0,1584             | Стены, крыша ($R_{стен}^{пр}$, $R_{ВОК}^{пр}$)                 | `ttrCoefficients[code=surface_thermal_resistance].value`    |
| Коэффициент в формуле $k_{вент}$                                         | 0,28               | Вентиляция ($k_{вент}$)                                        | не хранится (константа методики)                            |
| Часов в неделе                                                           | 168                | Вентиляция ($k_{вент}$, $n_в$)                                 | не хранится (константа методики)                            |
| Часов в сутках                                                           | 24                 | Пересчёт мощности в энергию ($Q_{wall}$, $Q_F$, …)             | не хранится (константа методики)                            |
| Делитель перевода в кВт / тыс. кВт·ч                                     | 1000               | Все формулы мощности и энергии                                 | не хранится (константа методики)                            |
| Удельная теплоёмкость воздуха $c$                                        | 1 кДж/(кг·°С)      | Вентиляция ($k_{вент}$)                                        | `ttrCoefficients[code=air_specific_heat].value`             |
| Коэффициент снижения объёма воздуха в здании $β_v$                       | 0,85               | Вентиляция ($n_в$)                                             | `ttrCoefficients[code=reduction_buildings_air_volum].value` |
| Коэффициенты в формуле $q_{быт}$                                         | 90; 10; 1000; 45; 168 | Удельные бытовые теплопоступления ($q_{быт}$)               | не хранится (константы методики)                            |
| Коэффициент перевода МДж/год в Вт                                        | 11,6               | Солнечные теплопоступления ($k_{рад}$)                         | не хранится (константа методики)                            |
| Константа в формулах удельного веса воздуха $γ$                          | 3463               | Инфильтрация (расчёт $γ_н$, $γ_в$)                             | не хранится (константа методики)                            |
| Константа в формуле плотности $ρ_в^{вент}$                               | 353                | Вентиляция (расчёт $ρ_в^{вент}$)                               | не хранится (константа методики)                            |
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики.</summary>
    public class TtrSistemaOboznacheniy : ISdaidDocumentSection
    {
        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(object);
        public int Order => 20;
        public string Number => "";
        public string Name => "Система обозначений";

        public string Body => """"
Эта таблица содержит **только расчётные параметры** методики (включая промежуточные величины). Исходные данные перечислены в разделе «Исходные данные для расчёта».

| Обозначение            | Единицы    | Описание                                                                           | Хранение    |
| ---------------------- | ---------- | ---------------------------------------------------------------------------------- | ----------- |
| $Δt$                   | °C         | Разность температур $t_{int}-t_{ext}$                                              | вычисляется |
| $k_{об}$               | Вт/(м³·°C) | Удельная теплозащитная характеристика здания                                       | вычисляется |
| $A_{НОК}$              | м²         | Общая площадь наружных ограждающих конструкций                                     | вычисляется |
| $A_{ВП.Стен}$          | м²         | Общая площадь внутренней поверхности наружных стен здания                          | вычисляется |
| $p_{стен}^{int}$       | м          | Периметр внутренней поверхности наружных стен здания                               | вычисляется |
| $δ$                    | м          | Расстояние между внутренней и внешней стороной стены здания                        | вычисляется |
| $δ_{w0}^m$             | м          | Толщина несущего слоя стен в метрах                                                | вычисляется |
| $δ_{w1}^m$             | м          | Толщина основного утеплителя стен в метрах                                         | вычисляется |
| $δ_{w2}^m$             | м          | Толщина дополнительного утеплителя стен в метрах                                   | вычисляется |
| $A_{окон}^{i,j}$       | м²         | Площадь окон вида $j$ на стороне здания $i$                                        | вычисляется |
| $A_{окон}^{i}$         | м²         | Площадь окон на стороне здания $i$                                                 | вычисляется |
| $A_{окон}^{d}$         | м²         | Площадь окон на стороне света $d$                                                  | вычисляется |
| $A_{окон}$             | м²         | Общая площадь окон                                                                 | вычисляется |
| $N_{окон}^{j}$         | шт         | Общее количество окон вида $j$                                                     | вычисляется |
| $A_{ворот}^{i,j}$      | м²         | Площадь ворот вида $j$ на стороне здания $i$                                       | вычисляется |
| $A_{ворот}^{i}$        | м²         | Площадь ворот на стороне здания $i$                                                | вычисляется |
| $A_{ворот}^{d}$        | м²         | Площадь ворот на стороне света $d$                                                 | вычисляется |
| $A_{ворот}$            | м²         | Общая площадь ворот                                                                | вычисляется |
| $N_{ворот}^{j}$        | шт         | Общее количество ворот вида $j$                                                    | вычисляется |
| $A_{ВОК}$              | м²         | Общая площадь верхних ограждающих конструкций                                      | вычисляется |
| $A_{НП.Черд}$          | м²         | Площадь наружной поверхности наружных стен чердака                                 | вычисляется |
| $A_{ПК}$               | м²         | Площадь покрытия крыши                                                             | вычисляется |
| $A_{ЗКГ}$              | м²         | Общая площадь зоны контакта с грунтом                                              | вычисляется |
| $A_{осн}^{int}$        | м²         | Площадь внутренней поверхности основания здания                                    | вычисляется |
| $A_{СП}$               | м²         | Площадь внутренней поверхности наружных стен подвала                               | вычисляется |
| $L_i^{int}$            | м          | Длина внутренней поверхности по стороне здания $i$                                 | вычисляется |
| $L_i^{z,ext}$          | м          | Длина внешнего контура зоны $z$ контакта с грунтом по стороне здания $i$           | вычисляется |
| $L_i^{z,int}$          | м          | Длина внутреннего контура зоны $z$ контакта с грунтом по стороне здания $i$        | вычисляется |
| $A_{ЗКГ}^{z}$          | м²         | Площадь зоны контакта с грунтом $z\in\\{I..IV\\}$                                  | вычисляется |
| $R_{стен}^{пр}$        | м²·°С/Вт   | Приведённое сопротивление теплопередаче стен                                       | вычисляется |
| $R_{окон}^{пр}$        | м²·°С/Вт   | Приведённое сопротивление теплопередаче окон                                       | вычисляется |
| $R_{ворот}^{пр}$       | м²·°С/Вт   | Приведённое сопротивление теплопередаче ворот                                      | вычисляется |
| $R_{ВОК}^{пр}$         | м²·°С/Вт   | Приведённое сопротивление теплопередаче верхних ограждающих конструкций            | вычисляется |
| $R_{ЗКГ}^{пр}$         | м²·°С/Вт   | Приведённое сопротивление теплопередаче зоны контакта с грунтом                    | вычисляется |
| $R_{o}^{пр}$           | м²·°С/Вт   | Приведённое сопротивление теплопередаче теплозащитной оболочки здания              | вычисляется |
| $k_{вент}$             | Вт/(м³·°C) | Удельная вентиляционная характеристика здания                                      | вычисляется |
| $L_{вент}$             | м³/ч       | Количество приточного воздуха в здание                                             | вычисляется |
| $n_{вент}$             | ч          | Число часов работы механической вентиляции в течение недели                        | вычисляется |
| $k_{эф}$               | —          | Коэффициент эффективности рекуператора                                             | вычисляется |
| $G^{инф}$              | кг/ч       | Количество инфильтрирующегося воздуха в здание                                     | вычисляется |
| $G_{окон}^{инф, j}$    | кг/ч       | Количество инфильтрирующегося воздуха через окна j-го вида остекления              | вычисляется |
| $G_{ворот}^{инф, j}$   | кг/ч       | Количество инфильтрирующегося воздуха через ворота j-го вида воротных проёмов      | вычисляется |
| $n_{инф}$              | ч          | Число часов учёта инфильтрации в течение недели                                    | вычисляется |
| $R_{окон}^{инф, j}$    | м²·ч/кг    | Сопротивление воздухопроницаемости окон j-го вида остекления                       | вычисляется |
| $R_{ворот}^{инф, j}$   | м²·ч/кг    | Сопротивление воздухопроницаемости ворот j-го вида воротных проёмов                | вычисляется |
| $Δp$                   | Па         | Разность давлений наружного и внутреннего воздуха                                  | вычисляется |
| $γ_н$                  | Н/м³       | Удельный вес наружного воздуха                                                     | вычисляется |
| $γ_в$                  | Н/м³       | Удельный вес внутреннего воздуха                                                   | вычисляется |
| $n_в$                  | ч$^{-1}$   | Средняя кратность воздухообмена здания за отопительный период                      | вычисляется |
| $ρ_в^{вент}$           | кг/м³      | Средняя плотность приточного воздуха за отопительный период                        | вычисляется |
| $β_{КПИ}$              | —          | Коэффициент полезного использования теплопоступлений                               | вычисляется |
| $q_{быт}$              | Вт/м²      | Удельные бытовые теплопоступления                                                  | вычисляется |
| $k_{быт}$              | Вт/(м³·°C) | Удельная характеристика внутренних теплопоступлений здания                         | вычисляется |
| $D_d$                  | °C·сут     | Градусо‑сутки отопительного периода                                                | вычисляется |
| $Q_{рад}$              | МДж        | Энергия теплопоступлений от солнечной радиации за отопительный период              | вычисляется |
| $I_{рад}^{d}$          | МДж/м²     | Суммарная солнечная радиация по стороне света $d$ за отопительный период           | вычисляется |
| $k_{рад}$              | Вт/(м³·°C) | Удельная характеристика теплопоступлений от солнечной радиации                     | вычисляется |
| $q_{от}^{р}$           | Вт/(м³·°C) | Расчётная удельная характеристика расхода ТЭ на отопление и вентиляцию             | вычисляется |
| $δ q$                  | %          | Отклонение $q_{от}^{р}$ от $q_{норм}$                                              | вычисляется |
| $EE$                   | —          | Класс энергоэффективности (код/наименование по справочнику)                        | вычисляется |
| $k_{стен}$             | Вт/(м³·°C) | Удельная теплозащитная характеристика стен здания                                  | вычисляется |
| $k_{окон}$             | Вт/(м³·°C) | Удельная теплозащитная характеристика окон здания                                  | вычисляется |
| $k_{ворот}$            | Вт/(м³·°C) | Удельная теплозащитная характеристика ворот здания                                 | вычисляется |
| $k_{ВОК}$              | Вт/(м³·°C) | Удельная теплозащитная характеристика ВОК здания                                   | вычисляется |
| $k_{ЗКГ}$              | Вт/(м³·°C) | Удельная теплозащитная характеристика ЗКГ здания                                   | вычисляется |
| $L_{h}^{kWh}$          | кВт·ч      | Общие теплопотери здания за отопительный период                                    | вычисляется |
| $L_{стен}^{kWh}$       | кВт·ч      | Теплопотери стен за отопительный период                                            | вычисляется |
| $L_{окон}^{kWh}$       | кВт·ч      | Теплопотери окон за отопительный период                                            | вычисляется |
| $L_{ворот}^{kWh}$      | кВт·ч      | Теплопотери ворот за отопительный период                                           | вычисляется |
| $L_{ВОК}^{kWh}$        | кВт·ч      | Теплопотери ВОК за отопительный период                                             | вычисляется |
| $L_{ЗКГ}^{kWh}$        | кВт·ч      | Теплопотери ЗКГ за отопительный период                                             | вычисляется |
| $L_{вент}^{kWh}$       | кВт·ч      | Теплопотери вентиляции за отопительный период                                      | вычисляется |
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики.</summary>
    public class TtrMetodikaRascheta : ISdaidDocumentSection
    {
        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(object);
        public int Order => 30;
        public string Number => "";
        public string Name => "Методика расчёта";

        public string Body => """"

"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики.</summary>
    public class TtrKlassEnergoeffektivnostiZdaniya : ISdaidDocumentSection
    {
        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TtrMetodikaRascheta);
        public int Order => 40;
        public string Number => "";
        public string Name => "Класс энергоэффективности здания";

        public string Body => """"
Класс энергоэффективности здания $EE$ определяется по отклонению $δ q$ расчётной удельной характеристики расхода тепловой энергии на отопление и вентиляцию $q_{от}^{р}$ от нормативного значения $q_{норм}$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.deviation_percent.</summary>
    public class TeDeviationPercent : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.deviation_percent";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TtrKlassEnergoeffektivnostiZdaniya);
        public int Order => 50;
        public string Number => "";
        public string Name => "Отклонение $δ q$ расчётной удельной характеристики расхода тепловой энергии на отопление и вентиляцию $q_{от}^{р}$ от нормативного значения $q_{норм}$";

        public string Body => """"
`methodSectionId: te.deviation_percent`

Отклонение $δ q$ рассчитывается по формуле:

$$δ q = \frac{q_{от}^{р}-q_{норм}}{q_{норм}}· 100\%.$$
где:
- $q_{норм}$ - Нормативная удельная характеристика расхода ТЭ на отопление и вентиляцию, Вт/(м³·°C). Исходные данные: выбирается из справочника "НУР ТЭ" по назначению и этажности здания.
- $q_{от}^{р}$ - Расчётная удельная характеристика расхода ТЭ на отопление и вентиляцию, Вт/(м³·°C). Расчётный параметр секции `te.calc_specific_characteristic`.

**Правила валидации:**

- $q_{норм} > 0$ (защита знаменателя формулы).
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.class_by_deviation.</summary>
    public class TeClassByDeviation : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.class_by_deviation";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TtrKlassEnergoeffektivnostiZdaniya);
        public int Order => 60;
        public string Number => "";
        public string Name => "Выбор класса энергоэффективности здания";

        public string Body => """"
`methodSectionId: te.class_by_deviation`

Класс выбирается по справочнику «КлассыЭнергоэффективности»: по справочнику определяется диапазон, в который попадает $δ q$:

$$δ q_{min} \le δ q \le δ q_{max},$$
где $δ q_{min}, δ q_{max}$ - границы диапазона по справочнику.
Из справочника берётся наименование класса энергоэффективности $EE$ для выбранного диапазона.

**Правила валидации:**

- справочник классов энергоэффективности не пуст;
- в каждой записи справочника заданы все поля ($\delta q_{min}$, $\delta q_{max}$, код, наименование);
- $\delta q_{min} \le \delta q_{max}$ для каждой записи;
- значение $\delta q$ попадает ровно в один диапазон справочника.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.calc_specific_characteristic.</summary>
    public class TeCalcSpecificCharacteristic : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.calc_specific_characteristic";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TtrMetodikaRascheta);
        public int Order => 70;
        public string Number => "";
        public string Name => "Расчётная удельная характеристика расхода тепловой энергии на отопление и вентиляцию $q_{от}^{р}$";

        public string Body => """"
`methodSectionId: te.calc_specific_characteristic`

Расчётная удельная характеристика расхода тепловой энергии на отопление и вентиляцию $q_{от}^{р}$ (Вт/(м³·°C) определяется по формуле:

$$q_{от}^{р}=k_{об}+k_{вент}-\beta_{КПИ}·(k_{быт}+k_{рад})$$

где:

- $k_{об}$ — удельная теплозащитная характеристика здания, Вт/(м³·°С). Расчётный параметр секции `te.spec_heat_protect_char`.
- $k_{вент}$ — удельная вентиляционная характеристика здания, Вт/(м³·°С). Расчётный параметр секции `te.spec_ventilation_char`.
- $k_{быт}$ — удельная характеристика внутренних теплопоступлений здания, Вт/(м³·°С). Расчётный параметр секции `te.spec_internal_heat_gain_char`.
- $k_{рад}$ — удельная характеристика теплопоступлений в здание от солнечной радиации, Вт/(м³·°С). Расчётный параметр секции `te.spec_solar_gain_char`.
- $\beta_{КПИ}$ — коэффициент полезного использования теплопоступлений. Расчётный параметр секции `te.heat_gain_utilization_factor`.

**Правила валидации:** собственных правил нет — все слагаемые провалидированы в смежных секциях.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.spec_heat_protect_char.</summary>
    public class TeSpecHeatProtectChar : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.spec_heat_protect_char";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TtrMetodikaRascheta);
        public int Order => 80;
        public string Number => "";
        public string Name => "Удельная теплозащитная характеристика здания $k_{об}$";

        public string Body => """"
`methodSectionId: te.spec_heat_protect_char`

Удельная теплозащитная характеристика здания $k_{об}, Вт/(м^3·°С)$, рассчитывается по формуле:

$$k_{об}=\frac{1}{V_h}·\frac{A_{НОК}}{R_o^{пр}}$$

где:

- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные: характеристика "Форма и габариты. Объём отапливаемый".
- $A_{НОК}$ - Общая площадь наружных ограждающих конструкций, м2. Расчётный параметр.
- $R_o^{пр}$ - Приведенное сопротивление теплопередаче теплозащитной оболочки здания, $м^2·°С/Вт$. Расчётный параметр.

**Правила валидации:**

- $V_h>0$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.wall_spec_heat_protect_char.</summary>
    public class TeWallSpecHeatProtectChar : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.wall_spec_heat_protect_char";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecHeatProtectChar);
        public int Order => 90;
        public string Number => "";
        public string Name => "Удельная теплозащитная характеристика стен $k_{стен}$";

        public string Body => """"
`methodSectionId: te.wall_spec_heat_protect_char`

Удельная теплозащитная характеристика стен здания $k_{стен}, Вт/(м^3·°С)$, рассчитывается по формуле:

- Если $R_{стен}^{пр}>0$:

$$k_{стен}=\frac{1}{V_h}·\frac{A_{ВП.Стен}}{R_{стен}^{пр}}$$
- иначе: $$k_{стен}=0$$

где:

- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные: характеристика "Форма и габариты. Объём отапливаемый".
- $A_{ВП.Стен}$ - Общая площадь внутренней поверхности наружных стен здания. Расчётный параметр.
- $R_{стен}^{пр}$ - Приведенное сопротивление теплопередаче стен, $м^2·°С/Вт$. Расчётный параметр.

**Правила валидации:**

- $V_h>0$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.windows_spec_heat_protect_char.</summary>
    public class TeWindowsSpecHeatProtectChar : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.windows_spec_heat_protect_char";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecHeatProtectChar);
        public int Order => 100;
        public string Number => "";
        public string Name => "Удельная теплозащитная характеристика окон $k_{окон}$";

        public string Body => """"
`methodSectionId: te.windows_spec_heat_protect_char`

Удельная теплозащитная характеристика окон здания $k_{окон}, Вт/(м^3·°С)$, рассчитывается по формуле:

- Если $R_{окон}^{пр}>0$:

$$k_{окон}=\frac{1}{V_h}·\frac{A_{окон}}{R_{окон}^{пр}}$$
- иначе: $$k_{окон}=0$$

где:

- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные: характеристика "Форма и габариты. Объём отапливаемый".
- $A_{окон}$ - Общая площадь окон. Расчётный параметр.
- $R_{окон}^{пр}$ - Приведенное сопротивление теплопередаче окон, $м^2·°С/Вт$. Расчётный параметр.

**Правила валидации:**

- $V_h>0$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.doors_spec_heat_protect_char.</summary>
    public class TeDoorsSpecHeatProtectChar : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.doors_spec_heat_protect_char";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecHeatProtectChar);
        public int Order => 110;
        public string Number => "";
        public string Name => "Удельная теплозащитная характеристика ворот $k_{ворот}$";

        public string Body => """"
`methodSectionId: te.doors_spec_heat_protect_char`

Удельная теплозащитная характеристика ворот здания $k_{ворот}, Вт/(м^3·°С)$, рассчитывается по формуле:

- Если $R_{ворот}^{пр}>0$:

$$k_{ворот}=\frac{1}{V_h}·\frac{A_{ворот}}{R_{ворот}^{пр}}$$
- иначе: $$k_{ворот}=0$$

где:

- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные: характеристика "Форма и габариты. Объём отапливаемый".
- $A_{ворот}$ - Общая площадь ворот. Расчётный параметр.
- $R_{ворот}^{пр}$ - Приведенное сопротивление теплопередаче ворот, $м^2·°С/Вт$. Расчётный параметр.

**Правила валидации:**

- $V_h>0$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.roof_spec_heat_protect_char.</summary>
    public class TeRoofSpecHeatProtectChar : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.roof_spec_heat_protect_char";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecHeatProtectChar);
        public int Order => 120;
        public string Number => "";
        public string Name => "Удельная теплозащитная характеристика ВОК $k_{ВОК}$";

        public string Body => """"
`methodSectionId: te.roof_spec_heat_protect_char`

Удельная теплозащитная характеристика ВОК здания $k_{ВОК}, Вт/(м^3·°С)$, рассчитывается по формуле:

- Если $R_{ВОК}^{пр}>0$:

$$k_{ВОК}=\frac{1}{V_h}·\frac{A_{ВОК}}{R_{ВОК}^{пр}}$$
- иначе: $$k_{ВОК}=0$$

где:

- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные: характеристика "Форма и габариты. Объём отапливаемый".
- $A_{ВОК}$ - Общая площадь верхних ограждающих конструкций. Расчётный параметр.
- $R_{ВОК}^{пр}$ - Приведенное сопротивление теплопередаче верхних ограждающих конструкций, $м^2·°С/Вт$. Расчётный параметр.

**Правила валидации:**

- $V_h>0$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.ground_spec_heat_protect_char.</summary>
    public class TeGroundSpecHeatProtectChar : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.ground_spec_heat_protect_char";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecHeatProtectChar);
        public int Order => 130;
        public string Number => "";
        public string Name => "Удельная теплозащитная характеристика ЗКГ $k_{ЗКГ}$";

        public string Body => """"
`methodSectionId: te.ground_spec_heat_protect_char`

Удельная теплозащитная характеристика ЗКГ здания $k_{ЗКГ}, Вт/(м^3·°С)$, рассчитывается по формуле:

- Если $R_{ЗКГ}^{пр}>0$:

$$k_{ЗКГ}=\frac{1}{V_h}·\frac{A_{ЗКГ}}{R_{ЗКГ}^{пр}}$$
- иначе: $$k_{ЗКГ}=0$$

где:

- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные: характеристика "Форма и габариты. Объём отапливаемый".
- $A_{ЗКГ}$ - Общая площадь зоны контакта с грунтом. Расчётный параметр.
- $R_{ЗКГ}^{пр}$ - Приведенное сопротивление теплопередаче зоны контакта с грунтом, $м^2·°С/Вт$. Расчётный параметр.

**Правила валидации:**

- $V_h>0$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.envelope_area.</summary>
    public class TeEnvelopeArea : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.envelope_area";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TtrMetodikaRascheta);
        public int Order => 140;
        public string Number => "";
        public string Name => "Общая площадь наружных ограждающих конструкций $A_{НОК}$";

        public string Body => """"
`methodSectionId: te.envelope_area`

$$A_{НОК}=A_{ВП.Стен}+A_{окон}+A_{ворот}+A_{ВОК}+A_{ЗКГ}$$

где:

- $A_{ВП.Стен}$ - Общая площадь внутренней поверхности наружных стен здания. Расчётный параметр.
- $A_{окон}$ - Общая площадь окон. Расчётный параметр.
- $A_{ворот}$ - Общая площадь ворот. Расчётный параметр.
- $A_{ВОК}$ - Общая площадь верхних ограждающих конструкций. Расчётный параметр.
- $A_{ЗКГ}$ - Общая площадь зоны контакта с грунтом. Расчётный параметр.

**Правила валидации:** собственных правил нет — все слагаемые провалидированы в своих секциях.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.inner_wall_surface_area.</summary>
    public class TeInnerWallSurfaceArea : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.inner_wall_surface_area";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeEnvelopeArea);
        public int Order => 150;
        public string Number => "";
        public string Name => "Общая площадь внутренней поверхности наружных стен здания $A_{ВП.Стен}$";

        public string Body => """"
`methodSectionId: te.inner_wall_surface_area`

$$A_{ВП.Стен}=z_{ВП}·p_{стен}^{int}-A_{окон}-A_{ворот}$$

где:
- $z_{ВП}$ - Уровень верхнего перекрытия, м. Исходные данные: характеристика "Верхние ограждающие конструкции. Уровень верхнего перекрытия".
- $A_{окон}$ - Общая площадь окон. Расчётный параметр.
- $A_{ворот}$ - Общая площадь ворот. Расчётный параметр.
- $p_{стен}^{int}$ - Периметр внутренней поверхности наружных стен здания, м. Расчётный параметр.

**Правила валидации:**

- $z_{ВП}>0$
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.inner_wall_perimeter.</summary>
    public class TeInnerWallPerimeter : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.inner_wall_perimeter";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeInnerWallSurfaceArea);
        public int Order => 160;
        public string Number => "";
        public string Name => "Периметр внутренней поверхности наружных стен здания $p_{стен}^{int}$";

        public string Body => """"
`methodSectionId: te.inner_wall_perimeter`

$$p_{стен}^{int}=\sum_{i\in{A..H}}{L_i^{int}}$$
где:

- $L_i^{int}$ - длина внутреннего контура наружных стен здания по стороне $i, (i\in{A..H})$. Расчётный параметр. 
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.inner_wall_perimeter_by_side.</summary>
    public class TeInnerWallPerimeterBySide : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.inner_wall_perimeter_by_side";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeInnerWallSurfaceArea);
        public int Order => 170;
        public string Number => "";
        public string Name => "Длина внутреннего контура наружных стен здания $L_i^{int}$ по стороне $i$";

        public string Body => """"
`methodSectionId: te.inner_wall_perimeter_by_side`
$$L_i^{int}=L_i^{ext}-(k_i^{ext}-k_i^{int})·δ$$
где:

- $L_i^{ext}$ - длина внешнего контура наружных стен здания по стороне $i$. Расчётный параметр: $L_i^{ext}=L_i$.
- $k_i^{ext}$ - количество внешних углов по стороне здания $i$. Расчётный параметр.
- $k_i^{int}$ - количество внутренних углов по стороне здания $i$. Расчётный параметр.
- $δ$ - расстояние между внутренней и внешней стороной стены здания, м. Расчётный параметр.
- $i$ - индекс стороны здания, $i\in{[A..H]}$.

**Правила валидации:**

В зависимости от `Форма и габариты. Форма здания`:

- `Прямоугольная`:
	
	- $L_A>0$$
	- $L_B>0$$
	- ($L_C>0$ И $L_C==L_A$) ИЛИ ($L_C$ не определено, тогда $L_C=L_A$);
	- ($L_D>0$ И $L_D==L_B$) ИЛИ ($L_D$ не определено, тогда $L_D=L_B$);
	
- `Г-образная`: 
	
	- если $i\in{[A..F]}$, то $L_i>0$, 
	- если $i\in{[G..H]}$, $L_i$ должно быть null, тогда $L_i=0$;
	- $L_A==L_E+L_C$;
	- $L_B==L_F+L_D$;
	
- `Обратная Г-образная`:
	
	- если $i\in{[A..F]}$, то $L_i>0$, 
	- если $i\in{[G..H]}$, $L_i$ должно быть null, тогда $L_i=0$;
	- $L_A==L_E+L_C$;
	- $L_F==L_B+L_D$;
	
- `П-образная`:
	
	- $L_i>0$, где $i\in{[A..H]}$;
	- $L_A==L_G+L_E+L_C$;
	- $L_H-L_F==L_B-L_D$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.number_of_corners.</summary>
    public class TeNumberOfCorners : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.number_of_corners";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeInnerWallSurfaceArea);
        public int Order => 180;
        public string Number => "";
        public string Name => "Количества внешних $k_i^{ext}$ и внутренних $k_i^{int}$ углов по стороне здания $i$";

        public string Body => """"
`methodSectionId: te.number_of_corners`

Количества внешних $k_i^{ext}$ и внутренних $k_i^{int}$ углов по стороне здания $i$ зависят от формы здания (характеристика "Форма и габариты. Форма здания"):

- `Прямоугольная`:

|             | A   | B   | C   | D   | E   | F   | G   | H   |
| ----------- | --- | --- | --- | --- | --- | --- | --- | --- |
| $k_i^{ext}$ | 2   | 2   | 2   | 2   | 0   | 0   | 0   | 0   |
| $k_i^{int}$ | 0   | 0   | 0   | 0   | 0   | 0   | 0   | 0   |

- `Г-образная`: 

|             | A   | B   | C   | D   | E   | F   | G   | H   |
| ----------- | --- | --- | --- | --- | --- | --- | --- | --- |
| $k_i^{ext}$ | 2   | 2   | 2   | 1   | 1   | 2   | 0   | 0   |
| $k_i^{int}$ | 0   | 0   | 0   | 1   | 1   | 0   | 0   | 0   |

- `Обратная Г-образная`:

|             | A   | B   | C   | D   | E   | F   | G   | H   |
| ----------- | --- | --- | --- | --- | --- | --- | --- | --- |
| $k_i^{ext}$ | 2   | 2   | 1   | 1   | 2   | 2   | 0   | 0   |
| $k_i^{int}$ | 0   | 0   | 1   | 1   | 0   | 0   | 0   | 0   |

- `П-образная`:

|             | A   | B   | C   | D   | E   | F   | G   | H   |
| ----------- | --- | --- | --- | --- | --- | --- | --- | --- |
| $k_i^{ext}$ | 2   | 2   | 2   | 1   | 0   | 1   | 2   | 2   |
| $k_i^{int}$ | 0   | 0   | 0   | 1   | 2   | 1   | 0   | 0   |

**Правила валидации:**

- задана форма здания, и форма одна из [`Прямоугольная`, `Г-образная`, `Обратная Г-образная`, `П-образная`]
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.wall_thickness.</summary>
    public class TeWallThickness : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.wall_thickness";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeInnerWallSurfaceArea);
        public int Order => 190;
        public string Number => "";
        public string Name => "Расстояние между внутренней и внешней стороной стены здания $δ$, м:";

        public string Body => """"
`methodSectionId: te.wall_thickness`

$$δ=δ_{w0}^m+δ_{w1}^m+δ_{w2}^m$$
где:

- $δ_{w0}^m, δ_{w1}^m, δ_{w2}^m$ - толщина несущего слоя, основного утеплителя, дополнительного утеплителя стен соответственно, м. Расчётные параметры: 

- $δ_{w0}^m = δ_{w0}/1000$, м;
- $δ_{w1}^m = δ_{w1}/1000$, если основной утеплитель имеется; иначе $δ_{w1}^m = 0$;
- $δ_{w2}^m = δ_{w2}/1000$, если дополнительный утеплитель имеется; иначе $δ_{w2}^m = 0$.

- где $δ_{w0}, δ_{w1}, δ_{w2}$ - толщина несущего слоя, основного утеплителя, дополнительного утеплителя стен соответственно, мм. Исходные данные: характеристика "Стены. Толщина несущего слоя/основного утеплителя/дополнительного утеплителя".

**Правила валидации:**

- $δ_{w0}^m$ > 0;
- $δ_{w1}^m$ > 0, если утеплитель имеется;
- $δ_{w2}^m$ > 0, если утеплитель имеется.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.windows_area_total.</summary>
    public class TeWindowsAreaTotal : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.windows_area_total";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeEnvelopeArea);
        public int Order => 200;
        public string Number => "";
        public string Name => "Общая площадь окон $A_{окон}$";

        public string Body => """"
`methodSectionId: te.windows_area_total`

$$A_{окон}=\sum_{j}{A_{окон}^{j}}$$

где $A_{окон}^{j}$ - площадь окон вида остекления проёмов $j$ . Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.windows_area_by_type.</summary>
    public class TeWindowsAreaByType : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.windows_area_by_type";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeWindowsAreaTotal);
        public int Order => 210;
        public string Number => "";
        public string Name => "Площадь окон $A_{окон}^{j}$ вида остекления проёмов $j$";

        public string Body => """"
`methodSectionId: te.windows_area_by_type`

$$A_{окон}^{j}=\sum_i{A_{окон}^{i,j}}$$

где:

- $A_{окон}^{i,j}$ - площадь окон вида остекления проёмов $j$  на стороне $i$ здания. Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.windows_area_by_type_by_side.</summary>
    public class TeWindowsAreaByTypeBySide : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.windows_area_by_type_by_side";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeWindowsAreaTotal);
        public int Order => 220;
        public string Number => "";
        public string Name => "Площадь окон $A_{окон}^{i,j}$ вида остекления проёмов $j$  на стороне $i$ здания";

        public string Body => """"
`methodSectionId: te.windows_area_by_type_by_side`

$$A_{окон}^{i,j}=a_{окон}^{j}·N_{окон}^{i,j}$$

где:

- $а_{окон}^j$ - площадь одного оконного проёма вида остекления проёмов j. Исходные данные: характеристика вида остекления проёмов j модели окон "Вид остекления проёмов. Площадь одного проёма".
- $N_{окон}^{i,j}$ - количество окон вида остекления проёмов j на стороне здания $i, (i\in[A..H])$. Исходные данные: характеристика j-го вида остекления проёмов модели окон здания "Вид остекления проёмов. Количество на стороне A..H".

**Правила валидации:**

- $а_{окон}^j>0$
- требования к $N_{окон}^{i,j}$ в зависимости от `Форма и габариты. Форма здания`:
	
	- `Прямоугольная`:
		
		- если $i\in{[A..D]}$, то  ($N_{окон}^{i,j}≥0$ ИЛИ ($N_{окон}^{i,j}==null$, тогда $N_{окон}^{i,j}=0$);
		- если $i\in{[E..H]}$, то  ($N_{окон}^{i,j}==0$ ИЛИ $N_{окон}^{i,j}==null$, тогда $N_{окон}^{i,j}=0$);
		
	- `Г-образная`: 
		
		- если $i\in{[A..F]}$, то  ($N_{окон}^{i,j}≥0$ ИЛИ ($N_{окон}^{i,j}==null$, тогда $N_{окон}^{i,j}=0$));
		- если $i\in{[G..H]}$, то  ($N_{окон}^{i,j}==0$ ИЛИ $N_{окон}^{i,j}==null$, тогда $N_{окон}^{i,j}=0$);
		
	- `Обратная Г-образная`:
		
		- если $i\in{[A..F]}$, то  ($N_{окон}^{i,j}≥0$ ИЛИ ($N_{окон}^{i,j}==null$, тогда $N_{окон}^{i,j}=0$));
		- если $i\in{[G..H]}$, то  ($N_{окон}^{i,j}==0$ ИЛИ $N_{окон}^{i,j}==null$, тогда $N_{окон}^{i,j}=0$);
		
	- `П-образная`:
		
		- если $i\in{[A..H]}$, то  ($N_{окон}^{i,j}≥0$ ИЛИ ($N_{окон}^{i,j}==null$, тогда $N_{окон}^{i,j}=0$)).
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.windows_area_by_side.</summary>
    public class TeWindowsAreaBySide : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.windows_area_by_side";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeWindowsAreaTotal);
        public int Order => 230;
        public string Number => "";
        public string Name => "Площадь окон $A_{окон}^i$ на стороне здания $i, (i\\in[A..H])$";

        public string Body => """"
`methodSectionId: te.windows_area_by_side`
$$A_{окон}^i=\sum_j{A_{окон}^{i,j}}$$
где: 

- $A_{окон}^{i,j}$ - площадь окон вида остекления проёмов $j$ на стороне здания $i, (i\in{A..H})$. Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.windows_area_by_type_by_direction.</summary>
    public class TeWindowsAreaByTypeByDirection : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.windows_area_by_type_by_direction";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeWindowsAreaTotal);
        public int Order => 240;
        public string Number => "";
        public string Name => "Площадь окон $A_{окон}^{d,j}$ вида остекления проёмов $j$ на стороне света $d$";

        public string Body => """"
`methodSectionId: te.windows_area_by_type_by_direction`

Площади окон $A_{окон}^{d,j}$ вида остекления проёмов $j$ по четырем сторонам света $d\in[Север, Восток, Юг, Запад]$ рассчитываются в два этапа:

- Этап 1: определяются площади окон $A_{окон}^{nd,j}$ на сторонах света номер $nd$ в порядке обхода сторон света по часовой стрелке, начиная со стороны A: $A_{окон}^{1,j}, A_{окон}^{2,j}, A_{окон}^{3,j}, A_{окон}^{4,j}$;
- Этап 2: определяются площади окон $A_{окон}^{d,j}$ на стороне света $d$ в зависимости от ориентации стороны A.

**Этап 1:** Площади окон $A_{окон}^{nd,j}$ на сторонах света номер $nd$ в порядке обхода сторон света по часовой стрелке, начиная со стороны A: $A_{окон}^{1,j}, A_{окон}^{2,j}, A_{окон}^{3,j}, A_{окон}^{4,j}$ определяются в зависимости от `Форма и габариты. Форма здания`:

- если `Прямоугольная`:
	
	- $A_{окон}^{1,j}=A_{окон}^{i=A,j}$
	- $A_{окон}^{2,j}=A_{окон}^{i=B,j}$
	- $A_{окон}^{3,j}=A_{окон}^{i=C,j}$
	- $A_{окон}^{4,j}=A_{окон}^{i=D,j}$
	
- если `Г-образная`:
	  
	- $A_{окон}^{1,j}=A_{окон}^{i=A,j}$
	- $A_{окон}^{2,j}=A_{окон}^{i=B,j}$
	- $A_{окон}^{3,j}=A_{окон}^{i=C,j}+A_{окон}^{i=E,j}$
	- $A_{окон}^{4,j}=A_{окон}^{i=D,j}+A_{окон}^{i=F,j}$
	
- если `Обратная Г-образная`:
	  
	- $A_{окон}^{1,j}=A_{окон}^{i=A,j}$
	- $A_{окон}^{2,j}=A_{окон}^{i=B,j}+A_{окон}^{i=D,j}$
	- $A_{окон}^{3,j}=A_{окон}^{i=C,j}+A_{окон}^{i=E,j}$
	- $A_{окон}^{4,j}=A_{окон}^{i=F,j}$
	  
- если `П-образная`:
	
	- $A_{окон}^{1,j}=A_{окон}^{i=A,j}$
	- $A_{окон}^{2,j}=A_{окон}^{i=B,j}+A_{окон}^{i=F,j}$
	- $A_{окон}^{3,j}=A_{окон}^{i=C,j}+A_{окон}^{i=E,j}+A_{окон}^{i=G,j}$
	- $A_{окон}^{4,j}=A_{окон}^{i=D,j}+A_{окон}^{i=H,j}$

где:

- $A_{окон}^{i,j}$ - площадь окон вида остекления проёмов $j$ на стороне здания $i, (i\in{A..H})$. Расчётный параметр.

**Этап 2:** Площади окон $A_{окон}^{d,j}$ на стороне света $d$ `Форма и габариты. Ориентация стороны A`:

- если `Север`:
	  
	- $A_{окон}^{север,j}=A_{окон}^{1,j}$
	- $A_{окон}^{восток,j}=A_{окон}^{2,j}$
	- $A_{окон}^{юг,j}=A_{окон}^{3,j}$
	- $A_{окон}^{запад,j}=A_{окон}^{4,j}$
	
- если `Восток`:
	  
	- $A_{окон}^{восток,j}=A_{окон}^{1,j}$
	- $A_{окон}^{юг,j}=A_{окон}^{2,j}$
	- $A_{окон}^{запад,j}=A_{окон}^{3,j}$
	- $A_{окон}^{север,j}=A_{окон}^{4,j}$
	
- если `Юг`:
	  
	- $A_{окон}^{юг,j}=A_{окон}^{1,j}$
	- $A_{окон}^{запад,j}=A_{окон}^{2,j}$
	- $A_{окон}^{север,j}=A_{окон}^{3,j}$
	- $A_{окон}^{восток,j}=A_{окон}^{4,j}$
	
- если `Запад`:
	  
	- $A_{окон}^{запад,j}=A_{окон}^{1,j}$
	- $A_{окон}^{север,j}=A_{окон}^{2,j}$
	- $A_{окон}^{восток,j}=A_{окон}^{3,j}$
	- $A_{окон}^{юг,j}=A_{окон}^{4,j}$
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.windows_area_by_direction.</summary>
    public class TeWindowsAreaByDirection : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.windows_area_by_direction";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeWindowsAreaTotal);
        public int Order => 250;
        public string Number => "";
        public string Name => "Площадь окон на стороне света $A_{окон}^d$ на стороне свет $d\\in[Север, Восток, Юг, Запад]$";

        public string Body => """"
`methodSectionId: te.windows_area_by_direction`

$$A_{окон}^d=\sum_j{A_{окон}^{d,j}}$$
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.doors_area_total.</summary>
    public class TeDoorsAreaTotal : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.doors_area_total";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeEnvelopeArea);
        public int Order => 260;
        public string Number => "";
        public string Name => "Общая площадь ворот $A_{ворот}$";

        public string Body => """"
`methodSectionId: te.doors_area_total`

$$A_{ворот}=\sum_{j}{A_{ворот}^{j}}$$

где $A_{ворот}^{j}$ - площадь ворот вида воротных проёмов $j$. Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.doors_area_by_type.</summary>
    public class TeDoorsAreaByType : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.doors_area_by_type";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeDoorsAreaTotal);
        public int Order => 270;
        public string Number => "";
        public string Name => "Площадь ворот $A_{ворот}^{j}$ вида воротных проёмов $j$";

        public string Body => """"
`methodSectionId: te.doors_area_by_type`

$$A_{ворот}^{j}=\sum_i{A_{ворот}^{i,j}}$$

где:

- $A_{ворот}^{i,j}$ - площадь ворот вида воротных проёмов $j$ на стороне $i$ здания. Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.doors_area_by_type_by_side.</summary>
    public class TeDoorsAreaByTypeBySide : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.doors_area_by_type_by_side";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeDoorsAreaTotal);
        public int Order => 280;
        public string Number => "";
        public string Name => "Площадь ворот $A_{ворот}^{i,j}$ вида воротных проёмов $j$ на стороне $i$ здания";

        public string Body => """"
`methodSectionId: te.doors_area_by_type_by_side`

$$A_{ворот}^{i,j}=a_{ворот}^{j}·N_{ворот}^{i,j}$$

где:

- $а_{ворот}^j$ - площадь одного проёма ворот вида воротных проёмов j. Исходные данные: характеристика вида воротных проёмов j модели ворот "Вид воротных проёмов. Площадь одного проёма".
- $N_{ворот}^{i,j}$ - количество ворот вида воротных проёмов j на стороне здания $i, (i\in[A..H])$. Исходные данные: характеристика j-го вида воротных проёмов модели ворот здания "Вид воротных проёмов. Количество на стороне A..H".

**Правила валидации:**

- $а_{ворот}^j>0$
- требования к $N_{ворот}^{i,j}$ в зависимости от `Форма и габариты. Форма здания`:
	
	- `Прямоугольная`:
		
		- если $i\in{[A..D]}$, то  ($N_{ворот}^{i,j}≥0$ ИЛИ ($N_{ворот}^{i,j}==null$, тогда $N_{ворот}^{i,j}=0$));
		- если $i\in{[E..H]}$, то  ($N_{ворот}^{i,j}==0$ ИЛИ $N_{ворот}^{i,j}==null$, тогда $N_{ворот}^{i,j}=0$);
		
	- `Г-образная`: 
		
		- если $i\in{[A..F]}$, то  ($N_{ворот}^{i,j}≥0$ ИЛИ ($N_{ворот}^{i,j}==null$, тогда $N_{ворот}^{i,j}=0$));
		- если $i\in{[G..H]}$, то  ($N_{ворот}^{i,j}==0$ ИЛИ $N_{ворот}^{i,j}==null$, тогда $N_{ворот}^{i,j}=0$);
		
	- `Обратная Г-образная`:
		
		- если $i\in{[A..F]}$, то  ($N_{ворот}^{i,j}≥0$ ИЛИ ($N_{ворот}^{i,j}==null$, тогда $N_{ворот}^{i,j}=0$));
		- если $i\in{[G..H]}$, то  ($N_{ворот}^{i,j}==0$ ИЛИ $N_{ворот}^{i,j}==null$, тогда $N_{ворот}^{i,j}=0$);
		
	- `П-образная`:
		
		- если $i\in{[A..H]}$, то  ($N_{ворот}^{i,j}≥0$ ИЛИ ($N_{ворот}^{i,j}==null$, тогда $N_{ворот}^{i,j}=0$)).
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.doors_area_by_side.</summary>
    public class TeDoorsAreaBySide : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.doors_area_by_side";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeDoorsAreaTotal);
        public int Order => 290;
        public string Number => "";
        public string Name => "Площадь ворот $A_{ворот}^i$ на стороне здания $i, (i\\in[A..H])$";

        public string Body => """"
`methodSectionId: te.doors_area_by_side`
$$A_{ворот}^i=\sum_j{A_{ворот}^{i,j}}$$
где: 

- $A_{ворот}^{i,j}$ - площадь ворот вида воротных проёмов $j$ на стороне здания $i, (i\in{A..H})$. Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.upper_enclosures_area.</summary>
    public class TeUpperEnclosuresArea : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.upper_enclosures_area";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeEnvelopeArea);
        public int Order => 300;
        public string Number => "";
        public string Name => "Общая площадь верхних ограждающих конструкций $A_{ВОК}$";

        public string Body => """"
`methodSectionId: te.upper_enclosures_area`

Способ расчёта общей площади верхних ограждающих конструкций $A_{ВОК}$ ($м^2$) зависит от формы здания (характеристика "Форма и габариты. Форма здания") и типа крыши ("Верхние ограждающие конструкции. Тип крыши"):

- если "Форма и габариты. Форма здания" = "Другая" ИЛИ "Верхние ограждающие конструкции. Тип крыши" $\notin{(Плоская, Двускатная, Односкатная, Четырёхскатная)}$: $A_{ВОК}=customUpperEnclosureArea$;
- иначе: $A_{ВОК}=A_{НП.Черд}+A_{ПК}$

где:
- `customUpperEnclosureArea` - площадь ВОК при произвольной форме здания, $м^2$. Исходные данные: характеристика "Верхние ограждающие конструкции. Площадь ВОК при произвольной форме здания, м²".
- $A_{НП.Черд}$ - площадь наружной поверхности наружных стен чердака, $м^2$. Расчётный параметр.
- $A_{ПК}$ - площадь покрытия крыши, $м^2$. Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.attic_wall_area.</summary>
    public class TeAtticWallArea : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.attic_wall_area";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeUpperEnclosuresArea);
        public int Order => 310;
        public string Number => "";
        public string Name => "Площадь наружной поверхности наружных стен чердака $A_{НП.Черд}$";

        public string Body => """"
`methodSectionId: te.attic_wall_area`

Способ расчёта площади наружной поверхности наружных стен чердака $A_{НП.Черд}, м^2$ зависит от формы здания (характеристика "Форма и габариты. Форма здания"), типа крыши ("Верхние ограждающие конструкции. Тип крыши"), наличия чердака ("Верхние ограждающие конструкции. Наличие чердака"):

- если "Верхние ограждающие конструкции. Наличие чердака" = "Да" И:
	- если "Верхние ограждающие конструкции. Тип крыши" = "Плоская": $A_{НП.Черд}=p_{стен}^{int}·(H-z_{ВП})$ (вариант: `flat`)
	- если "Верхние ограждающие конструкции. Тип крыши" = "Двускатная" И:
		- если "Форма и габариты. Форма здания" = "Прямоугольная", то $A_{НП.Черд}=L_B·(H-z_{ВП})$. (вариант: `gable_rect`)
		- если "Форма и габариты. Форма здания" = "Г-образная", то $A_{НП.Черд}=\frac{1}{2}·(L_C+L_F)·(H-z_{ВП})$. (вариант: `gable_l_shape`)
		- если "Форма и габариты. Форма здания" = "Обратная Г-образная", то $A_{НП.Черд}=\frac{1}{2}·(L_B+L_E)·(H-z_{ВП})$. (вариант: `gable_reverse_l_shape`)
		- если "Форма и габариты. Форма здания" = "П-образная", то $A_{НП.Черд}=\frac{1}{2}·(L_C+L_G)·(H-z_{ВП})$. (вариант: `gable_p_shape`)
	- если "Верхние ограждающие конструкции. Тип крыши" = "**Односкатная**":
		- если "Форма и габариты. Форма здания" = "Прямоугольная", то
		  $A_{НП.Черд}=(L_{A}+L_{B})·(H-z_{ВП})$ (вариант: `shed_rect`)
	- если "Верхние ограждающие конструкции. Тип крыши" = "**Четырехскатная вальмовая**":
		- если "Форма и габариты. Форма здания" = "Прямоугольная", то
		  $A_{НП.Черд}=0$ (вариант: `hipped_rect`)
	- если "Верхние ограждающие конструкции. Тип крыши" = "**Четырехскатная шатровая**":
		- если "Форма и габариты. Форма здания" = "Прямоугольная", то
		  $A_{НП.Черд}=0$ (вариант: `pyramidal_rect`)
- если "Верхние ограждающие конструкции. Наличие чердака" = "Нет": $A_{НП.Черд}=0$. (вариант: `no_attic`)

где:

- $p_{стен}^{int}$ - периметр внутренней поверхности наружных стен здания, м. Расчётный параметр.
- $L_A, L_B, L_C, L_D, L_E, L_F, L_G, L_H$ - размеры по габаритам здания A..H. Исходные данные: характеристики "Форма и габариты. Размер по габариту A..H".
- $z_{ВП}$ - уровень верхнего перекрытия, м. Исходные данные: характеристика "Верхние ограждающие конструкции. Уровень верхнего перекрытия".
- $H$ - Высота здания, м. Исходные данные: характеристика "Форма и габариты. Высота здания".

**Правила валидации:**

- `Наличие чердака`: задано (Да/Нет);
- `Тип крыши`: $\in{[Плоская, Двускатная, Односкатная, Четырехскатная вальмовая, Четырехскатная шатровая]}$;
- если `Наличие чердака` = Да:
	- $H>0$;
	- $z_{ВП}>0$ И $H > z_{ВП}$.
"""";

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

        public string[] Comments => new[]
        {
            "2026-08-19, CR «Расчёт площади ВОК для односкатной крыши»: правило валидации типа крыши расширено. Было «∈[Плоская, Двускатная]» — противоречило самому разделу, где уже описаны односкатная, вальмовая и шатровая крыши.",
        };
    }

    /// <summary>Секция методики: te.roof_cover_area.</summary>
    public class TeRoofCoverArea : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.roof_cover_area";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeUpperEnclosuresArea);
        public int Order => 320;
        public string Number => "";
        public string Name => "Площадь покрытия крыши $A_{ПК}$";

        public string Body => """"
`methodSectionId: te.roof_cover_area`

Способ расчёта площади покрытия крыши $A_{ПК}, м^2$ зависит от формы здания (характеристика "Форма и габариты. Форма здания") и типа крыши ("Верхние ограждающие конструкции. Тип крыши"):

- если "Верхние ограждающие конструкции. Тип крыши" = "Плоская", то $A_{ПК}=A_{осн}^{int}$. (вариант: `flat`)
- если "Верхние ограждающие конструкции. Тип крыши" = "**Односкатная**":
	- если "Форма и габариты. Форма здания" = "Прямоугольная", то $A_{ПК}=L_{max}·\sqrt{(L_{min}^2+(H-z_{ВП})^2)}$ (вариант: `shed_rect`), где:
		- $L_{max}= max(L_{A}, L_{B})$ - наибольшая сторона здания (при прямоугольной форме);
		- $L_{min}= min(L_{A}, L_{B})$ - наименьшая сторона здания (при прямоугольной форме);
- если "Верхние ограждающие конструкции. Тип крыши" = "Двускатная" И:
	- если "Форма и габариты. Форма здания" = "Прямоугольная", то $A_{ПК}=2·L_A·\sqrt{((H-z_{ВП})^2+(L_B/2)^2)}$. (вариант: `gable_rect`)
	- если "Форма и габариты. Форма здания" = "Г-образная", то $A_{ПК}=\frac{1}{2}·\Bigl[(3·L_A+L_E-L_C)·\sqrt{(H-z_{ВП})^2+(\frac{L_F}{2})^2}+(3·L_B+L_D-L_F)·\sqrt{(H-z_{ВП})^2+(\frac{L_C}{2})^2}\Bigr]$. (вариант: `gable_l_shape`)
	- если "Форма и габариты. Форма здания" = "Обратная Г-образная", то $A_{ПК}=\frac{1}{2}·\Bigl[(3·L_A+L_C-L_E)·\sqrt{(H-z_{ВП})^2+(\frac{L_B}{2})^2}+(3·L_F+L_D-L_E)·\sqrt{(H-z_{ВП})^2+(\frac{L_B}{2})^2}\Bigr]$. (вариант: `gable_reverse_l_shape`)
	- если "Форма и габариты. Форма здания" = "П-образная", то $A_{ПК}=\frac{1}{2}·\Bigl[(2·L_H+2·L_F)·\sqrt{(H-z_{ВП})^2+(\frac{L_G}{2})^2}+(2·L_A+2·L_E)·\sqrt{(H-z_{ВП})^2+(\frac{L_H-L_F}{2})^2}+(2·L_B+2·L_D)·\sqrt{(H-z_{ВП})^2+(\frac{L_C}{2})^2}\Bigr]$. (вариант: `gable_p_shape`).
- если "Верхние ограждающие конструкции. Тип крыши" = "**Четырехскатная вальмовая**":
	- если "Форма и габариты. Форма здания" = "Прямоугольная", то
	  $A_{ПК}=(L_{A}+L_{конька})·h_{трап}+L_{B}·h_{треуг}$ (вариант: `hipped_rect`), где:
		- $L_{конька}$ - длина конька крыши, $м$. Исходные данные "Верхние ограждающие конструкции. Длина конька".
		- $h_{трап}$ - наклонная высота трапеции продольного ската крыши, $м$. Расчётный параметр:  $h_{трап}=\sqrt{(H-z_{ВП})^2 + (L_{B}/2)^2}$.
		- $h_{треуг}$ - наклонная высота треугольника торцевого ската крыши, $м$. Расчётный параметр: $h_{треуг}=\sqrt{(H-z_{ВП})^2 + ((L_{A}-L_{конька})/2)^2}$.
- если "Верхние ограждающие конструкции. Тип крыши" = "**Четырехскатная шатровая**":
	- если "Форма и габариты. Форма здания" = "Прямоугольная", то
	  $A_{ПК}=L_{A}·h_{треуг}^{A}+L_{B}·h_{треуг}^{B}$ (вариант: `pyramidal_rect`), где:
		- $h_{треуг}^{A}$ - наклонная высота треугольника ската крыши на стороне здания $A$. Расчётный параметр: $h_{треуг}^{A}=\sqrt{(H-z_{ВП})^2 + (L_{B}/2)^2}$.
		- $h_{треуг}^{B}$ - наклонная высота треугольника ската крыши на стороне здания $B$. Расчётный параметр: $h_{треуг}^{B}=\sqrt{(H-z_{ВП})^2 + (L_{A}/2)^2}$.
где: 
- $A_{осн}^{int}$ - площадь внутренней поверхности основания здания, $м^2$. Расчётный параметр.
- $L_A, L_B, L_C, L_D, L_E, L_F, L_G, L_H$ - Исходные данные: размеры по габаритам здания A..H: характеристики "Форма и габариты. Размер по габариту A..H".
- $z_{ВП}$ - уровень верхнего перекрытия, м.  Исходные данные: Характеристика "Верхние ограждающие конструкции. Уровень верхнего перекрытия".
- $H$ - Высота здания, м.  Исходные данные: Характеристика "Форма и габариты. Высота здания".

**Правила валидации:**

- если `Тип крыши` = "Четырехскатная вальмовая", то $0 < L_{конька} < L_{A}$.

$L_{конька}$ — единственные исходные данные, валидируемые этой секцией: при других типах крыши она в расчёте не участвует. Остальные исходные данные провалидированы в смежных секциях (`te.attic_wall_area`: `Тип крыши`, `Наличие чердака`, $H$, $z_{ВП}$; `te.inner_wall_perimeter_by_side`: `Форма здания` и габариты $L_i$; $A_{осн}^{int}$ — расчётный параметр своей секции).
"""";

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

        public string[] Comments => new[]
        {
            "2026-08-31, CR «Расчёт площади ВОК для четырёхскатных крыш»: добавлено правило валидации длины конька для вальмовой крыши.",
        };
    }

    /// <summary>Секция методики: te.ground_contact_area.</summary>
    public class TeGroundContactArea : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.ground_contact_area";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeEnvelopeArea);
        public int Order => 330;
        public string Number => "";
        public string Name => "Общая площадь зоны контакта с грунтом $A_{ЗКГ}$";

        public string Body => """"
`methodSectionId: te.ground_contact_area`

Здание контактирует с грунтом стенами подвала, при наличии подвала, и полом основания. Общая площадь $A_{ЗКГ}$ зоны контакта с грунтом делится на 4-е зоны (1, 2, 3, 4) шириной $Δ_{зкг}=2 м$. Зоны располагаются параллельными стыку наружной стены и поверхности грунта и нумеруются в направлении от наружной стены к центру здания. При наличии подвала пол цоколя рассматривается как продолжение стены, то есть, начинаясь на стене подвала, любая из зон может продолжаться на полу. Так определяются зоны 1, 2 и 3, а остальная часть пола составляет зону 4.

**Общая площадь $A_{ЗКГ}$ :**

$$A_{ЗКГ}=\sum_z{A_{зкг}^z}$$

где:

- $A_{зкг}^z$ - площадь зоны $z$ контакта с грунтом,  $м^2$. Расчётный параметр.

**Правило валидации:**

- $A_{ЗКГ}=A_{СП}+A_{осн}^{int}$

где:

- $A_{СП}$ - Площадь внутренней поверхности наружных стен подвала, $м^2$. Расчётный параметр.
- $A_{осн}^{int}$ - Площадь внутренней поверхности основания здания, $м^2$. Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.ground_floor_area.</summary>
    public class TeGroundFloorArea : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.ground_floor_area";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeGroundContactArea);
        public int Order => 340;
        public string Number => "";
        public string Name => "Площадь внутренней поверхности основания здания $A_{осн}^{int}$";

        public string Body => """"
`methodSectionId: te.ground_floor_area`

Площадь внутренней поверхности основания здания $A_{осн}^{int}(м^2)$ зависит от формы здания (характеристика "Форма и габариты. Форма здания"):

- "Прямоугольная", то $A_{осн}^{int}=L_A^{int}·L_B^{int}$. (вариант: `rect`)
- "Г-образная", то $A_{осн}^{int}=L_A^{int}·L_F^{int}+L_C^{int}·L_D^{int}$. (вариант: `l_shape`)
- "Обратная Г-образная", то $A_{осн}^{int}=L_A^{int}·L_B^{int}+L_E^{int}·L_D^{int}$. (вариант: `reverse_l_shape`)
- "П-образная", то $A_{осн}^{int}=L_G^{int}·L_H^{int}+L_C^{int}·L_B^{int}+L_E^{int}·(L_H^{int}-L_F^{int})$. (вариант: `p_shape`)

где:

- $L_i^{int}$ - длина внутреннего контура наружных стен здания по стороне $i$, м. Расчётный параметр секции `te.inner_wall_perimeter_by_side`.

**Правила валидации:** собственных правил нет — форма здания и $L_i^{int}$ провалидированы в `te.inner_wall_perimeter_by_side`.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.basement_wall_area.</summary>
    public class TeBasementWallArea : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.basement_wall_area";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeGroundContactArea);
        public int Order => 350;
        public string Number => "";
        public string Name => "Площадь внутренней поверхности наружных стен подвала $A_{СП}$";

        public string Body => """"
`methodSectionId: te.basement_wall_area`

Площадь внутренней поверхности наружных стен подвала зависит от наличия подвала (характеристика "Зона контакта с грунтом. Наличие подвала"):

- если "Да", то $A_{СП}=p_{стен}^{int}·h_b$. (вариант: `with_basement`)
- если "Нет", то $A_{СП}=0$. (вариант: `no_basement`)

**Правила валидации:**

- если `Наличие подвала` = Да: $h_b > 0$;
- иначе $h_b == 0$ ИЛИ $h_b == null$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.ground_contact_zones_area.</summary>
    public class TeGroundContactZonesArea : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.ground_contact_zones_area";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeGroundContactArea);
        public int Order => 360;
        public string Number => "";
        public string Name => "Площадь зоны $z$ контакта с грунтом:";

        public string Body => """"
`methodSectionId: te.ground_contact_zones_area`

$$A_{зкг}^{z}=A_{стен.п}^{z}+A_{осн.п}^{z}$$

где:

- $A_{стен.п}^{z}$ - площадь зоны $z$ контакта с грунтом стен подвала, $м^2$. Расчётный параметр.
- $A_{осн.п}^{z}$ - площадь зоны $z$ контакта с грунтом основания подвала, $м^2$. Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики.</summary>
    public class TtrPloschadAStenPZZonyZKontaktaSGruntomStenPodvala : ISdaidDocumentSection
    {
        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeGroundContactArea);
        public int Order => 370;
        public string Number => "";
        public string Name => "Площадь $A_{стен.п}^{z}$ зоны $z$ контакта с грунтом стен подвала:";

        public string Body => """"
$$A_{стен.п}^{z}=p_{стен}^{int}·δ_{стен.п}^{z}$$

где:

- $p_{стен}^{int}$  - периметр внутренней поверхности наружных стен здания, м. Расчётный параметр.
- $δ_{стен.п}^{z}$ - ширина зоны $z$ контакта с грунтом стенам подвала, м. Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики.</summary>
    public class TtrShirinaZonyZKontaktaSGruntomΔStenPZStenamPodvala : ISdaidDocumentSection
    {
        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeGroundContactArea);
        public int Order => 380;
        public string Number => "";
        public string Name => "Ширина зоны $z$ контакта с грунтом $δ_{стен.п}^{z}$ стенам подвала:";

        public string Body => """"
- если $z·Δ_{зкг} ≤ h_b$:
	
	- $δ_{стен.п}^{z}=Δ_{зкг}$;
	
- иначе:
	
	- если $z·Δ_{зкг} ≤ h_b + Δ_{зкг}$:
		
		- $δ_{стен.п}^{z}=h_b-Δ_{зкг} · (z-1)$;
		
	- иначе:
		
		- $δ_{стен.п}^{z}=0$;

- $h_b$ - высота потолка подвала, м. Исходные данные: характеристика "Зона контакта с грунтом. Высота потолка подвала".
- $Δ_{зкг}$ - эталонная ширина зоны контакта с грунтом, м. Принимается равной 2 м.

**Правила валидации:**

- если `Наличие подвала` = Да: $h_b > 0$;
- иначе $h_b == 0$ ИЛИ $h_b == null$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики.</summary>
    public class TtrPloschadAOsnPZZonyZKontaktaSGruntomOsnovaniyaPodvala : ISdaidDocumentSection
    {
        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeGroundContactArea);
        public int Order => 390;
        public string Number => "";
        public string Name => "Площадь $A_{осн.п}^{z}$ зоны $z$ контакта с грунтом основания подвала:";

        public string Body => """"
- если $z·Δ_{зкг} ≤ h_b$:
	
	- $A_{осн.п}^{z}=0$;
	
- иначе:

$$A_{осн.п}^{z}=A_{осн.п}^{z,ext}-A_{осн.п}^{z,int}$$

где:

- $A_{осн.п}^{z,ext}$ - площадь основания подвала по внешнему контуру зоны $z$, $м^2$. Расчётный параметр.
- $A_{осн.п}^{z,int}$ - площадь основания подвала по внутреннему контуру зоны $z$, $м^2$. Расчётный параметр.
- $h_b$ - высота потолка подвала, м. Исходные данные: характеристика "Зона контакта с грунтом. Высота потолка подвала".
- $Δ_{зкг}$ - эталонная ширина зоны контакта с грунтом, м. Принимается равной 2 м.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики.</summary>
    public class TtrPloschadiOsnovaniyaPodvalaPoVneshnemuAOsnPZExtIVnutrennemAOs : ISdaidDocumentSection
    {
        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeGroundContactArea);
        public int Order => 400;
        public string Number => "";
        public string Name => "Площади основания подвала по внешнему $A_{осн.п}^{z,ext}$ и внутреннем $A_{осн.п}^{z,int}$ контуру зоны $z$";

        public string Body => """"
Площади основания подвала по внешнему $A_{осн.п}^{z,ext}$ и внутреннем $A_{осн.п}^{z,int}$ контуру зоны $z$ определяются в зависимости от `Форма и габариты. Форма здания`:

- `Прямоугольная` (вариант: `rect`):
	
	- $A_{осн.п}^{z,ext}=L_A^{z,ext}·L_B^{z,ext}$;
	- $A_{осн.п}^{z,int}=L_A^{z,int}·L_B^{z,int}$;
	
- `Г-образная` (вариант: `l_shape`): 
	
	- $A_{осн.п}^{z,ext}=L_A^{z,ext}·L_F^{z,ext}+L_C^{z,ext}·L_D^{z,ext}$;
	- $A_{осн.п}^{z,int}=L_A^{z,int}·L_F^{z,int}+L_C^{z,int}·L_D^{z,int}$
	
- `Обратная Г-образная` (вариант: `reverse_l_shape`): 
	
	- $A_{осн.п}^{z,ext}=L_A^{z,ext}·L_B^{z,ext}+L_E^{z,ext}·L_D^{z,ext}$;
	- $A_{осн.п}^{z,int}=L_A^{z,int}·L_B^{z,int}+L_E^{z,int}·L_D^{z,int}$
	
- `П-образная` (вариант: `p_shape`): 
	
	- $A_{осн.п}^{z,ext}=L_G^{z,ext}·L_H^{z,ext}+L_C^{z,ext}·L_B^{z,ext}+L_E^{z,ext}·(L_H^{z,ext}-L_F^{z,ext})$;
	- $A_{осн.п}^{z,int}=L_G^{z,int}·L_H^{z,int}+L_C^{z,int}·L_B^{z,int}+L_E^{z,int}·(L_H^{z,int}-L_F^{z,int})$.

где:

- $L_i^{z,ext}$ - длина внешнего контура зоны $z$ основания подвала по стороне здания $i$, м. Расчётный параметр.
- $L_i^{z,int}$ - длина внутреннего контура зоны $z$ основания подвала по стороне здания $i$, м. Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики.</summary>
    public class TtrDlinyLIZExtVneshnegoILIZIntVnutrennegoKonturovZonyZOsnovaniy : ISdaidDocumentSection
    {
        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeGroundContactArea);
        public int Order => 410;
        public string Number => "";
        public string Name => "Длины $L_i^{z,ext}$ внешнего и $L_i^{z,int}$ внутреннего контуров зоны $z$ основания подвала по стороне здания $i$";

        public string Body => """"
- если $z·Δ_{зкг} > h_b$;
	
	- если ($z·Δ_{зкг} ≤ h_b + Δ_{зкг}$):
		
		- $L_i^{z,ext}=L_i$;
		- $δ_{осн.п}^{z}=Δ_{зкг}·z-h_b$;
		
	- иначе:
		
		- $L_i^{z,ext}=L_i^{z-1,int}$
		- $δ_{осн.п}^{z}=Δ_{зкг}$;
		
	- $L_i^{z,int}$:
		
		- если ($L_i^{z,ext}-(k_i^{ext}-k_i^{int})·δ_{осн.п}^{z}>0$) И ($z<4$):
			- $L_i^{z,int}=L_i^{z,ext}-(k_i^{ext}-k_i^{int})·δ_{осн.п}^{z}$
		- иначе:
			- $L_i^{z,int}=0$
	
- иначе:
	
	- $L_i^{z,ext}=0$;
	- $L_i^{z,int}=0$
	- $δ_{осн.п}^{z}=0$;

где:

- $h_b$ - высота потолка подвала, м. Исходные данные: характеристика "Зона контакта с грунтом. Высота потолка подвала".
- $Δ_{зкг}$ - эталонная ширина зоны контакта с грунтом, м. Принимается равной 2 м.
- $k_i^{ext}$ - количество внешних углов по стороне здания $i$. Расчётный параметр.
- $k_i^{int}$ - количество внутренних углов по стороне здания $i$. Расчётный параметр.
- $Δ_{зкг}$ - эталонная ширина зоны контакта с грунтом, м. Принимается равной 2 м.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.envelope_thermal_resistance.</summary>
    public class TeEnvelopeThermalResistance : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.envelope_thermal_resistance";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TtrMetodikaRascheta);
        public int Order => 420;
        public string Number => "";
        public string Name => "Приведенное сопротивление теплопередаче теплозащитной оболочки здания $R_o^{пр}$";

        public string Body => """"
`methodSectionId: te.envelope_thermal_resistance`

$$R_o^{пр}=\frac{A_{НОК}}{(\frac{A_{ВП.Стен}}{R_{стен}^{пр}}+\frac{А_{окон}}{R_{окон}^{пр}}+\frac{А_{ворот}}{R_{ворот}^{пр}}+\frac{А_{ВОК}}{R_{ВОК}^{пр}}+\frac{А_{ЗКГ}}{R_{ЗКГ}^{пр}})}$$

где:

- $R_{стен}^{пр}$ - Приведенное сопротивление теплопередаче стен, $м^2·°С/Вт$. Расчётный параметр.
- $R_{окон}^{пр}$ - Приведенное сопротивление теплопередаче окон, $м^2·°С/Вт$. Расчётный параметр.
- $R_{ворот}^{пр}$ - Приведенное сопротивление теплопередаче ворот, $м^2·°С/Вт$. Расчётный параметр.
- $R_{ВОК}^{пр}$ - Приведенное сопротивление теплопередаче верхних ограждающих конструкций, $м^2·°С/Вт$. Расчётный параметр.
- $R_{ЗКГ}^{пр}$ - Приведенное сопротивление теплопередаче зоны контакта с грунтом, $м^2·°С/Вт$. Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.wall_thermal_resistance.</summary>
    public class TeWallThermalResistance : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.wall_thermal_resistance";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeEnvelopeThermalResistance);
        public int Order => 430;
        public string Number => "";
        public string Name => "Приведенное сопротивление теплопередаче стен $R_{стен}^{пр}$";

        public string Body => """"
`methodSectionId: te.wall_thermal_resistance`

$$R_{стен}^{пр}=0.1584+δ_{w0}^m/λ_{w0}+δ_{w1}^m/λ_{w1} +δ_{w2}^m/λ_{w2}$$

где: 

- $λ_{w0}, λ_{w1}, λ_{w2}$ - теплопроводность несущего слоя, основного утеплителя, дополнительного утеплителя стен соответственно, $Вт/(м*К)$. Справочное значение теплопроводности материала/утеплителя, выбранного в свойстве "Стены. Материал несущего слоя/основного утеплителя/дополнительного утеплителя".
- $δ_{w0}^m, δ_{w1}^m, δ_{w2}^m$ - толщина несущего слоя, основного утеплителя, дополнительного утеплителя стен соответственно, м. Расчётные параметры: $δ_{w0}^m=δ_{w0}/1000$, $δ_{w1}^m=δ_{w1}/1000$. $δ_{w2}^m=δ_{w2}/1000$, где $δ_{w0}, δ_{w1}, δ_{w2}$ - толщина несущего слоя, основного утеплителя, дополнительного утеплителя стен соответственно, мм. Характеристика "Стены. Толщина несущего слоя/основного утеплителя/дополнительного утеплителя".

**Правила валидации:**

- $λ_{w0} > 0$;
- если основной утеплитель есть (`Walls.HasMainInsulation` = Да): $λ_{w1} > 0$;
- если дополнительный утеплитель есть (`Walls.HasAdditionalInsulation` = Да): $λ_{w2} > 0$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.window_thermal_resistance.</summary>
    public class TeWindowThermalResistance : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.window_thermal_resistance";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeEnvelopeThermalResistance);
        public int Order => 440;
        public string Number => "";
        public string Name => "Приведенное сопротивление теплопередаче окон $R_{окон}^{пр}$";

        public string Body => """"
`methodSectionId: te.window_thermal_resistance`

- Если $A_{окон}>0$:
$$R_{окон}^{пр}=\frac{A_{окон}}{\sum_j{\frac{A_{окон}^j}{r_{окон}^{транс, j}}}}$$
- иначе $R_{окон}^{пр}=0$.

где:

- $A_{окон}$ - Общая площадь окон $A_{окон}$. Расчётный параметр.
- $A_{окон}^j$ - площадь окон вида остекления проёмов j. Расчётный параметр
- $r_{окон}^{транс, j}$ - Сопротивление теплопередаче j-го вида остекления оконных проёмов, м²·°С/Вт. Исходные данные: характеристика j-го вида остекления оконных проёмов "Вид остекления оконных проёмов. Сопротивление теплопередаче".

**Правила валидации:**

- для каждого вида остекления $j$: $r_{окон}^{транс, j} > 0$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.door_thermal_resistance.</summary>
    public class TeDoorThermalResistance : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.door_thermal_resistance";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeEnvelopeThermalResistance);
        public int Order => 450;
        public string Number => "";
        public string Name => "Приведенное сопротивление теплопередаче ворот $R_{ворот}^{пр}$";

        public string Body => """"
`methodSectionId: te.door_thermal_resistance`

- Если $A_{ворот}>0$:
$$R_{ворот}^{пр}=\frac{A_{ворот}}{\sum_j{\frac{A_{ворот}^j}{r_{ворот}^{транс, j}}}}$$
- иначе $R_{ворот}^{пр}=0$.

где:

- $A_{ворот}$ - Общая площадь ворот $A_{ворот}$. Расчётный параметр.
- $A_{ворот}^j$ - площадь ворот вида воротных проёмов j. Расчётный параметр.
- $r_{ворот}^{транс, j}$ - Сопротивление теплопередаче j-го вида воротных проёмов, м²·°С/Вт. Исходные данные: характеристика j-го вида воротных проёмов "Вид остекления оконных проёмов. Сопротивление теплопередаче".

**Правила валидации:**

- для каждого вида воротных проёмов $j$: $r_{ворот}^{транс, j} > 0$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.upper_enclosures_thermal_resistance.</summary>
    public class TeUpperEnclosuresThermalResistance : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.upper_enclosures_thermal_resistance";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeEnvelopeThermalResistance);
        public int Order => 460;
        public string Number => "";
        public string Name => "Приведенное сопротивление теплопередаче верхних ограждающих конструкций $R_{ВОК}^{пр}$";

        public string Body => """"
`methodSectionId: te.upper_enclosures_thermal_resistance`

$$R_{ВОК}^{пр}=0.1584+δ_{c0}^m/λ_{c0}+δ_{c1}^m/λ_{c1} +δ_{g1}^m/λ_{g1}$$

где: 

- $λ_{c0}, λ_{c1}, λ_{g1}$ - теплопроводность несущего слоя верхнего перекрытия, утеплителя верхнего перекрытия, утеплителя поверхности крыши соответственно, $Вт/(м*К)$. Справочное значение теплопроводности материала/утеплителя, выбранного в свойстве "Верхние ограждающие конструкции. Материал/Утеплитель несущего слоя верхнего перекрытия, утеплителя верхнего перекрытия, утеплителя поверхности крыши".
- $δ_{c0}^m, δ_{c1}^m, δ_{g1}^m$ - толщина несущего слоя верхнего перекрытия, утеплителя верхнего перекрытия, утеплителя поверхности крыши соответственно, м. Расчётные параметры: $δ_{c0}^m=δ_{с0}/1000$, $δ_{c1}^m=δ_{c1}/1000$. $δ_{g1}^m=δ_{g1}/1000$, где $δ_{c0}, δ_{c1}, δ_{g1}$ - толщина несущего слоя верхнего перекрытия, утеплителя верхнего перекрытия, утеплителя поверхности крыши соответственно, мм. Характеристика "Верхние ограждающие конструкции. Толщина несущего слоя верхнего перекрытия, утеплителя верхнего перекрытия, утеплителя поверхности крыши".

**Правила валидации:**

- $δ_{c0} > 0$ И $λ_{c0} > 0$;
- задано `Roof.HasFloorInsulation` (Да/Нет):
	- если `Roof.HasFloorInsulation` = Да: $δ_{c1} > 0$ И $λ_{c1} > 0$;
	- если `Roof.HasFloorInsulation` = Нет: $δ_{c1}$ должно быть `null` или 0, тогда $δ_{c1}^m = 0$ И  $λ_{c1}=1$ ;
- задано `Roof.HasRoofInsulation` (Да/Нет):
	- если `Roof.HasRoofInsulation` = Да: $δ_{g1} > 0$ И $λ_{g1} > 0$;
	- если `Roof.HasRoofInsulation` = Нет: $δ_{g1}$ должно быть `null` или 0, тогда $δ_{g1}^m = 0$  И  $λ_{g1}=1$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.ground_contact_thermal_resistance.</summary>
    public class TeGroundContactThermalResistance : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.ground_contact_thermal_resistance";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeEnvelopeThermalResistance);
        public int Order => 470;
        public string Number => "";
        public string Name => "Приведенное сопротивление теплопередаче зоны контакта с грунтом $R_{ЗКГ}^{пр}$";

        public string Body => """"
`methodSectionId: te.ground_contact_thermal_resistance`

$$R_{ЗКГ}^{пр}=\frac{A_{ЗКГ}}{A_{ЗКГ}^I/R_{ЗКГ}^I+A_{ЗКГ}^{II}/R_{ЗКГ}^{II}+A_{ЗКГ}^{III}/R_{ЗКГ}^{III}+A_{ЗКГ}^{IV}/R_{ЗКГ}^{IV}}$$

где:

- $A_{ЗКГ}$ - Площадь зоны контакта с грунтом, $м^2$. Расчётный параметр.
- $A_{ЗКГ}^{I}, A_{ЗКГ}^{II}, A_{ЗКГ}^{III}, A_{ЗКГ}^{IV}$ - Площади зон контакта с грунтом I..IV, $м^2$. Расчётные параметры.
- $R_{ЗКГ}^{I}, R_{ЗКГ}^{II}, R_{ЗКГ}^{III}, R_{ЗКГ}^{IV}$ - Приведенное сопротивление теплопередаче зон контакта с грунтом I..IV, $м^2·˚С/Вт$. Исходные данные - Справочное значение из справочника "Коэффициенты ТТР"
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.spec_ventilation_char.</summary>
    public class TeSpecVentilationChar : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.spec_ventilation_char";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TtrMetodikaRascheta);
        public int Order => 480;
        public string Number => "";
        public string Name => "Удельная вентиляционная характеристика здания $k_{вент}$";

        public string Body => """"
`methodSectionId: te.spec_ventilation_char`

$$k_{вент}=0,28·c·(L_{вент}·n_{вент}·(1-k_{эф})+G^{инф}·n_{инф})/(168·V_h)$$

где:

- $c$ - Удельная теплоёмкость воздуха, кДж/(кг·°С). Исходные данные - справочное значение из справочника "Коэффициенты ТТР".
- $L_{вент}$ — Количество приточного воздуха в здание, м³/ч. Расчётный параметр секции `te.vent_amount`.
- $n_{вент}$ - Число часов работы механической вентиляции в течение недели, ч. Расчётный параметр секции `te.vent_hours`.
- $k_{эф}$ — коэффициент эффективности рекуператора. Расчётный параметр секции `te.recuperator_efficiency`.
- $G^{инф}$ - Количество инфильтрующегося воздуха в здание, кг/ч. Расчётный параметр секции `te.infiltration_air_amount`.
- $n_{инф}$ - Число часов учёта инфильтрации в течение недели, ч. Расчётный параметр секции `te.infiltration_hours`.
- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные - характеристика "Форма и габариты. Объём отапливаемый".

**Правила валидации:** собственных правил нет — все исходные данные провалидированы в смежных секциях ($V_h$ — `te.spec_heat_protect_char`).
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.vent_amount.</summary>
    public class TeVentAmount : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.vent_amount";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecVentilationChar);
        public int Order => 490;
        public string Number => "";
        public string Name => "Количество приточного воздуха в здание $L_{вент}$";

        public string Body => """"
`methodSectionId: te.vent_amount`

$$L_{вент} = l_{вент} \cdot n_p$$

где:

- $l_{вент}$ - Удельный расход приточного воздуха на одного человека, м³/(чел.·ч). Исходные данные - справочное значение "Удельный расход воздуха" для назначения здания «Условия эксплуатации. Назначение здания» из справочника "Назначения зданий".
- $n_p$ — Численность персонала, чел. Исходные данные - характеристика "Условия эксплуатации. Количество рабочих мест".

**Правила валидации:**

- $l_{вент} > 0$;
- $n_p \ge 0$ (значение 0 допустимо — даёт $L_{вент} = 0$).
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.vent_hours.</summary>
    public class TeVentHours : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.vent_hours";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecVentilationChar);
        public int Order => 500;
        public string Number => "";
        public string Name => "Число часов работы механической вентиляции $n_{вент}$";

        public string Body => """"
`methodSectionId: te.vent_hours`

- если "Вентиляция. Наличие рекуператора" = "Да": $n_{вент} = 0$ (вариант: `with_recuperator`);
- если "Вентиляция. Наличие рекуператора" = "Нет": $n_{вент} = 168$ (вариант: `without_recuperator`).

**Правила валидации:**

- задано `Ventilation.HasRecuperator` (Да/Нет).
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.recuperator_efficiency.</summary>
    public class TeRecuperatorEfficiency : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.recuperator_efficiency";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecVentilationChar);
        public int Order => 510;
        public string Number => "";
        public string Name => "Коэффициент эффективности рекуператора $k_{эф}$";

        public string Body => """"
`methodSectionId: te.recuperator_efficiency`

- если "Вентиляция. Наличие рекуператора" = "Да": $k_{эф}$ = "Вентиляция. Коэффициент эффективности рекуператора" (вариант: `from_input`);
- если "Вентиляция. Наличие рекуператора" = "Нет": $k_{эф} = 0$ (вариант: `zero_without_recuperator`).

**Правила валидации:**

- задано `Ventilation.HasRecuperator` (Да/Нет);
- если `Ventilation.HasRecuperator` = Да: $0 < k_{эф} \le 1$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.infiltration_hours.</summary>
    public class TeInfiltrationHours : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.infiltration_hours";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecVentilationChar);
        public int Order => 520;
        public string Number => "";
        public string Name => "Число часов учёта инфильтрации $n_{инф}$";

        public string Body => """"
`methodSectionId: te.infiltration_hours`

- если "Вентиляция. Наличие рекуператора" = "Да": $n_{инф} = 168$ (вариант: `with_recuperator`);
- если "Вентиляция. Наличие рекуператора" = "Нет": $n_{инф} = 0$ (вариант: `without_recuperator`).

**Правила валидации:**

- задано `Ventilation.HasRecuperator` (Да/Нет).
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.infiltration_air_amount.</summary>
    public class TeInfiltrationAirAmount : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.infiltration_air_amount";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecVentilationChar);
        public int Order => 530;
        public string Number => "";
        public string Name => "Количество инфильтрующегося воздуха в здание $G^{инф}$";

        public string Body => """"
`methodSectionId: te.infiltration_air_amount`

Количество инфильтрующегося воздуха в здание $G^{инф}$ (кг/ч) определяется как сумма по видам остекления и воротных проёмов:

$$G^{инф}=\sum_j{G_{окон}^{инф, j}}+\sum_j{G_{ворот}^{инф, j}}$$

где:

- $G_{окон}^{инф, j}$ — количество инфильтрующегося воздуха через окна j-го вида остекления проёмов, кг/ч. Расчётный параметр.
- $G_{ворот}^{инф, j}$ — количество инфильтрующегося воздуха через ворота j-го вида воротных проёмов, кг/ч. Расчётный параметр.

**Правила валидации:** собственных правил нет — все слагаемые провалидированы в своих секциях.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.window_infiltration_air_amount.</summary>
    public class TeWindowInfiltrationAirAmount : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.window_infiltration_air_amount";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeInfiltrationAirAmount);
        public int Order => 540;
        public string Number => "";
        public string Name => "Количество инфильтрующегося воздуха через окна j-го вида остекления $G_{окон}^{инф, j}$";

        public string Body => """"
`methodSectionId: te.window_infiltration_air_amount`

$$G_{окон}^{инф, j}=(A_{окон}^j/R_{окон}^{инф, j})\cdot(\Delta p/10)^{(2/3)}$$

где:

- $A_{окон}^j$ — суммарная площадь окон j-го вида остекления проёмов, м². Расчётный параметр.
- $R_{окон}^{инф, j}$ — сопротивление воздухопроницанию окон j-го вида остекления, м²·ч/кг. Расчётный параметр.
- $\Delta p$ — разность давлений наружного и внутреннего воздуха, Па. Расчётный параметр.

**Правила валидации:** собственных правил нет — все слагаемые провалидированы в своих секциях.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.door_infiltration_air_amount.</summary>
    public class TeDoorInfiltrationAirAmount : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.door_infiltration_air_amount";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeInfiltrationAirAmount);
        public int Order => 550;
        public string Number => "";
        public string Name => "Количество инфильтрующегося воздуха через ворота j-го вида воротных проёмов $G_{ворот}^{инф, j}$";

        public string Body => """"
`methodSectionId: te.door_infiltration_air_amount`

$$G_{ворот}^{инф, j}=(A_{ворот}^j/R_{ворот}^{инф, j})\cdot(\Delta p/10)^{(1/2)}$$[^1]

где:

- $A_{ворот}^j$ — суммарная площадь ворот j-го вида воротных проёмов, м². Расчётный параметр.
- $R_{ворот}^{инф, j}$ — сопротивление воздухопроницанию ворот j-го вида воротных проёмов, м²·ч/кг. Расчётный параметр.
- $\Delta p$ — разность давлений наружного и внутреннего воздуха, Па. Расчётный параметр.

**Правила валидации:** собственных правил нет — все слагаемые провалидированы в своих секциях.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.windows_air_permeability_resistance.</summary>
    public class TeWindowsAirPermeabilityResistance : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.windows_air_permeability_resistance";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecVentilationChar);
        public int Order => 560;
        public string Number => "";
        public string Name => "Сопротивление воздухопроницанию окон";

        public string Body => """"
`methodSectionId: te.windows_air_permeability_resistance`

Сопротивление воздухопроницанию окон j-го вида остекления $R_{окон}^{инф, j}$ , $м^2·ч/кг$, определяется по формулам:

$$R_{окон}^{инф, j} = 1/g_{окон}^{инф, j}\cdot(\Delta p/10)^{(2/3)}$$

где:

- $g_{окон}^{инф, j}$ — воздухопроницаемость окон j-го вида остекления при $\Delta p=10$ Па, кг/(м²·ч). Исходные данные: справочное значение воздухопроницаемости для вида остекления, выбранного в характеристике j-го вида остекления проёмов модели окон "Вид остекления проёмов. Вид остекления".
- $\Delta p$ — разность давлений наружного и внутреннего воздуха, Па. Расчётный параметр.

**Правила валидации:**

- для каждого вида остекления $j$: $g_{окон}^{инф, j} > 0$;
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.doors_air_permeability_resistance.</summary>
    public class TeDoorsAirPermeabilityResistance : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.doors_air_permeability_resistance";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecVentilationChar);
        public int Order => 570;
        public string Number => "";
        public string Name => "Сопротивление воздухопроницанию ворот";

        public string Body => """"
`methodSectionId: te.doors_air_permeability_resistance`

Сопротивление воздухопроницанию ворот j-го вида воротных проёмов $R_{ворот}^{инф, j}$, $м^2·ч/кг$, определяется по формулам:

$$R_{ворот}^{инф, j} = 1/g_{ворот}^{инф, j}\cdot(\Delta p/10)^{(2/3)}$$

где:

- $g_{ворот}^{инф, j}$ — воздухопроницаемость ворот j-го вида воротных проёмов при $\Delta p=10$ Па, кг/(м²·ч). Исходные данные: справочное значение воздухопроницаемости для вида ворот, выбранного в характеристике j-го вида воротных проёмов модели ворот "Вид воротных проёмов. Вид ворот".
- $\Delta p$ — разность давлений наружного и внутреннего воздуха, Па. Расчётный параметр.

**Правила валидации:**

- для каждого вида воротных проёмов $j$: $g_{ворот}^{инф, j} > 0$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.pressure_difference.</summary>
    public class TePressureDifference : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.pressure_difference";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecVentilationChar);
        public int Order => 580;
        public string Number => "";
        public string Name => "Разность давлений наружного и внутреннего воздуха";

        public string Body => """"
`methodSectionId: te.pressure_difference`

Разность давлений наружного и внутреннего воздуха $∆p$ (Па) определяется по формуле:

$$∆p=0.55·H·(γ_н - γ_в)+0.03·γ_н·v^2$$

где:

- $H$ — высота здания, м. Исходные данные: характеристика "Форма и габариты. Высота здания".
- $γ_н$ и $γ_в$ — соответственно удельный вес наружного и внутреннего воздуха, Н/м3. Расчётные параметры.
- $v$ — скорость ветра, м/с. Исходные данные: характеристика "Условия отопительного периода. Скорость ветра".

**Правила валидации:**

- $H > 0$;
- $v \ge 0$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.air_specific_weight.</summary>
    public class TeAirSpecificWeight : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.air_specific_weight";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecVentilationChar);
        public int Order => 590;
        public string Number => "";
        public string Name => "Удельный вес наружного и внутреннего воздуха";

        public string Body => """"
`methodSectionId: te.air_specific_weight`

Удельный вес наружного $γ_н$ и внутреннего $γ_в$ воздуха (Н/м3) определяются по формулам:

$$γ_н=3463/(273+t_{ext})$$
$$γ_в=3463/(273+t_{int})$$

где:

- $t_{int}$ - температура внутреннего воздуха, °C. Исходные данные: "Условия эксплуатации. Средняя температура воздуха за ОП".
- $t_{ext}$ — температура наружного воздуха, °C. Исходные данные: "Условия отопительного периода. Средняя температура наружного воздуха".

**Правила валидации:**

- $t_{int} \in [-50; 50]$ °C;
- $t_{ext} \in [-50; 50]$ °C.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.spec_internal_heat_gain_char.</summary>
    public class TeSpecInternalHeatGainChar : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.spec_internal_heat_gain_char";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TtrMetodikaRascheta);
        public int Order => 600;
        public string Number => "";
        public string Name => "Удельная характеристика внутренних теплопоступлений здания $k_{быт}$";

        public string Body => """"
`methodSectionId: te.spec_internal_heat_gain_char`

$$k_{быт} = q_{быт}·A_h / (V_h·(t_{int} - t_{ext}))$$

где:

- $q_{быт}$ - Удельные бытовые теплопоступления, $Вт/м^2$. Расчётный параметр секции `te.internal_heat_gain_energy`.
- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные - характеристика "Форма и габариты. Объём отапливаемый".
- $A_h$ - отапливаемая площадь здания, $м^2$. Исходные данные - характеристика "Форма и габариты. Площадь отапливаемая".
- $t_{int}$ — температура внутреннего воздуха, °C. Исходные данные: "Условия эксплуатации. Средняя температура воздуха за ОП".
- $t_{ext}$ — температура наружного воздуха, °C. Исходные данные: "Условия отопительного периода. Средняя температура наружного воздуха".

**Правила валидации:**

- $t_{int} \in [-50; 50]$ °C;
- $t_{ext} \in [-50; 50]$ °C;
- $t_{int} > t_{ext}$ (защита знаменателя $V_h \cdot (t_{int} - t_{ext})$ от 0/отрицательного значения).
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.internal_heat_gain_energy.</summary>
    public class TeInternalHeatGainEnergy : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.internal_heat_gain_energy";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecInternalHeatGainChar);
        public int Order => 610;
        public string Number => "";
        public string Name => "Удельные бытовые теплопоступления $q_{быт}$";

        public string Body => """"
`methodSectionId: te.internal_heat_gain_energy`

$$q_{быт}=((90·n_p + 10 + 1000·P_{light})/A_h)·45 / 168, Вт/м^2$$

где:

- $A_h$ - отапливаемая площадь здания, $м^2$. Исходные данные - характеристика "Форма и габариты. Площадь отапливаемая".
- $n_p$ — Численность персонала, чел. Исходные данные - характеристика "Условия эксплуатации. Количество рабочих мест".
- $P_{light}$ - установленная мощность осветительных приборов модели освещения, $кВт$. Расчётный параметр секции `ee.lighting_model_totals`.

**Правила валидации:**

- $A_h > 0$ (защита знаменателя формулы).

$n_p$ валидируется в секции `te.vent_amount` ($\ge 0$); $P_{light}$ — в секциях `ee.lighting_kind_power` и `ee.lighting_model_totals`; здесь не дублируется.
"""";

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

        public string[] Comments => new[]
        {
            "2026-08-28, CR «Смена показателя бытовых тепловыделений на удельный»: показатель перестал быть энергией за отопительный период (тыс. кВт·ч) и стал удельной величиной (Вт/м²). Изменены наименование, обозначение ($Q_{быт}$ → $q_{быт}$), единица измерения и формула. Из формулы ушли $z_{ht}$ и $t_{работы}$, добавилась $P_{light}$ из раздела расчёта по электричеству.",
        };
    }

    /// <summary>Секция методики: te.spec_solar_gain_char.</summary>
    public class TeSpecSolarGainChar : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.spec_solar_gain_char";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TtrMetodikaRascheta);
        public int Order => 620;
        public string Number => "";
        public string Name => "Удельная характеристика теплопоступлений в здание от солнечной радиации $k_{рад}$";

        public string Body => """"
`methodSectionId: te.spec_solar_gain_char`

$$k_{рад}=Q_{рад}/(V_h·D_d ), Вт/(м³·°C)$$

где:

- $Q_{рад}$ - Энергия теплопоступлений от солнечной радиации за отопительный период, кВт·ч. Расчётный параметр секции `te.solar_gain_energy`.
- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные - характеристика "Форма и габариты. Объём отапливаемый".
- $D_d$ - Градусо‑сутки отопительного периода, °C·сут. Расчётный параметр секции `te.heating_degree_days`.

**Правила валидации:** собственных правил нет — все слагаемые провалидированы в смежных секциях ($V_h$ — `te.spec_heat_protect_char`).
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.solar_gain_energy.</summary>
    public class TeSolarGainEnergy : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.solar_gain_energy";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecSolarGainChar);
        public int Order => 630;
        public string Number => "";
        public string Name => "Энергия теплопоступлений от солнечной радиации за отопительный период $Q_{рад}$";

        public string Body => """"
`methodSectionId: te.solar_gain_energy`

$$Q_{рад}=\sum_j{Q_{рад}^j}$$

где $Q_{рад}^j$ - энергия теплопоступлений от солнечной радиации за отопительный период через окна j-го вида, кВт·ч. Расчётный параметр секции `te.solar_gain_energy_by_window_kind`.

**Правила валидации:** собственных правил нет — все слагаемые провалидированы в `te.solar_gain_energy_by_window_kind`.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.solar_gain_energy_by_window_kind.</summary>
    public class TeSolarGainEnergyByWindowKind : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.solar_gain_energy_by_window_kind";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecSolarGainChar);
        public int Order => 640;
        public string Number => "";
        public string Name => "Энергия теплопоступлений от солнечной радиации $Q_{рад}^j$ (кВт·ч) за отопительный период через окна j-го вида";

        public string Body => """"
`methodSectionId: te.solar_gain_energy_by_window_kind`

$$Q_{рад}^j=11,6·\sum_d{I_{рад}^{d}·K_{окон}^{j}·τ_{окон}^{j}·A_{окон}^{j,d}}$$

где:

- 11,6 - округлённый коэффициент перевода МДж/год в Вт (Дж/с) ($10^6/24·3600$).
- $I_{рад}^d$ - Солнечная радиация для окон, обращённых на сторону света $d\in[север, восток, юг, запад]$, $МДж/м^2$. Расчётный параметр секции `te.solar_radiation_by_direction`.
- $A_{окон}^{j,d}$ - Площадь окон j-го вида остекления проёмов, обращённых на сторону света $d\in[север, восток, юг, запад]$, $м^2$. Расчётный параметр секции `te.windows_area_by_type_by_direction`.
- $K_{окон}^{j}$ - Коэффициент затенения для j-го вида остекления. Исходные данные: справочное значения коэффициента затенения для вида остекления, выбранного в характеристике вида остекления оконных проёмов модели окон "Вид остекления проёмов. Вид остекления".
- $τ_{окон}^{j}$ - Коэффициент проникания солнечной радиации. Исходные данные: справочное значения коэффициента проникания солнечной радиации для вида остекления, выбранного в характеристике вида остекления оконных проёмов модели окон "Вид остекления проёмов. Вид остекления".

**Правила валидации:**

- для каждого вида остекления $j$: $0 < K_{окон}^j \le 1$;
- для каждого вида остекления $j$: $0 < \tau_{окон}^j \le 1$.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.solar_radiation_by_direction.</summary>
    public class TeSolarRadiationByDirection : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.solar_radiation_by_direction";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecSolarGainChar);
        public int Order => 650;
        public string Number => "";
        public string Name => "Солнечная радиация $I_{рад}^d$ для окон, обращённых на сторону света $d\\in[север, восток, юг, запад]$";

        public string Body => """"
`methodSectionId: te.solar_radiation_by_direction`

$$I_{рад}^d=\sum_m{I_{рад}^{d,m}}$$

где:

- $I_{рад}^{d,m}$ - Солнечная радиация для окон, обращённых на сторону света $d\in[север, восток, юг, запад]$ в месяце $m\in[январь,февраль,март,апрель,октябрь,ноябрь,декабрь]$, $МДж/м^2$. Исходные данные: справочные значения "ССР" из справочника "Солнечная радиация на вертикальную поверхность" для стороны света d, месяца m и широты $φ$. Список месяцев фиксирован: $\{1, 2, 3, 4, 10, 11, 12\}$ (7 месяцев отопительного периода).
- $φ$ — широта, °. Исходные данные: характеристика "Климатические условия. Широта" — значение выбранного источника климатических данных (климатический район здания, климатический район подстанции или данные пользователя).

**Правила валидации:**

- $φ$ задана и $φ \in [-90; 90]$°;
- для каждой стороны света $d \in \{Север, Восток, Юг, Запад\}$ и каждого месяца $m \in \{1, 2, 3, 4, 10, 11, 12\}$: запись справочника задана и $I_{рад}^{d,m} \ge 0$;
- лишние записи (с месяцами вне указанного множества) — допустимы и игнорируются.

Широта проверяется до полноты справочника, и при её ошибке остальные правила не применяются: записи отбираются по широте, поэтому без неё отбор пуст, и сообщения о неполноте справочника называли бы следствие вместо причины.
"""";

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

        public string[] Comments => new[]
        {
            "2026-09-03, CR «Обработка источников климатических данных»: широта вынесена в исходные данные секции — она определяется выбранным источником климатических данных; добавлено правило валидации широты.",
        };
    }

    /// <summary>Секция методики: te.heating_degree_days.</summary>
    public class TeHeatingDegreeDays : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.heating_degree_days";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeSpecSolarGainChar);
        public int Order => 660;
        public string Number => "";
        public string Name => "Градусо‑сутки отопительного периода:";

        public string Body => """"
`methodSectionId: te.heating_degree_days`

$$D_d = (t_{int} - t_{ext}) \cdot z_{ht},$$
где: 

- $z_{ht}$ — продолжительность отопительного периода, сут. Исходные данные: характеристика "Климатические условия. Продолжительность отопительного периода" — значение выбранного источника климатических данных (климатический район здания, климатический район подстанции или данные пользователя).
- $t_{ext}$ — средняя температура наружного воздуха за период, °C. Исходные данные: характеристика "Климатические условия. Средняя температура наружного воздуха" — значение того же источника, что и $z_{ht}$.
- $t_{int}$ - внутренняя температура, °C. Исходные данные: характеристика "Условия эксплуатации. Средняя температура воздуха внутри здания за ОП".

**Правила валидации:**

- $z_{ht} \in [1; 365]$ сут;
- $t_{int}, t_{ext} \in [-50; 50]$ °C;
- $t_{int} > t_{ext}$ (иначе $D_d \le 0$ — физически некорректно и ломает знаменатель секции `te.spec_solar_gain_char`).
"""";

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

        public string[] Comments => new[]
        {
            "2026-09-03, CR «Обработка источников климатических данных»: источником $z_{ht}$ и $t_{ext}$ названы данные выбранного источника климатических данных, а не характеристики вкладки «Условия отопительного периода».",
        };
    }

    /// <summary>Секция методики: te.heat_gain_utilization_factor.</summary>
    public class TeHeatGainUtilizationFactor : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.heat_gain_utilization_factor";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TtrMetodikaRascheta);
        public int Order => 670;
        public string Number => "";
        public string Name => "Коэффициент полезного использования теплопоступлений $\\beta_{КПИ}$";

        public string Body => """"
`methodSectionId: te.heat_gain_utilization_factor`

$$β_{КПИ}=K_{рег}/(1+0,5·n_в)$$
где:
- $K_{рег}$  - коэффициент эффективности регулирования подачи теплоты в системах отопления: значение $K_{рег}$ записи справочника "Типы регулирования системы отопления", выбранной в характеристике "Условия эксплуатации. Тип регулирования системы отопления".
- $n_в$ - средняя кратность воздухообмена здания за отопительный период, $ч^{-1}$. Расчётный параметр.

**Правила валидации:**

- $0 < K_{рег} \le 1$;
- $n_в < 2$ (иначе знаменатель $1 - 0{,}5 \cdot n_в \le 0$ и формула не определена).
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.air_exchange_rate.</summary>
    public class TeAirExchangeRate : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.air_exchange_rate";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeHeatGainUtilizationFactor);
        public int Order => 680;
        public string Number => "";
        public string Name => "Средняя кратность воздухообмена здания за отопительный период $n_в$";

        public string Body => """"
`methodSectionId: te.air_exchange_rate`

Средняя кратность воздухообмена здания за отопительный период $n_в, ч^{-1}$, рассчитывается по суммарному воздухообмену за счет вентиляции и инфильтрации по формуле:

$$n_в=[(L_{вент}·n_{вент})/168+(G^{инф}·n_{инф})/(168·ρ_в^{вент})]/(β_v·V_h)$$

где:
- $L_{вент}$ - Количество приточного воздуха в здание, $м^3/ч$. Расчётный параметр секции `te.vent_amount`.
- $n_{вент}$ - Число часов работы механической вентиляции в течение недели, ч. Расчётный параметр секции `te.vent_hours`.
- $G^{инф}$ - Количество инфильтрующегося воздуха в здание, кг/ч. Расчётный параметр секции `te.infiltration_air_amount`.
- $n_{инф}$ - Число часов учёта инфильтрации в течение недели, ч. Расчётный параметр секции `te.infiltration_hours`.
- $ρ_в^{вент}$ - Средняя плотность приточного воздуха за отопительный период, $кг/м^3$. Расчётный параметр секции `te.supply_air_density`.
- $β_v$ - коэффициент снижения объема воздуха в здании, учитывающий наличие внутренних ограждающих конструкций: справочное значение "Коэффициент снижения объема воздуха в здании, учитывающий наличие внутренних ограждающих конструкций" из справочника "Коэффициенты ТТР" (0,85).
- $V_h$ - отапливаемый объём здания, $м^3$. Характеристика "Форма и габариты. Объём отапливаемый".

**Правила валидации:** собственных правил нет — все слагаемые провалидированы в смежных секциях ($V_h$ — `te.spec_heat_protect_char`).
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.supply_air_density.</summary>
    public class TeSupplyAirDensity : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.supply_air_density";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeHeatGainUtilizationFactor);
        public int Order => 690;
        public string Number => "";
        public string Name => "Средняя плотность приточного воздуха за отопительный период, $ρ_в^{вент}$";

        public string Body => """"
`methodSectionId: te.supply_air_density`

$$ρ_в^{вент}=353/(273+t_{ext}),$$ кг/м³

где:

- $t_{ext}$ — температура наружного воздуха, °C. Исходные данные: "Условия отопительного периода. Средняя температура наружного воздуха".

**Правила валидации:**

- $t_{ext} \in [-50; 50]$ °C.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.te_consumption_kwh.</summary>
    public class TeTeConsumptionKwh : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.te_consumption_kwh";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TtrMetodikaRascheta);
        public int Order => 700;
        public string Number => "";
        public string Name => "Потребление тепловой энергии на отопление и вентиляцию, кВт·ч";

        public string Body => """"
`methodSectionId: te.te_consumption_kwh`

Потребление тепловой энергии на отопление и вентиляцию за отопительный период, кВт·ч:

$$H_{h}^{kWh}=0,024·D_d·V_h·q_{от}^{р}$$

где:

- $D_d$ - градусо‑сутки отопительного периода, °C·сут. Расчётный параметр секции `te.heating_degree_days`.
- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные: характеристика "Форма и габариты. Объём отапливаемый".
- $q_{от}^{р}$ - расчётная удельная характеристика расхода тепловой энергии на отопление и вентиляцию, Вт/(м³·°С). Расчётный параметр секции `te.calc_specific_characteristic`.

**Правила валидации:** собственных правил нет — все слагаемые провалидированы в смежных секциях ($V_h$ — `te.spec_heat_protect_char`).
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.te_consumption_gcal.</summary>
    public class TeTeConsumptionGcal : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.te_consumption_gcal";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TtrMetodikaRascheta);
        public int Order => 710;
        public string Number => "";
        public string Name => "Потребление тепловой энергии на отопление и вентиляцию, Гкал";

        public string Body => """"
`methodSectionId: te.te_consumption_gcal`

Потребление тепловой энергии на отопление и вентиляцию за отопительный период, Гкал: 

$$H_{h}^{Gcal}=0,0008598·H_{h}^{kWh}$$

где $H_{h}^{kWh}$ - потребление тепловой энергии на отопление и вентиляцию за отопительный период, кВт·ч. Расчётный параметр секции `te.te_consumption_kwh`.

**Правила валидации:** собственных правил нет — слагаемое провалидировано в `te.te_consumption_kwh`.

[^1]: здесь степень 1/2 не согласована с формулой в секции `te.doors_air_permeability_resistance`. Заказчик настаивает на такой методике, реализуем код по методике.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.heat_loss_kwh.</summary>
    public class TeHeatLossKwh : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.heat_loss_kwh";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TtrMetodikaRascheta);
        public int Order => 720;
        public string Number => "";
        public string Name => "Общие теплопотери здания за отопительный период, кВт·ч";

        public string Body => """"
`methodSectionId: te.heat_loss_kwh`

Общие теплопотери здания за отопительный период, кВт·ч:

$$L_{h}^{kWh}=0,024·D_d·V_h·(k_{об}+k_{вент})$$

где:

- $D_d$ - градусо‑сутки отопительного периода, °C·сут. Расчётный параметр секции `te.heating_degree_days`.
- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные: характеристика "Форма и габариты. Объём отапливаемый".
- $k_{об}$ — удельная теплозащитная характеристика здания, Вт/(м³·°С). Расчётный параметр секции `te.spec_heat_protect_char`.
- $k_{вент}$ — удельная вентиляционная характеристика здания, Вт/(м³·°С). Расчётный параметр секции `te.spec_ventilation_char`.

**Правила валидации:** собственных правил нет — все слагаемые провалидированы в смежных секциях.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.wall_heat_loss_kwh.</summary>
    public class TeWallHeatLossKwh : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.wall_heat_loss_kwh";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeHeatLossKwh);
        public int Order => 730;
        public string Number => "";
        public string Name => "Теплопотери стен за отопительный период, кВт·ч";

        public string Body => """"
`methodSectionId: te.wall_heat_loss_kwh`

$$L_{стен}^{kWh}=0,024·D_d·V_h·k_{стен}$$

где:

- $D_d$ - градусо‑сутки отопительного периода, °C·сут. Расчётный параметр секции `te.heating_degree_days`.
- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные: характеристика "Форма и габариты. Объём отапливаемый".
- $k_{стен}$ — удельная теплозащитная характеристика стен здания, Вт/(м³·°С). Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.windows_heat_loss_kwh.</summary>
    public class TeWindowsHeatLossKwh : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.windows_heat_loss_kwh";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeHeatLossKwh);
        public int Order => 740;
        public string Number => "";
        public string Name => "Теплопотери окон за отопительный период, кВт·ч";

        public string Body => """"
`methodSectionId: te.windows_heat_loss_kwh`

$$L_{окон}^{kWh}=0,024·D_d·V_h·k_{окон}$$

где:

- $D_d$ - градусо‑сутки отопительного периода, °C·сут. Расчётный параметр секции `te.heating_degree_days`.
- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные: характеристика "Форма и габариты. Объём отапливаемый".
- $k_{окон}$ — удельная теплозащитная характеристика окон здания, Вт/(м³·°С). Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.doors_heat_loss_kwh.</summary>
    public class TeDoorsHeatLossKwh : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.doors_heat_loss_kwh";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeHeatLossKwh);
        public int Order => 750;
        public string Number => "";
        public string Name => "Теплопотери ворот за отопительный период, кВт·ч";

        public string Body => """"
`methodSectionId: te.doors_heat_loss_kwh`

$$L_{ворот}^{kWh}=0,024·D_d·V_h·k_{ворот}$$

где:

- $D_d$ - градусо‑сутки отопительного периода, °C·сут. Расчётный параметр секции `te.heating_degree_days`.
- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные: характеристика "Форма и габариты. Объём отапливаемый".
- $k_{ворот}$ — удельная теплозащитная характеристика ворот здания, Вт/(м³·°С). Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.roof_heat_loss_kwh.</summary>
    public class TeRoofHeatLossKwh : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.roof_heat_loss_kwh";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeHeatLossKwh);
        public int Order => 760;
        public string Number => "";
        public string Name => "Теплопотери ВОК за отопительный период, кВт·ч";

        public string Body => """"
`methodSectionId: te.roof_heat_loss_kwh`

$$L_{ВОК}^{kWh}=0,024·D_d·V_h·k_{ВОК}$$

где:

- $D_d$ - градусо‑сутки отопительного периода, °C·сут. Расчётный параметр секции `te.heating_degree_days`.
- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные: характеристика "Форма и габариты. Объём отапливаемый".
- $k_{ВОК}$ — удельная теплозащитная характеристика ВОК здания, Вт/(м³·°С). Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.ground_heat_loss_kwh.</summary>
    public class TeGroundHeatLossKwh : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.ground_heat_loss_kwh";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeHeatLossKwh);
        public int Order => 770;
        public string Number => "";
        public string Name => "Теплопотери ЗКГ за отопительный период, кВт·ч";

        public string Body => """"
`methodSectionId: te.ground_heat_loss_kwh`

$$L_{ЗКГ}^{kWh}=0,024·D_d·V_h·k_{ЗКГ}$$

где:

- $D_d$ - градусо‑сутки отопительного периода, °C·сут. Расчётный параметр секции `te.heating_degree_days`.
- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные: характеристика "Форма и габариты. Объём отапливаемый".
- $k_{ЗКГ}$ — удельная теплозащитная характеристика ЗКГ здания, Вт/(м³·°С). Расчётный параметр.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }

    /// <summary>Секция методики: te.ventilation_heat_loss_kwh.</summary>
    public class TeVentilationHeatLossKwh : ISdaidDocumentSection
    {
        /// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора Ntr.Calc.</summary>
        public static string MethodSectionId = "te.ventilation_heat_loss_kwh";

        public Type Document => typeof(DOC_TtrCalc);
        public Type Parent => typeof(TeHeatLossKwh);
        public int Order => 780;
        public string Number => "";
        public string Name => "Теплопотери вентиляции за отопительный период, кВт·ч";

        public string Body => """"
`methodSectionId: te.ventilation_heat_loss_kwh`

$$L_{вент}^{kWh}=0,024·D_d·V_h·k_{вент}$$

где:

- $D_d$ - градусо‑сутки отопительного периода, °C·сут. Расчётный параметр секции `te.heating_degree_days`.
- $V_h$ - отапливаемый объём здания, $м^3$. Исходные данные: характеристика "Форма и габариты. Объём отапливаемый".
- $k_{вент}$ — удельная вентиляционная характеристика здания, Вт/(м³·°С). Расчётный параметр секции `te.spec_ventilation_char`.
"""";

        public string Version => "";
        public string Status => "";
        public string[] Comments => new string[0];
    }
}