From 729d4cb0728a9010a289c16f0831b34c8b794bc1 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Wed, 7 Oct 2026 11:51:06 +0400 Subject: [PATCH] =?UTF-8?q?docs(openspec):=20=D1=80=D0=B5=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=E2=84=9613=E2=80=9315=20=D0=A1=D1=80?= =?UTF-8?q?=D0=B5=D0=B7=D0=B0=203b;=20=D1=83=D1=82=D0=BE=D1=87=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=C2=AB=D1=84=D0=BE=D1=80=D0=BC=D0=B0=20?= =?UTF-8?q?=D0=B1=D0=B5=D0=B7=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=C2=BB=20(?= =?UTF-8?q?=D0=BA=D0=BE=D0=BB=D0=BE=D0=BD=D0=BA=D0=B8=20=E2=80=94=20=D0=B5?= =?UTF-8?q?=D1=81=D0=BB=D0=B8=20=D0=B5=D1=81=D1=82=D1=8C=20=D0=B2=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B7=D1=83=D0=BB=D1=8C=D1=82=D0=B0=D1=82=D0=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2 --- openspec/changes/slice-3b-statements-api/design.md | 5 ++++- .../slice-3b-statements-api/specs/osv-result-mapping/spec.md | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/openspec/changes/slice-3b-statements-api/design.md b/openspec/changes/slice-3b-statements-api/design.md index 0ab5b7a..8c3274d 100644 --- a/openspec/changes/slice-3b-statements-api/design.md +++ b/openspec/changes/slice-3b-statements-api/design.md @@ -52,7 +52,7 @@ Goals: формы ББ/ОФР из обоих источников в БД; API типа формы на файл. Второй `BALANCE`/`INCOME` того же файла не создаётся: предупреждение `: вторая форма <тип> в файле пропущена (OQ-77)`, первый документ — `NEEDS_CHECK`. `DISCLOSURE` и `OTHER` — один документ на тип на файл: `locator` — `locator` всех таких документов результата через запятую, статус `RECOGNIZED`, данных нет (OQ-23). Документ -`BALANCE`/`INCOME` без строк (форма без колонки кодов, `st03`) создаётся с шапкой и колонками, статус `NEEDS_CHECK`. +`BALANCE`/`INCOME` без строк (форма без колонки кодов, `st03`) создаётся с шапкой и колонками (если они есть в результате), статус `NEEDS_CHECK`. ### D-4. Проверки §7 — перенос tabular-parser, словарь — копия `domain/statement_checks.py`: `run_checks(form, columns, amounts, rules) -> ChecksReport` — дословный по семантике @@ -172,3 +172,6 @@ seed-dev` с нуля. | 10 | 2026-10-07 | Нет теста идентичности словаря §7 с tabular-parser | урок #33: межрепозиторные тесты ломают main | копии разойдутся незаметно | | 11 | 2026-10-07 | R-1: признак «повтор формы в файле» при маппинге хранится множеством типов форм и передаётся в `statement_status` как предупреждение; первый документ типа — `NEEDS_CHECK` | поведение по спеке («Повтор формы в файле»); фрагмент плана с разбором строк предупреждений — иллюстрация | — | | 12 | 2026-10-07 | R-2: пересчёт статуса формы после правки и акцепта не учитывает предупреждения маппинга (`warnings = ()`) | предупреждения маппинга в БД хранятся только на уровне файла (`metrics.mapping_warnings`) без привязки к документу; хранить их отдельно — новое поле, DBML v5.17 | документ с предупреждением маппинга (повтор кода, значение вне колонок, пропущенная вторая форма) после правки аналитиком может стать `RECOGNIZED`; аналитик форму уже просмотрел | +| 13 | 2026-10-07 | R-3: тест плана `test_per_column_and_null_as_zero` заменён тестами «отсутствующий код = 0 → нарушение» | тест плана противоречил спеке statement-checks: при цели 1600 и отсутствии 1700 соотношение `1600 = 1700` нарушено | потеряно покрытие «по колонкам/None» (досыпается в тест-доработке) | +| 14 | 2026-10-07 | R-4: формулировка «форма без строк создаётся с шапкой и колонками» уточнена до «колонками, если они есть в результате» | golden `st03_no_codes` содержит `columns = []` и `lines = []`; код создаёт форму с тем, что есть | — | +| 15 | 2026-10-07 | R-5: сверка golden ОСВ в `test_mapping_golden` ограничена документами `OSV` | смешанный снимок `expected_osv_parse/synthetic/s12_statement_and_osv.json` содержит BALANCE, которую теперь тоже маппит ядро; сравнение ОСВ-строк не ослаблено | форма из s12 в этом тесте не сверяется (покрывается тестами форм) | diff --git a/openspec/changes/slice-3b-statements-api/specs/osv-result-mapping/spec.md b/openspec/changes/slice-3b-statements-api/specs/osv-result-mapping/spec.md index c8b88d2..133535e 100644 --- a/openspec/changes/slice-3b-statements-api/specs/osv-result-mapping/spec.md +++ b/openspec/changes/slice-3b-statements-api/specs/osv-result-mapping/spec.md @@ -76,7 +76,7 @@ LOCKED`), проверять, что `result_s3_object` относится к б Второй документ `BALANCE` или `INCOME` в одном файле MUST NOT создаваться: предупреждение маппинга, первый документ — `NEEDS_CHECK`. Документы `DISCLOSURE` и `OTHER` результата SHALL давать по одному `document` каждого типа на файл без данных (`locator` — все `locator` этого типа через запятую, статус `RECOGNIZED`). Форма `BALANCE`/`INCOME` без строк -SHALL создаваться с шапкой и колонками. +SHALL создаваться с шапкой и колонками (если колонки есть в результате). #### Scenario: Расшифровки - **WHEN** смаплен синтетический снимок `st06_header_variants` (форма `INCOME` и пять `DISCLOSURE`) @@ -84,7 +84,7 @@ SHALL создаваться с шапкой и колонками. #### Scenario: Форма без колонки кодов - **WHEN** смаплен синтетический снимок `st03_no_codes` (`BALANCE`, строк 0) -- **THEN** документ `BALANCE` `NEEDS_CHECK` с шапкой и колонками, строк нет +- **THEN** документ `BALANCE` `NEEDS_CHECK` с шапкой, строк нет (колонок в снимке тоже нет — создаются те, что есть в результате) ### Requirement: Статус документа формы Документ `BALANCE`/`INCOME` SHALL быть `RECOGNIZED`, только если одновременно: задание `done`; нет непройденных