428 Commits

Author SHA1 Message Date
PotapovaA
53c2d5c73d пресеты для шахматки 2026-10-20 14:45:27 +03:00
aep
18225153f1 Merge pull request 'openspec: архив intercompany-matrix (#114)' (#117) from chore/114-archive-intercompany-matrix into main 2026-10-16 14:59:54 +03:00
Andrey Epifancev
62807813ab openspec: архив intercompany-matrix (#114)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:59:40 +04:00
aep
d44614f6e0 Merge pull request 'add-report-shahmatka' (#114) from add-report-shahmatka into main 2026-10-16 14:58:11 +03:00
Andrey Epifancev
5682897ed0 OpenSpec change intercompany-matrix: требования шахматки из specs/ в дельты (#114)
Требования 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>
2026-10-16 15:42:30 +04:00
Andrey Epifancev
4228b94a7f Merge branch 'main' into add-report-shahmatka
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:41:16 +04:00
PotapovaA
f9f25e8245 правки по код ревью 2026-10-16 13:19:49 +03:00
aep
e395edaa75 Merge pull request 'fix(web): синхронизация встроенного фронта с arm-web@test (025233f) (#115)' (#116) from feat/115-web-sync-025233f into main 2026-10-16 12:50:26 +03:00
Andrey Epifancev
99252d7a85 fix(web): синхронизация встроенного фронта с arm-web@test (025233f) (#115)
Перенесён диапазон 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>
2026-10-16 13:46:39 +04:00
Andrey Epifancev
1ebd5b9997 Шахматка: зелёный make check (#114)
- Убраны отладочные 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>
2026-10-15 18:37:23 +04:00
PotapovaA
4390ce8f27 Merge branch 'main' into add-report-shahmatka 2026-10-15 13:18:22 +03:00
PotapovaA
db19b3a176 корректировка расчета шахматки, добавление эндпоинтов для получения статей, добавления эндпоинта для выгрузки xlsx 2026-10-15 13:17:54 +03:00
aep
8b86735828 Merge pull request 'ГСК/ГСЗ: POST/PATCH принимают crm_id без сохранения (#111)' (#113) from feat/111-rg-crm-id into main
Reviewed-on: #113
2026-10-14 12:04:51 +03:00
Andrey Epifancev
244d97b1df ГСК/ГСЗ: POST/PATCH принимают crm_id без сохранения (#111)
Формы 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>
2026-10-14 12:40:59 +04:00
aep
f5ddba7005 Merge pull request 'Список ЮЛ: текущие членства ГСК/ГСЗ в LegalEntityOut (#109)' (#110) from feat/109-le-list-memberships into main
Reviewed-on: #110
2026-10-13 17:58:22 +03:00
Andrey Epifancev
4973e47290 feat(directories): текущие членства ГСК/ГСЗ в списке ЮЛ (#109)
`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>
2026-10-13 18:06:02 +04:00
aep
6e6d7bf7a8 Merge pull request 'openspec: архив nats-env-config (#106)' (#108) from chore/106-archive-nats-env-config into main
Reviewed-on: #108
2026-10-13 12:59:52 +03:00
Andrey Epifancev
0a62291a8c openspec: архив nats-env-config (#106)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 13:56:49 +04:00
aep
2e74cd66ab Merge pull request 'NATS: subject'ы и JWT по окружению из OpenBao (OPENBAO__NATS__*) (#106)' (#107) from feat/106-nats-env-config into main
Reviewed-on: #107
2026-10-13 12:55:15 +03:00
Andrey Epifancev
fb14ee877c tasks nats-env-config: check-full зелёный (3.2)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 13:49:52 +04:00
Andrey Epifancev
eaa563c10f Обмен NATS: лог file_mismatch без литерала subject'а, переносы docstring'ов (RM-1, RM-2)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 13:40:15 +04:00
Andrey Epifancev
c9d60907d3 Повторная публикация обновляет request_subject; тексты без умолчаний как фактических subject'ов (I-1, M-1, M-3, M-5, #106)
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>
2026-10-13 13:28:07 +04:00
Andrey Epifancev
c14d5e3ffe openspec: nats-env-config — отмечены выполненные пункты tasks.md (#106)
Пункт 3.2 (make check-full) не отмечен: Python-часть зелёная, web-check падает на npm install (404 rollup в реестре).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 13:18:15 +04:00
Andrey Epifancev
db8b0bcc13 Тесты настроек NATS: fix-wave по minor-находкам ревью (T2.1, T2.2, T3.1, T3.2, лог старта)
- 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>
2026-10-13 12:57:02 +04:00
Andrey Epifancev
9d317b6260 NATS: публикация, подписка и /healthcheck.subjects по настройкам окружения (#106)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 12:27:22 +04:00
Andrey Epifancev
f0c1073918 NATS: subject'ы и JWT из OPENBAO__NATS__*, SecretStr, скрытие входа в ошибках (#106)
- NATSSettings: NATS_TABULAR_REQUEST_SUBJECT / NATS_IMAGE_REQUEST_SUBJECT / NATS_RESULT_SUBJECT с умолчанием
  имён контракта v1.0; проверка формата (без пробелов, '*', '>', пустых токенов) и попарного различия.
- request_subjects() и request_subject(pipeline, subjects) — карта subject'ов окружения.
- NATS_SEED / NATS_JWT — SecretStr; build_nats_auth читает значения через get_secret_value().
- hide_input_in_errors=True во всех классах настроек: ошибка «нет поля» не печатает JWT/seed.
- Схемы контракта api/contracts/ — копии docs/contracts/ (побайтно).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 12:13:04 +04:00
Andrey Epifancev
4b6655238b openspec: change nats-env-config — subject'ы и JWT NATS по окружению из OpenBao
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:40:35 +04:00
aep
880eab6c4b Merge pull request 'Временный режим: период ОСВ из версии консолидации (#103)' (#104) from feat/103-osv-period-from-version into main
Reviewed-on: #104
2026-10-12 19:04:19 +03:00
Andrey Epifancev
a6418ca475 fix(consolidation): режим «период из версии» подменяет период только у ОСВ «не того» периода (#103)
Квартальные ОСВ, загруженные в консолидацию своего периода и уже привязанные, в режиме
становились «нарастающими за квартал версии»: 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>
2026-10-12 19:42:31 +04:00
Andrey Epifancev
a1614b05ef chore(config): ключ CONSOLIDATION_PERIOD_FROM_VERSION в .env.test (#103)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:17:50 +04:00
Andrey Epifancev
1ae6b8d2da feat(consolidation): временный режим «период ОСВ из версии консолидации» (#103)
Настройка 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>
2026-10-12 19:17:01 +04:00
PotapovaA
d44a4ff007 Merge branch 'main' into add-report-shahmatka 2026-10-12 14:26:43 +03:00
PotapovaA
f0b5d19162 добавить расчёт шахматки и результирующую таблицу ВГО 2026-10-12 14:26:10 +03:00
aep
3414317796 Merge pull request 'fix(web): синхронизация встроенного фронта с arm-web — панель файлов в контексте консолидации (#100)' (#101) from feat/100-web-sync-console-files into main
Reviewed-on: #101
2026-10-10 09:28:52 +03:00
Andrey Epifancev
2ea8a96f26 fix(web): синхронизация встроенного фронта с arm-web — панель файлов в контексте консолидации (#100)
Перенос в 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>
2026-10-10 10:16:17 +04:00
aep
11f78f6534 Merge pull request 'openspec: архив console-files (#96)' (#99) from chore/96-archive-console-files into main
Reviewed-on: #99
2026-10-10 09:08:26 +03:00
Andrey Epifancev
fd9efb354e openspec: архив console-files, спеки data-model/directories-api — текущая DBML v5.18 (M-5, #96)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-10 10:04:07 +04:00
aep
9be7d7508b Merge pull request 'Файлы в контексте консолидации: stored_file.consolidation_id, маршруты /consolidations/{id}/legal-entities/{le}/files (DBML v5.18, #96)' (#97) from feat/96-console-files into main
Reviewed-on: #97
2026-10-10 08:59:57 +03:00
aep
d939efdc6b Merge pull request 'web: синхронизация встроенного фронта с arm-web — ячейка ИНН в сводной ОСВ (#94)' (#95) from feat/94-web-sync-osv-inn into main
Reviewed-on: #95
2026-10-10 08:59:52 +03:00
Andrey Epifancev
4abfa03539 fix-волна ревью: delta статусов, блокировка версий консолидации, тесты (#96)
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>
2026-10-10 02:23:09 +04:00
Andrey Epifancev
5899525ca5 docs: README и CLAUDE.md — маршруты файлов консолидации, коды ошибок (#96)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-10 02:02:24 +04:00
Andrey Epifancev
25307edee8 mapping: новый файл без контекста наследует consolidation_id заменённого (#96)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-10 01:55:01 +04:00
Andrey Epifancev
1e888d4670 api: загрузка файлов в консолидацию, переход версий «в работе»; query версии у загрузки ЮЛ удалён (#96)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-10 01:31:35 +04:00
Andrey Epifancev
956a730a3c api: рабочий стол консолидации для ЮЛ и consolidation_id в карточке файла (#96)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-10 01:10:21 +04:00
Andrey Epifancev
d5d09d0b5c model: DBML v5.18 — stored_file.consolidation_id, миграция 0006 с backfill (#96)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-10 01:03:26 +04:00
Andrey Epifancev
45e761bd23 plan: console-files — план для arm-core (#96)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-09 23:34:53 +04:00
Andrey Epifancev
fcfb3f7f4e openspec: change console-files — файлы в контексте консолидации, DBML v5.18 (#96)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-09 23:30:02 +04:00
Andrey Epifancev
f7cdd42c3d fix(web): синхронизация встроенного фронта с arm-web — ячейка ИНН в сводной ОСВ (#94)
Перенесён коммит 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>
2026-10-09 22:38:22 +04:00
aep
fde860be7c Merge pull request 'web: legacy-сборка pdf.js — «Не удалось открыть PDF» в Яндекс Браузере (#90)' (#91) from feat/90-pdfjs-legacy into main
Reviewed-on: #91
2026-10-09 20:43:12 +03:00
aep
9e604a0a98 Merge pull request 'Обратный поток из контура: vitest 3.1.4 и форма dev-входа в production-сборке (#92)' (#93) from feat/92-contour-dev-login into main
Reviewed-on: #93
2026-10-09 20:38:18 +03:00