fix: норматив доклада только по выбору
This commit is contained in:
parent
6e7c4f4596
commit
5e459c449b
14 changed files with 100 additions and 21 deletions
|
|
@ -83,7 +83,9 @@ export function Debrief({ report, big = false }: { report: SessionReport; big?:
|
|||
{` ${report.criteria.card_fill_time_limit_seconds ?? 180} с`}</>}
|
||||
{/* 112 → ДДС приходит как exercise "card": работу ДДС выдают карточки пульта. */}
|
||||
{(report.exercise === "dds" || Boolean(report.card_results?.length)) && <>; статус по докладу бригады —
|
||||
{` не позже ${report.criteria.dds_report_reaction_limit_seconds ?? 45} с`}</>}
|
||||
{report.criteria.dds_report_reaction_enabled
|
||||
? ` не позже ${report.criteria.dds_report_reaction_limit_seconds ?? 45} с`
|
||||
: " не применяется"}</>}
|
||||
{report.exercise && report.exercise !== "dds" && <>
|
||||
; грамматика описания КИО {report.criteria.require_correct_grammar ? "входит" : "не входит"} в оценку
|
||||
</>}.
|
||||
|
|
|
|||
|
|
@ -47,10 +47,12 @@ const REVIEW_METRICS: MetricOption[] = [
|
|||
|
||||
export function ScoreWeightsEditor({
|
||||
exercise,
|
||||
reportReactionEnabled,
|
||||
values,
|
||||
onChange,
|
||||
}: {
|
||||
exercise: LessonExercise;
|
||||
reportReactionEnabled: boolean;
|
||||
values: Record<string, number>;
|
||||
onChange: (weights: Record<string, number>) => void;
|
||||
}) {
|
||||
|
|
@ -63,6 +65,11 @@ export function ScoreWeightsEditor({
|
|||
? [["Карточка КИО", CARD_METRICS], ["Реагирование ДДС", DDS_METRICS]]
|
||||
: [["Опрос 112", CALL_METRICS], ["Реагирование ДДС", DDS_METRICS]];
|
||||
groups.push(["Разбор", REVIEW_METRICS]);
|
||||
if (!reportReactionEnabled) {
|
||||
for (const group of groups) {
|
||||
group[1] = group[1].filter(({ key }) => key !== "dds_report_reaction");
|
||||
}
|
||||
}
|
||||
|
||||
function setWeight(key: string, raw: string) {
|
||||
const next = { ...values };
|
||||
|
|
|
|||
|
|
@ -93,6 +93,7 @@ export function Instructor() {
|
|||
const [decisionTimeLimit, setDecisionTimeLimit] = useState(30);
|
||||
const [cardFillTimeLimit, setCardFillTimeLimit] = useState(180);
|
||||
const [ddsCardWorkTimeLimit, setDdsCardWorkTimeLimit] = useState(180);
|
||||
const [ddsReportReactionEnabled, setDdsReportReactionEnabled] = useState(false);
|
||||
const [ddsReportReactionLimit, setDdsReportReactionLimit] = useState(45);
|
||||
const [allowedErrors, setAllowedErrors] = useState(0);
|
||||
const [requireCorrectGrammar, setRequireCorrectGrammar] = useState(true);
|
||||
|
|
@ -292,6 +293,7 @@ export function Instructor() {
|
|||
&& !(exercise === "dds" && wholeTicket)
|
||||
? visibleScenarios.filter((item) => item.outcome === "card").map((item) => item.id)
|
||||
: undefined;
|
||||
const reportReactionEnabled = (exercise === "dds" || exercise === "card_dds") && ddsReportReactionEnabled;
|
||||
const sent = control.start(sessionId, {
|
||||
scenarioId: primaryScenarioId,
|
||||
mode,
|
||||
|
|
@ -308,15 +310,18 @@ export function Instructor() {
|
|||
decision_time_limit_seconds: decisionTimeLimit,
|
||||
card_fill_time_limit_seconds: cardFillTimeLimit,
|
||||
dds_card_work_time_limit_seconds: ddsCardWorkTimeLimit,
|
||||
dds_report_reaction_enabled: reportReactionEnabled,
|
||||
dds_report_reaction_limit_seconds: ddsReportReactionLimit,
|
||||
allowed_errors: allowedErrors,
|
||||
require_correct_grammar: requireCorrectGrammar,
|
||||
score_weights: lessonScoreWeights,
|
||||
score_weights: reportReactionEnabled
|
||||
? lessonScoreWeights
|
||||
: Object.fromEntries(Object.entries(lessonScoreWeights).filter(([key]) => key !== "dds_report_reaction")),
|
||||
},
|
||||
});
|
||||
if (sent) toStart.current = null;
|
||||
}, [sessionId, control, scenarioId, extraScenarioIds, mode, trainee, traineeId, trainees.data,
|
||||
exercise, decisionTimeLimit, cardFillTimeLimit, ddsCardWorkTimeLimit, ddsReportReactionLimit, allowedErrors, requireCorrectGrammar, wholeTicket, selectedTicketScenarios,
|
||||
exercise, decisionTimeLimit, cardFillTimeLimit, ddsCardWorkTimeLimit, ddsReportReactionEnabled, ddsReportReactionLimit, allowedErrors, requireCorrectGrammar, wholeTicket, selectedTicketScenarios,
|
||||
ddsArrivalIntervalSeconds, ddsMaxWaiting, lessonScoreWeights, scenarios.data,
|
||||
randomScenario, visibleScenarios]);
|
||||
|
||||
|
|
@ -664,13 +669,20 @@ export function Instructor() {
|
|||
onCommit={setDdsCardWorkTimeLimit} />
|
||||
<small className="ref">По умолчанию 180 секунд; не заменяет 30-секундное первичное решение.</small>
|
||||
</label>}
|
||||
{(exercise === "dds" || exercise === "card_dds") && <label className="lesson-criterion">
|
||||
Реакция на доклад бригады, секунд
|
||||
<LessonNumberInput label="Лимит реакции на доклад бригады, секунд"
|
||||
value={ddsReportReactionLimit} min={5} max={600} fallback={45}
|
||||
onCommit={setDdsReportReactionLimit} />
|
||||
<small className="ref">По умолчанию 45 секунд: статус по докладу бригады — не позже лимита.</small>
|
||||
</label>}
|
||||
{(exercise === "dds" || exercise === "card_dds") && <>
|
||||
<label className="mode-choice">
|
||||
<input type="checkbox" checked={ddsReportReactionEnabled}
|
||||
onChange={(event) => setDdsReportReactionEnabled(event.target.checked)} />
|
||||
Оценивать срок отметки статуса после доклада бригады
|
||||
</label>
|
||||
{ddsReportReactionEnabled && <label className="lesson-criterion">
|
||||
Лимит реакции на доклад бригады, секунд
|
||||
<LessonNumberInput label="Лимит реакции на доклад бригады, секунд"
|
||||
value={ddsReportReactionLimit} min={5} max={600} fallback={45}
|
||||
onCommit={setDdsReportReactionLimit} />
|
||||
<small className="ref">Учебный лимит при включённом критерии; исходное значение — 45 секунд.</small>
|
||||
</label>}
|
||||
</>}
|
||||
<label className="lesson-criterion">
|
||||
Допустимо нарушенных метрик
|
||||
<LessonNumberInput label="Допустимое число ошибок" value={allowedErrors}
|
||||
|
|
@ -682,6 +694,7 @@ export function Instructor() {
|
|||
Грамматика карточки оператора 112 входит в оценку
|
||||
</label>}
|
||||
<ScoreWeightsEditor exercise={exercise === "card_dds" ? "card_dds" : exercise}
|
||||
reportReactionEnabled={(exercise === "dds" || exercise === "card_dds") && ddsReportReactionEnabled}
|
||||
values={lessonScoreWeights} onChange={setLessonScoreWeights} />
|
||||
<small className="ref">Нормативы ГОСТ для приёма вызова не изменяются.</small>
|
||||
</details>
|
||||
|
|
|
|||
|
|
@ -400,6 +400,7 @@ export interface LessonCriteria {
|
|||
decision_time_limit_seconds?: number;
|
||||
card_fill_time_limit_seconds?: number;
|
||||
dds_card_work_time_limit_seconds?: number;
|
||||
dds_report_reaction_enabled?: boolean;
|
||||
dds_report_reaction_limit_seconds?: number;
|
||||
allowed_errors?: number;
|
||||
require_correct_grammar?: boolean;
|
||||
|
|
|
|||
Loading…
Reference in a new issue