АДРЕСНЫЙ РЕЖИМ - M2.3c тюнинг резолвинга и фильтров адресных запросов, поэтапная диагностика и аудит фильтрации по счету
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
- `runtime_readiness_matrix_v1.md` - матрица structural vs runtime readiness.
|
||||
- `known_positive_live_suite_v1.md` - базовый template positive-evidence suite.
|
||||
- `data_aware_positive_acceptance_suite_v1.md` - M2.3 canonical guide для curated live acceptance.
|
||||
- `curated_positive_live_suite_v1.md` - M2.3c curated suite (counterparty/account split + negative twins).
|
||||
- `address_query_bootstrap_report_2026-03-29.md` - итоговая сводка bootstrap этапа.
|
||||
|
||||
## Связанные run-паки
|
||||
@@ -21,4 +22,5 @@
|
||||
- `docs/ADDRESS/runs/2026-03-29_Address_Query_Runtime_V1_M2_3_DocumentsFormingBalance_DataAwareAcceptance/`
|
||||
- `docs/ADDRESS/runs/2026-03-29_Address_Query_Runtime_V1_M2_3A_Stage_Diagnostic_Materialization/`
|
||||
- `docs/ADDRESS/runs/2026-03-29_Address_Query_Runtime_V1_M2_3B_AccountScope_Mode_Tuning/`
|
||||
- `docs/ADDRESS/runs/2026-03-29_Address_Query_Runtime_V1_M2_3C_Resolver_Filter_Tuning_And_AccountScope_Audit/`
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Address Runtime Contracts V1 (M2.3b)
|
||||
# Address Runtime Contracts V1 (M2.3c)
|
||||
|
||||
Дата: 2026-03-29
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
- `ambiguity_count`
|
||||
- MCP/evidence flow block:
|
||||
- `mcp_call_status`
|
||||
- `mcp_call_status_legacy`
|
||||
- `match_failure_stage`
|
||||
- `match_failure_reason`
|
||||
- `rows_fetched`
|
||||
- `raw_rows_received`
|
||||
- `rows_after_account_scope`
|
||||
@@ -46,6 +49,12 @@
|
||||
- `rows_matched`
|
||||
- `raw_row_keys_sample`
|
||||
- `materialization_drop_reason`
|
||||
- account-scope audit block:
|
||||
- `account_token_raw`
|
||||
- `account_token_normalized`
|
||||
- `account_scope_fields_checked`
|
||||
- `account_scope_match_strategy`
|
||||
- `account_scope_drop_reason`
|
||||
- `response_type`
|
||||
- `limited_reason_category`
|
||||
- `fallback_reason`
|
||||
@@ -85,16 +94,20 @@
|
||||
- `DEEP_ONLY`
|
||||
- `UNKNOWN`
|
||||
|
||||
## MCP Stage Status Taxonomy (M2.3a)
|
||||
## MCP Stage Status Taxonomy (M2.3c)
|
||||
|
||||
- `skipped`
|
||||
- `error`
|
||||
- `no_raw_rows`
|
||||
- `raw_rows_received_but_not_materialized`
|
||||
- `materialized_but_not_matched`
|
||||
- `materialized_but_not_anchor_matched`
|
||||
- `materialized_but_filtered_out_by_recipe`
|
||||
- `matched_non_empty`
|
||||
|
||||
## Materialization Drop Reasons (M2.3a)
|
||||
Legacy compatibility:
|
||||
- `mcp_call_status_legacy` may still report `materialized_but_not_matched` for backward-compatible analytics.
|
||||
|
||||
## Materialization Drop Reasons (M2.3c)
|
||||
|
||||
- `none`
|
||||
- `dropped_by_account_scope_filter`
|
||||
@@ -103,15 +116,21 @@
|
||||
- `missing_registrator_field`
|
||||
- `unknown_row_shape`
|
||||
|
||||
## Account Scope Strategy (M2.3b)
|
||||
## Account Scope Strategy (M2.3c)
|
||||
|
||||
- `strict` - account scope is mandatory and applied as a hard filter.
|
||||
- `preferred` - account scope is applied first; if it yields zero rows while raw rows exist, runtime falls back to raw rows and continues matching.
|
||||
|
||||
## M2.3c Runtime Snapshot
|
||||
|
||||
- Counterparty intents now have confirmed `matched_non_empty` cases in curated live suite.
|
||||
- Account intents still mostly stop at `raw_rows_received_but_not_materialized`.
|
||||
- Guardrails remain unchanged: no free query generation, no false factual outputs.
|
||||
|
||||
## Compound Query Note
|
||||
|
||||
- `COMPOUND_FACTUAL_QUERY` currently remains detection-only.
|
||||
- Multi-intent decomposition execution is planned for next increment.
|
||||
- Multi-intent decomposition execution is planned for the next increment.
|
||||
|
||||
## Guardrails
|
||||
|
||||
@@ -119,5 +138,3 @@
|
||||
- read-only MCP
|
||||
- no free-form query generation
|
||||
- no silent source substitution
|
||||
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
- Если обязательные фильтры не извлечены, вернуть `LIMITED_WITH_REASON` с указанием недостающих параметров.
|
||||
- Если вопрос требует causal/proof reasoning, перевести в deep-analysis path.
|
||||
- Для `as_of_date` по умолчанию используется текущая дата runtime (на момент этого документа: 2026-03-29), если пользователь явно не задал дату.
|
||||
## Runtime status note (M2.3b)
|
||||
## Runtime status note (M2.3c)
|
||||
|
||||
Implemented in live runtime now:
|
||||
- `list_documents_by_counterparty`
|
||||
@@ -53,6 +53,6 @@ Still not implemented in runtime:
|
||||
|
||||
Stage diagnostic note:
|
||||
- strict account intents still show `raw_rows_received > 0`, but `rows_after_account_scope = 0`;
|
||||
- preferred counterparty intents now reach `rows_materialized > 0`, but rows still drop at recipe/anchor filter stage;
|
||||
- non-empty factual acceptance now requires resolver/filter tuning after materialization.
|
||||
- counterparty intents now have curated `matched_non_empty` cases after resolver/filter tuning;
|
||||
- account family still needs account-scope/materialization fix before first stable non-empty account case.
|
||||
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
# Curated Positive Live Suite V1 (M2.3c)
|
||||
|
||||
Дата: 2026-03-29
|
||||
|
||||
## Назначение
|
||||
|
||||
Этот suite нужен для acceptance live-runtime без хардкода бизнес-объектов в продуктовой логике.
|
||||
|
||||
- runtime остается `data-agnostic`
|
||||
- acceptance остается `data-aware`
|
||||
|
||||
То есть набор кейсов собирается по exploratory live pass, но не вшивается в runtime-правила.
|
||||
|
||||
## Семейства в M2.3c
|
||||
|
||||
1. `counterparty`
|
||||
2. `account`
|
||||
|
||||
## Curated Case Set
|
||||
|
||||
| case_id | family | question pattern | intent | expected |
|
||||
|---|---|---|---|---|
|
||||
| C1 | counterparty | documents by counterparty (known non-empty anchor + period) | `list_documents_by_counterparty` | `FACTUAL_LIST`, non-empty |
|
||||
| C2 | counterparty | bank operations by counterparty (known non-empty anchor + period) | `bank_operations_by_counterparty` | `FACTUAL_LIST`, non-empty |
|
||||
| C3 | counterparty | documents by counterparty (negative twin) | `list_documents_by_counterparty` | `LIMITED_WITH_REASON` |
|
||||
| C4 | counterparty | bank ops by counterparty (negative twin) | `bank_operations_by_counterparty` | `LIMITED_WITH_REASON` |
|
||||
| C5 | account | account balance snapshot by account/date | `account_balance_snapshot` | stage-diagnostic limited |
|
||||
| C6 | account | documents forming balance by account/date | `documents_forming_balance` | stage-diagnostic limited |
|
||||
| C7 | account | documents forming balance by account/date (variant) | `documents_forming_balance` | stage-diagnostic limited |
|
||||
| C8 | account | account balance snapshot by account/date (variant) | `account_balance_snapshot` | stage-diagnostic limited |
|
||||
|
||||
## Что проверяем этим suite
|
||||
|
||||
- есть ли реальные `matched_non_empty` в counterparty-family;
|
||||
- сохраняется ли `false_factual_rate = 0` на negative twins;
|
||||
- где именно застревает account-family (`raw_rows_received_but_not_materialized` vs later stages).
|
||||
|
||||
## Acceptance Rules
|
||||
|
||||
- минимум один non-empty factual для каждого counterparty intent;
|
||||
- zero false-factual;
|
||||
- account-family must be localized with explicit stage/failure reason (без размытого limited).
|
||||
|
||||
## Где лежат артефакты
|
||||
|
||||
- run-pack: `docs/ADDRESS/runs/2026-03-29_Address_Query_Runtime_V1_M2_3C_Resolver_Filter_Tuning_And_AccountScope_Audit/`
|
||||
- diagnostic matrix: `stage_diagnostic_matrix.md`
|
||||
- case matrix: `curated_positive_case_matrix.md`
|
||||
Binary file not shown.
@@ -97,9 +97,20 @@
|
||||
- Runtime вызывает MCP proxy (`/api/execute_query`) только с query-template из recipe и параметрами после валидации.
|
||||
- Для V1 все recipe выполняются в `read-only` режиме.
|
||||
- Ограничения на выборку (`limit`) и сортировки фиксируются recipe-контрактом, а не свободным текстом вопроса.
|
||||
## 8) Account Scope Strategy (M2.3b)
|
||||
## 8) Account Scope Strategy (M2.3c)
|
||||
|
||||
- `account_balance_snapshot` and `documents_forming_balance` use `strict` account scope.
|
||||
- counterparty-oriented recipes use `preferred` account scope with runtime fallback to raw rows when scope gives zero rows.
|
||||
- this keeps account-intent precision while preventing blind row loss on party intents.
|
||||
|
||||
## 9) Runtime Query Template Notes (M2.3c)
|
||||
|
||||
- `address.documents.by_counterparty` and `address.bank_ops.by_counterparty` use a dedicated `bank_docs` live query template.
|
||||
- account intents (`address.account.balance_snapshot`, `address.balance.drilldown_documents`) continue using movement-oriented query template with strict account scope.
|
||||
- stage diagnostics are tracked with split statuses:
|
||||
- `raw_rows_received_but_not_materialized`
|
||||
- `materialized_but_not_anchor_matched`
|
||||
- `materialized_but_filtered_out_by_recipe`
|
||||
- `matched_non_empty`
|
||||
- for backward compatibility analytics, legacy status is emitted as `mcp_call_status_legacy`.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Runtime Readiness Matrix V1 (M2.3b)
|
||||
# Runtime Readiness Matrix V1 (M2.3c)
|
||||
|
||||
Дата: 2026-03-29
|
||||
|
||||
@@ -7,45 +7,29 @@
|
||||
## Статусы
|
||||
|
||||
- `STRUCTURALLY_VISIBLE` - сущность подтверждена в snapshot/inventory.
|
||||
- `LIVE_QUERYABLE` - в текущем live path можно дать factual без натяжек.
|
||||
- `LIVE_QUERYABLE_WITH_LIMITS` - live path работает, но часто нужен дополнительный anchor.
|
||||
- `REQUIRES_SPECIALIZED_RECIPE` - базовый movement recipe недостаточен для materialization.
|
||||
- `LIVE_QUERYABLE` - в текущем live path можно давать factual ответ стабильно.
|
||||
- `LIVE_QUERYABLE_WITH_LIMITS` - live path работает, но результат зависит от anchor/period precision.
|
||||
- `REQUIRES_SPECIALIZED_RECIPE` - базовый recipe-контур не покрывает сценарий.
|
||||
- `DEEP_ONLY` - сценарий не относится к address V1.
|
||||
|
||||
## Матрица (P0/P1)
|
||||
|
||||
| scenario_id | scenario | structural_readiness | runtime_readiness | current_blocker | next_action |
|
||||
|---|---|---|---|---|---|
|
||||
| AQ-P0-01 | list_open_contracts | STRUCTURALLY_VISIBLE | REQUIRES_SPECIALIZED_RECIPE | weak contract anchors in movement rows | добавить object-aware recipe (`documents/contracts`) |
|
||||
| AQ-P0-02 | list_payables_counterparties | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | empty matches on narrow filters | расширить live evidence pack по контрагентам |
|
||||
| AQ-P0-03 | list_receivables_counterparties | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | empty matches on narrow filters | улучшить фильтрацию и fallback hints |
|
||||
| AQ-P0-04 | account_balance_snapshot | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | dry-run frequently returns `empty_match` on broad `today` filters | lock data-aware positive account/date fixtures |
|
||||
| AQ-P0-05 | open_items_by_counterparty_or_contract (counterparty) | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | missing counterparty anchor in short phrases | усилить anchor-first extraction |
|
||||
| AQ-P0-06 | open_items_by_counterparty_or_contract (contract) | STRUCTURALLY_VISIBLE | REQUIRES_SPECIALIZED_RECIPE | movement rows often miss contract linkage | двухшаговый path: anchor resolution -> focused recipe |
|
||||
| AQ-P0-07 | documents_by_counterparty | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | implemented path, but dry-run still often `empty_match` on current anchors/period | expand data-aware positive fixtures and improve resolver targeting |
|
||||
| AQ-P0-07B | bank_operations_by_counterparty | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | implemented path, but dry-run still often `empty_match` on current anchors/period | expand data-aware positive fixtures and tighten bank-doc targeting |
|
||||
| AQ-P0-08 | documents_by_contract | STRUCTURALLY_VISIBLE | REQUIRES_SPECIALIZED_RECIPE | by-contract live recipe not implemented in runtime V1 | add contract-aware document-list recipe with resolver confidence gate |
|
||||
| AQ-P0-09 | documents_forming_balance | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | implemented, but stage diagnostic shows loss before materialization | diagnose and tune account-scope filtering for live recipes |
|
||||
| AQ-P1-10 | account_turnover_snapshot | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | not in current intent set | расширение intents V1.1 |
|
||||
| AQ-P0-01 | list_open_contracts | STRUCTURALLY_VISIBLE | REQUIRES_SPECIALIZED_RECIPE | weak contract anchors in current live rows | add contract-aware document recipe + resolver confidence gate |
|
||||
| AQ-P0-02 | list_payables_counterparties | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | broad prompts still produce sparse matches | keep curated positive suite and tighten period hints |
|
||||
| AQ-P0-03 | list_receivables_counterparties | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | broad prompts still produce sparse matches | keep curated positive suite and tighten period hints |
|
||||
| AQ-P0-04 | account_balance_snapshot | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | `raw_rows_received > 0`, but account scope drops rows before materialization | account token/shape audit and account field mapping fix |
|
||||
| AQ-P0-05 | open_items_by_counterparty_or_contract (counterparty) | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | requires explicit counterparty anchor for stable non-empty | anchor refinement and resolver ambiguity handling |
|
||||
| AQ-P0-06 | open_items_by_counterparty_or_contract (contract) | STRUCTURALLY_VISIBLE | REQUIRES_SPECIALIZED_RECIPE | movement rows often miss contract linkage | two-step path: contract resolver -> focused recipe |
|
||||
| AQ-P0-07 | documents_by_counterparty | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | positive cases confirmed, but narrow/broad anchor variants still fragile | continue resolver/filter tuning and parity checks |
|
||||
| AQ-P0-07B | bank_operations_by_counterparty | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | positive cases confirmed, but narrow/broad anchor variants still fragile | continue resolver/filter tuning and bank-doc visibility checks |
|
||||
| AQ-P0-08 | documents_by_contract | STRUCTURALLY_VISIBLE | REQUIRES_SPECIALIZED_RECIPE | by-contract live recipe not implemented in runtime V1 | implement contract resolver + focused recipe |
|
||||
| AQ-P0-09 | documents_forming_balance | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | implemented, but account-family still blocked before materialization | account scope/materialization diagnostics and account token normalization |
|
||||
| AQ-P1-10 | account_turnover_snapshot | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | not in current intent set | extend intents in V1.1 |
|
||||
|
||||
## Примечание
|
||||
|
||||
Матрица разделяет "видимость сущности в inventory" и "операционную готовность live-runtime".
|
||||
Это обязательная опора для приоритезации Sprint B, чтобы не путать structural coverage и runtime proofability.
|
||||
### Sync note (M2.3b -> live dry-run)
|
||||
|
||||
`account_balance_snapshot` intentionally remains `LIVE_QUERYABLE_WITH_LIMITS`.
|
||||
Reason: dry-run still shows repeatable `empty_match` on broad `as_of=today` prompts.
|
||||
Promote to `LIVE_QUERYABLE` only after data-aware positive live cases are stable.
|
||||
|
||||
`documents_forming_balance` is implemented with strict account-scope path.
|
||||
Validation should be based on data-aware acceptance suite, not only safety dry-run.
|
||||
|
||||
Stage-diagnostic replay (M2.3b) shows split-stage behavior:
|
||||
`D1-D3`: `raw_rows_received > 0` with `rows_after_account_scope = 0` (strict account intents).
|
||||
`D4-D5`: `rows_after_account_scope > 0` and `rows_materialized > 0`, but `rows_after_recipe_filter = 0` (preferred mode progressed to matching stage).
|
||||
Current bottleneck moved forward for non-account intents: resolver/filter matching after materialization.
|
||||
|
||||
`COMPOUND_FACTUAL_QUERY` currently remains detection-only.
|
||||
Multi-intent decomposition execution is not part of M2.3b and tracked for next increment.
|
||||
## Sync Note (M2.3c)
|
||||
|
||||
- `documents_by_counterparty` and `bank_operations_by_counterparty` now have curated `matched_non_empty` cases.
|
||||
- `account_balance_snapshot` and `documents_forming_balance` remain limited because rows are dropped before materialization.
|
||||
- `COMPOUND_FACTUAL_QUERY` is detection-only and does not execute multi-intent decomposition yet.
|
||||
|
||||
BIN
Binary file not shown.
+17
@@ -0,0 +1,17 @@
|
||||
# 2026-03-29_Address_Query_Runtime_V1_M2_3C_Resolver_Filter_Tuning_And_AccountScope_Audit
|
||||
|
||||
## Scope
|
||||
- Track A: resolver/filter tuning for counterparty intents.
|
||||
- Track B: account-scope/materialization audit for account intents.
|
||||
- Curated positive live suite for acceptance.
|
||||
|
||||
## Included artifacts
|
||||
- `run_summary.json`
|
||||
- `before_after_metrics.json`
|
||||
- `curated_positive_case_matrix.md`
|
||||
- `assistant_window_dry_run_results.json`
|
||||
- `stage_diagnostic_matrix.md`
|
||||
- `debug_payloads/`
|
||||
- `live_call_inventory_address.json`
|
||||
- `smoke_checks.md`
|
||||
- `changed_files.txt`
|
||||
+566
@@ -0,0 +1,566 @@
|
||||
{
|
||||
"generated_at": "2026-03-29T18:30:51.853Z",
|
||||
"run_id": "2026-03-29_Address_Query_Runtime_V1_M2_3C_Resolver_Filter_Tuning_And_AccountScope_Audit",
|
||||
"cases": [
|
||||
{
|
||||
"id": "C1",
|
||||
"family": "counterparty",
|
||||
"question": "show documents by counterparty svk from 2020-07-01 to 2020-07-31",
|
||||
"expected_intent": "list_documents_by_counterparty",
|
||||
"expected_response_type": "FACTUAL_LIST",
|
||||
"expected_non_empty": true,
|
||||
"handled": true,
|
||||
"response_type": "FACTUAL_LIST",
|
||||
"reply_type": "factual",
|
||||
"detected_mode": "address_query",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "list_documents_by_counterparty",
|
||||
"intent_aligned": true,
|
||||
"selected_recipe": "address_documents_by_counterparty_v1",
|
||||
"selected_recipe_ids": [],
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"counterparty": "svk",
|
||||
"period_from": "2020-07-01",
|
||||
"period_to": "2020-07-31"
|
||||
},
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"account_scope_mode": "preferred",
|
||||
"account_scope_fallback_applied": false,
|
||||
"mcp_call_status": "matched_non_empty",
|
||||
"mcp_call_status_legacy": "matched_non_empty",
|
||||
"stage_interpretation": "Rows passed all stages and produced factual non-empty output.",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 19,
|
||||
"raw_rows_received": 19,
|
||||
"rows_after_account_scope": 3,
|
||||
"rows_materialized": 3,
|
||||
"rows_after_recipe_filter": 2,
|
||||
"rows_matched": 2,
|
||||
"materialization_drop_reason": "none",
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Контрагент",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"Amount"
|
||||
],
|
||||
"anchor_type": "counterparty",
|
||||
"anchor_value_raw": "svk",
|
||||
"anchor_value_resolved": "Группа СВК",
|
||||
"resolver_confidence": "medium",
|
||||
"ambiguity_count": 0,
|
||||
"account_token_raw": null,
|
||||
"account_token_normalized": null,
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "not_applicable",
|
||||
"limited_reason_category": null,
|
||||
"response_is_non_empty": true,
|
||||
"assistant_reply_preview": "",
|
||||
"elapsed_ms": 513,
|
||||
"generated_at": "2026-03-29T18:30:44.406Z"
|
||||
},
|
||||
{
|
||||
"id": "C2",
|
||||
"family": "counterparty",
|
||||
"question": "show bank operations by counterparty svk from 2020-07-01 to 2020-07-31",
|
||||
"expected_intent": "bank_operations_by_counterparty",
|
||||
"expected_response_type": "FACTUAL_LIST",
|
||||
"expected_non_empty": true,
|
||||
"handled": true,
|
||||
"response_type": "FACTUAL_LIST",
|
||||
"reply_type": "factual",
|
||||
"detected_mode": "address_query",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "bank_operations_by_counterparty",
|
||||
"intent_aligned": true,
|
||||
"selected_recipe": "address_bank_operations_by_counterparty_v1",
|
||||
"selected_recipe_ids": [],
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"counterparty": "svk",
|
||||
"period_from": "2020-07-01",
|
||||
"period_to": "2020-07-31"
|
||||
},
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"account_scope_mode": "preferred",
|
||||
"account_scope_fallback_applied": false,
|
||||
"mcp_call_status": "matched_non_empty",
|
||||
"mcp_call_status_legacy": "matched_non_empty",
|
||||
"stage_interpretation": "Rows passed all stages and produced factual non-empty output.",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 19,
|
||||
"raw_rows_received": 19,
|
||||
"rows_after_account_scope": 3,
|
||||
"rows_materialized": 3,
|
||||
"rows_after_recipe_filter": 2,
|
||||
"rows_matched": 2,
|
||||
"materialization_drop_reason": "none",
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Контрагент",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"Amount"
|
||||
],
|
||||
"anchor_type": "counterparty",
|
||||
"anchor_value_raw": "svk",
|
||||
"anchor_value_resolved": "Группа СВК",
|
||||
"resolver_confidence": "medium",
|
||||
"ambiguity_count": 0,
|
||||
"account_token_raw": null,
|
||||
"account_token_normalized": null,
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "not_applicable",
|
||||
"limited_reason_category": null,
|
||||
"response_is_non_empty": true,
|
||||
"assistant_reply_preview": "",
|
||||
"elapsed_ms": 1046,
|
||||
"generated_at": "2026-03-29T18:30:45.456Z"
|
||||
},
|
||||
{
|
||||
"id": "C3",
|
||||
"family": "counterparty",
|
||||
"question": "show documents by counterparty alfa from 2020-07-01 to 2020-07-31",
|
||||
"expected_intent": "list_documents_by_counterparty",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false,
|
||||
"handled": true,
|
||||
"response_type": "LIMITED_WITH_REASON",
|
||||
"reply_type": "partial_coverage",
|
||||
"detected_mode": "address_query",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "list_documents_by_counterparty",
|
||||
"intent_aligned": true,
|
||||
"selected_recipe": "address_documents_by_counterparty_v1",
|
||||
"selected_recipe_ids": [],
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"counterparty": "alfa",
|
||||
"period_from": "2020-07-01",
|
||||
"period_to": "2020-07-31"
|
||||
},
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"account_scope_mode": "preferred",
|
||||
"account_scope_fallback_applied": false,
|
||||
"mcp_call_status": "materialized_but_not_anchor_matched",
|
||||
"mcp_call_status_legacy": "materialized_but_not_matched",
|
||||
"stage_interpretation": "Rows materialized, but anchor resolution/matching removed all candidates.",
|
||||
"match_failure_stage": "materialized_but_not_anchor_matched",
|
||||
"match_failure_reason": "counterparty_anchor_not_matched_in_materialized_rows",
|
||||
"rows_fetched": 19,
|
||||
"raw_rows_received": 19,
|
||||
"rows_after_account_scope": 3,
|
||||
"rows_materialized": 3,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"materialization_drop_reason": "none",
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Контрагент",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"Amount"
|
||||
],
|
||||
"anchor_type": "counterparty",
|
||||
"anchor_value_raw": "alfa",
|
||||
"anchor_value_resolved": "alfa",
|
||||
"resolver_confidence": "medium",
|
||||
"ambiguity_count": 0,
|
||||
"account_token_raw": null,
|
||||
"account_token_normalized": null,
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "not_applicable",
|
||||
"limited_reason_category": "missing_anchor",
|
||||
"response_is_non_empty": false,
|
||||
"assistant_reply_preview": "",
|
||||
"elapsed_ms": 1030,
|
||||
"generated_at": "2026-03-29T18:30:46.488Z"
|
||||
},
|
||||
{
|
||||
"id": "C4",
|
||||
"family": "counterparty",
|
||||
"question": "show bank operations by counterparty alfa from 2020-07-01 to 2020-07-31",
|
||||
"expected_intent": "bank_operations_by_counterparty",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false,
|
||||
"handled": true,
|
||||
"response_type": "LIMITED_WITH_REASON",
|
||||
"reply_type": "partial_coverage",
|
||||
"detected_mode": "address_query",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "bank_operations_by_counterparty",
|
||||
"intent_aligned": true,
|
||||
"selected_recipe": "address_bank_operations_by_counterparty_v1",
|
||||
"selected_recipe_ids": [],
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"counterparty": "alfa",
|
||||
"period_from": "2020-07-01",
|
||||
"period_to": "2020-07-31"
|
||||
},
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"account_scope_mode": "preferred",
|
||||
"account_scope_fallback_applied": false,
|
||||
"mcp_call_status": "materialized_but_not_anchor_matched",
|
||||
"mcp_call_status_legacy": "materialized_but_not_matched",
|
||||
"stage_interpretation": "Rows materialized, but anchor resolution/matching removed all candidates.",
|
||||
"match_failure_stage": "materialized_but_not_anchor_matched",
|
||||
"match_failure_reason": "counterparty_anchor_not_matched_in_materialized_rows",
|
||||
"rows_fetched": 19,
|
||||
"raw_rows_received": 19,
|
||||
"rows_after_account_scope": 3,
|
||||
"rows_materialized": 3,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"materialization_drop_reason": "none",
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Контрагент",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"Amount"
|
||||
],
|
||||
"anchor_type": "counterparty",
|
||||
"anchor_value_raw": "alfa",
|
||||
"anchor_value_resolved": "alfa",
|
||||
"resolver_confidence": "medium",
|
||||
"ambiguity_count": 0,
|
||||
"account_token_raw": null,
|
||||
"account_token_normalized": null,
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "not_applicable",
|
||||
"limited_reason_category": "missing_anchor",
|
||||
"response_is_non_empty": false,
|
||||
"assistant_reply_preview": "",
|
||||
"elapsed_ms": 1027,
|
||||
"generated_at": "2026-03-29T18:30:47.517Z"
|
||||
},
|
||||
{
|
||||
"id": "C5",
|
||||
"family": "account",
|
||||
"question": "show account balance 60 today",
|
||||
"expected_intent": "account_balance_snapshot",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false,
|
||||
"handled": true,
|
||||
"response_type": "LIMITED_WITH_REASON",
|
||||
"reply_type": "partial_coverage",
|
||||
"detected_mode": "address_query",
|
||||
"query_shape": "AGGREGATE_LOOKUP",
|
||||
"detected_intent": "account_balance_snapshot",
|
||||
"intent_aligned": true,
|
||||
"selected_recipe": "address_movements_account_snapshot_v1",
|
||||
"selected_recipe_ids": [],
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"account": "60",
|
||||
"as_of_date": "2026-03-29"
|
||||
},
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"account_scope_mode": "strict",
|
||||
"account_scope_fallback_applied": false,
|
||||
"mcp_call_status": "raw_rows_received_but_not_materialized",
|
||||
"mcp_call_status_legacy": "raw_rows_received_but_not_materialized",
|
||||
"stage_interpretation": "Raw rows arrived, but row materialization path dropped everything.",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 20,
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 0,
|
||||
"rows_materialized": 0,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"materialization_drop_reason": "dropped_by_account_scope_filter",
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"AccountDt",
|
||||
"AccountKt",
|
||||
"Amount"
|
||||
],
|
||||
"anchor_type": "account",
|
||||
"anchor_value_raw": "60",
|
||||
"anchor_value_resolved": "60",
|
||||
"resolver_confidence": "high",
|
||||
"ambiguity_count": 0,
|
||||
"account_token_raw": "60",
|
||||
"account_token_normalized": "60",
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "no_rows_after_scope_filter",
|
||||
"limited_reason_category": "empty_match",
|
||||
"response_is_non_empty": false,
|
||||
"assistant_reply_preview": "",
|
||||
"elapsed_ms": 1013,
|
||||
"generated_at": "2026-03-29T18:30:48.531Z"
|
||||
},
|
||||
{
|
||||
"id": "C6",
|
||||
"family": "account",
|
||||
"question": "which documents form balance for account 62 as of 2020-07-31",
|
||||
"expected_intent": "documents_forming_balance",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false,
|
||||
"handled": true,
|
||||
"response_type": "LIMITED_WITH_REASON",
|
||||
"reply_type": "partial_coverage",
|
||||
"detected_mode": "address_query",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "documents_forming_balance",
|
||||
"intent_aligned": true,
|
||||
"selected_recipe": "address_documents_forming_balance_v1",
|
||||
"selected_recipe_ids": [],
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"account": "62",
|
||||
"as_of_date": "2020-07-31"
|
||||
},
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"account_scope_mode": "strict",
|
||||
"account_scope_fallback_applied": false,
|
||||
"mcp_call_status": "raw_rows_received_but_not_materialized",
|
||||
"mcp_call_status_legacy": "raw_rows_received_but_not_materialized",
|
||||
"stage_interpretation": "Raw rows arrived, but row materialization path dropped everything.",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 20,
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 0,
|
||||
"rows_materialized": 0,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"materialization_drop_reason": "dropped_by_account_scope_filter",
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"AccountDt",
|
||||
"AccountKt",
|
||||
"Amount"
|
||||
],
|
||||
"anchor_type": "account",
|
||||
"anchor_value_raw": "62",
|
||||
"anchor_value_resolved": "62",
|
||||
"resolver_confidence": "high",
|
||||
"ambiguity_count": 0,
|
||||
"account_token_raw": "62",
|
||||
"account_token_normalized": "62",
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "no_rows_after_scope_filter",
|
||||
"limited_reason_category": "empty_match",
|
||||
"response_is_non_empty": false,
|
||||
"assistant_reply_preview": "",
|
||||
"elapsed_ms": 969,
|
||||
"generated_at": "2026-03-29T18:30:49.501Z"
|
||||
},
|
||||
{
|
||||
"id": "C7",
|
||||
"family": "account",
|
||||
"question": "which documents form balance for account 60 as of 2020-07-31",
|
||||
"expected_intent": "documents_forming_balance",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false,
|
||||
"handled": true,
|
||||
"response_type": "LIMITED_WITH_REASON",
|
||||
"reply_type": "partial_coverage",
|
||||
"detected_mode": "address_query",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "documents_forming_balance",
|
||||
"intent_aligned": true,
|
||||
"selected_recipe": "address_documents_forming_balance_v1",
|
||||
"selected_recipe_ids": [],
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"account": "60",
|
||||
"as_of_date": "2020-07-31"
|
||||
},
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"account_scope_mode": "strict",
|
||||
"account_scope_fallback_applied": false,
|
||||
"mcp_call_status": "raw_rows_received_but_not_materialized",
|
||||
"mcp_call_status_legacy": "raw_rows_received_but_not_materialized",
|
||||
"stage_interpretation": "Raw rows arrived, but row materialization path dropped everything.",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 20,
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 0,
|
||||
"rows_materialized": 0,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"materialization_drop_reason": "dropped_by_account_scope_filter",
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"AccountDt",
|
||||
"AccountKt",
|
||||
"Amount"
|
||||
],
|
||||
"anchor_type": "account",
|
||||
"anchor_value_raw": "60",
|
||||
"anchor_value_resolved": "60",
|
||||
"resolver_confidence": "high",
|
||||
"ambiguity_count": 0,
|
||||
"account_token_raw": "60",
|
||||
"account_token_normalized": "60",
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "no_rows_after_scope_filter",
|
||||
"limited_reason_category": "empty_match",
|
||||
"response_is_non_empty": false,
|
||||
"assistant_reply_preview": "",
|
||||
"elapsed_ms": 1050,
|
||||
"generated_at": "2026-03-29T18:30:50.552Z"
|
||||
},
|
||||
{
|
||||
"id": "C8",
|
||||
"family": "account",
|
||||
"question": "show account balance 51 as of 2020-07-31",
|
||||
"expected_intent": "account_balance_snapshot",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false,
|
||||
"handled": true,
|
||||
"response_type": "LIMITED_WITH_REASON",
|
||||
"reply_type": "partial_coverage",
|
||||
"detected_mode": "address_query",
|
||||
"query_shape": "AGGREGATE_LOOKUP",
|
||||
"detected_intent": "account_balance_snapshot",
|
||||
"intent_aligned": true,
|
||||
"selected_recipe": "address_movements_account_snapshot_v1",
|
||||
"selected_recipe_ids": [],
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"account": "51",
|
||||
"as_of_date": "2020-07-31"
|
||||
},
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"account_scope_mode": "strict",
|
||||
"account_scope_fallback_applied": false,
|
||||
"mcp_call_status": "raw_rows_received_but_not_materialized",
|
||||
"mcp_call_status_legacy": "raw_rows_received_but_not_materialized",
|
||||
"stage_interpretation": "Raw rows arrived, but row materialization path dropped everything.",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 20,
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 0,
|
||||
"rows_materialized": 0,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"materialization_drop_reason": "dropped_by_account_scope_filter",
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"AccountDt",
|
||||
"AccountKt",
|
||||
"Amount"
|
||||
],
|
||||
"anchor_type": "account",
|
||||
"anchor_value_raw": "51",
|
||||
"anchor_value_resolved": "51",
|
||||
"resolver_confidence": "high",
|
||||
"ambiguity_count": 0,
|
||||
"account_token_raw": "51",
|
||||
"account_token_normalized": "51",
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "no_rows_after_scope_filter",
|
||||
"limited_reason_category": "empty_match",
|
||||
"response_is_non_empty": false,
|
||||
"assistant_reply_preview": "",
|
||||
"elapsed_ms": 1034,
|
||||
"generated_at": "2026-03-29T18:30:51.587Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"compared_from": "2026-03-29_Address_Query_Runtime_V1_M2_3B_AccountScope_Mode_Tuning",
|
||||
"compared_to": "2026-03-29_Address_Query_Runtime_V1_M2_3C_Resolver_Filter_Tuning_And_AccountScope_Audit",
|
||||
"comparison_scope": "stage_diagnostic_plus_curated_positive_suite",
|
||||
"metrics": {
|
||||
"factual_positive_rate": {
|
||||
"before": 0,
|
||||
"after": 0.25
|
||||
},
|
||||
"false_factual_rate": {
|
||||
"before": 0,
|
||||
"after": 0
|
||||
},
|
||||
"counterparty_non_empty_cases": {
|
||||
"before": 0,
|
||||
"after": 2
|
||||
},
|
||||
"account_non_empty_cases": {
|
||||
"before": 0,
|
||||
"after": 0
|
||||
}
|
||||
},
|
||||
"narrative": [
|
||||
"Counterparty scenarios moved from materialized_but_not_matched to matched_non_empty on curated positive cases.",
|
||||
"Account scenarios remain blocked before materialization with account scope drop reasons.",
|
||||
"False factual output remains zero."
|
||||
]
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
docs/ADDRESS/address_query/README.md
|
||||
docs/ADDRESS/address_query/address_runtime_contracts.md
|
||||
docs/ADDRESS/address_query/address_scenario_matrix.md
|
||||
docs/ADDRESS/address_query/query_recipes_v1.md
|
||||
docs/ADDRESS/address_query/runtime_readiness_matrix_v1.md
|
||||
llm_normalizer/backend/dist/services/addressMcpClient.js
|
||||
llm_normalizer/backend/dist/services/addressQueryService.js
|
||||
llm_normalizer/backend/dist/services/addressRecipeCatalog.js
|
||||
llm_normalizer/backend/dist/services/assistantService.js
|
||||
llm_normalizer/backend/src/services/addressMcpClient.ts
|
||||
llm_normalizer/backend/src/services/addressQueryService.ts
|
||||
llm_normalizer/backend/src/services/addressRecipeCatalog.ts
|
||||
llm_normalizer/backend/src/services/assistantService.ts
|
||||
llm_normalizer/backend/src/types/addressQuery.ts
|
||||
llm_normalizer/backend/src/types/assistant.ts
|
||||
llm_normalizer/backend/tests/addressQueryRuntimeM23.test.ts
|
||||
docs/ADDRESS/address_query/curated_positive_live_suite_v1.md
|
||||
docs/ADDRESS/runs/2026-03-29_Address_Query_Runtime_V1_M2_3C_Resolver_Filter_Tuning_And_AccountScope_Audit/
|
||||
llm_normalizer/backend/scripts/runAddressM23cPack.js
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
# Curated Positive Case Matrix (M2.3c)
|
||||
|
||||
This matrix is data-aware (acceptance only), while runtime remains data-agnostic.
|
||||
|
||||
| case_id | family | expected_non_empty | actual_non_empty | expected_response | actual_response | selected_recipe | anchor_raw | anchor_resolved |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| C1 | counterparty | yes | yes | FACTUAL_LIST | FACTUAL_LIST | address_documents_by_counterparty_v1 | svk | Группа СВК |
|
||||
| C2 | counterparty | yes | yes | FACTUAL_LIST | FACTUAL_LIST | address_bank_operations_by_counterparty_v1 | svk | Группа СВК |
|
||||
| C3 | counterparty | no | no | LIMITED_WITH_REASON | LIMITED_WITH_REASON | address_documents_by_counterparty_v1 | alfa | alfa |
|
||||
| C4 | counterparty | no | no | LIMITED_WITH_REASON | LIMITED_WITH_REASON | address_bank_operations_by_counterparty_v1 | alfa | alfa |
|
||||
| C5 | account | no | no | LIMITED_WITH_REASON | LIMITED_WITH_REASON | address_movements_account_snapshot_v1 | 60 | 60 |
|
||||
| C6 | account | no | no | LIMITED_WITH_REASON | LIMITED_WITH_REASON | address_documents_forming_balance_v1 | 62 | 62 |
|
||||
| C7 | account | no | no | LIMITED_WITH_REASON | LIMITED_WITH_REASON | address_documents_forming_balance_v1 | 60 | 60 |
|
||||
| C8 | account | no | no | LIMITED_WITH_REASON | LIMITED_WITH_REASON | address_movements_account_snapshot_v1 | 51 | 51 |
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"case": {
|
||||
"id": "C1",
|
||||
"family": "counterparty",
|
||||
"question": "show documents by counterparty svk from 2020-07-01 to 2020-07-31",
|
||||
"expected_intent": "list_documents_by_counterparty",
|
||||
"expected_response_type": "FACTUAL_LIST",
|
||||
"expected_non_empty": true
|
||||
},
|
||||
"result": {
|
||||
"id": "C1",
|
||||
"family": "counterparty",
|
||||
"question": "show documents by counterparty svk from 2020-07-01 to 2020-07-31",
|
||||
"expected_intent": "list_documents_by_counterparty",
|
||||
"expected_response_type": "FACTUAL_LIST",
|
||||
"expected_non_empty": true,
|
||||
"handled": true,
|
||||
"response_type": "FACTUAL_LIST",
|
||||
"reply_type": "factual",
|
||||
"detected_mode": "address_query",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "list_documents_by_counterparty",
|
||||
"intent_aligned": true,
|
||||
"selected_recipe": "address_documents_by_counterparty_v1",
|
||||
"selected_recipe_ids": [],
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"counterparty": "svk",
|
||||
"period_from": "2020-07-01",
|
||||
"period_to": "2020-07-31"
|
||||
},
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"account_scope_mode": "preferred",
|
||||
"account_scope_fallback_applied": false,
|
||||
"mcp_call_status": "matched_non_empty",
|
||||
"mcp_call_status_legacy": "matched_non_empty",
|
||||
"stage_interpretation": "Rows passed all stages and produced factual non-empty output.",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 19,
|
||||
"raw_rows_received": 19,
|
||||
"rows_after_account_scope": 3,
|
||||
"rows_materialized": 3,
|
||||
"rows_after_recipe_filter": 2,
|
||||
"rows_matched": 2,
|
||||
"materialization_drop_reason": "none",
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Контрагент",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"Amount"
|
||||
],
|
||||
"anchor_type": "counterparty",
|
||||
"anchor_value_raw": "svk",
|
||||
"anchor_value_resolved": "Группа СВК",
|
||||
"resolver_confidence": "medium",
|
||||
"ambiguity_count": 0,
|
||||
"account_token_raw": null,
|
||||
"account_token_normalized": null,
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "not_applicable",
|
||||
"limited_reason_category": null,
|
||||
"response_is_non_empty": true,
|
||||
"assistant_reply_preview": "",
|
||||
"elapsed_ms": 513,
|
||||
"generated_at": "2026-03-29T18:30:44.406Z"
|
||||
}
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"case": {
|
||||
"id": "C2",
|
||||
"family": "counterparty",
|
||||
"question": "show bank operations by counterparty svk from 2020-07-01 to 2020-07-31",
|
||||
"expected_intent": "bank_operations_by_counterparty",
|
||||
"expected_response_type": "FACTUAL_LIST",
|
||||
"expected_non_empty": true
|
||||
},
|
||||
"result": {
|
||||
"id": "C2",
|
||||
"family": "counterparty",
|
||||
"question": "show bank operations by counterparty svk from 2020-07-01 to 2020-07-31",
|
||||
"expected_intent": "bank_operations_by_counterparty",
|
||||
"expected_response_type": "FACTUAL_LIST",
|
||||
"expected_non_empty": true,
|
||||
"handled": true,
|
||||
"response_type": "FACTUAL_LIST",
|
||||
"reply_type": "factual",
|
||||
"detected_mode": "address_query",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "bank_operations_by_counterparty",
|
||||
"intent_aligned": true,
|
||||
"selected_recipe": "address_bank_operations_by_counterparty_v1",
|
||||
"selected_recipe_ids": [],
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"counterparty": "svk",
|
||||
"period_from": "2020-07-01",
|
||||
"period_to": "2020-07-31"
|
||||
},
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"account_scope_mode": "preferred",
|
||||
"account_scope_fallback_applied": false,
|
||||
"mcp_call_status": "matched_non_empty",
|
||||
"mcp_call_status_legacy": "matched_non_empty",
|
||||
"stage_interpretation": "Rows passed all stages and produced factual non-empty output.",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 19,
|
||||
"raw_rows_received": 19,
|
||||
"rows_after_account_scope": 3,
|
||||
"rows_materialized": 3,
|
||||
"rows_after_recipe_filter": 2,
|
||||
"rows_matched": 2,
|
||||
"materialization_drop_reason": "none",
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Контрагент",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"Amount"
|
||||
],
|
||||
"anchor_type": "counterparty",
|
||||
"anchor_value_raw": "svk",
|
||||
"anchor_value_resolved": "Группа СВК",
|
||||
"resolver_confidence": "medium",
|
||||
"ambiguity_count": 0,
|
||||
"account_token_raw": null,
|
||||
"account_token_normalized": null,
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "not_applicable",
|
||||
"limited_reason_category": null,
|
||||
"response_is_non_empty": true,
|
||||
"assistant_reply_preview": "",
|
||||
"elapsed_ms": 1046,
|
||||
"generated_at": "2026-03-29T18:30:45.456Z"
|
||||
}
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"case": {
|
||||
"id": "C3",
|
||||
"family": "counterparty",
|
||||
"question": "show documents by counterparty alfa from 2020-07-01 to 2020-07-31",
|
||||
"expected_intent": "list_documents_by_counterparty",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false
|
||||
},
|
||||
"result": {
|
||||
"id": "C3",
|
||||
"family": "counterparty",
|
||||
"question": "show documents by counterparty alfa from 2020-07-01 to 2020-07-31",
|
||||
"expected_intent": "list_documents_by_counterparty",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false,
|
||||
"handled": true,
|
||||
"response_type": "LIMITED_WITH_REASON",
|
||||
"reply_type": "partial_coverage",
|
||||
"detected_mode": "address_query",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "list_documents_by_counterparty",
|
||||
"intent_aligned": true,
|
||||
"selected_recipe": "address_documents_by_counterparty_v1",
|
||||
"selected_recipe_ids": [],
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"counterparty": "alfa",
|
||||
"period_from": "2020-07-01",
|
||||
"period_to": "2020-07-31"
|
||||
},
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"account_scope_mode": "preferred",
|
||||
"account_scope_fallback_applied": false,
|
||||
"mcp_call_status": "materialized_but_not_anchor_matched",
|
||||
"mcp_call_status_legacy": "materialized_but_not_matched",
|
||||
"stage_interpretation": "Rows materialized, but anchor resolution/matching removed all candidates.",
|
||||
"match_failure_stage": "materialized_but_not_anchor_matched",
|
||||
"match_failure_reason": "counterparty_anchor_not_matched_in_materialized_rows",
|
||||
"rows_fetched": 19,
|
||||
"raw_rows_received": 19,
|
||||
"rows_after_account_scope": 3,
|
||||
"rows_materialized": 3,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"materialization_drop_reason": "none",
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Контрагент",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"Amount"
|
||||
],
|
||||
"anchor_type": "counterparty",
|
||||
"anchor_value_raw": "alfa",
|
||||
"anchor_value_resolved": "alfa",
|
||||
"resolver_confidence": "medium",
|
||||
"ambiguity_count": 0,
|
||||
"account_token_raw": null,
|
||||
"account_token_normalized": null,
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "not_applicable",
|
||||
"limited_reason_category": "missing_anchor",
|
||||
"response_is_non_empty": false,
|
||||
"assistant_reply_preview": "",
|
||||
"elapsed_ms": 1030,
|
||||
"generated_at": "2026-03-29T18:30:46.488Z"
|
||||
}
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"case": {
|
||||
"id": "C4",
|
||||
"family": "counterparty",
|
||||
"question": "show bank operations by counterparty alfa from 2020-07-01 to 2020-07-31",
|
||||
"expected_intent": "bank_operations_by_counterparty",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false
|
||||
},
|
||||
"result": {
|
||||
"id": "C4",
|
||||
"family": "counterparty",
|
||||
"question": "show bank operations by counterparty alfa from 2020-07-01 to 2020-07-31",
|
||||
"expected_intent": "bank_operations_by_counterparty",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false,
|
||||
"handled": true,
|
||||
"response_type": "LIMITED_WITH_REASON",
|
||||
"reply_type": "partial_coverage",
|
||||
"detected_mode": "address_query",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "bank_operations_by_counterparty",
|
||||
"intent_aligned": true,
|
||||
"selected_recipe": "address_bank_operations_by_counterparty_v1",
|
||||
"selected_recipe_ids": [],
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"counterparty": "alfa",
|
||||
"period_from": "2020-07-01",
|
||||
"period_to": "2020-07-31"
|
||||
},
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"account_scope_mode": "preferred",
|
||||
"account_scope_fallback_applied": false,
|
||||
"mcp_call_status": "materialized_but_not_anchor_matched",
|
||||
"mcp_call_status_legacy": "materialized_but_not_matched",
|
||||
"stage_interpretation": "Rows materialized, but anchor resolution/matching removed all candidates.",
|
||||
"match_failure_stage": "materialized_but_not_anchor_matched",
|
||||
"match_failure_reason": "counterparty_anchor_not_matched_in_materialized_rows",
|
||||
"rows_fetched": 19,
|
||||
"raw_rows_received": 19,
|
||||
"rows_after_account_scope": 3,
|
||||
"rows_materialized": 3,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"materialization_drop_reason": "none",
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Контрагент",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"Amount"
|
||||
],
|
||||
"anchor_type": "counterparty",
|
||||
"anchor_value_raw": "alfa",
|
||||
"anchor_value_resolved": "alfa",
|
||||
"resolver_confidence": "medium",
|
||||
"ambiguity_count": 0,
|
||||
"account_token_raw": null,
|
||||
"account_token_normalized": null,
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "not_applicable",
|
||||
"limited_reason_category": "missing_anchor",
|
||||
"response_is_non_empty": false,
|
||||
"assistant_reply_preview": "",
|
||||
"elapsed_ms": 1027,
|
||||
"generated_at": "2026-03-29T18:30:47.517Z"
|
||||
}
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"case": {
|
||||
"id": "C5",
|
||||
"family": "account",
|
||||
"question": "show account balance 60 today",
|
||||
"expected_intent": "account_balance_snapshot",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false
|
||||
},
|
||||
"result": {
|
||||
"id": "C5",
|
||||
"family": "account",
|
||||
"question": "show account balance 60 today",
|
||||
"expected_intent": "account_balance_snapshot",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false,
|
||||
"handled": true,
|
||||
"response_type": "LIMITED_WITH_REASON",
|
||||
"reply_type": "partial_coverage",
|
||||
"detected_mode": "address_query",
|
||||
"query_shape": "AGGREGATE_LOOKUP",
|
||||
"detected_intent": "account_balance_snapshot",
|
||||
"intent_aligned": true,
|
||||
"selected_recipe": "address_movements_account_snapshot_v1",
|
||||
"selected_recipe_ids": [],
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"account": "60",
|
||||
"as_of_date": "2026-03-29"
|
||||
},
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"account_scope_mode": "strict",
|
||||
"account_scope_fallback_applied": false,
|
||||
"mcp_call_status": "raw_rows_received_but_not_materialized",
|
||||
"mcp_call_status_legacy": "raw_rows_received_but_not_materialized",
|
||||
"stage_interpretation": "Raw rows arrived, but row materialization path dropped everything.",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 20,
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 0,
|
||||
"rows_materialized": 0,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"materialization_drop_reason": "dropped_by_account_scope_filter",
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"AccountDt",
|
||||
"AccountKt",
|
||||
"Amount"
|
||||
],
|
||||
"anchor_type": "account",
|
||||
"anchor_value_raw": "60",
|
||||
"anchor_value_resolved": "60",
|
||||
"resolver_confidence": "high",
|
||||
"ambiguity_count": 0,
|
||||
"account_token_raw": "60",
|
||||
"account_token_normalized": "60",
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "no_rows_after_scope_filter",
|
||||
"limited_reason_category": "empty_match",
|
||||
"response_is_non_empty": false,
|
||||
"assistant_reply_preview": "",
|
||||
"elapsed_ms": 1013,
|
||||
"generated_at": "2026-03-29T18:30:48.531Z"
|
||||
}
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"case": {
|
||||
"id": "C6",
|
||||
"family": "account",
|
||||
"question": "which documents form balance for account 62 as of 2020-07-31",
|
||||
"expected_intent": "documents_forming_balance",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false
|
||||
},
|
||||
"result": {
|
||||
"id": "C6",
|
||||
"family": "account",
|
||||
"question": "which documents form balance for account 62 as of 2020-07-31",
|
||||
"expected_intent": "documents_forming_balance",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false,
|
||||
"handled": true,
|
||||
"response_type": "LIMITED_WITH_REASON",
|
||||
"reply_type": "partial_coverage",
|
||||
"detected_mode": "address_query",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "documents_forming_balance",
|
||||
"intent_aligned": true,
|
||||
"selected_recipe": "address_documents_forming_balance_v1",
|
||||
"selected_recipe_ids": [],
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"account": "62",
|
||||
"as_of_date": "2020-07-31"
|
||||
},
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"account_scope_mode": "strict",
|
||||
"account_scope_fallback_applied": false,
|
||||
"mcp_call_status": "raw_rows_received_but_not_materialized",
|
||||
"mcp_call_status_legacy": "raw_rows_received_but_not_materialized",
|
||||
"stage_interpretation": "Raw rows arrived, but row materialization path dropped everything.",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 20,
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 0,
|
||||
"rows_materialized": 0,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"materialization_drop_reason": "dropped_by_account_scope_filter",
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"AccountDt",
|
||||
"AccountKt",
|
||||
"Amount"
|
||||
],
|
||||
"anchor_type": "account",
|
||||
"anchor_value_raw": "62",
|
||||
"anchor_value_resolved": "62",
|
||||
"resolver_confidence": "high",
|
||||
"ambiguity_count": 0,
|
||||
"account_token_raw": "62",
|
||||
"account_token_normalized": "62",
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "no_rows_after_scope_filter",
|
||||
"limited_reason_category": "empty_match",
|
||||
"response_is_non_empty": false,
|
||||
"assistant_reply_preview": "",
|
||||
"elapsed_ms": 969,
|
||||
"generated_at": "2026-03-29T18:30:49.501Z"
|
||||
}
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"case": {
|
||||
"id": "C7",
|
||||
"family": "account",
|
||||
"question": "which documents form balance for account 60 as of 2020-07-31",
|
||||
"expected_intent": "documents_forming_balance",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false
|
||||
},
|
||||
"result": {
|
||||
"id": "C7",
|
||||
"family": "account",
|
||||
"question": "which documents form balance for account 60 as of 2020-07-31",
|
||||
"expected_intent": "documents_forming_balance",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false,
|
||||
"handled": true,
|
||||
"response_type": "LIMITED_WITH_REASON",
|
||||
"reply_type": "partial_coverage",
|
||||
"detected_mode": "address_query",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "documents_forming_balance",
|
||||
"intent_aligned": true,
|
||||
"selected_recipe": "address_documents_forming_balance_v1",
|
||||
"selected_recipe_ids": [],
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"account": "60",
|
||||
"as_of_date": "2020-07-31"
|
||||
},
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"account_scope_mode": "strict",
|
||||
"account_scope_fallback_applied": false,
|
||||
"mcp_call_status": "raw_rows_received_but_not_materialized",
|
||||
"mcp_call_status_legacy": "raw_rows_received_but_not_materialized",
|
||||
"stage_interpretation": "Raw rows arrived, but row materialization path dropped everything.",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 20,
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 0,
|
||||
"rows_materialized": 0,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"materialization_drop_reason": "dropped_by_account_scope_filter",
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"AccountDt",
|
||||
"AccountKt",
|
||||
"Amount"
|
||||
],
|
||||
"anchor_type": "account",
|
||||
"anchor_value_raw": "60",
|
||||
"anchor_value_resolved": "60",
|
||||
"resolver_confidence": "high",
|
||||
"ambiguity_count": 0,
|
||||
"account_token_raw": "60",
|
||||
"account_token_normalized": "60",
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "no_rows_after_scope_filter",
|
||||
"limited_reason_category": "empty_match",
|
||||
"response_is_non_empty": false,
|
||||
"assistant_reply_preview": "",
|
||||
"elapsed_ms": 1050,
|
||||
"generated_at": "2026-03-29T18:30:50.552Z"
|
||||
}
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"case": {
|
||||
"id": "C8",
|
||||
"family": "account",
|
||||
"question": "show account balance 51 as of 2020-07-31",
|
||||
"expected_intent": "account_balance_snapshot",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false
|
||||
},
|
||||
"result": {
|
||||
"id": "C8",
|
||||
"family": "account",
|
||||
"question": "show account balance 51 as of 2020-07-31",
|
||||
"expected_intent": "account_balance_snapshot",
|
||||
"expected_response_type": "LIMITED_WITH_REASON",
|
||||
"expected_non_empty": false,
|
||||
"handled": true,
|
||||
"response_type": "LIMITED_WITH_REASON",
|
||||
"reply_type": "partial_coverage",
|
||||
"detected_mode": "address_query",
|
||||
"query_shape": "AGGREGATE_LOOKUP",
|
||||
"detected_intent": "account_balance_snapshot",
|
||||
"intent_aligned": true,
|
||||
"selected_recipe": "address_movements_account_snapshot_v1",
|
||||
"selected_recipe_ids": [],
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"account": "51",
|
||||
"as_of_date": "2020-07-31"
|
||||
},
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"account_scope_mode": "strict",
|
||||
"account_scope_fallback_applied": false,
|
||||
"mcp_call_status": "raw_rows_received_but_not_materialized",
|
||||
"mcp_call_status_legacy": "raw_rows_received_but_not_materialized",
|
||||
"stage_interpretation": "Raw rows arrived, but row materialization path dropped everything.",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 20,
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 0,
|
||||
"rows_materialized": 0,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"materialization_drop_reason": "dropped_by_account_scope_filter",
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"AccountDt",
|
||||
"AccountKt",
|
||||
"Amount"
|
||||
],
|
||||
"anchor_type": "account",
|
||||
"anchor_value_raw": "51",
|
||||
"anchor_value_resolved": "51",
|
||||
"resolver_confidence": "high",
|
||||
"ambiguity_count": 0,
|
||||
"account_token_raw": "51",
|
||||
"account_token_normalized": "51",
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "no_rows_after_scope_filter",
|
||||
"limited_reason_category": "empty_match",
|
||||
"response_is_non_empty": false,
|
||||
"assistant_reply_preview": "",
|
||||
"elapsed_ms": 1034,
|
||||
"generated_at": "2026-03-29T18:30:51.587Z"
|
||||
}
|
||||
}
|
||||
+142
@@ -0,0 +1,142 @@
|
||||
{
|
||||
"generated_at": "2026-03-29T18:30:51.853Z",
|
||||
"run_id": "2026-03-29_Address_Query_Runtime_V1_M2_3C_Resolver_Filter_Tuning_And_AccountScope_Audit",
|
||||
"inventory": [
|
||||
{
|
||||
"case_id": "C1",
|
||||
"family": "counterparty",
|
||||
"question": "show documents by counterparty svk from 2020-07-01 to 2020-07-31",
|
||||
"recipe": "address_documents_by_counterparty_v1",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "list_documents_by_counterparty",
|
||||
"raw_rows_received": 19,
|
||||
"rows_after_account_scope": 3,
|
||||
"rows_materialized": 3,
|
||||
"rows_after_recipe_filter": 2,
|
||||
"rows_matched": 2,
|
||||
"mcp_call_status": "matched_non_empty",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"limited_reason_category": null
|
||||
},
|
||||
{
|
||||
"case_id": "C2",
|
||||
"family": "counterparty",
|
||||
"question": "show bank operations by counterparty svk from 2020-07-01 to 2020-07-31",
|
||||
"recipe": "address_bank_operations_by_counterparty_v1",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "bank_operations_by_counterparty",
|
||||
"raw_rows_received": 19,
|
||||
"rows_after_account_scope": 3,
|
||||
"rows_materialized": 3,
|
||||
"rows_after_recipe_filter": 2,
|
||||
"rows_matched": 2,
|
||||
"mcp_call_status": "matched_non_empty",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"limited_reason_category": null
|
||||
},
|
||||
{
|
||||
"case_id": "C3",
|
||||
"family": "counterparty",
|
||||
"question": "show documents by counterparty alfa from 2020-07-01 to 2020-07-31",
|
||||
"recipe": "address_documents_by_counterparty_v1",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "list_documents_by_counterparty",
|
||||
"raw_rows_received": 19,
|
||||
"rows_after_account_scope": 3,
|
||||
"rows_materialized": 3,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"mcp_call_status": "materialized_but_not_anchor_matched",
|
||||
"match_failure_stage": "materialized_but_not_anchor_matched",
|
||||
"match_failure_reason": "counterparty_anchor_not_matched_in_materialized_rows",
|
||||
"limited_reason_category": "missing_anchor"
|
||||
},
|
||||
{
|
||||
"case_id": "C4",
|
||||
"family": "counterparty",
|
||||
"question": "show bank operations by counterparty alfa from 2020-07-01 to 2020-07-31",
|
||||
"recipe": "address_bank_operations_by_counterparty_v1",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "bank_operations_by_counterparty",
|
||||
"raw_rows_received": 19,
|
||||
"rows_after_account_scope": 3,
|
||||
"rows_materialized": 3,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"mcp_call_status": "materialized_but_not_anchor_matched",
|
||||
"match_failure_stage": "materialized_but_not_anchor_matched",
|
||||
"match_failure_reason": "counterparty_anchor_not_matched_in_materialized_rows",
|
||||
"limited_reason_category": "missing_anchor"
|
||||
},
|
||||
{
|
||||
"case_id": "C5",
|
||||
"family": "account",
|
||||
"question": "show account balance 60 today",
|
||||
"recipe": "address_movements_account_snapshot_v1",
|
||||
"query_shape": "AGGREGATE_LOOKUP",
|
||||
"detected_intent": "account_balance_snapshot",
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 0,
|
||||
"rows_materialized": 0,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"mcp_call_status": "raw_rows_received_but_not_materialized",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"limited_reason_category": "empty_match"
|
||||
},
|
||||
{
|
||||
"case_id": "C6",
|
||||
"family": "account",
|
||||
"question": "which documents form balance for account 62 as of 2020-07-31",
|
||||
"recipe": "address_documents_forming_balance_v1",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "documents_forming_balance",
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 0,
|
||||
"rows_materialized": 0,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"mcp_call_status": "raw_rows_received_but_not_materialized",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"limited_reason_category": "empty_match"
|
||||
},
|
||||
{
|
||||
"case_id": "C7",
|
||||
"family": "account",
|
||||
"question": "which documents form balance for account 60 as of 2020-07-31",
|
||||
"recipe": "address_documents_forming_balance_v1",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"detected_intent": "documents_forming_balance",
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 0,
|
||||
"rows_materialized": 0,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"mcp_call_status": "raw_rows_received_but_not_materialized",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"limited_reason_category": "empty_match"
|
||||
},
|
||||
{
|
||||
"case_id": "C8",
|
||||
"family": "account",
|
||||
"question": "show account balance 51 as of 2020-07-31",
|
||||
"recipe": "address_movements_account_snapshot_v1",
|
||||
"query_shape": "AGGREGATE_LOOKUP",
|
||||
"detected_intent": "account_balance_snapshot",
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 0,
|
||||
"rows_materialized": 0,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_matched": 0,
|
||||
"mcp_call_status": "raw_rows_received_but_not_materialized",
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"limited_reason_category": "empty_match"
|
||||
}
|
||||
]
|
||||
}
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"run_id": "2026-03-29_Address_Query_Runtime_V1_M2_3C_Resolver_Filter_Tuning_And_AccountScope_Audit",
|
||||
"date": "2026-03-29",
|
||||
"stage": "address_query_runtime_v1",
|
||||
"scope": "m2_3c_resolver_filter_tuning_and_account_scope_audit",
|
||||
"build_status": "PASSED",
|
||||
"tests_status": "PASSED",
|
||||
"diagnostic_run_status": "COMPLETED",
|
||||
"implemented": {
|
||||
"counterparty_anchor_refinement_after_materialization": true,
|
||||
"split_match_failure_stages": true,
|
||||
"legacy_status_compatibility_field": true,
|
||||
"account_scope_audit_fields": true,
|
||||
"bank_docs_query_template_for_counterparty_intents": true
|
||||
},
|
||||
"metrics": {
|
||||
"cases_total": 8,
|
||||
"intent_alignment_rate": 1,
|
||||
"factual_positive_rate": 0.25,
|
||||
"limited_mode_rate": 0.75,
|
||||
"false_factual_rate": 0,
|
||||
"counterparty_family_non_empty_rate": 0.5,
|
||||
"account_family_non_empty_rate": 0
|
||||
},
|
||||
"stage_status_distribution": [
|
||||
{
|
||||
"status": "matched_non_empty",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"status": "materialized_but_not_anchor_matched",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"status": "raw_rows_received_but_not_materialized",
|
||||
"count": 4
|
||||
}
|
||||
],
|
||||
"failure_reason_distribution": [
|
||||
{
|
||||
"reason": "none",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"reason": "counterparty_anchor_not_matched_in_materialized_rows",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"reason": "dropped_by_account_scope_filter",
|
||||
"count": 4
|
||||
}
|
||||
],
|
||||
"key_findings": {
|
||||
"counterparty_track": "positive factual responses now confirmed on curated non-empty live cases",
|
||||
"account_track": "account intents still stop at raw_rows_received_but_not_materialized",
|
||||
"next_priority": "account scope/materialization shape audit to unblock first non-empty account case"
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
# Smoke Checks (M2.3c)
|
||||
|
||||
- `npm.cmd run build` -> PASSED
|
||||
- `npx.cmd vitest tests/addressQueryRuntimeM23.test.ts` -> PASSED (10/10)
|
||||
- M2.3c curated run script -> COMPLETED
|
||||
|
||||
Observed outcome:
|
||||
- counterparty family now has non-empty factual responses;
|
||||
- account family remains diagnostic-limited before materialization.
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
# Stage Diagnostic Matrix (M2.3c)
|
||||
|
||||
| case_id | family | expected_intent | detected_intent | status | rows_after_account_scope | rows_materialized | rows_after_recipe_filter | rows_matched | response_type | limited_reason |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| C1 | counterparty | list_documents_by_counterparty | list_documents_by_counterparty | matched_non_empty | 3 | 3 | 2 | 2 | FACTUAL_LIST | |
|
||||
| C2 | counterparty | bank_operations_by_counterparty | bank_operations_by_counterparty | matched_non_empty | 3 | 3 | 2 | 2 | FACTUAL_LIST | |
|
||||
| C3 | counterparty | list_documents_by_counterparty | list_documents_by_counterparty | materialized_but_not_anchor_matched | 3 | 3 | 0 | 0 | LIMITED_WITH_REASON | missing_anchor |
|
||||
| C4 | counterparty | bank_operations_by_counterparty | bank_operations_by_counterparty | materialized_but_not_anchor_matched | 3 | 3 | 0 | 0 | LIMITED_WITH_REASON | missing_anchor |
|
||||
| C5 | account | account_balance_snapshot | account_balance_snapshot | raw_rows_received_but_not_materialized | 0 | 0 | 0 | 0 | LIMITED_WITH_REASON | empty_match |
|
||||
| C6 | account | documents_forming_balance | documents_forming_balance | raw_rows_received_but_not_materialized | 0 | 0 | 0 | 0 | LIMITED_WITH_REASON | empty_match |
|
||||
| C7 | account | documents_forming_balance | documents_forming_balance | raw_rows_received_but_not_materialized | 0 | 0 | 0 | 0 | LIMITED_WITH_REASON | empty_match |
|
||||
| C8 | account | account_balance_snapshot | account_balance_snapshot | raw_rows_received_but_not_materialized | 0 | 0 | 0 | 0 | LIMITED_WITH_REASON | empty_match |
|
||||
|
||||
Status taxonomy in this run:
|
||||
- `raw_rows_received_but_not_materialized`
|
||||
- `materialized_but_not_anchor_matched`
|
||||
- `matched_non_empty`
|
||||
Reference in New Issue
Block a user