# Address Scenario Matrix (V1) Дата: 2026-04-13 Режим: `question_mode=address_query` (отдельно от deep-analysis) ## Scope Этот сценарный слой покрывает direct factual lookup без causal/proof reasoning: - списки документов/операций; - агрегатные срезы остатков/взаиморасчетов; - drilldown до документов по счету. Не покрывается в V1: - причинно-следственный анализ ("почему", "докажи", root-cause); - многошаговый multi-intent execution для составных вопросов; - свободный query builder вне whitelist recipe. ## Matrix (актуально по коду) | scenario_id | Пользовательский вопрос | intent | required_filters (runtime) | optional_filters | target_entity_family | recipe_id (runtime) | expected_response_type (runtime) | priority | |---|---|---|---|---|---|---|---|---| | AQ-P0-01 | Какие есть открытые договоры на дату? | `open_contracts_confirmed_as_of_date` | `as_of_date` (`as_of_date` defaulted from period end) | `period_from`, `period_to`, `organization`, `counterparty`, `contract`, `limit`, `sort` | `ACCOUNTING_REGISTER`, `DOCUMENT`, `NSI_CATALOG` | `address_open_contracts_confirmed_as_of_date_v1` | `FACTUAL_LIST` | P0 | | AQ-P0-01H | Покажи кандидаты незакрытых договоров / где спорные хвосты по договорам? | `list_open_contracts` | - | `as_of_date`, `organization`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT`, `NSI_CATALOG` | `address_open_contracts_candidates_v1` | `FACTUAL_LIST` | P0 | | AQ-P0-02 | Кому мы должны денег на сегодня? | `list_payables_counterparties` | - | `as_of_date`, `counterparty`, `contract`, `limit` | `ACCOUNTING_REGISTER` | `address_movements_payables_v1` | `FACTUAL_LIST` | P0 | | AQ-P0-03 | Кто должен нам денег на сегодня? | `list_receivables_counterparties` | - | `as_of_date`, `counterparty`, `contract`, `limit` | `ACCOUNTING_REGISTER` | `address_movements_receivables_v1` | `FACTUAL_LIST` | P0 | | AQ-P0-04 | Какой остаток по счету 60 на дату? | `account_balance_snapshot` | `account` (`as_of_date` defaulted) | `as_of_date`, `period_from`, `period_to`, `limit` | `ACCOUNTING_REGISTER`, `CHART_OF_ACCOUNTS` | `address_movements_account_snapshot_v1` | `FACTUAL_SUMMARY` | P0 | | AQ-P0-05 | Какие хвосты висят по контрагенту/договору? | `open_items_by_counterparty_or_contract` | `counterparty OR contract` | `as_of_date`, `counterparty`, `contract`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT` | `address_open_items_by_party_or_contract_v1` | `FACTUAL_LIST` | P0 | | AQ-P0-06 | Покажи документы по контрагенту X | `list_documents_by_counterparty` | `counterparty` | `period_from`, `period_to`, `as_of_date`, `organization`, `limit`, `sort` | `DOCUMENT`, `DOCUMENT_JOURNAL`, `ACCOUNTING_REGISTER` | `address_documents_by_counterparty_v1` | `FACTUAL_LIST` | P0 | | AQ-P0-07 | Покажи банковские операции по контрагенту X | `bank_operations_by_counterparty` | `counterparty` | `period_from`, `period_to`, `as_of_date`, `organization`, `limit`, `sort` | `DOCUMENT`, `DOCUMENT_JOURNAL`, `ACCOUNTING_REGISTER` | `address_bank_operations_by_counterparty_v1` | `FACTUAL_LIST` | P0 | | AQ-P0-08 | Покажи документы по договору Y | `list_documents_by_contract` | `contract` | `period_from`, `period_to`, `as_of_date`, `organization`, `counterparty`, `limit`, `sort` | `DOCUMENT`, `DOCUMENT_JOURNAL`, `ACCOUNTING_REGISTER`, `NSI_CATALOG` | `address_documents_by_contract_v1` | `FACTUAL_LIST` | P0 | | AQ-P0-08B | Покажи банковские операции по договору Y | `bank_operations_by_contract` | `contract` | `period_from`, `period_to`, `as_of_date`, `organization`, `counterparty`, `limit`, `sort` | `DOCUMENT`, `DOCUMENT_JOURNAL`, `ACCOUNTING_REGISTER`, `NSI_CATALOG` | `address_bank_operations_by_contract_v1` | `FACTUAL_LIST` | P0 | | AQ-P0-09 | Какие документы формируют остаток по счету 62? | `documents_forming_balance` | `account` + `as_of_date` (`as_of_date` defaulted) | `organization`, `counterparty`, `contract`, `period_from`, `period_to`, `limit`, `sort` | `ACCOUNTING_REGISTER`, `DOCUMENT` | `address_documents_forming_balance_v1` | `FACTUAL_LIST` | P0 | | AQ-B1-10 | За какие годы/месяцы в базе есть активность? | `period_coverage_profile` | - | `period_from`, `period_to`, `organization`, `limit` | `ACCOUNTING_REGISTER` | `address_period_coverage_profile_v1` | `FACTUAL_SUMMARY` | B1 | | AQ-B1-11 | Какие типы документов чаще всего и какие разделы учета заполнены/пустые? | `document_type_and_account_section_profile` | - | `period_from`, `period_to`, `organization`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT` | `address_document_type_and_account_section_profile_v1` | `FACTUAL_SUMMARY` | B1 | | AQ-P1-10 | Дай обороты по счету 51 за период | `account_turnover_snapshot` | `account`, `period_from`, `period_to` | `organization`, `counterparty`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT` | - (not implemented) | `LIMITED_WITH_REASON` | P1 | | AQ-P1-11 | Дай список документов по типу за период | `list_documents_by_type` | `document_type`, `period_from`, `period_to` | `organization`, `counterparty`, `contract`, `limit` | `DOCUMENT`, `DOCUMENT_JOURNAL` | - (not implemented) | `LIMITED_WITH_REASON` | P1 | | AQ-P2-12 | Покажи технические константы конфигурации | `unsupported_for_v1` | - | - | `CONSTANT` | - | `LIMITED_WITH_REASON` | P2 | ## Runtime rules (актуально по коду) - Если mode распознан как `address_query`, ответ строится через whitelist recipe + MCP live path. - Если `shape=EXPLAIN_OR_REASON`, запрос не идет в address lane (handoff в deep-analysis). - Если обязательные фильтры не извлечены, возвращается `LIMITED_WITH_REASON` с `limited_reason_category=missing_anchor`. - Для `open_contracts_confirmed_as_of_date` запрещена silent-подмена на `list_open_contracts`; при недоступности exact-ответа допустим только честный `LIMITED_WITH_REASON`. - Для `account_balance_snapshot` и `documents_forming_balance`: - `as_of_date` берется из `period_to`, если период задан; - иначе default на текущую дату runtime. - Для `documents/bank by counterparty|contract` период по умолчанию не форсируется (all-time), с runtime лимитами и fallback-логикой. - `COMPOUND_FACTUAL_QUERY` пока только детектируется; multi-intent execution не реализован. ## Runtime status note (2026-04-13) Реально реализованы в runtime: - `period_coverage_profile` - `document_type_and_account_section_profile` - `open_contracts_confirmed_as_of_date` - `list_open_contracts` (diagnostic heuristic) - `open_items_by_counterparty_or_contract` - `list_documents_by_counterparty` - `bank_operations_by_counterparty` - `list_documents_by_contract` - `bank_operations_by_contract` - `account_balance_snapshot` - `documents_forming_balance` - `list_payables_counterparties` - `list_receivables_counterparties` Остаются вне runtime V1: - `account_turnover_snapshot` - `list_documents_by_type`