using Tnsu.ApprovalRoute.Domain.Enums; namespace Tnsu.ApprovalRoute.Application.TemplateRoutes; /// /// ДЕЙСТВУЮЩИЙ SLA шага в часах — наследование уже применено: значение шага, а /// если на шаге не задано, то значение типа заявки. null означает, что SLA не /// настроен нигде, то есть напоминаний по этому шагу не будет. /// Резолв отдаёт именно итоговое значение, чтобы вызывающая сторона /// (request-portal) просто записала его в строку списка согласования и не /// повторяла у себя правило наследования. /// /// /// Спрашивать ли причину просрочки — так же с уже применённым наследованием. /// public sealed record ResolvedRouteStepDto( int Id, int OrderNo, string? ExecutorEmail, string? Position, bool AllowReassignToOtherApprovers, string? Warning = null, int? SlaHours = null, bool? AskOverdueReason = null); /// /// Предупреждение уровня всего резолва (не привязано к конкретному шагу) — например, /// в маршруте есть шаг с условием по полю IsManager, а в заявке не передано значение /// поля Position, из которого IsManager вычисляется. Это не ошибка (резолв всё равно /// отработал, IsManager просто посчитался как «false»), но может означать, что /// вызывающая сторона забыла передать поле, и шаг из-за этого не появился, хотя должен был. /// public sealed record ResolveTemplateRouteResultDto( int RouteId, bool RequiresControl, IReadOnlyList Steps, string? Warning = null); /// Значение поля списка SharePoint (field_name шага) для проверки условий шагов при resolve. public sealed record ResolveFieldValueDto(string FieldName, string Value); /// /// Отдел для шагов с HeadType.DepartmentHead ("руководитель указанного отдела") — /// не выводится из инициатора, поэтому должен быть передан явно. Необязателен: /// если в маршруте нет такого шага, поле не нужно; если есть, а поле не /// передано — шаг не резолвится и получает предупреждение (см. /// TemplateRouteService.ResolveStepAsync), весь запрос при этом не падает. /// public sealed record ResolveTemplateRouteRequest( int RequestTypeId, string? UserEmail, Guid? ProjectId, RouteStepStatus Status, IReadOnlyList? FieldValues = null, Guid? DepartmentId = null);