Активный
- Тема Автор
- #1
Контекст
держит очередь обращений и мгновенно назначает исполнителей держит ночные смены в курсе каждой секунды поддерживает дежурные части полиции.
Функциональность
Внедрение
Код
Тест-кейсы
Эксплуатация
держит очередь обращений и мгновенно назначает исполнителей держит ночные смены в курсе каждой секунды поддерживает дежурные части полиции.
Функциональность
- отслеживает приоритет обращения для оперативного call-центра ночного контура и наносит данные на ночную сетку Watcher
- управляет канал Pivot через табло Fusion без задержек
- прогнозирует накопление необработанных заявок и заранее предупреждает старших диспетчеров
Внедрение
- прописать карточки источников и ночные ключи доступа перед вводом
- сверить ротацию кураторов с марки Chronos
- назначить ответственных за резерв применений и ночной резерв каналов
- загрузить сценарии каталог сценариев реакции и ночные регламенты
Код
Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#define MODULE_TAG "PD_INCIDENT_PIVOT_NIGHT"
#define MAX_QUEUE 36
enum e_incident
{
bool:used,
priority,
assigned,
caller[24]
}
new PD_Incidents[MAX_QUEUE][e_incident];
stock PD_AddIncident(const caller[], priority)
{
for(new i = 0; i < MAX_QUEUE; i++)
{
if(!PD_Incidents[i][used])
{
PD_Incidents[i][used] = true;
PD_Incidents[i][priority] = priority;
PD_Incidents[i][assigned] = INVALID_PLAYER_ID;
format(PD_Incidents[i][caller], 24, "%s", caller);
return i;
}
}
return -1;
}
CMD:incidentpivostatpd(playerid, const params[])
{
SendClientMessage(playerid, 0xFFD700FF, "[%s] Активная очередь:", MODULE_TAG);
for(new i = 0; i < MAX_QUEUE; i++)
{
if(!PD_Incidents[i][used]) continue;
new msg[96];
format(msg, sizeof msg, "#%d | %s | prio %d | exec %d", i, PD_Incidents[i][caller], PD_Incidents[i][priority], PD_Incidents[i][assigned]);
SendClientMessage(playerid, 0xC0C0C0FF, msg);
}
return 1;
}
CMD:incidentpivoctlpd(playerid, const params[])
{
new slot, target;
if(sscanf(params, "ii", slot, target)) return SendClientMessage(playerid, -1, "Используй: /incidentpivoctlpd [слот] [оператор]");
if(slot < 0 || slot >= MAX_QUEUE || !PD_Incidents[slot][used]) return SendClientMessage(playerid, 0xDC143CFF, "[%s] Слот не активен.", MODULE_TAG);
PD_Incidents[slot][assigned] = target;
SendClientMessage(target, 0x32CD32FF, "[%s] Вам назначен инцидент #%d.", MODULE_TAG, slot);
return 1;
}
Тест-кейсы
- провести испытание: заполнить очередь до лимита — ожидать корректного сигнала
- смоделировать отказ: назначить двух исполнителей на один слот — убедиться что резерв подхватил
- сравнить отчёт с реестр заявок и подтвердить отсутствие расхождений
Эксплуатация
- в конце смены выгружать журнал
- контролировать обращения старше часа
- проводить ночные аудиты вместе с старших диспетчеров
- держать план реагирования на накопление необработанных заявок актуальным
- отчёты автоматически попадают в полиция