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; }
}
}