Skip to content

Настройка процентных весов критериев и объяснение рейтинга - #541

Open
TThanos3000 wants to merge 1 commit into
devfrom
codex/weighted-case-criteria-20261111
Open

TThanos3000 wants to merge 1 commit into
devfrom
codex/weighted-case-criteria-20261111

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

Что изменено

В существующем разделе «Оценивание → Критерии» организатор может выбрать процентные веса и распределить ровно 100%. Эксперт видит вес рядом с критерием и вводит исходные баллы; результаты объясняют итог 0–100 и вклад каждого критерия.

Зачем

Нужны критерии разной значимости для кейс-чемпионата. Спецификация и W01–W10, связанный API PR #862, frontend verification.

Реализация

  • Выбор legacy / weighted_percent, поле веса в существующем редакторе, проверка суммы в сотых процента и корректности шкал до отправки.
  • Сохранение полного набора, существующий 409 draft flow и блокировка после первой оценки. Существующий float-критерий допускает изменение веса с сохранением остальных полей.
  • Общая экспертная форма показывает активный вес; results dialog показывает нормализованную формулу и вклады. Используются ответы API для Project и ProgramSolution.
  • Optional поля моделей и generated C00 1.22.0 DTO/fixtures. Старые ответы без новых ключей читаются как legacy.

API

Новые URL и payload исходных баллов не вводятся. Добавляются scoringMode, weightPercent и contributions; расчет и проверки доступа остаются на сервере. Сначала API #862 с миграциями, затем этот frontend. Автоматического переключения программ на веса нет.

UI

Ограниченное расширение существующей формы/карточек/диалога без нового маршрута и структуры навигации. Сохраняются Mont, appField/appButton, shared rating component, текущие tokens и responsive layout; нового CSS, UI library и декоративной анимации нет. Отдельный дизайн нового экрана не требуется для этого расширения существующих controls.

Проверены реальные desktop 1440 px / mobile 390 px, длинный текст режима, доступное имя числового поля, Enter для открытия объяснения и Escape для закрытия. Отсутствие весов, ошибка суммы, saving/disabled, 409 и старый API покрыты компонентными тестами.

Permissions

Не менялись: права и object scope проверяются API; frontend сохраняет серверную блокировку критериев и не выполняет расчет прав самостоятельно. Дополнительный пакетный редактор Django admin входит в API PR и использует тот же service.

Проверки

  • Checked by tests: Vitest 57 тестов в семи файлах — criteria/results/shared expert form/adapter/solution evaluation/solution results/contract.
  • npm run test:solution-contract.
  • Checked by build: production Angular build прошел; прежние Sass/budget/CommonJS warnings сохраняются.
  • Scoped ESLint, Prettier всех измененных TS/HTML/JSON/MD, git diff --check.
  • Checked in browser: production build + реальный изолированный Django API, синтетические аккаунты, внешние сервисы заблокированы. Организатор сохранил 40/35/25; эксперт через UI отправил 8/7/6.
  • Итоги экспертов 71,5 и 88; рейтинг 79,75/100, правильные вклады, locked UI после первой оценки; ошибок страницы нет.
  • XLSX из реального API пересчитан LibreOffice и совпал с рейтингом.
  • Checked by source/design review: ограниченный diff, существующие DS/components/Mont, compatibility и обе модели результатов.

Acceptance criteria

  • W08 — сумма, сохранение, 409 draft, locked, float и старый API.
  • W09 — эксперт видит вес, результат/формула/максимум корректны; desktop/mobile/keyboard проверены.
  • W01–W07/W10 — общая реализация проверена вместе с API #862; полный audit в спецификации.

Не проверено

Установка на dev/prod, реальная почта, нагрузка 100 участников и приемка клиента. Функция установлена на pilot в интеграционной сборке 971e52f (UI #540 / API #861). Независимая browser-проверка подтвердила форму, валидацию, mobile и results; настройки и revision на живом пилоте не менялись, процентные оценки не создавались. Квиз и смешанный рейтинг квиза/кейса не входят в PR. Скриншоты и QA credentials остаются вне Git. Общерепозиторный hook с автоисправлениями обойден только для этого commit после scoped checks, чтобы не изменять посторонние файлы; глобальная конфигурация hooks не менялась.

Риски / migration

Frontend миграций нет. API #862 добавляет режим с default legacy и nullable веса. Порядок установки: backend + миграции → frontend → организатор явно настраивает веса до первой оценки. Этот PR не выполняет merge или установку на реальные стенды.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant