Демо-сессия
Единый интерфейс для компаний, цепочек и репутации
Сценарий
Компании и лоты
Добавить лот
Политики
Read-only интеграция с внешним каталогом
Demo UI показывает контракт solver-а: правила и публикация живут во внешнем catalog service, а расчёт получает только immutable snapshot.
Роли
- Аналитик создаёт draft-правила, валидирует и симулирует влияние.
- Админ утверждает, публикует новый snapshot и активирует/откатывает версию.
- Solver ничего не редактирует, читает только опубликованный export по snapshot id.
Lifecycle snapshot-а
- draft
- validate
- simulate
- approve
- publish new snapshot
- activate
Активный snapshot не меняется in-place: same input + same catalog_snapshot_id = same result.
Catalog browser
loadingКонтракт demo solve
- Top-level поле
catalog_snapshot_id- Поля лота
catalog_node_id,catalog_attributes- Explain ребра
catalog_matchс reason и snapshot id- Snapshot
- активный snapshot берётся из настроенного read-only catalog export
- Неизвестный ID
- возвращает 400
catalog snapshot not foundдо запуска optimizer-а
Почему здесь read-only
Demo UI solver-а показывает, какая версия политик участвует в расчёте, но не редактирует сами правила.
Редактирование, согласование и публикация правил должны происходить во внешнем catalog service: там живут draft-статусы, права, audit log, validate, simulate, approve, publish и rollback.
Так solver сохраняет контракт детерминизма: same input + same catalog_snapshot_id = same result.
Примеры правил замены
[
{
"id": "subst.white_bread_to_toast_bread.v1",
"status": "published",
"demand_node_id": "bread.white",
"offer_node_id": "bread.toast",
"priority": 100,
"direction": "demand_to_offer",
"conditions": { "attributes": { "sliced": "true" } },
"reason_code": "allowed_substitution"
},
{
"id": "subst.milk_3_2_to_2_5.v1",
"status": "published",
"demand_node_id": "milk.whole.3_2",
"offer_node_id": "milk.whole.2_5",
"priority": 80,
"direction": "demand_to_offer",
"conditions": { "attributes": { "package": "carton" } },
"reason_code": "allowed_substitution"
},
{
"id": "subst.diesel_to_winter_diesel.v1",
"status": "published",
"demand_node_id": "fuel.diesel",
"offer_node_id": "fuel.diesel.winter",
"priority": 120,
"direction": "demand_to_offer",
"conditions": { "attributes": { "temperature_class": "winter" } },
"reason_code": "allowed_substitution"
}
]
Цепочки
Поиск 5 → 4 → 3 звена
Результат группируется по длине; forbidden-компании применяются к следующему пересчёту.
catalog_snapshot_id отправляется как top-level поле solve request. Поле автоматически заполняется активным snapshot-ом каталога; произвольный ID вроде 1234 вернёт catalog snapshot not found.
Рейтинг