1939 lines
79 KiB
JSON
1939 lines
79 KiB
JSON
{
|
||
"schema_version": "active_domain_contract_v1",
|
||
"status": "active",
|
||
"domain_id": "inventory_stock_supplier_provenance",
|
||
"runtime_domain": "inventory_stock",
|
||
"title": "Складские остатки, происхождение товара и связь с поставщиком",
|
||
"source_of_truth_policy": {
|
||
"purpose": "single mutable domain source for the current orchestration target",
|
||
"switching_rule": "when the project switches to another domain, replace this file instead of rewriting the stable agent canon",
|
||
"stable_layers": [
|
||
"AGENTS.md",
|
||
".codex/skills/domain-case-loop",
|
||
".codex/agents/domain_analyst.toml",
|
||
".codex/agents/orchestrator.toml"
|
||
],
|
||
"mutable_layer": [
|
||
"docs/orchestration/active_domain_contract.json"
|
||
]
|
||
},
|
||
"domain_goal": "Показать остатки товаров на складе на дату, затем по выбранной позиции или по связанному срезу пройти в происхождение товара, поставщика, закупочные документы, возраст закупки и дальнейшую продажу без потери контекста.",
|
||
"default_analysis_context": {
|
||
"as_of_date": "2021-09-30",
|
||
"source": "active_domain_contract_default"
|
||
},
|
||
"business_value": [
|
||
"Пользователь должен сначала получить подтвержденный срез остатков на дату.",
|
||
"Пользователь должен затем выбрать реальную позицию из ответа и углубиться без ручного переписывания сущности.",
|
||
"Система должна понимать не только канонический вопрос, но и разговорные follow-up формулировки.",
|
||
"Для сценария склада acceptance определяется не одиночным ответом, а проходимостью дерева от root snapshot к критическим drilldown-веткам."
|
||
],
|
||
"observed_anchors": {
|
||
"warehouse": "Основной склад",
|
||
"organization": "ООО \\Альтернатива Плюс\\",
|
||
"historical_as_of_date": "2019-03-31",
|
||
"current_as_of_date_example": "2021-09-30",
|
||
"focus_item_current": "Диван трехместный",
|
||
"focus_item_historical": "Столешница 600*3050*26 дуб ниагара",
|
||
"focus_item_small_residue": "Четки Пост (84*117)",
|
||
"supplier_candidate": "Торговый дом \\Союз",
|
||
"supplier_candidate_alt": "Гамма-мебель, ООО",
|
||
"buyer_candidate": "Департамент капитального ремонта города Москвы"
|
||
},
|
||
"question_pool": {
|
||
"total_questions": 31,
|
||
"core_questions_total": 22,
|
||
"followup_checkpoints_total": 9,
|
||
"questions": [
|
||
{
|
||
"question_id": "Q01",
|
||
"text": "Какие товары сейчас лежат на складе",
|
||
"layer": "root_snapshot",
|
||
"node_id": "N01_stock_snapshot",
|
||
"role": "root",
|
||
"wording_family": "canonical",
|
||
"semantic_goal": "получить актуальный item-level срез остатков на складе"
|
||
},
|
||
{
|
||
"question_id": "Q02",
|
||
"text": "Какие товары лежат на складе на дату ...",
|
||
"layer": "root_snapshot",
|
||
"node_id": "N01_stock_snapshot",
|
||
"role": "root",
|
||
"wording_family": "canonical",
|
||
"semantic_goal": "получить item-level срез остатков на конкретную дату"
|
||
},
|
||
{
|
||
"question_id": "Q03",
|
||
"text": "Из каких товаров состоит остаток по 41 счету",
|
||
"layer": "root_snapshot",
|
||
"node_id": "N02_account_41_snapshot",
|
||
"role": "root_variant",
|
||
"wording_family": "canonical",
|
||
"semantic_goal": "получить item-level состав остатка по 41.01"
|
||
},
|
||
{
|
||
"question_id": "Q04",
|
||
"text": "Какие товары числятся на 41 счете на дату ...",
|
||
"layer": "root_snapshot",
|
||
"node_id": "N02_account_41_snapshot",
|
||
"role": "root_variant",
|
||
"wording_family": "colloquial",
|
||
"semantic_goal": "получить датированный item-level состав остатка по 41.01"
|
||
},
|
||
{
|
||
"question_id": "Q05",
|
||
"text": "Какие конкретно номенклатуры формируют остаток по складу на дату ...",
|
||
"layer": "root_snapshot",
|
||
"node_id": "N01_stock_snapshot",
|
||
"role": "root_variant",
|
||
"wording_family": "canonical",
|
||
"semantic_goal": "получить номенклатурный состав складского остатка на дату"
|
||
},
|
||
{
|
||
"question_id": "Q28",
|
||
"text": "что лежит у нас на складе в марте 2019",
|
||
"layer": "root_snapshot",
|
||
"node_id": "N01_stock_snapshot",
|
||
"role": "root_variant",
|
||
"wording_family": "colloquial",
|
||
"semantic_goal": "проверить разговорный root snapshot с предлогом `в` и месячной словоформой без развала в годовой диапазон"
|
||
},
|
||
{
|
||
"question_id": "Q06",
|
||
"text": "От какого поставщика куплен товар ...",
|
||
"layer": "selected_item_provenance",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"role": "critical_child",
|
||
"wording_family": "canonical",
|
||
"semantic_goal": "получить прямой ответ о поставщике выбранного товара"
|
||
},
|
||
{
|
||
"question_id": "Q07",
|
||
"text": "У какого поставщика были куплены товары, которые сейчас лежат на складе",
|
||
"layer": "supplier_overlap",
|
||
"node_id": "N06_supplier_overlap_now",
|
||
"role": "critical_child",
|
||
"wording_family": "canonical",
|
||
"semantic_goal": "понять supplier coverage по текущему складскому срезу"
|
||
},
|
||
{
|
||
"question_id": "Q08",
|
||
"text": "По какому поставщику проходит текущий товарный остаток",
|
||
"layer": "supplier_overlap",
|
||
"node_id": "N06_supplier_overlap_now",
|
||
"role": "supporting_child",
|
||
"wording_family": "canonical",
|
||
"semantic_goal": "атрибутировать текущий остаток по поставщику без потери item/slice контекста"
|
||
},
|
||
{
|
||
"question_id": "Q09",
|
||
"text": "Когда был куплен товар ...",
|
||
"layer": "selected_item_provenance",
|
||
"node_id": "N04_selected_item_purchase_date",
|
||
"role": "critical_child",
|
||
"wording_family": "canonical",
|
||
"semantic_goal": "получить дату первой/наблюдаемой закупки выбранного товара"
|
||
},
|
||
{
|
||
"question_id": "Q26",
|
||
"text": "когда примерно мы купили?",
|
||
"layer": "selected_item_provenance",
|
||
"node_id": "N04_selected_item_purchase_date",
|
||
"role": "followup_checkpoint",
|
||
"wording_family": "short_action_followup",
|
||
"semantic_goal": "получить компактный direct answer о дате закупки через reuse already resolved answer object, а не повторять полный provenance packet"
|
||
},
|
||
{
|
||
"question_id": "Q10",
|
||
"text": "По каким документам был куплен товар ...",
|
||
"layer": "selected_item_provenance",
|
||
"node_id": "N05_selected_item_purchase_documents",
|
||
"role": "critical_child",
|
||
"wording_family": "canonical",
|
||
"semantic_goal": "получить закупочные документы для выбранного товара"
|
||
},
|
||
{
|
||
"question_id": "Q11",
|
||
"text": "Какие товары от поставщика ... сейчас еще лежат на складе",
|
||
"layer": "supplier_overlap",
|
||
"node_id": "N07_supplier_items_on_stock",
|
||
"role": "supporting_child",
|
||
"wording_family": "canonical",
|
||
"semantic_goal": "получить item-level пересечение supplier -> current stock"
|
||
},
|
||
{
|
||
"question_id": "Q12",
|
||
"text": "Какие товары по состоянию на дату ... были куплены у поставщика ...",
|
||
"layer": "supplier_overlap",
|
||
"node_id": "N08_supplier_items_on_date",
|
||
"role": "supporting_child",
|
||
"wording_family": "canonical",
|
||
"semantic_goal": "получить датированное item-level пересечение supplier -> stock slice"
|
||
},
|
||
{
|
||
"question_id": "Q13",
|
||
"text": "Какие остатки по товарам на эту дату относятся к старым закупкам",
|
||
"layer": "aging",
|
||
"node_id": "N09_old_purchase_aging",
|
||
"role": "critical_child",
|
||
"wording_family": "followup_date_carryover",
|
||
"semantic_goal": "показать item-level старые закупки в рамках уже выбранной даты, а не на текущий момент"
|
||
},
|
||
{
|
||
"question_id": "Q14",
|
||
"text": "Какие товары сейчас висят в остатке без понятной привязки к поставщику",
|
||
"layer": "aging",
|
||
"node_id": "N10_unresolved_supplier_link",
|
||
"role": "supporting_child",
|
||
"wording_family": "canonical",
|
||
"semantic_goal": "найти остатки без надежной supplier attribution"
|
||
},
|
||
{
|
||
"question_id": "Q15",
|
||
"text": "Есть ли остатки товара, которые закупались очень давно",
|
||
"layer": "aging",
|
||
"node_id": "N09_old_purchase_aging",
|
||
"role": "supporting_child",
|
||
"wording_family": "canonical",
|
||
"semantic_goal": "показать very-old stock в item-level виде"
|
||
},
|
||
{
|
||
"question_id": "Q16",
|
||
"text": "Кому был продан товар ...",
|
||
"layer": "sale_trace",
|
||
"node_id": "N11_selected_item_buyer",
|
||
"role": "critical_child",
|
||
"wording_family": "canonical",
|
||
"semantic_goal": "получить покупателя выбранного товара"
|
||
},
|
||
{
|
||
"question_id": "Q17",
|
||
"text": "Через какие документы прошел путь товара: закупка -> склад -> продажа",
|
||
"layer": "sale_trace",
|
||
"node_id": "N12_purchase_to_sale_chain",
|
||
"role": "critical_child",
|
||
"wording_family": "canonical",
|
||
"semantic_goal": "получить полную документальную цепочку purchase -> stock -> sale"
|
||
},
|
||
{
|
||
"question_id": "Q18",
|
||
"text": "Какие товары были куплены у поставщика ... и позже проданы покупателю ...",
|
||
"layer": "sale_trace",
|
||
"node_id": "N13_supplier_to_buyer_overlap",
|
||
"role": "supporting_child",
|
||
"wording_family": "canonical",
|
||
"semantic_goal": "проверить supplier -> item -> buyer overlap"
|
||
},
|
||
{
|
||
"question_id": "Q19",
|
||
"text": "По выбранному объекту \"...\": кто это поставил нам",
|
||
"layer": "selected_item_provenance",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"role": "critical_child",
|
||
"wording_family": "ui_selected_object_colloquial",
|
||
"semantic_goal": "проверить, что selected-object follow-up и разговорная supplier-фраза идут в exact provenance contour"
|
||
},
|
||
{
|
||
"question_id": "Q20",
|
||
"text": "По выбранному объекту \"...\": по каким документам это купили",
|
||
"layer": "selected_item_provenance",
|
||
"node_id": "N05_selected_item_purchase_documents",
|
||
"role": "critical_child",
|
||
"wording_family": "ui_selected_object_colloquial",
|
||
"semantic_goal": "проверить selected-object follow-up в закупочные документы без ручного переписывания item"
|
||
},
|
||
{
|
||
"question_id": "Q21",
|
||
"text": "покажи документы по этой позиции",
|
||
"layer": "selected_item_provenance",
|
||
"node_id": "N05_selected_item_purchase_documents",
|
||
"role": "critical_child",
|
||
"wording_family": "pronoun_followup",
|
||
"semantic_goal": "проверить короткий местоименный follow-up по активному товару без съезда в counterparty drilldown"
|
||
},
|
||
{
|
||
"question_id": "Q22",
|
||
"text": "По выбранному объекту \"...\": от какого поставщика куплен товар",
|
||
"layer": "selected_item_provenance",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"role": "critical_child",
|
||
"wording_family": "ui_selected_object",
|
||
"semantic_goal": "проверить selected-object follow-up в exact provenance contour без разговорной supplier-лексики"
|
||
},
|
||
{
|
||
"question_id": "Q23",
|
||
"text": "кто это поставил нам",
|
||
"layer": "selected_item_provenance",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"role": "critical_child",
|
||
"wording_family": "pronoun_followup",
|
||
"semantic_goal": "проверить короткий supplier follow-up по уже активному selected object без повторного item anchor"
|
||
},
|
||
{
|
||
"question_id": "Q27",
|
||
"text": "По выбранному объекту \"...\": у кого купили",
|
||
"layer": "selected_item_provenance",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"role": "critical_child",
|
||
"wording_family": "ui_selected_object_colloquial",
|
||
"semantic_goal": "проверить разговорный selected-object follow-up про поставщика без слова `поставщик`"
|
||
},
|
||
{
|
||
"question_id": "Q31",
|
||
"text": "По выбранному объекту \"...\": у кого куплено",
|
||
"layer": "selected_item_provenance",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"role": "critical_child",
|
||
"wording_family": "ui_selected_object_colloquial",
|
||
"semantic_goal": "проверить selected-object follow-up с краткой страдательной формой `у кого куплено`, который должен оставаться в supplier provenance и наследовать историческую дату root-среза"
|
||
},
|
||
{
|
||
"question_id": "Q29",
|
||
"text": "По выбранному объекту \"...\": где мы купили это",
|
||
"layer": "selected_item_provenance",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"role": "critical_child",
|
||
"wording_family": "ui_selected_object_colloquial",
|
||
"semantic_goal": "проверить разговорный selected-object follow-up с локационной формулировкой, который по смыслу должен вернуться к supplier provenance, а не в документы"
|
||
},
|
||
{
|
||
"question_id": "Q30",
|
||
"text": "По выбранному объекту \"...\": где куплено!!",
|
||
"layer": "selected_item_provenance",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"role": "critical_child",
|
||
"wording_family": "ui_selected_object_colloquial",
|
||
"semantic_goal": "проверить короткий selected-object follow-up с emphatic punctuation и усеченной формулировкой `где куплено`"
|
||
},
|
||
{
|
||
"question_id": "Q24",
|
||
"text": "По выбранному объекту \"...\": кому был продан товар",
|
||
"layer": "sale_trace",
|
||
"node_id": "N11_selected_item_buyer",
|
||
"role": "critical_child",
|
||
"wording_family": "ui_selected_object",
|
||
"semantic_goal": "проверить selected-object follow-up в exact buyer trace contour"
|
||
},
|
||
{
|
||
"question_id": "Q25",
|
||
"text": "По выбранному объекту \"...\": через какие документы прошел путь товара: закупка -> склад -> продажа",
|
||
"layer": "sale_trace",
|
||
"node_id": "N12_purchase_to_sale_chain",
|
||
"role": "critical_child",
|
||
"wording_family": "ui_selected_object",
|
||
"semantic_goal": "проверить selected-object follow-up в exact purchase-to-sale chain contour"
|
||
}
|
||
]
|
||
},
|
||
"wording_families": [
|
||
{
|
||
"family_id": "canonical",
|
||
"description": "нормальная каноническая формулировка доменного вопроса"
|
||
},
|
||
{
|
||
"family_id": "colloquial",
|
||
"description": "разговорная или короткая пользовательская формулировка"
|
||
},
|
||
{
|
||
"family_id": "ui_selected_object",
|
||
"description": "follow-up, собранный через выбор объекта из ответа"
|
||
},
|
||
{
|
||
"family_id": "ui_selected_object_colloquial",
|
||
"description": "выбранный объект + разговорная формулировка drilldown-вопроса"
|
||
},
|
||
{
|
||
"family_id": "followup_date_carryover",
|
||
"description": "follow-up с фразой `на эту дату` или `на ту дату`, где дата обязана тянуться из предыдущего шага"
|
||
},
|
||
{
|
||
"family_id": "pronoun_followup",
|
||
"description": "короткий follow-up по активному объекту через местоимение или указатель типа `по ней`, `по этой позиции`, `ее`"
|
||
}
|
||
],
|
||
"scenario_tree": {
|
||
"root_nodes": [
|
||
{
|
||
"node_id": "N01_stock_snapshot",
|
||
"title": "Складской snapshot на дату",
|
||
"covers_question_ids": [
|
||
"Q01",
|
||
"Q02",
|
||
"Q05",
|
||
"Q28"
|
||
],
|
||
"expected_intents": [
|
||
"inventory_on_hand_as_of_date"
|
||
],
|
||
"expected_answer_shape": "item_list_with_quantity_cost_warehouse_organization",
|
||
"required_wording_families": [
|
||
"canonical",
|
||
"colloquial"
|
||
],
|
||
"children": [
|
||
"N03_selected_item_supplier",
|
||
"N06_supplier_overlap_now",
|
||
"N09_old_purchase_aging"
|
||
]
|
||
},
|
||
{
|
||
"node_id": "N02_account_41_snapshot",
|
||
"title": "Состав остатка по 41.01 на дату",
|
||
"covers_question_ids": [
|
||
"Q03",
|
||
"Q04"
|
||
],
|
||
"expected_intents": [
|
||
"inventory_on_hand_as_of_date"
|
||
],
|
||
"expected_answer_shape": "item_list_with_account_41_scope",
|
||
"required_wording_families": [
|
||
"canonical",
|
||
"colloquial"
|
||
],
|
||
"children": [
|
||
"N03_selected_item_supplier",
|
||
"N11_selected_item_buyer"
|
||
]
|
||
}
|
||
],
|
||
"critical_nodes": [
|
||
{
|
||
"node_id": "N03_selected_item_supplier",
|
||
"title": "Поставщик выбранного товара",
|
||
"covers_question_ids": [
|
||
"Q06",
|
||
"Q19",
|
||
"Q22",
|
||
"Q23",
|
||
"Q27",
|
||
"Q29",
|
||
"Q30"
|
||
],
|
||
"expected_intents": [
|
||
"inventory_purchase_provenance_for_item"
|
||
],
|
||
"expected_answer_shape": "direct_supplier_answer_first_then_evidence",
|
||
"required_wording_families": [
|
||
"canonical",
|
||
"colloquial",
|
||
"ui_selected_object",
|
||
"ui_selected_object_colloquial",
|
||
"pronoun_followup"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"focus_object",
|
||
"date_scope",
|
||
"warehouse_scope",
|
||
"organization_scope",
|
||
"reusable_bundle"
|
||
],
|
||
"children": [
|
||
"N04_selected_item_purchase_date",
|
||
"N05_selected_item_purchase_documents",
|
||
"N09_old_purchase_aging"
|
||
]
|
||
},
|
||
{
|
||
"node_id": "N04_selected_item_purchase_date",
|
||
"title": "Дата закупки выбранного товара",
|
||
"covers_question_ids": [
|
||
"Q09",
|
||
"Q26"
|
||
],
|
||
"expected_intents": [
|
||
"inventory_purchase_provenance_for_item"
|
||
],
|
||
"expected_answer_shape": "direct_date_answer_first_then_evidence",
|
||
"required_wording_families": [
|
||
"canonical",
|
||
"ui_selected_object",
|
||
"short_action_followup"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"date_scope",
|
||
"reusable_bundle",
|
||
"followup_action_resolution"
|
||
]
|
||
},
|
||
{
|
||
"node_id": "N05_selected_item_purchase_documents",
|
||
"title": "Закупочные документы выбранного товара",
|
||
"covers_question_ids": [
|
||
"Q10",
|
||
"Q20",
|
||
"Q21"
|
||
],
|
||
"expected_intents": [
|
||
"inventory_purchase_documents_for_item"
|
||
],
|
||
"expected_answer_shape": "document_list_for_selected_item",
|
||
"required_wording_families": [
|
||
"canonical",
|
||
"ui_selected_object",
|
||
"ui_selected_object_colloquial",
|
||
"pronoun_followup"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"focus_object",
|
||
"date_scope",
|
||
"warehouse_scope",
|
||
"reusable_bundle",
|
||
"followup_action_resolution"
|
||
]
|
||
},
|
||
{
|
||
"node_id": "N09_old_purchase_aging",
|
||
"title": "Старые закупки по остаткам на выбранную дату",
|
||
"covers_question_ids": [
|
||
"Q13",
|
||
"Q15"
|
||
],
|
||
"expected_intents": [
|
||
"inventory_aging_by_purchase_date"
|
||
],
|
||
"expected_answer_shape": "item_level_oldest_first_stock_aging_list",
|
||
"required_wording_families": [
|
||
"canonical",
|
||
"followup_date_carryover"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"date_scope",
|
||
"warehouse_scope",
|
||
"organization_scope"
|
||
],
|
||
"ordering_rule": "oldest_first"
|
||
},
|
||
{
|
||
"node_id": "N11_selected_item_buyer",
|
||
"title": "Покупатель выбранного товара",
|
||
"covers_question_ids": [
|
||
"Q16",
|
||
"Q24"
|
||
],
|
||
"expected_intents": [
|
||
"inventory_sale_trace_for_item"
|
||
],
|
||
"expected_answer_shape": "direct_buyer_answer_first_then_evidence",
|
||
"required_wording_families": [
|
||
"canonical",
|
||
"ui_selected_object"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"date_scope"
|
||
]
|
||
},
|
||
{
|
||
"node_id": "N12_purchase_to_sale_chain",
|
||
"title": "Документальная цепочка purchase -> stock -> sale",
|
||
"covers_question_ids": [
|
||
"Q17",
|
||
"Q25"
|
||
],
|
||
"expected_intents": [
|
||
"inventory_purchase_to_sale_chain"
|
||
],
|
||
"expected_answer_shape": "ordered_chain_with_purchase_stock_sale_documents",
|
||
"required_wording_families": [
|
||
"canonical",
|
||
"ui_selected_object"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"date_scope"
|
||
]
|
||
}
|
||
],
|
||
"supporting_nodes": [
|
||
{
|
||
"node_id": "N06_supplier_overlap_now",
|
||
"title": "Supplier overlap по текущему stock slice",
|
||
"covers_question_ids": [
|
||
"Q07",
|
||
"Q08"
|
||
],
|
||
"expected_intents": [
|
||
"inventory_supplier_stock_overlap_as_of_date"
|
||
],
|
||
"expected_answer_shape": "supplier_to_stock_slice_summary"
|
||
},
|
||
{
|
||
"node_id": "N07_supplier_items_on_stock",
|
||
"title": "Какие товары поставщика лежат на складе сейчас",
|
||
"covers_question_ids": [
|
||
"Q11"
|
||
],
|
||
"expected_intents": [
|
||
"inventory_supplier_stock_overlap_as_of_date"
|
||
],
|
||
"expected_answer_shape": "item_list_filtered_by_supplier"
|
||
},
|
||
{
|
||
"node_id": "N08_supplier_items_on_date",
|
||
"title": "Какие товары поставщика были в остатке на дату",
|
||
"covers_question_ids": [
|
||
"Q12"
|
||
],
|
||
"expected_intents": [
|
||
"inventory_supplier_stock_overlap_as_of_date"
|
||
],
|
||
"expected_answer_shape": "dated_item_list_filtered_by_supplier"
|
||
},
|
||
{
|
||
"node_id": "N10_unresolved_supplier_link",
|
||
"title": "Остатки без понятной supplier attribution",
|
||
"covers_question_ids": [
|
||
"Q14"
|
||
],
|
||
"expected_intents": [
|
||
"inventory_supplier_stock_overlap_as_of_date"
|
||
],
|
||
"expected_answer_shape": "item_list_with_unresolved_supplier_linkage"
|
||
},
|
||
{
|
||
"node_id": "N13_supplier_to_buyer_overlap",
|
||
"title": "Supplier -> item -> buyer overlap",
|
||
"covers_question_ids": [
|
||
"Q18"
|
||
],
|
||
"expected_intents": [
|
||
"inventory_purchase_to_sale_chain"
|
||
],
|
||
"expected_answer_shape": "confirmed_or_honestly_limited_supplier_item_buyer_overlap"
|
||
}
|
||
],
|
||
"critical_edges": [
|
||
{
|
||
"edge_id": "E01_snapshot_to_selected_item_supplier",
|
||
"from_node": "N01_stock_snapshot",
|
||
"to_node": "N03_selected_item_supplier",
|
||
"transition_type": "selected_object_drilldown",
|
||
"primary_user_path": true,
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"date_scope",
|
||
"warehouse_scope",
|
||
"organization_scope"
|
||
],
|
||
"failure_means": "домен не принят, даже если root snapshot уже exact"
|
||
},
|
||
{
|
||
"edge_id": "E02_selected_item_supplier_to_purchase_documents",
|
||
"from_node": "N03_selected_item_supplier",
|
||
"to_node": "N05_selected_item_purchase_documents",
|
||
"transition_type": "selected_object_deeper_trace",
|
||
"primary_user_path": true,
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"focus_object",
|
||
"date_scope",
|
||
"reusable_bundle",
|
||
"followup_action_resolution"
|
||
],
|
||
"failure_means": "сломано углубление из поставщика в документы закупки"
|
||
},
|
||
{
|
||
"edge_id": "E03_snapshot_or_provenance_to_aging",
|
||
"from_node": "N01_stock_snapshot",
|
||
"to_node": "N09_old_purchase_aging",
|
||
"transition_type": "date_sensitive_followup",
|
||
"primary_user_path": true,
|
||
"required_carryover_invariants": [
|
||
"date_scope",
|
||
"warehouse_scope",
|
||
"organization_scope"
|
||
],
|
||
"ordering_rule": "oldest_first",
|
||
"failure_means": "сломано понимание `на эту дату` или неверная answer shape по старым закупкам"
|
||
},
|
||
{
|
||
"edge_id": "E04_snapshot_to_sale_trace",
|
||
"from_node": "N02_account_41_snapshot",
|
||
"to_node": "N11_selected_item_buyer",
|
||
"transition_type": "historical_selected_object_drilldown",
|
||
"primary_user_path": true,
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"date_scope"
|
||
],
|
||
"failure_means": "sale-trace ветка незакрыта"
|
||
}
|
||
],
|
||
"primary_user_paths": [
|
||
{
|
||
"path_id": "P01_snapshot_to_supplier",
|
||
"nodes": [
|
||
"N01_stock_snapshot",
|
||
"N03_selected_item_supplier"
|
||
],
|
||
"description": "Самый типичный живой путь: получить список остатков, выбрать позицию, спросить кто поставил."
|
||
},
|
||
{
|
||
"path_id": "P02_snapshot_to_supplier_to_documents",
|
||
"nodes": [
|
||
"N01_stock_snapshot",
|
||
"N03_selected_item_supplier",
|
||
"N05_selected_item_purchase_documents"
|
||
],
|
||
"description": "После поставщика пользователь углубляется в закупочные документы."
|
||
},
|
||
{
|
||
"path_id": "P03_snapshot_to_aging_on_same_date",
|
||
"nodes": [
|
||
"N01_stock_snapshot",
|
||
"N09_old_purchase_aging"
|
||
],
|
||
"description": "Пользователь спрашивает про старые закупки на ту же дату, что и исходный snapshot."
|
||
},
|
||
{
|
||
"path_id": "P04_account_41_to_sale_trace",
|
||
"nodes": [
|
||
"N02_account_41_snapshot",
|
||
"N11_selected_item_buyer",
|
||
"N12_purchase_to_sale_chain"
|
||
],
|
||
"description": "Пользователь берет исторический остаток по 41 счету, выбирает позицию и углубляется в buyer/sale trace."
|
||
}
|
||
]
|
||
},
|
||
"orchestration_pack": {
|
||
"pack_id": "inventory_stock_active_contract_pool",
|
||
"title": "Warehouse stock active domain pack",
|
||
"description": "Scenario pack generated from the single active warehouse domain contract.",
|
||
"analysis_context": {
|
||
"as_of_date": "2021-09-30",
|
||
"source": "active_domain_contract_pack"
|
||
},
|
||
"bindings": {
|
||
"target_date_historical": "2019-03-31",
|
||
"target_date_current": "2021-09-30",
|
||
"observed_warehouse": "Основной склад",
|
||
"observed_organization": "ООО \\Альтернатива Плюс\\",
|
||
"focus_item_current": "Диван трехместный",
|
||
"focus_item_historical": "Столешница 600*3050*26 дуб ниагара",
|
||
"focus_item_small_residue": "Четки Пост (84*117)",
|
||
"observed_supplier_candidate": "Торговый дом \\Союз",
|
||
"observed_supplier_candidate_alt": "Гамма-мебель, ООО",
|
||
"observed_customer_candidate": "Департамент капитального ремонта города Москвы"
|
||
},
|
||
"scenarios": [
|
||
{
|
||
"scenario_id": "inventory_snapshot_roots",
|
||
"title": "Root stock snapshots",
|
||
"question_ids": [
|
||
"Q01",
|
||
"Q02",
|
||
"Q28",
|
||
"Q03",
|
||
"Q04",
|
||
"Q05"
|
||
],
|
||
"node_ids": [
|
||
"N01_stock_snapshot",
|
||
"N02_account_41_snapshot"
|
||
],
|
||
"acceptance_canon": {
|
||
"root_step_id": "step_01_stock_now",
|
||
"primary_user_path": [
|
||
"step_01_stock_now",
|
||
"step_02_stock_on_historical_date",
|
||
"step_05_nomenclature_on_historical_date"
|
||
],
|
||
"required_paraphrase_families": [
|
||
"canonical",
|
||
"colloquial"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"date_scope",
|
||
"warehouse_scope",
|
||
"organization_scope",
|
||
"answer_shape"
|
||
]
|
||
},
|
||
"steps": [
|
||
{
|
||
"step_id": "step_01_stock_now",
|
||
"question_id": "Q01",
|
||
"node_id": "N01_stock_snapshot",
|
||
"node_role": "root",
|
||
"paraphrase_family": "canonical",
|
||
"title": "Current stock root",
|
||
"question": "Какие товары сейчас лежат на складе",
|
||
"expected_capability": "confirmed_inventory_on_hand_as_of_date",
|
||
"analysis_context": {
|
||
"as_of_date": "2021-09-30",
|
||
"source": "binding_target_date_current"
|
||
},
|
||
"expected_result_mode": "confirmed_balance",
|
||
"required_filters": {
|
||
"as_of_date": "2021-09-30",
|
||
"period_from": "2021-09-01",
|
||
"period_to": "2021-09-30"
|
||
},
|
||
"invariant_severity": {
|
||
"wrong_as_of_date": "P0",
|
||
"wrong_period_from": "P0",
|
||
"wrong_period_to": "P0"
|
||
}
|
||
},
|
||
{
|
||
"step_id": "step_02_stock_on_historical_date",
|
||
"question_id": "Q02",
|
||
"node_id": "N01_stock_snapshot",
|
||
"node_role": "root",
|
||
"paraphrase_family": "colloquial",
|
||
"title": "Historical stock slice",
|
||
"question": "покажи остатки на складе на март 2019",
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "confirmed_inventory_on_hand_as_of_date",
|
||
"analysis_context": {
|
||
"as_of_date": "2021-09-30",
|
||
"source": "binding_target_date_current"
|
||
},
|
||
"expected_result_mode": "confirmed_balance",
|
||
"required_filters": {
|
||
"as_of_date": "2021-09-30",
|
||
"period_from": "2021-09-01",
|
||
"period_to": "2021-09-30"
|
||
},
|
||
"invariant_severity": {
|
||
"wrong_as_of_date": "P0",
|
||
"wrong_period_from": "P0",
|
||
"wrong_period_to": "P0"
|
||
}
|
||
},
|
||
{
|
||
"step_id": "step_02b_stock_on_named_month_prepositional",
|
||
"question_id": "Q28",
|
||
"node_id": "N01_stock_snapshot",
|
||
"node_role": "root_variant",
|
||
"paraphrase_family": "colloquial",
|
||
"title": "Historical stock slice with prepositional month wording",
|
||
"question": "что лежит у нас на складе в марте 2019",
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "confirmed_inventory_on_hand_as_of_date",
|
||
"expected_result_mode": "confirmed_balance",
|
||
"required_filters": {
|
||
"as_of_date": "2019-03-31",
|
||
"period_from": "2019-03-01",
|
||
"period_to": "2019-03-31"
|
||
},
|
||
"invariant_severity": {
|
||
"wrong_as_of_date": "P0",
|
||
"wrong_period_from": "P0",
|
||
"wrong_period_to": "P0"
|
||
}
|
||
},
|
||
{
|
||
"step_id": "step_03_account_41_now",
|
||
"question_id": "Q03",
|
||
"analysis_context": {
|
||
"as_of_date": "2021-09-30",
|
||
"source": "binding_target_date_current"
|
||
},
|
||
"required_filters": {
|
||
"as_of_date": "2021-09-30",
|
||
"period_from": "2021-09-01",
|
||
"period_to": "2021-09-30"
|
||
},
|
||
"invariant_severity": {
|
||
"wrong_as_of_date": "P0",
|
||
"wrong_period_from": "P0",
|
||
"wrong_period_to": "P0"
|
||
},
|
||
"node_id": "N02_account_41_snapshot",
|
||
"node_role": "root_variant",
|
||
"paraphrase_family": "canonical",
|
||
"title": "Account 41 current composition",
|
||
"question": "Из каких товаров состоит остаток по 41 счету",
|
||
"expected_capability": "confirmed_inventory_on_hand_as_of_date",
|
||
"expected_result_mode": "confirmed_balance"
|
||
},
|
||
{
|
||
"step_id": "step_04_account_41_on_historical_date",
|
||
"question_id": "Q04",
|
||
"node_id": "N02_account_41_snapshot",
|
||
"node_role": "root_variant",
|
||
"paraphrase_family": "colloquial",
|
||
"title": "Account 41 on historical date",
|
||
"question": "Какие товары числятся на 41 счете на дату {{bindings.target_date_historical}}",
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "confirmed_inventory_on_hand_as_of_date",
|
||
"expected_result_mode": "confirmed_balance"
|
||
},
|
||
{
|
||
"step_id": "step_05_nomenclature_on_historical_date",
|
||
"question_id": "Q05",
|
||
"node_id": "N01_stock_snapshot",
|
||
"node_role": "root_variant",
|
||
"paraphrase_family": "canonical",
|
||
"title": "Nomenclature on historical date",
|
||
"question": "Какие конкретно номенклатуры формируют остаток по складу {{bindings.observed_warehouse}} на дату {{bindings.target_date_historical}}",
|
||
"depends_on": [
|
||
"step_02_stock_on_historical_date"
|
||
],
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "confirmed_inventory_on_hand_as_of_date",
|
||
"expected_result_mode": "confirmed_balance"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"scenario_id": "inventory_selected_item_provenance",
|
||
"title": "Selected-item supplier provenance",
|
||
"question_ids": [
|
||
"Q02",
|
||
"Q06",
|
||
"Q09",
|
||
"Q26",
|
||
"Q10",
|
||
"Q19",
|
||
"Q27",
|
||
"Q29",
|
||
"Q30",
|
||
"Q20",
|
||
"Q21",
|
||
"Q22",
|
||
"Q23"
|
||
],
|
||
"node_ids": [
|
||
"N01_stock_snapshot",
|
||
"N03_selected_item_supplier",
|
||
"N04_selected_item_purchase_date",
|
||
"N05_selected_item_purchase_documents"
|
||
],
|
||
"acceptance_canon": {
|
||
"root_step_id": "step_01_snapshot_historical",
|
||
"primary_user_path": [
|
||
"step_01_snapshot_historical",
|
||
"step_02_selected_item_supplier_ui",
|
||
"step_08_selected_item_documents_pronoun"
|
||
],
|
||
"required_paraphrase_families": [
|
||
"canonical",
|
||
"colloquial",
|
||
"ui_selected_object",
|
||
"ui_selected_object_colloquial",
|
||
"pronoun_followup"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"focus_object",
|
||
"date_scope",
|
||
"warehouse_scope",
|
||
"organization_scope",
|
||
"answer_shape",
|
||
"reusable_bundle",
|
||
"followup_action_resolution"
|
||
]
|
||
},
|
||
"steps": [
|
||
{
|
||
"step_id": "step_01_snapshot_historical",
|
||
"question_id": "Q02",
|
||
"node_id": "N01_stock_snapshot",
|
||
"node_role": "root",
|
||
"paraphrase_family": "colloquial",
|
||
"title": "Historical stock anchor",
|
||
"question": "покажи остатки на складе на март 2019",
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "confirmed_inventory_on_hand_as_of_date",
|
||
"expected_result_mode": "confirmed_balance"
|
||
},
|
||
{
|
||
"step_id": "step_02_selected_item_supplier_ui",
|
||
"question_id": "Q22",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "ui_selected_object",
|
||
"title": "Selected item supplier UI",
|
||
"question": "По выбранному объекту \"{{bindings.focus_item_historical}}\": от какого поставщика куплен товар",
|
||
"depends_on": [
|
||
"step_01_snapshot_historical"
|
||
],
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "inventory_purchase_provenance_for_item",
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"focus_object",
|
||
"date_scope",
|
||
"warehouse_scope",
|
||
"organization_scope"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_03_selected_item_supplier_colloquial",
|
||
"question_id": "Q19",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "ui_selected_object_colloquial",
|
||
"title": "Selected item supplier colloquial",
|
||
"question": "По выбранному объекту \"{{bindings.focus_item_historical}}\": кто это поставил нам",
|
||
"depends_on": [
|
||
"step_01_snapshot_historical"
|
||
],
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "inventory_purchase_provenance_for_item",
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"focus_object",
|
||
"date_scope",
|
||
"warehouse_scope",
|
||
"organization_scope"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_03b_selected_item_supplier_u_kogo_kupili",
|
||
"question_id": "Q27",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "ui_selected_object_colloquial",
|
||
"title": "Selected item supplier colloquial without supplier noun",
|
||
"question": "По выбранному объекту \"{{bindings.focus_item_historical}}\": у кого купили",
|
||
"depends_on": [
|
||
"step_01_snapshot_historical"
|
||
],
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "inventory_purchase_provenance_for_item",
|
||
"forbidden_capabilities": [
|
||
"confirmed_inventory_on_hand_as_of_date"
|
||
],
|
||
"forbidden_recipes": [
|
||
"address_inventory_on_hand_as_of_date_v1"
|
||
],
|
||
"required_state_objects": [
|
||
"focus_object"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"focus_object",
|
||
"date_scope",
|
||
"warehouse_scope",
|
||
"organization_scope"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_03bb_selected_item_supplier_u_kogo_kupleno",
|
||
"question_id": "Q31",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "ui_selected_object_colloquial",
|
||
"title": "Selected item supplier passive colloquial wording",
|
||
"question": "По выбранному объекту \"{{bindings.focus_item_historical}}\": у кого куплено",
|
||
"depends_on": [
|
||
"step_01_snapshot_historical"
|
||
],
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "inventory_purchase_provenance_for_item",
|
||
"forbidden_capabilities": [
|
||
"confirmed_inventory_on_hand_as_of_date"
|
||
],
|
||
"forbidden_recipes": [
|
||
"address_inventory_on_hand_as_of_date_v1"
|
||
],
|
||
"required_state_objects": [
|
||
"focus_object"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"focus_object",
|
||
"date_scope",
|
||
"warehouse_scope",
|
||
"organization_scope"
|
||
],
|
||
"required_filters": {
|
||
"as_of_date": "2019-03-31",
|
||
"period_from": "2019-03-01",
|
||
"period_to": "2019-03-31"
|
||
},
|
||
"invariant_severity": {
|
||
"wrong_as_of_date": "P0",
|
||
"wrong_period_from": "P0",
|
||
"wrong_period_to": "P0",
|
||
"forbidden_route_selected": "P0",
|
||
"focus_object_missing": "P0"
|
||
}
|
||
},
|
||
{
|
||
"step_id": "step_03c_selected_item_supplier_gde_my_kupili",
|
||
"question_id": "Q29",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "ui_selected_object_colloquial",
|
||
"title": "Selected item supplier colloquial with where-bought wording",
|
||
"question": "По выбранному объекту \"{{bindings.focus_item_historical}}\": где мы купили это",
|
||
"depends_on": [
|
||
"step_01_snapshot_historical"
|
||
],
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "inventory_purchase_provenance_for_item",
|
||
"forbidden_capabilities": [
|
||
"confirmed_inventory_on_hand_as_of_date"
|
||
],
|
||
"forbidden_recipes": [
|
||
"address_inventory_on_hand_as_of_date_v1"
|
||
],
|
||
"required_state_objects": [
|
||
"focus_object"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"focus_object",
|
||
"date_scope",
|
||
"warehouse_scope",
|
||
"organization_scope"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_03d_selected_item_supplier_gde_kupleno",
|
||
"question_id": "Q30",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "ui_selected_object_colloquial",
|
||
"title": "Selected item supplier terse where-bought wording",
|
||
"question": "По выбранному объекту \"{{bindings.focus_item_historical}}\": где куплено!!",
|
||
"depends_on": [
|
||
"step_01_snapshot_historical"
|
||
],
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "inventory_purchase_provenance_for_item",
|
||
"forbidden_capabilities": [
|
||
"confirmed_inventory_on_hand_as_of_date"
|
||
],
|
||
"forbidden_recipes": [
|
||
"address_inventory_on_hand_as_of_date_v1"
|
||
],
|
||
"required_state_objects": [
|
||
"focus_object"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"focus_object",
|
||
"date_scope",
|
||
"warehouse_scope",
|
||
"organization_scope"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_04_selected_item_supplier_pronoun",
|
||
"question_id": "Q23",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "pronoun_followup",
|
||
"title": "Selected item supplier pronoun follow-up",
|
||
"question": "кто это поставил нам",
|
||
"depends_on": [
|
||
"step_02_selected_item_supplier_ui"
|
||
],
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "inventory_purchase_provenance_for_item",
|
||
"forbidden_capabilities": [
|
||
"confirmed_inventory_on_hand_as_of_date"
|
||
],
|
||
"forbidden_recipes": [
|
||
"address_inventory_on_hand_as_of_date_v1"
|
||
],
|
||
"required_state_objects": [
|
||
"focus_object"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"focus_object",
|
||
"date_scope",
|
||
"reusable_bundle"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_05_selected_item_supplier_canonical",
|
||
"question_id": "Q06",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "canonical",
|
||
"title": "Selected item supplier canonical",
|
||
"question": "От какого поставщика куплен товар {{bindings.focus_item_historical}}",
|
||
"depends_on": [
|
||
"step_01_snapshot_historical"
|
||
],
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "inventory_purchase_provenance_for_item",
|
||
"forbidden_capabilities": [
|
||
"confirmed_inventory_on_hand_as_of_date"
|
||
],
|
||
"forbidden_recipes": [
|
||
"address_inventory_on_hand_as_of_date_v1"
|
||
],
|
||
"required_state_objects": [
|
||
"focus_object"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_06_selected_item_purchase_date",
|
||
"question_id": "Q09",
|
||
"node_id": "N04_selected_item_purchase_date",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "canonical",
|
||
"title": "Selected item purchase date",
|
||
"question": "Когда был куплен товар {{bindings.focus_item_historical}}",
|
||
"depends_on": [
|
||
"step_01_snapshot_historical",
|
||
"step_02_selected_item_supplier_ui"
|
||
],
|
||
"required_state_objects": [
|
||
"focus_object"
|
||
],
|
||
"forbidden_capabilities": [
|
||
"confirmed_inventory_on_hand_as_of_date"
|
||
],
|
||
"forbidden_recipes": [
|
||
"address_inventory_on_hand_as_of_date_v1"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_06b_selected_item_purchase_date_short",
|
||
"question_id": "Q26",
|
||
"node_id": "N04_selected_item_purchase_date",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "short_action_followup",
|
||
"title": "Selected item purchase date short follow-up",
|
||
"question": "когда",
|
||
"depends_on": [
|
||
"step_02_selected_item_supplier_ui"
|
||
],
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "inventory_purchase_provenance_for_item",
|
||
"forbidden_capabilities": [
|
||
"confirmed_inventory_on_hand_as_of_date"
|
||
],
|
||
"forbidden_recipes": [
|
||
"address_inventory_on_hand_as_of_date_v1"
|
||
],
|
||
"required_state_objects": [
|
||
"focus_object"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"focus_object",
|
||
"date_scope",
|
||
"reusable_bundle",
|
||
"followup_action_resolution"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_07_selected_item_documents_ui",
|
||
"question_id": "Q20",
|
||
"node_id": "N05_selected_item_purchase_documents",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "ui_selected_object_colloquial",
|
||
"title": "Selected item purchase documents UI",
|
||
"question": "По выбранному объекту \"{{bindings.focus_item_historical}}\": по каким документам это купили",
|
||
"depends_on": [
|
||
"step_01_snapshot_historical",
|
||
"step_02_selected_item_supplier_ui"
|
||
],
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "inventory_purchase_documents_for_item",
|
||
"required_state_objects": [
|
||
"focus_object"
|
||
],
|
||
"forbidden_capabilities": [
|
||
"confirmed_inventory_on_hand_as_of_date",
|
||
"inventory_purchase_provenance_for_item"
|
||
],
|
||
"forbidden_recipes": [
|
||
"address_inventory_on_hand_as_of_date_v1",
|
||
"address_inventory_purchase_provenance_for_item_v1"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"focus_object",
|
||
"date_scope",
|
||
"reusable_bundle",
|
||
"followup_action_resolution"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_08_selected_item_documents_pronoun",
|
||
"question_id": "Q21",
|
||
"node_id": "N05_selected_item_purchase_documents",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "pronoun_followup",
|
||
"title": "Selected item purchase documents pronoun follow-up",
|
||
"question": "покажи документы по этой позиции",
|
||
"depends_on": [
|
||
"step_01_snapshot_historical",
|
||
"step_02_selected_item_supplier_ui"
|
||
],
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "inventory_purchase_documents_for_item",
|
||
"required_state_objects": [
|
||
"focus_object"
|
||
],
|
||
"forbidden_capabilities": [
|
||
"confirmed_inventory_on_hand_as_of_date",
|
||
"inventory_purchase_provenance_for_item"
|
||
],
|
||
"forbidden_recipes": [
|
||
"address_inventory_on_hand_as_of_date_v1",
|
||
"address_inventory_purchase_provenance_for_item_v1"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"focus_object",
|
||
"date_scope",
|
||
"reusable_bundle",
|
||
"followup_action_resolution"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_09_selected_item_documents_canonical",
|
||
"question_id": "Q10",
|
||
"node_id": "N05_selected_item_purchase_documents",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "canonical",
|
||
"title": "Selected item purchase documents canonical",
|
||
"question": "По каким документам был куплен товар {{bindings.focus_item_historical}}",
|
||
"depends_on": [
|
||
"step_01_snapshot_historical",
|
||
"step_02_selected_item_supplier_ui"
|
||
],
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "inventory_purchase_documents_for_item",
|
||
"required_state_objects": [
|
||
"focus_object"
|
||
],
|
||
"forbidden_capabilities": [
|
||
"confirmed_inventory_on_hand_as_of_date",
|
||
"inventory_purchase_provenance_for_item"
|
||
],
|
||
"forbidden_recipes": [
|
||
"address_inventory_on_hand_as_of_date_v1",
|
||
"address_inventory_purchase_provenance_for_item_v1"
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"scenario_id": "inventory_supplier_overlap",
|
||
"title": "Supplier overlap and supplier-scoped stock",
|
||
"question_ids": [
|
||
"Q01",
|
||
"Q07",
|
||
"Q08",
|
||
"Q11",
|
||
"Q12"
|
||
],
|
||
"node_ids": [
|
||
"N01_stock_snapshot",
|
||
"N06_supplier_overlap_now",
|
||
"N07_supplier_items_on_stock",
|
||
"N08_supplier_items_on_date"
|
||
],
|
||
"acceptance_canon": {
|
||
"root_step_id": "step_01_snapshot_current",
|
||
"primary_user_path": [
|
||
"step_01_snapshot_current",
|
||
"step_02_supplier_overlap_now",
|
||
"step_04_supplier_items_on_stock"
|
||
],
|
||
"required_paraphrase_families": [
|
||
"canonical",
|
||
"colloquial"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"date_scope",
|
||
"warehouse_scope",
|
||
"organization_scope",
|
||
"answer_shape"
|
||
]
|
||
},
|
||
"steps": [
|
||
{
|
||
"step_id": "step_01_snapshot_current",
|
||
"question_id": "Q01",
|
||
"node_id": "N01_stock_snapshot",
|
||
"node_role": "root",
|
||
"paraphrase_family": "colloquial",
|
||
"title": "Current stock anchor",
|
||
"question": "какие остатки на складе на сентябрь 2021",
|
||
"analysis_context": {
|
||
"as_of_date": "2021-09-30",
|
||
"source": "binding_target_date_current"
|
||
},
|
||
"expected_capability": "confirmed_inventory_on_hand_as_of_date",
|
||
"expected_result_mode": "confirmed_balance"
|
||
},
|
||
{
|
||
"step_id": "step_02_supplier_overlap_now",
|
||
"question_id": "Q07",
|
||
"node_id": "N06_supplier_overlap_now",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "canonical",
|
||
"title": "Suppliers behind current stock",
|
||
"question": "У какого поставщика были куплены товары, которые сейчас лежат на складе {{bindings.observed_warehouse}}",
|
||
"depends_on": [
|
||
"step_01_snapshot_current"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_03_supplier_residue_now",
|
||
"question_id": "Q08",
|
||
"node_id": "N06_supplier_overlap_now",
|
||
"node_role": "supporting_child",
|
||
"paraphrase_family": "canonical",
|
||
"title": "Supplier attribution of current residue",
|
||
"question": "По какому поставщику проходит текущий товарный остаток на складе {{bindings.observed_warehouse}}",
|
||
"depends_on": [
|
||
"step_01_snapshot_current"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_04_supplier_items_on_stock",
|
||
"question_id": "Q11",
|
||
"node_id": "N07_supplier_items_on_stock",
|
||
"node_role": "supporting_child",
|
||
"paraphrase_family": "canonical",
|
||
"title": "Current items for observed supplier",
|
||
"question": "Какие товары от поставщика {{bindings.observed_supplier_candidate}} сейчас еще лежат на складе {{bindings.observed_warehouse}}",
|
||
"depends_on": [
|
||
"step_01_snapshot_current"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_05_supplier_items_on_date",
|
||
"question_id": "Q12",
|
||
"required_filters": {
|
||
"as_of_date": "2019-03-31",
|
||
"period_from": "2019-03-01",
|
||
"period_to": "2019-03-31"
|
||
},
|
||
"required_carryover_invariants": [
|
||
"date_scope"
|
||
],
|
||
"invariant_severity": {
|
||
"wrong_as_of_date": "P0",
|
||
"wrong_period_from": "P0",
|
||
"wrong_period_to": "P0"
|
||
},
|
||
"node_id": "N08_supplier_items_on_date",
|
||
"node_role": "supporting_child",
|
||
"paraphrase_family": "canonical",
|
||
"title": "Supplier items on historical date",
|
||
"question": "Какие товары по состоянию на дату {{bindings.target_date_historical}} были куплены у поставщика {{bindings.observed_supplier_candidate}}",
|
||
"analysis_context": {
|
||
"as_of_date": "2019-03-31",
|
||
"source": "binding_target_date_historical"
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"scenario_id": "inventory_aging_and_unresolved",
|
||
"title": "Stock aging and unresolved supplier linkage",
|
||
"question_ids": [
|
||
"Q13",
|
||
"Q14",
|
||
"Q15",
|
||
"Q19"
|
||
],
|
||
"node_ids": [
|
||
"N01_stock_snapshot",
|
||
"N03_selected_item_supplier",
|
||
"N09_old_purchase_aging",
|
||
"N10_unresolved_supplier_link"
|
||
],
|
||
"acceptance_canon": {
|
||
"root_step_id": "step_01_snapshot_current",
|
||
"primary_user_path": [
|
||
"step_01_snapshot_current",
|
||
"step_02_selected_item_supplier_small",
|
||
"step_03_old_purchase_aging_followup"
|
||
],
|
||
"required_paraphrase_families": [
|
||
"canonical",
|
||
"followup_date_carryover",
|
||
"ui_selected_object_colloquial"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"date_scope",
|
||
"warehouse_scope",
|
||
"organization_scope",
|
||
"answer_shape",
|
||
"ordering_semantics"
|
||
]
|
||
},
|
||
"steps": [
|
||
{
|
||
"step_id": "step_01_snapshot_current",
|
||
"question_id": "Q01",
|
||
"node_id": "N01_stock_snapshot",
|
||
"node_role": "root",
|
||
"paraphrase_family": "colloquial",
|
||
"title": "Current stock anchor",
|
||
"question": "какие остатки на складе на сентябрь 2021",
|
||
"analysis_context": {
|
||
"as_of_date": "2021-09-30",
|
||
"source": "binding_target_date_current"
|
||
},
|
||
"expected_capability": "confirmed_inventory_on_hand_as_of_date",
|
||
"expected_result_mode": "confirmed_balance"
|
||
},
|
||
{
|
||
"step_id": "step_02_selected_item_supplier_small",
|
||
"question_id": "Q19",
|
||
"node_id": "N03_selected_item_supplier",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "ui_selected_object_colloquial",
|
||
"title": "Supplier for small residual item",
|
||
"question": "По выбранному объекту \"{{bindings.focus_item_small_residue}}\": кто это поставил нам",
|
||
"depends_on": [
|
||
"step_01_snapshot_current"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_03_old_purchase_aging_followup",
|
||
"question_id": "Q13",
|
||
"node_id": "N09_old_purchase_aging",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "followup_date_carryover",
|
||
"title": "Old purchase aging on the same date",
|
||
"question": "Какие остатки по товарам на эту дату относятся к старым закупкам",
|
||
"depends_on": [
|
||
"step_01_snapshot_current",
|
||
"step_02_selected_item_supplier_small"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"date_scope",
|
||
"warehouse_scope",
|
||
"organization_scope"
|
||
],
|
||
"ordering_rule": "oldest_first"
|
||
},
|
||
{
|
||
"step_id": "step_04_very_old_stock",
|
||
"question_id": "Q15",
|
||
"node_id": "N09_old_purchase_aging",
|
||
"node_role": "supporting_child",
|
||
"paraphrase_family": "canonical",
|
||
"title": "Very old stock",
|
||
"question": "Есть ли остатки товара, которые закупались очень давно",
|
||
"depends_on": [
|
||
"step_01_snapshot_current",
|
||
"step_03_old_purchase_aging_followup"
|
||
],
|
||
"ordering_rule": "oldest_first"
|
||
},
|
||
{
|
||
"step_id": "step_05_unresolved_supplier_link",
|
||
"question_id": "Q14",
|
||
"analysis_context": {
|
||
"as_of_date": "2021-09-30",
|
||
"source": "binding_target_date_current"
|
||
},
|
||
"required_filters": {
|
||
"as_of_date": "2021-09-30",
|
||
"period_from": "2021-09-01",
|
||
"period_to": "2021-09-30"
|
||
},
|
||
"required_carryover_invariants": [
|
||
"date_scope"
|
||
],
|
||
"invariant_severity": {
|
||
"wrong_as_of_date": "P0",
|
||
"wrong_period_from": "P0",
|
||
"wrong_period_to": "P0"
|
||
},
|
||
"node_id": "N10_unresolved_supplier_link",
|
||
"node_role": "supporting_child",
|
||
"paraphrase_family": "canonical",
|
||
"title": "Unresolved supplier linkage",
|
||
"question": "Какие товары сейчас висят в остатке без понятной привязки к поставщику",
|
||
"depends_on": [
|
||
"step_01_snapshot_current"
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"scenario_id": "inventory_sale_trace",
|
||
"title": "Sale trace and purchase-to-sale chain",
|
||
"question_ids": [
|
||
"Q04",
|
||
"Q16",
|
||
"Q17",
|
||
"Q18",
|
||
"Q24",
|
||
"Q25"
|
||
],
|
||
"node_ids": [
|
||
"N02_account_41_snapshot",
|
||
"N11_selected_item_buyer",
|
||
"N12_purchase_to_sale_chain",
|
||
"N13_supplier_to_buyer_overlap"
|
||
],
|
||
"acceptance_canon": {
|
||
"root_step_id": "step_01_account_41_historical",
|
||
"primary_user_path": [
|
||
"step_01_account_41_historical",
|
||
"step_02_selected_item_buyer_ui",
|
||
"step_04_purchase_to_sale_chain_ui"
|
||
],
|
||
"required_paraphrase_families": [
|
||
"canonical",
|
||
"colloquial",
|
||
"ui_selected_object"
|
||
],
|
||
"required_carryover_invariants": [
|
||
"selected_object",
|
||
"date_scope",
|
||
"answer_shape"
|
||
]
|
||
},
|
||
"bindings": {
|
||
"target_date_historical": "2020-03-31",
|
||
"focus_item_historical": "Шкаф картотечный 1000*400*2100",
|
||
"observed_supplier_candidate": "Гамма-мебель, ООО",
|
||
"observed_customer_candidate": "Департамент капитального ремонта города Москвы"
|
||
},
|
||
"steps": [
|
||
{
|
||
"step_id": "step_01_account_41_historical",
|
||
"question_id": "Q04",
|
||
"node_id": "N02_account_41_snapshot",
|
||
"node_role": "root_variant",
|
||
"paraphrase_family": "colloquial",
|
||
"title": "Historical account 41 anchor",
|
||
"question": "Какие товары числятся на 41 счете на дату {{bindings.target_date_historical}}",
|
||
"analysis_context": {
|
||
"as_of_date": "2020-03-31",
|
||
"source": "binding_target_date_historical"
|
||
},
|
||
"expected_capability": "confirmed_inventory_on_hand_as_of_date",
|
||
"expected_result_mode": "confirmed_balance"
|
||
},
|
||
{
|
||
"step_id": "step_02_selected_item_buyer_ui",
|
||
"question_id": "Q24",
|
||
"node_id": "N11_selected_item_buyer",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "ui_selected_object",
|
||
"title": "Buyer for historical selected item UI",
|
||
"question": "По выбранному объекту \"{{bindings.focus_item_historical}}\": кому был продан товар",
|
||
"depends_on": [
|
||
"step_01_account_41_historical"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_03_selected_item_buyer_canonical",
|
||
"question_id": "Q16",
|
||
"node_id": "N11_selected_item_buyer",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "canonical",
|
||
"title": "Buyer for historical selected item canonical",
|
||
"question": "Кому был продан товар {{bindings.focus_item_historical}}",
|
||
"depends_on": [
|
||
"step_01_account_41_historical"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_04_purchase_to_sale_chain_ui",
|
||
"question_id": "Q25",
|
||
"node_id": "N12_purchase_to_sale_chain",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "ui_selected_object",
|
||
"title": "Purchase to sale document chain UI",
|
||
"question": "По выбранному объекту \"{{bindings.focus_item_historical}}\": через какие документы прошел путь товара: закупка -> склад -> продажа",
|
||
"depends_on": [
|
||
"step_01_account_41_historical",
|
||
"step_02_selected_item_buyer_ui"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_05_purchase_to_sale_chain_canonical",
|
||
"question_id": "Q17",
|
||
"node_id": "N12_purchase_to_sale_chain",
|
||
"node_role": "critical_child",
|
||
"paraphrase_family": "canonical",
|
||
"title": "Purchase to sale document chain",
|
||
"question": "Через какие документы прошел путь товара {{bindings.focus_item_historical}}: закупка -> склад -> продажа",
|
||
"depends_on": [
|
||
"step_01_account_41_historical",
|
||
"step_02_selected_item_buyer_ui"
|
||
]
|
||
},
|
||
{
|
||
"step_id": "step_06_supplier_to_buyer_overlap",
|
||
"question_id": "Q18",
|
||
"node_id": "N13_supplier_to_buyer_overlap",
|
||
"node_role": "supporting_child",
|
||
"paraphrase_family": "canonical",
|
||
"title": "Supplier to buyer overlap",
|
||
"question": "Есть ли документально подтвержденная цепочка: поставщик {{bindings.observed_supplier_candidate}} -> товар {{bindings.focus_item_historical}} -> покупатель {{bindings.observed_customer_candidate}}",
|
||
"depends_on": [
|
||
"step_01_account_41_historical",
|
||
"step_05_purchase_to_sale_chain_canonical"
|
||
]
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"agent_audit_expectations": {
|
||
"direct_answer_first": true,
|
||
"action_first_followup_required": true,
|
||
"answer_layering_required": true,
|
||
"compact_micro_action_answers_required": true,
|
||
"business_utility_required": true,
|
||
"state_continuity_required": true,
|
||
"selected_object_memory_required": true,
|
||
"focus_object_required": true,
|
||
"answer_object_required": true,
|
||
"pronoun_followup_resolution_required": true,
|
||
"followup_action_resolution_required": true,
|
||
"bundle_reuse_required": true,
|
||
"temporal_honesty_required": true,
|
||
"field_truth_required": true,
|
||
"field_truth_checks": [
|
||
"supplier_vs_organization",
|
||
"buyer_vs_organization"
|
||
],
|
||
"forbidden_top_level_noise": [
|
||
"status headings",
|
||
"what was considered headings",
|
||
"row counts before the business answer",
|
||
"trace-first narration",
|
||
"numbered block headings",
|
||
"exact contour jargon",
|
||
"supplier is not materialized as a separate field"
|
||
],
|
||
"required_answer_layers": [
|
||
"direct_answer",
|
||
"evidence",
|
||
"service_notes"
|
||
],
|
||
"required_followup_micro_actions": [
|
||
"who",
|
||
"when",
|
||
"document_list",
|
||
"source_document",
|
||
"amount",
|
||
"all_receipts",
|
||
"buyer",
|
||
"sale_documents",
|
||
"sale_chain"
|
||
],
|
||
"required_state_objects": [
|
||
"focus_object",
|
||
"answer_object",
|
||
"provenance_bundle"
|
||
],
|
||
"reusable_answer_object_expectations": [
|
||
"current_item",
|
||
"current_as_of_date",
|
||
"answer_object",
|
||
"current_provenance_trace",
|
||
"current_sale_trace"
|
||
],
|
||
"answer_object_fields": [
|
||
"supplier_if_known",
|
||
"purchase_date_if_known",
|
||
"purchase_doc_if_known",
|
||
"purchase_amount_if_known",
|
||
"provenance_docs",
|
||
"buyer_if_known",
|
||
"sale_date_if_known",
|
||
"sale_doc_if_known",
|
||
"sale_docs"
|
||
],
|
||
"temporal_honesty_rule": [
|
||
"distinguish requested window from nearest available evidence",
|
||
"do not merge out-of-window evidence into the direct answer silently"
|
||
]
|
||
},
|
||
"acceptance_contract": {
|
||
"acceptance_unit": "scenario_tree",
|
||
"do_not_accept_if": [
|
||
"работает только root snapshot, но ломается critical selected-object edge",
|
||
"работает только canonical wording, но ломается colloquial или ui_selected_object wording",
|
||
"работает только quoted selected-object wording, но ломается короткий местоименный follow-up по активной позиции",
|
||
"теряется date_scope на follow-up с `на эту дату` или `на ту дату`",
|
||
"ответ меняет business object, например вместо item-level ответа отдаёт dump документов",
|
||
"нарушается ordering semantics, например `старые закупки` идут не oldest-first",
|
||
"the answer is trace-first instead of action-first on a selected-object follow-up",
|
||
"the top block contains system scaffolding instead of the direct business answer",
|
||
"the answer silently uses nearest out-of-window evidence without saying so",
|
||
"supplier or buyer is surfaced through a mislabeled organization field"
|
||
],
|
||
"required_green_for_acceptance": [
|
||
"root nodes",
|
||
"critical edges on primary_user_paths",
|
||
"canonical coverage on critical nodes",
|
||
"colloquial coverage on critical nodes",
|
||
"ui_selected_object coverage where UI supports object selection",
|
||
"pronoun_followup coverage where the UX already established an active selected object"
|
||
],
|
||
"required_defect_classes": [
|
||
"semantic_understanding_gap",
|
||
"edge_carryover_gap",
|
||
"followup_action_resolution_gap",
|
||
"bundle_reuse_gap",
|
||
"field_mapping_gap",
|
||
"temporal_honesty_gap",
|
||
"answer_shape_mismatch",
|
||
"ordering_semantics_mismatch",
|
||
"runtime_capability_gap",
|
||
"business_utility_gap",
|
||
"loop_coverage_gap"
|
||
],
|
||
"minimum_score_rule": "accepted only if analyst score >= 80 and no unresolved P0 remains"
|
||
},
|
||
"known_failure_patterns_to_watch": [
|
||
{
|
||
"pattern_id": "F01_selected_object_colloquial_supplier",
|
||
"symptom": "selected-object follow-up `кто это поставил нам` падает в clarification instead of provenance exact route",
|
||
"defect_class": "semantic_understanding_gap"
|
||
},
|
||
{
|
||
"pattern_id": "F02_numeric_tail_account_poisoning",
|
||
"symptom": "numeric fragments inside item names such as `600*3050*26` contaminate account/domain inference",
|
||
"defect_class": "semantic_understanding_gap"
|
||
},
|
||
{
|
||
"pattern_id": "F03_date_carryover_loss",
|
||
"symptom": "follow-up `на эту дату` loses the originating date and silently switches to current date",
|
||
"defect_class": "edge_carryover_gap"
|
||
},
|
||
{
|
||
"pattern_id": "F04_answer_shape_downgrade",
|
||
"symptom": "user asks for item-level stock aging but runtime returns raw purchase documents",
|
||
"defect_class": "answer_shape_mismatch"
|
||
},
|
||
{
|
||
"pattern_id": "F05_oldest_first_violation",
|
||
"symptom": "`старые закупки` are listed newest-first or in another non-business order",
|
||
"defect_class": "ordering_semantics_mismatch"
|
||
},
|
||
{
|
||
"pattern_id": "F06_pronoun_item_documents_misroute",
|
||
"symptom": "short follow-up like `покажи документы по этой позиции` drifts into `documents_by_counterparty` instead of selected-item purchase documents",
|
||
"defect_class": "followup_action_resolution_gap"
|
||
},
|
||
{
|
||
"pattern_id": "F07_provenance_bundle_not_reused",
|
||
"symptom": "supplier/date/document lookup was already resolved for the selected item but adjacent follow-up recomputes broadly or loses the reusable bundle",
|
||
"defect_class": "bundle_reuse_gap"
|
||
},
|
||
{
|
||
"pattern_id": "F08_short_when_replays_full_trace",
|
||
"symptom": "short follow-up such as `когда` replays the full provenance packet instead of returning the compact purchase date first",
|
||
"defect_class": "bundle_reuse_gap"
|
||
},
|
||
{
|
||
"pattern_id": "F09_temporal_auto_broaden_not_honest",
|
||
"symptom": "the answer quietly broadens from the requested date window to nearest available evidence without separating those two facts",
|
||
"defect_class": "temporal_honesty_gap"
|
||
},
|
||
{
|
||
"pattern_id": "F10_supplier_field_truth_blur",
|
||
"symptom": "the answer names a supplier but the surfaced business field is actually organization or another unlabeled technical field",
|
||
"defect_class": "field_mapping_gap"
|
||
},
|
||
{
|
||
"pattern_id": "F11_trace_first_top_block_noise",
|
||
"symptom": "the answer starts with system scaffolding, trace narration, or contour jargon instead of the direct business answer",
|
||
"defect_class": "business_utility_gap"
|
||
},
|
||
{
|
||
"pattern_id": "F12_numbered_block_scaffolding",
|
||
"symptom": "a narrow business follow-up opens with `Блок 1/2/3` scaffolding instead of a compact direct answer",
|
||
"defect_class": "business_utility_gap"
|
||
},
|
||
{
|
||
"pattern_id": "F12b_selected_object_supplier_u_kogo_kupili_misroute",
|
||
"symptom": "selected-object follow-up such as `у кого купили` or `у кого куплено` stays on the root stock snapshot instead of switching to selected-item provenance",
|
||
"defect_class": "followup_action_resolution_gap"
|
||
},
|
||
{
|
||
"pattern_id": "F12c_root_named_month_prepositional_misparsed",
|
||
"symptom": "root stock snapshot wording such as `что лежит у нас на складе в мае 2016` collapses to the full year boundary instead of the requested month window",
|
||
"defect_class": "temporal_honesty_gap"
|
||
},
|
||
{
|
||
"pattern_id": "F12d_selected_object_supplier_gde_kupili_misroute",
|
||
"symptom": "selected-object follow-up such as `где мы купили это` or `где куплено!!` stays on the root stock snapshot or drifts into generic documents instead of switching to selected-item provenance",
|
||
"defect_class": "followup_action_resolution_gap"
|
||
},
|
||
{
|
||
"pattern_id": "F13_selected_item_sale_followup_misroute",
|
||
"symptom": "selected-item follow-up such as `кому в итоге мы продали этот товар` drifts back into purchase provenance and answers about supplier instead of buyer",
|
||
"defect_class": "followup_action_resolution_gap"
|
||
},
|
||
{
|
||
"pattern_id": "F14_root_snapshot_service_heavy_top",
|
||
"symptom": "root stock snapshot opens with service scaffolding and counters instead of a concise business summary plus top positions",
|
||
"defect_class": "business_utility_gap"
|
||
}
|
||
],
|
||
"legacy_references": [
|
||
"docs/orchestration/domain_inventory_stock_supplier_trace.md",
|
||
"docs/orchestration/domain_inventory_stock_supplier_trace_pool.md",
|
||
"docs/orchestration/domain_inventory_stock_supplier_trace_pack.json"
|
||
]
|
||
}
|