Списки «Заявка на оплату 1 — данные / согласование» созданы провижинингом, в approval-route заведены тип 24 (раздел «Бухгалтерия») и маршрут 25 с одним шагом согласования на фиксированного человека. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
10 KiB
Формы портала заявок — индекс
Каждая форма живёт в своей папке src/webparts/requestPortal/forms/<Форма>/ и имеет
рядом README.md — карточку с её бизнес-поведением (то, что не видно из кода
с первого взгляда). Здесь — общий индекс.
Правило (при добавлении формы)
- Папка
forms/<Форма>/+README.mdпо шаблону. - Строка в индексе ниже.
- Строка в
forms/registry.ts(ленивая форма) и, если есть режим согласующего, вforms/viewRegistry.ts. - Плитка в
data/requests.ts.
Формы больше не хардкодят RequestTypeId
Числовой id типа заявки во внешнем approval-route API (GET /api/request-types)
выдаётся сервером при регистрации типа в админке и непредсказуем заранее (в
старой pto-tracker у «отпуска» было 1, при заведении типа в новой админке он
получил id 11). Раньше каждая форма хардкодила это число константой вида
VACATION_REQUEST_TYPE_ID = 11; теперь — резолвит его в рантайме по своему
pageUrl (тот же rptype, что и id в data/requests.ts) через
useRequestTypeId(context, pageUrl) (shared/approval). Результат кешируется
на уровне модуля на время сессии (см. getRequestTypeIdByPageUrl в
approvalRoute.service.ts) — повторный вызов из другой формы не бьёт по сети заново.
- Форма подачи знает свой
pageUrlиз пропаrequestType.id. - Режим согласующего (
<Форма>View) получает его пропомformKey(см.IApprovalViewPropsвforms/viewRegistry.tsиApproveFeature.tsx).
Что НЕ дублируем в карточке (лежит в других местах)
- Колонки списков →
forms/<Форма>/provisioning.json. - Параметры ссылок (rptype/rpmode/rpid/rpsource) →
routing.md. - Особые права (кто что может сверх обычного, по email/должности/группе) →
permissions.md. - Как обращаться к спискам SP из кода →
sp-lists-frontend.md. - Общий жизненный цикл (черновик/upsert/блокировка/статусы), согласование, исполнение,
печать — одинаковы для всех форм (общие примитивы
shared/uiиshared/approval).
Карточка — только про то, чем эта форма отличается.
Индекс форм
| Ключ (rptype) | Форма | Категория | Согл. | Исп. | Просмотр | Фишки | Готово |
|---|---|---|---|---|---|---|---|
recruiting-selection |
Заявка на подбор | Рекрутинг | нет | нет | нет | много полей (~42), поля-люди (в т.ч. мульти) | ✅ |
recruiting-hire |
Заявка на прием | Рекрутинг | да | да | да | маска телефона, деньги, условное «взамен кого», источник для орг. места | ✅ |
recruiting-referral |
Реферальная рекомендация | Рекрутинг | да | да | да | кандидат — внешний (текстовые поля, не People); маршрут по рекомендателю; исполнитель переназначает на реального; условное уточнение «откуда знаете» | ✅ |
it-workplace-setup |
Организация рабочего места | IT | да | да | да | префилл из «прием», поля ПО/доступы правит руководитель | ✅ |
it-1c-ticket |
Заявка в отдел 1С | IT | да | нет | да | контакты предзаполняются из Graph (/me); вместо фазы исполнения — карточка в Microsoft Planner (согласовано/сразу без согласования — рабочий бакет, отклонено — отдельный бакет) | ✅ |
clearance-form |
Обходной лист | Отдел кадров | да | нет | да | подаётся HR за увольняемого (People-picker) либо создаётся сам по согласованному «Заявлению на увольнение»; условие «IsManager» резолвится по должности из самой заявки; да/нет-поля (парковка, СКУД); 5 независимых сумм к списанию компактной сеткой (ОС, СИЗ, подотчётная сумма, НМА, ТМЦ — обучение не входит, у него своё поле) — вводит любой активный согласующий, блокируется навсегда после первого ввода; заполнил хоть одну — стандартный комментарий решения (в блоке «Ваше решение») становится обязательным на любое решение, не только возврат/отклонение | ✅ |
hr-dismissal |
Заявление на увольнение | Отдел кадров | да | нет | да | совместители — таблица компаний с удалением строки (снимает и согласующего из матрицы); должность/организация из справочника; после согласования сам создаёт обходной лист; печать заблокирована до согласования обходного листа; «Лицо, принимающее ОС/НМА» — заполняет только непосредственный руководитель | ✅ |
hr-skud-explanation |
Объяснительная об отсутствии отметок в СКУД | Отдел кадров | да | нет | да | только «на себя»; дни выбираются кликом в календаре «Мой СКУД» (проходы Hikvision текущего пользователя), сохраняются снимком для согласующего; текст записки собирается автоматически, печать — бланк объяснительной | ⏳ код готов, списки/тип/маршрут не заведены |
hr-business-trip |
Заявка на командировку | Отдел кадров | да | да | да | можно за другого сотрудника; маршрут лентой (точки = город + объект из справочника + даты, участки с видом транспорта); задание — список задач; смета: статьи с позициями, привязанными к точкам/участкам (суммой или кол-во × цена — всё вручную), итог с долями и по объектам; обязательство по авансовому отчёту — флажок; печать без шапки адресата | ⏳ код готов, списки/тип/маршрут не заведены |
hr-transfer |
Перемещение сотрудников | Отдел кадров | — | — | — | — | ⏳ заглушка (плитка есть, форма не сделана) |
wh-service-request |
Заявка на услуги | Склад / Снабжение | да | нет | да | маршрут по проекту (руководитель проекта/ПТО); табличные части «Приложения» и «Смета» (JSON-колонки); сумма по смете считается на лету (qty × цена), итог дублируется числовой колонкой для отчётов | ✅ |
acc-payment-request |
Заявка на оплату | Бухгалтерия | да | нет | да | основание — согласованная СТ (сайт СТ) или потребность; счёт PDF → библиотека → OCR → ИИ (реквизиты, суммы, позиции); сверка позиций счёта с СТ; подсветка чужого получателя и превышения общей суммы СТ; справочники 1С | ⏳ списки, библиотека, тип (id 24) и маршрут заведены; не проверена на живых данных |
Легенда: Согл. — есть фаза согласования; Исп. — есть фаза исполнения;
Просмотр — есть режим согласующего (<Форма>View).