diff --git a/AsbCloudApp/Data/WellOperation/WellOperationBaseDto.cs b/AsbCloudApp/Data/WellOperation/WellOperationBaseDto.cs
new file mode 100644
index 00000000..61625da8
--- /dev/null
+++ b/AsbCloudApp/Data/WellOperation/WellOperationBaseDto.cs
@@ -0,0 +1,107 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+
+namespace AsbCloudApp.Data.WellOperation;
+
+///
+/// Операция по скважине
+///
+public class WellOperationBaseDto : ItemInfoDto,
+ IId,
+ IWellRelated,
+ IValidatableObject
+{
+ ///
+ [Required]
+ public int Id { get; set; }
+
+ ///
+ [Required]
+ public int IdWell { get; set; }
+
+ ///
+ /// Id секции скважины
+ ///
+ public int IdWellSectionType { get; set; }
+
+ ///
+ /// 0 = план или 1 = факт или прогноз = 2
+ ///
+ [Required]
+ public int IdType { get; set; }
+
+ ///
+ /// id категории операции
+ ///
+ public int IdCategory { get; set; }
+
+ ///
+ /// Глубина на начало операции, м
+ ///
+ public double DepthStart { get; set; }
+
+ ///
+ /// Глубина после завершения операции, м
+ ///
+ [Required]
+ [Range(0, 50_000)]
+ public double DepthEnd { get; set; }
+
+ ///
+ /// Дата начала операции
+ ///
+ [Required]
+ public DateTimeOffset DateStart { get; set; }
+
+ ///
+ /// Продолжительность, часы
+ ///
+ public double DurationHours { get; set; }
+
+ ///
+ /// Наименование секции
+ ///
+ public string? WellSectionTypeCaption { get; set; }
+
+ ///
+ /// Наименование категории
+ ///
+ public string? OperationCategoryName { get; set; }
+
+ ///
+ /// id плановой операции для сопоставления
+ ///
+ public int? IdPlan { get; set; }
+
+ ///
+ /// Ключ родителя у категории
+ ///
+ public int? IdParentCategory { get; set; }
+
+ ///
+ /// дополнительная информация по операции
+ ///
+ [StringLength(8192)]
+ public string? CategoryInfo { get; set; }
+
+ ///
+ /// Полезный комментарий
+ ///
+ [StringLength(4096, ErrorMessage = "Комментарий не может быть длиннее 4096 символов")]
+ public string? Comment { get; set; }
+
+ ///
+ /// Валидация даты
+ ///
+ ///
+ ///
+ public IEnumerable Validate(ValidationContext validationContext)
+ {
+ var gtDate = new DateTimeOffset(2010, 1, 1, 0, 0, 0, TimeSpan.Zero);
+ if (DateStart <= gtDate)
+ yield return new ValidationResult(
+ $"{nameof(DateStart)}: DateStart не может быть меньше {gtDate}",
+ new[] { nameof(DateStart) });
+ }
+}