Настройка CONSOLIDATION_PERIOD_FROM_VERSION (по умолчанию false; в контуре —
OPENBAO__APP__CONSOLIDATION_PERIOD_FROM_VERSION): ОСВ, загруженная в консолидацию
(stored_file.consolidation_id), считается нарастающей за год и квартал консолидации,
какой бы период ни стоял в шапке. Нужен для тестов на произвольных ОСВ: без него ОСВ
за 1 кв. 2025 в консолидации 2026 Q1 молча не привязывается и свод пуст.
- domain/version_period.py: представление документа с периодом версии (первичка не меняется)
- consolidation_documents.for_consolidation: единая точка подмены; её используют привязка
(fits, ключ R-1, bind_confirmed, хуки подтверждения и маппинга), свод, чек-лист,
колонка «ОСВ» периметра (osv_accounts)
- ББ/ОФР и файлы с рабочего стола режим не затрагивает; склейки кварталов в режиме нет
- тесты: unit на чистые функции, интеграционные — сценарий 2025 Q1 → 2026 Q1 с режимом
и без, файл вне консолидации, чек-лист и карточка, подхват «один слот на счёт»
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Перенос в arm-core/web правок RSHB/arm-web PR #27 «Панель «Первичные документы»: рабочий стол
консолидации и загрузка в консолидацию» (ветка test, диапазон коммитов fc75edf..100fbfb), только src/:
- services/api/files.ts: filesPath, маршруты /consolidations/{cid}/legal-entities/{le}/files
вместо ?consolidation_version_id=, которое ядро игнорирует;
- store/slices/consolidations/selectors.ts: текущая консолидация и статус версии (новый файл);
- widgets/FilesDrawer: рабочий стол консолидации, переключатель «Все документы организации»,
подпись консолидации у файла (consolidationLabel.ts), загрузка только в версии «в работе»;
- widgets/Sidebar: перечитывание списка консолидаций после создания;
- типы api.ts и consolidations.ts, тесты.
Закрывает находку I-1 из #98: загрузка из встроенного фронта снова переводит версию
INITIATED -> DOCUMENTS_PROCESSING. Спеки, CLAUDE.md и scripts из arm-web не переносятся.
После переноса web/src и arm-web@test идентичны (diff -rq пуст).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
I-2: delta MODIFIED consolidations-api «Статусы Среза 4» (загрузка в консолидацию).
T1.1: шапки моделей — DBML v5.18.
T3.1: lock_versions_of_consolidation — двухшаговая блокировка (FOR UPDATE без членства, затем выборка членов);
тесты гонки и выборки.
M-1: тест миграции 0006 — порядок кварталов внутри года.
M-2: тест 404 для ЮЛ чужого филиала на столе своей консолидации.
T4.1: docstring supersede_previous — перенос строк.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Перенесён коммит arm-web 0f7a101 (#17): «Указать» только у строк без ИНН и без
связи с ЮЛ, «таблетка» с ИНН сопоставленного ЮЛ и пересопоставление («Связано»
в модалке), фильтр «только без ИНН» в колонке, баннер по макету [32-osv-no-inn],
поле counterparty_entity_inn в типах (бэкенд — arm-core #74). После переноса
исходники web/ и arm-web@test совпадают.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- vitest зафиксирован точно на 3.1.4: в зеркале npm банка нет 3.2.x, lock-файл не в git,
каретка давала бы разные версии снаружи и внутри контура;
- DevLogin больше не выбирает форму по NODE_ENV: платформа всегда собирает фронт в production,
а контур работает на dev-заглушке аутентификации, переменные сборки в пайплайне задать нельзя.
Форма входа по email показывается всегда; заглушка «Вход выполняется через РАИСА» — только после
404 «Not Found» от бэкенда (маршрута /dev/token нет → dev-эмитент выключен). Признак вынесен
в isDevIssuerDisabled и покрыт тестами: 404 «пользователь не найден» остаётся ошибкой в форме.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Копия исправления arm-web #22 (контур разворачивается из web/). Обычная сборка pdfjs-dist 5.7 в воркере
вызывает Uint8Array.prototype.toHex (Chromium 140+), в Яндекс Браузере getDocument падает
«a.toHex is not a function». PdfPages берёт модуль и воркер из pdfjs-dist/legacy/build через
widgets/DocumentReview/pdfjs.ts; регрессионный тест открывает PDF без Uint8Array.prototype.toHex.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Решение владельца 09.10.2026. Парсер — по-прежнему 5 мин. Note DBML
«OCR — 5 мин» не меняется до следующей версии модели (OQ-159).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Формы «Добавить/Изменить юридическое лицо» (макет 51-02, 79) отправляют всё
одним запросом. POST/PATCH /directories/legal-entities принимают `aliases`,
`gsk_id`, `gsz_id` и применяют их в той же транзакции, что и поля ЮЛ.
- POST: алиасы и членства создаются вместе с ЮЛ; ошибка откатывает всё.
- PATCH: `aliases` — итоговый набор (сверка по normalized_alias; удаление —
с правом DIRECTORY_DELETE, иначе 403), `gsk_id`/`gsz_id` — итоговые группы
(`null` — выйти, другая — сменить); не переданное поле не меняется.
- Новая ошибка 422 WRONG_GROUP_KIND; дубль в списке — 409 ALIAS_EXISTS.
- Ответ POST и PATCH — LegalEntityDetail (надмножество LegalEntityOut).
- Логика ручек алиасов и состава ГСК/ГСЗ вынесена в функции модулей
(add_alias/remove_alias, add_membership/close_membership) — форма и ручки
ведут себя одинаково; PermissionDeniedError — единый 403 «недостаточно прав».
- Спека directories-api и README обновлены.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Спеки documents-api и statement-checks обновлены дельтой change'а; change перенесён в
openspec/changes/archive/2026-10-09-statement-template-lines/. Реализация — PR #81.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
M-9: design.md и proposal.md приведены к коду (достройка - _lines_out в
schemas/statements.py, справочник без valid_from/valid_until, ленивая
загрузка с ручными проверками); добавлены R-12 и R-13. T5.1/M-8: сигнатура
PATCH values и обратные кавычки в таблице ошибок README.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Правка arm-web 9e89b9f перенесена в arm-core/web: id и origin у строк и ячеек
формы, ключ достроенной строки code-<код>, отправка line_code, раскладка
formLayout. Без неё встроенный фронт отправлял бы line_id "null" (I-1, R-12).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
statement_amounts не отдаёт проверкам строки с line_code_original_value IS NULL,
у которых все суммы пустые; заполненная хотя бы в одной колонке строка
проверяется по всем колонкам.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
CellPatch адресует ячейку ровно одним из line_id / line_code. Строка справочника
редакции, которой нет в форме, создаётся при первой непустой правке
(line_code_original_value = NULL — признак «не из источника»); отсутствующая
ячейка существующей строки тоже создаётся. Адресация (колонка, строка, код)
проверяется целиком до первой вставки, две ячейки новой строки делят одну
строку, повтор line_code после создания даёт 422 UNKNOWN_CELL. Аудит — одно
RECOGNIZED_DATA_EDIT на запрос, у созданной ячейки before = null.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
GET …/statement добавляет строки справочника редакции, которых нет в форме
(id = null, origin = template), и недостающие ячейки существующих строк
(id = null, все значения пусты). В БД ничего не пишется. Добавлено поле
LineOut.origin (source | template).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Относительный `git -C arm-core` из корня workspace указывал на main-checkout
(O-1 первого запуска контроллера).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019qoydUVv8g1qHxc123u2RR
Спека: достройка формы по справочнику строк редакции в GET …/statement,
создание строки и ячейки при первой правке по line_code, пустые шаблонные
строки вне проверок §7 и статуса.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019qoydUVv8g1qHxc123u2RR
Решения владельца 08.10.2026:
- отмена П-1: «Осталось N» (`unmapped_total`) и `?unmapped=true` — строки без ЮЛ после резолва и без ИНН из файла;
строка с ИНН, которого нет в справочнике, сопоставления не требует (`domain.needs_mapping`);
- `ConsolidatedRowOut.counterparty_entity_inn` — ИНН сопоставленного ЮЛ справочника (П-8): фронту — «таблетка»
с ИНН и пересопоставление у строк, сопоставленных без ИНН в файле.
Фикстуры РБ 2024 Q3: unmapped_total 1379 → 1260. Спека consolidated-osv и README обновлены.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>