Демо на синтетических данных / 2026-06-14
Операционный core
Вычисляемые workflow: агент, правила, прогноз, закупки, WMS, маршруты, цены, 1C и апрувы.
Операционный 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 | нужна проверка |