Демо на синтетических данных / 2026-06-14
Рабочий стол WMS
Сводка системы, сервисов, рисков и быстрый переход к модулям.
Модули
Карта рабочего контура
Операционный core
Сервисы выполняют workflow, а не показывают заглушки
Snapshot repo_demo_operating_system_core / 2026-06-14. Сейчас источник synthetic, но решения считаются функциями service layer.
Карта сервисов
| ID | Сервис | Потребляет | Выдает |
|---|---|---|---|
| llm-agent | LLM агент | чаты, фото, листы, правила | черновики операций и задачи апрува |
| rule-engine | Движок правил | SKU, клиент, вес, срок, канал | разрешения, запреты, причины |
| event-log | Журнал фактов | действия людей и сервисов | факты для аудита и обучения |
| forecast | Прогноз спроса | историю, календарь, отказы, замены | спрос для закупок и WMS |
| purchase-optimizer | Оптимизатор закупок | прогноз, остатки, емкость, труд, цены | закупочные рекомендации |
| wms | WMS | сканы, приемку, заказы, факты | задачи склада и доступность |
| placement-optimizer | Размещение | популярность, срок, техника, проходы | задачи relayout |
| routing | Маршрутизация | заказы, адреса, вес | маршрут и load sequence |
| picking | Сборка | маршрут, резервы, правила веса | коробки, этикетки, факт веса |
| barcode-check | Barcode контроль | задание сборки и факт | блокировки и пересканы |
| accounting | Бухгалтерия/1C | фактический вес, цены, документы | документы или конфликт |
| pricing | Цены | сроки, спрос, маржа, сегмент | ценовые апрувы |
| human-approval | Апрувы | исключения и низкую уверенность | разрешение или override fact |
Инструкции LLM агента
| ID | Инструкция | Политика | Когда нужен человек |
|---|---|---|---|
| AGENT-001 | Все изменения только через tools | Агент не пишет состояние свободным текстом: он вызывает явный tool, получает контрактный результат и пишет event. | любое изменение заказа, склада, цены или 1C |
| AGENT-002 | Правила сильнее модели | Если rule-engine вернул hard-stop, LLM не может обойти его промптом или уверенностью. | замена охлаждения на заморозку, вес вне допуска, цена ниже маржи |
| AGENT-003 | Человеческий фактор сохраняется | Override разрешен, но только как факт с автором, причиной, временем и будущим training signal. | решение кладовщика против рекомендации, ручная правка бухгалтера |
| AGENT-004 | Низкая уверенность блокирует экспорт | OCR/LLM confidence ниже порога создает очередь проверки, а не меняет 1C или склад напрямую. | OCR < 85%, конфликт алиасов, сумма накладной не сходится |
| AGENT-005 | Склад и вес являются фактами | Фактический вес из сборки/весов и WMS-скан имеют приоритет над прогнозом и документом. | расхождение WMS/1C, перескан партии |
| AGENT-006 | Скидки не становятся привычкой | Цены меняются только рекомендацией с маржей, частотой скидок и сегментным guardrail. | expiry discount, overstock discount, VIP клиент |
Прогнозы
| SKU | base p50 | adj p50 | adj p90 | drivers |
|---|---|---|---|---|
| курица грудка премиум | 182 | 364 | 481 | сообщение клиента x2, пятница, сезон шашлыков |
| индейка бедро стандарт | 245 | 245 | 324 | история спроса, клиентский ритм, складские отказы |
| говядина крыло стандарт | 308 | 308 | 407 | история спроса, клиентский ритм, складские отказы |
| свинина голень премиум | 371 | 371 | 490 | история спроса, клиентский ритм, складские отказы |
| баранина фарш стандарт | 434 | 543 | 716 | история спроса, клиентский ритм, складские отказы |
| курица вырезка стандарт | 497 | 497 | 656 | история спроса, клиентский ритм, складские отказы |
| индейка лопатка премиум | 182 | 182 | 240 | история спроса, клиентский ритм, складские отказы |
| говядина ребро стандарт | 245 | 245 | 324 | история спроса, клиентский ритм, складские отказы |
Закупочные решения
| SKU | Решение | Купить | Доступно | Емкость | Причина |
|---|---|---|---|---|---|
| курица грудка премиум | hold | 0 | 281 | 36% | не закупать: есть 281 кг и 109 кг под FEFO/освобождение |
| индейка бедро стандарт | buy | 117 | 207 | 39% | дефицит против p90, но решение ограничено емкостью и трудом |
| говядина крыло стандарт | review | 189 | 218 | 40% | дефицит против p90, но решение ограничено емкостью и трудом |
| свинина голень премиум | review | 270 | 220 | 42% | дефицит против p90, но решение ограничено емкостью и трудом |
| баранина фарш стандарт | review | 452 | 264 | 46% | дефицит против p90, но решение ограничено емкостью и трудом |
| курица вырезка стандарт | review | 464 | 192 | 46% | дефицит против p90, но решение ограничено емкостью и трудом |
| индейка лопатка премиум | hold | 36 | 204 | 37% | остаток покрывает p90 с учетом риска списания |
| говядина ребро стандарт | buy | 115 | 209 | 39% | дефицит против p90, но решение ограничено емкостью и трудом |
Маршрут и обратная погрузка
| Точка | Погрузка | Клиент | Вес | Адрес |
|---|---|---|---|---|
| 1 | 16 | ресторан Северный двор | 18 кг | СПб, зона 1 |
| 2 | 15 | кафе Волга | 24 кг | СПб, зона 2 |
| 3 | 14 | магазин У Парка | 30 кг | СПб, зона 3 |
| 4 | 13 | производство Ладога | 36 кг | СПб, зона 4 |
| 5 | 12 | ресторан Парус | 42 кг | СПб, зона 5 |
| 6 | 11 | кафе Невский | 48 кг | СПб, зона 6 |
| 7 | 10 | магазин Фермерский | 54 кг | СПб, зона 7 |
| 8 | 9 | производство Балтика | 60 кг | СПб, зона 8 |
| 9 | 8 | ресторан Рыночный | 66 кг | СПб, зона 9 |
| 10 | 7 | кафе Купеческий | 18 кг | СПб, зона 10 |
| 11 | 6 | магазин Портовый | 24 кг | СПб, зона 11 |
| 12 | 5 | производство Сенной | 30 кг | СПб, зона 12 |
| 13 | 4 | ресторан Северный двор | 36 кг | СПб, зона 13 |
| 14 | 3 | кафе Волга | 42 кг | СПб, зона 14 |
| 15 | 2 | магазин У Парка | 48 кг | СПб, зона 15 |
| 16 | 1 | производство Ладога | 54 кг | СПб, зона 16 |
Barcode и вес
| Скан | Партия | SKU | Слот | Статус |
|---|---|---|---|---|
| SCAN-1 | BATCH-0001 | SKU-001 | SLOT-001 | блок: партия не в pick wave |
| SCAN-2 | BATCH-0002 | SKU-002 | SLOT-004 | принято |
| SCAN-3 | BATCH-0003 | SKU-003 | SLOT-007 | принято |
| SCAN-4 | BATCH-0004 | SKU-004 | SLOT-010 | принято |
| SCAN-5 | BATCH-0005 | SKU-005 | SLOT-013 | требует перескан |
| SCAN-6 | BATCH-0006 | SKU-006 | SLOT-016 | блок: партия не в pick wave |
| SCAN-7 | BATCH-0007 | SKU-007 | SLOT-019 | принято |
| SCAN-8 | BATCH-0008 | SKU-008 | SLOT-022 | принято |
| SCAN-9 | BATCH-0009 | SKU-009 | SLOT-025 | требует перескан |
| SCAN-10 | BATCH-0010 | SKU-010 | SLOT-028 | принято |
Клиентский сигнал и пересчет системы
зафиксировать сигнал, пересчитать спрос, проверить склад и не закупать лишнее при перегрузе
Шаги сервисов
| # | Сервис | Шаг | Выход | Статус |
|---|---|---|---|---|
| 1 | llm-agent | Извлечь сигнал | создан demand_signal для курица грудка премиум | ok |
| 2 | forecast | Пересчитать спрос | p90=481 кг | ok |
| 3 | wms | Проверить склад | охлаждение 36%, expiry 3168 кг | нужна проверка |
| 4 | purchase-optimizer | Решить закупку | hold: не закупать: есть 281 кг и 109 кг под FEFO/освобождение | нужна проверка |
Tool calls агента
| Tool | Сервис | Выход | Апрув |
|---|---|---|---|
| record_customer_signal | llm-agent | demand_signal: multiplier=2, confidence=0.86 | менеджер подтверждает месяц повышенного спроса |
| run_demand_forecast | forecast | adjusted p90=481 кг | не требуется |
| inspect_inventory_capacity | wms | available=281 кг, chilled=36% | склад подтверждает физическое место |
| build_purchase_plan | purchase-optimizer | hold: не закупать: есть 281 кг и 109 кг под FEFO/освобождение | закупщик подтверждает hold/review |
Решения
| Сервис | Решение | Итог | Причина | Статус |
|---|---|---|---|---|
| purchase-optimizer | Закупка под сигнал клиента | hold | не закупать: есть 281 кг и 109 кг под FEFO/освобождение | нужна проверка |
Задачи людям
| Кто | Задача | Приоритет | Объект | Статус |
|---|---|---|---|---|
| менеджер | подтвердить, что сигнал клиента является планом, а не пожеланием | high | demand_signal | нужна проверка |
| старший кладовщик | пересортировать FEFO-партии перед закупкой | high | SKU-001 | нужна проверка |
Приемка поставщика и накладная
заблокировать 1C до сверки; создать приход и placement задачи
Шаги сервисов
| # | Сервис | Шаг | Выход | Статус |
|---|---|---|---|---|
| 1 | llm-agent | Собрать вход | OCR ниже порога | нужна проверка |
| 2 | rule-engine | Проверить правила | заблокировать 1C до сверки | блок |
| 3 | event-log | Записать факт | событие сохранено для аудита и обучения | блок |
Tool calls агента
| Tool | Сервис | Выход | Апрув |
|---|---|---|---|
| record_customer_signal | llm-agent | OCR ниже порога; вес приемки расходится с документом | ответственный подтверждает исключение |
Решения
| Сервис | Решение | Итог | Причина | Статус |
|---|---|---|---|---|
| accounting | Приемка поставщика и накладная | blocked | заблокировать 1C до сверки; создать приход и placement задачи | блок |
Задачи людям
| Кто | Задача | Приоритет | Объект | Статус |
|---|---|---|---|---|
| оператор | заблокировать 1C до сверки | critical | supplier_receiving | блок |
| ответственный | создать приход и placement задачи | critical | supplier_receiving | блок |
Ежедневный план закупок
согласовать review позиции; не покупать hold позиции
Шаги сервисов
| # | Сервис | Шаг | Выход | Статус |
|---|---|---|---|---|
| 1 | llm-agent | Собрать вход | курица грудка премиум: hold 0 кг | ok |
| 2 | rule-engine | Проверить правила | согласовать review позиции | нужна проверка |
| 3 | event-log | Записать факт | событие сохранено для аудита и обучения | нужна проверка |
Tool calls агента
| Tool | Сервис | Выход | Апрув |
|---|---|---|---|
| record_customer_signal | llm-agent | курица грудка премиум: hold 0 кг; индейка бедро стандарт: buy 117 кг; говядина крыло стандарт: review 189 кг; свинина голень премиум: review 270 кг; баранина фарш стандарт: review 452 кг; курица вырезка стандарт: review 464 кг; индейка лопатка премиум: hold 36 кг; говядина ребро стандарт: buy 115 кг | ответственный подтверждает исключение |
Решения
| Сервис | Решение | Итог | Причина | Статус |
|---|---|---|---|---|
| rule-engine | Ежедневный план закупок | needs_review | согласовать review позиции; не покупать hold позиции | нужна проверка |
Задачи людям
| Кто | Задача | Приоритет | Объект | Статус |
|---|---|---|---|---|
| оператор | согласовать review позиции | high | daily_purchase_plan | нужна проверка |
| ответственный | не покупать hold позиции | high | daily_purchase_plan | нужна проверка |
Маршрут, сборка и погрузка
разбить маршрут при 15+ точках; печатать labels обратной погрузки
Шаги сервисов
| # | Сервис | Шаг | Выход | Статус |
|---|---|---|---|---|
| 1 | llm-agent | Собрать вход | точек=16 | ok |
| 2 | rule-engine | Проверить правила | разбить маршрут при 15+ точках | нужна проверка |
| 3 | event-log | Записать факт | событие сохранено для аудита и обучения | нужна проверка |
Tool calls агента
| Tool | Сервис | Выход | Апрув |
|---|---|---|---|
| record_customer_signal | llm-agent | точек=16; вес=630 кг; блокировок скана=4 | ответственный подтверждает исключение |
Решения
| Сервис | Решение | Итог | Причина | Статус |
|---|---|---|---|---|
| rule-engine | Маршрут, сборка и погрузка | needs_review | разбить маршрут при 15+ точках; печатать labels обратной погрузки | нужна проверка |
Задачи людям
| Кто | Задача | Приоритет | Объект | Статус |
|---|---|---|---|---|
| оператор | разбить маршрут при 15+ точках | high | route_dispatch | нужна проверка |
| ответственный | печатать labels обратной погрузки | high | route_dispatch | нужна проверка |
Сверка WMS, 1C и бумажных фактов
запретить экспорт спорных строк; создать recount
Шаги сервисов
| # | Сервис | Шаг | Выход | Статус |
|---|---|---|---|---|
| 1 | llm-agent | Собрать вход | SCAN-1 блок: партия не в pick wave | нужна проверка |
| 2 | rule-engine | Проверить правила | запретить экспорт спорных строк | блок |
| 3 | event-log | Записать факт | событие сохранено для аудита и обучения | блок |
Tool calls агента
| Tool | Сервис | Выход | Апрув |
|---|---|---|---|
| record_customer_signal | llm-agent | SCAN-1 блок: партия не в pick wave; SCAN-5 требует перескан; SCAN-6 блок: партия не в pick wave; SCAN-9 требует перескан | ответственный подтверждает исключение |
Решения
| Сервис | Решение | Итог | Причина | Статус |
|---|---|---|---|---|
| accounting | Сверка WMS, 1C и бумажных фактов | blocked | запретить экспорт спорных строк; создать recount | блок |
Задачи людям
| Кто | Задача | Приоритет | Объект | Статус |
|---|---|---|---|---|
| оператор | запретить экспорт спорных строк | critical | inventory_reconciliation | блок |
| ответственный | создать recount | critical | inventory_reconciliation | блок |
Сроки и guarded pricing
проверить маржу; не приучать клиентов к регулярной скидке
Шаги сервисов
| # | Сервис | Шаг | Выход | Статус |
|---|---|---|---|---|
| 1 | llm-agent | Собрать вход | expiry_watch=3168 кг | ok |
| 2 | rule-engine | Проверить правила | проверить маржу | нужна проверка |
| 3 | event-log | Записать факт | событие сохранено для аудита и обучения | нужна проверка |
Tool calls агента
| Tool | Сервис | Выход | Апрув |
|---|---|---|---|
| record_customer_signal | llm-agent | expiry_watch=3168 кг; скидка только на партию | ответственный подтверждает исключение |
Решения
| Сервис | Решение | Итог | Причина | Статус |
|---|---|---|---|---|
| rule-engine | Сроки и guarded pricing | needs_review | проверить маржу; не приучать клиентов к регулярной скидке | нужна проверка |
Задачи людям
| Кто | Задача | Приоритет | Объект | Статус |
|---|---|---|---|---|
| оператор | проверить маржу | high | expiry_pricing | нужна проверка |
| ответственный | не приучать клиентов к регулярной скидке | high | expiry_pricing | нужна проверка |
Дефицит и замены
менеджер выбирает замену; записать отказ как lost demand
Шаги сервисов
| # | Сервис | Шаг | Выход | Статус |
|---|---|---|---|---|
| 1 | llm-agent | Собрать вход | клиент R17 не принимает заморозку | ok |
| 2 | rule-engine | Проверить правила | менеджер выбирает замену | нужна проверка |
| 3 | event-log | Записать факт | событие сохранено для аудита и обучения | нужна проверка |
Tool calls агента
| Tool | Сервис | Выход | Апрув |
|---|---|---|---|
| record_customer_signal | llm-agent | клиент R17 не принимает заморозку; магазин может принять монолит по отдельной цене | ответственный подтверждает исключение |
Решения
| Сервис | Решение | Итог | Причина | Статус |
|---|---|---|---|---|
| rule-engine | Дефицит и замены | needs_review | менеджер выбирает замену; записать отказ как lost demand | нужна проверка |
Задачи людям
| Кто | Задача | Приоритет | Объект | Статус |
|---|---|---|---|---|
| оператор | менеджер выбирает замену | high | stockout_substitution | нужна проверка |
| ответственный | записать отказ как lost demand | high | stockout_substitution | нужна проверка |
Перестановка склада в тихое окно
освободить проходы; A SKU ближе к pick-face; оставить место под технику
Шаги сервисов
| # | Сервис | Шаг | Выход | Статус |
|---|---|---|---|---|
| 1 | llm-agent | Собрать вход | blocked_slots=23 | ok |
| 2 | rule-engine | Проверить правила | освободить проходы | нужна проверка |
| 3 | event-log | Записать факт | событие сохранено для аудита и обучения | нужна проверка |
Tool calls агента
| Tool | Сервис | Выход | Апрув |
|---|---|---|---|
| record_customer_signal | llm-agent | blocked_slots=23; overloaded=нет | ответственный подтверждает исключение |
Решения
| Сервис | Решение | Итог | Причина | Статус |
|---|---|---|---|---|
| rule-engine | Перестановка склада в тихое окно | needs_review | освободить проходы; A SKU ближе к pick-face; оставить место под технику | нужна проверка |
Задачи людям
| Кто | Задача | Приоритет | Объект | Статус |
|---|---|---|---|---|
| оператор | освободить проходы | high | warehouse_relayout | нужна проверка |
| ответственный | A SKU ближе к pick-face | high | warehouse_relayout | нужна проверка |
| ответственный | оставить место под технику | high | warehouse_relayout | нужна проверка |
Сервисы
Запускаемые прототипы на synthetic data
Прогноз спроса
Оптимизатор закупок
Маршрутизатор СПб
WMS сканирование и синхронизация
ИИ-агент документооборота
Операционные страницы
Операционные страницы
Данные и обмен
Данные и обмен
Реестры
Превью данных с переходом в полные таблицы
Реестр
Справочник SKU
Нормализованные карточки товаров вместо свободного текста.
| SKU | Название | Хранение | Вес | Срок | Правило |
|---|---|---|---|---|---|
| CHICKEN_BREAST_YELLOW_GOST_250 | Грудка куриная желтая упаковка ГОСТ 250+ | охлаждение | 8-14 кг | 7 дн. | UNIT_LABEL_SUM |
| CHICKEN_HOME_CHILLED | Курица домашняя охлажденная | охлаждение | 6-12 кг | 5 дн. | SCALE_WEIGHT |
| CHICKEN_MONOLITH_FROZEN | Курица монолит замороженная | заморозка | 18-22 кг | 120 дн. | BOX_DECLARED_WEIGHT |
| BEEF_TENDERLOIN_CHILLED | Вырезка говяжья охлажденная | охлаждение | 2-6 кг | 10 дн. | SCALE_WEIGHT |
Реестр
Клиенты
Клиентские ограничения, сегменты и коммерческие признаки.
| ID | Клиент | Сегмент | Зона | Замены | Заморозка |
|---|---|---|---|---|---|
| CLIENT-R17 | Ресторан Северный двор | ресторан | центр | нельзя | не принимает |
| CLIENT-CAFE-08 | Кафе Волга | кафе | север | можно | не принимает |
| CLIENT-SHOP-22 | Магазин у парка | магазин | восток | можно | принимает |
Реестр
Правила клиентов
Версионируемые правила, которые не должны жить в памяти менеджеров.
| Правило | Клиент | Тип | Условие | Действие | Апрув |
|---|---|---|---|---|---|
| RULE-R17-CHICKEN | Ресторан Северный двор | распознавание SKU | сырой текст содержит 'курица' | распознать как CHICKEN_HOME_CHILLED | не нужен |
| RULE-R17-NO-FROZEN | Ресторан Северный двор | замены | запрошено охлаждение | запретить замену на заморозку | нужен |
| RULE-CAFE-08-TOLERANCE | Кафе Волга | допуск веса | строка заказа с охлаждением | разрешить отклонение веса до 0.5 kg | не нужен |
| RULE-SHOP-22-FROZEN | Магазин у парка | замены | охлажденной курицы нет | разрешить CHICKEN_MONOLITH_FROZEN с отдельной ценой | нужен |
Реестр
Партии и остатки
Партии, сроки, резервы и доступный вес.
| Партия | SKU | Слот | Доступно | Резерв | Срок |
|---|---|---|---|---|---|
| BATCH-10291 | Грудка куриная желтая упаковка ГОСТ 250+ | CH-R1-L1-P01 | 50 кг | 42 кг | 2 дн. |
| BATCH-10294 | Грудка куриная желтая упаковка ГОСТ 250+ | CH-R3-L2-P05 | 185 кг | 0 кг | 6 дн. |
| BATCH-7780 | Курица монолит замороженная | FZ-R2-L3-P04 | 180 кг | 60 кг | 106 дн. |
| BATCH-5531 | Вырезка говяжья охлажденная | CH-R1-L1-P01 | 27 кг | 11 кг | 7 дн. |
Реестр
Слоты склада
Ячейки, зоны, доступность техники и запрет хранения.
| Слот | Склад | Зона | Назначение | Занято | Ограничение |
|---|---|---|---|---|---|
| CH-R1-L1-P01 | WH-CHILLED-1 | охлаждение | быстрый отбор | 250/420 кг | доступно |
| CH-R3-L2-P05 | WH-CHILLED-1 | охлаждение | хранение | 120/360 кг | нужен штабелер |
| FZ-R2-L3-P04 | WH-FROZEN-1 | заморозка | объемное хранение | 240/600 кг | нужен штабелер |
| AISLE-TURN-01 | WH-CHILLED-1 | охлаждение | разворот техники | 0/0 кг | хранить нельзя |
Реестр
Заказы
Сырой запрос, распознанный SKU и фактическая сборка.
| Заказ | Клиент | Канал | Статус | Строка | Факт |
|---|---|---|---|---|---|
| ORDER-9001 | Ресторан Северный двор | сборка | грудка 250+ 42 кг | 42.4 кг | |
| ORDER-9002 | Магазин у парка | Telegram | распознан | монолит кур 60 кг | еще не собрано |
Реестр
Журнал событий
Факты системы для аудита, обучения и разбора расхождений.
| Время | Событие | Объект | Кто | Описание |
|---|---|---|---|---|
| 2026-06-13T08:21:00+03:00 | заказ создан | ORDER-9001 | агент приема | Создан заказ из сообщения WhatsApp для клиента Ресторан Северный двор. |
| 2026-06-13T08:21:04+03:00 | строка распознана | ORDER-9001-L1 | движок правил | Строка 'грудка 250+' распознана как CHICKEN_BREAST_YELLOW_GOST_250. |
| 2026-06-13T08:21:08+03:00 | партия зарезервирована | BATCH-10291 | сервис остатков | Зарезервировано 42 кг из ближайшей по сроку охлажденной партии грудки. |
| 2026-06-13T09:40:00+03:00 | строка собрана | PICK-9001-L1 | кладовщик Сергей | Собрано 42.4 кг после вскрытия коробов и суммирования этикеток. |
| 2026-06-13T10:00:00+03:00 | рекомендация закупки | PURCHASE-REC-001 | сервис оптимизации | Сформирована рекомендация купить 180 кг охлажденной грудки под спрос понедельника. |
| 2026-06-13T10:05:00+03:00 | проверка агента | AGENT-TASK-002 | сервис агента | Создана ручная проверка фото накладной и черновика экспорта в 1C. |