Было одной парой «ОС/СИЗ/подотчётная сумма» — стало тремя независимыми, всего
6 категорий (ОС, СИЗ, подотчётная сумма, обучение, НМА, ТМЦ). Списывают их
разные подразделения и за разное, поэтому и сумма с комментарием у каждой своя,
и блокируется каждая отдельно (правило «введено — больше не меняется» работает
на пару, а не на весь блок).
Существующая колонка WriteOffAssetsAmount/Comment переиспользована под «ОС»
(данных по ней ещё нет), добавлены WriteOffPpe* и WriteOffAccountable*.
Список типов полей теперь выводится из WriteOffFieldKey — IWriteOffFields в
submit.ts больше не дублирует их перечислением.
На тенанте: 4 новые колонки созданы провижинером; отображаемые имена ОС-пары
досинхронизированы отдельно — Provision-Lists.ps1 колонки только СОЗДАЁТ и
переименование в манифесте существующей колонке не применяет.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Четыре независимых доработки поверх связки «Заявление на увольнение» ↔
«Обходной лист»:
1. Совместители (несколько компаний у одного сотрудника): approval-route уже
резолвит директора/должностного эквивалента КАЖДОЙ компании отдельным шагом
маршрута (HeadType.CompanyDirectors, шаблон route 17: Chief → CompanyDirectors).
Organization на форме подачи заявления теперь интерактивная таблица
(OrganizationsTable) вместо read-only списка — строку компании можно убрать,
если сотрудник реально не увольняется отовсюду сразу; убранная компания сразу
снимается и из уже спланированной матрицы (matrix.remove) — искать нужную
строку вручную не надо. Новый shared/dictionary/employeeLookup.service.ts
зеркалит DirectorPositionByCompany бэкенда (KazpromService → Главный механик,
СТ Global → Генеральный директор, иначе Директор) и Employee/Manager
(managerType=chief) — используется и здесь, и в следующем пункте.
2. Печать заявления заблокирована, пока парный обходной лист не согласован
(статус читается напрямую по ClearanceUrl, без отдельного поля-дублёра).
3. «Лицо, принимающее ОС/НМА» (AssetsAcceptor, People) — обязательное поле,
которое заполняет НЕ заявитель, а непосредственный руководитель увольняемого
(identity-check по Employee/Manager, а не по должности, как в approverRights
«Обходного листа») прямо перед своим решением (DecisionPanel.onBeforeDecide);
пустое поле блокирует решение.
4. В обходном листе — 4 независимые пары «сумма к списанию + обязательный
комментарий» (ОС/СИЗ/подотчёт, обучение, НМА, ТМЦ), отдельно от уже
существующего TrainingAmount. Заполнить может любой активный согласующий
(не только профильный), но как только сумма введена — пара блокируется
навсегда для всех (лок по снимку на момент загрузки, не реактивно от текущего
ввода — иначе поле блокировалось бы прямо во время набора цифр).
Списки на /sites/requests обновлены: AssetsAcceptor (Заявление на увольнение),
8 колонок WriteOff* (Обходной лист). tsc --noEmit и heft test (build+lint+179
тестов) чистые.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Как только маршрут заявления пройден целиком (статус «Согласовано»), портал
заводит обходной лист по нему: форма не открывается — маршрут резолвится через
approval-route (обе фазы, по Employee и Position заявления), элемент пишется в
текущую партицию списка «Обходной лист … — данные» и сразу уходит на согласование
с оповещением активного шага.
Поля выводятся из заявления (сотрудник, должность, подразделение, организация,
последний рабочий день → дата расторжения договора); отметки парковки/СКУД/обучения
остаются профильным согласующим. Пара связывается перекрёстными гиперссылками
ClearanceUrl / DismissalUrl — для них добавлен requestLinkUrl: абсолютная ссылка на
заявку без посторонних параметров страницы, в отличие от routeUrl.
Повторное создание отсекается непустой ClearanceUrl: заявление можно согласовать
второй раз после возврата на доработку, и без этой проверки на каждый цикл
появлялся бы новый обходной лист. Создание идёт в браузере последнего согласующего —
если оно упало, согласование не отменяется, а портал показывает предупреждение
«заведите вручную».
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Новая форма отдела кадров по бумажному шаблону «Заявление на увольнение ШТАТ»:
сотрудник, должность, структурное и самостоятельное подразделение, последний
рабочий день, контактный телефон, комментарий. По умолчанию заявка на себя, но
можно подать за другого — маршрут резолвится по выбранному сотруднику.
Подразделение подтягивается из профиля (SPS-Department, read-only), должность и
организации — из справочника Employee/ByEmail. Последний рабочий день не может
быть в прошлом; срок предупреждения об увольнении форма не проверяет — дату
согласуют с работодателем.
Перекрёстные ссылки с «Обходным листом»: колонки-гиперссылки ClearanceUrl /
DismissalUrl (только в списках, формы их пока не пишут). Для них в провижинере
появился тип колонки Url, а сам скрипт разбит на два прохода — сначала все
списки, потом колонки: иначе Lookup на список другой формы держится на алфавитном
порядке обхода манифестов.
Списки «Заявление на увольнение 1 — данные» / «… — согласование» созданы на
/sites/requests. Тип заявки в админке approval-route ещё не заведён — до этого
форма откроется, но отправить заявку не даст.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>