приложение 2 · полный журнал живой приёмки
Дата: 24.10.2026. Шлюз: http://127.0.0.1:8099/ask (локальный адрес сервиса в рабочей копии;
на опубликованном стенде — тот же путь /ask на адресе приложения). Вызов — HTTP POST
{"question", "dialog_state"}, как у LibreChat Action. Скрипт методики:
reference_impl/qa/live_acceptance.py (05-Методика-приёмки.md, раздел 1).
GET /health на момент прогона: {"status": "ok", "version": "1.0.0+ugmk-service", "db": "postgres",
"model": "qwen3.6-35b"} — СУБД PostgreSQL 16, модель приёмки Qwen3.6-35B-A3B через шлюз СРЕДЫ.
Каждый из 8 сценариев методики прогнан три раза полным проходом (не только спорные — чтобы отловить недетерминированный дефект модели, см. 06-Опыт-и-грабли.md, раздел «один прогон не ловит»). Во всех трёх прогонах все 8 сценариев прошли маршрутом и проверками, предусмотренными методикой — спорных или непройденных шагов не возникло, поэтому дополнительных повторов сверх трёх не требовалось.
| № | Сценарий | Маршрут (все 3 прогона) | Время, прогон 1 / 2 / 3, с | Вердикт |
|---|---|---|---|---|
| 1 | Справка по контрагенту | card | 0.5 / 0.5 / 0.5 | ok / ok / ok |
| 2 | Сумма по БЕ 1100 за 2025 | nl2sql | 36.9 / 39.4 / 32.9 | ok / ok / ok |
| 3 | Поставщики по категории масла за 2025 | nl2sql | 61.9 / 40.4 / 61.9 | ok / ok / ok |
| 4 | Поставки шпал за 2026 (уточнение) | clarify → nl2sql | 12.1+37.6 / 10.8+31.5 / 12.1+37.5 | ok / ok / ok |
| 5 | Закупки свыше 10 млн за 2026 (R2) | nl2sql | 60.5 / 62.5 / 58.8 | ok / ok / ok |
| 6а | Отказ: выбор поставщика | refusal | 0.0 / 0.0 / 0.0 | ok / ok / ok |
| 6б | Отказ: причина роста цены | refusal | 0.0 / 0.0 / 0.0 | ok / ok / ok |
| 7 | БЕ 7400 с разбивкой по классам (Д7) | nl2sql | 70.2 / 71.7 / 66.7 | ok / ok / ok |
Итого по каждому прогону: 8 из 8. Маршрут и содержание ответа (числа, строки, раздел «Как посчитано») совпадают между прогонами; расходится только время ответа модели.
card — шаблонная справка без вызова модели для
генерации SQL): 0,5 с во всех трёх прогонах. Порог методики — ≤ 2 мин; запас больше чем
в 200 раз.clarify): 10,8–12,1 с — резолвер без
обращения к модели для SQL, но с классификацией темы.Из 8 сценариев данные возвращают 6 (1, 2, 3, 4/шаг 2, 5, 7); 6а и 6б — отказы без данных, блок «Как посчитано» им не положен и в ответе отсутствует (это правильное поведение, не дефект).
Блок ### Как посчитано с объектами БД, фильтрами, формулой и финальным SQL присутствует во
всех 6 ответах с данными в каждом из 3 прогонов — 18 из 18, без исключений.
В сценарии 5 (закупки свыше 10 млн за 2026) во всех трёх прогонах раздел «Как посчитано» содержит отметку «сводка модели отклонена: числа 1,30 млрд не найдены в результате SQL» — модель в текстовой сводке назвала число, не совпадающее с результатом запроса, код это поймал по инварианту 1 (CLAUDE.md: «ни одного числа вне результата SQL») и заменил сводку детерминированной. Ответ пользователю при этом содержит только проверенные числа. Это рабочее срабатывание защитного механизма, а не дефект — отмечено отдельно, так как иллюстрирует инвариант 1 на живом трафике, а не только в офлайн-тестах.
Ниже — полные ответы прогона № 1 (эталон для чтения целиком). Прогоны № 2 и № 3 совпали с прогоном
№ 1 по маршруту, числам и структуре ответа во всех 8 сценариях — отличия только во времени ответа
модели (таблица в разделе 1); полные тексты прогонов № 2 и № 3 сохранены отдельными файлами
eval/out/runs/run2.md и eval/out/runs/run3.md.
Запрос: Подготовь справку по контрагенту ИНН 6600370124 за 2024–2026
HTTP 200, route = card, 0.5 с
Ответ (answer_md):
## Справка по контрагенту: ООО «Альфа-Снаб Екатеринбург»
Период: 2024–2026 годы; данные по 30.09.2026, 2026 год неполный. Суммы — руб. без НДС.
### 1. Реквизиты
- ИНН 6600370124, КПП: 660001001
- Тип: ЮЛ; страна: Россия
- Записей в справочнике контрагентов: 3; написаний наименования в заказах за период: 3 — объединены по ИНН+КПП, суммы ниже не задваиваются:
- ООО «Альфа-Снаб Екатеринбург» — 7 845 поз.
- АЛЬФА-СНАБ ЕКАТЕРИНБУРГ ООО — 4 070 поз.
- ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "АЛЬФА-СНАБ ЕКАТЕРИНБУРГ" — 1 372 поз.
- Холдинг: АО «Альфа-Снаб Групп» — юрлиц: 6 (раздел 5)
### 2. Сумма закупок по годам
| Год | Заказов | Позиций | Сумма без НДС, руб. | Динамика |
|---|---:|---:|---:|---|
| 2024 | 1 765 | 4 711 | 1 283 347 239,32 | — |
| 2025 | 1 783 | 4 858 | 1 357 249 732,08 | +5,8 % к 2024 |
| 2026 (янв–сен) | 1 384 | 3 718 | 1 108 136 778,83 | +15,2 % к тому же периоду 2025 |
**Итого за период: 3 748 733 750,23 руб. (3,75 млрд руб.)**
### 3. ТОП-10 классов материалов МДМ
| Код класса | Класс материала | Позиций | Сумма без НДС, руб. | Доля, % |
|---|---|---:|---:|---:|
| 001_CLOTHES_SPEC | ОДЕЖДА СПЕЦИАЛЬНОГО НАЗНАЧЕНИЯ | 3 042 | 1 111 123 420,16 | 29,64 % |
| 001_OIL | МАСЛА СМАЗОЧНЫЕ | 1 398 | 677 417 170,99 | 18,07 % |
| 001_SHOES_SPECIAL | ОБУВЬ СПЕЦИАЛЬНОГО НАЗНАЧЕНИЯ | 1 236 | 315 837 563,43 | 8,43 % |
| 001_SMAZKI | СМАЗКИ | 610 | 256 695 128,06 | 6,85 % |
| 001_SIZOD | СИЗОД | 677 | 256 374 428,65 | 6,84 % |
| 001_SIZ_HANDS | СИЗ РУК | 542 | 248 031 753,84 | 6,62 % |
| — | класс материала: не заполнен | 638 | 203 153 338,86 | 5,42 % |
| 001_SIZ_FALL | СИЗ ОТ ПАДЕНИЯ С ВЫСОТЫ | 406 | 114 844 687,92 | 3,06 % |
| 001_SREDSTVA_ZASH | СРЕДСТВА ДЕРМАТОЛОГИЧЕСКИЕ ЗАЩИТНЫЕ | 268 | 114 681 789,39 | 3,06 % |
| 001_SR_MOUSHIE | ХИМИЯ И КОСМЕТИКА БЫТОВАЯ | 407 | 67 475 199,58 | 1,80 % |
**5,4 % суммы не отнесено к классам** (класс материала: не заполнен, позиций: 638).
### 4. Распределение по БЕ
| БЕ | Наименование БЕ | Позиций | Сумма без НДС, руб. | Доля, % |
|---|---|---:|---:|---:|
| 1100 | АО «Северокаменский ГОК» | 3 140 | 854 848 789,86 | 22,80 % |
| 3800 | АО «Медь-Северная» | 2 648 | 596 638 054,14 | 15,92 % |
| 7400 | АО «Цинк-Южный» | 2 142 | 556 309 245,47 | 14,84 % |
| 5400 | АО «Рудник Приозёрный» | 1 480 | 550 898 197,08 | 14,70 % |
| 7800 | ООО «Каменская обогатительная фабрика» | 1 066 | 368 001 555,12 | 9,82 % |
| 2100 | ООО «Кабельный завод Степной» | 846 | 255 765 013,51 | 6,82 % |
| 4800 | ООО «Ремонтно-механический завод Озёрный» | 608 | 212 849 898,55 | 5,68 % |
| 1300 | ООО «Рудоуправление Таёжное» | 673 | 170 546 123,54 | 4,55 % |
| 2600 | ООО «Автотранспортное предприятие Горное» | 337 | 92 654 137,53 | 2,47 % |
| 6300 | ООО «Промэнергоналадка» | 347 | 90 222 735,43 | 2,41 % |
### 5. Юрлица холдинга АО «Альфа-Снаб Групп»
| ИНН | КПП | Юрлицо | Записей справочника | Сумма без НДС за 2024–2026, руб. |
|---|---|---|---:|---:|
| 6600370124 | 660001001 | ООО «Альфа-Снаб Екатеринбург» | 3 | 3 748 733 750,23 |
| 4200610699 | 420001001 | ООО «Альфа-Снаб Кузбасс» | 2 | 1 638 216 429,02 |
| 7400179490 | 740001001 | ООО «Альфа-Снаб Урал» | 1 | 772 331 345,91 |
| 7700198246 | 770001001 | АО «Альфа-Снаб Спецкомплект» | 1 | 566 374 063,18 |
| 5400651045 | 540001001 | ООО «Альфа-Снаб Сибирь» | 1 | 501 949 020,06 |
| 6600411821 | 660001001 | АО «Альфа-Снаб Групп» | 1 | 331 183 707,03 |
---
### Как посчитано
- **Объекты БД:** `dm_v_purch.order_purch_h1` — позиции заказов поставщикам; `dm_v_purch.request_purch_h1` — позиции заявок (класс материала); `dm_v_purch.mdm_class_h1` — классификатор МДМ; `dm_v_purch.dim_contragent_h1` — справочник контрагентов
- **Фильтры:** ИНН 6600370124; год создания заказа 2024–2026 (`ord_creation_year`)
- **Формула:** сумма = SUM(`ord_cost_amt`), руб. без НДС, период по дате создания заказа (Д4); поставщик определяется по ИНН, разные написания наименования объединены (R5); класс — по `req_matclass_cd` и классификатору МДМ, позиции без класса выделены строкой (Д7)
- **Способ:** шаблонная справка — фиксированные SQL без генерации моделью
- **SQL (7 запросов):**
- Написания наименования в заказах:
```sql
SELECT o.contragent_nm, COUNT(*) AS pos_cnt
FROM dm_v_purch.order_purch_h1 o
WHERE o.contragent_inn_cd = '6600370124' AND o.ord_creation_year BETWEEN 2024 AND 2026
GROUP BY o.contragent_nm
ORDER BY pos_cnt DESC
```
- Сумма по годам:
```sql
SELECT o.ord_creation_year AS year,
COUNT(DISTINCT o.ord_doc_num) AS order_cnt,
COUNT(*) AS pos_cnt,
ROUND(SUM(o.ord_cost_amt)::numeric, 2) AS sum_wo_vat_rub
FROM dm_v_purch.order_purch_h1 o
WHERE o.contragent_inn_cd = '6600370124' AND o.ord_creation_year BETWEEN 2024 AND 2026
GROUP BY 1
ORDER BY 1
```
- Сопоставимый период 2025 года:
```sql
SELECT ROUND(SUM(o.ord_cost_amt)::numeric, 2) AS sum_wo_vat_rub
FROM dm_v_purch.order_purch_h1 o
WHERE o.contragent_inn_cd = '6600370124' AND o.ord_creation_dt BETWEEN DATE '2025-01-01' AND DATE '2025-09-30'
```
- ТОП-10 классов материалов:
```sql
SELECT r.req_matclass_cd AS class_cd,
COALESCE(k.class_nm, 'класс материала: не заполнен') AS class_nm,
COUNT(*) AS pos_cnt,
ROUND(SUM(o.ord_cost_amt)::numeric, 2) AS sum_wo_vat_rub,
ROUND((100.0 * SUM(o.ord_cost_amt) / SUM(SUM(o.ord_cost_amt)) OVER ())::numeric, 2) AS share_pct
FROM dm_v_purch.order_purch_h1 o
LEFT JOIN dm_v_purch.request_purch_h1 r ON r.req_delivery_num = o.req_delivery_num
AND r.req_delivery_pos_num = o.req_delivery_pos_num AND r.compcode_cd = o.compcode_cd
LEFT JOIN dm_v_purch.mdm_class_h1 k ON k.class_cd = r.req_matclass_cd
WHERE o.contragent_inn_cd = '6600370124' AND o.ord_creation_year BETWEEN 2024 AND 2026
GROUP BY 1, 2
ORDER BY sum_wo_vat_rub DESC
LIMIT 10
```
- Доля суммы без класса (Д7):
```sql
SELECT ROUND((100.0 * SUM(CASE WHEN r.req_matclass_cd IS NULL THEN o.ord_cost_amt ELSE 0 END)
/ NULLIF(SUM(o.ord_cost_amt), 0))::numeric, 2) AS no_class_share_pct,
SUM(CASE WHEN r.req_matclass_cd IS NULL THEN 1 ELSE 0 END) AS no_class_pos_cnt
FROM dm_v_purch.order_purch_h1 o
LEFT JOIN dm_v_purch.request_purch_h1 r ON r.req_delivery_num = o.req_delivery_num
AND r.req_delivery_pos_num = o.req_delivery_pos_num AND r.compcode_cd = o.compcode_cd
WHERE o.contragent_inn_cd = '6600370124' AND o.ord_creation_year BETWEEN 2024 AND 2026
```
- Распределение по БЕ:
```sql
SELECT o.compcode_cd, o.compcode_nm,
COUNT(*) AS pos_cnt,
ROUND(SUM(o.ord_cost_amt)::numeric, 2) AS sum_wo_vat_rub,
ROUND((100.0 * SUM(o.ord_cost_amt) / SUM(SUM(o.ord_cost_amt)) OVER ())::numeric, 2) AS share_pct
FROM dm_v_purch.order_purch_h1 o
WHERE o.contragent_inn_cd = '6600370124' AND o.ord_creation_year BETWEEN 2024 AND 2026
GROUP BY 1, 2
ORDER BY sum_wo_vat_rub DESC
```
- Юрлица холдинга:
```sql
SELECT c.taxpayer_cd AS supplier_inn, c.kpp_cd AS supplier_kpp,
COALESCE(MIN(c.contragent_nm) FILTER (WHERE c.contragent_nm LIKE '%«%'), MIN(c.contragent_nm)) AS supplier_nm,
COUNT(DISTINCT c.contragent_cd) AS records,
ROUND(COALESCE(SUM(o.ord_cost_amt), 0)::numeric, 2) AS sum_wo_vat_rub
FROM dm_v_purch.dim_contragent_h1 c
LEFT JOIN dm_v_purch.order_purch_h1 o
ON o.contragent_cd = c.contragent_cd AND o.ord_creation_year BETWEEN 2024 AND 2026
WHERE c.head_company_cd = '1000000001'
GROUP BY 1, 2
ORDER BY sum_wo_vat_rub DESC
```
Проверки:
Вердикт: ok
Запрос: Сумма закупок без НДС по БЕ 1100 за 2025 год
HTTP 200, route = nl2sql, 36.9 с
Ответ (answer_md):
По БЕ 1100 (АО «Северокаменский ГОК») за 2025 год сумма без НДС составила 28,08 млрд руб.
**Сумма закупок без НДС: 28 076 423 313,02 руб. (28,08 млрд руб.)**
---
### Как посчитано
- **Объекты БД:** `dm_v_purch.order_purch_h1` — позиции заказов поставщикам
- **Фильтры:** БЕ 1100 (АО «Северокаменский ГОК»); дата создания заказа 01.01.2025–31.12.2025
- **Формула:** сумма = SUM(`ord_cost_amt`), руб. без НДС; период — по дате создания заказа `ord_creation_dt` (Д4)
- **Строк в результате:** 1
- **Проверки:** SQL сгенерирован моделью по семантическому словарю (попыток: 1); прошел валидатор (один SELECT, только вью из белого списка, без DDL/DML/ATTACH); обязательные условия резолвера на месте; числа сводки модели сверены с результатом SQL
- **SQL:**
```sql
SELECT ROUND(SUM(o.ord_cost_amt)::numeric, 2) AS sum_wo_vat_rub FROM dm_v_purch.order_purch_h1 o WHERE o.compcode_cd = '1100' AND o.ord_creation_dt BETWEEN DATE '2025-01-01' AND DATE '2025-12-31'
```
Проверки:
Вердикт: ok
Запрос: Перечень поставщиков по категории масла за 2025 с суммами
HTTP 200, route = nl2sql, 61.9 с
Ответ (answer_md):
В отчёте по категории «МАСЛА СМАЗОЧНЫЕ» за 2025 год выделено 19 строк, включая 18 поставщиков с ИНН РФ и одну строку по объединённым физлицам без ИНН. Общая сумма составила 2,03 млрд руб. без НДС, при этом 241,42 млн руб. без НДС пришлось на ООО «Альфа-Снаб Екатеринбург».
Поставщиков с ИНН: 18; физлица без ИНН РФ — одной строкой (9 чел.). Найдено строк: 19. Итого: **2 029 818 296,85 руб. (2,03 млрд руб.)** без НДС.
| ИНН | КПП | Поставщик | Написаний | Позиций | Сумма без НДС, руб. |
|---|---|---|---:|---:|---:|
| 6600370124 | 660001001 | ООО «Альфа-Снаб Екатеринбург» | 3 | 472 | 241 415 038,53 |
| 5400311828 | 540001001 | АО «Шахтогрупп-Плюс» | 1 | 249 | 199 620 451,22 |
| 7400061547 | 740001001 | ООО "ЭЛЕКТРОТЕХНИКА-ЧЕЛЯБИНСК" | 1 | 296 | 170 410 357,52 |
| 7700598068 | 770001001 | ТЕХНОТЕХНИКА ООО | 1 | 190 | 148 504 158,11 |
| 0200314340 | 020001001 | ООО «Приводтрейд-Юг» | 1 | 261 | 143 492 615,11 |
| 7500384037 | 750001001 | ООО "ШАХТОГРАНИТГРУПП-ПЛЮС" | 1 | 262 | 134 523 575,35 |
| 4200202354 | 420001001 | Приводураллогистик-Регион, ПАО | 1 | 175 | 126 794 309,04 |
| 4200598226 | 420001001 | ЭЛЕКТРОПРОМ ООО | 1 | 185 | 124 757 878,78 |
| 170840270676 | — | ТОО «Степь Ойл Трейд» | 1 | 250 | 105 243 826,99 |
| 7500481464 | 750001001 | ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "МАШЭНЕРГО-ЕКАТЕРИНБУРГ" | 1 | 198 | 90 845 554,28 |
| 5400651045 | 540001001 | ООО «Альфа-Снаб Сибирь» | 1 | 234 | 83 134 046,79 |
| 7800704810 | 780001001 | ООО «Горносервис-Центр» | 1 | 135 | 82 638 219,40 |
| 3800045060 | 380001001 | ПРОМДЕТАЛЬ-РЕГИОН ООО | 1 | 174 | 78 738 837,36 |
| 5400278560 | 540001001 | ООО «Ресурспромтрейд-Плюс» | 1 | 189 | 76 687 329,10 |
| 6600450531 | 660001001 | АО "ГРАНИТПОСТАВКА-ЦЕНТР" | 1 | 138 | 72 904 839,61 |
| 7700475203 | 770001001 | АО «Сигмаэнерго-Центр» | 1 | 148 | 72 878 087,54 |
| 2700752634 | 270001001 | ЭЛЕКТРОПОСТАВКА-ЦЕНТР ООО | 1 | 115 | 43 987 952,26 |
| 6600093199 | 660001001 | ООО «УралСмазТорг» | 3 | 74 | 33 200 284,04 |
| без ИНН РФ | — | Физлица без ИНН РФ | 9 | 18 | 40 935,82 |
| **Итого** | | | | 3 763 | 2 029 818 296,85 |
Пропуски в данных (R4): «КПП» не заполнено в 2 стр. КПП не заполняется у физлиц и иностранных контрагентов.
---
### Как посчитано
- **Объекты БД:** `dm_v_purch.order_purch_h1` — позиции заказов поставщикам; `dm_v_purch.request_purch_h1` — позиции заявок (класс, группа, материал); `dm_v_purch.dim_contragent_h1` — справочник контрагентов
- **Фильтры:** «масла» → класс МДМ: 001_OIL (МАСЛА СМАЗОЧНЫЕ); дата создания заказа 01.01.2025–31.12.2025
- **Формула:** сумма = SUM(`ord_cost_amt`), руб. без НДС; период — по дате создания заказа `ord_creation_dt` (Д4); поставщики агрегированы по ИНН+КПП, разные написания объединены (в таблице — основное написание из справочника контрагентов); физлица с ИНН '#' — одной строкой «Физлица без ИНН РФ» (R5/Д9)
- **Строк в результате:** 19
- **Проверки:** SQL сгенерирован моделью по семантическому словарю (попыток: 1); прошел валидатор (один SELECT, только вью из белого списка, без DDL/DML/ATTACH); обязательные условия резолвера на месте; числа сводки модели сверены с результатом SQL
- **SQL:**
```sql
SELECT CASE WHEN o.contragent_inn_cd = '#' THEN 'без ИНН РФ' ELSE o.contragent_inn_cd END AS supplier_inn, CASE WHEN o.contragent_inn_cd = '#' THEN NULL ELSE c.kpp_cd END AS supplier_kpp, CASE WHEN o.contragent_inn_cd = '#' THEN 'Физлица без ИНН РФ' ELSE MIN(o.contragent_nm) END AS supplier_nm, COUNT(DISTINCT o.contragent_nm) AS name_variants, COUNT(*) AS pos_cnt, ROUND(SUM(o.ord_cost_amt)::numeric, 2) AS sum_wo_vat_rub FROM dm_v_purch.order_purch_h1 o JOIN dm_v_purch.request_purch_h1 r ON r.req_delivery_num = o.req_delivery_num AND r.req_delivery_pos_num = o.req_delivery_pos_num AND r.compcode_cd = o.compcode_cd LEFT JOIN dm_v_purch.dim_contragent_h1 c ON c.contragent_cd = o.contragent_cd WHERE o.ord_creation_dt BETWEEN DATE '2025-01-01' AND DATE '2025-12-31' AND r.req_matclass_cd IN ('001_OIL') GROUP BY 1, 2, o.contragent_inn_cd ORDER BY sum_wo_vat_rub DESC
```
Проверки:
Вердикт: ok
Запрос: Покажи поставки шпал за 2026
HTTP 200, route = clarify, 12.1 с
Ответ (answer_md):
**Уточните, пожалуйста:** По фрагменту «ШПАЛ» найдено 18 наименований в 3 группах материалов. Какие показать?
1. МАТЕРИАЛЫ ВЕРХНЕГО СТРОЕНИЯ ПУТИ — 9 наим., например «ПОДКЛАДКА ШПАЛЬНАЯ КБ-65»
2. ЛЕСОМАТЕРИАЛЫ И ПИЛОМАТЕРИАЛЫ — 7 наим., например «ШПАЛА ДЕРЕВ. ПРОПИТ. ТИП 2»
3. МАТЕРИАЛЫ СТРОИТЕЛЬНЫЕ — 2 наим., например «ШПАЛА ЖЕЛЕЗОБЕТ. ДЛЯ СТРЕЛОЧН.ПЕРЕВОДА ШСП»
4. Все группы (18 наим.)
Ответьте номером варианта или его названием.
Запрос (продолжение диалога, dialog_state из предыдущего ответа): 2
HTTP 200, route = nl2sql, 37.6 с
Ответ (answer_md):
В отчёте зафиксировано 203 строки по поставкам шпал на общую сумму 121,58 млн руб. без НДС.
Под условия подходит **203 строк** на сумму **121 577 979,57 руб. (121,58 млн руб.)** без НДС. Это больше 200 строк, поэтому детализация не выгружается (R2): ниже агрегат и ТОП-10.
**ТОП-10 по сумме:**
| БЕ | Заказ | Позиция | Дата заказа | contragent_nm | Материал | Сумма без НДС, руб. | Количество | ЕИ |
|---|---|---:|---|---|---|---:|---:|---|
| 7800 | 4700152778 | 10 | 02.09.2026 | ООО «Буррудомонтаж-Сибирь» | ШПАЛА ДЕРЕВ. ПРОПИТ. ТИП 2 | 1 758 540,00 | 600 | ШТ |
| 3800 | 4700139231 | 10 | 10.06.2026 | ООО «Буррудомонтаж-Сибирь» | ШПАЛА ДЕРЕВ. ПРОПИТ. ТИП 2 | 1 349 722,00 | 475 | ШТ |
| 5400 | 4700139265 | 10 | 10.06.2026 | ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "СИГМАМОНТАЖ-РЕГИОН" | ШПАЛА ПРОПИТАННАЯ АНТИСЕПТИКОМ ТИП III | 1 314 627,16 | 349 | ШТ |
| 7800 | 4700132343 | 10 | 01.05.2026 | ООО "ЭНЕРГОДЕТАЛЬ-ЦЕНТР" | ШПАЛА ДЕРЕВ. ПРОПИТ. ТИП 2 | 1 279 864,32 | 399 | ШТ |
| 3800 | 4700143335 | 10 | 06.07.2026 | ООО "ЭНЕРГОДЕТАЛЬ-ЦЕНТР" | ШПАЛА ПРОПИТАННАЯ АНТИСЕПТИКОМ ТИП III | 1 220 962,52 | 356 | ШТ |
| 5400 | 4700120194 | 20 | 13.02.2026 | ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "СИГМАМОНТАЖ-РЕГИОН" | ШПАЛА ПРОПИТАННАЯ АНТИСЕПТИКОМ ТИП III | 1 209 684,94 | 326 | ШТ |
| 2600 | 4700143744 | 20 | 08.07.2026 | ООО "ЭНЕРГОДЕТАЛЬ-ЦЕНТР" | ШПАЛА ДЕРЕВ. ПРОПИТ. ТИП 2 | 1 194 202,73 | 359 | ШТ |
| 3800 | 4700124997 | 10 | 17.03.2026 | ООО «Буррудомонтаж-Сибирь» | ШПАЛА ПРОПИТАННАЯ АНТИСЕПТИКОМ ТИП III | 1 165 189,44 | 304 | ШТ |
| 4800 | 4700134300 | 10 | 12.05.2026 | ООО «Буррудомонтаж-Сибирь» | ШПАЛА ПРОПИТАННАЯ АНТИСЕПТИКОМ ТИП III | 1 155 543,48 | 294 | ШТ |
| 5400 | 4700150223 | 10 | 18.08.2026 | ООО "ЭНЕРГОДЕТАЛЬ-ЦЕНТР" | ШПАЛА ПРОПИТАННАЯ АНТИСЕПТИКОМ ТИП III | 1 145 895,30 | 330 | ШТ |
**Распределение по БЕ (по полному результату):**
| БЕ | Позиций | Сумма без НДС, руб. |
|---|---:|---:|
| 1100 | 47 | 27 366 198,67 |
| 3800 | 39 | 26 055 966,53 |
| 7400 | 35 | 19 162 454,51 |
| 7800 | 31 | 18 891 399,64 |
| 5400 | 25 | 14 841 968,18 |
| 2600 | 9 | 5 870 435,00 |
| 1300 | 11 | 5 291 515,62 |
| 4800 | 2 | 1 474 910,88 |
| 2100 | 2 | 1 473 251,84 |
| 6300 | 2 | 1 149 878,70 |
Оговорки: поиск по фрагменту «ШПАЛ» — это не категория МДМ: в выборке все материалы с таким фрагментом в наименовании, включая сопутствующие позиции (например, подкладки, прокладки); поиск по фрагменту «ШПАЛ» — это не категория МДМ: в выборке все материалы с таким фрагментом в наименовании, включая сопутствующие позиции (например, подкладки, прокладки).
**Чтобы получить детализацию**, уточните фильтры: БЕ, поставщика (ИНН), класс материала, более высокий порог суммы или более короткий период.
---
### Как посчитано
- **Объекты БД:** `dm_v_purch.order_purch_h1` — позиции заказов поставщикам; `dm_v_purch.request_purch_h1` — позиции заявок (класс, группа, материал); `dm_v_purch.dim_material_h1` — справочник материалов; `dm_v_purch.mrp_order_h1` — количество и цена позиции заказа
- **Фильтры:** наименование материала содержит «ШПАЛ»; группа: ЛЕСОМАТЕРИАЛЫ И ПИЛОМАТЕРИАЛЫ (MG00260); наименование материала содержит «ШПАЛ»; группа: ЛЕСОМАТЕРИАЛЫ И ПИЛОМАТЕРИАЛЫ (MG00260); дата создания заказа 01.01.2026–31.12.2026 (данные в базе — по 30.09.2026; 2026 год неполный)
- **Формула:** сумма = SUM(`ord_cost_amt`), руб. без НДС; период — по дате создания заказа `ord_creation_dt` (Д4); количество = SUM(`"0order_quan"`) из `mrp_order_h1` в разрезе единиц измерения; результат больше 200 строк: число строк, сумма, распределение и ТОП-10 посчитаны по полному результату запроса (R2)
- **Строк в результате:** 203
- **Проверки:** SQL сгенерирован моделью по семантическому словарю (попыток: 1); прошел валидатор (один SELECT, только вью из белого списка, без DDL/DML/ATTACH); обязательные условия резолвера на месте; числа сводки модели сверены с результатом SQL
- **SQL:**
```sql
SELECT o.compcode_cd, o.ord_doc_num, o.ord_pos_num, o.ord_creation_dt, o.contragent_nm, d.material_nm, ROUND(o.ord_cost_amt::numeric, 2) AS sum_wo_vat_rub, m."0order_quan" AS qty, m."0po_unit" AS uom FROM dm_v_purch.order_purch_h1 o JOIN dm_v_purch.request_purch_h1 r ON r.req_delivery_num = o.req_delivery_num AND r.req_delivery_pos_num = o.req_delivery_pos_num AND r.compcode_cd = o.compcode_cd JOIN dm_v_purch.dim_material_h1 d ON d.material_cd = r.ord_material_cd JOIN dm_v_purch.mrp_order_h1 m ON m."0comp_code" = o.compcode_cd AND m.zdoczak = o.ord_doc_num AND CAST(m.zposdok AS int) = o.ord_pos_num WHERE d.material_nm ILIKE '%ШПАЛ%' AND d.matgroup_cd IN ('MG00260') AND o.ord_creation_dt BETWEEN DATE '2026-01-01' AND DATE '2026-12-31' ORDER BY o.ord_cost_amt DESC
```
Проверки:
Вердикт: ok
Запрос: Закупки свыше 10 млн за 2026
HTTP 200, route = nl2sql, 60.5 с
Ответ (answer_md):
Под условия подходит **1 150 строк** на сумму **34 949 335 628,35 руб. (34,95 млрд руб.)** без НДС. Это больше 200 строк, поэтому детализация не выгружается (R2): ниже агрегат и ТОП-10.
**ТОП-10 по сумме:**
| БЕ | Заказ | Позиция | Дата заказа | ИНН | Поставщик | Материал | Сумма без НДС, руб. |
|---|---|---:|---|---|---|---|---:|
| 3800 | 4700154211 | 10 | 10.09.2026 | 6600153200 | АО «Торговый дом Северная медь» | МЕДЬ ЧЕРНОВАЯ МЧ-2 | 1 314 313 153,96 |
| 2100 | 4700129247 | 10 | 13.04.2026 | 6600837049 | АО «Медь-Северная» | КАТАНКА МЕДНАЯ КМОР Ф12ММ | 1 305 397 331,64 |
| 2100 | 4700155298 | 10 | 17.09.2026 | 6600153200 | АО «Торговый дом Северная медь» | КАТАНКА МЕДНАЯ КМОР Ф8ММ | 954 029 815,94 |
| 7400 | 4700139976 | 10 | 15.06.2026 | 6600190876 | АО «Северокаменский ГОК» | КОНЦЕНТРАТ ЦИНКОВЫЙ КЦ-3 | 864 649 258,38 |
| 3800 | 4700130699 | 10 | 22.04.2026 | 6600153200 | АО «Торговый дом Северная медь» | МЕДЬ ЧЕРНОВАЯ МЧ-2 | 835 023 538,45 |
| 3800 | 4700120144 | 10 | 13.02.2026 | 6600749473 | ООО «Рудоуправление Таёжное» | CU КОНЦЕНТРАТ МЕДНЫЙ СОРТ КМ-3 | 767 150 068,21 |
| 2100 | 4700155517 | 10 | 18.09.2026 | 6600153200 | АО «Торговый дом Северная медь» | КАТАНКА МЕДНАЯ КМОР Ф12ММ | 678 490 429,95 |
| 7400 | 4700124041 | 10 | 10.03.2026 | 6600252280 | АО «Рудник Приозёрный» | КОНЦ-Т ЦИНКОВЫЙ КЦ-3 | 502 809 312,95 |
| 7400 | 4700145706 | 10 | 21.07.2026 | 6600645996 | ООО «Каменская обогатительная фабрика» | КОНЦЕНТРАТ ЦИНКОВЫЙ КЦ-5 | 488 729 880,80 |
| 3800 | 4700120558 | 10 | 17.02.2026 | 6600645996 | ООО «Каменская обогатительная фабрика» | КОНЦЕНТРАТ МЕДНЫЙ | 407 411 414,56 |
**Распределение по БЕ (по полному результату):**
| БЕ | Позиций | Сумма без НДС, руб. |
|---|---:|---:|
| 3800 | 223 | 9 590 170 258,22 |
| 1100 | 283 | 5 752 062 355,47 |
| 7400 | 142 | 5 130 461 836,09 |
| 2100 | 49 | 4 115 433 522,13 |
| 5400 | 152 | 3 545 441 875,29 |
| 7800 | 127 | 2 656 353 274,26 |
| 1300 | 72 | 1 494 606 849,24 |
| 2600 | 23 | 1 099 627 276,87 |
| 6300 | 48 | 983 638 445,91 |
| 4800 | 31 | 581 539 934,87 |
**Чтобы получить детализацию**, уточните фильтры: БЕ, поставщика (ИНН), класс материала, более высокий порог суммы или более короткий период.
---
### Как посчитано
- **Объекты БД:** `dm_v_purch.order_purch_h1` — позиции заказов поставщикам; `dm_v_purch.request_purch_h1` — позиции заявок (класс, группа, материал); `dm_v_purch.dim_material_h1` — справочник материалов
- **Фильтры:** дата создания заказа 01.01.2026–31.12.2026 (данные в базе — по 30.09.2026; 2026 год неполный); сумма позиции > 10 000 000 руб. без НДС
- **Формула:** сумма = SUM(`ord_cost_amt`), руб. без НДС; период — по дате создания заказа `ord_creation_dt` (Д4); результат больше 200 строк: число строк, сумма, распределение и ТОП-10 посчитаны по полному результату запроса (R2)
- **Строк в результате:** 1 150
- **Проверки:** SQL сгенерирован моделью по семантическому словарю (попыток: 1); прошел валидатор (один SELECT, только вью из белого списка, без DDL/DML/ATTACH); обязательные условия резолвера на месте; сводка модели отклонена: числа 1,30 млрд не найдены в результате SQL
- **SQL:**
```sql
SELECT o.compcode_cd, o.ord_doc_num, o.ord_pos_num, o.ord_creation_dt, o.contragent_inn_cd AS supplier_inn, o.contragent_nm AS supplier_nm, d.material_nm, ROUND(o.ord_cost_amt::numeric, 2) AS sum_wo_vat_rub FROM dm_v_purch.order_purch_h1 o LEFT JOIN dm_v_purch.request_purch_h1 r ON r.req_delivery_num = o.req_delivery_num AND r.req_delivery_pos_num = o.req_delivery_pos_num AND r.compcode_cd = o.compcode_cd LEFT JOIN dm_v_purch.dim_material_h1 d ON d.material_cd = r.ord_material_cd WHERE o.ord_creation_dt BETWEEN DATE '2026-01-01' AND DATE '2026-12-31' AND o.ord_cost_amt > 10000000 ORDER BY o.ord_cost_amt DESC
```
Проверки:
Вердикт: ok
Запрос: Какого поставщика выбрать по топливу?
HTTP 200, route = refusal, 0.0 с
Ответ (answer_md):
Выбор поставщика — решение закупщика; рекомендаций стенд не дает.
**Что могу сделать по фактическим данным:** показать перечень поставщиков по топливу за период: суммы без НДС, число заказов, средневзвешенные цены, доли по БЕ.
Проверки:
Вердикт: ok
Запрос: Почему выросла цена на металл?
HTTP 200, route = refusal, 0.0 с
Ответ (answer_md):
Причины изменений в данных закупок не содержатся — ответ был бы догадкой.
**Что могу сделать по фактическим данным:** показать динамику средневзвешенной цены на металл по месяцам и в разрезе поставщиков — по фактическим заказам.
Проверки:
Вердикт: ok
Запрос: Структура закупок БЕ 7400 за 2025 год по классам материалов
HTTP 200, route = nl2sql, 70.2 с
Ответ (answer_md):
По итогам 2025 года для БЕ 7400 (АО «Цинк-Южный») сгруппировано 275 строк по классам материалов на общую сумму 15,02 млрд руб. без НДС. Наибольший объём приходится на класс «ИЗДЕЛИЯ И ПРОДУКТЫ ЦИНКОСОДЕРЖАЩИЕ» — 0,94 млрд руб. без НДС, а доля сумм без указания класса составляет 27,9%.
Под условия подходит **275 строк** на сумму **15 015 978 659,21 руб. (15,02 млрд руб.)** без НДС. Это больше 200 строк, поэтому детализация не выгружается (R2): ниже агрегат и ТОП-10.
**ТОП-10 по сумме:**
| Код класса МДМ | Класс материала | Позиций | Сумма без НДС, руб. |
|---|---|---:|---:|
| — | класс материала: не заполнен | 4 327 | 4 190 072 105,89 |
| 023_IZD_CINK | ИЗДЕЛИЯ И ПРОДУКТЫ ЦИНКОСОДЕРЖАЩИЕ | 7 | 943 832 686,64 |
| 001_HIMREAKTIV | РЕАКТИВЫ ХИМИЧЕСКИЕ | 315 | 632 176 432,87 |
| 001_EL_APPARATY | ЭЛЕКТРОТЕХНИКА | 192 | 622 104 435,37 |
| 001_TOPLIVO_DIZEL | ТОПЛИВО ДИЗЕЛЬНОЕ | 147 | 505 215 960,86 |
| 001_OBOR_DROB_RAZM | ОБОРУДОВАНИЕ ДРОБИЛЬНО-РАЗМОЛЬНОЕ | 4 | 479 582 360,92 |
| 001_OGNEUP_FORM | ОГНЕУПОРЫ ФОРМОВАННЫЕ | 65 | 235 921 683,40 |
| 001_CLOTHES_SPEC | ОДЕЖДА СПЕЦИАЛЬНОГО НАЗНАЧЕНИЯ | 770 | 235 257 148,83 |
| 001_OGNEUP_NEFORM | ОГНЕУПОРЫ НЕФОРМОВАННЫЕ | 71 | 229 374 106,07 |
| 001_ZADV_TRUBOPR | ЗАДВИЖКИ ТРУБОПРОВОДНЫЕ | 189 | 228 725 172,28 |
**27,9 % суммы не отнесено к классам** (класс материала: не заполнен).
**Чтобы получить детализацию**, уточните фильтры: БЕ, поставщика (ИНН), класс материала, более высокий порог суммы или более короткий период.
---
### Как посчитано
- **Объекты БД:** `dm_v_purch.order_purch_h1` — позиции заказов поставщикам; `dm_v_purch.request_purch_h1` — позиции заявок (класс, группа, материал); `dm_v_purch.mdm_class_h1` — классификатор МДМ
- **Фильтры:** БЕ 7400 (АО «Цинк-Южный»); дата создания заказа 01.01.2025–31.12.2025
- **Формула:** сумма = SUM(`ord_cost_amt`), руб. без НДС; период — по дате создания заказа `ord_creation_dt` (Д4); класс — по `req_matclass_cd` и классификатору МДМ; позиции без класса не отброшены, выделены строкой «класс материала: не заполнен» (Д7); результат больше 200 строк: число строк, сумма, распределение и ТОП-10 посчитаны по полному результату запроса (R2)
- **Строк в результате:** 275
- **Проверки:** SQL сгенерирован моделью по семантическому словарю (попыток: 1); прошел валидатор (один SELECT, только вью из белого списка, без DDL/DML/ATTACH); обязательные условия резолвера на месте; числа сводки модели сверены с результатом SQL
- **SQL:**
```sql
SELECT r.req_matclass_cd AS class_cd, COALESCE(k.class_nm, 'класс материала: не заполнен') AS class_nm, COUNT(*) AS pos_cnt, ROUND(SUM(o.ord_cost_amt)::numeric, 2) AS sum_wo_vat_rub FROM dm_v_purch.order_purch_h1 o JOIN dm_v_purch.request_purch_h1 r ON r.req_delivery_num = o.req_delivery_num AND r.req_delivery_pos_num = o.req_delivery_pos_num AND r.compcode_cd = o.compcode_cd LEFT JOIN dm_v_purch.mdm_class_h1 k ON k.class_cd = r.req_matclass_cd WHERE o.compcode_cd = '7400' AND o.ord_creation_dt BETWEEN DATE '2025-01-01' AND DATE '2025-12-31' GROUP BY 1, 2 ORDER BY sum_wo_vat_rub DESC
```
Проверки:
Вердикт: ok