Организационный объект

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

Узел организационной структуры: тип, вышестоящий объект, ссылка на типизированную запись. Владелец транспортного средства; область, город и субъект РФ задают зимнюю надбавку.

⟨/⟩ Исходник

Связи

classDiagram
    direction LR
    class NavEntity {
        +Guid id
        +Guid ais_id
        +String name
        +Guid parent_id
        +NavType nav_type_id
        +String nav_type_eid
        +NavCompany company_id
        +NavMes mes_id
        +NavPmes pmes_id
        +String region
        +String city
        +Subject subject_id
    }
    class NavType
    class NavCompany
    class NavMes
    class NavPmes
    class Subject
    NavEntity "1" --> "1" NavType : nav_type_id
    NavEntity "0..1" --> "1" NavCompany : company_id
    NavEntity "0..1" --> "1" NavMes : mes_id
    NavEntity "0..1" --> "1" NavPmes : pmes_id
    NavEntity "0..1" --> "1" Subject : subject_id

Структура

НаименованиеАтрибутТипОбязательно для созданияДиапазон / форматНеизменяемостьОписание
Идентификатор записиidGuidДаUUIDДа
ИД объекта в АИСais_idGuidНетДаИД объекта в АИС ОИА ПЭО
НаименованиеnameStringДа
Вышестоящий организационный объектparent_idGuidНетСсылка на вышестоящий узел оргструктуры
Тип организационного объектаnav_type_idNavTypeДа
Дискриминатор типа организационного объектаnav_type_eidStringДа{Company; Mes; Pmes}Значение типа организационного объекта; обозначение типа в АИС — NavType.AisAlias
Компанияcompany_idNavCompanyНет
МЭСmes_idNavMesНет
ПМЭСpmes_idNavPmesНет
ОбластьregionStringНетЗагружается из АИС ОИА ПЭО
ГородcityStringНетЗагружается из АИС ОИА ПЭО
Субъект Российской Федерацииsubject_idSubjectНетПроставляется в модуле; может быть не задан

Исходник

    public class NavEntity
    {
        /// <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 = "name", RequiredOnCreate = true)]
        public string? Name { get; set; }

        /// <summary>Вышестоящий организационный объект</summary>
        [DomainField(Alias = "parent_id", Description = "Ссылка на вышестоящий узел оргструктуры")]
        public Guid? ParentId { get; set; }

        /// <summary>Тип организационного объекта</summary>
        [Relation]
        [DomainField(Alias = "nav_type_id", RequiredOnCreate = true)]
        public NavType? NavType { get; set; }

        /// <summary>Дискриминатор типа организационного объекта</summary>
        [DomainField(Alias = "nav_type_eid", RequiredOnCreate = true, Range = "{Company; Mes; Pmes}",
            Description = "Значение типа организационного объекта; обозначение типа в АИС — `NavType.AisAlias`")]
        public string? NavTypeEid { get; set; }

        /// <summary>Компания</summary>
        [Relation]
        [DomainField(Alias = "company_id")]
        public NavCompany? Company { get; set; }

        /// <summary>МЭС</summary>
        [Relation]
        [DomainField(Alias = "mes_id")]
        public NavMes? Mes { get; set; }

        /// <summary>ПМЭС</summary>
        [Relation]
        [DomainField(Alias = "pmes_id")]
        public NavPmes? Pmes { get; set; }

        /// <summary>Область</summary>
        [DomainField(Alias = "region", Description = "Загружается из АИС ОИА ПЭО")]
        public string? Region { get; set; }

        /// <summary>Город</summary>
        [DomainField(Alias = "city", Description = "Загружается из АИС ОИА ПЭО")]
        public string? City { get; set; }

        /// <summary>Субъект Российской Федерации</summary>
        [Relation]
        [DomainField(Alias = "subject_id", Description = "Проставляется в модуле; может быть не задан")]
        public Subject? Subject { get; set; }
    }