feat(ams): перенос абитуриента между ВУС из таблицы поступающих#740
Merged
Conversation
b51eb89 to
6d0111c
Compare
asadullinam
previously approved these changes
Jul 3, 2026
Комиссия во время поступления часто просит перенести абитуриента из одной
военно-учётной специальности (ВУС) в другую. Раньше это можно было сделать
только тяжёлым PUT /applicants/{id}/ (все вложенные данные + перегенерация
документов). Теперь — лёгкий inline-перенос прямо в таблице /applications/.
Back-end:
- PATCH /api/ams/applicants/{id}/milspecialty/ — меняет только Applicant.milspecialty,
проверяет is_selectable_by_program и доступность для кампуса, документы НЕ трогает
(в отличие от update()). ApplicantMilspecialtyMutateSerializer для валидации.
- ApplicantWithApplicationProcessSerializer отдаёт milspecialty + program_id.
- queryset.select_related(milspecialty, university_info__program__faculty) против N+1.
- Тесты test_milspecialty_move.py (успех / несовместимо с программой / недоступно
для кампуса / без прав -> 403).
Front-end:
- Колонка «ВУС» в таблице поступающих (только для комиссии, скрыта у study.office).
- Inline-select как у medical_examination; опции по программе строки через
getMilSpecialtiesSelectableByProgram, отфильтрованные по selectable_by_program,
с предзагрузкой на @watch(data) и кэшем по program_id.
- updateApplicantMilspecialty в api/applicants.js; ветка в onUpdate.
Физо-скоринг не зависит от ВУС, поэтому перенос не требует пересчёта баллов.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
6d0111c to
90ed18a
Compare
asadullinam
approved these changes
Jul 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Контекст
Во время активного поступления комиссия часто просит перенести абитуриента из одной
ВУС (военно-учётной специальности) в другую. Раньше сменить ВУС можно было только
тяжёлым
PUT /api/ams/applicants/{id}/: он требует все вложенные данные, сверяетcorporate_email, переназначает кампус и в PROD перегенерирует документы. В таблицепоступающих (
/applications/) ВУС вообще не отображался и action переноса не было.Этот PR добавляет лёгкий точечный перенос прямо из таблицы.
Что изменилось
Back-end
PATCH /api/ams/applicants/{id}/milspecialty/(body{ "milspecialty": <id> }) —меняет только
Applicant.milspecialty. Проверяетis_selectable_by_programидоступность ВУС для кампуса абитуриента; при несовместимости →
400. Документы неперегенерирует (осознанно, в отличие от
update()).ApplicantMilspecialtyMutateSerializer— валидация id ВУС.ApplicantWithApplicationProcessSerializerтеперь отдаётmilspecialtyиprogram_id(для колонки и загрузки допустимых опций по программе строки).
queryset.select_related("milspecialty", "university_info__program__faculty")— против N+1.Front-end
study.office).selectв ячейке — какmedical_examination/prof_psy_selection. Опции берутсячерез
getMilSpecialtiesSelectableByProgram(campus, programId)и фильтруются поselectable_by_program; предзагрузка на@Watch("data")+ кэш поprogram_id.updateApplicantMilspecialtyвapi/applicants.js; ветка вonUpdate.Проверка (e2e, Playwright)
Прогнано вживую на дев-стеке (
superuser@mail.com, кампус Москва, 2026):1. Колонка «ВУС» в таблице поступающих

2. Inline-выбор нового ВУС — список отфильтрован по образовательной программе строки

3. После выбора →

PATCH /milspecialty/→ 200; значение сохраняется после перезагрузкиСценарий: у «Иванов И.И.» (программа 09.03.01) ВУС
453100→ выбран751100 - Защита информационных технологий→ запросPATCH /api/ams/applicants/1/milspecialty/ 200 OK→после reload ВУС остаётся
751100(сохранено в БД).Тесты
pytest src/ams/→ 12 passed (в т.ч. 4 новых вtest_milspecialty_move.py:успех / несовместимо с программой / недоступно для кампуса / без прав → 403).
black— чисто.Замечания
feat/ams-physical-manual-override(стек поверх feat(ams): ручка ручной заливки результатов ФИЗО + мм:сс в протоколе #739), т.к. новый тестиспользует фикстуру
applicantизams/tests/conftest.py, добавленную в той ветке.После мёржа feat(ams): ручка ручной заливки результатов ФИЗО + мм:сс в протоколе #739 GitHub переназначит базу на
master.assets/vus-move-screenshots, вне этого PR),чтобы не тащить бинарники в дифф — здесь они только в описании.
🤖 Generated with Claude Code