{"schema_version":1,"generated_from":"repo_demo_operating_system_core","asOfDate":"2026-06-14","instructions":[{"id":"AGENT-001","title":"Все изменения только через tools","policy":"Агент не пишет состояние свободным текстом: он вызывает явный tool, получает контрактный результат и пишет event.","appliesTo":["client_signal_intake","supplier_receiving","daily_purchase_plan","route_dispatch","inventory_reconciliation","expiry_pricing","stockout_substitution","warehouse_relayout"],"allowedTools":["record_customer_signal","resolve_product_alias","inspect_inventory_capacity","run_demand_forecast","build_purchase_plan","create_relayout_tasks","build_route_pick_wave","verify_barcode_weight","prepare_1c_export","recommend_guarded_price"],"requiresHumanApprovalWhen":["любое изменение заказа, склада, цены или 1C"]},{"id":"AGENT-002","title":"Правила сильнее модели","policy":"Если rule-engine вернул hard-stop, LLM не может обойти его промптом или уверенностью.","appliesTo":["client_signal_intake","supplier_receiving","daily_purchase_plan","route_dispatch","inventory_reconciliation","expiry_pricing","stockout_substitution","warehouse_relayout"],"allowedTools":["resolve_product_alias","inspect_inventory_capacity","verify_barcode_weight"],"requiresHumanApprovalWhen":["замена охлаждения на заморозку, вес вне допуска, цена ниже маржи"]},{"id":"AGENT-003","title":"Человеческий фактор сохраняется","policy":"Override разрешен, но только как факт с автором, причиной, временем и будущим training signal.","appliesTo":["client_signal_intake","supplier_receiving","daily_purchase_plan","route_dispatch","inventory_reconciliation","expiry_pricing","stockout_substitution","warehouse_relayout"],"allowedTools":["create_relayout_tasks","build_purchase_plan","prepare_1c_export"],"requiresHumanApprovalWhen":["решение кладовщика против рекомендации, ручная правка бухгалтера"]},{"id":"AGENT-004","title":"Низкая уверенность блокирует экспорт","policy":"OCR/LLM confidence ниже порога создает очередь проверки, а не меняет 1C или склад напрямую.","appliesTo":["client_signal_intake","supplier_receiving","daily_purchase_plan","route_dispatch","inventory_reconciliation","expiry_pricing","stockout_substitution","warehouse_relayout"],"allowedTools":["record_customer_signal","prepare_1c_export"],"requiresHumanApprovalWhen":["OCR < 85%, конфликт алиасов, сумма накладной не сходится"]},{"id":"AGENT-005","title":"Склад и вес являются фактами","policy":"Фактический вес из сборки/весов и WMS-скан имеют приоритет над прогнозом и документом.","appliesTo":["client_signal_intake","supplier_receiving","daily_purchase_plan","route_dispatch","inventory_reconciliation","expiry_pricing","stockout_substitution","warehouse_relayout"],"allowedTools":["verify_barcode_weight","inspect_inventory_capacity"],"requiresHumanApprovalWhen":["расхождение WMS/1C, перескан партии"]},{"id":"AGENT-006","title":"Скидки не становятся привычкой","policy":"Цены меняются только рекомендацией с маржей, частотой скидок и сегментным guardrail.","appliesTo":["client_signal_intake","supplier_receiving","daily_purchase_plan","route_dispatch","inventory_reconciliation","expiry_pricing","stockout_substitution","warehouse_relayout"],"allowedTools":["recommend_guarded_price"],"requiresHumanApprovalWhen":["expiry discount, overstock discount, VIP клиент"]}],"tools":[{"id":"record_customer_signal","serviceId":"llm-agent","title":"Записать сигнал клиента","inputContract":"client, channel, raw_message, confidence","outputContract":"demand_signal event + review policy","approvalBoundary":"низкая уверенность или VIP клиент"},{"id":"resolve_product_alias","serviceId":"rule-engine","title":"Распознать товар","inputContract":"raw_text, client_id, manager_id","outputContract":"sku_id + rule evidence","approvalBoundary":"конфликт алиасов"},{"id":"inspect_inventory_capacity","serviceId":"wms","title":"Проверить склад","inputContract":"sku_id, horizon, required_kg","outputContract":"availability, expiry, capacity","approvalBoundary":"перегруз зоны или неизвестный срок"},{"id":"run_demand_forecast","serviceId":"forecast","title":"Пересчитать спрос","inputContract":"facts, signals, calendar","outputContract":"p10/p50/p90","approvalBoundary":"качество ниже baseline"},{"id":"build_purchase_plan","serviceId":"purchase-optimizer","title":"Собрать закупки","inputContract":"forecast, inventory, suppliers, labor","outputContract":"buy/hold/review decisions","approvalBoundary":"перегруз, новый поставщик, бюджет"},{"id":"create_relayout_tasks","serviceId":"placement-optimizer","title":"Создать перестановки","inputContract":"slot_map, batches, demand","outputContract":"move/split/pick-face tasks","approvalBoundary":"блокировка проходов или техники"},{"id":"build_route_pick_wave","serviceId":"routing","title":"Маршрут и сборка","inputContract":"orders, addresses, vehicle, windows","outputContract":"route, labels, pick wave","approvalBoundary":"15+ точек или холодовая цепь"},{"id":"verify_barcode_weight","serviceId":"barcode-check","title":"Сверить сканы и вес","inputContract":"expected_pick, scan, scale","outputContract":"ok/block/recount","approvalBoundary":"несовпадение партии или веса"},{"id":"prepare_1c_export","serviceId":"accounting","title":"Подготовить 1C","inputContract":"actual weights, prices, documents","outputContract":"export draft or conflict","approvalBoundary":"расхождение WMS/1C"},{"id":"recommend_guarded_price","serviceId":"pricing","title":"Рекомендовать цену","inputContract":"batch, expiry, margin, segment","outputContract":"price recommendation","approvalBoundary":"маржа ниже пола или частые скидки"}],"serviceMap":[{"id":"llm-agent","title":"LLM агент","owns":"сообщения, документы, tool calls","consumes":"чаты, фото, листы, правила","emits":"черновики операций и задачи апрува"},{"id":"rule-engine","title":"Движок правил","owns":"hard-stop и approval правила","consumes":"SKU, клиент, вес, срок, канал","emits":"разрешения, запреты, причины"},{"id":"event-log","title":"Журнал фактов","owns":"неизменяемую историю","consumes":"действия людей и сервисов","emits":"факты для аудита и обучения"},{"id":"forecast","title":"Прогноз спроса","owns":"p10/p50/p90 и сигналы клиентов","consumes":"историю, календарь, отказы, замены","emits":"спрос для закупок и WMS"},{"id":"purchase-optimizer","title":"Оптимизатор закупок","owns":"решение buy/hold/review","consumes":"прогноз, остатки, емкость, труд, цены","emits":"закупочные рекомендации"},{"id":"wms","title":"WMS","owns":"партии, слоты, резервы, поиск","consumes":"сканы, приемку, заказы, факты","emits":"задачи склада и доступность"},{"id":"placement-optimizer","title":"Размещение","owns":"слоты и перестановки","consumes":"популярность, срок, техника, проходы","emits":"задачи relayout"},{"id":"routing","title":"Маршрутизация","owns":"точки, окна, обратную погрузку","consumes":"заказы, адреса, вес","emits":"маршрут и load sequence"},{"id":"picking","title":"Сборка","owns":"pick wave и весовые задания","consumes":"маршрут, резервы, правила веса","emits":"коробки, этикетки, факт веса"},{"id":"barcode-check","title":"Barcode контроль","owns":"сканы SKU/партии/слота","consumes":"задание сборки и факт","emits":"блокировки и пересканы"},{"id":"accounting","title":"Бухгалтерия/1C","owns":"экспорт и сверку","consumes":"фактический вес, цены, документы","emits":"документы или конфликт"},{"id":"pricing","title":"Цены","owns":"guarded рекомендации","consumes":"сроки, спрос, маржа, сегмент","emits":"ценовые апрувы"},{"id":"human-approval","title":"Апрувы","owns":"границы решений людей","consumes":"исключения и низкую уверенность","emits":"разрешение или override fact"}],"dashboard":{"workflowCount":8,"completedWorkflows":0,"reviewWorkflows":6,"blockedWorkflows":2,"serviceCount":13,"taskCount":17,"criticalTaskCount":4,"approvalCount":17},"warehouseState":{"totalAvailableKg":16579.2,"reservedKg":2938.7999999999993,"expiryWatchKg":3168,"chilledCapacityPct":36,"frozenCapacityPct":45,"blockedSlotCount":23,"overloadedZones":[]},"forecasts":[{"skuId":"SKU-001","skuName":"курица грудка премиум","baselineP50Kg":182,"adjustedP50Kg":364,"adjustedP90Kg":481,"drivers":["сообщение клиента x2","пятница","сезон шашлыков"]},{"skuId":"SKU-002","skuName":"индейка бедро стандарт","baselineP50Kg":245,"adjustedP50Kg":245,"adjustedP90Kg":324,"drivers":["история спроса","клиентский ритм","складские отказы"]},{"skuId":"SKU-003","skuName":"говядина крыло стандарт","baselineP50Kg":308,"adjustedP50Kg":308,"adjustedP90Kg":407,"drivers":["история спроса","клиентский ритм","складские отказы"]},{"skuId":"SKU-004","skuName":"свинина голень премиум","baselineP50Kg":371,"adjustedP50Kg":371,"adjustedP90Kg":490,"drivers":["история спроса","клиентский ритм","складские отказы"]},{"skuId":"SKU-005","skuName":"баранина фарш стандарт","baselineP50Kg":434,"adjustedP50Kg":543,"adjustedP90Kg":716,"drivers":["история спроса","клиентский ритм","складские отказы"]},{"skuId":"SKU-006","skuName":"курица вырезка стандарт","baselineP50Kg":497,"adjustedP50Kg":497,"adjustedP90Kg":656,"drivers":["история спроса","клиентский ритм","складские отказы"]},{"skuId":"SKU-007","skuName":"индейка лопатка премиум","baselineP50Kg":182,"adjustedP50Kg":182,"adjustedP90Kg":240,"drivers":["история спроса","клиентский ритм","складские отказы"]},{"skuId":"SKU-008","skuName":"говядина ребро стандарт","baselineP50Kg":245,"adjustedP50Kg":245,"adjustedP90Kg":324,"drivers":["история спроса","клиентский ритм","складские отказы"]},{"skuId":"SKU-009","skuName":"свинина печень стандарт","baselineP50Kg":308,"adjustedP50Kg":385,"adjustedP90Kg":508,"drivers":["история спроса","клиентский ритм","складские отказы"]},{"skuId":"SKU-010","skuName":"баранина язык премиум","baselineP50Kg":371,"adjustedP50Kg":371,"adjustedP90Kg":490,"drivers":["история спроса","клиентский ритм","складские отказы"]},{"skuId":"SKU-011","skuName":"курица окорок стандарт","baselineP50Kg":434,"adjustedP50Kg":434,"adjustedP90Kg":573,"drivers":["история спроса","клиентский ритм","складские отказы"]},{"skuId":"SKU-012","skuName":"индейка шея стандарт","baselineP50Kg":497,"adjustedP50Kg":497,"adjustedP90Kg":656,"drivers":["история спроса","клиентский ритм","складские отказы"]}],"purchasePlan":[{"skuId":"SKU-001","skuName":"курица грудка премиум","decision":"hold","recommendedKg":0,"availableKg":281,"expectedP90Kg":481,"capacityAfterPct":36,"reason":"не закупать: есть 281 кг и 109 кг под FEFO/освобождение"},{"skuId":"SKU-002","skuName":"индейка бедро стандарт","decision":"buy","recommendedKg":117,"availableKg":207,"expectedP90Kg":324,"capacityAfterPct":39,"reason":"дефицит против p90, но решение ограничено емкостью и трудом"},{"skuId":"SKU-003","skuName":"говядина крыло стандарт","decision":"review","recommendedKg":189,"availableKg":218,"expectedP90Kg":407,"capacityAfterPct":40,"reason":"дефицит против p90, но решение ограничено емкостью и трудом"},{"skuId":"SKU-004","skuName":"свинина голень премиум","decision":"review","recommendedKg":270,"availableKg":220,"expectedP90Kg":490,"capacityAfterPct":42,"reason":"дефицит против p90, но решение ограничено емкостью и трудом"},{"skuId":"SKU-005","skuName":"баранина фарш стандарт","decision":"review","recommendedKg":452,"availableKg":264,"expectedP90Kg":716,"capacityAfterPct":46,"reason":"дефицит против p90, но решение ограничено емкостью и трудом"},{"skuId":"SKU-006","skuName":"курица вырезка стандарт","decision":"review","recommendedKg":464,"availableKg":192,"expectedP90Kg":656,"capacityAfterPct":46,"reason":"дефицит против p90, но решение ограничено емкостью и трудом"},{"skuId":"SKU-007","skuName":"индейка лопатка премиум","decision":"hold","recommendedKg":36,"availableKg":204,"expectedP90Kg":240,"capacityAfterPct":37,"reason":"остаток покрывает p90 с учетом риска списания"},{"skuId":"SKU-008","skuName":"говядина ребро стандарт","decision":"buy","recommendedKg":115,"availableKg":209,"expectedP90Kg":324,"capacityAfterPct":39,"reason":"дефицит против p90, но решение ограничено емкостью и трудом"}],"routePlan":{"routeId":"ROUTE-DEMO-CORE","stopCount":16,"totalWeightKg":630,"splitRequired":true,"loadRows":[["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"]],"pickRows":[["PICK-ORDER-0001","ресторан Северный двор","место 16","18 кг","ожидает скан"],["PICK-ORDER-0002","кафе Волга","место 15","24 кг","ожидает скан"],["PICK-ORDER-0003","магазин У Парка","место 14","30 кг","ожидает скан"],["PICK-ORDER-0004","производство Ладога","место 13","36 кг","ожидает скан"],["PICK-ORDER-0005","ресторан Парус","место 12","42 кг","ожидает скан"],["PICK-ORDER-0006","кафе Невский","место 11","48 кг","ожидает скан"],["PICK-ORDER-0007","магазин Фермерский","место 10","54 кг","ожидает скан"],["PICK-ORDER-0008","производство Балтика","место 9","60 кг","ожидает скан"],["PICK-ORDER-0009","ресторан Рыночный","место 8","66 кг","ожидает скан"],["PICK-ORDER-0010","кафе Купеческий","место 7","18 кг","ожидает скан"]]},"barcodeChecks":{"checkedRows":[["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","принято"]],"blockedRows":[["SCAN-1","BATCH-0001","SKU-001","SLOT-001","блок: партия не в pick wave"],["SCAN-5","BATCH-0005","SKU-005","SLOT-013","требует перескан"],["SCAN-6","BATCH-0006","SKU-006","SLOT-016","блок: партия не в pick wave"],["SCAN-9","BATCH-0009","SKU-009","SLOT-025","требует перескан"]]},"workflows":[{"id":"client_signal_intake","title":"Клиентский сигнал и пересчет системы","trigger":"клиент сообщил, что в этом месяце возьмет примерно x2","objective":"зафиксировать сигнал, пересчитать спрос, проверить склад и не закупать лишнее при перегрузе","status":"needs_review","steps":[{"order":1,"serviceId":"llm-agent","title":"Извлечь сигнал","input":"сообщение клиента","output":"создан demand_signal для курица грудка премиум","rules":["AGENT-001","AGENT-004"],"humanFactors":["менеджер подтверждает необычный спрос"],"status":"completed"},{"order":2,"serviceId":"forecast","title":"Пересчитать спрос","input":"history + demand_signal","output":"p90=481 кг","rules":["p10/p50/p90 обязательны"],"humanFactors":["крупный клиент не равен гарантированному заказу"],"status":"completed"},{"order":3,"serviceId":"wms","title":"Проверить склад","input":"p90 + партии + слоты","output":"охлаждение 36%, expiry 3168 кг","rules":["FEFO","емкость зоны"],"humanFactors":["кладовщики могут переставить батчи вручную"],"status":"needs_review"},{"order":4,"serviceId":"purchase-optimizer","title":"Решить закупку","input":"forecast + WMS + труд","output":"hold: не закупать: есть 281 кг и 109 кг под FEFO/освобождение","rules":["не закупать при перегрузе и сроках"],"humanFactors":["закупщик может override с причиной"],"status":"needs_review"}],"toolCalls":[{"toolId":"record_customer_signal","serviceId":"llm-agent","input":"raw_message + client_id","output":"demand_signal: multiplier=2, confidence=0.86","status":"needs_review","humanReview":"менеджер подтверждает месяц повышенного спроса"},{"toolId":"run_demand_forecast","serviceId":"forecast","input":"signal + history","output":"adjusted p90=481 кг","status":"completed","humanReview":null},{"toolId":"inspect_inventory_capacity","serviceId":"wms","input":"SKU-001","output":"available=281 кг, chilled=36%","status":"needs_review","humanReview":"склад подтверждает физическое место"},{"toolId":"build_purchase_plan","serviceId":"purchase-optimizer","input":"SKU-001","output":"hold: не закупать: есть 281 кг и 109 кг под FEFO/освобождение","status":"needs_review","humanReview":"закупщик подтверждает hold/review"}],"decisions":[{"id":"DEC-CLIENT-001","serviceId":"purchase-optimizer","title":"Закупка под сигнал клиента","decision":"hold","reason":"не закупать: есть 281 кг и 109 кг под FEFO/освобождение","status":"needs_review","humanOverrideMode":"человек может изменить, причина пишется в event-log"}],"tasks":[{"id":"TASK-CLIENT-001","owner":"менеджер","title":"подтвердить, что сигнал клиента является планом, а не пожеланием","priority":"high","due":"сегодня","sourceServiceId":"human-approval","linkedEntity":"demand_signal","status":"needs_review"},{"id":"TASK-CLIENT-002","owner":"старший кладовщик","title":"пересортировать FEFO-партии перед закупкой","priority":"high","due":"сегодня","sourceServiceId":"placement-optimizer","linkedEntity":"SKU-001","status":"needs_review"}],"generatedEvents":["DEMAND_SIGNAL_RECORDED","FORECAST_RECALCULATED","PURCHASE_HOLD_RECOMMENDED","WMS_RELAYOUT_REQUESTED"]},{"id":"supplier_receiving","title":"Приемка поставщика и накладная","trigger":"фото накладной + разгрузка","objective":"заблокировать 1C до сверки; создать приход и placement задачи","status":"blocked","steps":[{"order":1,"serviceId":"llm-agent","title":"Собрать вход","input":"фото накладной + разгрузка","output":"OCR ниже порога","rules":["AGENT-001"],"humanFactors":["источник и автор сохраняются"],"status":"needs_review"},{"order":2,"serviceId":"rule-engine","title":"Проверить правила","input":"OCR ниже порога; вес приемки расходится с документом","output":"заблокировать 1C до сверки","rules":["hard-stop before model"],"humanFactors":["override только с причиной"],"status":"blocked"},{"order":3,"serviceId":"event-log","title":"Записать факт","input":"заблокировать 1C до сверки; создать приход и placement задачи","output":"событие сохранено для аудита и обучения","rules":["event-first"],"humanFactors":["человек видит причину решения"],"status":"blocked"}],"toolCalls":[{"toolId":"record_customer_signal","serviceId":"llm-agent","input":"фото накладной + разгрузка","output":"OCR ниже порога; вес приемки расходится с документом","status":"blocked","humanReview":"ответственный подтверждает исключение"}],"decisions":[{"id":"DEC-supplier_receiving","serviceId":"accounting","title":"Приемка поставщика и накладная","decision":"blocked","reason":"заблокировать 1C до сверки; создать приход и placement задачи","status":"blocked","humanOverrideMode":"человек может изменить, причина пишется в event-log"}],"tasks":[{"id":"TASK-supplier_receiving-1","owner":"оператор","title":"заблокировать 1C до сверки","priority":"critical","due":"сегодня","sourceServiceId":"human-approval","linkedEntity":"supplier_receiving","status":"blocked"},{"id":"TASK-supplier_receiving-2","owner":"ответственный","title":"создать приход и placement задачи","priority":"critical","due":"сегодня","sourceServiceId":"human-approval","linkedEntity":"supplier_receiving","status":"blocked"}],"generatedEvents":["SUPPLIER_RECEIVING_EVALUATED"]},{"id":"daily_purchase_plan","title":"Ежедневный план закупок","trigger":"06:25 после прогноза","objective":"согласовать review позиции; не покупать hold позиции","status":"needs_review","steps":[{"order":1,"serviceId":"llm-agent","title":"Собрать вход","input":"06:25 после прогноза","output":"курица грудка премиум: hold 0 кг","rules":["AGENT-001"],"humanFactors":["источник и автор сохраняются"],"status":"completed"},{"order":2,"serviceId":"rule-engine","title":"Проверить правила","input":"курица грудка премиум: hold 0 кг; индейка бедро стандарт: buy 117 кг; говядина крыло стандарт: review 189 кг; свинина голень премиум: review 270 кг; баранина фарш стандарт: review 452 кг; курица вырезка стандарт: review 464 кг; индейка лопатка премиум: hold 36 кг; говядина ребро стандарт: buy 115 кг","output":"согласовать review позиции","rules":["hard-stop before model"],"humanFactors":["override только с причиной"],"status":"needs_review"},{"order":3,"serviceId":"event-log","title":"Записать факт","input":"согласовать review позиции; не покупать hold позиции","output":"событие сохранено для аудита и обучения","rules":["event-first"],"humanFactors":["человек видит причину решения"],"status":"needs_review"}],"toolCalls":[{"toolId":"record_customer_signal","serviceId":"llm-agent","input":"06:25 после прогноза","output":"курица грудка премиум: hold 0 кг; индейка бедро стандарт: buy 117 кг; говядина крыло стандарт: review 189 кг; свинина голень премиум: review 270 кг; баранина фарш стандарт: review 452 кг; курица вырезка стандарт: review 464 кг; индейка лопатка премиум: hold 36 кг; говядина ребро стандарт: buy 115 кг","status":"needs_review","humanReview":"ответственный подтверждает исключение"}],"decisions":[{"id":"DEC-daily_purchase_plan","serviceId":"rule-engine","title":"Ежедневный план закупок","decision":"needs_review","reason":"согласовать review позиции; не покупать hold позиции","status":"needs_review","humanOverrideMode":"человек может изменить, причина пишется в event-log"}],"tasks":[{"id":"TASK-daily_purchase_plan-1","owner":"оператор","title":"согласовать review позиции","priority":"high","due":"сегодня","sourceServiceId":"wms","linkedEntity":"daily_purchase_plan","status":"needs_review"},{"id":"TASK-daily_purchase_plan-2","owner":"ответственный","title":"не покупать hold позиции","priority":"high","due":"сегодня","sourceServiceId":"wms","linkedEntity":"daily_purchase_plan","status":"needs_review"}],"generatedEvents":["DAILY_PURCHASE_PLAN_EVALUATED"]},{"id":"route_dispatch","title":"Маршрут, сборка и погрузка","trigger":"закрытие заказов на отгрузку","objective":"разбить маршрут при 15+ точках; печатать labels обратной погрузки","status":"needs_review","steps":[{"order":1,"serviceId":"llm-agent","title":"Собрать вход","input":"закрытие заказов на отгрузку","output":"точек=16","rules":["AGENT-001"],"humanFactors":["источник и автор сохраняются"],"status":"completed"},{"order":2,"serviceId":"rule-engine","title":"Проверить правила","input":"точек=16; вес=630 кг; блокировок скана=4","output":"разбить маршрут при 15+ точках","rules":["hard-stop before model"],"humanFactors":["override только с причиной"],"status":"needs_review"},{"order":3,"serviceId":"event-log","title":"Записать факт","input":"разбить маршрут при 15+ точках; печатать labels обратной погрузки","output":"событие сохранено для аудита и обучения","rules":["event-first"],"humanFactors":["человек видит причину решения"],"status":"needs_review"}],"toolCalls":[{"toolId":"record_customer_signal","serviceId":"llm-agent","input":"закрытие заказов на отгрузку","output":"точек=16; вес=630 кг; блокировок скана=4","status":"needs_review","humanReview":"ответственный подтверждает исключение"}],"decisions":[{"id":"DEC-route_dispatch","serviceId":"rule-engine","title":"Маршрут, сборка и погрузка","decision":"needs_review","reason":"разбить маршрут при 15+ точках; печатать labels обратной погрузки","status":"needs_review","humanOverrideMode":"человек может изменить, причина пишется в event-log"}],"tasks":[{"id":"TASK-route_dispatch-1","owner":"оператор","title":"разбить маршрут при 15+ точках","priority":"high","due":"сегодня","sourceServiceId":"wms","linkedEntity":"route_dispatch","status":"needs_review"},{"id":"TASK-route_dispatch-2","owner":"ответственный","title":"печатать labels обратной погрузки","priority":"high","due":"сегодня","sourceServiceId":"wms","linkedEntity":"route_dispatch","status":"needs_review"}],"generatedEvents":["ROUTE_DISPATCH_EVALUATED"]},{"id":"inventory_reconciliation","title":"Сверка WMS, 1C и бумажных фактов","trigger":"конец смены или конфликт скана","objective":"запретить экспорт спорных строк; создать recount","status":"blocked","steps":[{"order":1,"serviceId":"llm-agent","title":"Собрать вход","input":"конец смены или конфликт скана","output":"SCAN-1 блок: партия не в pick wave","rules":["AGENT-001"],"humanFactors":["источник и автор сохраняются"],"status":"needs_review"},{"order":2,"serviceId":"rule-engine","title":"Проверить правила","input":"SCAN-1 блок: партия не в pick wave; SCAN-5 требует перескан; SCAN-6 блок: партия не в pick wave; SCAN-9 требует перескан","output":"запретить экспорт спорных строк","rules":["hard-stop before model"],"humanFactors":["override только с причиной"],"status":"blocked"},{"order":3,"serviceId":"event-log","title":"Записать факт","input":"запретить экспорт спорных строк; создать recount","output":"событие сохранено для аудита и обучения","rules":["event-first"],"humanFactors":["человек видит причину решения"],"status":"blocked"}],"toolCalls":[{"toolId":"record_customer_signal","serviceId":"llm-agent","input":"конец смены или конфликт скана","output":"SCAN-1 блок: партия не в pick wave; SCAN-5 требует перескан; SCAN-6 блок: партия не в pick wave; SCAN-9 требует перескан","status":"blocked","humanReview":"ответственный подтверждает исключение"}],"decisions":[{"id":"DEC-inventory_reconciliation","serviceId":"accounting","title":"Сверка WMS, 1C и бумажных фактов","decision":"blocked","reason":"запретить экспорт спорных строк; создать recount","status":"blocked","humanOverrideMode":"человек может изменить, причина пишется в event-log"}],"tasks":[{"id":"TASK-inventory_reconciliation-1","owner":"оператор","title":"запретить экспорт спорных строк","priority":"critical","due":"сегодня","sourceServiceId":"human-approval","linkedEntity":"inventory_reconciliation","status":"blocked"},{"id":"TASK-inventory_reconciliation-2","owner":"ответственный","title":"создать recount","priority":"critical","due":"сегодня","sourceServiceId":"human-approval","linkedEntity":"inventory_reconciliation","status":"blocked"}],"generatedEvents":["INVENTORY_RECONCILIATION_EVALUATED"]},{"id":"expiry_pricing","title":"Сроки и guarded pricing","trigger":"FEFO watch-list","objective":"проверить маржу; не приучать клиентов к регулярной скидке","status":"needs_review","steps":[{"order":1,"serviceId":"llm-agent","title":"Собрать вход","input":"FEFO watch-list","output":"expiry_watch=3168 кг","rules":["AGENT-001"],"humanFactors":["источник и автор сохраняются"],"status":"completed"},{"order":2,"serviceId":"rule-engine","title":"Проверить правила","input":"expiry_watch=3168 кг; скидка только на партию","output":"проверить маржу","rules":["hard-stop before model"],"humanFactors":["override только с причиной"],"status":"needs_review"},{"order":3,"serviceId":"event-log","title":"Записать факт","input":"проверить маржу; не приучать клиентов к регулярной скидке","output":"событие сохранено для аудита и обучения","rules":["event-first"],"humanFactors":["человек видит причину решения"],"status":"needs_review"}],"toolCalls":[{"toolId":"record_customer_signal","serviceId":"llm-agent","input":"FEFO watch-list","output":"expiry_watch=3168 кг; скидка только на партию","status":"needs_review","humanReview":"ответственный подтверждает исключение"}],"decisions":[{"id":"DEC-expiry_pricing","serviceId":"rule-engine","title":"Сроки и guarded pricing","decision":"needs_review","reason":"проверить маржу; не приучать клиентов к регулярной скидке","status":"needs_review","humanOverrideMode":"человек может изменить, причина пишется в event-log"}],"tasks":[{"id":"TASK-expiry_pricing-1","owner":"оператор","title":"проверить маржу","priority":"high","due":"сегодня","sourceServiceId":"wms","linkedEntity":"expiry_pricing","status":"needs_review"},{"id":"TASK-expiry_pricing-2","owner":"ответственный","title":"не приучать клиентов к регулярной скидке","priority":"high","due":"сегодня","sourceServiceId":"wms","linkedEntity":"expiry_pricing","status":"needs_review"}],"generatedEvents":["EXPIRY_PRICING_EVALUATED"]},{"id":"stockout_substitution","title":"Дефицит и замены","trigger":"строка заказа без остатка","objective":"менеджер выбирает замену; записать отказ как lost demand","status":"needs_review","steps":[{"order":1,"serviceId":"llm-agent","title":"Собрать вход","input":"строка заказа без остатка","output":"клиент R17 не принимает заморозку","rules":["AGENT-001"],"humanFactors":["источник и автор сохраняются"],"status":"completed"},{"order":2,"serviceId":"rule-engine","title":"Проверить правила","input":"клиент R17 не принимает заморозку; магазин может принять монолит по отдельной цене","output":"менеджер выбирает замену","rules":["hard-stop before model"],"humanFactors":["override только с причиной"],"status":"needs_review"},{"order":3,"serviceId":"event-log","title":"Записать факт","input":"менеджер выбирает замену; записать отказ как lost demand","output":"событие сохранено для аудита и обучения","rules":["event-first"],"humanFactors":["человек видит причину решения"],"status":"needs_review"}],"toolCalls":[{"toolId":"record_customer_signal","serviceId":"llm-agent","input":"строка заказа без остатка","output":"клиент R17 не принимает заморозку; магазин может принять монолит по отдельной цене","status":"needs_review","humanReview":"ответственный подтверждает исключение"}],"decisions":[{"id":"DEC-stockout_substitution","serviceId":"rule-engine","title":"Дефицит и замены","decision":"needs_review","reason":"менеджер выбирает замену; записать отказ как lost demand","status":"needs_review","humanOverrideMode":"человек может изменить, причина пишется в event-log"}],"tasks":[{"id":"TASK-stockout_substitution-1","owner":"оператор","title":"менеджер выбирает замену","priority":"high","due":"сегодня","sourceServiceId":"wms","linkedEntity":"stockout_substitution","status":"needs_review"},{"id":"TASK-stockout_substitution-2","owner":"ответственный","title":"записать отказ как lost demand","priority":"high","due":"сегодня","sourceServiceId":"wms","linkedEntity":"stockout_substitution","status":"needs_review"}],"generatedEvents":["STOCKOUT_SUBSTITUTION_EVALUATED"]},{"id":"warehouse_relayout","title":"Перестановка склада в тихое окно","trigger":"склад занят, много сроков и проходов","objective":"освободить проходы; A SKU ближе к pick-face; оставить место под технику","status":"needs_review","steps":[{"order":1,"serviceId":"llm-agent","title":"Собрать вход","input":"склад занят, много сроков и проходов","output":"blocked_slots=23","rules":["AGENT-001"],"humanFactors":["источник и автор сохраняются"],"status":"completed"},{"order":2,"serviceId":"rule-engine","title":"Проверить правила","input":"blocked_slots=23; overloaded=нет","output":"освободить проходы","rules":["hard-stop before model"],"humanFactors":["override только с причиной"],"status":"needs_review"},{"order":3,"serviceId":"event-log","title":"Записать факт","input":"освободить проходы; A SKU ближе к pick-face; оставить место под технику","output":"событие сохранено для аудита и обучения","rules":["event-first"],"humanFactors":["человек видит причину решения"],"status":"needs_review"}],"toolCalls":[{"toolId":"record_customer_signal","serviceId":"llm-agent","input":"склад занят, много сроков и проходов","output":"blocked_slots=23; overloaded=нет","status":"needs_review","humanReview":"ответственный подтверждает исключение"}],"decisions":[{"id":"DEC-warehouse_relayout","serviceId":"rule-engine","title":"Перестановка склада в тихое окно","decision":"needs_review","reason":"освободить проходы; A SKU ближе к pick-face; оставить место под технику","status":"needs_review","humanOverrideMode":"человек может изменить, причина пишется в event-log"}],"tasks":[{"id":"TASK-warehouse_relayout-1","owner":"оператор","title":"освободить проходы","priority":"high","due":"сегодня","sourceServiceId":"wms","linkedEntity":"warehouse_relayout","status":"needs_review"},{"id":"TASK-warehouse_relayout-2","owner":"ответственный","title":"A SKU ближе к pick-face","priority":"high","due":"сегодня","sourceServiceId":"wms","linkedEntity":"warehouse_relayout","status":"needs_review"},{"id":"TASK-warehouse_relayout-3","owner":"ответственный","title":"оставить место под технику","priority":"high","due":"сегодня","sourceServiceId":"wms","linkedEntity":"warehouse_relayout","status":"needs_review"}],"generatedEvents":["WAREHOUSE_RELAYOUT_EVALUATED"]}]}