НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте I128 >> Версия 2026.3 >> [I128-2817] Реализовать общесистемные рабочие календари WorkCalendar📄 Скачать в DOCX
| Тип | Версия | Статус | Приоритет | Исполнитель |
|---|---|---|---|---|
| ⚙️ Новые возможности | 2026.3 | 🔘 Завершено |
Средний | Ilya Mikhaylenko |
Компоненты: Нет
Завершено: 08.09.2026 12:27
Нужно реализовать общесистемный модуль WorkCalendar для ИРБИС 128. Модуль должен хранить рабочие календари и выполнять воспроизводимый расчет рабочего времени для задач, согласований, фоновых расписаний, SLA/OLA, дежурств, окон изменений и будущих workflow-процессов.
WorkCalendar должен быть владельцем календарных правил и временной доступности. Предметные модули должны выбирать календарь, передавать правила расчета и сохранять рассчитанный результат, но не должны реализовывать собственную логику рабочих дней, праздников, смен, timezone и исключений.
В промышленном контуре ИРБИС 128 сроки реакции, сроки выполнения, напоминания, фоновые задания, approval deadlines, дежурства и окна изменений должны рассчитываться одинаково для разных модулей. Если такие правила хранить отдельно в Tasks, WorkflowCalendar, WorkflowApproval или Queue, система получит несколько несовместимых реализаций праздников, переносов, смен, часовых поясов и пересчета сроков.
WorkCalendar должен стать общим системным сервисом расчета времени. Первый важный потребитель - модуль Tasks: он использует календарь для SLA, OLA, командных очередей, ранжирования, просрочек, напоминаний и пересчета сроков. Но модуль не должен быть частной частью Tasks и должен быть применим к другим workflow-проектам.
Нужно реализовать модель календарей:
Нужно реализовать модель доступности ресурсов:
Нужно поддержать календарные правила:
Нужно реализовать API расчета:
Нужно реализовать версионирование и изменение календарей:
Нужно реализовать системные и пользовательские definitions:
Нужно реализовать права и безопасность:
Нужно реализовать интеграции:
Tasks выбирает календарь проекта, задает task-specific SLA/date rules, хранит absolute deadline, calendar key, calendar version и исходное правило расчета.
Tasks выполняет доменные реакции на пересчет: изменение признака просрочки, перестановка в очереди, эскалация, уведомление или ручное подтверждение.
WorkflowCalendar использует WorkCalendar для рабочих и нерабочих интервалов, capacity и availability, но не хранит правила рабочего времени.
WorkflowApproval использует WorkCalendar для сроков согласования и эскалаций, но не переносит approval policy в WorkCalendar.
Queue выполняет тяжелый пересчет, delayed jobs и scheduled jobs по рабочему времени, но не хранит календарную семантику.
Users/Organisations предоставляет пользователей, группы, подразделения и organization context для availability и on-call, но не хранит календарные правила.
HealthCheck проверяет корректность календарей, ссылок, timezone, пересечений, conflicts и readiness system definitions.
Observability получает сигналы о latency расчета, ошибках timezone, количестве пересчитанных объектов и длительности Queue-заданий.
TestA проверяет расчет, системные definitions, права, dryrun/apply, Queueпересчет и интеграционные сценарии.
WorkCalendar владеет календарями, рабочими периодами, праздниками, сменами, timezone, исключениями, availability overlays, отсутствиями, замещениями, on-call schedules, change/freeze windows, API расчета, версиями и impact reports.
WorkCalendar не должен владеть задачами, SLAполитиками задач, назначением ответственного, ранжированием очереди задач, approvalпроцессом, визуальными календарными представлениями, runtime Queue, справочником пользователей, правами доменных действий, коммуникациями и историей действий задачи.
Решение о назначении задачи, эскалации, обходе freezeпериода или изменении workflowсостояния принимает модуль-потребитель через свои правила, Workflow и Security. WorkCalendar только рассчитывает временную доступность, рабочие интервалы, сроки и диагностируемый результат.
Администратор может создать календарь, настроить рабочие периоды, смены, timezone и исключения, а также скопировать системный календарь для пользовательской настройки.
Системный нейтральный календарь 5/2 и примеры holiday packs поставляются через JSON/system definitions и воспроизводимо синхронизируются при setup/update.
API корректно определяет рабочее время, ближайшее рабочее время, прибавление рабочей длительности и рабочую длительность между датами с учетом timezone, праздников, сокращенных дней, смен и исключений.
Результат расчета содержит calendar key, calendar version, входные параметры, итоговую абсолютную дату, признаки округления, warnings и диагностический trace.
Изменение опубликованного календаря не меняет старые deadlines автоматически. Система формирует impact report, а массовый пересчет выполняется только через явный apply и Queue.
Availability, absence, delegation, on-call и change/freeze windows доступны через API для потребляющих модулей, но не приводят к автоматическому назначению задачи внутри WorkCalendar.
Причины отсутствия и диагностические данные маскируются с учетом прав. Пользователь без права не видит скрытые персональные детали.
HealthCheck находит отсутствующие календарные ссылки, пустое расписание, некорректную timezone, конфликтующие исключения, пересечения availability, битые ссылки на пользователей/группы и устаревшие system definitions.
WorkCalendar можно использовать не только для Tasks, но и для WorkflowCalendar, WorkflowApproval, Queue schedules и будущих workflow-процессов без изменения ядра модуля.
Нужно подготовить TestA-сценарии для:
В Help должны быть подготовлены:
-
I1282817: добавлен первый кодовый срез общесистемного модуля правила, назначение задач, workflowWorkCalendar. PR вводит календарный runtime для расчета рабочего времени, доступности ресурсов и окон изменений; доменные SLAпереходы и фоновые пересчеты остаются в модуляхпотребителях.
Куда смотреть:
WorkCalendar, его __call API, system JSON definitions, Help и TestA. Эффект: Tasks, Queue, WorkflowCalendar, WorkflowApproval и другие потребители смогут ссылаться на общий рабочий календарь и получать объяснимые результаты расчета времени без собственной реализации календарной логики.?id=Help/Show&m=WorkCalendar/Root, ?id=Help/Show&m=WorkCalendar/Purpose и ?id=Help/Show&m=WorkCalendar/AdminGuide.modules/WorkCalendar/system/work_calendars.json.WorkCalendar.создана отdevelop; PR направлен вdevelop`.Изменения по файлам:
modules/WorkCalendar/api.php
WorkCalendar.Init задаются тип записи WORKCALENDAR, настройки администраторского списка и поисковые префиксы WCALKEY, WCALTITLE, WCALTIMEZONE.@method для публичных __call функций.OnBeforeSave нормализует запись календаря и обновляет индексные поля перед сохранением.modules/WorkCalendar/__call/*.inc
__call, а не в api.php.modules/WorkCalendar/system/work_calendars.json
DEFAULT~~5X2 и ALWAYS~~24X7.TASKS~~DEFAULT, QUEUE~~24X7.modules/WorkCalendar/Tests/Module.inc
GetCalendarByKey, чтение in-memory записи и обновление индексных полей.modules/WorkCalendar/Help/Root.md
modules/WorkCalendar/Help/Purpose.md
modules/WorkCalendar/Help/AdminGuide.md
modules/WorkCalendar/Formats/brief.pft128
[I128-2805] SLA, командные очереди и ранжирование задач
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2822] Реализовать календарные представления WorkflowCalendar для workflow-записей
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2839] Реализовать WorkflowApproval для формальных согласований workflow-переходов
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2793] Ввести TraceContext для сквозной трассировки операций
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2795] Расширить Queue как runtime фоновых заданий, retry и расписаний
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2797] Расширить Security для проектных прав, полей, действий и аудита доступа
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2798] Реализовать HealthCheck для workflow-проектов и задач
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2799] Подготовить TestA-контракты системных JSON и end-to-end сценариев
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2813] Расширить Users/Organisations для заявителей и resolver участников процессов
Статус: Завершено | Автор: Ilya Mikhaylenko
[I128-2818] Реализовать наблюдаемость Observability для промышленных модулей
Статус: Завершено | Автор: Ilya Mikhaylenko