using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json.Serialization;

namespace AsbCloudDb.Model
{
    [Table("t_well_operation_category"), Comment("Справочник операций на скважине")]
    public class WellOperationCategory : IId
    {
        #region constants category operations ids
        /// <summary>
        /// БУРЕНИЕ
        /// </summary>
        public const int IdDrilling = 3000;

        /// <summary>
        /// СПО
        /// </summary>
        public const int IdSPOStage = 3001;

        /// <summary>
        /// КРЕПЛЕНИЕ
        /// </summary>
        public const int IdFastening = 3002;

        /// <summary>
        /// ГФР
        /// </summary>
        public const int IdGFR = 3003;

        /// <summary>
        /// Вспомогательные операции
        /// </summary>
        public const int IdAuxiliaryOperations = 3004;

        /// <summary>
        /// Непроизводительное время (НПВ)
        /// </summary>
        public const int IdNonProductiveTime = 3005;

        /// <summary>
        /// Заключительные работы
        /// </summary>
        public const int IdFinalWorks = 3006;

        /// <summary>
        /// КНБК
        /// </summary>
        public const int IdBha = 4000;

        /// <summary>
        /// Механическое. бурение
        /// </summary>
        public const int IdMechanicalDrilling = 4001;

        /// <summary>
        /// Статический замер
        /// </summary>
        public const int IdMeasurementStat = 4002;

        /// <summary>
        /// Нормализация диаметра скважины
        /// </summary>
        public const int IdNormalizedWellDiameter = 4003;

        /// <summary>
        /// Наращивание
        /// </summary>
        public const int IdBuilding = 4004;

        /// <summary>
        /// СПО
        /// </summary>
        public const int IdSPO = 4005;

        /// <summary>
        /// Спуск обсадной колонны
        /// </summary>
        public const int IdCasingRunning = 4006;

        /// <summary>
        /// Цементирование
        /// </summary>
        public const int IdCementing = 4007;

        /// <summary>
        /// Вспомогательные работы при креплении
        /// </summary>
        public const int IdAuxiliaryWorkFastening = 4008;

        /// <summary>
        /// Сборка/разборка приборов ГИС
        /// </summary>
        public const int IdAssemblyOrDisassemblyGIS = 4009;

        /// <summary>
        /// СПО2
        /// </summary>
        public const int IdSPO2 = 4010;

        /// <summary>
        /// ГИС
        /// </summary>
        public const int IdGIS = 4011;

        /// <summary>
        /// Промывка, ОБР
        /// </summary>
        public const int IdFlushingOBR = 4012;

        /// <summary>
        /// Вспомогательные работы
        /// </summary>
        public const int IdAuxiliaryWork = 4013;

        /// <summary>
        /// Ремонт оборудования
        /// </summary>
        public const int IdEquipmentRepair = 4014;

        /// <summary>
        /// Аварийные работы
        /// </summary>
        public const int IdEmergencyWork = 4015;

        /// <summary>
        /// Осложнение
        /// </summary>
        public const int IdComplication = 4016;

        /// <summary>
        /// Незаложенные в ГГД операции
        /// </summary>
        public const int IdOperationsNotIncludedGGD = 4017;

        /// <summary>
        /// Заключительные операции
        /// </summary>
        public const int IdFinalOperations = 4019;

        /// <summary>
        /// Разборка КНБК
        /// </summary>
        public const int IdBhaDisassembly = 5000;
        /// <summary>
        /// Сборка КНБК
        /// </summary>
        public const int IdBhaAssembly = 5001;
        /// <summary>
        /// Бурение слайдом
        /// </summary>
        public const int IdSlide = 5002;
        /// <summary>
        /// Бурение ротором
        /// </summary>
        public const int IdRotor = 5003;
        /// <summary>
        /// Замер ЗТС (запись MWD)
        /// </summary>
        public const int IdStaticSurveying = 5004;
        /// <summary>
        /// Промывка перед наращиванием
        /// </summary>
        public const int IdFlashingBeforeConnection = 5005;
        /// <summary>
        /// Проработка
        /// </summary>
        public const int IdConditioning = 5007;
        /// <summary>
        /// Шаблонировка во время бурения
        /// </summary>
        public const int IdTemplatingWhileDrilling = 5008;
        /// <summary>
        /// Шаблонировка перед наращиванием
        /// </summary>
        public const int IdTemplating = 5009;
        /// <summary>
        /// Удержание в клиньях
        /// </summary>
        public const int IdSlipsTime = 5011;
        /// <summary>
        /// Подъем КНБК
        /// </summary>
        public const int IdBhaUp = 5013;
        /// <summary>
        /// Спуск КНБК
        /// </summary>
        public const int IdBhaDown = 5015;
        /// <summary>
        /// Спуск ОК
        /// </summary>
        public const int IdCasingDown = 5017;
        /// <summary>
        /// Промывка
        /// </summary>
        public const int IdFlashing = 5036;
        /// <summary>
        /// Ремонт бурового оборудования
        /// </summary>
        public const int IdEquipmentDrillingRepair = 5058;

        /// <summary>
        /// Список всех категорий НПВ
        /// </summary>
        public static readonly int[] NonProductiveTimeSubIds = {
            IdEquipmentDrillingRepair,
            5059,
            5060,
            5061,
            5062,
            5063,
            5064,
            5065,
            5066,
            5067,
            5068,
            5069,
            5070,
            5071,
            5072,
            5073,
            5074,
            5075,
            5076,
            5077,
            5078,
            5079,
            5101,
            
            4014,
            4015,
            4016,
            4017,

            IdNonProductiveTime,
        };

        public static readonly int[] MechanicalDrillingSubIds = { IdRotor, IdSlide, IdMechanicalDrilling, };
        #endregion

        #region Списки категорий операций по группам
        /// <summary>
        /// Этапы работ
        /// </summary>
        public static WellOperationCategory[] WorkStages { get; } = new WellOperationCategory[]{
            new() { Id = IdDrilling, Name = "БУРЕНИЕ",    KeyValueName = "dT", KeyValueUnits = "м/ч" },
            new() { Id = IdSPOStage, Name = "СПО",    KeyValueName = "dT", KeyValueUnits = "мин" },
            new() { Id = IdFastening, Name = "КРЕПЛЕНИЕ", KeyValueName = "dT", KeyValueUnits = "мин" },
            new() { Id = IdGFR, Name = "ГФР", KeyValueName = "dT", KeyValueUnits = "мин" },
            new() { Id = IdAuxiliaryOperations, Name = "Вспомогательные операции", KeyValueName = "dT", KeyValueUnits = "мин" },
            new() { Id = IdNonProductiveTime, Name = "Непроизводительное время (НПВ)", KeyValueName = "dT", KeyValueUnits = "мин" },
            new() { Id = IdFinalWorks, Name = "Заключительные работы", KeyValueName = "dT", KeyValueUnits = "мин" },
        };

        /// <summary>
        /// Виды работ
        /// </summary>
        public static WellOperationCategory[] WorkTypes { get; } = new WellOperationCategory[]{
            new () {Id = IdBha, IdParent = 3000, Name = "КНБК",  KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdMechanicalDrilling, IdParent = 3000, Name = "Механическое. бурение", KeyValueName = "dT", KeyValueUnits = "м/ч" },
            new () {Id = IdMeasurementStat, IdParent = 3000, Name = "Статический замер", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdNormalizedWellDiameter, IdParent = 3000, Name = "Нормализация диаметра скважины",    KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdBuilding, IdParent = 3000, Name = "Наращивание",   KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdSPO , IdParent = 3001, Name = "СПО",   KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdCasingRunning, IdParent = 3002, Name = "Спуск обсадной колонны",    KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 4018, IdParent = 3002, Name = "Крепление", KeyValueName = "dT", KeyValueUnits = "мин"},
            new () {Id = IdCementing, IdParent = 3002, Name = "Цементирование",    KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdAuxiliaryWorkFastening, IdParent = 3002, Name = "Вспомогательные работы при креплении",  KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdAssemblyOrDisassemblyGIS, IdParent = 3003, Name = "Сборка/разборка приборов ГИС",  KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdSPO2, IdParent = 3003, Name = "СПО",   KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdGIS, IdParent = 3003, Name = "ГИС",   KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdFlushingOBR, IdParent = 3004, Name = "Промывка, ОБР", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdAuxiliaryWork, IdParent = 3004, Name = "Вспомогательные работы",    KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdEquipmentRepair, IdParent = 3005, Name = "Ремонт оборудования",   KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdEmergencyWork, IdParent = 3005, Name = "Аварийные работы",  KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdComplication, IdParent = 3005, Name = "Осложнение",    KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdOperationsNotIncludedGGD, IdParent = 3005, Name = "Незаложенные в ГГД операции",   KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdFinalOperations, IdParent = IdFinalWorks, Name = "Заключительные операции",   KeyValueName = "dT", KeyValueUnits = "мин" },
        };

        /// <summary>
        /// Категории работ
        /// </summary>
        public static WellOperationCategory[] WorkCategories { get; } = new WellOperationCategory[]{
             new () {Id = IdBhaDisassembly, IdParent = 4000, Name = "Разборка КНБК", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdBhaAssembly, IdParent = 4000, Name = "Сборка КНБК", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdSlide, IsHidden = true, IdParent = 4001, Name = "Бурение слайдом", KeyValueName = "МСП", KeyValueUnits = "м/ч" },
            new () {Id = IdRotor, IsHidden = true, IdParent = 4001, Name = "Бурение ротором", KeyValueName = "МСП", KeyValueUnits = "м/ч" },
            new () {Id = IdStaticSurveying, IdParent = 4002, Name = "Замер ЗТС (запись MWD)", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdFlashingBeforeConnection, IdParent = 4003, Name = "Промывка перед наращиванием", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5006, IdParent = 4003, Name = "Проработка во время бурения", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdConditioning, IdParent = 4003, Name = "Проработка", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdTemplatingWhileDrilling, IdParent = 4003, Name = "Шаблонировка во время бурения", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdTemplating, IdParent = 4003, Name = "Шаблонировка перед наращиванием", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5010, IdParent = 4004, Name = "Наращивание", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdSlipsTime, IdParent = 4004, Name = "Удержание в клиньях", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5012, IdParent = 4005, Name = "Подъем инструмента", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdBhaUp, IdParent = 4005, Name = "Подъем КНБК", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5014, IdParent = 4005, Name = "Спуск инструмента", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdBhaDown, IdParent = 4005, Name = "Спуск КНБК", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5016, IdParent = 4006, Name = "Промывка при спуске ОК", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdCasingDown, IdParent = 4006, Name = "Спуск ОК", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5018, IdParent = 4007, Name = "ОЗЦ", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5019, IdParent = 4007, Name = "Цементирование", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5020, IdParent = 4008, Name = "Опрессовка БИ", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5021, IdParent = 4008, Name = "Опрессовка ОК", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5022, IdParent = 4008, Name = "ПЗР при спуске ОК", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5023, IdParent = 4008, Name = "ПЗР при цементировании", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5024, IdParent = 4009, Name = "Разборка комплекса приборов ГИС", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5025, IdParent = 4009, Name = "Сборка комплекса приборов ГИС", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5026, IdParent = 4010, Name = "Подъем приборов ГИС  (на трубах)", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5027, IdParent = 4010, Name = "Спуск приборов ГИС (на трубах)", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5028, IdParent = 4011, Name = "Комплекс ГИС на жестком кабеле", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5029, IdParent = 4011, Name = "Комплекс ГИС на кабеле", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5030, IdParent = 4011, Name = "Комплекс ГИС на трубах", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5031, IdParent = 4012, Name = "Закачка/прокачка пачки", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5032, IdParent = 4012, Name = "Обработка БР", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5033, IdParent = 4012, Name = "Ориентирование ТС при бурении", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5034, IdParent = 4012, Name = "Перезапись гаммы-каротажа", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5035, IdParent = 4012, Name = "Приготовление БР", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdFlashing, IdParent = 4012, Name = "Промывка", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5037, IdParent = 4012, Name = "Разбуривание тех.оснастки", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5038, IdParent = 4012, Name = "Спуск инструмента с проработкой", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5039, IdParent = 4013, Name = "ВМР", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5040, IdParent = 4013, Name = "Демонтаж ПВО", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5041, IdParent = 4013, Name = "Долив затруба при подъёме", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5042, IdParent = 4013, Name = "Монтаж ПВО", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5043, IdParent = 4013, Name = "Наработка жёлоба", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5044, IdParent = 4013, Name = "Обвязка устья с циркуляционной системой", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5045, IdParent = 4013, Name = "Оборудование устья", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5046, IdParent = 4013, Name = "Опрессовка ПВО", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5047, IdParent = 4013, Name = "Перемонтаж ПВО ", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5048, IdParent = 4013, Name = "Перетяжка талевого каната", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5049, IdParent = 4013, Name = "ПЗР при сборке КНБК", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5050, IdParent = 4013, Name = "Полная замена талевого каната", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5051, IdParent = 4013, Name = "ПР перед забуркой направления", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5052, IdParent = 4013, Name = "Продувка манифольда", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5053, IdParent = 4013, Name = "Срезка", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5054, IdParent = 4013, Name = "Тайм-дриллинг", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5055, IdParent = 4013, Name = "Тех.отстой", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5056, IdParent = 4013, Name = "Учебная тревога \"Выброс\"", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5057, IdParent = 4013, Name = "Чистка ЦСГО/емкостного блока", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = IdEquipmentDrillingRepair, IdParent = 4014, Name = "Ремонт бурового оборудования", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5059, IdParent = 4015, Name = "Ловильные работы", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5060, IdParent = 4015, Name = "Ожидание", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5061, IdParent = 4015, Name = "Определение места прихвата и ЛМ", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5062, IdParent = 4015, Name = "Работа яссом", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5063, IdParent = 4015, Name = "Расхаживание", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5064, IdParent = 4015, Name = "СПО - колокол", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5065, IdParent = 4015, Name = "СПО - метчик", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5066, IdParent = 4015, Name = "СПО - овершот", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5067, IdParent = 4015, Name = "СПО - труболовка", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5068, IdParent = 4015, Name = "Торпедирование (встряхивание)", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5069, IdParent = 4015, Name = "Торпедирование (отстрел)", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5070, IdParent = 4015, Name = "Установка ванн", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5071, IdParent = 4015, Name = "Фрезеровка", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5072, IdParent = 4016, Name = "Контролируемое ГНВП", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5073, IdParent = 4016, Name = "Поглощение", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5074, IdParent = 4016, Name = "Сальникообразование", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5075, IdParent = 4016, Name = "Утяжеление БР", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5076, IdParent = 4017, Name = "НПВ / прочее", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5077, IdParent = 4017, Name = "Обработка раствора (несоответствие параметров)", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5078, IdParent = 4017, Name = "подъем ОК", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5079, IdParent = 4017, Name = "Ревизия КНБК/инструмента/ЗТС", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5082, IdParent = 4000, Name = "Сборка устройства ориентирования КО", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5083, IdParent = 4003, Name = "Проработка принудительная", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5084, IdParent = 4005, Name = "Шаблонировка подъем БИ, продувка", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5085, IdParent = 4005, Name = "Спуск бурильного инструмента со сборкой с мостков", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5086, IdParent = 4005, Name = "Подъем БИ с выбросом на мостки", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5087, IdParent = 4005, Name = "Спуск БИ со сборкой с мостков", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5088, IdParent = 4005, Name = "Сборка и спуск ТБТ", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5089, IdParent = 4005, Name = "Спуск КО на транспортной колонне", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5090, IdParent = 4008, Name = "Отворот допускной трубы", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5091, IdParent = 4008, Name = "Активация подвески, опрессовка", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5092, IdParent = 4008, Name = "Монтаж, опрессовка ФА", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5093, IdParent = 4008, Name = "Сборка хвостовика 114мм (согласно схеме)", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5094, IdParent = 4008, Name = "ПЗР к спуску УЭЦН", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5095, IdParent = 4008, Name = "Активация подвески  (потайной колонны, хвостовика)", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5096, IdParent = 4008, Name = "Шаблонирование перед спуском", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5097, IdParent = 4012, Name = "Промывка - перевод скважины на новый раствор", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5098, IdParent = 4013, Name = "Сборка БИ с мостков на подсвечник", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5099, IdParent = 4013, Name = "Подготовка ствола скважины. Перезапись ГК в интервале установки КО.", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5100, IdParent = 4013, Name = "Смена рабочего переводника ВСП", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5101, IdParent = 4014, Name = "Ремонт", KeyValueName = "dT", KeyValueUnits = "мин" },
            new () {Id = 5102, IdParent = 4018, Name = "Спуск пакера", KeyValueName = "dT", KeyValueUnits = "мин"},
            new () {Id = 5103, IdParent = 4011, Name = "Запись гамма-каратожа", KeyValueName = "dT", KeyValueUnits = "мин"},
            new () {Id = 5104, IdParent = 4013, Name = "Шаблонирование спуск БИ", KeyValueName = "dT", KeyValueUnits = "мин"},
            new () {Id = 5105, IdParent = 4018, Name = "Сборка клин-отклонителя", KeyValueName = "dT", KeyValueUnits = "мин"},
            new () {Id = 5106, IdParent = 4018, Name = "Ориентирование и посадка клина-отклонителя", KeyValueName = "dT", KeyValueUnits = "мин"},
            new () {Id = 5107, IdParent = 4018, Name = "Протяжка подъемного патрубка подвески", KeyValueName = "dT", KeyValueUnits = "мин"},
            new () {Id = 5108, IdParent = 4018, Name = "Подъем клина-отклонителя", KeyValueName = "dT", KeyValueUnits = "мин"},
            new () {Id = 5109, IdParent = 4018, Name = "Стыковка стингера с хвостовиком основного ствола", KeyValueName = "dT", KeyValueUnits = "мин"},
            new () {Id = 5110, IdParent = 4018, Name = "Ориентирование и установка стыковочного узла хвостовика", KeyValueName = "dT", KeyValueUnits = "мин"},
            new () {Id = 5111, IdParent = 4001, Name = "Бурение с отбором керна", KeyValueName = "МСП", KeyValueUnits = "м/ч"},
            new () {Id = 5112, IdParent = 4018, Name = "Работа пакером в обсадной колонне", KeyValueName = "dT", KeyValueUnits = "мин"},
            new () {Id = 5113, IdParent = 4001, Name = "Бурение", KeyValueName = "МСП", KeyValueUnits = "м/ч"},
            new () {Id = 5114, IdParent = 4013, Name = "ТО оборудования", KeyValueName = "dT", KeyValueUnits = "мин"},
            new () {Id = 5115, IdParent = IdFinalOperations, Name = "Спуск НКТ", KeyValueName = "dT", KeyValueUnits = "мин"},
            new () {Id = 5116, IdParent = IdAuxiliaryWork, Name = "Вырезка окна", KeyValueName = "dT", KeyValueUnits = "мин"},
            new () {Id = 5117, IdParent = IdAuxiliaryWork, Name = "Расширение ствола", KeyValueName = "dT", KeyValueUnits = "мин"},
        };
        #endregion 

        [Key]
        [Column("id")]
        public int Id { get; set; }

        [Column("name"), Comment("Название категории операции")]
        public string Name { get; set; } = null!;

        [Column("id_parent"), Comment("id родительской категории")]
        public int? IdParent { get; set; }

        [Column("key_value_name"), Comment("Название ключевого показателя операции"), StringLength(32)]
        public string? KeyValueName { get; set; }

        [Column("key_value_units"), Comment("Единицы измерения ключевого показателя операции"), StringLength(16)]
        public string? KeyValueUnits { get; set; }

        public bool IsHidden { get; set; } = false;

        [JsonIgnore]
        [ForeignKey(nameof(IdParent))]
        public virtual WellOperationCategory? Parent { get; set; } = null!;
    }
}