⟨/⟩ Nts/50_Domain/Reference/VehicleModification.cs

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

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

namespace Rugrid.Sdaid.Epas.Nts.Domain
{
    /// <summary>
    /// Справочник «Марка, модель и модификация ТС»: собственный справочник модуля. Наполняется
    /// из нормативного документа (приложение к распоряжению Минтранса). Вид ТС, марка и топливо —
    /// ссылки на справочники; связка «вид + марка» задаётся здесь, а не связью марки с видом.
    /// Охватывает и базовые ТС, и специальный транспорт (модификации спец. автомобилей).
    /// </summary>
    public class DOC_VehicleModification : IDomainEntityDocument, IHasStructuralLinks, IFolder<NtsDomainFolder>
    {
        public SdaidLink[] Links => new[]
        {
            Rel.Uses<DOC_VehicleKind>(),
            Rel.Uses<DOC_VehicleModel>(),
            Rel.Uses<DOC_FuelKind>(),
        };

        public static string _refName = "Марка, модель и модификация ТС";

        public string Name => "Марка, модель и модификация ТС";

        public string Description =>
            @"Марка, модель и модификация транспортного средства. Задаёт нормы расхода топлива:
норму на пробег автомобиля и (для спец. автомобилей) нормы на работу оборудования.";

        public string Version => "0.1";
        public string Status => "draft";
        public string[] Comments => new string[0];
        public Type Entity => typeof(VehicleModification);

        public static string KindAlignment = $$""""
## Соответствие видов с АИС

Эталон видов — справочник {{SdaidAnchors.RefTo<DOC_VehicleKind>()}} (заимствован из АИС).
Названия видов модификаций приведены к его строкам.

| Вид АИС | В постановлении | Действие |
|---|---|---|
| Медицинские автотранспортные средства отечественные и стран СНГ | Медицинские автотранспортные средства отечественные | переименование |
| Автомобили–эвакуаторы | Автомобили эвакуаторы на базе автомобилей отечественных и стран СНГ; Автомобили эвакуаторы на базе автомобилей зарубежных | объединение двух видов в один |

Остальные виды совпадают (всего 33).

**Только в АИС, норм в постановлении нет (8):** трактор, снегоход, бульдозер,
грузопассажирские автомобили, спец-рубительная машина, бригадный автомобиль, вездеход,
гусеничный болотоход.

**Только в постановлении, вида в АИС нет (2), игнорируются:** `Спец - Бронированные
автомобили`, `Спец - Автомобили для перевозки подозреваемых, временно заключенных`.
"""";
    }

    /// <summary>
    /// Доменная сущность «Марка, модель и модификация ТС». Полное наименование — как в документе;
    /// модель и модификация выделены отдельно. Период действия постановления («до 1997» /
    /// «с 2008») — свойство нормативного документа-источника, не атрибут сущности: если одна и
    /// та же модификация имела разные нормы в разные периоды, это различие отражено прямо в
    /// тексте модификации (например, уточнением «до 1997»), а не отдельным полем записи.
    /// </summary>
    [DomainEntity]
    public class VehicleModification
    {
        /// <summary>Идентификатор записи</summary>
        [DomainField(Alias = "id", RequiredOnCreate = true, Range = "UUID", Immutable = true)]
        public Guid Id { get; set; }

        /// <summary>Полное наименование (строка колонки справочника)</summary>
        [DomainField(Alias = "full_modification", RequiredOnCreate = true,
            Description = "«Модель, марка, модификация автомобиля» как в документе; для спец. автомобиля — «Модель специального или специализированного автомобиля»")]
        public string? FullModification { get; set; }

        /// <summary>Модель</summary>
        [Relation]
        [DomainField(Alias = "vehicle_model_id", RequiredOnCreate = true,
            Description = "Модель без модификации; несколько моделей в строке раскрываются в отдельные записи")]
        public VehicleModel? VehicleModel { get; set; }

        /// <summary>Модификация</summary>
        [DomainField(Alias = "modifications",
            Description = "Уточнение из скобок (двигатель/исполнение); для спец. «до 1997» — базовая модель (шасси)")]
        public string? Modifications { get; set; }

        /// <summary>Вид ТС</summary>
        [Relation]
        [DomainField(Alias = "vehicle_kind_id", RequiredOnCreate = true)]
        public VehicleKind? VehicleKind { get; set; }

        /// <summary>Вид топлива</summary>
        [Relation]
        [DomainField(Alias = "fuel_kind_id")]
        public FuelKind? FuelKind { get; set; }

        /// <summary>Норма на пробег автомобиля, л/100 км</summary>
        [DomainField(Alias = "norm_per_mileage_l_100km", Unit = "л/100 км", Range = "вещественное, ≥ 0")]
        public decimal? NormPerMileage { get; set; }

        /// <summary>Транспортная норма, л/100 км</summary>
        [DomainField(Alias = "transport_norm_l_100km", Unit = "л/100 км", Range = "вещественное, ≥ 0",
            Description = "Для автобусов и самосвалов норма задаётся как транспортная")]
        public decimal? TransportNorm { get; set; }

        /// <summary>Норма на работу оборудования, л/ч</summary>
        [DomainField(Alias = "norm_equipment_l_h", Unit = "л/ч", Range = "вещественное, ≥ 0")]
        public decimal? NormEquipment { get; set; }

        /// <summary>Норма расхода топлива при работе двигателя со спец. агрегатами, л/мин</summary>
        [DomainField(Alias = "norm_special_units_l_min", Unit = "л/мин", Range = "вещественное, ≥ 0")]
        public decimal? NormSpecialUnits { get; set; }

        /// <summary>Норма расхода топлива при работе двигателя в стационарном режиме без нагрузки, л/мин</summary>
        [DomainField(Alias = "norm_stationary_no_load_l_min", Unit = "л/мин", Range = "вещественное, ≥ 0")]
        public decimal? NormStationaryNoLoad { get; set; }

        /// <summary>Норма на 1 ч работы битумного насоса, л/ч</summary>
        [DomainField(Alias = "norm_bitumen_pump_l_h", Unit = "л/ч", Range = "вещественное, ≥ 0")]
        public decimal? NormBitumenPump { get; set; }

        /// <summary>Норма на 1 ч работы подогревателя цистерны, л/ч</summary>
        [DomainField(Alias = "norm_cistern_heater_l_h", Unit = "л/ч", Range = "вещественное, ≥ 0")]
        public decimal? NormCisternHeater { get; set; }

        /// <summary>Норма на 1 ч работы гудронатора, л/ч</summary>
        [DomainField(Alias = "norm_tar_gun_l_h", Unit = "л/ч", Range = "вещественное, ≥ 0")]
        public decimal? NormTarGun { get; set; }

        /// <summary>Норма на погрузку и разгрузку комплекта контейнеров, л</summary>
        [DomainField(Alias = "norm_container_load_unload_l", Unit = "л", Range = "вещественное, ≥ 0")]
        public decimal? NormContainerLoadUnload { get; set; }

        /// <summary>Норма на заполнение и слив одной цистерны, л</summary>
        [DomainField(Alias = "norm_cistern_fill_drain_l", Unit = "л", Range = "вещественное, ≥ 0")]
        public decimal? NormCisternFillDrain { get; set; }

        /// <summary>Норма на загрузку и обдув одной цистерны, л</summary>
        [DomainField(Alias = "norm_cistern_load_blow_l", Unit = "л", Range = "вещественное, ≥ 0")]
        public decimal? NormCisternLoadBlow { get; set; }
    }
}