lct-53: ДДС сообщает в 112 об ошибке карточки по докладу с места, а не «не проверяет»

This commit is contained in:
Ivan Gerasimov 2026-09-27 23:44:02 +03:00
commit 94886b6914
5 changed files with 13 additions and 7 deletions

View file

@ -3,9 +3,9 @@
Учебный исходящий звонок бригаде имитируется событиями JSON. Для целевого Учебный исходящий звонок бригаде имитируется событиями JSON. Для целевого
локального прототипа не нужна внешняя телефония или аудиомодель. локального прототипа не нужна внешняя телефония или аудиомодель.
Самая ценная механика цепочки — `card.bounce`: диспетчер видит, что не указан `card.bounce` сервер отклоняет: ДДС не возвращает карточку в 112 при принятии
этаж, и отбивает карточку обратно. Неполнота КИО перестаёт быть процентом и не правит её поля. Об ошибке, которую вскрыл доклад бригады с места,
в отчёте и становится сорванным выездом с конкретной причиной. диспетчер сообщает в 112 по телефону (ответ заказчика, П.3).
Правила пульта — в `DdsDesk.apply`; здесь разбор команды и рассылка итога. Правила пульта — в `DdsDesk.apply`; здесь разбор команды и рассылка итога.
Отсев повторов и операция хранилища — в `run_command`. Отсев повторов и операция хранилища — в `run_command`.

View file

@ -591,8 +591,13 @@ class DdsDesk(BaseModel):
self.finish_work() self.finish_work()
outcome.finished = True outcome.finished = True
case "card.bounce": case "card.bounce":
# Возврата карточки на этапе принятия нет; об ошибке, которую
# вскрыл доклад бригады с места, ДДС сообщает в 112 по телефону
# (ответ заказчика, П.3).
return _refused( return _refused(
"ДДС не проверяет заполнение карточки: замечания передаёт служба контроля 112" "Карточку не возвращают в 112 при принятии и не правят на АРМ ДДС. "
"Если ошибка вскрылась по докладу бригады с места — сообщите о ней "
"в 112 по телефону"
) )
case "zone.decision": case "zone.decision":
previous = next( previous = next(

View file

@ -175,7 +175,8 @@ def test_bounce_is_refused_in_favour_of_112_control():
outcome = state.desk.apply(CardBounce(missing_fields=["floor"]), state) outcome = state.desk.apply(CardBounce(missing_fields=["floor"]), state)
assert outcome.error == ( assert outcome.error == (
"ДДС не проверяет заполнение карточки: замечания передаёт служба контроля 112") "Карточку не возвращают в 112 при принятии и не правят на АРМ ДДС. "
"Если ошибка вскрылась по докладу бригады с места — сообщите о ней в 112 по телефону")
def test_refusals_leave_desk_untouched(): def test_refusals_leave_desk_untouched():

View file

@ -123,7 +123,7 @@ def test_dds_cannot_return_card_for_112_quality_control(client):
station.send_json({"type": "card.bounce", "missing_fields": ["floor", "victims_count"], station.send_json({"type": "card.bounce", "missing_fields": ["floor", "victims_count"],
"comment": "куда ехать без этажа"}) "comment": "куда ехать без этажа"})
error = read_until(station, "error") error = read_until(station, "error")
assert "служба контроля 112" in error["message"] assert "сообщите о ней в 112 по телефону" in error["message"]
assert state.bounced_fields == [] assert state.bounced_fields == []
trainee.send_json({"type": "call.hangup"}) trainee.send_json({"type": "call.hangup"})
wait_for(lambda: state.score is not None) wait_for(lambda: state.score is not None)

View file

@ -669,7 +669,7 @@ export function Dds() {
onClick={() => { channel.current?.send({ type: "zone.decision", in_zone: true }); }}>Наша</button> onClick={() => { channel.current?.send({ type: "zone.decision", in_zone: true }); }}>Наша</button>
<button type="button" disabled={zone !== null || !isConnected || ended} <button type="button" disabled={zone !== null || !isConnected || ended}
onClick={() => { channel.current?.send({ type: "zone.decision", in_zone: false }); }}>Не наша</button></div> onClick={() => { channel.current?.send({ type: "zone.decision", in_zone: false }); }}>Не наша</button></div>
<p className="dds-hint">ДДС не исправляет и не возвращает заполненную карточку: её качество контролируют оператор и служба контроля 112.</p> <p className="dds-hint">Карточку не правят на АРМ ДДС и не возвращают в 112 при принятии. Если бригада с места доложит о расхождении с карточкой — сообщите об ошибке в 112 по телефону.</p>
<button type="button" className="dds-finish" disabled={!cardId || !isConnected || ended || advancePending} <button type="button" className="dds-finish" disabled={!cardId || !isConnected || ended || advancePending}
onClick={() => { onClick={() => {
if (reply.dirty && !send({ type: "card.reply", card_id: cardId, text: reply.text })) return; if (reply.dirty && !send({ type: "card.reply", card_id: cardId, text: reply.text })) return;