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

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

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

namespace Rugrid.Sdaid.Epas.Ntr.Backend.Calc
{
    /// <summary>
    /// Перенесено дословно из ntr-01/ntr-calc/ee_calc.md.
    /// Каждый заголовок источника — отдельная секция; идентификаторы methodSectionId
    /// сохранены статиками и служат ключом трассировки на калькуляторы src/Ntr.Calc.
    /// </summary>
    public class DOC_EeCalc : 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 => @"Этот файл содержит методику расчёта потребления электрической энергии для модели объекта потребления: **модель освещения** и **модель токоприёмников**.";

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

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

        public string Body => """"
- $P_k$ — мощность вида (освещения или токоприёмников) k, кВт.
- $Q_k$ — энергия (годовое потребление) вида k, кВт·ч.
"""";

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

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

        public string Body => """"

"""";

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

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

        public Type Document => typeof(DOC_EeCalc);
        public Type Parent => typeof(EeMetodikaRascheta);
        public int Order => 30;
        public string Number => "";
        public string Name => "Вид освещения — установленная мощность, кВт";

        public string Body => """"
`methodSectionId: ee.lighting_kind_power`

$$P_k = N_{fix} \cdot N_{lamp} \cdot P_{lamp}$$

где:

- $N_{fix}$ — количество светильников, шт.
- $N_{lamp}$ — количество ламп в светильнике, шт.
- $P_{lamp}$ — мощность одной лампы, Вт.
- $P_k$ — установленная мощность вида освещения k, кВт.

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

- $N_{fix} \ge 1$;
- $N_{lamp} \ge 1$;
- $P_{lamp} > 0$.
"""";

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

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

        public Type Document => typeof(DOC_EeCalc);
        public Type Parent => typeof(EeMetodikaRascheta);
        public int Order => 40;
        public string Number => "";
        public string Name => "Вид освещения — потребление ЭЭ в год, кВт·ч";

        public string Body => """"
`methodSectionId: ee.lighting_kind_consumption`

$$Q_k = P_k \cdot t_{day} \cdot D_{year}$$

где:

- $P_k$ — установленная мощность вида освещения k, кВт. Расчётный параметр секции `ee.lighting_kind_power`.
- $t_{day}$ — среднее время работы в сутках, ч.
- $D_{year}$ — количество дней работы в году, дней.
- $Q_k$ — потребление ЭЭ вида освещения k в год, кВт·ч.

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

- $t_{day} \in [0; 24]$;
- $D_{year} \in [0; 365]$.
"""";

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

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

        public Type Document => typeof(DOC_EeCalc);
        public Type Parent => typeof(EeMetodikaRascheta);
        public int Order => 50;
        public string Number => "";
        public string Name => "Модель освещения — сводные показатели";

        public string Body => """"
`methodSectionId: ee.lighting_model_totals`

Установленная мощность:

$$P_{light} = \sum_{k} P_{k}$$

Потребление ЭЭ в год:

$$Q_{light} = \sum_{k} Q_{k}$$

где $k$ — индекс вида освещения.

**Правила валидации:** собственных правил нет — все слагаемые провалидированы в секциях `ee.lighting_kind_power` и `ee.lighting_kind_consumption`. Пустой список видов освещения допускается; в этом случае $P_{light} = 0$, $Q_{light} = 0$.
"""";

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

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

        public Type Document => typeof(DOC_EeCalc);
        public Type Parent => typeof(EeMetodikaRascheta);
        public int Order => 60;
        public string Number => "";
        public string Name => "Вид токоприёмников — потребление ЭЭ в год, кВт·ч";

        public string Body => """"
`methodSectionId: ee.receiver_kind_consumption`

$$Q_k = P_k \cdot t_{day} \cdot D_{year}$$

где:

- $P_k$ — суммарная мощность вида токоприёмников k, кВт.
- $t_{day}$ — среднее время работы в сутках, ч.
- $D_{year}$ — количество дней работы в году, дней.
- $Q_k$ — потребление ЭЭ вида токоприёмников k в год, кВт·ч.

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

- $P_k > 0$;
- $t_{day} \in [0; 24]$;
- $D_{year} \in [0; 365]$.
"""";

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

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

        public Type Document => typeof(DOC_EeCalc);
        public Type Parent => typeof(EeMetodikaRascheta);
        public int Order => 70;
        public string Number => "";
        public string Name => "Модель токоприёмников — сводные показатели";

        public string Body => """"
`methodSectionId: ee.receiver_model_totals`

Установленная мощность:

$$P_{rec} = \sum_{k} P_{k}$$

Потребление ЭЭ в год:

$$Q_{rec} = \sum_{k} Q_{k}$$

где $k$ — индекс вида токоприёмников.

**Правила валидации:** собственных правил нет — все слагаемые провалидированы в секции `ee.receiver_kind_consumption`. Пустой список видов токоприёмников допускается; в этом случае $P_{rec} = 0$, $Q_{rec} = 0$.
"""";

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

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

        public Type Document => typeof(DOC_EeCalc);
        public Type Parent => typeof(EeMetodikaRascheta);
        public int Order => 80;
        public string Number => "";
        public string Name => "Итог по потребителям ЭЭ здания";

        public string Body => """"
`methodSectionId: ee.ee_consumption_kwh`

Итоговая установленная мощность потребителей ЭЭ:

$$P_{ээ} = P_{light} + P_{rec}$$

Итоговое годовое потребление ЭЭ:

$$E_{c}^{kWh} = Q_{light} + Q_{rec}$$

Разбиение итогов:

- по светильникам: $P_{light}$, $Q_{light}$
- по токоприёмникам: $P_{rec}$, $Q_{rec}$

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

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