diff --git a/AsbCloudApp/Data/DailyReport/Blocks/EditableBlock.cs b/AsbCloudApp/Data/DailyReport/Blocks/EditableBlock.cs
new file mode 100644
index 00000000..cafe5d33
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/Blocks/EditableBlock.cs
@@ -0,0 +1,12 @@
+namespace AsbCloudApp.Data.DailyReport.Blocks;
+
+///
+/// Базовый класс для редактируемых блоков
+///
+public abstract class EditableBlock
+{
+ ///
+ /// Id пользователя внесшего изменения в блок
+ ///
+ public int IdUser { get; set; }
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Data/DailyReport/Blocks/ProcessMapWellDrillingRecordDto.cs b/AsbCloudApp/Data/DailyReport/Blocks/ProcessMapWellDrillingRecordDto.cs
new file mode 100644
index 00000000..3b6dac33
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/Blocks/ProcessMapWellDrillingRecordDto.cs
@@ -0,0 +1,29 @@
+namespace AsbCloudApp.Data.DailyReport.Blocks;
+
+///
+/// РТК
+///
+public class ProcessMapWellDrillingRecordDto
+{
+ ///
+ /// Id режима бурения
+ /// 1 - ротор
+ /// 2 - слайд
+ ///
+ public int IdMode { get; set; }
+
+ ///
+ /// Мех. скорость
+ ///
+ public PlanFactDto Rop { get; set; }
+
+ ///
+ /// Глубина ствола
+ ///
+ public double? WellBoreDepth { get; set; }
+
+ ///
+ /// Часы бурения
+ ///
+ public double MechDrillingHours { get; set; }
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Data/DailyReport/Blocks/ScheduleRecordDto.cs b/AsbCloudApp/Data/DailyReport/Blocks/ScheduleRecordDto.cs
new file mode 100644
index 00000000..91f11af4
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/Blocks/ScheduleRecordDto.cs
@@ -0,0 +1,32 @@
+namespace AsbCloudApp.Data.DailyReport.Blocks;
+
+///
+/// Блок с графиком работы
+///
+public class ScheduleRecordDto
+{
+ ///
+ /// Начало смены
+ ///
+ public TimeDto? ShiftStart { get; set; }
+
+ ///
+ /// Конец смены
+ ///
+ public TimeDto? ShiftEnd { get; set; }
+
+ ///
+ /// Имя бурильщика
+ ///
+ public string? Name { get; set; }
+
+ ///
+ /// Фамилия бурильщика
+ ///
+ public string? Surname { get; set; }
+
+ ///
+ /// Отчество бурильщика
+ ///
+ public string? Patronymic { get; set; }
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Data/DailyReport/Blocks/Sign/SignBlockDto.cs b/AsbCloudApp/Data/DailyReport/Blocks/Sign/SignBlockDto.cs
new file mode 100644
index 00000000..717c3403
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/Blocks/Sign/SignBlockDto.cs
@@ -0,0 +1,17 @@
+namespace AsbCloudApp.Data.DailyReport.Blocks.Sign;
+
+///
+/// Блок с подписями
+///
+public class SignBlockDto : EditableBlock
+{
+ ///
+ /// Подпись мастера буровой
+ ///
+ public SignRecordDto? DrillingMaster { get; set; }
+
+ ///
+ /// Подпись супервайзера
+ ///
+ public SignRecordDto? Supervisor { get; set; }
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Data/DailyReport/Blocks/Sign/SignRecordDto.cs b/AsbCloudApp/Data/DailyReport/Blocks/Sign/SignRecordDto.cs
new file mode 100644
index 00000000..2196224e
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/Blocks/Sign/SignRecordDto.cs
@@ -0,0 +1,28 @@
+namespace AsbCloudApp.Data.DailyReport.Blocks.Sign;
+
+///
+/// Подпись
+///
+public class SignRecordDto
+{
+ ///
+ /// Имя
+ ///
+ public string Name { get; set; } = null!;
+
+ ///
+ /// Фамилия
+ ///
+ public string Surname { get; set; } = null!;
+
+ ///
+ /// Отчество
+ ///
+ public string? Patronymic { get; set; }
+
+ ///
+ public override string ToString()
+ {
+ return $"{Surname} {Name} {Patronymic}";
+ }
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Data/DailyReport/Blocks/Subsystems/SubsystemBlockDto.cs b/AsbCloudApp/Data/DailyReport/Blocks/Subsystems/SubsystemBlockDto.cs
new file mode 100644
index 00000000..1c7bf21f
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/Blocks/Subsystems/SubsystemBlockDto.cs
@@ -0,0 +1,35 @@
+using System.Collections.Generic;
+using System.Linq;
+
+namespace AsbCloudApp.Data.DailyReport.Blocks.Subsystems;
+
+///
+/// Блок статистики работы подсистем
+///
+public class SubsystemBlockDto : EditableBlock
+{
+ ///
+ /// Длина ствола скважины
+ ///
+ public double? WellBoreDepth { get; set; }
+
+ ///
+ /// Кол-во замеров за сутки
+ ///
+ public double? MeasurementsPerDaily { get; set; }
+
+ ///
+ /// Общая плановая мех. скорость
+ ///
+ public double? TotalRopPlan { get; set; }
+
+ ///
+ /// Рекомендации специалиста
+ ///
+ public string? Comment { get; set; }
+
+ ///
+ /// Модули
+ ///
+ public IEnumerable Modules { get; set; } = Enumerable.Empty();
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Data/DailyReport/Blocks/Subsystems/SubsystemRecordDto.cs b/AsbCloudApp/Data/DailyReport/Blocks/Subsystems/SubsystemRecordDto.cs
new file mode 100644
index 00000000..ded5d126
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/Blocks/Subsystems/SubsystemRecordDto.cs
@@ -0,0 +1,44 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace AsbCloudApp.Data.DailyReport.Blocks.Subsystems;
+
+///
+/// Модуль подсистемы
+///
+public class SubsystemRecordDto
+{
+ ///
+ /// 1 - АПД, ч/м
+ /// 11 - АПД ротор
+ /// 12 - АПД слайд
+ /// 65536 - Осцилляция
+ /// 65537 - Демпфер
+ /// 100000 - Автопроработка
+ /// 100001 - АвтоСПО
+ ///
+ public int IdSubsystem { get; set; }
+
+ ///
+ /// Идентификатор временного интервала
+ /// 1 - за сутки
+ /// 2 - за скважину
+ ///
+ [Range(1, 2)]
+ public int IdTimeInterval { get; set; }
+
+ ///
+ /// Сумма изменения глубин при включеной подсистеме
+ ///
+ public double? SumDepthInterval { get; set; }
+
+ ///
+ /// Наработка подсистемы
+ ///
+ public double? UsedTimeHours { get; set; }
+
+ ///
+ /// Коэффициент использования
+ ///
+ [Range(0, 100)]
+ public double? KUsage { get; set; }
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Data/DailyReport/Blocks/TimeBalance/TimeBalanceBlockDto.cs b/AsbCloudApp/Data/DailyReport/Blocks/TimeBalance/TimeBalanceBlockDto.cs
new file mode 100644
index 00000000..08be30b6
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/Blocks/TimeBalance/TimeBalanceBlockDto.cs
@@ -0,0 +1,37 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+
+namespace AsbCloudApp.Data.DailyReport.Blocks.TimeBalance;
+
+///
+/// Блок с балансом времени
+///
+public class TimeBalanceBlockDto : EditableBlock
+{
+ ///
+ /// Идентификатор секции
+ ///
+ [Range(1, int.MaxValue)]
+ public int IdSection { get; set; }
+
+ ///
+ /// Плановая проходка скважины
+ ///
+ public double? WellDepthPlan { get; set; }
+
+ ///
+ /// Фактическая проходка скважины
+ ///
+ public double WellDepthFact { get; set; }
+
+ ///
+ /// Кол-во наращиваний за сутки
+ ///
+ public double? CountWellOperationSlipsTime { get; set; }
+
+ ///
+ /// Операции на скважине
+ ///
+ public IEnumerable WellOperations { get; set; } = Enumerable.Empty();
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Data/DailyReport/Blocks/TimeBalance/TimeBalanceRecordDto.cs b/AsbCloudApp/Data/DailyReport/Blocks/TimeBalance/TimeBalanceRecordDto.cs
new file mode 100644
index 00000000..809447ef
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/Blocks/TimeBalance/TimeBalanceRecordDto.cs
@@ -0,0 +1,35 @@
+namespace AsbCloudApp.Data.DailyReport.Blocks.TimeBalance;
+
+///
+/// Операции проводимые на скважине
+///
+public class TimeBalanceRecordDto
+{
+ ///
+ /// Мех. бурение - 4001
+ /// Статический замер - 4002
+ /// Наращивание - 4004
+ /// Промывка, ОБР - 4012
+ ///
+ public int IdWellOperation { get; set; }
+
+ ///
+ /// Продолжительность операции, ч
+ ///
+ public PlanFactDto? DurationHours { get; set; }
+
+ ///
+ /// Отклонение за секцию
+ ///
+ public double? DrillingDeviationPerSection { get; set; }
+
+ ///
+ /// Отклонение за сутки
+ ///
+ public double? DrillingDeviationPerDaily { get; set; }
+
+ ///
+ /// Причина отклонения
+ ///
+ public string? ReasonDeviation { get; set; }
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Data/DailyReport/Blocks/TrajectoryBlockDto.cs b/AsbCloudApp/Data/DailyReport/Blocks/TrajectoryBlockDto.cs
new file mode 100644
index 00000000..39e49b54
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/Blocks/TrajectoryBlockDto.cs
@@ -0,0 +1,27 @@
+namespace AsbCloudApp.Data.DailyReport.Blocks;
+
+///
+/// Блок с траекторией скважины
+///
+public class TrajectoryBlockDto
+{
+ ///
+ /// Глубина по стволу
+ ///
+ public double? WellboreDepth { get; set; }
+
+ ///
+ /// Глубина вертикальная
+ ///
+ public double? VerticalDepth { get; set; }
+
+ ///
+ /// Угол зенитный
+ ///
+ public double? ZenithAngle { get; set; }
+
+ ///
+ /// Азимут Географ.
+ ///
+ public double? AzimuthGeo { get; set; }
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Data/DailyReport/Blocks/WellOperation/WellOperationBlockDto.cs b/AsbCloudApp/Data/DailyReport/Blocks/WellOperation/WellOperationBlockDto.cs
new file mode 100644
index 00000000..9e24997e
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/Blocks/WellOperation/WellOperationBlockDto.cs
@@ -0,0 +1,20 @@
+using System.Collections.Generic;
+using System.Linq;
+
+namespace AsbCloudApp.Data.DailyReport.Blocks.WellOperation;
+
+///
+/// Блок с операциями проводимыми на скважине
+///
+public class WellOperationBlockDto
+{
+ ///
+ /// Продолжительность бурения за секцию
+ ///
+ public double DurationHoursDrillingPerSection { get; set; }
+
+ ///
+ /// Операции проводимые на скважине
+ ///
+ public IEnumerable WellOperations { get; set; } = Enumerable.Empty();
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Data/DailyReport/Blocks/WellOperation/WellOperationRecordDto.cs b/AsbCloudApp/Data/DailyReport/Blocks/WellOperation/WellOperationRecordDto.cs
new file mode 100644
index 00000000..d79c78e6
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/Blocks/WellOperation/WellOperationRecordDto.cs
@@ -0,0 +1,17 @@
+namespace AsbCloudApp.Data.DailyReport.Blocks.WellOperation;
+
+///
+/// Операция на скважине
+///
+public class WellOperationRecordDto
+{
+ ///
+ /// Id категории операции
+ ///
+ public int? IdWellCategory { get; set; }
+
+ ///
+ /// Продолжительность операции
+ ///
+ public double? DurationHours { get; set; }
+}
\ No newline at end of file
diff --git a/AsbCloudApp/Data/DailyReport/DailyReportDto.cs b/AsbCloudApp/Data/DailyReport/DailyReportDto.cs
index 3ba55718..f4925d16 100644
--- a/AsbCloudApp/Data/DailyReport/DailyReportDto.cs
+++ b/AsbCloudApp/Data/DailyReport/DailyReportDto.cs
@@ -1,45 +1,113 @@
using System;
+using System.Collections.Generic;
+using System.Linq;
+using AsbCloudApp.Data.DailyReport.Blocks;
+using AsbCloudApp.Data.DailyReport.Blocks.Sign;
+using AsbCloudApp.Data.DailyReport.Blocks.Subsystems;
+using AsbCloudApp.Data.DailyReport.Blocks.TimeBalance;
+using AsbCloudApp.Data.DailyReport.Blocks.WellOperation;
-namespace AsbCloudApp.Data.DailyReport
+namespace AsbCloudApp.Data.DailyReport;
+
+///
+/// Суточный отчёт
+///
+public class DailyReportDto : IId,
+ IWellRelated
{
- ///
- /// Блоки для формирования суточного рапорта
- ///
- public class DailyReportDto
- {
- ///
- /// дата отчёта
- ///
- public DateOnly StartDate { get; set; }
+ ///
+ public int Id { get; set; }
- ///
- /// блок заголовка
- ///
- public HeadDto Head { get; set; } = new();
+ ///
+ public int IdWell { get; set; }
- ///
- /// блок КНБК
- ///
- public BhaDto Bha { get; set; } = new();
+ ///
+ /// Название скважины
+ ///
+ public string WellName { get; set; } = null!;
- ///
- /// блок безметражные работы
- ///
- public NoDrillingDto NoDrilling { get; set; } = new();
+ ///
+ /// Название типа скважины
+ ///
+ public string? WellType { get; set; }
- ///
- /// блок баланса времени
- ///
- public TimeBalanceDto TimeBalance { get; set; } = new();
+ ///
+ /// Название куста
+ ///
+ public string? Cluster { get; set; }
- ///
- /// блок САУБ
- ///
- public SaubDto Saub { get; set; } = new();
+ ///
+ /// Заказчик
+ ///
+ public string? Customer { get; set; }
- ///
- /// блок подписи
- ///
- public SignDto Sign { get; set; } = new();
- }
-}
+ ///
+ /// Подрядчик
+ ///
+ public string? Contractor { get; set; }
+
+ ///
+ /// Месторождение
+ ///
+ public string? Deposit { get; set; }
+
+ ///
+ /// Глубина забоя на дату начала интервала
+ ///
+ public double? DepthStart { get; set; }
+
+ ///
+ /// Глубина забоя на дату окончания интервала
+ ///
+ public double? DepthEnd { get; set; }
+
+ ///
+ /// Дата последнего обновления
+ ///
+ public DateTime? DateLastUpdate { get; set; }
+
+ ///
+ /// Начальная дата отчёта
+ ///
+ public DateTime DateStart { get; set; }
+
+ ///
+ /// Конечная дата отчёта
+ ///
+ public DateTime DateEnd => DateStart.AddHours(24);
+
+ ///
+ /// Блок фактической траектории
+ ///
+ public TrajectoryBlockDto TrajectoryBlock { get; set; } = null!;
+
+ ///
+ /// Фактические операции
+ ///
+ public WellOperationBlockDto FactWellOperationBlock { get; set; } = null!;
+
+ ///
+ /// Баланс времени
+ ///
+ public TimeBalanceBlockDto? TimeBalanceBlock { get; set; }
+
+ ///
+ /// Наработка подсистем
+ ///
+ public SubsystemBlockDto? SubsystemBlock { get; set; }
+
+ ///
+ /// Подпись
+ ///
+ public SignBlockDto? SignBlock { get; set; }
+
+ ///
+ /// Блок расписания
+ ///
+ public IEnumerable ScheduleBlock { get; set; } = Enumerable.Empty();
+
+ ///
+ /// РТК
+ ///
+ public IEnumerable ProcessMapWellDrillingBlock { get; set; } = Enumerable.Empty();
+}
\ No newline at end of file