⟨/⟩ Ntr/50_Domain/OrgObjectModel/OrgObject.cs

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

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

namespace Rugrid.Sdaid.Epas.Ntr.Domain.OrgObjectModel
{
    /// <summary>
    /// Доменная сущность. Перенесено дословно из ntr-01/domain/org-object-model/org-object.md.
    /// </summary>
    public class DOC_OrgObject : IDomainEntityDocument, IHasStructuralLinks, IFolder<NtrDomainFolder>
    {
        public SdaidLink[] Links => new[]
        {
            Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Domain.OrgObjectModel.DOC_Company>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Domain.OrgObjectModel.DOC_ExecutiveApparatus>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Domain.OrgObjectModel.DOC_MES>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Domain.OrgObjectModel.DOC_PMES>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Domain.OrgObjectModel.DOC_Substation>(),
        };

        public static string _refName = "Организационный объект (сущность)";

        public string Name => "Организационный объект (сущность)";

        public string Description => "Алиасы: Организационный объект (сущность), Организационный объект. parents: [org-object-model].";

        public string Version => "1.0";
        public string Status => "changed";

        public string[] Comments => new[]
        {
            "2026-08-31, фаза 5 миграции (сверка спеки с реализацией): в таблицу свойств добавлены атрибуты, которые есть в БД, но не были описаны в спеке.",
        };

                public Type Entity => typeof(OrgObject);

        
    }

    /// <summary>
    /// Доменная сущность «Организационный объект (сущность)».
    /// Класс — источник структуры: таблица свойств и диаграмма связей на странице документа
    /// строятся генератором по нему. Прозу и разбор ведёт документ DOC_OrgObject.
    /// </summary>
    [DomainEntity]
    public class OrgObject
    {
        /// <summary>Идентификатор записи</summary>
        [DomainField(Alias = "id", RequiredOnCreate = true, 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 = "nav_type_eid", RequiredOnCreate = true, Range = "{Company; Ia; Mes; Pmes; Substation}")]
        public string? NavTypeEid { get; set; }

        /// <summary>Тип организационного объекта (ссылка)</summary>
        [DomainField(
            Alias = "nav_type_id",
            RequiredOnCreate = true,
            Description = "Ссылка на запись типа оргобъекта; `nav_type_eid` — её дискриминатор"
        )]
        public Guid NavTypeId { get; set; }

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

        /// <summary>ИА</summary>
        [Relation]
        [DomainField(Alias = "ia_id")]
        public ExecutiveApparatus? Ia { get; set; }

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

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

        /// <summary>Подстанция</summary>
        [Relation]
        [DomainField(Alias = "substation_id")]
        public Substation? Substation { get; set; }

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

}