Правило «подстрока относится к ближайшей четырёхзначной строке выше с теми же тремя цифрами,
иначе к строке из первых четырёх цифр» вынесено в subline_parents; им пользуются проверка
«сумма подстрок = родитель» и ответ GET /documents/{id}/statement (поле lines[].parent_code,
вычисляется, в БД не хранится).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Требования AURORA-1537, дописанные в openspec/specs/{audit-trail,consolidated-osv,
consolidations-api,directories-api}, перенесены в дельты change'а; specs/ возвращены к main.
Известные дефекты (AURORA-1651/1652/1653) зафиксированы в design.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Перенесён диапазон arm-web 100fbfb..025233f (2 коммитов, 19 файлов набора
синхронизации) скриптом docs/scripts/sync-web.sh. После переноса web/ и
arm-web@test идентичны по набору. Коммиты arm-web:
- f868a92 Скан PDF с JBIG2 не рисовался: передать pdf.js wasmUrl и копировать wasm в сборку (#32)
- a8a6da0 Форматирование перед PR: ESLint + Prettier и npm run format (#29)
Co-Authored-By: sync-web.sh <noreply@aepif.ru>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Убраны отладочные print() в режиме MANUAL.
- mypy: computed_field у is_debit/is_credit — с type: ignore[prop-decorator],
как у остальных схем; флаг is_more_5_percent без сравнения Decimal с None
(поведение прежнее).
- ruff format по трём файлам.
- test_openapi_routes: новые маршруты шахматки и правил элиминации
в EXPECTED_ROUTES.
make check: ruff, ruff format, mypy — чисто; pytest 1303 passed, 44 skipped.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Формы 51-03/51-04/77-02 шлют «ID ГСК/ГСЗ в CRM», а extra=forbid отвечал 422.
crm_id принимается (trim, пустая строка → null), отбрасывается; в ответах
RelatedGroupOut/RelatedGroupDetail — всегда null, в аудит не попадает.
Колонка related_group.crm_id — отдельная задача #112 (DBML v5.19).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`memberships` перенесено из `LegalEntityDetail` в `LegalEntityOut`: поле приходит в списке
`GET /directories/legal-entities`, в ответах `move`/`withdraw` (после них — `[]`) и, как раньше,
в карточке. Членства набора ЮЛ читаются одним запросом
(`current_memberships_by_entities`), без N+1. Нужно карточке ГК для фильтра ЮЛ по ГСК/ГСЗ.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
I-1: ветка повторной публикации в _process_one записывает request_subject
(как первая публикация); тест test_republish_updates_request_subject.
M-1: примеры /healthcheck в README (ядро: три subject'а; tabular-parser: два).
M-3: docstring'и и логи не выдают умолчание за фактический subject.
M-5: CLAUDE.md — subject'ы задаются OPENBAO__NATS__NATS_*_SUBJECT.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Пункт 3.2 (make check-full) не отмечен: Python-часть зелёная, web-check падает на npm install (404 rollup в реестре).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- invalid_subject параметризован по трём ключам, equality покрывает три пары
- кейс утечки JWT/seed при невалидном subject
- /healthcheck с нестандартными subject'ами и проверкой отсутствия JWT
- subscribe с настроенным subject'ом, лог старта с subject'ами
- tasks.md: отмечены 1.1, 1.2, 2.x, 3.1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Квартальные ОСВ, загруженные в консолидацию своего периода и уже привязанные, в режиме
становились «нарастающими за квартал версии»: select_sources возвращал все такие документы,
и свод брал их строки как есть — консолидация РБ 2024 Q3 на стенде задвоилась бы.
Теперь подмена — только если период шапки версии не подходит (fits_by_header);
регрессионный тест test_mode_keeps_header_period_when_it_fits_version.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Настройка 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>