ОРРКЕСТРАЦИЯ - Подключить active domain contract к warehouse orchestration и зафиксировать матрицу покрытия сценарного дерева

This commit is contained in:
2026-04-14 16:28:57 +03:00
parent 7205fdd4d0
commit f6a2c8e0a3
3 changed files with 910 additions and 2 deletions
@@ -2,6 +2,7 @@
"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",
@@ -17,6 +18,10 @@
]
},
"domain_goal": "Показать остатки товаров на складе на дату, затем по выбранной позиции или по связанному срезу пройти в происхождение товара, поставщика, закупочные документы, возраст закупки и дальнейшую продажу без потери контекста.",
"default_analysis_context": {
"as_of_date": "2021-09-30",
"source": "active_domain_contract_default"
},
"business_value": [
"Пользователь должен сначала получить подтвержденный срез остатков на дату.",
"Пользователь должен затем выбрать реальную позицию из ответа и углубиться без ручного переписывания сущности.",
@@ -417,6 +422,414 @@
}
]
},
"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", "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",
"expected_result_mode": "confirmed_balance"
},
{
"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",
"expected_result_mode": "confirmed_balance"
},
{
"step_id": "step_03_account_41_now",
"question_id": "Q03",
"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": "canonical",
"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.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"
}
]
},
{
"scenario_id": "inventory_selected_item_provenance",
"title": "Selected-item supplier provenance",
"question_ids": ["Q02", "Q06", "Q09", "Q10", "Q19", "Q20"],
"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_colloquial", "step_05_selected_item_documents_ui"],
"required_paraphrase_families": ["canonical", "colloquial", "ui_selected_object", "ui_selected_object_colloquial"],
"required_carryover_invariants": ["selected_object", "date_scope", "warehouse_scope", "organization_scope", "answer_shape"]
},
"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_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", "date_scope", "warehouse_scope", "organization_scope"]
},
{
"step_id": "step_03_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"
},
{
"step_id": "step_04_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_colloquial"]
},
{
"step_id": "step_05_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_colloquial"],
"analysis_context": {
"as_of_date": "2019-03-31",
"source": "binding_target_date_historical"
},
"expected_capability": "inventory_purchase_documents_for_item",
"required_carryover_invariants": ["selected_object", "date_scope"]
},
{
"step_id": "step_06_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_colloquial"],
"analysis_context": {
"as_of_date": "2019-03-31",
"source": "binding_target_date_historical"
},
"expected_capability": "inventory_purchase_documents_for_item"
}
]
},
{
"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",
"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",
"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"],
"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", "step_03_purchase_to_sale_chain"],
"required_paraphrase_families": ["canonical", "ui_selected_object"],
"required_carryover_invariants": ["selected_object", "date_scope", "answer_shape"]
},
"steps": [
{
"step_id": "step_01_account_41_historical",
"question_id": "Q04",
"node_id": "N02_account_41_snapshot",
"node_role": "root_variant",
"paraphrase_family": "canonical",
"title": "Historical account 41 anchor",
"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_02_selected_item_buyer",
"question_id": "Q16",
"node_id": "N11_selected_item_buyer",
"node_role": "critical_child",
"paraphrase_family": "canonical",
"title": "Buyer for historical selected item",
"question": "Кому был продан товар {{bindings.focus_item_historical}}",
"depends_on": ["step_01_account_41_historical"]
},
{
"step_id": "step_03_purchase_to_sale_chain",
"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"]
},
{
"step_id": "step_04_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.observed_customer_candidate}}",
"depends_on": ["step_01_account_41_historical", "step_02_selected_item_buyer"]
}
]
}
]
},
"acceptance_contract": {
"acceptance_unit": "scenario_tree",
"do_not_accept_if": [