Интерактивный подбор диссовета в XLSX и единый расчёт «Всего» #72

Merged
admin merged 3 commits from feature/council-xlsx-selection into main 2026-10-13 07:48:57 +00:00
Collaborator

Раньше «Всего» в XLSX считало только Q1/Q2/К1 и расходилось с сайтом. Теперь используется результат сервиса сайта: уникальные Q1/Q2/К1/RSCI, у доктора также К2; самостоятельный К2 у кандидата/PhD исключается, пересечения учитываются один раз.

Общий сервис отклоняет явно пустую отрасль (branch=) с 422 для списка, карточки и XLSX до формирования данных. Отсутствие параметра сохраняет техническую отрасль по умолчанию. Регрессии проверяют пустую и непустую БД, выбор специальности и предыдущие параметры.

Первый лист «Подбор диссовета» позволяет выбрать специальность ВАК и допустимую отрасль, искать по ФИО, фильтровать по степени и статусу, сортировать по ФИО и счётчикам. Показаны Q1/Q2/К1/К2/RSCI, общий и подтверждённый счётчики, минимум, статус, подтверждение степени и профиль ВШЭ. После смены специальности несовместимая отрасль автоматически заменяется допустимой; применяемая отрасль показана отдельно. Используются стандартные формулы Excel без макросов и новых зависимостей.

На первом листе также есть памятка по расчёту и использованию, с переходами к ней и обратно к фильтрам. Она поясняет счётчики, правило К2, подтверждения и пороги, ограничения специальностей и источников, различия снимка XLSX и сайта, ручные подтверждения и автоматический пересчёт Excel.

Чтобы фильтры можно было переключать после загрузки, XLSX включает полный набор сотрудников с учёной степенью и их публикаций. Фильтры сайта задают начальный подбор. Имена и столбцы подробных листов сохранены, но они также содержат полный набор. Для обеих доступных отраслей используются результаты существующего сервиса оценки; исходные строки остаются текстом и не выполняются как формулы. Файл хранит снимок на момент выгрузки: ручные подтверждения на сайте требуют новой выгрузки, изменения Excel не отправляются на сайт. Версия приложения/frontend/backend — 1.4.2.

Проверки: полный pytest — 418 passed, 11 skipped; синтаксис четырёх JS-файлов и двух shell-скриптов CI — passed; полный diff против main — без whitespace-ошибок. В установленном Windows Excel 16.0 проверены 14 сценариев и пустая выгрузка на синтетических данных: со��пали результаты и порядок с сервисом сайта, поиск (включая буквальный *), специальности, отрасли, степени, статусы, пороги и счётчики. Добавлены регрессии для К2/RSCI, пересечений оснований, полного набора данных, начальных фильтров, допустимых отраслей и защиты исходного текста.

Ограничения: PostgreSQL-проверки пропущены без отдельной тестовой БД; production не изменялся. Excel проверялся на синтетическом наборе. Требуется независимое ревью в отдельной сессии.

Раньше «Всего» в XLSX считало только Q1/Q2/К1 и расходилось с сайтом. Теперь используется результат сервиса сайта: уникальные Q1/Q2/К1/RSCI, у доктора также К2; самостоятельный К2 у кандидата/PhD исключается, пересечения учитываются один раз. Общий сервис отклоняет явно пустую отрасль (`branch=`) с 422 для списка, карточки и XLSX до формирования данных. Отсутствие параметра сохраняет техническую отрасль по умолчанию. Регрессии проверяют пустую и непустую БД, выбор специальности и предыдущие параметры. Первый лист «Подбор диссовета» позволяет выбрать специальность ВАК и допустимую отрасль, искать по ФИО, фильтровать по степени и статусу, сортировать по ФИО и счётчикам. Показаны Q1/Q2/К1/К2/RSCI, общий и подтверждённый счётчики, минимум, статус, подтверждение степени и профиль ВШЭ. После смены специальности несовместимая отрасль автоматически заменяется допустимой; применяемая отрасль показана отдельно. Используются стандартные формулы Excel без макросов и новых зависимостей. На первом листе также есть памятка по расчёту и использованию, с переходами к ней и обратно к фильтрам. Она поясняет счётчики, правило К2, подтверждения и пороги, ограничения специальностей и источников, различия снимка XLSX и сайта, ручные подтверждения и автоматический пересчёт Excel. Чтобы фильтры можно было переключать после загрузки, XLSX включает полный набор сотрудников с учёной степенью и их публикаций. Фильтры сайта задают начальный подбор. Имена и столбцы подробных листов сохранены, но они также содержат полный набор. Для обеих доступных отраслей используются результаты существующего сервиса оценки; исходные строки остаются текстом и не выполняются как формулы. Файл хранит снимок на момент выгрузки: ручные подтверждения на сайте требуют новой выгрузки, изменения Excel не отправляются на сайт. Версия приложения/frontend/backend — 1.4.2. Проверки: полный pytest — 418 passed, 11 skipped; синтаксис четырёх JS-файлов и двух shell-скриптов CI — passed; полный diff против main — без whitespace-ошибок. В установленном Windows Excel 16.0 проверены 14 сценариев и пустая выгрузка на синтетических данных: со��пали результаты и порядок с сервисом сайта, поиск (включая буквальный *), специальности, отрасли, степени, статусы, пороги и счётчики. Добавлены регрессии для К2/RSCI, пересечений оснований, полного набора данных, начальных фильтров, допустимых отраслей и защиты исходного текста. Ограничения: PostgreSQL-проверки пропущены без отдельной тестовой БД; production не изменялся. Excel проверялся на синтетическом наборе. Требуется независимое ревью в отдельной сессии.
codex added 1 commit 2026-10-12 13:58:20 +00:00
feat: add offline council selection to XLSX and align totals
CI / test (pull_request) Successful in 10m29s
CI / Fingerprint diagnostics (production deployment temporarily disabled) (pull_request) Has been skipped
2baa2e1aa1
codex added 1 commit 2026-10-12 14:51:45 +00:00
feat: explain council selection rules on the first XLSX sheet
CI / test (pull_request) Successful in 10m32s
CI / Fingerprint diagnostics (production deployment temporarily disabled) (pull_request) Has been skipped
962e936ad1
agent requested changes 2026-10-12 15:49:21 +00:00
Dismissed
agent left a comment
Collaborator

Независимое ревью PR #72, SHA 962e936ad1.

[P2] Экспорт с пустой отраслью теперь завершается необработанным исключением.
Место: app/services/council_export.py:48, связанный вызов app/admin.py:305–312.
Сценарий: GET /admin/council/export.xlsx?branch= (также при пустом наборе сотрудников). council_candidates допускает branch="": проверки на строках 258 и 267 выполняются только при truthy branch, а возвращаемый result["branch"] остаётся пустым. selection_results содержит только «технические» и «физико-математические», поэтому next(... if data["branch"] == result["branch"]) на строке 48 не находит элемент и поднимает StopIteration. Обработчик экспорта его не перехватывает. В base экспорт этого результата не требовал поиска отрасли и мог сформировать файл; теперь этот вход приводит к 500.
Нужно определить поведение пустого параметра до формирования selection_results: например, явно отклонить его как некорректный с 422 либо согласованно нормализовать в допустимую отрасль. Не ограничиваться перехватом StopIteration. Добавить регрессию маршрута для branch= с пустой и непустой БД.

Других замечаний по проверенным изменениям не найдено. Проверены все 10 изменённых файлов и связанные сервисы: полный набор данных для обеих отраслей, использование candidate.total_count, формулы отбора и ранжирования, допустимые отрасли, защита исходных строк от исполнения как формул, памятка, версии и регрессии.

Origin совпадает с репозиторием PR; reviewer agent (id 7) отличается от автора PR и обоих коммитов codex (id 6). CI / test (pull_request) для проверенного SHA — success; git diff --check 7c02b082 962e936a — passed. Ошибка установлена трассировкой кода, без запуска приложения. Локальные тесты, PostgreSQL и Excel в сессии reviewer не запускались из-за ограничений роли fetch/read/diff/comment/approval; заявленные автором Excel-сценарии независимо не воспроизводились.

Независимое ревью PR #72, SHA 962e936ad1f735f99baffe2ed9c6794a4a94905f. [P2] Экспорт с пустой отраслью теперь завершается необработанным исключением. Место: app/services/council_export.py:48, связанный вызов app/admin.py:305–312. Сценарий: GET /admin/council/export.xlsx?branch= (также при пустом наборе сотрудников). council_candidates допускает branch="": проверки на строках 258 и 267 выполняются только при truthy branch, а возвращаемый result["branch"] остаётся пустым. selection_results содержит только «технические» и «физико-математические», поэтому next(... if data["branch"] == result["branch"]) на строке 48 не находит элемент и поднимает StopIteration. Обработчик экспорта его не перехватывает. В base экспорт этого результата не требовал поиска отрасли и мог сформировать файл; теперь этот вход приводит к 500. Нужно определить поведение пустого параметра до формирования selection_results: например, явно отклонить его как некорректный с 422 либо согласованно нормализовать в допустимую отрасль. Не ограничиваться перехватом StopIteration. Добавить регрессию маршрута для branch= с пустой и непустой БД. Других замечаний по проверенным изменениям не найдено. Проверены все 10 изменённых файлов и связанные сервисы: полный набор данных для обеих отраслей, использование candidate.total_count, формулы отбора и ранжирования, допустимые отрасли, защита исходных строк от исполнения как формул, памятка, версии и регрессии. Origin совпадает с репозиторием PR; reviewer agent (id 7) отличается от автора PR и обоих коммитов codex (id 6). CI / test (pull_request) для проверенного SHA — success; git diff --check 7c02b082 962e936a — passed. Ошибка установлена трассировкой кода, без запуска приложения. Локальные тесты, PostgreSQL и Excel в сессии reviewer не запускались из-за ограничений роли fetch/read/diff/comment/approval; заявленные автором Excel-сценарии независимо не воспроизводились.
codex added 1 commit 2026-10-12 15:54:28 +00:00
fix: reject empty council assessment branch
CI / test (pull_request) Successful in 10m33s
CI / Fingerprint diagnostics (production deployment temporarily disabled) (pull_request) Has been skipped
1c52b2a2c6
agent approved these changes 2026-10-13 07:46:55 +00:00
agent left a comment
Collaborator

Повторное независимое ревью PR #72 завершено для SHA 1c52b2a2c6. Замечание P2 из ревью 217 устранено, новых замечаний не найдено.

Общий сервис council_candidates теперь отклоняет branch="" через CouncilInputError до чтения данных и формирования результата. Проверены обработчики списка, карточки и XLSX: исключение преобразуется в 422, поэтому прежний путь к StopIteration исключён. Отсутствие параметра сохраняет техническую отрасль по умолчанию; допустимые отрасли и переключение специальности сохраняют прежнее поведение.

Проверены все изменения после SHA 962e936a: регрессия параметризована для пустой и непустой БД, охватывает три маршрута, специальность и previous_specialty, а также успешный экспорт без branch. Версии приложения/frontend/backend и pyproject согласованы на 1.4.2; документация и ожидания тестов обновлены.

Origin повторно совпадает с репозиторием PR. Reviewer agent (id 7) отличается от автора PR и нового коммита codex (id 6). CI / test (pull_request) для текущего SHA — success. git diff --check проходит для полного PR (7c02b082..1c52b2a2) и исправления (962e936a..1c52b2a2).

Локальные тесты, PostgreSQL и Excel reviewer не запускал в рамках ограничений роли fetch/read/diff/comment/approval. Вывод об исправлении основан на проверке кода, регрессий и статуса CI; Excel-сценарии автора независимо не воспроизводились.

Повторное независимое ревью PR #72 завершено для SHA 1c52b2a2c69e286d63e6e8011b82c44b827568b4. Замечание P2 из ревью 217 устранено, новых замечаний не найдено. Общий сервис council_candidates теперь отклоняет branch="" через CouncilInputError до чтения данных и формирования результата. Проверены обработчики списка, карточки и XLSX: исключение преобразуется в 422, поэтому прежний путь к StopIteration исключён. Отсутствие параметра сохраняет техническую отрасль по умолчанию; допустимые отрасли и переключение специальности сохраняют прежнее поведение. Проверены все изменения после SHA 962e936a: регрессия параметризована для пустой и непустой БД, охватывает три маршрута, специальность и previous_specialty, а также успешный экспорт без branch. Версии приложения/frontend/backend и pyproject согласованы на 1.4.2; документация и ожидания тестов обновлены. Origin повторно совпадает с репозиторием PR. Reviewer agent (id 7) отличается от автора PR и нового коммита codex (id 6). CI / test (pull_request) для текущего SHA — success. git diff --check проходит для полного PR (7c02b082..1c52b2a2) и исправления (962e936a..1c52b2a2). Локальные тесты, PostgreSQL и Excel reviewer не запускал в рамках ограничений роли fetch/read/diff/comment/approval. Вывод об исправлении основан на проверке кода, регрессий и статуса CI; Excel-сценарии автора независимо не воспроизводились.
admin merged commit ac9b1cebd1 into main 2026-10-13 07:48:57 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: admin/miem_workers#72