ca8de91742
Раньше по ответу резолва нельзя было отличить «руководителя направления» от «директора Tansu» иначе как парсингом Position (реальной должности из справочника api.tnsu.kz, свободный текст). PositionCode — это HeadType самого шага (Chief/DirectionHead/DirectorTansu/ManagingDirectorTansu/ DepartmentHead), null для шагов с исполнителем по email/должности/роли. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
44 lines
1.7 KiB
TypeScript
44 lines
1.7 KiB
TypeScript
// DTO эндпоинта api/template-routes/resolve
|
||
// (Application/TemplateRoutes/ResolveTemplateRouteDto.cs).
|
||
/* eslint-disable @rushstack/no-new-null -- поля 1:1 зеркалят nullable JSON-контракт бэкенда */
|
||
|
||
import { HeadType, RouteStepStatus } from './enums';
|
||
|
||
/** Значение поля списка SharePoint (field_name шага) для проверки условий шагов. */
|
||
export interface ResolveFieldValue {
|
||
fieldName: string;
|
||
value: string;
|
||
}
|
||
|
||
export interface ResolveTemplateRouteQuery {
|
||
requestTypeId: number;
|
||
userEmail?: string;
|
||
projectId?: string;
|
||
status: RouteStepStatus;
|
||
fieldValues?: ResolveFieldValue[];
|
||
/** Для шагов с HeadType.DepartmentHead — отдел не выводится из инициатора, задаётся явно. */
|
||
departmentId?: string;
|
||
}
|
||
|
||
export interface ResolvedRouteStep {
|
||
id: number;
|
||
orderNo: number;
|
||
executorEmail: string | null;
|
||
position: string | null;
|
||
allowReassignToOtherApprovers: boolean;
|
||
/** Причина, по которой исполнитель шага не определился (текст с бэкенда). */
|
||
warning: string | null;
|
||
/**
|
||
* HeadType шага (Chief/DirectionHead/...), если исполнитель задан типом
|
||
* руководителя, иначе null. В отличие от position (реальная должность
|
||
* резолвнутого сотрудника из справочника) — это код роли из самого шага.
|
||
*/
|
||
positionCode: HeadType | null;
|
||
}
|
||
|
||
export interface ResolveTemplateRouteResult {
|
||
routeId: number;
|
||
requiresControl: boolean;
|
||
steps: ResolvedRouteStep[];
|
||
}
|