using System;
using Rugrid.Sdaid.Notation.Documents;
namespace Rugrid.Sdaid.Epas.Nts.Backend.Calc
{
/// <summary>
/// Методика расчёта нормативного расхода автомобильного топлива. Единственный источник
/// алгоритмов расчёта в модуле ЭНТС; за основу взята «Методика определения эталонов
/// потребления ГСМ транспортными средствами». Расчёт разбит на общий контур (вход, слагаемые,
/// поправочные коэффициенты, условия эксплуатации ТС) и тонкие ветки категорий ТС.
/// </summary>
public class DOC_NtsCalc : ISdaidDocument, IHasStructuralLinks, IFolder<NtsBackendFolder>
{
public SdaidLink[] Links => new[]
{
Rel.Uses<DOC_InputModel>(),
Rel.Uses<DOC_NtsCalcErrors>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_WinterAllowance>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModification>(),
};
public static string _refName = "Методика расчёта расхода топлива";
public string Name => "Методика расчёта нормативного расхода топлива";
public string Description =>
@"Расчёт нормативного расхода автомобильного топлива: слагаемые расхода, поправочные коэффициенты к норме, условия эксплуатации ТС и ветки категорий ТС.";
public string Version => "0.4";
public string Status => "draft";
public string[] Comments => new string[0];
public static string Body = $$"""
Исходные данные всех секций — параметры {{SdaidAnchors.RefTo<DOC_InputModel>()}}.
Обозначения величин в формулах совпадают с колонкой «Обозначение» модели входных данных.
Расчёт устроен в два слоя:
- **Общий контур** — одинаков для всех категорий: выбор категории по виду ТС
(`fuel.category_by_kind`), базовая норма (`fuel.base_norm`) и эталонная норма
(`fuel.reference_norm`), пробег (`fuel.mileage`),
слагаемые расхода (`fuel.q_mileage`, `fuel.q_transport`, `fuel.q_trailer`,
`fuel.q_trips`, `fuel.q_equipment`) и поправочные коэффициенты к норме (`fuel.cf_*`,
`fuel.correction_factor_winter`, `fuel.correction_factor_summer`).
- **Ветки категорий** — тонкие: задают расход для условий эксплуатации ТС (в зимний период, в летний период, за пригородной зоной) от своего набора слагаемых. Городской
режим (`fuel.q_urban`) и итог (`fuel.normative_consumption`) — общие.
- **Эталонный расход** (`fuel.reference_consumption`) — та же ветка категории ТС, что и
нормативный расход, выполненная повторно с заменой входа: $H_s$ (`fuel.base_norm`)
заменяется на $H_{эт}$ (`fuel.reference_norm`). Отдельного набора формул нет — секция
только называет замену входа.
Слагаемые дают расход в литрах за отчётный пробег; расход для условий эксплуатации
получается применением к норме поправочного коэффициента.
Базовая норма (`fuel.base_norm`) — среднее минимума и максимума базовых норм
отобранных для ТС модификаций
(справочник {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModification>()}}).
Зимняя надбавка по климатическому району выбирается из справочника
{{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_WinterAllowance>()}} по субъекту РФ
эксплуатации ТС (по ПМЭС, иначе по МЭС).
## Статусы и ошибки
Расчёт выполняется для всех загруженных ТС. Результат калькулятора — справочник
{{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_CalculationStatus>()}}: «Не выполнен» —
расчёт ещё не выполнялся; после расчёта — «Успешно выполнен» или «Выполнен с ошибкой». Коды,
условия и тексты ошибок — в {{SdaidAnchors.RefTo<DOC_NtsCalcErrors>()}}. Итоговый статус
обработки ТС вычисляется отдельно, по результату расчёта, статусу подбора и способу подбора.
""";
public static string OpenQuestions = $"""
## Открытые вопросы
Открытые вопросы методики собраны в эпике: {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Epics.NtsFuelCalc.OQ_Calc>()}.
""";
}
/// <summary>Секция методики: fuel.category_by_kind.</summary>
public class FuelCategoryByKind : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.category_by_kind";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 100;
public string Number => "";
public string Name => "Выбор способа расчёта для вида ТС";
public string Body => $"""
`methodSectionId: fuel.category_by_kind`
По **коду** вида ТС (параметр `VehicleKind` модели входных данных
{SdaidAnchors.RefTo<DOC_InputModel>()} — значение `VehicleKind.Code`
{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleKind>()}, не наименование)
определяется категория ТС (ветка). Сопоставление перенесено с наименования на код один в
один, без изменения состава веток — коды `mobile001`-`mobile033` берутся из справочника
{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleKind>()} как есть, остальные —
коды, довнесённые в справочник там же, где АИС код не передаёт (`tractor`, `snowmobile` и
т. п.):
- `mobile001`, `mobile002`, `brigade_car` → `PassengerCar` (`fuel.passenger_car`);
- `mobile003`, `mobile004` → `Bus` (`fuel.bus`);
- `mobile005`, `mobile006`, `mobile007`, `mobile008`, `mobile011`, `mobile012`,
`domestic_passenger_and_cargo_vehicles` → `CargoCar` (`fuel.truck`);
- `mobile009`, `mobile010` → `DumpTruck` (`fuel.dump_truck`);
- `mobile016`, `mobile017`, `mobile022`, `mobile023`, `mobile025`, `mobile026`,
`mobile030`, `tracked_swamp_vehicle`, `all_terrain_vehicle`, `bulldozer`, `snowmobile`,
`tractor` → `SpecCar` (`fuel.special_vehicle`).
Коды вне этого перечня (например, медицинский автотранспорт, автомобили-эвакуаторы,
часть видов спецтехники, `chipper_machine`) — ветка не определена; это предсуществующий
пробел методики, не входит в состав этой секции.
**Правила валидации:**
- параметр `VehicleKind` модели входных данных задан (и код записи непуст) и входит в
перечисленные коды;
- вид ТС не задан → «Вид ТС не определён»;
- вид ТС задан, но методика для его кода не определена → «Методика не определена».
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.base_norm.</summary>
public class FuelBaseNorm : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.base_norm";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 150;
public string Number => "";
public string Name => "Базовая норма расхода топлива, л/100 км";
public string Body => $$$"""
`methodSectionId: fuel.base_norm`
Базовая норма $H_s$, л/100 км — расход топлива конкретной модели в снаряжённом состоянии
без груза при стандартных условиях. Базовые нормы отобранных для ТС модификаций — параметр
`BaseConsumptionRates` модели входных данных {{{SdaidAnchors.RefTo<DOC_InputModel>()}}}. Для ТС
отбираются модификации справочника «Марка, модель и модификация ТС»; в отобранной группе
берутся минимум и максимум базовых норм, базовая норма — их среднее:
$$H_s = \frac{H_{max} + H_{min}}{2}$$
где:
- $H_s$ — базовая норма расхода топлива, л/100 км;
- $H_{max}$ — максимальная базовая норма в отобранной группе, л/100 км;
- $H_{min}$ — минимальная базовая норма в отобранной группе, л/100 км.
В расчёте сохраняются $H_{min}$, $H_{max}$ и $H_s$.
**Правила валидации:**
- отобрана хотя бы одна модификация сопоставленного вида ТС; базовая норма каждой отобранной модификации $> 0$;
- нет норм по сопоставленному виду ТС → «Базовая норма не определена».
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.reference_norm.</summary>
public class FuelReferenceNorm : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.reference_norm";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 151;
public string Number => "";
public string Name => "Эталонная норма расхода топлива, л/100 км";
public string Body => $$$"""
`methodSectionId: fuel.reference_norm`
Эталонная норма $H_{эт}$, л/100 км — минимальная базовая норма **всей базовой группы**
ТС (вид ТС + вид топлива), а не только отобранных для ТС модификаций: параметр
`ReferenceGroupConsumptionRates` модели входных данных
{{{SdaidAnchors.RefTo<DOC_InputModel>()}}}. Базовая группа и её сужение по виду топлива —
{{{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.ModificationSelection.DOC_ModificationGroupSelection>()}}},
раздел «Базовая группа».
$$H_{эт} = \min(H_i),\ i \in \text{БазоваяГруппа}$$
где:
- $H_{эт}$ — эталонная норма расхода топлива, л/100 км;
- БазоваяГруппа — все модификации вида ТС с установленной нормой, мягко суженные по виду
топлива (та же группа, что в `fuel.base_norm`, но без ограничения отбором пользователя).
В отличие от $H_s$, $H_{эт}$ не меняется при изменении отбора («Отфильтрованные»/
«Отобранные» в окне подбора) — только при пересборке самой базовой группы (смена вида ТС
или вида топлива ТС).
**Правила валидации:** базовая группа непуста → $H_{эт}$ определена; норма каждой строки
базовой группы $> 0$ (то же условие, что у `fuel.base_norm`, для той же базовой группы);
пустая базовая группа → эталонная норма не определена (та же ошибка, что и у
`fuel.base_norm`, — «Базовая норма не определена» относится к обеим величинам, раз они
используют одну и ту же базовую группу).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.mileage.</summary>
public class FuelMileage : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.mileage";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 160;
public string Number => "";
public string Name => "Пробег, км";
public string Body => $$"""
`methodSectionId: fuel.mileage`
Пробег, км — расчётный показатель: вызывающая сторона расчёта передаёт в
{{SdaidAnchors.RefTo<DOC_InputModel>()}} исходные данные (`InputModel.Mileage`), секция сама
выводит из них $S$. Карточка ТС это поле не задаёт и всегда получает эталон (удельный
расход) — 100 км; реальный пробег передаётся, например, при формировании отчёта.
$$S = \begin{cases} InputModel.Mileage, & InputModel.Mileage > 0 \\ 100, & InputModel.Mileage = \text{null} \end{cases}$$
где:
- $S$ — пробег, км.
**Правила валидации:**
- `InputModel.Mileage > 0` или `InputModel.Mileage` не передан (`null`); иначе — ошибка
(передан некорректный пробег — см. {{SdaidAnchors.RefTo<DOC_NtsCalcErrors>()}}).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>
/// Секция методики: группа «Поправочные коэффициенты» — общий контур надбавок к базовой
/// норме. Собирает в один раздел отдельные коэффициенты и суммарные коэффициенты периодов.
/// </summary>
public class FuelCorrectionFactors : ISdaidDocumentSection
{
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 200;
public string Number => "";
public string Name => "Поправочные коэффициенты";
public string Body => """
Общий контур надбавок к базовой норме. Здесь собраны отдельные поправочные коэффициенты
(климатический район, срок эксплуатации, климат-контроль, кондиционер, прогрев,
пригородная зона) и суммарные коэффициенты периодов, которые их складывают, — зимнего и летнего.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.cf_climate_region.</summary>
public class FuelCfClimateRegion : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.cf_climate_region";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelCorrectionFactors);
public int Order => 210;
public string Number => "";
public string Name => "Поправочный коэффициент на климатический район $D_{район}$";
public string Body => $$"""
`methodSectionId: fuel.cf_climate_region`
$D_{район}$ — параметр `ClimateRegionAllowance` модели входных данных
{{SdaidAnchors.RefTo<DOC_InputModel>()}}: предельная величина зимней надбавки, заданная
для субъекта РФ, в котором эксплуатируется ТС, %.
где:
- $D_{район}$ — поправочный коэффициент на климатический район, %.
Субъект РФ определяется по ПМЭС, к которому привязано ТС, а если ТС привязано к МЭС — по МЭС.
**Правила валидации:** субъект РФ определён; для субъекта есть строка справочника.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.cf_operation_years.</summary>
public class FuelCfOperationYears : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.cf_operation_years";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelCorrectionFactors);
public int Order => 220;
public string Number => "";
public string Name => "Поправочный коэффициент на срок эксплуатации $D_{эксп}$";
public string Body => """
`methodSectionId: fuel.cf_operation_years`
Срок эксплуатации, лет:
$$t_{эксп} = Год(ReportDate) - Год(StartDate)$$
$$D_{эксп} = \begin{cases} 10, & t_{эксп} > 8 \\ 5, & 5 < t_{эксп} \le 8 \\ 0, & t_{эксп} \le 5 \end{cases}$$
где:
- $D_{эксп}$ — поправочный коэффициент на срок эксплуатации, %;
- $t_{эксп}$ — срок эксплуатации, лет;
- $ReportDate$ — отчётная дата (дата расчёта); $StartDate$ — дата начала эксплуатации ТС.
**Правила валидации:** `StartDate` и `ReportDate` заданы; `StartDate < ReportDate`.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.cf_climate_control.</summary>
public class FuelCfClimateControl : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.cf_climate_control";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelCorrectionFactors);
public int Order => 230;
public string Number => "";
public string Name => "Поправочный коэффициент при использовании климат-контроля $D_{клим}$";
public string Body => """
`methodSectionId: fuel.cf_climate_control`
$$D_{клим} = 7\ \%$$
где:
- $D_{клим}$ — поправочный коэффициент при использовании климат-контроля, %.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.cf_air_conditioner.</summary>
public class FuelCfAirConditioner : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.cf_air_conditioner";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelCorrectionFactors);
public int Order => 240;
public string Number => "";
public string Name => "Поправочный коэффициент при использовании кондиционера $D_{конд}$";
public string Body => """
`methodSectionId: fuel.cf_air_conditioner`
$$D_{конд} = 7\ \%$$
где:
- $D_{конд}$ — поправочный коэффициент при использовании кондиционера, %.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.cf_warm_up.</summary>
public class FuelCfWarmUp : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.cf_warm_up";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelCorrectionFactors);
public int Order => 250;
public string Number => "";
public string Name => "Поправочный коэффициент на прогрев в зимний период $D_{прогрев}$";
public string Body => """
`methodSectionId: fuel.cf_warm_up`
$$D_{прогрев} = 10\ \%$$
где:
- $D_{прогрев}$ — поправочный коэффициент на прогрев в зимний период, %.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.cf_suburb.</summary>
public class FuelCfSuburb : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.cf_suburb";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelCorrectionFactors);
public int Order => 260;
public string Number => "";
public string Name => "Поправочный коэффициент к норме при работе за пригородной зоной, %";
public string Body => """
`methodSectionId: fuel.cf_suburb`
$D^{загор}$ — поправочный коэффициент к норме при работе за пригородной зоной, %; применяется как
**снижение** нормы (дороги общего пользования за пределами пригородной зоны, равнинная
слабохолмистая местность):
$$D^{загор} = -15\ \%$$
где:
- $D^{загор}$ — поправочный коэффициент к норме при работе за пригородной зоной, % (снижение).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.correction_factor_winter.</summary>
public class FuelCorrectionFactorWinter : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.correction_factor_winter";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelCorrectionFactors);
public int Order => 270;
public string Number => "";
public string Name => "Поправочный коэффициент к норме в зимний период, %";
public string Body => """
`methodSectionId: fuel.correction_factor_winter`
$$D^{зима} = D_{район} + D_{эксп} + D_{клим} + D_{прогрев} + D_{нас} + D_{ост} + D_{пон} + D_{спец} + D_{чс} + D_{прос}$$
где:
- $D^{зима}$ — поправочный коэффициент к норме в зимний период, %;
- $D_{район}$ — поправочный коэффициент на климатический район, % (секция `fuel.cf_climate_region`);
- $D_{эксп}$ — поправочный коэффициент на срок эксплуатации, % (секция `fuel.cf_operation_years`);
- $D_{клим}$ — поправочный коэффициент при использовании климат-контроля, % (секция `fuel.cf_climate_control`);
- $D_{прогрев}$ — поправочный коэффициент на прогрев в зимний период, % (секция `fuel.cf_warm_up`);
- $D_{нас}$ — поправочный коэффициент на численность населения, % (вводится в модуле);
- $D_{ост}$ — поправочный коэффициент на частые технологические остановки, % (вводится в модуле);
- $D_{пон}$ — поправочный коэффициент при движении с пониженной скоростью, % (вводится в модуле);
- $D_{спец}$ — поправочный коэффициент при работе специальных автомобилей, % (вводится в модуле);
- $D_{чс}$ — поправочный коэффициент при работе в условиях ЧС, % (вводится в модуле);
- $D_{прос}$ — поправочный коэффициент при вынужденном простое, % (вводится в модуле).
**Правила валидации:** $D_{нас}, D_{ост}, D_{пон}, D_{спец}, D_{чс}, D_{прос} \ge 0$.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.correction_factor_summer.</summary>
public class FuelCorrectionFactorSummer : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.correction_factor_summer";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelCorrectionFactors);
public int Order => 280;
public string Number => "";
public string Name => "Поправочный коэффициент к норме в летний период, %";
public string Body => """
`methodSectionId: fuel.correction_factor_summer`
$$D^{лето} = D_{эксп} + D_{клим} + D_{конд} + D_{нас} + D_{ост} + D_{пон} + D_{спец} + D_{чс} + D_{прос}$$
где:
- $D^{лето}$ — поправочный коэффициент к норме в летний период, %;
- $D_{эксп}$ — поправочный коэффициент на срок эксплуатации, % (секция `fuel.cf_operation_years`);
- $D_{клим}$ — поправочный коэффициент при использовании климат-контроля, % (секция `fuel.cf_climate_control`);
- $D_{конд}$ — поправочный коэффициент при использовании кондиционера, % (секция `fuel.cf_air_conditioner`);
- $D_{нас}, D_{ост}, D_{пон}, D_{спец}, D_{чс}, D_{прос}$ — ручные надбавки, % (вводятся в модуле; перечислены в секции `fuel.correction_factor_winter`).
**Правила валидации:** $D_{нас}, D_{ост}, D_{пон}, D_{спец}, D_{чс}, D_{прос} \ge 0$.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.g_cargo — масса груза.</summary>
public class FuelGCargo : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.g_cargo";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 290;
public string Number => "";
public string Name => "Масса груза, т";
public string Body => $$"""
`methodSectionId: fuel.g_cargo`
Масса груза $G_{гр}$, т — расчётный параметр от грузоподъёмности:
$$G_{гр} = 0{,}5 \cdot q$$
где:
- $G_{гр}$ — масса груза, т;
- $q$ — грузоподъёмность ТС, т — параметр `CargoCapacity` модели входных данных
{{SdaidAnchors.RefTo<DOC_InputModel>()}}.
**Правила валидации:** $q \ge 0$.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.s_cargo — пробег с грузом.</summary>
public class FuelSCargo : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.s_cargo";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelMileage);
public int Order => 161;
public string Number => "";
public string Name => "Пробег с грузом, км";
public string Body => """
`methodSectionId: fuel.s_cargo`
Пробег с грузом $S_{гр}$, км — доля от пробега:
$$S_{гр} = 0{,}8 \cdot S$$
где:
- $S_{гр}$ — пробег с грузом, км;
- $S$ — пробег, км (секция `fuel.mileage`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.s_special_to_work — пробег к месту работы и обратно.</summary>
public class FuelSSpecialToWork : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.s_special_to_work";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelMileage);
public int Order => 162;
public string Number => "";
public string Name => "Пробег к месту работы и обратно, км";
public string Body => """
`methodSectionId: fuel.s_special_to_work`
Пробег к месту работы и обратно $S'$, км — доля от пробега:
$$S' = 0{,}3 \cdot S$$
где:
- $S'$ — пробег к месту работы и обратно, км;
- $S$ — пробег, км (секция `fuel.mileage`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.s_special_on_work — пробег при выполнении специальной работы при передвижении.</summary>
public class FuelSSpecialOnWork : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.s_special_on_work";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelMileage);
public int Order => 163;
public string Number => "";
public string Name => "Пробег при выполнении специальной работы при передвижении, км";
public string Body => """
`methodSectionId: fuel.s_special_on_work`
Пробег при выполнении специальной работы при передвижении $S''$, км — доля от пробега:
$$S'' = 0{,}7 \cdot S$$
где:
- $S''$ — пробег при выполнении специальной работы при передвижении, км;
- $S$ — пробег, км (секция `fuel.mileage`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.w — объём транспортной работы.</summary>
public class FuelW : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.w";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 294;
public string Number => "";
public string Name => "Объём транспортной работы, т·км";
public string Body => """
`methodSectionId: fuel.w`
Объём транспортной работы $W$, т·км:
$$W = G_{гр} \cdot S_{гр}$$
где:
- $W$ — объём транспортной работы, т·км;
- $G_{гр}$ — масса груза, т (секция `fuel.g_cargo`);
- $S_{гр}$ — пробег с грузом, км (секция `fuel.s_cargo`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.h_trailer — норма на дополнительную массу прицепа.</summary>
public class FuelHTrailer : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.h_trailer";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 300;
public string Number => "";
public string Name => "Норма расхода топлива на дополнительную массу прицепа, л/100 т·км";
public string Body => $$"""
`methodSectionId: fuel.h_trailer`
Норма расхода топлива на дополнительную массу прицепа (полуприцепа) $H_g$, л/100 т·км —
расчётный параметр по виду топлива — параметр `FuelType` модели входных данных
{{SdaidAnchors.RefTo<DOC_InputModel>()}}:
$$H_g = \begin{cases} 2, & \text{FuelType} = \text{«бензин»} \\ 1{,}3, & \text{FuelType} = \text{«дизельное топливо»} \end{cases}$$
где:
- $H_g$ — норма расхода топлива на дополнительную массу прицепа, л/100 т·км;
- `FuelType` — вид основного топлива ТС; допустимые значения: бензин, дизельное топливо.
**Правила валидации:** `FuelType` задан и один из {бензин, дизельное топливо}.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.h_transport — норма на транспортную работу.</summary>
public class FuelHTransport : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.h_transport";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 305;
public string Number => "";
public string Name => "Норма расхода топлива на транспортную работу, л/100 т·км";
public string Body => $$"""
`methodSectionId: fuel.h_transport`
Норма расхода топлива на транспортную работу $H_w$, л/100 т·км — расчётный параметр по виду
топлива — параметр `FuelType` модели входных данных {{SdaidAnchors.RefTo<DOC_InputModel>()}}:
$$H_w = \begin{cases} 2, & \text{FuelType} = \text{«бензин»} \\ 1{,}3, & \text{FuelType} = \text{«дизельное топливо»} \end{cases}$$
где:
- $H_w$ — норма расхода топлива на транспортную работу, л/100 т·км;
- `FuelType` — вид основного топлива ТС; допустимые значения: бензин, дизельное топливо.
**Правила валидации:** `FuelType` задан и один из {бензин, дизельное топливо}.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.h_z — дополнительная норма расхода на каждую ездку с грузом.</summary>
public class FuelHZ : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.h_z";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 308;
public string Number => "";
public string Name => "Дополнительная норма расхода топлива на каждую ездку с грузом, л/100 км";
public string Body => """
`methodSectionId: fuel.h_z`
Дополнительная норма расхода топлива на каждую ездку с грузом $H_z$, л/100 км — постоянная
методики:
$$H_z = 0{,}25$$
где:
- $H_z$ — дополнительная норма расхода топлива на каждую ездку с грузом, л/100 км.
**Правила валидации:** нет — постоянная методики.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
// ─────────────────────────────── Слагаемые расхода ───────────────────────────────
/// <summary>Секция методики: fuel.q_mileage — расход на пробег.</summary>
public class FuelQMileage : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.q_mileage";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 310;
public string Number => "";
public string Name => "Нормативный расход на пробег, л";
public string Body => """
`methodSectionId: fuel.q_mileage`
Слагаемое «расход на пробег» — из базовой нормы на пробег:
$$Q_{пробег} = 0{,}01 \cdot H_s \cdot S$$
где:
- $Q_{пробег}$ — нормативный расход на пробег, л;
- $H_s$ — базовая норма расхода топлива, л/100 км (секция `fuel.base_norm`);
- $S$ — пробег, км (секция `fuel.mileage`).
Присутствует в ветках лёгковых автомобилей, автобусов и грузовых. В ветке самосвалов не
применяется: самосвал считает пробег по норме автомобиля-самосвала ($0{,}01 \cdot H_{sanc} \cdot S$)
внутри секций `fuel.dump_truck_q_*` (норма — `fuel.h_sanc`).
**Правила валидации:** нет — входы $H_s$ и $S$ посчитаны в секциях `fuel.base_norm` и `fuel.mileage`.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.q_transport — расход на транспортную работу.</summary>
public class FuelQTransport : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.q_transport";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 320;
public string Number => "";
public string Name => "Нормативный расход на транспортную работу, л";
public string Body => """
`methodSectionId: fuel.q_transport`
Слагаемое «расход на транспортную работу» — из нормы на транспортную работу и объёма
транспортной работы:
$$Q_{трансп} = 0{,}01 \cdot H_w \cdot W$$
где:
- $Q_{трансп}$ — нормативный расход на транспортную работу, л;
- $H_w$ — норма расхода топлива на транспортную работу, л/100 т·км (секция `fuel.h_transport`);
- $W$ — объём транспортной работы, т·км (секция `fuel.w`);
Присутствует в грузовых и специальных автомобилях.
**Правила валидации:** нет — входы $H_w$ и $W$ посчитаны в секциях `fuel.h_transport` и `fuel.w`.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.q_trailer — расход на массу прицепа.</summary>
public class FuelQTrailer : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.q_trailer";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 330;
public string Number => "";
public string Name => "Нормативный расход на массу прицепа, л";
public string Body => """
`methodSectionId: fuel.q_trailer`
Слагаемое «расход на дополнительную массу прицепа (полуприцепа)»:
$$Q_{прицеп} = 0{,}01 \cdot H_g \cdot G_{пр} \cdot S$$
где:
- $Q_{прицеп}$ — нормативный расход на массу прицепа, л;
- $H_g$ — норма расхода топлива на дополнительную массу прицепа, л/100 т·км (секция `fuel.h_trailer`);
- $G_{пр}$ — собственная масса прицепа (полуприцепа), т;
- $S$ — пробег, км (секция `fuel.mileage`).
Присутствует в грузовых.
**Правила валидации:** $G_{пр} \ge 0$.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.q_trips — расход на ездки с грузом.</summary>
public class FuelQTrips : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.q_trips";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 340;
public string Number => "";
public string Name => "Нормативный расход на ездки с грузом, л";
public string Body => """
`methodSectionId: fuel.q_trips`
Слагаемое «расход на каждую ездку с грузом» (самосвалы):
$$Q_{ездки} = H_z \cdot Z$$
где:
- $Q_{ездки}$ — нормативный расход на ездки с грузом, л;
- $H_z$ — дополнительная норма расхода топлива на каждую ездку с грузом, л;
- $Z$ — количество ездок с грузом за смену, шт.
**Правила валидации:** $Z \ge 0$.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.q_equipment — расход на работу оборудования.</summary>
public class FuelQEquipment : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.q_equipment";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 350;
public string Number => "";
public string Name => "Нормативный расход на работу оборудования, л";
public string Body => """
`methodSectionId: fuel.q_equipment`
Слагаемое «расход на работу отопителя»:
$$Q_{обор} = H_{от} \cdot T$$
где:
- $Q_{обор}$ — нормативный расход на работу отопителя, л;
- $H_{от}$ — норма расхода топлива на работу отопителя, л/ч;
- $T$ — время работы отопителя, ч.
Присутствует в автобусах. Расход на работу специального оборудования считается в ветке
специальных автомобилей (`fuel.special_stop_q_*`).
**Правила валидации:** $H_{от} \ge 0$; $T \ge 0$.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
// ─────────────────────────────── Ветки категорий ───────────────────────────────
/// <summary>Секция методики: fuel.passenger_car — ветка «Легковые автомобили».</summary>
public class FuelPassengerCar : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.passenger_car";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 400;
public string Number => "";
public string Name => "Легковые автомобили";
public string Body => """
`methodSectionId: fuel.passenger_car`
Ветка «Легковые автомобили». Расход для условий эксплуатации ТС (в зимний период, в летний период, за пригородной зоной) — `fuel.q_winter`, `fuel.q_summer`, `fuel.q_suburban`; норма —
расход на пробег (`fuel.q_mileage`). Городской режим и итог — общие секции `fuel.q_urban`,
`fuel.normative_consumption`.
**Правила валидации:** вид ТС отнесён к категории `PassengerCar` (секция `fuel.category_by_kind`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.bus — ветка «Автобусы».</summary>
public class FuelBus : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.bus";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 500;
public string Number => "";
public string Name => "Автобусы";
public string Body => """
`methodSectionId: fuel.bus`
Ветка «Автобусы». Расход для условий эксплуатации ТС (в зимний период, в летний период, за
пригородной зоной) — `fuel.bus_q_winter`, `fuel.bus_q_summer`, `fuel.bus_q_suburban`: к
расходу на пробег (`fuel.q_mileage`) добавляется расход на работу отопителя
(`fuel.q_equipment`) **вне поправочного коэффициента**. Городской режим и итог — общие
секции `fuel.q_urban`, `fuel.normative_consumption`.
**Правила валидации:** вид ТС отнесён к категории `Bus` (секция `fuel.category_by_kind`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.bus_q_suburban.</summary>
public class FuelBusQSuburban : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.bus_q_suburban";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelBus);
public int Order => 530;
public string Number => "";
public string Name => "Нормативный расход за пригородной зоной, л";
public string Body => """
`methodSectionId: fuel.bus_q_suburban`
Нормативный расход за пригородной зоной — расход на пробег с пригородным коэффициентом плюс
работа отопителя (вне коэффициента):
$$Q^{загор} = Q_{пробег} \cdot (1 + 0{,}01 \cdot D^{загор}) + Q_{обор}$$
где:
- $Q^{загор}$ — нормативный расход за пригородной зоной, л;
- $Q_{пробег}$ — нормативный расход на пробег, л (секция `fuel.q_mileage`);
- $D^{загор}$ — поправочный коэффициент к норме при работе за пригородной зоной, % (секция `fuel.cf_suburb`);
- $Q_{обор}$ — нормативный расход на работу отопителя, л (секция `fuel.q_equipment`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.bus_q_winter.</summary>
public class FuelBusQWinter : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.bus_q_winter";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelBus);
public int Order => 540;
public string Number => "";
public string Name => "Нормативный расход в зимний период, л";
public string Body => """
`methodSectionId: fuel.bus_q_winter`
Нормативный расход в зимний период — расход на пробег с зимним коэффициентом плюс работа
отопителя (вне коэффициента):
$$Q^{зима} = Q_{пробег} \cdot (1 + 0{,}01 \cdot D^{зима}) + Q_{обор}$$
где:
- $Q^{зима}$ — нормативный расход в зимний период, л;
- $Q_{пробег}$ — нормативный расход на пробег, л (секция `fuel.q_mileage`);
- $D^{зима}$ — поправочный коэффициент к норме в зимний период, % (секция `fuel.correction_factor_winter`);
- $Q_{обор}$ — нормативный расход на работу отопителя, л (секция `fuel.q_equipment`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.bus_q_summer.</summary>
public class FuelBusQSummer : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.bus_q_summer";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelBus);
public int Order => 550;
public string Number => "";
public string Name => "Нормативный расход в летний период, л";
public string Body => """
`methodSectionId: fuel.bus_q_summer`
Нормативный расход в летний период — расход на пробег с летним коэффициентом плюс работа
отопителя (вне коэффициента):
$$Q^{лето} = Q_{пробег} \cdot (1 + 0{,}01 \cdot D^{лето}) + Q_{обор}$$
где:
- $Q^{лето}$ — нормативный расход в летний период, л;
- $Q_{пробег}$ — нормативный расход на пробег, л (секция `fuel.q_mileage`);
- $D^{лето}$ — поправочный коэффициент к норме в летний период, % (секция `fuel.correction_factor_summer`);
- $Q_{обор}$ — нормативный расход на работу отопителя, л (секция `fuel.q_equipment`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.truck — ветка «Грузовые».</summary>
public class FuelTruck : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.truck";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 600;
public string Number => "";
public string Name => "Грузовые бортовые автомобили, автопоезда, тягачи и фургоны";
public string Body => """
`methodSectionId: fuel.truck`
Ветка «Грузовые бортовые, тягачи, фургоны, грузопассажирские». Расчёт — сумма расхода на
пробег (`fuel.q_mileage`), на транспортную работу (`fuel.q_transport`) и на массу прицепа
(`fuel.q_trailer`); поправочный коэффициент $(1 + 0{,}01 \cdot D)$ применяется ко всей
сумме. Расход для условий эксплуатации ТС (в зимний период, в летний период, за пригородной
зоной) — `fuel.truck_q_winter`, `fuel.truck_q_summer`, `fuel.truck_q_suburban`; городской
режим и итог — общие секции `fuel.q_urban`, `fuel.normative_consumption`.
**Правила валидации:** вид ТС отнесён к категории `CargoCar` (секция `fuel.category_by_kind`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.truck_q_suburban.</summary>
public class FuelTruckQSuburban : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.truck_q_suburban";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelTruck);
public int Order => 610;
public string Number => "";
public string Name => "Нормативный расход за пригородной зоной, л";
public string Body => """
`methodSectionId: fuel.truck_q_suburban`
Нормативный расход за пригородной зоной — сумма слагаемых ветки с пригородным коэффициентом:
$$Q^{загор} = (Q_{пробег} + Q_{трансп} + Q_{прицеп}) \cdot (1 + 0{,}01 \cdot D^{загор})$$
где:
- $Q^{загор}$ — нормативный расход за пригородной зоной, л;
- $Q_{пробег}$ — нормативный расход на пробег, л (секция `fuel.q_mileage`);
- $Q_{трансп}$ — нормативный расход на транспортную работу, л (секция `fuel.q_transport`);
- $Q_{прицеп}$ — нормативный расход на массу прицепа, л (секция `fuel.q_trailer`);
- $D^{загор}$ — поправочный коэффициент к норме при работе за пригородной зоной, % (секция `fuel.cf_suburb`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.truck_q_winter.</summary>
public class FuelTruckQWinter : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.truck_q_winter";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelTruck);
public int Order => 620;
public string Number => "";
public string Name => "Нормативный расход в зимний период, л";
public string Body => """
`methodSectionId: fuel.truck_q_winter`
Нормативный расход в зимний период — сумма слагаемых ветки с зимним коэффициентом:
$$Q^{зима} = (Q_{пробег} + Q_{трансп} + Q_{прицеп}) \cdot (1 + 0{,}01 \cdot D^{зима})$$
где:
- $Q^{зима}$ — нормативный расход в зимний период, л;
- $Q_{пробег}$ — нормативный расход на пробег, л (секция `fuel.q_mileage`);
- $Q_{трансп}$ — нормативный расход на транспортную работу, л (секция `fuel.q_transport`);
- $Q_{прицеп}$ — нормативный расход на массу прицепа, л (секция `fuel.q_trailer`);
- $D^{зима}$ — поправочный коэффициент к норме в зимний период, % (секция `fuel.correction_factor_winter`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.truck_q_summer.</summary>
public class FuelTruckQSummer : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.truck_q_summer";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelTruck);
public int Order => 630;
public string Number => "";
public string Name => "Нормативный расход в летний период, л";
public string Body => """
`methodSectionId: fuel.truck_q_summer`
Нормативный расход в летний период — сумма слагаемых ветки с летним коэффициентом:
$$Q^{лето} = (Q_{пробег} + Q_{трансп} + Q_{прицеп}) \cdot (1 + 0{,}01 \cdot D^{лето})$$
где:
- $Q^{лето}$ — нормативный расход в летний период, л;
- $Q_{пробег}$ — нормативный расход на пробег, л (секция `fuel.q_mileage`);
- $Q_{трансп}$ — нормативный расход на транспортную работу, л (секция `fuel.q_transport`);
- $Q_{прицеп}$ — нормативный расход на массу прицепа, л (секция `fuel.q_trailer`);
- $D^{лето}$ — поправочный коэффициент к норме в летний период, % (секция `fuel.correction_factor_summer`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.dump_truck — ветка «Самосвалы и самосвальные автопоезда».</summary>
public class FuelDumpTruck : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.dump_truck";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 700;
public string Number => "";
public string Name => "Самосвалы и самосвальные автопоезда";
public string Body => """
`methodSectionId: fuel.dump_truck`
Ветка «Самосвалы и самосвальные автопоезда». Расчёт — норма расхода автомобиля-самосвала
(автопоезда) `fuel.h_sanc` на пробег (`0,01 · H_{sanc} · S`) с поправочным коэффициентом
$(1 + 0{,}01 \cdot D)$, плюс расход на каждую ездку с грузом (`fuel.q_trips`) вне
коэффициента. Расход для условий эксплуатации ТС (в зимний период, в летний период, за
пригородной зоной) — `fuel.dump_truck_q_winter`, `fuel.dump_truck_q_summer`,
`fuel.dump_truck_q_suburban`; городской режим и итог — общие секции `fuel.q_urban`,
`fuel.normative_consumption`.
**Правила валидации:** вид ТС отнесён к категории `DumpTruck` (секция `fuel.category_by_kind`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.h_sanc — норма расхода автомобиля-самосвала (автопоезда).</summary>
public class FuelHSanc : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.h_sanc";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelDumpTruck);
public int Order => 710;
public string Number => "";
public string Name => "Норма расхода автомобиля-самосвала (автопоезда), л/100 км";
public string Body => $$"""
`methodSectionId: fuel.h_sanc`
Норма расхода топлива автомобиля-самосвала (самосвального автопоезда) $H_{sanc}$, л/100 км —
базовая норма плюс надбавка на транспортную работу (собственную массу самосвального прицепа и
половину его грузоподъёмности):
$$H_{sanc} = H_s + H_w \cdot (G_{пр} + 0{,}5 \cdot q)$$
где:
- $H_{sanc}$ — норма расхода топлива автомобиля-самосвала (автопоезда), л/100 км;
- $H_s$ — базовая норма расхода топлива, л/100 км (секция `fuel.base_norm`);
- $H_w$ — норма расхода топлива на транспортную работу автомобиля-самосвала, л/100 т·км — параметр `DumpTruckTransportWorkConsumptionRate` модели входных данных {{SdaidAnchors.RefTo<DOC_InputModel>()}} (вводится в модуле);
- $G_{пр}$ — собственная масса самосвального прицепа (полуприцепа), т; при его отсутствии 0;
- $q$ — грузоподъёмность самосвального прицепа (полуприцепа), т; при его отсутствии 0.
**Правила валидации:** $H_w \ge 0$; $G_{пр} \ge 0$; $q \ge 0$.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.dump_truck_q_winter — расход самосвалов в зимний период.</summary>
public class FuelDumpQWinter : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.dump_truck_q_winter";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelDumpTruck);
public int Order => 720;
public string Number => "";
public string Name => "Нормативный расход в зимний период, л";
public string Body => """
`methodSectionId: fuel.dump_truck_q_winter`
Нормативный расход в зимний период — норма автомобиля-самосвала на пробег с зимним
коэффициентом плюс расход на ездки (вне коэффициента):
$$Q^{зима} = 0{,}01 \cdot H_{sanc} \cdot S \cdot (1 + 0{,}01 \cdot D^{зима}) + Q_{ездки}$$
где:
- $Q^{зима}$ — нормативный расход в зимний период, л;
- $H_{sanc}$ — норма расхода топлива автомобиля-самосвала (автопоезда), л/100 км (секция `fuel.h_sanc`);
- $S$ — пробег, км (секция `fuel.mileage`);
- $D^{зима}$ — поправочный коэффициент к норме в зимний период, % (секция `fuel.correction_factor_winter`);
- $Q_{ездки}$ — нормативный расход на ездки с грузом, л (секция `fuel.q_trips`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.dump_truck_q_summer — расход самосвалов в летний период.</summary>
public class FuelDumpQSummer : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.dump_truck_q_summer";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelDumpTruck);
public int Order => 730;
public string Number => "";
public string Name => "Нормативный расход в летний период, л";
public string Body => """
`methodSectionId: fuel.dump_truck_q_summer`
Нормативный расход в летний период — норма автомобиля-самосвала на пробег с летним
коэффициентом плюс расход на ездки (вне коэффициента):
$$Q^{лето} = 0{,}01 \cdot H_{sanc} \cdot S \cdot (1 + 0{,}01 \cdot D^{лето}) + Q_{ездки}$$
где:
- $Q^{лето}$ — нормативный расход в летний период, л;
- $H_{sanc}$ — норма расхода топлива автомобиля-самосвала (автопоезда), л/100 км (секция `fuel.h_sanc`);
- $S$ — пробег, км (секция `fuel.mileage`);
- $D^{лето}$ — поправочный коэффициент к норме в летний период, % (секция `fuel.correction_factor_summer`);
- $Q_{ездки}$ — нормативный расход на ездки с грузом, л (секция `fuel.q_trips`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.dump_truck_q_suburban — расход самосвалов за пригородной зоной.</summary>
public class FuelDumpQSuburban : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.dump_truck_q_suburban";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelDumpTruck);
public int Order => 740;
public string Number => "";
public string Name => "Нормативный расход за пригородной зоной, л";
public string Body => """
`methodSectionId: fuel.dump_truck_q_suburban`
Нормативный расход за пригородной зоной — норма автомобиля-самосвала на пробег с
пригородным коэффициентом плюс расход на ездки (вне коэффициента):
$$Q^{загор} = 0{,}01 \cdot H_{sanc} \cdot S \cdot (1 + 0{,}01 \cdot D^{загор}) + Q_{ездки}$$
где:
- $Q^{загор}$ — нормативный расход за пригородной зоной, л;
- $H_{sanc}$ — норма расхода топлива автомобиля-самосвала (автопоезда), л/100 км (секция `fuel.h_sanc`);
- $S$ — пробег, км (секция `fuel.mileage`);
- $D^{загор}$ — поправочный коэффициент к норме при работе за пригородной зоной, % (секция `fuel.cf_suburb`);
- $Q_{ездки}$ — нормативный расход на ездки с грузом, л (секция `fuel.q_trips`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.special_vehicle — ветка «Специальные и специализированные автомобили».</summary>
public class FuelSpecialVehicle : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.special_vehicle";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 800;
public string Number => "";
public string Name => "Специальные и специализированные автомобили";
public string Body => """
`methodSectionId: fuel.special_vehicle`
Ветка «Специальные и специализированные автомобили». Норма расхода специального автомобиля
на пробег считается с учётом транспортной работы (секция `fuel.h_sc`). Расчёт ведётся по двум
периодам работы:
- **период передвижения** — расход на пробег по норме `fuel.h_sc`: пробег делится на пробег
к месту работы и обратно ($S' = 0{,}3 \cdot S$) и пробег при выполнении специальной работы
при передвижении ($S'' = 0{,}7 \cdot S$); режимы — `fuel.special_move_q_winter`,
`fuel.special_move_q_summer`, `fuel.special_move_q_suburban` и `fuel.special_move`;
- **период стоянки** — к расходу на пробег добавляется работа специального оборудования;
режимы — `fuel.special_stop_q_winter`, `fuel.special_stop_q_summer`,
`fuel.special_stop_q_suburban` и `fuel.special_stop`.
Итог ветки — нормативный расход (секция `fuel.special_normative`): среднее периодов
передвижения и стоянки.
Поправочные коэффициенты ветки отличаются от общего контура: для специальных автомобилей
зимний коэффициент — сумма районного и специального, летний — только специальный
(`fuel.special_correction_factor_winter`, `fuel.special_correction_factor_summer`),
коэффициент за пригородной зоной — общий (`fuel.cf_suburb`).
**Правила валидации:** вид ТС отнесён к категории `SpecCar` (секция `fuel.category_by_kind`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.special_correction_factor_winter — зимний коэффициент спец-ветки.</summary>
public class FuelSpecialCorrectionFactorWinter : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.special_correction_factor_winter";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelSpecialVehicle);
public int Order => 806;
public string Number => "";
public string Name => "Поправочный коэффициент к норме в зимний период, %";
public string Body => $$"""
`methodSectionId: fuel.special_correction_factor_winter`
Для специальных автомобилей зимний коэффициент — районный плюс специальный:
$$D^{зима} = D_{район} + D_{спец}$$
где:
- $D^{зима}$ — поправочный коэффициент к норме в зимний период, %;
- $D_{район}$ — поправочный коэффициент на климатический район, % — параметр `ClimateRegionAllowance` модели входных данных {{SdaidAnchors.RefTo<DOC_InputModel>()}};
- $D_{спец}$ — поправочный коэффициент при работе специальных автомобилей, % — параметр `SpecialVehicleAllowance` модели входных данных.
**Правила валидации:** $D_{спец} \ge 0$.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.special_correction_factor_summer — летний коэффициент спец-ветки.</summary>
public class FuelSpecialCorrectionFactorSummer : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.special_correction_factor_summer";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelSpecialVehicle);
public int Order => 807;
public string Number => "";
public string Name => "Поправочный коэффициент к норме в летний период, %";
public string Body => $$"""
`methodSectionId: fuel.special_correction_factor_summer`
Для специальных автомобилей летний коэффициент — только специальный:
$$D^{лето} = D_{спец}$$
где:
- $D^{лето}$ — поправочный коэффициент к норме в летний период, %;
- $D_{спец}$ — поправочный коэффициент при работе специальных автомобилей, % — параметр `SpecialVehicleAllowance` модели входных данных {{SdaidAnchors.RefTo<DOC_InputModel>()}}.
**Правила валидации:** $D_{спец} \ge 0$.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.h_sc — норма специального автомобиля на пробег с учётом транспортной работы.</summary>
public class FuelHSc : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.h_sc";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelSpecialVehicle);
public int Order => 850;
public string Number => "";
public string Name => "Норма специального автомобиля на пробег с учётом транспортной работы, л/100 км";
public string Body => """
`methodSectionId: fuel.h_sc`
Норма расхода специального автомобиля на пробег с учётом транспортной работы $H_{sc}$, л/100 км —
базовая норма плюс транспортная работа:
$$H_{sc} = H_s + H_w \cdot \frac{W}{100}$$
где:
- $H_{sc}$ — норма специального автомобиля на пробег с учётом транспортной работы, л/100 км;
- $H_s$ — базовая норма расхода топлива, л/100 км (секция `fuel.base_norm`);
- $H_w$ — норма расхода топлива на транспортную работу, л/100 т·км (секция `fuel.h_transport`);
- $W$ — объём транспортной работы, т·км (секция `fuel.w`).
**Правила валидации:** нет — входы $H_s$, $H_w$ и $W$ посчитаны в секциях `fuel.base_norm`, `fuel.h_transport` и `fuel.w`.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.h_s_special_work — норма расхода топлива при выполнении специальной работы во время передвижения.</summary>
public class FuelHSSpecialWork : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.h_s_special_work";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelHSc);
public int Order => 851;
public string Number => "";
public string Name => "Норма расхода топлива на пробег при выполнении специальной работы во время передвижения, л/100 км";
public string Body => """
`methodSectionId: fuel.h_s_special_work`
Норма расхода топлива на пробег при выполнении специальной работы во время передвижения
$H_s''$, л/100 км — равна норме специального автомобиля на пробег:
$$H_s'' = H_{sc}$$
где:
- $H_s''$ — норма расхода топлива на пробег при выполнении специальной работы во время передвижения, л/100 км;
- $H_{sc}$ — норма специального автомобиля на пробег, л/100 км (секция `fuel.h_sc`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.h_special_equipment — норма на работу специального оборудования.</summary>
public class FuelHSpecialEquipment : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.h_special_equipment";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelSpecialVehicle);
public int Order => 860;
public string Number => "";
public string Name => "Норма расхода топлива на работу специального оборудования, л/ч";
public string Body => $$$"""
`methodSectionId: fuel.h_special_equipment`
Норма расхода топлива на работу специального оборудования $H_т$, л/ч — среднее норм расхода
топлива на час работы (летней и зимней) — параметры `ConsumptionRatePerHourSummer` и `ConsumptionRatePerHourWinter`
модели входных данных {{{SdaidAnchors.RefTo<DOC_InputModel>()}}}:
$$H_т = \frac{H_т^{лето} + H_т^{зима}}{2}$$
где:
- $H_т$ — норма расхода топлива на работу специального оборудования, л/ч;
- $H_т^{лето}$ — норма расхода топлива на час работы, летняя, л/ч — параметр `ConsumptionRatePerHourSummer` модели входных данных;
- $H_т^{зима}$ — норма расхода топлива на час работы, зимняя, л/ч — параметр `ConsumptionRatePerHourWinter` модели входных данных.
**Правила валидации:** нормы расхода топлива на час работы (летняя и зимняя) $\ge 0$.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.special_equipment_time — время работы специального оборудования.</summary>
public class FuelSpecialEquipmentTime : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.special_equipment_time";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelSpecialVehicle);
public int Order => 861;
public string Number => "";
public string Name => "Время работы специального оборудования, ч";
public string Body => """
`methodSectionId: fuel.special_equipment_time`
Время работы специального оборудования $T$, ч — постоянная методики:
$$T = 1$$
где:
- $T$ — время работы специального оборудования, ч.
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.special_move_q_winter — период передвижения в зимний период.</summary>
public class FuelSpecialMoveQWinter : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.special_move_q_winter";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelSpecialMoveQUrban);
public int Order => 822;
public string Number => "";
public string Name => "Нормативный расход за период передвижения в зимний период, л";
public string Body => """
`methodSectionId: fuel.special_move_q_winter`
Нормативный расход за период передвижения в зимний период:
$$Q_{движ}^{зима} = 0{,}01 \cdot (H_{sc} \cdot S' + H_s'' \cdot S'') \cdot (1 + 0{,}01 \cdot D^{зима})$$
где:
- $Q_{движ}^{зима}$ — нормативный расход за период передвижения в зимний период, л;
- $H_{sc}$ — норма специального автомобиля на пробег, л/100 км (секция `fuel.h_sc`);
- $H_s''$ — норма расхода топлива на пробег при выполнении специальной работы во время передвижения, л/100 км (секция `fuel.h_s_special_work`);
- $S'$ — пробег к месту работы и обратно, км (секция `fuel.s_special_to_work`);
- $S''$ — пробег при выполнении специальной работы при передвижении, км (секция `fuel.s_special_on_work`);
- $S$ — пробег, км (секция `fuel.mileage`);
- $D^{зима}$ — поправочный коэффициент к норме в зимний период, % (секция `fuel.special_correction_factor_winter`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.special_move_q_summer — период передвижения в летний период.</summary>
public class FuelSpecialMoveQSummer : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.special_move_q_summer";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelSpecialMoveQUrban);
public int Order => 823;
public string Number => "";
public string Name => "Нормативный расход за период передвижения в летний период, л";
public string Body => """
`methodSectionId: fuel.special_move_q_summer`
Нормативный расход за период передвижения в летний период:
$$Q_{движ}^{лето} = 0{,}01 \cdot (H_{sc} \cdot S' + H_s'' \cdot S'') \cdot (1 + 0{,}01 \cdot D^{лето})$$
где:
- $Q_{движ}^{лето}$ — нормативный расход за период передвижения в летний период, л;
- $H_{sc}$ — норма специального автомобиля на пробег, л/100 км (секция `fuel.h_sc`);
- $H_s''$ — норма расхода топлива на пробег при выполнении специальной работы во время передвижения, л/100 км (секция `fuel.h_s_special_work`);
- $S'$ — пробег к месту работы и обратно, км (секция `fuel.s_special_to_work`);
- $S''$ — пробег при выполнении специальной работы при передвижении, км (секция `fuel.s_special_on_work`);
- $S$ — пробег, км (секция `fuel.mileage`);
- $D^{лето}$ — поправочный коэффициент к норме в летний период, % (секция `fuel.special_correction_factor_summer`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.special_move_q_suburban — период передвижения за пригородной зоной.</summary>
public class FuelSpecialMoveQSuburban : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.special_move_q_suburban";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelSpecialMove);
public int Order => 824;
public string Number => "";
public string Name => "Нормативный расход за период передвижения за пригородной зоной, л";
public string Body => """
`methodSectionId: fuel.special_move_q_suburban`
Нормативный расход за период передвижения за пригородной зоной:
$$Q_{движ}^{загор} = 0{,}01 \cdot (H_{sc} \cdot S' + H_s'' \cdot S'') \cdot (1 + 0{,}01 \cdot D^{загор})$$
где:
- $Q_{движ}^{загор}$ — нормативный расход за период передвижения за пригородной зоной, л;
- $H_{sc}$ — норма специального автомобиля на пробег, л/100 км (секция `fuel.h_sc`);
- $H_s''$ — норма расхода топлива на пробег при выполнении специальной работы во время передвижения, л/100 км (секция `fuel.h_s_special_work`);
- $S'$ — пробег к месту работы и обратно, км (секция `fuel.s_special_to_work`);
- $S''$ — пробег при выполнении специальной работы при передвижении, км (секция `fuel.s_special_on_work`);
- $S$ — пробег, км (секция `fuel.mileage`);
- $D^{загор}$ — поправочный коэффициент к норме при работе за пригородной зоной, % (секция `fuel.cf_suburb`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.special_move_q_urban — городской расход периода передвижения.</summary>
public class FuelSpecialMoveQUrban : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.special_move_q_urban";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelSpecialMove);
public int Order => 821;
public string Number => "";
public string Name => "Нормативный расход в городском режиме за период передвижения, л";
public string Body => """
`methodSectionId: fuel.special_move_q_urban`
Городской нормативный расход за период передвижения — среднее зимнего и летнего расхода:
$$Q_{движ}^{гор} = \frac{Q_{движ}^{зима} + Q_{движ}^{лето}}{2}$$
где:
- $Q_{движ}^{гор}$ — городской расход периода передвижения, л;
- $Q_{движ}^{зима}$ — нормативный расход за период передвижения в зимний период, л (секция `fuel.special_move_q_winter`);
- $Q_{движ}^{лето}$ — нормативный расход за период передвижения в летний период, л (секция `fuel.special_move_q_summer`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.special_move — средний расход за период передвижения.</summary>
public class FuelSpecialMove : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.special_move";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelSpecialNormative);
public int Order => 820;
public string Number => "";
public string Name => "Нормативный расход за период передвижения, л";
public string Body => """
`methodSectionId: fuel.special_move`
Нормативный расход за период передвижения — среднее городского и пригородного
расхода периода передвижения:
$$Q_{движ} = \frac{Q_{движ}^{гор} + Q_{движ}^{загор}}{2}$$
где:
- $Q_{движ}$ — нормативный расход за период передвижения, л;
- $Q_{движ}^{гор}$ — городской расход периода передвижения, л (секция `fuel.special_move_q_urban`);
- $Q_{движ}^{загор}$ — расход за пригородной зоной периода передвижения, л (секция `fuel.special_move_q_suburban`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.special_stop_q_winter — период стоянки в зимний период.</summary>
public class FuelSpecialStopQWinter : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.special_stop_q_winter";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelSpecialStopQUrban);
public int Order => 832;
public string Number => "";
public string Name => "Нормативный расход за период стоянки в зимний период, л";
public string Body => """
`methodSectionId: fuel.special_stop_q_winter`
Нормативный расход за период стоянки в зимний период — расход на пробег плюс работа
оборудования:
$$Q_{стоян}^{зима} = (0{,}01 \cdot H_{sc} \cdot S + H_т \cdot T) \cdot (1 + 0{,}01 \cdot D^{зима})$$
где:
- $Q_{стоян}^{зима}$ — нормативный расход за период стоянки в зимний период, л;
- $H_{sc}$ — норма специального автомобиля на пробег, л/100 км (секция `fuel.h_sc`);
- $S$ — пробег, км (секция `fuel.mileage`);
- $H_т$ — норма расхода топлива на работу специального оборудования, л/ч (или литры на выполненную операцию) (секция `fuel.h_special_equipment`);
- $T$ — время работы специального оборудования, ч (секция `fuel.special_equipment_time`);
- $D^{зима}$ — поправочный коэффициент к норме в зимний период, % (секция `fuel.special_correction_factor_winter`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.special_stop_q_summer — период стоянки в летний период.</summary>
public class FuelSpecialStopQSummer : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.special_stop_q_summer";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelSpecialStopQUrban);
public int Order => 833;
public string Number => "";
public string Name => "Нормативный расход за период стоянки в летний период, л";
public string Body => """
`methodSectionId: fuel.special_stop_q_summer`
Нормативный расход за период стоянки в летний период — расход на пробег плюс работа оборудования:
$$Q_{стоян}^{лето} = (0{,}01 \cdot H_{sc} \cdot S + H_т \cdot T) \cdot (1 + 0{,}01 \cdot D^{лето})$$
где:
- $Q_{стоян}^{лето}$ — нормативный расход за период стоянки в летний период, л;
- $H_{sc}$ — норма специального автомобиля на пробег, л/100 км (секция `fuel.h_sc`);
- $S$ — пробег, км (секция `fuel.mileage`);
- $H_т$ — норма расхода топлива на работу специального оборудования, л/ч (или литры на выполненную операцию) (секция `fuel.h_special_equipment`);
- $T$ — время работы специального оборудования, ч (секция `fuel.special_equipment_time`);
- $D^{лето}$ — поправочный коэффициент к норме в летний период, % (секция `fuel.special_correction_factor_summer`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.special_stop_q_suburban — период стоянки за пригородной зоной.</summary>
public class FuelSpecialStopQSuburban : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.special_stop_q_suburban";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelSpecialStop);
public int Order => 834;
public string Number => "";
public string Name => "Нормативный расход за период стоянки за пригородной зоной, л";
public string Body => """
`methodSectionId: fuel.special_stop_q_suburban`
Нормативный расход за период стоянки за пригородной зоной — расход на пробег плюс работа
оборудования:
$$Q_{стоян}^{загор} = (0{,}01 \cdot H_{sc} \cdot S + H_т \cdot T) \cdot (1 + 0{,}01 \cdot D^{загор})$$
где:
- $Q_{стоян}^{загор}$ — нормативный расход за период стоянки за пригородной зоной, л;
- $H_{sc}$ — норма специального автомобиля на пробег, л/100 км (секция `fuel.h_sc`);
- $S$ — пробег, км (секция `fuel.mileage`);
- $H_т$ — норма расхода топлива на работу специального оборудования, л/ч (или литры на выполненную операцию) (секция `fuel.h_special_equipment`);
- $T$ — время работы специального оборудования, ч (секция `fuel.special_equipment_time`);
- $D^{загор}$ — поправочный коэффициент к норме при работе за пригородной зоной, % (секция `fuel.cf_suburb`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.special_stop_q_urban — городской расход периода стоянки.</summary>
public class FuelSpecialStopQUrban : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.special_stop_q_urban";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelSpecialStop);
public int Order => 831;
public string Number => "";
public string Name => "Нормативный расход в городском режиме за период стоянки, л";
public string Body => """
`methodSectionId: fuel.special_stop_q_urban`
Городской нормативный расход за период стоянки — среднее зимнего и летнего расхода:
$$Q_{стоян}^{гор} = \frac{Q_{стоян}^{зима} + Q_{стоян}^{лето}}{2}$$
где:
- $Q_{стоян}^{гор}$ — городской расход периода стоянки, л;
- $Q_{стоян}^{зима}$ — нормативный расход за период стоянки в зимний период, л (секция `fuel.special_stop_q_winter`);
- $Q_{стоян}^{лето}$ — нормативный расход за период стоянки в летний период, л (секция `fuel.special_stop_q_summer`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.special_stop — средний расход за период стоянки.</summary>
public class FuelSpecialStop : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.special_stop";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelSpecialNormative);
public int Order => 830;
public string Number => "";
public string Name => "Нормативный расход за период стоянки, л";
public string Body => """
`methodSectionId: fuel.special_stop`
Нормативный расход за период стоянки — среднее городского и пригородного расхода
периода стоянки:
$$Q_{стоян} = \frac{Q_{стоян}^{гор} + Q_{стоян}^{загор}}{2}$$
где:
- $Q_{стоян}$ — нормативный расход за период стоянки, л;
- $Q_{стоян}^{гор}$ — городской расход периода стоянки, л (секция `fuel.special_stop_q_urban`);
- $Q_{стоян}^{загор}$ — расход за пригородной зоной периода стоянки, л (секция `fuel.special_stop_q_suburban`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.special_normative — итог ветки специальных автомобилей.</summary>
public class FuelSpecialNormative : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.special_normative";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelSpecialVehicle);
public int Order => 805;
public string Number => "";
public string Name => "Нормативный расход, л";
public string Body => """
`methodSectionId: fuel.special_normative`
Нормативный расход специального автомобиля — среднее периодов передвижения и стоянки:
$$Q_н = \frac{Q_{движ} + Q_{стоян}}{2}$$
где:
- $Q_н$ — нормативный расход, л;
- $Q_{движ}$ — нормативный расход за период передвижения, л (секция `fuel.special_move`);
- $Q_{стоян}$ — нормативный расход за период стоянки, л (секция `fuel.special_stop`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
// ───────────────────── Условия эксплуатации, городской режим и итог ─────────────────────
/// <summary>Секция методики: fuel.normative_consumption — результат ветки.</summary>
public class FuelQNormative : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.normative_consumption";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 360;
public string Number => "";
public string Name => "Нормативный расход, л";
public string Body => """
`methodSectionId: fuel.normative_consumption`
Итоговый нормативный расход, л — среднее городского режима и расхода за пригородной зоной:
$$Q_н = \frac{Q^{гор} + Q^{загор}}{2}$$
где:
- $Q_н$ — нормативный расход, л;
- $Q^{гор}$ — нормативный расход в городском режиме, л (секция `fuel.q_urban`);
- $Q^{загор}$ — нормативный расход за пригородной зоной, л (секция ветки: `fuel.q_suburban`, `fuel.bus_q_suburban`, …).
Ветка специальных и специализированных автомобилей считает итог иначе — среднее периодов
передвижения и стоянки (секция `fuel.special_normative`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.reference_consumption — эталонный расход.</summary>
public class FuelReferenceConsumption : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.reference_consumption";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 361;
public string Number => "";
public string Name => "Эталонный расход, л";
public string Body => """
`methodSectionId: fuel.reference_consumption`
Эталонный расход $Q_{эт}$, л — результат той же ветки категории ТС, что и нормативный
расход (`fuel.normative_consumption` / `fuel.special_normative`), с единственной заменой
входа: везде, где ветка использует базовую норму $H_s$ (секция `fuel.base_norm`) —
начиная с `fuel.q_mileage` и, для самосвалов и спецавтомобилей, прямо в норме на пробег
(`fuel.h_sanc`, `fuel.h_sc`) — подставляется эталонная норма $H_{эт}$ (секция
`fuel.reference_norm`). Ни одна формула веток не переписывается — секция только называет
замену входа; результат вычисляется тем же алгоритмом второй раз.
где:
- $Q_{эт}$ — эталонный расход, л;
- $H_{эт}$ — эталонная норма расхода топлива, л/100 км (секция `fuel.reference_norm`).
**Правила валидации:** те же, что у `fuel.normative_consumption`/`fuel.special_normative`,
плюс отдельное условие по входу — $H_{эт}$ определена (см. `fuel.reference_norm`); если
базовая группа пуста, $H_{эт}$ и $Q_{эт}$ не определены одновременно с $H_s$ и $Q_н$ (одна
и та же ошибка «Базовая норма не определена»).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.q_urban.</summary>
public class FuelQUrban : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.q_urban";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(object);
public int Order => 370;
public string Number => "";
public string Name => "Нормативный расход в городском режиме, л";
public string Body => """
`methodSectionId: fuel.q_urban`
Нормативный расход в городском режиме — среднее зимнего и летнего расходов:
$$Q^{гор} = \frac{Q^{зима} + Q^{лето}}{2}$$
где:
- $Q^{гор}$ — нормативный расход в городском режиме, л;
- $Q^{зима}$ — нормативный расход в зимний период, л (секция ветки: `fuel.q_winter`, `fuel.bus_q_winter`, …);
- $Q^{лето}$ — нормативный расход в летний период, л (секция ветки: `fuel.q_summer`, `fuel.bus_q_summer`, …).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.q_suburban.</summary>
public class FuelQSuburban : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.q_suburban";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelPassengerCar);
public int Order => 430;
public string Number => "";
public string Name => "Нормативный расход за пригородной зоной, л";
public string Body => """
`methodSectionId: fuel.q_suburban`
Нормативный расход за пригородной зоной — расход на пробег с пригородным коэффициентом:
$$Q^{загор} = Q_{пробег} \cdot (1 + 0{,}01 \cdot D^{загор})$$
где:
- $Q^{загор}$ — нормативный расход за пригородной зоной, л;
- $Q_{пробег}$ — нормативный расход на пробег, л (секция `fuel.q_mileage`);
- $D^{загор}$ — поправочный коэффициент к норме при работе за пригородной зоной, % (секция `fuel.cf_suburb`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.q_winter.</summary>
public class FuelQWinter : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.q_winter";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelPassengerCar);
public int Order => 440;
public string Number => "";
public string Name => "Нормативный расход в зимний период, л";
public string Body => """
`methodSectionId: fuel.q_winter`
Нормативный расход в зимний период — расход на пробег с зимним коэффициентом:
$$Q^{зима} = Q_{пробег} \cdot (1 + 0{,}01 \cdot D^{зима})$$
где:
- $Q^{зима}$ — нормативный расход в зимний период, л;
- $Q_{пробег}$ — нормативный расход на пробег, л (секция `fuel.q_mileage`);
- $D^{зима}$ — поправочный коэффициент к норме в зимний период, % (секция `fuel.correction_factor_winter`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
/// <summary>Секция методики: fuel.q_summer.</summary>
public class FuelQSummer : ISdaidDocumentSection
{
/// <summary>Идентификатор секции методики; тот же идентификатор стоит в XML-doc калькулятора.</summary>
public static string MethodSectionId = "fuel.q_summer";
public Type Document => typeof(DOC_NtsCalc);
public Type Parent => typeof(FuelPassengerCar);
public int Order => 450;
public string Number => "";
public string Name => "Нормативный расход в летний период, л";
public string Body => """
`methodSectionId: fuel.q_summer`
Нормативный расход в летний период — расход на пробег с летним коэффициентом:
$$Q^{лето} = Q_{пробег} \cdot (1 + 0{,}01 \cdot D^{лето})$$
где:
- $Q^{лето}$ — нормативный расход в летний период, л;
- $Q_{пробег}$ — нормативный расход на пробег, л (секция `fuel.q_mileage`);
- $D^{лето}$ — поправочный коэффициент к норме в летний период, % (секция `fuel.correction_factor_summer`).
""";
public string Version => "";
public string Status => "";
public string[] Comments => new string[0];
}
}