Appearance
Расписания
Расписание — план запуска партий и операций на конкретных рабочих местах в конкретное время. Основа для Gantt-диаграммы.
Как открыть
Боковое меню → Планирование → Расписания
Зачем нужны расписания
Без расписания производство работает хаотично: мастера сами решают, какую партию запускать, операторы простаивают, узкие места блокируют поток. Расписание даёт:
- точный план: какая партия, какая операция, на каком РМ, в какое время;
- контроль загрузки мощностей (bottleneck detection);
- базу для Gantt-диаграммы (см. Gantt);
- метрики отклонений — план vs факт.
Жизненный цикл расписания
┌─────────┐ утверждение ┌──────────┐ запуск ┌──────────┐ все запущены ┌───────────┐
│ draft │ ──────────────→ │ approved │ ──────────→ │ active │ ─────────────→ │ completed │
│ Черновик │ │Утверждено│ │ Активно │ │ Завершено │
└─────────┘ └──────────┘ └──────────┘ └───────────┘
│ │ │
└─→ cancelled └─→ cancelled └─→ cancelled| Статус | Код | Описание |
|---|---|---|
| Черновик | draft | Диспетчер работает над планом, можно редактировать |
| Утверждено | approved | Руководство утвердило, готово к запуску. После утверждения изменения запрещены |
| Активно | active | Заказы запускаются по расписанию |
| Завершено | completed | Все заказы из расписания запущены |
| Отменено | cancelled | Расписание отменено (создаётся новая версия) |
После утверждения
Утверждённое расписание нельзя редактировать. Если нужны изменения — создаётся новая версия расписания. Это обеспечивает аудиторский след: всегда видно, что было запланировано изначально.
Типы расписаний
| Тип | Код | Горизонт | Когда применяется |
|---|---|---|---|
| Дневное | daily | 1 день | Оперативное планирование, уточнение смены |
| Недельное | weekly | 6-8 дней | Самый частый вариант — распределение заказов на неделю |
| Месячное | monthly | 27-32 дня | Стратегическое планирование |
| Сменное | shift | 1 смена | Детальный план на конкретную смену |
| Произвольное | custom | Любой | Нестандартные периоды |
Режимы гибкости (Industry 4.0)
Ключевая особенность AntRoute — настраиваемая гибкость планирования:
| Режим | Код | Описание |
|---|---|---|
| Жёсткое | rigid | Классический MRP: расписание не меняется после утверждения |
| Адаптивное | adaptive | Rolling Wave: ближайшая неделя жёсткая, дальше — корректировки разрешены |
| Динамическое | dynamic | Kanban-style: расписание пересчитывается ежедневно |
| Безграничная гибкость | unbounded_flexible | Industry 4.0: real-time перепланирование при любом событии |
Автоматическое перепланирование
При режимах dynamic и unbounded_flexible можно включить real_time_replan_enabled. Тогда расписание пересчитывается автоматически при событиях: переполнение буфера, поломка станка, задержка партии. При rigid и adaptive эта опция недоступна.
Что на экране
Таблица расписаний
| Столбец | Описание | Пример |
|---|---|---|
| Код | Уникальный код расписания | SCH-2026-W11 |
| Название | Человекочитаемое имя | Неделя 2026-W11 |
| Тип | Дневное / Недельное / Месячное / Сменное | Недельное |
| Период | Даты начала — конца | 09.03 — 15.03.2026 |
| Статус | Черновик / Утверждено / Активно / Завершено | Активно |
| Режим | Жёсткое / Адаптивное / Динамическое / Безграничное | Адаптивное |
| Записей | Сколько записей в расписании | 45 |
| Перепланирований | Счётчик корректировок | 3 |
| Оценка гибкости | 0-100 баллов | 72.5 |
Метрики расписания
| Показатель | Описание |
|---|---|
| flexibility_score | Оценка гибкости 0-100: < 30 = низкая, 31-60 = средняя, 61-85 = высокая, 86-100 = Industry 4.0 |
| replan_count | Сколько раз расписание пересчитывалось (высокое значение = нестабильная ситуация) |
| averageLoad | Средняя загрузка рабочих мест (из planning_results) |
| bottlenecks | Список РМ с загрузкой > 90% |
Записи расписания (ScheduleEntry)
Каждая запись — это конкретное назначение:
| Поле | Описание |
|---|---|
| Расписание | FK на ProductionSchedule |
| Партия | FK на Batch — какая партия |
| Операция | FK на Operation — какая операция |
| Рабочее место | UUID Workplace — где выполняется |
| Плановое начало | Дата и время начала |
| Плановое окончание | Дата и время окончания |
| Фактическое начало | Заполняется при старте |
| Фактическое окончание | Заполняется при завершении |
| Расчётная длительность | Минуты |
| Статус | planned / in_progress / completed / delayed / cancelled |
Статусы записи
| Статус | Код | Описание |
|---|---|---|
| Запланировано | planned | Ожидает начала |
| Выполняется | in_progress | Операция идёт |
| Завершено | completed | Операция выполнена (требует actual_start и actual_end) |
| Задержка | delayed | Отклонение от плана |
| Отменено | cancelled | Запись отменена |
Параметры планирования
Расписание хранит параметры алгоритма оптимизации в planning_params:
json
{
"maxOrdersPerDay": 10,
"priorityRules": ["urgent_first", "customer_priority", "completion_date"],
"workingDays": ["MON", "TUE", "WED", "THU", "FRI"],
"shiftPattern": "two_shifts",
"allowOvertime": false,
"bufferPercent": 10
}И результаты автоматического планирования в planning_results:
json
{
"totalOrders": 45,
"totalBatches": 280,
"averageLoad": 85,
"bottlenecks": [
{"workplaceId": "wp_01", "load": 98},
{"workplaceId": "wp_05", "load": 95}
],
"unscheduledOrders": 3,
"warnings": ["Capacity exceeded on 2026-03-15"]
}Правила валидации
| Правило | Описание |
|---|---|
| BR-501 | schedule_code уникален; тип определяет допустимый период (daily <= 1д, weekly 6-8д, monthly 27-32д) |
| BR-502 | period_end >= period_start |
| BR-505 | approved_at и approved_by обязательны при статусе != draft |
| BR-506 | real_time_replan_enabled допустим только при dynamic / unbounded_flexible |
| BR-508 | flexibility_score в диапазоне 0-100 |
| BR-242 | Запись: planned_end >= planned_start |
Для кого
| Роль | Что делает |
|---|---|
| Диспетчер | Создаёт и редактирует расписания, утверждает, запускает |
| Мастер | Видит расписание своего участка, контролирует выполнение |
| Оператор | Видит свои назначения: какая партия, какая операция, когда |
| Технолог | Анализирует узкие места, корректирует нормативы |