diff --git a/frontend/src/features/debrief/Debrief.tsx b/frontend/src/features/debrief/Debrief.tsx index 8d69d3b..59b28df 100644 --- a/frontend/src/features/debrief/Debrief.tsx +++ b/frontend/src/features/debrief/Debrief.tsx @@ -90,7 +90,8 @@ export function Debrief({ report, big = false }: { report: SessionReport; big?: {Boolean(report.card_results?.length) &&

Карточки занятия ({report.card_results!.length})

{report.card_results!.map((card, index) =>
- Карточка {index + 1}: {card.title || card.scenario_id} · {card.score_auto.toFixed(0)} / 100 + Карточка {index + 1}: {card.title || card.scenario_id} · {(card.score_reviewed ?? card.score_auto).toFixed(0)} / 100 + {card.score_reviewed != null && ` после разбора (автооценка ${card.score_auto.toFixed(0)})`} {card.address ? ` · ${card.address}` : ""} {card.managed_service &&

Ответственная служба: {card.managed_service}

}

Ответ диспетчера: {card.reply_text || "не внесён"}

@@ -146,9 +147,9 @@ export function Debrief({ report, big = false }: { report: SessionReport; big?: {finding.summary}
{finding.fact}{finding.norm && ` · ${finding.norm}`}
{finding.source === "instructor" &&
отметка преподавателя {finding.author ?? ""}
} - {finding.review &&
- {finding.review.decision === "dismissed" ? "снята" : "подтверждена"} преподавателем: {finding.review.reason} -
} + {(finding.reviews ?? []).map((review, reviewIndex) =>
+ {review.decision === "dismissed" ? "снята" : "подтверждена"} преподавателем {review.author}: {review.reason} +
)} ))} diff --git a/frontend/src/features/instructor/ScoreWeightsEditor.tsx b/frontend/src/features/instructor/ScoreWeightsEditor.tsx index 9f81065..8134184 100644 --- a/frontend/src/features/instructor/ScoreWeightsEditor.tsx +++ b/frontend/src/features/instructor/ScoreWeightsEditor.tsx @@ -39,6 +39,10 @@ const CARD_METRICS = OPERATOR_METRICS.filter(({ key }) => [ "required_fields", "description_grammar", "card_fill_time", ].includes(key)); const CALL_METRICS = OPERATOR_METRICS.filter(({ key }) => key !== "card_fill_time"); +// Метрика появляется, только когда ручной отметке преподавателя нечего провалить. +const REVIEW_METRICS: MetricOption[] = [ + { key: "instructor_finding", label: "Отметка преподавателя", hint: "Ручная отметка на разборе без связанной метрики (например, D4)." }, +]; export function ScoreWeightsEditor({ exercise, @@ -57,6 +61,7 @@ export function ScoreWeightsEditor({ : exercise === "card_dds" ? [["Карточка КИО", CARD_METRICS], ["Реагирование ДДС", DDS_METRICS]] : [["Опрос 112", CALL_METRICS], ["Реагирование ДДС", DDS_METRICS]]; + groups.push(["Разбор", REVIEW_METRICS]); function setWeight(key: string, raw: string) { const next = { ...values };