292 Commits

Author SHA1 Message Date
Andrey Epifancev
b5520696ef chore: DBML v5.22 — версия ORM и ссылки (ревью #161, AURORA-1446)
v5.22 структуру БД не меняет (comment.object_type: убраны chess_cell и
kfo_result_line из описания), миграция не нужна.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 17:59:35 +04:00
Andrey Epifancev
e13cd88fea Merge origin/main в feat/renew-processing-timeout (ревью #161, раунд 2)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 17:59:00 +04:00
Andrey Epifancev
f3abc8c01c fix(api): CORS открывает фронту Content-Disposition (#173, AURORA-1532)
При фронте на другом источнике (web :3000, api :8000) браузер не отдавал JS
заголовок Content-Disposition, и экспорт сводной ОСВ, шахматки, таблицы ВГО
и CSV чек-листа сохранялся под запасным именем (qa-guide W35).
expose_headers=["Content-Disposition"] в обоих режимах cors_options.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 16:54:23 +04:00
622a60e4e0 AURORA-1442: Правки по раунду 1 2026-10-23 13:39:30 +03:00
Andrey Epifancev
9a30b45c17 Merge origin/main в AURORA-1651 (#141) и доводка шахматки (AURORA-1651)
Конфликты с #141: в ALL оставлены и фильтр забалансовых, и MatrixSelection; тесты
#141 на старый one_sided переписаны под расчёт по суммам.
- one_sided = ровно одна сумма нулевая (знак не важен), тесты с отрицательными суммами;
- шапка xlsx режима ALL — «Все балансовые счета»;
- фильтр GET /directories/accounts убран из PR (решение владельца 22.10.2026).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:44:44 +04:00
Andrey Epifancev
5d4fd67d3d Merge origin/main в add-preset-shahmatka (ревью #141, раунд 2)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 18:45:50 +04:00
PotapovaA
254002f723 тех долг 2026-10-22 16:58:19 +03:00
Andrey Epifancev
b32383eff7 test: синтетические тесты уточнения шапки ОСВ и пакетного повтора (ревью #161, AURORA-1442)
PATCH osv-header без fixtures: порядок ошибок, no-op, original_values, сброс
подтверждения и отвязка, аудит, DUPLICATE_ACCOUNT, неизменность osv_entry.
Пакет: смешанный (OCR и исчерпанный лимит в skipped), NO_ACK на пределе.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 17:13:41 +04:00
Andrey Epifancev
5c70fb5387 test: .env.test — порт PostgreSQL 5432 по compose (ревью #161, AURORA-1442)
Свой порт задаётся переменной OPENBAO__DATABASE__DATABASE_URL.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 17:13:41 +04:00
Andrey Epifancev
ad86a55716 chore(arm_statements): копия arm-statements@25b2bb8 (#162)
Копия api/arm_statements: 3390f92..25b2bb8 (1 коммитов), скрипт docs/scripts/sync-statements.sh.
Коммиты arm-statements:
- 72e2e72 fix(#8): шаг 2 — нумерация со сбоем OCR под заголовком, повтор шапки со склеенной нумерацией (AURORA-1517)

statements-check arm-core: 0 — копия синхронна с arm-statements@origin/main (25b2bb8)

Co-Authored-By: sync-statements.sh <noreply@aepif.ru>
2026-10-22 16:46:45 +04:00
PotapovaA
02d67ff733 убран лишний метод build_with_members 2026-10-22 15:35:56 +03:00
PotapovaA
b7d97943b2 Merge main into add-preset-shahmatka: preserve preset and result table exports 2026-10-22 14:39:25 +03:00
4f44d34d59 AURORA-1442: ручки возобновления обработки файла или версии консолидации, ручка обновления данных по осв 2026-10-22 14:25:19 +03:00
Andrey Epifancev
63d6c1a017 Замечания ревью #159: проверки, общие реквизиты книги, change OpenSpec
- маршрут result-table/export в EXPECTED_ROUTES, ruff format
- общие VersionExportInfo, _write_details, _group_name, _xlsx_response вместо копий шапки и ответа
- сумма компании в книге без молчаливого 0 (KeyError при пропуске в расчёте)
- своё описание 422 у маршрутов результирующей таблицы в OpenAPI
- тесты: 422 RESULT_ACCOUNTS_MISSING для экспорта без события EXPORT, схема OpenAPI экспорта
- требование перенесено из openspec/specs в change intercompany-result-table-export (+ audit-trail), README

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 11:42:13 +04:00
PotapovaA
3de0c90198 refactor(matrix): удалить unpaired-osv из ветки пресетов 2026-10-21 19:32:23 +03:00
PotapovaA
ea51cb35c2 добавлено выгрузка в xlsx для таблицы ВГО 2026-10-21 19:26:37 +03:00
PotapovaA
fabc9b48b2 docs(matrix): указать разделы ТЗ в новых функциях 2026-10-21 19:10:45 +03:00
PotapovaA
2f08ce4155 test(matrix): проверить пресет с кредитовой первой стороной 2026-10-21 19:02:41 +03:00
PotapovaA
9e39c4d426 feat(matrix): понятное имя и реквизиты правила в XLSX пресета 2026-10-21 18:59:25 +03:00
PotapovaA
b078933428 fix(audit): сохранять номер и версию правила в экспорте пресета 2026-10-21 18:54:58 +03:00
PotapovaA
3eb5362e58 fix(matrix): выбирать последнюю открытую версию правил 2026-10-21 18:51:06 +03:00
PotapovaA
38c8eefa18 fix(matrix): ограничить PRESET правилами ББ 2026-10-21 18:43:19 +03:00
PotapovaA
e9dc67b2e9 refactor(matrix): вынести применение корректировок из ветки пресетов 2026-10-21 18:40:05 +03:00
Andrey Epifancev
367a11ed38 chore(api): format, mypy и тест версии правил; убрать мёртвое as_of (ревью #141)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 14:04:38 +04:00
Andrey Epifancev
a8e510e402 Merge origin/main в add-preset-shahmatka (ревью #141) 2026-10-21 14:03:12 +04:00
PotapovaA
2c0a2ad939 правки по ревью 2 2026-10-21 12:15:20 +03:00
PotapovaA
abe1d890d0 правки по ревью 2026-10-21 11:59:23 +03:00
Andrey Epifancev
7dd7d5dd40 test: golden fixtures контракта 2.0 в тестах ядра (#144)
fixtures #26/#27 (19.10.2026) перевели снимки форм и OCR на контракт 2.0,
а загрузчики тестов читали их моделью 1.x: 164 падения на main.

- golden_result/ocr_result: модель по MAJOR schema_version, для 2.0 —
  service.statements_version копии пакета ядра;
- golden_result_v1: снимок 2.0 → 1.2 (строки с кодом, колонки с 0, без
  null в шапке) для модулей приёма 1.x — test_mapping_statements и
  test_api_statements; путь 2.0 покрывают *_v2;
- make_entries_from_result — parse_result; ожидания fixtures_marker под
  эталоны 2.0; удаление файла считает замечания сервиса снимка;
- 76.Н.1 (synthetic s42, tabular-parser#59) — в KNOWN_OUT_OF_PLAN.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 21:34:20 +04:00
Andrey Epifancev
01e1f81516 fix(statements): вставка document_issue пакетами по BATCH (#142, AURORA-1711)
add_issues вставлял все записи документа одним INSERT: 16 параметров на
запись, лимит asyncpg 32 767 — потолок около 2 047 замечаний. Лист ОСВ
«11.xlsx» (сч. 11, 2 128 строк «Кол. доп.» на парсере контура 40287e1)
давал 2 131 предупреждение, маппинг падал с InterfaceError, файл ERROR.
Теперь пакеты по BATCH (1000), как у строк и значений форм.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:59:25 +04:00
PotapovaA
c6a10e4604 правки в экспорт 2026-10-20 15:35:46 +03:00
PotapovaA
487a8521da Merge branch 'main' into add-preset-shahmatka 2026-10-20 14:58:34 +03:00
PotapovaA
53c2d5c73d пресеты для шахматки 2026-10-20 14:45:27 +03:00
Andrey Epifancev
e6292a24df fix(statements): fix-волна части Б — is_recognized NULL, единый источник ошибки файла, тесты правки форм 2.0
I-2: NULL у is_recognized не сомнение (P3-54); I-3: metrics.file_warnings при приёме 2.0 — единый
источник для пересчёта (P3-53, R-11); I-4/T4.4/T6.1: тесты правки, акцепта и веток приёма 2.0;
T4.2: now в checks_on_intake_1x; M-4: row_by_ref по принятым строкам; документация (M-5, M-6, M-7).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 22:38:24 +04:00
Andrey Epifancev
570e82b5d3 refactor(statements): удалена копия словаря §7 ядра — проверки копией arm_statements
Удалены api/rules/statement_checks.yaml, load_check_rules, run_checks и правила соотношений; в
domain/statement_checks.py остались межформенная проверка 1370/2400 и subline_parents. Тест
test_name_dictionary_codes_in_code_orders сверяет справочник имён с перечнями редакций пакета.
CLAUDE.md и README.md: §7 — копия arm_statements, нарушения хранятся в document_issue. Решения P3-50…P3-52.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 22:08:27 +04:00
Andrey Epifancev
2b8fafc3b3 feat(mapping): ОСВ по контракту 2.0 (Р-28) и выбор маппера по MAJOR
Приём файла результата выбирает модель по MAJOR (parse_result); нечитаемый JSON и неизвестный
MAJOR — неповторяемая ошибка схемы (T5.2). Статус ОСВ 2.0 — osv_status_v2, предупреждения листа
(OSV_*) — в document_issue. Решения P3-46…P3-49.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 21:57:38 +04:00
Andrey Epifancev
5e45a6ca7e chore(statements): обновление копии arm_statements до 3390f92 (Р-44, NUMBERS_OUTSIDE_TABLE)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 21:42:42 +04:00
Andrey Epifancev
21e0720fb0 feat(mapping): маппер результата 2.0 для форм — хранение как пришло, document_issue, условие RECOGNIZED
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 21:42:04 +04:00
Andrey Epifancev
028512603a fix(statements): правки ревью B1+B2 — T2.1, T1.1, T1.2, T2.4, T2.6, T2.8
T2.1: аудит lines[] включает итоговую смену parent_row_index после пересчёта.
T1.1: тест паритета редакции приёма и пересчёта для строки с confidence < 100 и code_fixed.
T1.2: edition_codes пропускает строку ok без кода.
T2.4: общий issue_column_index для ответа формы и detail отказа подтверждения.
T2.6: удалено дублирование needs_review в statement_line_edits.
T2.8: неизвестный relative:* не даёт 500 (адаптер stored_form и _resolve_relative_columns).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 21:15:21 +04:00
Andrey Epifancev
02630e830f feat(mapping): §7 и вариант формы при приёме 1.x копией arm_statements (Р-30)
checks_on_intake_1x: один recompute по вставленной форме, запись form_variant и
relation/soft (core); run_checks из приёма убран. P3-36.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 21:03:06 +04:00
Andrey Epifancev
065153e470 feat(statements): пересчёт после правки точкой входа arm_statements, §7 только из document_issue
recompute_form (services/statement_recompute.py) собирает вход из БД, зовёт engine.recompute и пишет needs_review
строк и значений, form_variant, parent_row_index расшифровок, записи relation/soft и core по P3-8, статус через
form_status_v2. GET/confirm/accept читают нарушения §7 из document_issue. Правка header.report_date пересчитывает
relative:* колонки. Временный код A12/A13 удалён.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 20:26:40 +04:00
Andrey Epifancev
6ce36b3e2d feat(statements): адаптер arm_statements за протоколом StatementsEngine и вход пересчёта из БД
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 20:00:12 +04:00
Andrey Epifancev
1f701a36ca chore(arm_statements): копия arm-statements@52857a0 (#128)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 19:45:10 +04:00
Andrey Epifancev
ae0ae8d9b6 Merge origin/main в feat/128-arm-statements-copy (#128)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 19:44:50 +04:00
Andrey Epifancev
197c358a22 build: копия arm_statements в линтерах и тестах, statements-check в check-full (#128)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 19:40:29 +04:00
Andrey Epifancev
46ac9367ee chore(arm_statements): копия пакета arm-statements@6bce80b (#128)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 19:38:30 +04:00
Andrey Epifancev
17141c0a11 feat(contract): копии контракта обоих MAJOR, модели v2.0, приём конвертов 1.x/2.0, предупреждения файла структурами
Копии api/contracts/ побайтно равны docs/contracts/ (тест идентичности плана 0): схемы v2.0 основные, .v1 рядом,
examples/ — v2.0, examples/v1/ — v1.0. Модели result_v2.py и RecognitionResultMessageV2, versions.py выбирает модель
по MAJOR. Приём конвертов принимает оба MAJOR; metrics.warnings в recognition_job пишется структурами (строки 1.x
оборачиваются в LEGACY_WARNING). JobBrief.warnings отдаёт структуры, мусор пропускается, БД не переписывается.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 19:26:50 +04:00
Andrey Epifancev
1ab7f2238d chore(statements): комментарии, README, типы, тесты по итогам финального ревью (M-1, M-2, M-3, M-5, M-7, M-9, T2.1, T4.5, T10.1, T11.1)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 19:04:40 +04:00
Andrey Epifancev
16b53b0bdb fix(statements): очистка по свежему плану, аудит удаления шаблонной строки, сброс подтверждения и родителя при правке строк (T4.2, T4.4, T13.2, M-4, M-10, M-12)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 19:04:40 +04:00
Andrey Epifancev
8296c77fe5 fix(api): OpenAPI-коды ошибок PATCH формы, confirm и crm_id; organization_name:null — 422 (I-2, M-11)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 19:04:40 +04:00
Andrey Epifancev
3753e32219 feat(statements): PATCH lines — назначение кода, расшифровка, подтверждение кода, LINE_CODE_TAKEN
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 19:04:40 +04:00