Модель входных данных расчёта

Доменная сущность Версия: 0.2 draft

Исходные данные расчёта нормативного расхода топлива: обозначение в формулах, единица измерения, диапазон и источник значения.

⟨/⟩ Исходник

1. Как читать таблицу

Связи

classDiagram
    direction LR
    class InputModel {
        +String VehicleKind
        +String FuelType
        +IReadOnlyList~Decimal~ BaseConsumptionRates
        +IReadOnlyList~Decimal~ ReferenceGroupConsumptionRates
        +Decimal Mileage
        +Decimal CargoCapacity
        +Decimal TrailerMass
        +Int32 TripsWithCargoPerShift
        +Decimal DumpTruckTransportWorkConsumptionRate
        +Decimal ConsumptionRateForUsingHeater
        +Decimal HeaterTime
        +Decimal ConsumptionRatePerHourSummer
        +Decimal ConsumptionRatePerHourWinter
        +DateTime StartDate
        +DateTime ReportDate
        +Decimal ClimateRegionAllowance
        +Decimal PopulationAllowance
        +Decimal TechStopAllowance
        +Decimal LowSpeedAllowance
        +Decimal SpecialVehicleAllowance
        +Decimal EmergencyAllowance
        +Decimal ForcedIdleAllowance
    }

Структура

НаименованиеТипОбозначениеИсточникТребуется для расчётаЕИДиапазон / форматОписание
Вид ТСStringVehicle.VehicleKindДаВыбирает формулу расчёта: лёгковой, автобус, грузовой бортовой и тягач, самосвал, фургон, специальный. Реальный путь: Vehicle.VehicleKind.Code — значение, с которым сравнивает методика (см. fuel.category_by_kind), не наименование; CalcSource указывает на саму связь Vehicle.VehicleKind (см. ограничение атрибута — Comments)
Вид топливаStringVehicle.FuelKindPrimaryДа{бензин, дизельное топливо}Для лёгкового расход не зависит от топлива; используется в ветках грузовых и самосвалов. Реальный путь: Vehicle.FuelKindPrimary.Name — фактическое значение, с которым сравнивает методика (см. fuel.h_transport/fuel.h_trailer); CalcSource указывает на саму связь (см. ограничение атрибута — Comments)
Базовые нормы отобранных модификаций, л/100 кмIReadOnlyList<Decimal>SelectedModifications.VehicleModificationДал/100 кмсписок, ≥ 1 элементаБазовые нормы отобранных для ТС модификаций справочника «Марка, модель и модификация ТС»; по ним секция fuel.base_norm вычисляет минимальную и максимальную базовые нормы и саму базовую норму H_s. Реальный путь: VehicleModification.NormPerMileage каждой из строк SelectedModifications, отобранных для данного ТС (коллекция, не одна строка); CalcSource указывает на связь одной строки отбора — SelectedModifications.VehicleModification (см. ограничение атрибута — Comments)
Базовые нормы всей базовой группы (вид ТС + вид топлива), л/100 кмIReadOnlyList<Decimal>VehicleModification.NormPerMileageДал/100 кмсписок, ≥ 1 элементаБазовые нормы ВСЕХ модификаций базовой группы ТС (вид ТС + вид топлива, мягко суженной по топливу), не только отобранных для ТС; по ним секция fuel.reference_norm вычисляет эталонную норму H_эт = min. Пустая группа — та же ошибка, что у BaseConsumptionRates («Базовая норма не определена»). Реальный путь: VehicleModification.NormPerMileage у ВСЕХ строк справочника, отобранных процедурой подбора базовой группы по виду ТС и виду топлива (см. Nts.Backend.ModificationSelection.DOC_ModificationGroupSelection, раздел «Базовая группа») — фильтр по условию, не связь одной строки, как у BaseConsumptionRates; CalcSource указывает на само поле VehicleModification.NormPerMileage (см. ограничение атрибута — Comments)
Пробег за период, кмDecimal\(S\)кмвещественное, > 0 или не переданоЗадаётся вызывающей стороной расчёта, не только картой ТС — например, формированием отчёта реальным фактическим пробегом за период. Не передано (null) — секция fuel.mileage сама подставляет эталон (удельный расход) — 100 км; передано, но ≤ 0 — ошибка валидации. Карточка ТС это поле не задаёт и всегда получает эталон
Грузоподъёмность, тDecimal\(q\)Vehicle.CargoCapacityтвещественное, ≥ 0Для грузовых: задаёт массу груза (секция fuel.g_cargo)
Собственная масса прицепа (полуприцепа), тDecimal\(G_{пр}\)Vehicle.TrailerMassтвещественное, ≥ 0Для грузовых; вводится в модуле, по умолчанию 0
Количество поездок с грузом за смену, штInt32\(Z\)Vehicle.TripsWithCargoPerShiftшт.целое, ≥ 0Для самосвалов; вводится в модуле, по умолчанию 0
Норма расхода топлива на транспортную работу автомобиля-самосвала, л/100 т·кмDecimal\(H_w\)Vehicle.DumpTruckTransportWorkConsumptionRateл/100 т·кмвещественное, ≥ 0Для самосвалов; вводится в модуле
Норма расхода топлива на работу отопителя, л/чDecimal\(H_{от}\)Vehicle.ConsumptionRateForUsingHeaterл/чвещественное, ≥ 0Для автобусов; вводится в модуле, по умолчанию 0
Время работы автомобиля с включённым отопителем, чDecimal\(T\)Vehicle.TimeWhenUsingHeaterчвещественное, ≥ 0Для автобусов; вводится в модуле, по умолчанию 0
Норма расхода топлива на час работы, летняя, л/чDecimal\(H_т^{лето}\)Vehicle.ConsumptionRatePerHourSummerл/чвещественное, ≥ 0Для специальных автомобилей; из АИС ОИА ПЭО
Норма расхода топлива на час работы, зимняя, л/чDecimal\(H_т^{зима}\)Vehicle.ConsumptionRatePerHourWinterл/чвещественное, ≥ 0Для специальных автомобилей; из АИС ОИА ПЭО
Дата начала эксплуатацииDateTime\(StartDate\)Vehicle.StartDateДадатаВместе с отчётной датой задаёт срок эксплуатации для надбавки D_{эксп}
Отчётная датаDateTime\(ReportDate\)ДадатаДата расчёта; для расчёта берётся текущая дата
Предельная величина зимних надбавок не более, %Decimal\(D_{район}\)Да%вещественное, ≥ 0Предельная величина зимней надбавки для субъекта РФ, в котором эксплуатируется ТС; равна поправочному коэффициенту на климатический район D_{район}. Выбирается из справочника «Предельные значения зимних надбавок» по субъекту РФ эксплуатации ТС
Поправочный коэффициент на численность населенияDecimal\(D_{нас}\)Vehicle.PopulationAllowance%вещественное, ≥ 0Поправочный коэффициент на численность населения, %; вводится в модуле, по умолчанию 0
Поправочный коэффициент на частые технологические остановкиDecimal\(D_{ост}\)Vehicle.TechStopAllowance%вещественное, ≥ 0Поправочный коэффициент на частые технологические остановки, %; вводится в модуле, по умолчанию 0
Поправочный коэффициент при движении с пониженной скоростьюDecimal\(D_{пон}\)Vehicle.LowSpeedAllowance%вещественное, ≥ 0Поправочный коэффициент при движении с пониженной скоростью, %; вводится в модуле, по умолчанию 0
Поправочный коэффициент при работе специальных автомобилейDecimal\(D_{спец}\)Vehicle.SpecialVehicleAllowance%вещественное, ≥ 0Поправочный коэффициент при работе специальных автомобилей, %; вводится в модуле, по умолчанию 0
Поправочный коэффициент при работе в условиях ЧСDecimal\(D_{чс}\)Vehicle.EmergencyAllowance%вещественное, ≥ 0Поправочный коэффициент при работе в условиях ЧС, %; вводится в модуле, по умолчанию 0
Поправочный коэффициент при вынужденном простоеDecimal\(D_{прос}\)Vehicle.ForcedIdleAllowance%вещественное, ≥ 0Поправочный коэффициент при вынужденном простое, %; вводится в модуле, по умолчанию 0

Исходник

    public class InputModel
    {
        /// <summary>Вид ТС</summary>
        [DomainField(RequiredForCalc = "Да",
            Description = "Выбирает формулу расчёта: лёгковой, автобус, грузовой бортовой и тягач, самосвал, фургон, специальный. " +
                "Реальный путь: `Vehicle.VehicleKind.Code` — значение, с которым сравнивает методика " +
                "(см. `fuel.category_by_kind`), не наименование; `CalcSource` указывает на саму связь `Vehicle.VehicleKind` (см. ограничение атрибута — Comments)")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.VehicleKind))]
        public string? VehicleKind { get; set; }

        /// <summary>Вид топлива</summary>
        [DomainField(RequiredForCalc = "Да", Range = "{бензин, дизельное топливо}",
            Description = "Для лёгкового расход не зависит от топлива; используется в ветках грузовых и самосвалов. " +
                "Реальный путь: `Vehicle.FuelKindPrimary.Name` — фактическое значение, с которым сравнивает методика " +
                "(см. `fuel.h_transport`/`fuel.h_trailer`); `CalcSource` указывает на саму связь (см. ограничение атрибута — Comments)")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.FuelKindPrimary))]
        public string? FuelType { get; set; }

        /// <summary>Базовые нормы отобранных модификаций, л/100 км</summary>
        [DomainField(Unit = "л/100 км", Range = "список, ≥ 1 элемента", RequiredForCalc = "Да",
            Description = "Базовые нормы отобранных для ТС модификаций справочника «Марка, модель и модификация ТС»; по ним секция `fuel.base_norm` вычисляет минимальную и максимальную базовые нормы и саму базовую норму H_s. " +
                "Реальный путь: `VehicleModification.NormPerMileage` каждой из строк `SelectedModifications`, отобранных " +
                "для данного ТС (коллекция, не одна строка); `CalcSource` указывает на связь одной строки отбора — " +
                "`SelectedModifications.VehicleModification` (см. ограничение атрибута — Comments)")]
        [CalcSource(typeof(SelectedModifications), nameof(SelectedModifications.VehicleModification))]
        public IReadOnlyList<decimal>? BaseConsumptionRates { get; set; }

        /// <summary>Базовые нормы всей базовой группы (вид ТС + вид топлива), л/100 км</summary>
        [DomainField(Unit = "л/100 км", Range = "список, ≥ 1 элемента", RequiredForCalc = "Да",
            Description = "Базовые нормы ВСЕХ модификаций базовой группы ТС (вид ТС + вид топлива, мягко суженной по топливу), не только отобранных для ТС; по ним секция `fuel.reference_norm` вычисляет эталонную норму H_эт = min. Пустая группа — та же ошибка, что у `BaseConsumptionRates` («Базовая норма не определена»). " +
                "Реальный путь: `VehicleModification.NormPerMileage` у ВСЕХ строк справочника, отобранных процедурой " +
                "подбора базовой группы по виду ТС и виду топлива (см. Nts.Backend.ModificationSelection.DOC_ModificationGroupSelection, " +
                "раздел «Базовая группа») — фильтр по условию, не связь одной строки, как у `BaseConsumptionRates`; " +
                "`CalcSource` указывает на само поле `VehicleModification.NormPerMileage` (см. ограничение атрибута — Comments)")]
        [CalcSource(typeof(Rugrid.Sdaid.Epas.Nts.Domain.VehicleModification), nameof(Rugrid.Sdaid.Epas.Nts.Domain.VehicleModification.NormPerMileage))]
        public IReadOnlyList<decimal>? ReferenceGroupConsumptionRates { get; set; }

        /// <summary>Пробег за период, км</summary>
        [DomainField(Symbol = "S", Unit = "км", Range = "вещественное, > 0 или не передано",
            Description = "Задаётся вызывающей стороной расчёта, не только картой ТС — например, " +
                "формированием отчёта реальным фактическим пробегом за период. Не передано (`null`) " +
                "— секция `fuel.mileage` сама подставляет эталон (удельный расход) — 100 км; передано, " +
                "но ≤ 0 — ошибка валидации. Карточка ТС это поле не задаёт и всегда получает эталон")]
        public decimal? Mileage { get; set; }

        /// <summary>Грузоподъёмность, т</summary>
        [DomainField(Symbol = "q", Unit = "т", Range = "вещественное, ≥ 0",
            Description = "Для грузовых: задаёт массу груза (секция `fuel.g_cargo`)")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.CargoCapacity))]
        public decimal? CargoCapacity { get; set; }

        /// <summary>Собственная масса прицепа (полуприцепа), т</summary>
        [DomainField(Symbol = "G_{пр}", Unit = "т", Range = "вещественное, ≥ 0",
            Description = "Для грузовых; вводится в модуле, по умолчанию 0")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.TrailerMass))]
        public decimal? TrailerMass { get; set; }

        /// <summary>Количество поездок с грузом за смену, шт</summary>
        [DomainField(Symbol = "Z", Unit = "шт.", Range = "целое, ≥ 0",
            Description = "Для самосвалов; вводится в модуле, по умолчанию 0")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.TripsWithCargoPerShift))]
        public int? TripsWithCargoPerShift { get; set; }

        /// <summary>Норма расхода топлива на транспортную работу автомобиля-самосвала, л/100 т·км</summary>
        [DomainField(Symbol = "H_w", Unit = "л/100 т·км", Range = "вещественное, ≥ 0",
            Description = "Для самосвалов; вводится в модуле")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.DumpTruckTransportWorkConsumptionRate))]
        public decimal? DumpTruckTransportWorkConsumptionRate { get; set; }

        /// <summary>Норма расхода топлива на работу отопителя, л/ч</summary>
        [DomainField(Symbol = "H_{от}", Unit = "л/ч", Range = "вещественное, ≥ 0",
            Description = "Для автобусов; вводится в модуле, по умолчанию 0")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.ConsumptionRateForUsingHeater))]
        public decimal? ConsumptionRateForUsingHeater { get; set; }

        /// <summary>Время работы автомобиля с включённым отопителем, ч</summary>
        [DomainField(Symbol = "T", Unit = "ч", Range = "вещественное, ≥ 0",
            Description = "Для автобусов; вводится в модуле, по умолчанию 0")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.TimeWhenUsingHeater))]
        public decimal? HeaterTime { get; set; }

        /// <summary>Норма расхода топлива на час работы, летняя, л/ч</summary>
        [DomainField(Symbol = "H_т^{лето}", Unit = "л/ч", Range = "вещественное, ≥ 0",
            Description = "Для специальных автомобилей; из АИС ОИА ПЭО")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.ConsumptionRatePerHourSummer))]
        public decimal? ConsumptionRatePerHourSummer { get; set; }

        /// <summary>Норма расхода топлива на час работы, зимняя, л/ч</summary>
        [DomainField(Symbol = "H_т^{зима}", Unit = "л/ч", Range = "вещественное, ≥ 0",
            Description = "Для специальных автомобилей; из АИС ОИА ПЭО")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.ConsumptionRatePerHourWinter))]
        public decimal? ConsumptionRatePerHourWinter { get; set; }

        /// <summary>Дата начала эксплуатации</summary>
        [DomainField(Symbol = "StartDate", Range = "дата", RequiredForCalc = "Да",
            Description = "Вместе с отчётной датой задаёт срок эксплуатации для надбавки D_{эксп}")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.StartDate))]
        public DateTime? StartDate { get; set; }

        /// <summary>Отчётная дата</summary>
        [DomainField(Symbol = "ReportDate", Range = "дата", RequiredForCalc = "Да",
            Description = "Дата расчёта; для расчёта берётся текущая дата")]
        public DateTime? ReportDate { get; set; }

        /// <summary>Предельная величина зимних надбавок не более, %</summary>
        [DomainField(Symbol = "D_{район}", Unit = "%", Range = "вещественное, ≥ 0", RequiredForCalc = "Да",
            Description = "Предельная величина зимней надбавки для субъекта РФ, в котором эксплуатируется ТС; равна поправочному коэффициенту на климатический район D_{район}. Выбирается из справочника «Предельные значения зимних надбавок» по субъекту РФ эксплуатации ТС")]
        public decimal? ClimateRegionAllowance { get; set; }

        /// <summary>Поправочный коэффициент на численность населения</summary>
        [DomainField(Symbol = "D_{нас}", Unit = "%", Range = "вещественное, ≥ 0",
            Description = "Поправочный коэффициент на численность населения, %; вводится в модуле, по умолчанию 0")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.PopulationAllowance))]
        public decimal PopulationAllowance { get; set; }

        /// <summary>Поправочный коэффициент на частые технологические остановки</summary>
        [DomainField(Symbol = "D_{ост}", Unit = "%", Range = "вещественное, ≥ 0",
            Description = "Поправочный коэффициент на частые технологические остановки, %; вводится в модуле, по умолчанию 0")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.TechStopAllowance))]
        public decimal TechStopAllowance { get; set; }

        /// <summary>Поправочный коэффициент при движении с пониженной скоростью</summary>
        [DomainField(Symbol = "D_{пон}", Unit = "%", Range = "вещественное, ≥ 0",
            Description = "Поправочный коэффициент при движении с пониженной скоростью, %; вводится в модуле, по умолчанию 0")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.LowSpeedAllowance))]
        public decimal LowSpeedAllowance { get; set; }

        /// <summary>Поправочный коэффициент при работе специальных автомобилей</summary>
        [DomainField(Symbol = "D_{спец}", Unit = "%", Range = "вещественное, ≥ 0",
            Description = "Поправочный коэффициент при работе специальных автомобилей, %; вводится в модуле, по умолчанию 0")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.SpecialVehicleAllowance))]
        public decimal SpecialVehicleAllowance { get; set; }

        /// <summary>Поправочный коэффициент при работе в условиях ЧС</summary>
        [DomainField(Symbol = "D_{чс}", Unit = "%", Range = "вещественное, ≥ 0",
            Description = "Поправочный коэффициент при работе в условиях ЧС, %; вводится в модуле, по умолчанию 0")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.EmergencyAllowance))]
        public decimal EmergencyAllowance { get; set; }

        /// <summary>Поправочный коэффициент при вынужденном простое</summary>
        [DomainField(Symbol = "D_{прос}", Unit = "%", Range = "вещественное, ≥ 0",
            Description = "Поправочный коэффициент при вынужденном простое, %; вводится в модуле, по умолчанию 0")]
        [CalcSource(typeof(Vehicle), nameof(Vehicle.ForcedIdleAllowance))]
        public decimal ForcedIdleAllowance { get; set; }
    }