ЮИ - Перенести настройки ассистента в управление автопрогонами и убрать верхний режим Ассистент

This commit is contained in:
2026-04-16 20:18:23 +03:00
parent f1333c457e
commit f3255cb3b8
37 changed files with 2987 additions and 166 deletions
@@ -0,0 +1,366 @@
{
"schema_version": "domain_truth_harness_spec_v1",
"scenario_id": "address_truth_harness_test2",
"domain": "address_mixed_followup",
"title": "Exact replay and truth review for test2 mixed follow-up chain",
"description": "Strict sequential replay of the exact user wording from test2.txt with human-answer and technical-debug review.",
"source_export": "C:\\Users\\DCTOUCH\\Desktop\\test2.txt",
"bindings": {},
"steps": [
{
"step_id": "step_01_chat_opening",
"title": "Casual opener",
"question": "йо чо как",
"criticality": "info",
"allowed_reply_types": [
"factual_with_explanation",
"factual"
],
"required_answer_patterns_any": [
"(?i)1с",
"(?i)помогаю",
"(?i)готов"
],
"notes": "Информационный шаг: важно не ломать живой режим, но это не главный бизнес-блокер."
},
{
"step_id": "step_02_receivables_march_2020",
"title": "Receivables at March 2020",
"question": "кто нам должен на март 2020",
"allowed_reply_types": [
"factual"
],
"expected_intents": [
"receivables_confirmed_as_of_date"
],
"expected_capability": "confirmed_receivables_as_of_date",
"expected_result_mode": "confirmed_balance",
"required_filters": {
"as_of_date": "2020-03-31",
"period_from": "2020-03-01",
"period_to": "2020-03-31"
},
"required_direct_answer_patterns_any": [
"31\\.03\\.2020",
"(?i)дебиторск"
],
"notes": "Базовый корневой финансовый вопрос должен отработать точно и задать март 2020 как carryover-якорь."
},
{
"step_id": "step_03_inventory_same_date",
"title": "Inventory on the same date",
"question": "остатки по складу на эту же дату",
"allowed_reply_types": [
"factual"
],
"expected_intents": [
"inventory_on_hand_as_of_date"
],
"expected_capability": "confirmed_inventory_on_hand_as_of_date",
"expected_result_mode": "confirmed_balance",
"required_filters": {
"as_of_date": "{{step_02_receivables_march_2020.filters.as_of_date}}",
"period_from": "{{step_02_receivables_march_2020.filters.period_from}}",
"period_to": "{{step_02_receivables_march_2020.filters.period_to}}"
},
"required_direct_answer_patterns_any": [
"31\\.03\\.2020",
"(?i)на складе"
],
"notes": "Смена контура receivables -> inventory должна сохранить ту же дату, без дополнительного ручного уточнения."
},
{
"step_id": "step_04_selected_item_seller",
"title": "Selected item purchase provenance",
"question": "По выбранному объекту \"Четки Пост (84*117)\": кто продавец",
"allowed_reply_types": [
"factual"
],
"expected_intents": [
"inventory_purchase_provenance_for_item"
],
"required_state_objects": [
"focus_object"
],
"required_carryover_invariants": [
"focus_object"
],
"forbidden_capabilities": [
"confirmed_inventory_on_hand_as_of_date"
],
"forbidden_recipes": [
"address_inventory_on_hand_as_of_date_v1"
],
"forbidden_filter_keys": [
"as_of_date",
"period_from",
"period_to"
],
"forbidden_direct_answer_patterns": [
"^На 31\\.03\\.2020 на складе",
"(?i)^сейчас не дам прямой адресный ответ"
],
"notes": "Выбранная позиция не должна реплеить складской срез; нужен именно ответ про поставщика/продавца."
},
{
"step_id": "step_05_selected_item_sale_trace",
"title": "Selected item buyer",
"question": "По выбранному объекту \"Четки Пост (84*117)\": кому мы продали эту хуйню",
"allowed_reply_types": [
"factual",
"partial_coverage"
],
"allowed_limited_reason_categories": [
"empty_match"
],
"expected_intents": [
"inventory_sale_trace_for_item"
],
"required_state_objects": [
"focus_object"
],
"required_carryover_invariants": [
"focus_object"
],
"forbidden_filter_keys": [
"as_of_date",
"period_from",
"period_to"
],
"forbidden_direct_answer_patterns": [
"(?i)^по текущим условиям в доступном срезе данных совпадений не нашлось",
"(?i)^сейчас не дам прямой адресный ответ"
],
"notes": "След продажи по выбранной позиции не должен быть зажат складским snapshot-окном. Если по live данным подтвержденных продаж нет, честный partial_coverage с empty_match допустим, но только при правильном sale-trace routing и сохраненном focus_object."
},
{
"step_id": "step_06_selected_item_purchase_followup",
"title": "Selected item purchase follow-up",
"question": "а купили у кого известно?",
"allowed_reply_types": [
"factual"
],
"expected_intents": [
"inventory_purchase_provenance_for_item"
],
"required_state_objects": [
"focus_object"
],
"required_carryover_invariants": [
"focus_object"
],
"forbidden_filter_keys": [
"as_of_date",
"period_from",
"period_to"
],
"forbidden_direct_answer_patterns": [
"(?i)^для такого формата запроса нужен более широкий аналитический контур",
"(?i)^сейчас не дам прямой адресный ответ"
],
"notes": "Короткий follow-up после выбранной позиции должен остаться в том же item-contour, а не свалиться в unknown."
},
{
"step_id": "step_07_inventory_july_2019",
"title": "Inventory at July 2019",
"question": "остатки на июль 2019",
"allowed_reply_types": [
"factual"
],
"expected_intents": [
"inventory_on_hand_as_of_date"
],
"expected_capability": "confirmed_inventory_on_hand_as_of_date",
"expected_result_mode": "confirmed_balance",
"required_filters": {
"as_of_date": "2019-07-31",
"period_from": "2019-07-01",
"period_to": "2019-07-31"
},
"required_direct_answer_patterns_any": [
"31\\.07\\.2019",
"(?i)на складе"
],
"forbidden_direct_answer_patterns": [
"(?i)^сейчас не дам прямой адресный ответ"
],
"notes": "После провала provenance-среза система все равно должна уметь коротко вернуть root inventory frame по явному месяцу."
},
{
"step_id": "step_08_inventory_september_2019",
"title": "Inventory at September 2019",
"question": "сентябрь 2019",
"allowed_reply_types": [
"factual"
],
"expected_intents": [
"inventory_on_hand_as_of_date"
],
"expected_capability": "confirmed_inventory_on_hand_as_of_date",
"expected_result_mode": "confirmed_balance",
"required_filters": {
"as_of_date": "2019-09-30",
"period_from": "2019-09-01",
"period_to": "2019-09-30"
},
"required_direct_answer_patterns_any": [
"30\\.09\\.2019",
"(?i)на складе"
],
"forbidden_direct_answer_patterns": [
"(?i)^сейчас не дам прямой адресный ответ"
],
"notes": "Короткое bare-month follow-up должно удерживать складской корень без дополнительной расшифровки."
},
{
"step_id": "step_09_inventory_march_2020",
"title": "Inventory at March 2020",
"question": "март 2020",
"allowed_reply_types": [
"factual"
],
"expected_intents": [
"inventory_on_hand_as_of_date"
],
"expected_capability": "confirmed_inventory_on_hand_as_of_date",
"expected_result_mode": "confirmed_balance",
"required_filters": {
"as_of_date": "2020-03-31",
"period_from": "2020-03-01",
"period_to": "2020-03-31"
},
"required_direct_answer_patterns_any": [
"31\\.03\\.2020",
"(?i)на складе"
],
"forbidden_direct_answer_patterns": [
"(?i)^сейчас не дам прямой адресный ответ"
],
"notes": "Возврат на март 2020 должен снова дать точный складской срез, а не unknown/partial."
},
{
"step_id": "step_10_inventory_same_date_negative_wording",
"title": "Inventory same date with noisy wording",
"question": "остатков на складе нет на эту дату?",
"allowed_reply_types": [
"factual"
],
"expected_intents": [
"inventory_on_hand_as_of_date"
],
"expected_capability": "confirmed_inventory_on_hand_as_of_date",
"expected_result_mode": "confirmed_balance",
"required_filters": {
"as_of_date": "{{step_09_inventory_march_2020.filters.as_of_date}}",
"period_from": "{{step_09_inventory_march_2020.filters.period_from}}",
"period_to": "{{step_09_inventory_march_2020.filters.period_to}}"
},
"forbidden_filter_values": {
"warehouse": [
"нет на эту дату"
]
},
"required_direct_answer_patterns_any": [
"31\\.03\\.2020",
"(?i)на складе"
],
"forbidden_direct_answer_patterns": [
"(?i)^сейчас не дам прямой адресный ответ"
],
"notes": "Разговорная частица `нет на эту дату` не должна становиться warehouse-anchor."
},
{
"step_id": "step_11_vat_same_date",
"title": "VAT on the same date",
"question": "ндс какой надо заплатить на эту же дату",
"allowed_reply_types": [
"factual"
],
"expected_intents": [
"vat_liability_confirmed_for_tax_period"
],
"expected_capability": "confirmed_vat_liability_for_tax_period",
"required_filters": {
"period_from": "{{step_09_inventory_march_2020.filters.period_from}}",
"period_to": "{{step_09_inventory_march_2020.filters.period_to}}"
},
"required_direct_answer_patterns_any": [
"(?i)ндс"
],
"notes": "Pivot inventory -> VAT по `на эту же дату` должен привязаться к марту 2020, а не к мусорному складскому anchor."
},
{
"step_id": "step_12_vat_may_2016",
"title": "VAT at May 2016",
"question": "а на май 2016",
"allowed_reply_types": [
"factual"
],
"expected_intents": [
"vat_liability_confirmed_for_tax_period"
],
"expected_capability": "confirmed_vat_liability_for_tax_period",
"forbidden_filter_values": {
"period_from": [
"{{step_11_vat_same_date.filters.period_from}}"
],
"period_to": [
"{{step_11_vat_same_date.filters.period_to}}"
]
},
"required_answer_patterns_any": [
"2016",
"(?i)налоговый период"
],
"required_direct_answer_patterns_any": [
"(?i)ндс"
],
"notes": "Короткий temporal follow-up внутри VAT-frame должен уйти с марта 2020 на май 2016."
},
{
"step_id": "step_13_receivables_same_date_after_vat_2016",
"title": "Receivables on the carried 2016 date",
"question": "кто нам должен денег на эту дату",
"allowed_reply_types": [
"factual"
],
"expected_intents": [
"receivables_confirmed_as_of_date"
],
"expected_capability": "confirmed_receivables_as_of_date",
"required_filter_within_previous_step_period": {
"as_of_date": "step_12_vat_may_2016"
},
"required_answer_patterns_any": [
"2016"
],
"required_direct_answer_patterns_any": [
"(?i)дебиторск"
],
"forbidden_direct_answer_patterns": [
"31\\.03\\.2020"
],
"notes": "Фраза `на эту дату` после VAT 2016 не должна откатываться обратно на март 2020."
},
{
"step_id": "step_14_receivables_today",
"title": "Receivables today",
"question": "а на сегодня",
"allowed_reply_types": [
"factual"
],
"expected_intents": [
"receivables_confirmed_as_of_date"
],
"expected_capability": "confirmed_receivables_as_of_date",
"required_filters": {
"as_of_date": "{{runtime.today_iso}}"
},
"required_direct_answer_patterns_any": [
"{{runtime.today_dot_regex}}",
"(?i)дебиторск"
],
"notes": "Последний шаг нужен как sanity-check: `на сегодня` должен честно пересчитать уже на текущую дату прогона."
}
]
}