openspec: сценарии «Знаки 1С», «Баланс на пяти листах», воркер — по факту (R-14, O-9)

Знаки 1С доказываются на ОФР Межениновской; ОФР НПЗ и Унагранде расходятся из-за
единиц (OQ-137). У НПЗ INCOME на двух листах, лист с одной строкой 2400 пропускается.

Refs #14

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b
This commit is contained in:
Andrey Epifancev 2026-10-06 20:52:44 +04:00
parent 07d57cbd07
commit 976fc809fe
3 changed files with 12 additions and 6 deletions

View File

@ -223,3 +223,5 @@ Unit (`tests/unit/parser/statements/`) на `gridbuilder`; property (`tests/fixt
| 21 | 2026-10-06 | Task 12: лист-продолжение без колонки кодов при непустом результате не теряется молча — книга получает `needs_check` (флаг `dropped`); продолжение с типом `OTHER` проверяется по правилам ББ; `form_name` продолжения без маркера не передаётся | данные не должны теряться при `done`; продолжение без шапки не имеет собственного названия | лишний `needs_check` на редком листе (R-10) | | 21 | 2026-10-06 | Task 12: лист-продолжение без колонки кодов при непустом результате не теряется молча — книга получает `needs_check` (флаг `dropped`); продолжение с типом `OTHER` проверяется по правилам ББ; `form_name` продолжения без маркера не передаётся | данные не должны теряться при `done`; продолжение без шапки не имеет собственного названия | лишний `needs_check` на редком листе (R-10) |
| 22 | 2026-10-06 | Task 12: допуск соотношений не менялся: НПЗ (`npz/2025-Q3`) даёт `needs_check` — 1600 = 1700 расходятся на 1.94 / 9.02 / 2.48 (значения в рублях с копейками при заголовке «тыс. руб.», сам файл не сходится) | спека D-6/D-7: единицы не нормализуются, допуск ±1 в единицах формы; подгонка допуска под файл — решение владельца (OQ-137) | если владелец хочет `done` для НПЗ: допуск/нормировка единиц, одна строка в словаре; манифест в задаче 14 фиксирует `needs_check` с причиной (R-11) | | 22 | 2026-10-06 | Task 12: допуск соотношений не менялся: НПЗ (`npz/2025-Q3`) даёт `needs_check` — 1600 = 1700 расходятся на 1.94 / 9.02 / 2.48 (значения в рублях с копейками при заголовке «тыс. руб.», сам файл не сходится) | спека D-6/D-7: единицы не нормализуются, допуск ±1 в единицах формы; подгонка допуска под файл — решение владельца (OQ-137) | если владелец хочет `done` для НПЗ: допуск/нормировка единиц, одна строка в словаре; манифест в задаче 14 фиксирует `needs_check` с причиной (R-11) |
| 23 | 2026-10-06 | R-13: допуск ±1 не меняется; баланс НПЗ ожидаемо `needs_check` (значения в рублях с копейками при шапке «тыс. руб.», 1600 = 1700 расходятся на 1.94/9.02/2.48, OQ-137); решение владельца, вариант А | единицы не нормализуются (D-6), допуск ±1 (D-7) | если владелец передумает — допуск/нормировка в словаре | | 23 | 2026-10-06 | R-13: допуск ±1 не меняется; баланс НПЗ ожидаемо `needs_check` (значения в рублях с копейками при шапке «тыс. руб.», 1600 = 1700 расходятся на 1.94/9.02/2.48, OQ-137); решение владельца, вариант А | единицы не нормализуются (D-6), допуск ±1 (D-7) | если владелец передумает — допуск/нормировка в словаре |
| 24 | 2026-10-06 | R-14: ОФР НПЗ и ОФР Унагранде (стр. 1) по факту `needs_check` — рубли с копейками при тыс. руб., 2100 расходится на 17.50/9.43/1416; допуск ±1 не меняется | то же, что №23 (OQ-137) | нормировка единиц/допуск в словаре, если владелец хочет `done` |
| 25 | 2026-10-06 | O-9: лист ОФР НПЗ с одной строкой 2400 (`min_codes` = 3) не распознаётся как форма и пропускается — строка 2400 теряется при `needs_check` документа | отложено на финальное ревью | потеря строки 2400 у НПЗ; понизить `min_codes` или принимать лист-продолжение по маркеру |

View File

@ -143,8 +143,10 @@ false`; `confidence = 100`. Повтор кода внутри документ
- **THEN** у документов `BALANCE` и `INCOME` `checks.relations_failed = []` по всем колонкам, статус `done` - **THEN** у документов `BALANCE` и `INCOME` `checks.relations_failed = []` по всем колонкам, статус `done`
#### Scenario: Знаки 1С #### Scenario: Знаки 1С
- **WHEN** в ОФР Унагранде Компани (страница 1) расходы записаны со знаком минус (2120 = −6162067308.99) - **WHEN** в ОФР Межениновской расходы записаны со знаком минус (2120 = −417659 при 2110 = 276851 и 2100 = −140808)
- **THEN** `2100 = 2110 − 2120` выполнено через вариант с `abs_terms`, в `relations_failed` его нет - **THEN** `2100 = 2110 − 2120` выполнено через вариант с `abs_terms`, в `relations_failed` его нет; то же доказывает
unit-тест `test_relation_holds_with_abs_terms`. Реальные ОФР Унагранде (страница 1) и НПЗ расходятся по 2100 из-за единиц
(рубли с копейками при шапке «тыс. руб.», OQ-137), а не из-за знака
#### Scenario: Испорченный итог #### Scenario: Испорченный итог
- **WHEN** в синтетическом балансе 1600 на 5 больше суммы 1100 + 1200 - **WHEN** в синтетическом балансе 1600 на 5 больше суммы 1100 + 1200
@ -167,9 +169,11 @@ false`; `confidence = 100`. Повтор кода внутри документ
#### Scenario: Баланс на пяти листах #### Scenario: Баланс на пяти листах
- **WHEN** разбирается книга НПЗ - **WHEN** разбирается книга НПЗ
- **THEN** два документа: `BALANCE` с `locator = "sheet:Бухгалтерский баланс. Лист 1,Бухгалтерский баланс. Лист 2,…,Лист 5"` - **THEN** два документа: `BALANCE` с `locator = "sheet:Бухгалтерский баланс. Лист 1,Бухгалтерский баланс. Лист 2,…,Лист 5"`
и строками от 1105 до 1700 включительно, `INCOME` на листах отчёта о финансовых результатах; `checks.relations_failed` и строками от 1105 до 1700 включительно, `INCOME` на двух листах (третий лист отчёта с единственной строкой 2400 не
баланса содержит только `1600 = 1700` по трём колонкам (расхождения 1.94 / 9.02 / 2.48 руб.: значения в рублях с распознаётся как форма: `min_codes = 3`, ограничение O-9); `checks.relations_failed` баланса содержит только
копейками при шапке «тыс. руб.», OQ-137; допуск ±1 не меняется); статус книги `needs_check` `1600 = 1700` по трём колонкам (расхождения 1.94 / 9.02 / 2.48 руб.: значения в рублях с копейками при шапке
«тыс. руб.», OQ-137; допуск ±1 не меняется); `INCOME` — `needs_check` по `2100`, `2200`, `2300` (OQ-137); статус
книги `needs_check`
#### Scenario: Одинокая страница 2 #### Scenario: Одинокая страница 2
- **WHEN** разбирается `unagrande-group/2024-FY/ОФР. Лист 2.xls` (стр. 1 в пакете нет) - **WHEN** разбирается `unagrande-group/2024-FY/ОФР. Лист 2.xls` (стр. 1 в пакете нет)

View File

@ -27,7 +27,7 @@ NATS и S3; воркер MUST NOT зависеть от конкретной р
- **THEN** после ack публикуется конверт `needs_check` с `result_schema_version = "1.2"` (книга НПЗ: `1600 = 1700` - **THEN** после ack публикуется конверт `needs_check` с `result_schema_version = "1.2"` (книга НПЗ: `1600 = 1700`
расходится на 1.94 / 9.02 / 2.48 руб. — значения в рублях при шапке «тыс. руб.», OQ-137), файл результата содержит два расходится на 1.94 / 9.02 / 2.48 руб. — значения в рублях при шапке «тыс. руб.», OQ-137), файл результата содержит два
`statementDocument` (`BALANCE`, `INCOME`); `checks.relations_failed` баланса содержит только `1600 = 1700` по трём `statementDocument` (`BALANCE`, `INCOME`); `checks.relations_failed` баланса содержит только `1600 = 1700` по трём
колонкам колонкам, у `INCOME` — нарушения `2100`, `2200`, `2300` по двум колонкам (те же рубли при «тыс. руб.», OQ-137)
#### Scenario: Книга без ОСВ и форм #### Scenario: Книга без ОСВ и форм
- **WHEN** в S3 лежит книга Excel, ни один лист которой не имеет признаков ОСВ или формы - **WHEN** в S3 лежит книга Excel, ни один лист которой не имеет признаков ОСВ или формы