ОРРКЕСТРАЦИЯ - Оркестрация домена: ввести step-validator и починить исторический as_of_date в item-trace

This commit is contained in:
2026-04-14 23:01:23 +03:00
parent c020ef08e1
commit 82a020e302
16 changed files with 1414 additions and 75 deletions
+258 -6
View File
@@ -41,8 +41,8 @@
"buyer_candidate": "Департамент капитального ремонта города Москвы"
},
"question_pool": {
"total_questions": 26,
"core_questions_total": 17,
"total_questions": 30,
"core_questions_total": 21,
"followup_checkpoints_total": 9,
"questions": [
{
@@ -90,6 +90,15 @@
"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": "От какого поставщика куплен товар ...",
@@ -261,6 +270,33 @@
"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": "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": "По выбранному объекту \"...\": кому был продан товар",
@@ -315,7 +351,8 @@
"covers_question_ids": [
"Q01",
"Q02",
"Q05"
"Q05",
"Q28"
],
"expected_intents": [
"inventory_on_hand_as_of_date"
@@ -360,7 +397,10 @@
"Q06",
"Q19",
"Q22",
"Q23"
"Q23",
"Q27",
"Q29",
"Q30"
],
"expected_intents": [
"inventory_purchase_provenance_for_item"
@@ -679,6 +719,7 @@
"question_ids": [
"Q01",
"Q02",
"Q28",
"Q03",
"Q04",
"Q05"
@@ -732,6 +773,31 @@
"expected_capability": "confirmed_inventory_on_hand_as_of_date",
"expected_result_mode": "confirmed_balance"
},
{
"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",
@@ -788,6 +854,9 @@
"Q26",
"Q10",
"Q19",
"Q27",
"Q29",
"Q30",
"Q20",
"Q21",
"Q22",
@@ -888,6 +957,105 @@
"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_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",
@@ -904,6 +1072,15 @@
"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",
@@ -926,7 +1103,16 @@
"as_of_date": "2019-03-31",
"source": "binding_target_date_historical"
},
"expected_capability": "inventory_purchase_provenance_for_item"
"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",
@@ -939,6 +1125,15 @@
"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"
]
},
{
@@ -957,6 +1152,15 @@
"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",
@@ -982,6 +1186,17 @@
"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",
@@ -1007,6 +1222,17 @@
"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",
@@ -1031,7 +1257,18 @@
"as_of_date": "2019-03-31",
"source": "binding_target_date_historical"
},
"expected_capability": "inventory_purchase_documents_for_item"
"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"
]
}
]
},
@@ -1541,6 +1778,21 @@
"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 `у кого купили` 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",