From b6d20891995926f816784e0d095534761926436b Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Tue, 6 Oct 2026 20:44:33 +0400 Subject: [PATCH] =?UTF-8?q?openspec:=20=D0=B1=D0=B0=D0=BB=D0=B0=D0=BD?= =?UTF-8?q?=D1=81=20=D0=9D=D0=9F=D0=97=20needs=5Fcheck=20=D0=BF=D0=BE=2016?= =?UTF-8?q?00=20=3D=201700,=20=D0=BF=D0=BE=D0=BB=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=E2=80=94=20=D1=82=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=BA=D0=BE=20=D0=9C=D0=B5=D0=B6=D0=B5=D0=BD=D0=B8=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D1=81=D0=BA=D0=B0=D1=8F=20(R-13,=20=D1=80=D0=B5?= =?UTF-8?q?=D1=88=D0=B5=D0=BD=D0=B8=D0=B5=20=E2=84=9623)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Баланс НПЗ расходится по 1600 = 1700 на 1.94 / 9.02 / 2.48 руб. (значения в рублях при шапке «тыс. руб.», OQ-137): статус книги needs_check, допуск ±1 не меняется. Сценарий «Полные формы сходятся» ограничен формами Межениновской. Refs #14 Co-Authored-By: Claude Sonnet 5.5 Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b --- openspec/changes/slice-2b-statement-parser/design.md | 1 + .../specs/statement-parsing/spec.md | 8 +++++--- .../specs/tabular-recognition-service/spec.md | 6 ++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/openspec/changes/slice-2b-statement-parser/design.md b/openspec/changes/slice-2b-statement-parser/design.md index cdc0cff..ab083be 100644 --- a/openspec/changes/slice-2b-statement-parser/design.md +++ b/openspec/changes/slice-2b-statement-parser/design.md @@ -222,3 +222,4 @@ Unit (`tests/unit/parser/statements/`) на `gridbuilder`; property (`tests/fixt | 20 | 2026-10-06 | Task 11: `_RELATION/_TERM` допускают пятизначные коды справа (предписано планом), но явные правила из yaml валидатор загрузки ограничивает четырёхзначными | подстрочные правила генерируются кодом; спека: словарь — только четырёхзначные | пятизначный код в yaml отвергается при загрузке (R-9) | | 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) | +| 23 | 2026-10-06 | R-13: допуск ±1 не меняется; баланс НПЗ ожидаемо `needs_check` (значения в рублях с копейками при шапке «тыс. руб.», 1600 = 1700 расходятся на 1.94/9.02/2.48, OQ-137); решение владельца, вариант А | единицы не нормализуются (D-6), допуск ±1 (D-7) | если владелец передумает — допуск/нормировка в словаре | diff --git a/openspec/changes/slice-2b-statement-parser/specs/statement-parsing/spec.md b/openspec/changes/slice-2b-statement-parser/specs/statement-parsing/spec.md index 742c4c9..4a9487f 100644 --- a/openspec/changes/slice-2b-statement-parser/specs/statement-parsing/spec.md +++ b/openspec/changes/slice-2b-statement-parser/specs/statement-parsing/spec.md @@ -139,8 +139,8 @@ false`; `confidence = 100`. Повтор кода внутри документ коду как мягкая, когда подстроки есть. Перечень нарушений SHALL дублироваться строками в `metrics.warnings`. #### Scenario: Полные формы сходятся -- **WHEN** разбираются книга НПЗ и обе формы Межениновской -- **THEN** у документов `BALANCE` и `INCOME` `checks.relations_failed = []` по всем колонкам +- **WHEN** разбираются обе формы Межениновской (`1_Форма1_бух_09.xlsx`, `1_Форма2_бух_09.xlsx`) +- **THEN** у документов `BALANCE` и `INCOME` `checks.relations_failed = []` по всем колонкам, статус `done` #### Scenario: Знаки 1С - **WHEN** в ОФР Унагранде Компани (страница 1) расходы записаны со знаком минус (2120 = −6162067308.99) @@ -167,7 +167,9 @@ false`; `confidence = 100`. Повтор кода внутри документ #### Scenario: Баланс на пяти листах - **WHEN** разбирается книга НПЗ - **THEN** два документа: `BALANCE` с `locator = "sheet:Бухгалтерский баланс. Лист 1,Бухгалтерский баланс. Лист 2,…,Лист 5"` - и строками от 1105 до 1700 включительно, `INCOME` с тремя листами; статус книги `done` + и строками от 1105 до 1700 включительно, `INCOME` на листах отчёта о финансовых результатах; `checks.relations_failed` + баланса содержит только `1600 = 1700` по трём колонкам (расхождения 1.94 / 9.02 / 2.48 руб.: значения в рублях с + копейками при шапке «тыс. руб.», OQ-137; допуск ±1 не меняется); статус книги `needs_check` #### Scenario: Одинокая страница 2 - **WHEN** разбирается `unagrande-group/2024-FY/ОФР. Лист 2.xls` (стр. 1 в пакете нет) diff --git a/openspec/changes/slice-2b-statement-parser/specs/tabular-recognition-service/spec.md b/openspec/changes/slice-2b-statement-parser/specs/tabular-recognition-service/spec.md index d7989e8..7663f53 100644 --- a/openspec/changes/slice-2b-statement-parser/specs/tabular-recognition-service/spec.md +++ b/openspec/changes/slice-2b-statement-parser/specs/tabular-recognition-service/spec.md @@ -24,8 +24,10 @@ NATS и S3; воркер MUST NOT зависеть от конкретной р #### Scenario: Реальные формы через воркер - **WHEN** в интеграционном тесте в S3 лежит книга `statements-xlsx/npz/2025-Q3/…xlsx` и опубликован запрос `file_type = XLSX` -- **THEN** после ack публикуется конверт `done` с `result_schema_version = "1.2"`, файл результата содержит два - `statementDocument` (`BALANCE`, `INCOME`) с `checks.relations_failed = []` +- **THEN** после ack публикуется конверт `needs_check` с `result_schema_version = "1.2"` (книга НПЗ: `1600 = 1700` + расходится на 1.94 / 9.02 / 2.48 руб. — значения в рублях при шапке «тыс. руб.», OQ-137), файл результата содержит два + `statementDocument` (`BALANCE`, `INCOME`); `checks.relations_failed` баланса содержит только `1600 = 1700` по трём + колонкам #### Scenario: Книга без ОСВ и форм - **WHEN** в S3 лежит книга Excel, ни один лист которой не имеет признаков ОСВ или формы