lct-hack/scenarios/tickets/t01-2-mass-fight.yaml
Ivan Gerasimov b8dc39fd7d feat: исход вызова — не каждый звонок заканчивается карточкой (lct-36)
Весь продукт стоял на допущении «звонок → карточка → выезд». В билетах
заказчика оно нарушается намеренно: «поругался с продавцом Мегафон» — справка,
а вызов из Волгоградской области передаётся в систему-112 другого субъекта.
Курсант, заведший карточку на такой вызов, занял расчёт зря, и прежняя оценка
этого не видела — наоборот, награждала за полноту заполнения.

- Outcome в домене, поле outcome в сценарии, событие call.resolve у курсанта
  и две кнопки на АРМ. Отдельное действие, а не «положил трубку»: система
  должна отличить осознанное решение от брошенного вызова.
- Метрика outcome (E2, вес 3 — лишний выезд дороже неточного признака).
- Там, где карточка не заводится, метрики карточки не считаются вовсе.
  Полнота опроса считается: передать вызов не значит не опрашивать.
- call.resolve останавливает норматив опроса, как и передача карточки.

Попутно (lct-34): библиотека стала вложенной — scenarios/tickets/, поля
ticket и position, чек-листы для медицины, полиции и ЖКХ. Перенесён билет 1
целиком: три вызова, три классификатора, третий — из другого региона.

Найдено по ходу: модификаторы списка оповещения не были подключены ни к чему.
В классификаторе скорая добавляется к массовой драке признаком «пострадавшие»,
но взять его было неоткуда. Теперь модификаторы берутся из карточки —
victims_count, life_threat, evacuation_needed, fire.gasified, — и список
оповещения пересобирается при правке любого из этих полей.

161 тест зелёный (13 новых), make typecheck чистый.
2026-09-20 08:33:30 +03:00

58 lines
2.3 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Билет 1, вызов 2 (docs/spec/TICKETS.md). Массовая драка с пострадавшими:
# в списке оповещения и полиция, и скорая — это тот случай, где выбор одной
# службы был бы неверен по построению.
id: t01-2-mass-fight
title: "Массовая драка у посольства, пятеро пострадавших"
ticket: 1
position: 2
type: police
level: L2
topics: [police]
modes: [training, exam, self]
extends: checklists/police.yaml
signs: [Драка, Улица общественное место, Массовая (от 10 человек)]
persona:
base: worried
arc:
- { stage: registration, mood: worried }
- { stage: interview, mood: worried }
first_line: "Алло! Тут человек пятнадцать дерутся, прутами машут! Скорее!"
facts:
- id: f_address
value: "рядом с посольством Азербайджана, на тротуаре"
refined: "Леонтьевский переулок, дом 16, строение 1"
reveal_on: { question: q_address }
refine_on: q_address_check
- id: f_what_happened
value: "дерутся десять-пятнадцать человек"
reveal_on: { question: q_what_happened }
- id: f_victims
value: "пятеро пострадавших с разными травмами"
reveal_on: { question: q_victims }
- id: f_suspects
value: "дерутся палками и железными прутами, огнестрельного не видно"
reveal_on: { question: q_suspects }
- id: f_caller
value: "Иванов Пётр Иванович, телефон 916-123-98-78"
reveal_on: { question: q_caller }
checklist:
- { id: q_address, fact: f_address }
- { id: q_address_check }
- { id: q_what_happened, fact: f_what_happened }
- { id: q_victims, fact: f_victims }
- { id: q_suspects, fact: f_suspects }
- { id: q_caller, fact: f_caller }
required_fields: [address, incident_type, description, victims_count]
ground_truth:
address: "Леонтьевский переулок, дом 16, строение 1"
victims: 5
tree:
pregenerated: false