NODEDC_1C/docs/orchestration/address_truth_harness_test2...

367 lines
14 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"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: `на сегодня` должен честно пересчитать уже на текущую дату прогона."
}
]
}