Заявление реферальная программа #13

Merged
gorbenko.pavel merged 9 commits from referal-request into main 2026-08-21 12:27:34 +00:00

9 Commits

Author SHA1 Message Date
gorbenko.pavel 8b09243c2e Починить активацию маршрута при отправке со статусом «Выполнение»
Tests / frontend-test (pull_request) Successful in 1m14s
Регрессия из 0cf8359: initialSubmitStatus стала возвращать «Выполнение»
для маршрута без согласующих, но writeRoute определяла факт отправки
строгим сравнением `status === onApproval`. В результате для такой заявки:

  - строки маршрута писались со статусом «Выполнение» — недопустимым для
    строки значением (его нет в APPROVAL_ROW_STATUS_CHOICES) вместо
    «Ждёт очереди»;
  - activateNextQueued не вызывался вовсе, поэтому ни одна строка не
    получала «На исполнении».

Очередь исполнителя фильтрует строки ровно по «На исполнении», поэтому
отправленные заявки в неё не попадали.

Заменено на предикат isSubmittedStatus, который покрывает все статусы,
возвращаемые initialSubmitStatus. Тест связывает эти две функции
напрямую, чтобы добавление нового статуса отправки не могло снова
разойтись с writeRoute молча.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 17:23:19 +05:00
gorbenko.pavel 69ab08825f Сделать подразделение рекомендателя редактируемым
ReferrerDepartment остаётся автозаполняемым из профиля (SPS-Department),
но больше не read-only — как ReferrerPosition, это подстановка-фолбэк,
которую можно поправить вручную. При смене рекомендателя профиль больше
не затирает поле пустым значением, если в новом профиле отдел не указан.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 17:09:04 +05:00
gorbenko.pavel 66481a20a5 Подтягивать подразделение рекомендателя из профиля SharePoint
ReferrerDepartment теперь заполняется из SPS-Department при выборе
рекомендателя (approval.getProfileFields — тот же метод, что уже
использует «Обходной лист» для Department), а не вводится вручную.
Поле стало read-only, как Department в Clearance.

VacancyDepartment (подразделение вакансии, куда рекомендуют) не тронут —
это отдельное поле, не связанное с профилем рекомендателя.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 17:04:11 +05:00
gorbenko.pavel 0cf8359a75 Склонять «согласование» → «исполнение», когда согласующих в маршруте нет
Три общих (не привязанных к одной форме) места хардкодили лексику
согласования независимо от того, есть ли реально фаза согласования:

- initialSubmitStatus (shared/approval) — статус заявки при ОТПРАВКЕ
  считался «На согласовании» безусловно, даже когда маршрут состоит
  только из исполнителей (0 согласующих). Теперь статус зависит от
  количества шагов каждой фазы: 0 согласующих + есть исполнители →
  сразу «Выполнение»; ни тех, ни других → «Согласовано».
- ApprovalMatrix — подпись «Доп. согласующий, добавил:» у переназначенного
  участника была захардкожена; теперь выводится из roleLabel, поэтому у
  блока «Исполнение» (roleLabel="Исполнитель") корректно пишет «Доп.
  исполнитель».
- DecisionPanel — сообщения после переназначения («Согласующий добавлен
  перед вами…», «сейчас рассматривает…») не различали фазу шага; теперь
  склоняются по isExecution.

В ReferralForm — единственной форме, где маршрут реально может быть без
согласующих (только исполнитель) — использованы initialSubmitStatus и
локальный noApprovalPhase (matrix.rows.length === 0, подтверждено загрузкой)
для подписи кнопки отправки и текста успеха. Уведомление активного шага
теперь срабатывает и при статусе «Выполнение», не только «На согласовании».

Блок «Маршрут согласования» остаётся видимым и пустым, даже когда шагов
нет — матрица редактируема, заявитель может дописать согласующего вручную.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 17:00:05 +05:00
gorbenko.pavel a0d2907cc0 Добавить фазу исполнения в форму «Реферальная рекомендация»
Форма запрашивала маршрут только для фазы 'Approval' — исполнитель
(фиксированная роль, назначающая реального через переназначение) никогда
не подгружался, и на форме создания был виден только пустой список
согласования.

Добавлены второй loadExecutors/useMatrixEditor (read-only, как у
RecruitingHire) и второй блок ApprovalMatrix «Исполнение» — в форме подачи
и в режиме согласующего. submit.ts теперь пишет executors в writeRoute
вместо пустого массива.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 16:03:00 +05:00
gorbenko.pavel c27c4d147a Merge remote-tracking branch 'origin/main' into referal-request 2026-08-21 15:01:43 +05:00
gorbenko.pavel 3ec1df0e16 Форма «Реферальная рекомендация» (recruiting-referral)
Сотрудник рекомендует внешнего кандидата на вакансию. Пять секций:
рекомендатель, данные кандидата, вакансия, информация о кандидате,
оценка рекомендателя. Есть режим согласующего (ReferralView).

Кандидат — не сотрудник тенанта, поэтому его ФИО/телефон/почта — текстовые
поля, а не People; маршрут согласования резолвится по рекомендателю.

Регистрация: registry, viewRegistry, плитка в data/requests, база имени
списка в listTitles, индекс в docs/forms.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 13:42:20 +05:00
gorbenko.pavel b7250544ba Добавить UTF-8 BOM в Provision-Lists.ps1
Без BOM Windows PowerShell 5.1 читает файл в системной кодировке и
ломает кириллицу в строковых литералах (названия списков, ошибки).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 13:03:23 +05:00
gorbenko.pavel e72fd27ee8 Добавить манифесты provisioning.json для формы «Реферальная рекомендация»
Списки данных и согласования по конвенции остальных форм — колонки под поля
бумажной формы (рекомендатель, кандидат, вакансия, оценка рекомендателя).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 12:18:25 +05:00