lct-16 и половина lct-19: разбор, отчёт, внешний монитор, эталон
Эталонный диалог собирается кодом из фактов и чек-листа: написанный руками, он разошёлся бы с фактами при первой же правке сценария, и курсанта оштрафовали бы за правильный ответ. Отчёт: метрики фактом против норматива со ссылкой, отметка E1 на каждый недобытый факт с эталонным вопросом, расхождение самооценки — что курсант заметил сам, чего не заметил, что отметил зря. Не заметил — самое ценное для разбора. Внешний монитор — не отдельное приложение, а другой режим отрисовки тех же событий: крупный таймер опроса, ход разговора, карточка, после оценки разбор на весь экран. Коррекция преподавателем сохраняет автооценку рядом: видно, что скорректировано и кем. Найдено: все метрики весили одинаково, и курсант, не задавший ни одного вопроса, но заполнивший карточку руками, получал 87 из 100. Предварительные веса (полнота опроса — 4) дают 74; окончательные утверждает методист, вопрос записан в DEBRIEF.md.
This commit is contained in:
parent
25143645d3
commit
fadfa3e479
20 changed files with 781 additions and 9 deletions
|
|
@ -14,7 +14,7 @@ from app.domain.kio import KIO, missing_fields
|
|||
from app.domain.taxonomy import ERRORS, Competency, Finding, FindingSource
|
||||
from app.domain.timers import GOST_REF, NORMATIVES, TimerCode
|
||||
from app.scenarios.schema import Scenario
|
||||
from app.scoring.taxonomy import METRIC_MAP
|
||||
from app.scoring.taxonomy import METRIC_MAP, METRIC_WEIGHTS
|
||||
from app.session.timers import SessionTimers
|
||||
|
||||
SOURCE_BY_CODE = {
|
||||
|
|
@ -64,7 +64,8 @@ class _Builder:
|
|||
def add(self, key: str, title: str, fact: str, norm: str, passed: bool, ref: str | None = None,
|
||||
finding: str | None = None) -> None:
|
||||
self.result.metrics.append(
|
||||
Metric(key=key, title=title, fact=fact, norm=norm, ref=ref, passed=passed)
|
||||
Metric(key=key, title=title, fact=fact, norm=norm, ref=ref, passed=passed,
|
||||
weight=METRIC_WEIGHTS.get(key, 1.0))
|
||||
)
|
||||
if passed:
|
||||
return
|
||||
|
|
@ -156,6 +157,7 @@ def evaluate(
|
|||
norm="все обязательные факты",
|
||||
ref="чек-лист сценария",
|
||||
passed=len(got) == len(required),
|
||||
weight=METRIC_WEIGHTS["checklist_completeness"],
|
||||
)
|
||||
)
|
||||
# По отметке на каждый недобытый факт: в разборе нужен конкретный
|
||||
|
|
|
|||
Loading…
Reference in a new issue