Планировщик судебных смен ночного режима для мэрии

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

Контекст
формирует повестку, судей и залы держит ночные смены в курсе каждой секунды решение держит городской ситуационный центр.

Функциональность
  • отслеживает слушания для дворца правосудия ночного контура и наносит данные на ночную сетку Watcher
  • управляет табло Gavel через панель Decree без задержек
  • прогнозирует накладки в расписании и заранее предупреждает секретарей заседаний

Внедрение
  • прописать реестр дел и ночные ключи доступа перед вводом
  • сверить расписание залов с марки Chronos
  • назначить ответственных за запасные лоты и ночной резерв каналов
  • загрузить сценарии шаблон уведомлений и ночные регламенты

Код
Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>

#define MODULE_TAG "MUN_COURT_SHIFT_NIGHT"
#define CASE_CAP 24

enum e_case
{
    bool:active,
    hour,
    minute,
    hall,
    judge[24],
    title[48]
};
new MUN_Cases[CASE_CAP][e_case];

CMD:courtshiftnistatcity(playerid, const params[])
{
    SendClientMessage(playerid, 0xFFE4B5FF, "[%s] Повестка:", MODULE_TAG);
    for(new i = 0; i < CASE_CAP; i++)
    {
        if(!MUN_Cases[i][active]) continue;
        new msg[144];
        format(msg, sizeof msg, "#%d %02d:%02d Hall %d | %s | Судья %s", i, MUN_Cases[i][hour], MUN_Cases[i][minute], MUN_Cases[i][hall], MUN_Cases[i][title], MUN_Cases[i][judge]);
        SendClientMessage(playerid, 0xFFE4B5FF, msg);
    }
    return 1;
}

CMD:courtshiftnictlcity(playerid, const params[])
{
    new action[8], slot, hour, minute, hall;
    new judge[24], title[48];
    if(sscanf(params, "s[8]", action)) return SendClientMessage(playerid, -1, "Используй: /courtshiftnictlcity add/move/remove");

    if(!strcmp(action, "add", true))
    {
        if(sscanf(params, "s[8]iiis[24]s[48]", action, slot, hour, minute, hall, judge, title)) return SendClientMessage(playerid, -1, "/courtshiftnictlcity add [слот] [часы] [минуты] [зал] [судья] [дело]");
        MUN_Cases[slot][active] = true;
        MUN_Cases[slot][hour] = hour;
        MUN_Cases[slot][minute] = minute;
        MUN_Cases[slot][hall] = hall;
        format(MUN_Cases[slot][judge], 24, "%s", judge);
        format(MUN_Cases[slot][title], 48, "%s", title);
    }
    else if(!strcmp(action, "move", true))
    {
        if(sscanf(params, "s[8]iii", action, slot, hour, minute)) return SendClientMessage(playerid, -1, "/courtshiftnictlcity move [слот] [часы] [минуты]");
        MUN_Cases[slot][hour] = hour;
        MUN_Cases[slot][minute] = minute;
    }
    else if(!strcmp(action, "remove", true))
    {
        if(sscanf(params, "s[8]i", action, slot)) return SendClientMessage(playerid, -1, "/courtshiftnictlcity remove [слот]");
        MUN_Cases[slot][active] = false;
    }
    return 1;
}

Тест-кейсы
  • провести испытание: поставить два дела на одну минуту — ожидать корректного сигнала
  • смоделировать отказ: перенести заседание в другой зал — убедиться что резерв подхватил
  • сравнить отчёт с реестр дел и подтвердить отсутствие расхождений

Эксплуатация
  • вечером выгружать повестку
  • архивировать отменённые заседания
  • проводить ночные аудиты вместе с секретарей заседаний
  • держать план реагирования на накладки в расписании актуальным
  • отчёты автоматически попадают в мэрия
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху