Транспортное средство

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

Единица реестра ТС: принадлежность организационному объекту, вид и назначение, характеристики, от которых зависит норма расхода топлива.

⟨/⟩ Исходник

1. Открытые вопросы

Открытые вопросы о транспортном средстве собраны в эпике: OQ_Vehicle.

Связи

classDiagram
    direction LR
    class Vehicle {
        +Guid id
        +Guid ais_id
        +Boolean is_absent_in_ais
        +NavEntity org_object_id
        +String name
        +String license_plate
        +String model_name
        +String model_name_special
        +Int32 manufacture_year
        +VehicleKind vehicle_kind_id
        +VehicleMark vehicle_mark_id
        +VehicleModel vehicle_model_id
        +VehicleModification vehicle_modification_id
        +String passport_type_name
        +VehicleFunction vehicle_function_id
        +FuelKind fuel_kind_primary_id
        +FuelKind fuel_kind_secondary_id
        +Decimal norm_per_mileage_summer_l_per_100km
        +Decimal norm_per_mileage_winter_l_per_100km
        +Decimal norm_per_hour_summer_l_per_h
        +Decimal norm_per_hour_winter_l_per_h
        +Decimal cargo_capacity
        +Int32 passenger_capacity
        +Decimal trailer_mass
        +DateTime start_date
        +DateTime finish_date
        +Decimal consumption_rate_when_using_heater
        +Decimal time_when_using_heater
        +Decimal dump_truck_transport_work_consumption_rate
        +Int32 trips_with_cargo_per_shift
        +Decimal population_allowance
        +Decimal tech_stop_allowance
        +Decimal low_speed_allowance
        +Decimal special_vehicle_allowance
        +Decimal emergency_allowance
        +Decimal forced_idle_allowance
    }
    class NavEntity
    class VehicleKind
    class VehicleMark
    class VehicleModel
    class VehicleModification
    class VehicleFunction
    class FuelKind
    Vehicle "1" --> "1" NavEntity : org_object_id
    Vehicle "0..1" --> "1" VehicleKind : vehicle_kind_id
    Vehicle "0..1" --> "1" VehicleMark : vehicle_mark_id
    Vehicle "0..1" --> "1" VehicleModel : vehicle_model_id
    Vehicle "0..1" --> "1" VehicleModification : vehicle_modification_id
    Vehicle "0..1" --> "1" VehicleFunction : vehicle_function_id
    Vehicle "0..1" --> "1" FuelKind : fuel_kind_primary_id
    Vehicle "0..1" --> "1" FuelKind : fuel_kind_secondary_id

Структура

НаименованиеАтрибутТипОбязательно для созданияТребуется для расчётаЕИДиапазон / форматЗначение по умолчаниюНеизменяемостьОписание
Идентификатор записиidGuidДаUUIDДа
ИД объекта в АИСais_idGuidНетДаИД объекта в АИС ОИА ПЭО
Признак отсутствия в АИСis_absent_in_aisBooleanНетНетЗаписи нет в последней выгрузке АИС; импорт не удаляет ТС и не меняет данные модуля
Организационный объект — владелец ТСorg_object_idNavEntityДаТип организационного объекта: {Company; Mes; Pmes}Определяет субъект РФ для зимней надбавки. ТС числятся за ПМЭС и МЭС
НаименованиеnameStringДа
Государственный регистрационный знакlicense_plateStringНет
Марка и модель базы ТСmodel_nameStringНет
Модель спец. автомобиляmodel_name_specialStringНет
Год выпускаmanufacture_yearInt32Нет
Вид ТСvehicle_kind_idVehicleKindНетДаОпределяет формулу расчёта: легковой, автобус, грузовой бортовой, тягач, самосвал, фургон, специальный
Марка ТСvehicle_mark_idVehicleMarkНетПроставляется в модуле; заполняется, когда известна только марка
Модель ТСvehicle_model_idVehicleModelНетПроставляется в модуле; заполняется, если модель известна (иначе достаточно марки)
Модификация ТСvehicle_modification_idVehicleModificationНетПроставляется в модуле; заполняется, если известна модификация (иначе достаточно марки/модели)
Тип по паспорту ТСpassport_type_nameStringНет
Назначение ТСvehicle_function_idVehicleFunctionНет
Основной вид топливаfuel_kind_primary_idFuelKindНетДаЗадаёт норму расхода на транспортную работу: 2 л/100 т·км для бензина, 1,3 л/100 т·км для дизельного топлива
Дополнительный вид топливаfuel_kind_secondary_idFuelKindНет
Норма расхода топлива на пробег, летняяnorm_per_mileage_summer_l_per_100kmDecimalНетл/100 кмвещественное, > 0
Норма расхода топлива на пробег, зимняяnorm_per_mileage_winter_l_per_100kmDecimalНетл/100 кмвещественное, > 0
Норма расхода топлива на час работы, летняяnorm_per_hour_summer_l_per_hDecimalНетл/чвещественное, ≥ 0Для спецавтомобилей: работа оборудования
Норма расхода топлива на час работы, зимняяnorm_per_hour_winter_l_per_hDecimalНетл/чвещественное, ≥ 0Для спецавтомобилей: работа оборудования
Грузоподъёмность, тcargo_capacityDecimalНеттвещественное, ≥ 0
Пассажировместимость, чел.passenger_capacityInt32Нетчел.целое, ≥ 0Для автобусов задаёт нормируемую загрузку пассажиров
Собственная масса прицепа (полуприцепа), тtrailer_massDecimalНеттвещественное, ≥ 0Вносится в модуле, из АИС не приходит; для грузовых
Дата начала эксплуатацииstart_dateDateTimeНетДаВместе с отчётной датой задаёт срок эксплуатации для поправочного коэффициента D_{эксп}
Дата окончания эксплуатацииfinish_dateDateTimeНетЗаполнена — ТС выбыло из эксплуатации
Норма расхода топлива при использовании штатных отопителей, л/чconsumption_rate_when_using_heaterDecimalНетл/чвещественное, ≥ 0Вносится в модуле, из АИС не приходит; для автобусов
Время работы автомобиля с включённым отопителем, чtime_when_using_heaterDecimalНетчвещественное, ≥ 0Вносится в модуле, из АИС не приходит; для автобусов
Норма расхода топлива на транспортную работу автомобиля-самосвала и на дополнительную массу самосвального прицепа или полуприцепа, л/100 т·кмdump_truck_transport_work_consumption_rateDecimalНетл/100 т·кмвещественное, ≥ 0Вносится в модуле, из АИС не приходит; для самосвалов
Количество поездок с грузом за смену, шт.trips_with_cargo_per_shiftInt32Нетшт.целое, ≥ 0Вносится в модуле, из АИС не приходит; для самосвалов
Поправочный коэффициент на численность населения, %population_allowanceDecimalНет%вещественное, ≥ 0Вносится в модуле, по умолчанию 0
Поправочный коэффициент на частые технологические остановки, %tech_stop_allowanceDecimalНет%вещественное, ≥ 0Вносится в модуле, по умолчанию 0
Поправочный коэффициент при движении с пониженной скоростью, %low_speed_allowanceDecimalНет%вещественное, ≥ 0Вносится в модуле, по умолчанию 0
Поправочный коэффициент при работе специальных автомобилей, %special_vehicle_allowanceDecimalНет%вещественное, ≥ 0Вносится в модуле, по умолчанию 0
Поправочный коэффициент при работе в условиях ЧС, %emergency_allowanceDecimalНет%вещественное, ≥ 0Вносится в модуле, по умолчанию 0
Поправочный коэффициент при вынужденном простое, %forced_idle_allowanceDecimalНет%вещественное, ≥ 0Вносится в модуле, по умолчанию 0

Исходник

    public class Vehicle
    {
        /// <summary>Идентификатор записи</summary>
        [DomainField(Alias = "id", RequiredOnCreate = true, Range = "UUID", Immutable = true)]
        public Guid Id { get; set; }

        /// <summary>ИД объекта в АИС</summary>
        [DomainField(Alias = "ais_id", Description = "ИД объекта в АИС ОИА ПЭО", Immutable = true)]
        public Guid AisId { get; set; }

        /// <summary>Признак отсутствия в АИС</summary>
        [DomainField(Alias = "is_absent_in_ais", Default = "Нет",
            Description = "Записи нет в последней выгрузке АИС; импорт не удаляет ТС и не меняет данные модуля")]
        public bool IsAbsentInAis { get; set; }

        /// <summary>Организационный объект — владелец ТС</summary>
        [Relation]
        [DomainField(Alias = "org_object_id", RequiredOnCreate = true,
            Range = "Тип организационного объекта: {Company; Mes; Pmes}",
            Description = "Определяет субъект РФ для зимней надбавки. ТС числятся за ПМЭС и МЭС")]
        public NavEntity? OrgObject { get; set; }

        /// <summary>Наименование</summary>
        [DomainField(Alias = "name", RequiredOnCreate = true)]
        public string? Name { get; set; }

        /// <summary>Государственный регистрационный знак</summary>
        [DomainField(Alias = "license_plate")]
        public string? LicensePlate { get; set; }

        /// <summary>Марка и модель базы ТС</summary>
        [DomainField(Alias = "model_name")]
        public string? ModelName { get; set; }

        /// <summary>Модель спец. автомобиля</summary>
        [DomainField(Alias = "model_name_special")]
        public string? ModelNameSpecial { get; set; }

        /// <summary>Год выпуска</summary>
        [DomainField(Alias = "manufacture_year")]
        public int? ManufactureYear { get; set; }

        /// <summary>Вид ТС</summary>
        [Relation]
        [DomainField(Alias = "vehicle_kind_id", RequiredForCalc = "Да",
            Description = "Определяет формулу расчёта: легковой, автобус, грузовой бортовой, тягач, самосвал, фургон, специальный")]
        public VehicleKind? VehicleKind { get; set; }

        /// <summary>Марка ТС</summary>
        [Relation]
        [DomainField(Alias = "vehicle_mark_id",
            Description = "Проставляется в модуле; заполняется, когда известна только марка")]
        public VehicleMark? VehicleMark { get; set; }

        /// <summary>Модель ТС</summary>
        [Relation]
        [DomainField(Alias = "vehicle_model_id",
            Description = "Проставляется в модуле; заполняется, если модель известна (иначе достаточно марки)")]
        public VehicleModel? VehicleModel { get; set; }

        /// <summary>Модификация ТС</summary>
        [Relation]
        [DomainField(Alias = "vehicle_modification_id",
            Description = "Проставляется в модуле; заполняется, если известна модификация (иначе достаточно марки/модели)")]
        public VehicleModification? VehicleModification { get; set; }

        /// <summary>Тип по паспорту ТС</summary>
        [DomainField(Alias = "passport_type_name")]
        public string? TypeNamePassport { get; set; }

        /// <summary>Назначение ТС</summary>
        [Relation]
        [DomainField(Alias = "vehicle_function_id")]
        public VehicleFunction? VehicleFunction { get; set; }

        /// <summary>Основной вид топлива</summary>
        [Relation]
        [DomainField(Alias = "fuel_kind_primary_id", RequiredForCalc = "Да",
            Description = "Задаёт норму расхода на транспортную работу: 2 л/100 т·км для бензина, 1,3 л/100 т·км для дизельного топлива")]
        public FuelKind? FuelKindPrimary { get; set; }

        /// <summary>Дополнительный вид топлива</summary>
        [Relation]
        [DomainField(Alias = "fuel_kind_secondary_id")]
        public FuelKind? FuelKindSecondary { get; set; }

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

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

        /// <summary>Норма расхода топлива на час работы, летняя</summary>
        [DomainField(Alias = "norm_per_hour_summer_l_per_h", Unit = "л/ч", Range = "вещественное, ≥ 0",
            Description = "Для спецавтомобилей: работа оборудования")]
        public decimal? ConsumptionRatePerHourSummer { get; set; }

        /// <summary>Норма расхода топлива на час работы, зимняя</summary>
        [DomainField(Alias = "norm_per_hour_winter_l_per_h", Unit = "л/ч", Range = "вещественное, ≥ 0",
            Description = "Для спецавтомобилей: работа оборудования")]
        public decimal? ConsumptionRatePerHourWinter { get; set; }

        /// <summary>Грузоподъёмность, т</summary>
        [DomainField(Alias = "cargo_capacity", Unit = "т", Range = "вещественное, ≥ 0")]
        public decimal? CargoCapacity { get; set; }

        /// <summary>Пассажировместимость, чел.</summary>
        [DomainField(Alias = "passenger_capacity", Unit = "чел.", Range = "целое, ≥ 0",
            Description = "Для автобусов задаёт нормируемую загрузку пассажиров")]
        public int? PassengerCapacity { get; set; }

        /// <summary>Собственная масса прицепа (полуприцепа), т</summary>
        [DomainField(Alias = "trailer_mass", Unit = "т", Range = "вещественное, ≥ 0",
            Description = "Вносится в модуле, из АИС не приходит; для грузовых")]
        public decimal? TrailerMass { get; set; }

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

        /// <summary>Дата окончания эксплуатации</summary>
        [DomainField(Alias = "finish_date",
            Description = "Заполнена — ТС выбыло из эксплуатации")]
        public DateTime? FinishDate { get; set; }

        /// <summary>Норма расхода топлива при использовании штатных отопителей, л/ч</summary>
        [DomainField(Alias = "consumption_rate_when_using_heater", Unit = "л/ч", Range = "вещественное, ≥ 0",
            Description = "Вносится в модуле, из АИС не приходит; для автобусов")]
        public decimal? ConsumptionRateForUsingHeater { get; set; }

        /// <summary>Время работы автомобиля с включённым отопителем, ч</summary>
        [DomainField(Alias = "time_when_using_heater", Unit = "ч", Range = "вещественное, ≥ 0",
            Description = "Вносится в модуле, из АИС не приходит; для автобусов")]
        public decimal? TimeWhenUsingHeater { get; set; }

        /// <summary>Норма расхода топлива на транспортную работу автомобиля-самосвала и на дополнительную массу самосвального прицепа или полуприцепа, л/100 т·км</summary>
        [DomainField(Alias = "dump_truck_transport_work_consumption_rate", Unit = "л/100 т·км", Range = "вещественное, ≥ 0",
            Description = "Вносится в модуле, из АИС не приходит; для самосвалов")]
        public decimal? DumpTruckTransportWorkConsumptionRate { get; set; }

        /// <summary>Количество поездок с грузом за смену, шт.</summary>
        [DomainField(Alias = "trips_with_cargo_per_shift", Unit = "шт.", Range = "целое, ≥ 0",
            Description = "Вносится в модуле, из АИС не приходит; для самосвалов")]
        public int? TripsWithCargoPerShift { get; set; }

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

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

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

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

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

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