115 Commits

Author SHA1 Message Date
Andrey Epifancev
d6d1c7171c fix(osv): показатели итогового блока — шаг через НУ под «Итого развернутое», пропуск тождества (R-21, #59)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 13:46:34 +04:00
Andrey Epifancev
8311808472 fix(osv): интеграция с треком A после rebase — спека, golden-счётчик, тест стыка показателей и второй «Итого» (#59)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 13:30:34 +04:00
Andrey Epifancev
7cd71677da docs(osv-flat-form): рулинги R-17…R-19, актуализация design, README, спеки (#59)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 13:20:00 +04:00
Andrey Epifancev
835083ca4d fix(osv): вторые итоговые строки («Итого развернутое») вне тождества строки, R-11 отменён R-16 (#59)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 13:19:18 +04:00
Andrey Epifancev
69564ffcbd docs: README, CLAUDE.md и change osv-flat-form (#59)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 13:19:18 +04:00
Andrey Epifancev
23a5b7b419 docs(openspec): рулинги R-8…R-10 change osv-flat-form (#59)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 13:17:05 +04:00
Andrey Epifancev
32b8ad76ec docs(openspec): change osv-flat-form и план — плоская форма ОСВ 1С (#59)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 13:17:05 +04:00
Andrey Epifancev
ece851b0ed Архив OpenSpec: osv-indicator-column (#58)
Change перенесён в openspec/changes/archive/2026-10-19-osv-indicator-column,
дельта влита в openspec/specs/osv-parsing/spec.md (строки-показатели, колонка
«Показатели», «В валюте», BU по умолчанию, счёт 90 в OQ-132).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 13:05:49 +04:00
Andrey Epifancev
ad17212ba7 design: O-1 fixed 1d2a46f
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 12:52:19 +04:00
Andrey Epifancev
1d2a46f3e7 Счёт 90 в списке счетов без сальдо по аналитике (OQ-132, O-1, #58)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 12:52:03 +04:00
Andrey Epifancev
d6dd341003 Правки итогового ревью: спека, предупреждение, README, design (#58)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 12:47:49 +04:00
Andrey Epifancev
480db4f3aa Документация: строки-показатели ОСВ (#58)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 12:26:03 +04:00
Andrey Epifancev
d564d4998d План: номера синтетики s33–s36 вместо s40–s43 (R-1, #58)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 11:29:53 +04:00
Andrey Epifancev
656486a7d2 OpenSpec change osv-indicator-column и план (#58)
Колонка «Показатели», строки-показатели, «В валюте», BU по умолчанию (AURORA-1613, AURORA-1661 — валютная часть).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 11:03:13 +04:00
Andrey Epifancev
acaa5021ce chore(openspec): архив contract-identity-window и unified-normalization-tp (#50, #54)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 09:26:49 +04:00
Andrey Epifancev
4d30718689 docs: дельты OpenSpec, design.md, README и CLAUDE.md под контракт 2.0 (#54)
I-3: дельты osv-parsing (листы ОСВ, иерархия, golden, XLS_NO_CODEPAGE) и
перечень словарей api/rules; пункт об архивации (Purpose спек) в tasks.md.
I-4: README, CLAUDE.md и docstring hierarchy.py совпадают с кодом, пример
вывода CLI переснят. M-6: tasks.md, proposal.md, design.md с решениями P4/R.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 22:08:30 +04:00
Andrey Epifancev
71f596cdb7 feat: формы через arm_statements, контракт результата и конверта v2.0, статус и OSV_* у ОСВ (#54)
- копия схем и примеров контракта v2.0 (запрос остаётся v1.0), модели result/common/message/request;
  ResultWarning/FileWarning, статус и предупреждения у документов, строки forms v2.0, service.statements_version
- statements/pipeline.py: кандидаты адаптера -> normalize_candidate -> to_contract / warning_to_contract
- BookParser: статус книги через envelope_status, SHEET_OTHER / FILE_TYPE_MISMATCH / XLS_NO_CODEPAGE как предупреждения
  файла, OSV_* и OSV_XLSB_NO_OUTLINE в документах ОСВ, тексты иерархии по спеке
- воркер, app и CLI получают statements_version из require_statements_version()
- старые модели документа формы вынесены в statements/legacy_models.py до удаления старого конвейера (задача 9)
- OpenSpec: MODIFIED «Парсер — заменяемый интерфейс» в дельте tabular-recognition-service

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 20:52:52 +04:00
Andrey Epifancev
8b9a5a07c4 openspec: change unified-normalization-tp — адаптер Excel, общий код, контракт v2.0 (#54)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 19:55:36 +04:00
Andrey Epifancev
71afba5f73 test(#50): тест идентичности копии контракта по MAJOR (S-53, шаг 0 docs#116)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 13:19:37 +04:00
Andrey Epifancev
64f836d5a6 openspec: архив osv-inn-rows-layouts (#35)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 17:25:43 +04:00
Andrey Epifancev
ad1a6ec10e ОСВ: правки финального ревью строк ИНН — реквизит по схеме, подсказка «над», страховка владельца, родитель после склейки (#35)
R-6 (design #22), R-7 (#23), R-8 (#24), R-9 (#25), R-10 (#26), H.1/H.2 (#27); словарь позиций соседей (T2.6/T3.3);
spec/design/README: текст предупреждения, цена ошибки design #1, ссылки на решение владельца 10 (M-3, M-4, M-5, M-8).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 16:27:02 +04:00
Andrey Epifancev
79ffe602f6 Документация: модуль строк ИНН, tasks change (#35)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 16:27:02 +04:00
Andrey Epifancev
6d97fa2c94 ОСВ: предупреждение о противоречии раскладки ИНН и подсказки шапки, синтетика s28 с неверной контрольной суммой (#35)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 16:27:02 +04:00
Andrey Epifancev
26ed11ad28 ОСВ: строки ИНН — подключение прохода, подсказка шапки в обоих порядках, старые склейки удалены (#35)
Хвосты ревью Task 3: формулировка направления листа в spec/design (T3.1), тесты противоречия сведений и приоритета подсказки (T3.2), assert на glue.ok (T3.4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 16:27:02 +04:00
Andrey Epifancev
71d56bd5ed ОСВ: строки ИНН — соседи по суммам и направление листа (#35)
Строки ИНН не в дереве: с суммами — сосед с теми же суммами (совпали оба — по направлению);
без сумм — сосед по направлению листа: подсказка шапки, иначе единогласные сведения пар по
суммам и однозначных блоков детей. Противоречие или отсутствие сведений — строка без пары.

Хвосты ревью Task 2: тест подразделения переписан на итоговый результат (T2.9); в спеке
уточнены реквизит «нерез.» (только лист, design #14) и защита «над, в дереве» с подсказкой
шапки (design #16) (T2.10); опечатка в докстринге _parent_can_own (T2.11).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 16:27:02 +04:00
Andrey Epifancev
8bfaa4ec19 ОСВ: fix-раунд 1 строк ИНН — реквизит только лист, пара родителя по схеме, защита без подсказки (#35)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 16:27:02 +04:00
Andrey Epifancev
816719ca92 ОСВ: модуль строк ИНН — склейка в дереве и контрольная сумма (#35)
Модуль inn_rows: строка с одним ИНН сопоставляется с наименованием в дереве (родитель или ребёнок), без пары
остаётся с причиной; подсказка шапки InnHint отменяет контрольную сумму. row_data_type стал публичным.
ASCII-проверка ИНН (ревью T1.2), комментарий про zip(strict=False) (T1.3), тест «770123456²» (T1.1).
Решения 12–13 в design.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 16:27:02 +04:00
Andrey Epifancev
1e5f28bd50 ОСВ: контрольная сумма ИНН и ИНН строки (#35)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 16:27:02 +04:00
Andrey Epifancev
a2744b3e40 План: строки ИНН рядом с контрагентом (#35); спека — защита по листу, реквизит «нерез.», ИНН с детьми под контрагентом
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 16:27:02 +04:00
Andrey Epifancev
a1c6c10869 Спека: строки ИНН рядом с контрагентом — 8 раскладок (#35)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 16:27:02 +04:00
Andrey Epifancev
04d7f47787 openspec: архив nats-env-config (#31)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 13:57:00 +04:00
Andrey Epifancev
7f7a856c40 openspec: nats-env-config — отмечены выполненные пункты tasks.md (#31)
check-full: tests/fixtures падают только из-за отставания ветки от main (после merge main — 2313 passed).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 13:38:50 +04:00
Andrey Epifancev
4f0636f627 Fix-wave ревью nats-env-config: тесты subject'ов, JWT в healthcheck, лог старта, subject is not None
T4.1, T2.1, T2.2, T5.1, T5.2, T5.3 (тесты); T5.6 (subscribe_requests: пустая строка не подменяется умолчанием).
Отмечены пункты tasks.md 1.1, 1.2, 2.x, 3.1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 13:38:50 +04:00
Andrey Epifancev
52e760fd9d openspec: change nats-env-config — subject'ы и JWT NATS по окружению из OpenBao
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 13:38:50 +04:00
Andrey Epifancev
fc9d6d4902 openspec: архив nats-files-subjects (#28)
Change слит PR #29; спеки обновлены (subject'ы files.tabular_uploaded,
files.img_uploaded, files.tabular_parsed).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-08 23:50:24 +04:00
Andrey Epifancev
817487b976 nats: subject'ы как в старом АРМ — files.*_uploaded, files.tabular_parsed (#28)
Решение владельца 08.10.2026: recognition.tabular.request → files.tabular_uploaded,
recognition.image.request → files.img_uploaded, recognition.result →
files.tabular_parsed (общий subject ack и результатов; files.img_parsed не
используется). Тела сообщений, Nats-Msg-Id, queue group'ы и schema_version не
меняются. Константы api/src/contract/subjects.py, докстринги, тесты, README,
CLAUDE.md; копии схем api/contracts/ из docs/contracts/ побайтно; change
nats-files-subjects с дельтой спеки. Сквозной change — RSHB/arm-ka-docs#74.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-08 23:46:19 +04:00
Andrey Epifancev
49400682bc feat(osv): счета без сальдо по аналитике (91, 99) вне тождества строки (OQ-132, #11 п. 2)
У 91 и 99 строки аналитики несут только обороты, сальдо закрыто на субсчёт закрытия
(91.09), поэтому каждая ОСВ 91 получала needs_check. Список счетов — данные
api/rules/osv_checks.yaml (accounts_without_analytic_balance: 91, 99; 90 не входит).

- тождество строки на таких счетах не проверяется;
- «сумма детей = родитель» сохраняется: обороты всегда, сальдо — только у родителя
  с дочерними субсчетами (корень -> субсчета); у родителя с одной аналитикой сальдо
  не сверяется;
- «Итого» сверяется как обычно;
- строка относится к счёту списка по коду ближайшего счёта ветки (91, 91.01; не 910).

Тесты: unit checks/rules, манифест osv_dkb_expectations (две ОСВ 91 теперь done).
README, CLAUDE.md, openspec/specs/osv-parsing, api/rules/README.md обновлены.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-08 00:18:36 +04:00
Andrey Epifancev
6b03ec1cfa openspec/config.yaml: источник истины DBML v5.13 → v5.17 (#24)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 23:41:52 +04:00
Andrey Epifancev
c780dfd858 fix(statements): округление итогов не портит статус (OQ-138), слабые продолжения только сразу после формы и той же формы, подстроки по порядку строк
- OQ-138 (решение владельца 06.10.2026): единицы шапки верны; жёсткое расхождение до rounding_tolerance_percent = 0,001 %
  от наибольшего по модулю числа соотношения — округление итогов: soft_relations_failed + предупреждение, статус не
  меняется. НПЗ, ОФР стр. 1 Унагранде Компани и Групп теперь done.
- N-1/N-2: лист с 1–2 кодами — продолжение только сразу после листа формы, коды из диапазона формы открытого документа;
  присоединение видно в предупреждениях. N-3: негативные тесты BookParser и StatementParser.
- M-9: пятизначная подстрока относится к ближайшей четырёхзначной строке выше с теми же тремя цифрами (12310 под 1230).
- N-4: на продолжении без шапки колонка «Пояснения» узнаётся по коротким значениям и не даёт line_name.
- T7.1: ответ с ошибкой листа ОСВ называет неразобранные листы форм; T7.2: metrics.rows для форм — в спеке.
make check-full: 2217 passed, интеграция 10 passed; golden 138/138 (снимки — arm-ka-fixtures fix/20-golden).

Refs #20

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
2026-10-06 23:14:21 +04:00
Andrey Epifancev
cc78937673 openspec: архив change slice-2b-statement-parser (2026-10-06), спека statement-parsing, дельта tabular-recognition-service
Refs #14

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
2026-10-06 22:40:41 +04:00
Andrey Epifancev
15fb561cd8 openspec: O-9 решено, D-11 по факту (needs_check), tasks.md по факту, решение №27 (R-16)
Refs #14

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
2026-10-06 21:58:24 +04:00
Andrey Epifancev
be47e82e72 docs/openspec: перенумерация OQ-137…142 -> OQ-138…143 (R-15)
Номер OQ-137 в main docs занят вопросом о раскладке горячих папок; design: решение №26.

Refs #14

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b
2026-10-06 21:28:25 +04:00
Andrey Epifancev
976fc809fe 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
2026-10-06 20:52:44 +04:00
Andrey Epifancev
b6d2089199 openspec: баланс НПЗ needs_check по 1600 = 1700, полные формы — только Межениновская (R-13, решение №23)
Баланс НПЗ расходится по 1600 = 1700 на 1.94 / 9.02 / 2.48 руб. (значения в
рублях при шапке «тыс. руб.», OQ-137): статус книги needs_check, допуск ±1
не меняется. Сценарий «Полные формы сходятся» ограничен формами Межениновской.

Refs #14

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b
2026-10-06 20:44:33 +04:00
Andrey Epifancev
6f0f05f7c7 openspec: решения №21–22 (продолжение без колонки кодов, НПЗ needs_check)
Refs #14

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b
2026-10-06 18:19:50 +04:00
Andrey Epifancev
c5aa02c8ec openspec: решения №17–20 (проверка соотношений: цель, словарь, допуск подстрок, валидация кодов)
Refs #14

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b
2026-10-06 17:36:35 +04:00
Andrey Epifancev
bc96f2ff5d openspec: решения №15–16 (контракт заморожен, продолжение листа до задачи 7)
Refs #14

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b
2026-10-06 15:42:01 +04:00
Andrey Epifancev
ed516d837c openspec: решение №14 (golden schema_version 1.2 раньше плана)
Refs #14

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b
2026-10-06 14:41:20 +04:00
Andrey Epifancev
cb0cad68f6 openspec: решения №12–13 (раскатка копий контракта v1.2, отложенные минор-находки)
Refs #14

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b
2026-10-06 14:33:56 +04:00
Andrey Epifancev
d6d795787b openspec: сценарий двухстрочного заголовка — на синтетике st02, шаблоны — отдельный сценарий
Шаблоны ФСБУ разносят год по ячейкам «20» и « г.», по тексту дату не собрать; требование к ним — разбор без ошибки
и needs_check.

Refs #14

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b
2026-10-06 13:54:00 +04:00