Резолв маршрута: поле PositionCode (HeadType) в ответе шага

Раньше по ответу резолва нельзя было отличить «руководителя направления» от
«директора Tansu» иначе как парсингом Position (реальной должности из
справочника api.tnsu.kz, свободный текст). PositionCode — это HeadType
самого шага (Chief/DirectionHead/DirectorTansu/ManagingDirectorTansu/
DepartmentHead), null для шагов с исполнителем по email/должности/роли.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
gorbenko.pavel
2026-08-25 10:15:11 +05:00
parent 10c3057eff
commit ca8de91742
4 changed files with 21 additions and 3 deletions
@@ -13,6 +13,13 @@ namespace Tnsu.ApprovalRoute.Application.TemplateRoutes;
/// <param name="AskOverdueReason">
/// Спрашивать ли причину просрочки — так же с уже применённым наследованием.
/// </param>
/// <param name="PositionCode">
/// HeadType шага (Chief/DirectionHead/DirectorTansu/ManagingDirectorTansu/DepartmentHead),
/// если исполнитель задан типом руководителя, иначе null. В отличие от <see cref="Position"/>
/// (реальная должность резолвнутого сотрудника из справочника api.tnsu.kz — свободный
/// текст), это код роли из самого шага маршрута — чтобы вызывающая сторона могла отличить,
/// например, «директора Tansu» от «руководителя направления», не разбирая Position текстом.
/// </param>
public sealed record ResolvedRouteStepDto(
int Id,
int OrderNo,
@@ -21,7 +28,8 @@ public sealed record ResolvedRouteStepDto(
bool AllowReassignToOtherApprovers,
string? Warning = null,
int? SlaHours = null,
bool? AskOverdueReason = null);
bool? AskOverdueReason = null,
HeadType? PositionCode = null);
public sealed record ResolveTemplateRouteResultDto(
int RouteId,
@@ -340,7 +340,8 @@ public sealed class TemplateRouteService(
step.AllowReassignToOtherApprovers,
combinedWarning.Length == 0 ? null : combinedWarning,
step.SlaHours ?? requestType.SlaHours,
step.AskOverdueReason ?? requestType.AskOverdueReason);
step.AskOverdueReason ?? requestType.AskOverdueReason,
step.HeadType is null or HeadType.None ? null : step.HeadType);
}
/// <summary>