Skip to content

Процентные веса критериев кейса и итог 0–100 - #862

Open
TThanos3000 wants to merge 2 commits into
devfrom
codex/weighted-case-criteria-20261111
Open

TThanos3000 wants to merge 2 commits into
devfrom
codex/weighted-case-criteria-20261111

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Nov 11, 2026 •

Copy link
Copy Markdown
Collaborator

Что изменено

Организатор может включить процентные веса критериев с суммой 100%. Оценка 8/10 при весе 40% дает 32 балла; итог команды — среднее полных оценок экспертов по шкале 0–100. Существующие программы сохраняют прежнюю сумму исходных баллов.

Зачем

Для кейс-чемпионата нужны критерии разной значимости без зависимости итогового максимума от их шкал. Требования, W01–W10 и evidence.

Реализация

  • Общая Decimal-формула для Project и ProgramSolution, без промежуточного округления вкладов; финал HALF_UP до двух знаков. Частичные оценки исключены из среднего, правила допуска и мест сохраняются.
  • Атомарное сохранение режима и полного набора весов через общий organizer service. Django admin получил эквивалентный пакетный редактор.
  • Сумма 100%, положительные веса с точностью до двух знаков и конечные невырожденные шкалы проверяются на сервере. Первая оценка, включая частичную, фиксирует настройки; записи используют program lock и повторную проверку принадлежности критерия.
  • XLSX содержит исходные баллы, отдельный лист критериев и формулы нормализации. Legacy-экспорт сохраняется.

API

Добавлены optional scoring_mode, weight_percent и contributions; C00 1.22.0, generated DTO синхронизированы в связанном frontend. Старый PUT без новых полей сохраняет действующие режим и веса. Режим/веса входят в revision; устаревшая экспертная форма получает 409. Payload исходных оценок и URL сохраняются.

UI

Django admin: ссылка «Критерии, веса и способ расчета» в программе; форма на русском, тот же service и проверки. Angular — отдельный связанный PR: PROCOLLAB-github/procollab#541. Квиз не входит в изменение.

Permissions

API сохраняет manager своей программы / staff; Django admin дополнительно требует модельные view/change permissions. Гость, участник, чужой manager и обычный эксперт не могут менять веса. Raw scores, роли и привязки к программе не объединяются между Project и ProgramSolution.

Проверки

  • Checked by tests: 235 тестов project_rates и management criteria/results/core API на отдельном PostgreSQL; после уточнения role matrix соответствующий HTTP-тест отдельно повторен успешно.
  • Миграция туда/обратно с прежними оценками, Project/ProgramSolution parity, locking/race, недопустимые значения и admin permissions.
  • Black, Python lint E/F/W, makemigrations --check --dry-run, git diff --check.
  • C00 validator: 156 schemas, 59 operations, 307 scenarios.
  • Checked by browser/build вместе с Angular: production build + настоящий локальный Django, синтетические аккаунты, desktop/mobile/keyboard, сохранение 40/35/25 и экспертной оценки. Внешние сервисы заблокированы.
  • Итоги экспертов 71,5 / 88, рейтинг 79,75 из 100. Скачанный XLSX пересчитан LibreOffice и дал те же числа.

Acceptance criteria

  • W01 — legacy баллы/максимумы/места/XLSX сохраняются.
  • W02–W03 — проценты сохраняются; невалидный набор отклоняется атомарно.
  • W04/W06 — роли, revision, первая оценка и гонки защищены сервером.
  • W05/W07 — нормализация разных шкал, равные эксперты и паритет двух моделей/экспорта.
  • W08–W09 — проверены в связанном Angular изменении и браузере.
  • W10 — изолированные миграции, проверки и requirement/code review завершены.

Не проверено

Установка на dev/prod, реальная почта, нагрузка 100 участников и приемка клиента. На pilot функция установлена владельцем в составе source 7657082 (API #861 / UI #540); 20 runtime-файлов весов совпадают с этой реализацией. Независимые 11 HTTP и 7 browser checks подтвердили новый контракт/форму/админку, режим legacy и revision сохранены; процентные оценки на живом пилоте не создавались. Локальные QA-логи, скриншоты и учетные данные не входят в Git. Прежнее различие двух описаний published-solutions GET в C00 между repos сохранено вне scope; добавленные схемы и примеры весов совпадают.

Риски / migration

У режима задан db_default="legacy": старый ORM после миграции продолжает создавать программы. Это проверено исторической моделью и реальным старым исходным кодом на PostgreSQL; актуальный head повторно прошел 235 профильных тестов.

Две добавочные миграции: partner_programs 0044 и project_rates 0012. Default legacy, nullable веса, без пересчета прежних оценок. Порядок: API + миграции → Angular → явное включение весов в нужной программе до первой оценки. Merge и установка на реальные стенды этим PR не выполняются.

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