lct-20: АРМ диспетчера ДДС и цепочка 112 → ДДС
Возврат карточки — самая ценная механика цепочки: неполнота КИО перестаёт быть процентом в отчёте и становится сорванным выездом с конкретной причиной. В разборе это отметка E6: «не заполнено floor, victims_count — выезд сорван». Снимок карточки не меняется после передачи: оператор не дописывает задним числом поле, которое забыл. Тест правит карточку после передачи и проверяет, что в снимке этого нет. Диспетчер садится за АРМ, когда вызов уже идёт, — станция, подключённая после передачи, всё равно получает карточку. У станции нет аудио вообще: ни VAD, ни распознавания, ни синтеза.
This commit is contained in:
parent
38082e2af3
commit
ee2a526831
15 changed files with 439 additions and 13 deletions
|
|
@ -45,6 +45,7 @@ class SessionHub:
|
|||
self._sessions: dict[UUID, SessionState] = {}
|
||||
self._observers: dict[UUID, set[asyncio.Queue]] = {}
|
||||
self._trainees: dict[UUID, set[asyncio.Queue]] = {}
|
||||
self._stations: dict[UUID, set[asyncio.Queue]] = {}
|
||||
self._tickers: dict[UUID, asyncio.Task] = {}
|
||||
|
||||
# ── реестр ──
|
||||
|
|
@ -77,6 +78,9 @@ class SessionHub:
|
|||
def trainee(self, session_id: UUID):
|
||||
return self._subscribe(self._trainees, session_id)
|
||||
|
||||
def station(self, session_id: UUID):
|
||||
return self._subscribe(self._stations, session_id)
|
||||
|
||||
# ── вещание ──
|
||||
|
||||
@staticmethod
|
||||
|
|
@ -93,6 +97,9 @@ class SessionHub:
|
|||
def to_trainee(self, session_id: UUID, event: BaseModel | bytes) -> None:
|
||||
self._put(self._trainees.get(session_id, set()), event)
|
||||
|
||||
def to_station(self, session_id: UUID, event: BaseModel) -> None:
|
||||
self._put(self._stations.get(session_id, set()), event)
|
||||
|
||||
def broadcast(self, session_id: UUID, event: BaseModel) -> None:
|
||||
self.to_trainee(session_id, event)
|
||||
self.to_observers(session_id, event)
|
||||
|
|
|
|||
Loading…
Reference in a new issue