1212| Метод и путь относительно ` /programs/{id}/management/ ` | Назначение |
1313| --- | --- |
1414| GET ` experts/ ` | Состав, приглашения, нагрузка, N, нехватка и revision |
15+ | PUT ` experts/{expert_id}/cases/ ` | Кейсы эксперта ` {revision, all_cases, case_names} ` |
16+ | POST ` project-experts/ ` | Атомарное назначение ` {revision, project_ids, expert_ids, mode} ` |
1517| POST ` experts/ ` | Пригласить ` {email} ` |
1618| POST ` expert-invitations/{id}/resend/ ` | Новая ссылка, прежняя недействительна |
1719| POST ` expert-invitations/{id}/revoke/ ` | Отозвать непринятое приглашение |
1820| GET ` experts/{expert_id}/assignments/ ` | Проекты с assigned/protected/own_team |
1921| PUT ` experts/{expert_id}/assignments/ ` | Заменить набор ` {revision, project_ids} ` |
20- | POST ` expert-allocation/ ` | Предпросмотр ` {expert_ids, project_ids?} ` |
22+ | POST ` expert-allocation/ ` | Предпросмотр ` {expert_ids, project_ids?, case_pools?, revision? } ` |
2123| POST ` expert-allocation/apply/ ` | Применить подписанный ` {plan_token} ` |
2224| POST ` evaluators/ ` | Предпросмотр ` {required_evaluators} ` |
2325| PUT ` evaluators/ ` | Подтвердить ` {required_evaluators, revision} ` |
@@ -60,6 +62,24 @@ repeat_password, accept_policy, accept_age и атомарно создаёт а
6062
6163## Правила
6264
65+ ` GET experts/ ` также возвращает ` cases ` , сданные опубликованные ` projects ` с
66+ экспертами/статусами оценок и ` all_cases ` /` case_names ` для каждого участника состава.
67+ Без отдельной записи ` ExpertCaseScope ` эксперт доступен во всех текущих и будущих
68+ кейсах. Можно выбрать несколько кейсов; списки пересекаются. Эти правила одинаковы
69+ для ручного и автоматического назначения. Смена состава кейсов не удаляет назначения.
70+
71+ ` project-experts/ ` : ` mode=replace ` меняет состав одного проекта с защитой оценок;
72+ ` mode=add ` добавляет экспертов одному или нескольким проектам одного кейса без снятия
73+ существующих. Весь запрос атомарен, включая проверку собственной команды, членства,
74+ доступности кейса, сдачи/публикации и revision. Недоступного эксперта можно сохранить
75+ в прежнем составе, но нельзя назначить новому проекту.
76+
77+ ` case_pools ` — массив ` {case_name, expert_ids} ` , где null означает проекты без кейса.
78+ Нагрузка общего эксперта учитывается один раз по всей программе. Без поля сохраняется
79+ старый контракт общего выбора; ограничения кейсов действуют и в нём. Отсутствующий или
80+ пустой состав нужного кейса приводит к нехватке и блокирует применение плана.
81+ Revision учитывает определения/значения кейсов и доступность экспертов по кейсам.
82+
6383- Pending не является экспертом и не участвует в распределении.
6484- Новые назначения — только принявшим приглашение активным экспертам, на сданные
6585 проекты своей программы; собственная команда исключена.
@@ -79,6 +99,10 @@ repeat_password, accept_policy, accept_age и атомарно создаёт а
7999
80100## Совместимость и rollout
81101
102+ Для вкладок v2 нужна ` project_rates.0005_expertcasescope_and_more ` (новая таблица,
103+ без изменения оценок и назначений). Сначала backend и миграция, затем Angular.
104+ Существующие API-поля и endpoints сохранены; старый frontend совместим.
105+
82106Добавлены ` PartnerProgram.required_evaluators ` , ` ExpertInvitation ` и nullable
83107` CustomUser.birthday ` : migrations partner_programs.0022, project_rates.0004,
84108users.0065. Обычная регистрация продолжает требовать дату рождения; обычный
0 commit comments