Sla (#11)
Tests / backend-test (push) Successful in 1m50s
Tests / frontend-test (push) Successful in 49s

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/11
This commit was merged in pull request #11.
This commit is contained in:
2026-08-13 04:44:08 +00:00
parent 7f2aabbf29
commit d076f4e98d
103 changed files with 2606 additions and 1265 deletions
@@ -0,0 +1,47 @@
using Tnsu.ApprovalRoute.Domain.Enums;
namespace Tnsu.ApprovalRoute.Application.TemplateRoutes;
/// <param name="SlaHours">
/// ДЕЙСТВУЮЩИЙ SLA шага в часах — наследование уже применено: значение шага, а
/// если на шаге не задано, то значение типа заявки. null означает, что SLA не
/// настроен нигде, то есть напоминаний по этому шагу не будет.
/// Резолв отдаёт именно итоговое значение, чтобы вызывающая сторона
/// (request-portal) просто записала его в строку списка согласования и не
/// повторяла у себя правило наследования.
/// </param>
/// <param name="AskOverdueReason">
/// Спрашивать ли причину просрочки — так же с уже применённым наследованием.
/// </param>
public sealed record ResolvedRouteStepDto(
int Id,
int OrderNo,
string? ExecutorEmail,
string? Position,
bool AllowReassignToOtherApprovers,
string? Warning = null,
int? SlaHours = null,
bool? AskOverdueReason = null);
public sealed record ResolveTemplateRouteResultDto(
int RouteId,
bool RequiresControl,
IReadOnlyList<ResolvedRouteStepDto> Steps);
/// <summary>Значение поля списка SharePoint (field_name шага) для проверки условий шагов при resolve.</summary>
public sealed record ResolveFieldValueDto(string FieldName, string Value);
/// <param name="DepartmentId">
/// Отдел для шагов с HeadType.DepartmentHead ("руководитель указанного отдела") —
/// не выводится из инициатора, поэтому должен быть передан явно. Необязателен:
/// если в маршруте нет такого шага, поле не нужно; если есть, а поле не
/// передано — шаг не резолвится и получает предупреждение (см.
/// TemplateRouteService.ResolveStepAsync), весь запрос при этом не падает.
/// </param>
public sealed record ResolveTemplateRouteRequest(
int RequestTypeId,
string? UserEmail,
Guid? ProjectId,
RouteStepStatus Status,
IReadOnlyList<ResolveFieldValueDto>? FieldValues = null,
Guid? DepartmentId = null);