172 Commits

Author SHA1 Message Date
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
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
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
a93ab10523 feat(directories): алиасы и ГСК/ГСЗ в POST/PATCH ЮЛ (#84)
Формы «Добавить/Изменить юридическое лицо» (макет 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>
2026-10-09 13:48:14 +04:00
Andrey Epifancev
fb491a3e93 openspec: архив statement-template-lines (#80)
Спеки 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>
2026-10-09 12:55:14 +04:00
Andrey Epifancev
753c10a5a4 docs: актуализировать design/proposal и README после ревью (#80)
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>
2026-10-09 12:33:06 +04:00
Andrey Epifancev
5c330eb400 docs: полный состав строк ББ/ОФР в README и CLAUDE.md (#80)
README: достройка GET, адресация PATCH по line_code, строка UNKNOWN_CELL.
CLAUDE.md: абзац про справочник строк. design.md: рулинги R-9…R-11.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 12:14:53 +04:00
Andrey Epifancev
dba7273a2d plan: statement-template-lines — план реализации; уточнения спеки (#80)
Спека: «1600 = 1700» проверяется при потерянной 1700 (цель 1600 есть);
цвет строк «БАЛАНС» — #f9f0ff (синий занят «исправлено»); R-8 has_lines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019qoydUVv8g1qHxc123u2RR
2026-10-09 10:39:23 +04:00
Andrey Epifancev
f540c7f661 openspec: statement-template-lines — выделение строк «БАЛАНС» цветом (#80)
Просьба владельца: 1600/1700 сливаются с обычными строками. R-7 в design.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019qoydUVv8g1qHxc123u2RR
2026-10-09 10:29:23 +04:00
Andrey Epifancev
5c7d5393c5 openspec: change statement-template-lines — полный состав строк ББ/ОФР (#80)
Спека: достройка формы по справочнику строк редакции в GET …/statement,
создание строки и ячейки при первой правке по line_code, пустые шаблонные
строки вне проверок §7 и статуса.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019qoydUVv8g1qHxc123u2RR
2026-10-09 10:17:23 +04:00
Andrey Epifancev
e08a69e3e1 openspec: архив nats-files-subjects (#77)
Change слит PR #78; спеки обновлены (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:17 +04:00
Andrey Epifancev
5ae8ff8a81 nats: subject'ы как в старом АРМ — files.*_uploaded, files.tabular_parsed (#77)
Решение владельца 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:18 +04:00
Andrey Epifancev
1b4a0859e4 feat(osv): несопоставленные — только строки без ИНН; ИНН сопоставленного ЮЛ в строке свода (#74)
Решения владельца 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>
2026-10-08 19:37:18 +04:00
Andrey Epifancev
7f94d25a54 docs(openspec): архив auto-confirm-clean-documents — спеки osv-result-mapping, primary-files, audit-trail (#64)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 18:11:56 +04:00
aep
020edd0fdd Merge pull request 'Автоподтверждение чистых документов (#64, OQ-157)' (#69) from feat/64-auto-confirm into main
Reviewed-on: #69
2026-10-08 17:08:34 +03:00
Andrey Epifancev
8122205357 fix: правки по финальному ревью автоподтверждения (I-1, M-1, M-2, M-4..M-6, T6.x)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 17:50:37 +04:00
Andrey Epifancev
e7bef704cf docs: автоподтверждение чистых документов в CLAUDE.md и README (#64)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 17:31:01 +04:00
Andrey Epifancev
64be2f2b5c feat: имя ГК (company_group_name) в ответах ЮЛ (#67)
В LegalEntityOut (а значит и LegalEntityDetail) добавлено company_group_name: текущее имя ГК company_group_id,
архивной тоже; у монозаёмщика null. Есть во всех ответах /directories/legal-entities: список, карточка, POST,
PATCH, move, withdraw; в снимках истории нет. Имена набора ЮЛ подгружаются одним батч-запросом
(repositories.directories.company_group_names_by_ids), число запросов списка от числа строк не зависит.
Спека directories-api и README дополнены.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-08 17:01:25 +04:00
Andrey Epifancev
3623358fb4 docs(openspec): change auto-confirm-clean-documents — спека автоподтверждения чистых документов (#64)
Proposal, design (D-1…D-6, решения без обсуждения №1–7) и дельты osv-result-mapping,
primary-files, audit-trail: чистый документ при маппинге сразу CONFIRMED (система,
confirmed_by NULL; переход версии — от загрузившего), удаление автоподтверждённых
файлов до DATA_CORRECTION включительно. Решение владельца 08.10.2026, ТЗ 03_9 п. 4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 16:36:48 +04:00
aep
d8bf5b22dc Merge pull request 'Автозамена: предупреждение о выпавших документах (#58)' (#60) from feat/58-replace-warning into main
Reviewed-on: #60
2026-10-07 23:36:22 +03:00
Andrey Epifancev
081d0e60fb Автозамена: предупреждение о документах заменённого файла, которых нет в новом (#58)
Замена остаётся на уровне файла (§9.5 п. 3, OQ-115), но если у заменённого файла есть
документы, ключа которых (document_type, osv_account_code, год, квартал) нет среди
документов нового файла, в metrics.mapping_warnings задания нового файла добавляется
предупреждение (OQ-154): имя и версия заменённого файла, выпавшие документы (тип, счёт,
период, статус, в т. ч. CONFIRMED) и версии консолидации, с которых сняты привязки
выпавших документов. Поведение замены, FILE_REPLACE и статусы документов не меняются.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-08 00:33:16 +04:00
Andrey Epifancev
7dcffbd10d Резолв контрагента: алиас приоритетнее ЮЛ-тёзки по нормализованному имени (#57)
CounterpartyIndex.resolve: порядок шагов ИНН -> точное имя -> алиас -> нормализованное
имя (OQ-128, §3 п. 4). Алиас уникален (ALIAS_TAKEN), поэтому владелец алиаса берётся
с match_kind = ALIAS, даже если есть ЮЛ-тёзки по нормализованному имени; NULL остаётся
при нескольких совпадениях только по имени. Правило общее для маппинга (Срез 2c) и
дорезолва свода на чтение (§3 п. 7).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-08 00:21:15 +04:00
Andrey Epifancev
10d9193ef9 OpenSpec-спеки по коду: DBML v5.17 (КПП), схема из DB_SCHEMA (#55)
- data-model: v5.16 → v5.17 (legal_entity(_history).kpp, миграция 0005), схема — настройка DB_SCHEMA
  (по умолчанию dkb), цепочка миграций до 0005, DBML_VERSION = "5.17", 28 enum-типов; сценарии «КПП добавляется
  и откатывается», «Нестандартная схема».
- directories-api: v5.14 → v5.17; kpp в создании/PATCH (null очищает), поиск q по КПП, INVALID_KPP, ИП без КПП.
- directory-import: необязательная колонка «КПП», код INVALID_KPP, пустая ячейка не стирает КПП при update.

Код не менялся: спеки догоняют слитые PR #52 и #53.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 23:40:42 +04:00
Andrey Epifancev
4cc926c033 КПП юридического лица: legal_entity.kpp, миграция 0005, API, импорт (DBML v5.17, #45)
- модели LegalEntity.kpp / LegalEntityHistory.kpp (последней колонкой), миграция 0005_dbml_v5_17 (upgrade/downgrade);
- domain/kpp.py: 9 символов (4 цифры, 2 цифры/латинские A-Z, 3 цифры), у ИП запрещён, иначе 422 INVALID_KPP;
- схемы Create/Update/Out/Detail/HistoryOut, PATCH пишет снимок history и аудит before/after с kpp, поиск q по КПП;
- импорт справочника: необязательная колонка КПП (синоним kpp), код INVALID_KPP, update обновляет непустой КПП;
- dev-seed: необязательный ключ kpp (значений в данных нет, не выдумываем);
- сверка с DBML, Makefile, README, CLAUDE.md, openspec/config.yaml — на v5.17.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
2026-10-07 18:51:50 +04:00
Andrey Epifancev
3b4f329f16 openspec: архив change front-api-gaps (2026-10-07) — спека consolidations-api (#42)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 18:23:09 +04:00
Andrey Epifancev
7c25109510 docs(openspec): front-api-gaps — решения №9–12 исполнения и ревью (#42)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 18:18:05 +04:00
Andrey Epifancev
9cdcb9cb55 docs: README и CLAUDE.md — периметр при создании, ячейки и участник периметра (#42)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 18:02:06 +04:00
Andrey Epifancev
a71bef237e docs(plan): план front-api-gaps (5 задач); design D-2 — CSV читает ChecklistOut (#42)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 17:04:04 +04:00
Andrey Epifancev
c80047f25c docs(openspec): front-api-gaps — сценарий «ГСК из одного ЮЛ» сохранён под прежним именем (strict validate)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 16:51:32 +04:00
Andrey Epifancev
0101bca165 docs(openspec): change front-api-gaps — периметр при создании, ячейки чек-листа, участник периметра (#42)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 16:51:12 +04:00
Andrey Epifancev
89abf0a8ec openspec: архив change slice-3b-statements-api (2026-10-07) — спеки documents-api, osv-result-mapping, statement-checks и др.
Ссылки README и CLAUDE.md переведены на архив.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 15:23:35 +04:00
Andrey Epifancev
1b20d57616 docs(openspec): решения №23–25 Среза 3b — процесс ревью пакетов и отката, автозамена форм на уровне файла (OQ-154)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 15:05:17 +04:00
Andrey Epifancev
669719467f docs(openspec): решение №20 Среза 3b — отозвано (присутствие цели §7 осталось как в tabular-parser)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 14:53:26 +04:00
Andrey Epifancev
4a5cb87e63 docs(openspec): решения №20–22 Среза 3b; уточнены сценарии «Форма с нарушением проверок» и «Пустой результат» (M-6)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 14:35:12 +04:00
Andrey Epifancev
dd7f7cc42d fix(files): удаление файла убирает формы ББ/ОФР и комментарии документов (C-1, T8.2)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 14:26:34 +04:00
Andrey Epifancev
7578b5fb12 docs(arm-core): правки README и CLAUDE.md по ревью Task 13 (I1–I3, минорные)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 13:44:01 +04:00
Andrey Epifancev
77b76c076d docs(openspec): решение №19 Среза 3b; уточнение про аудит экспорта xlsx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 13:31:50 +04:00
Andrey Epifancev
dea64c9f1d docs(arm-core): README, CLAUDE.md, tasks.md под Срез 3b
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 13:30:00 +04:00
Andrey Epifancev
68b8a3d2f7 docs(openspec): решение №18 Среза 3b — комментарии удалённых документов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 12:51:43 +04:00
Andrey Epifancev
3f744b7eb9 docs(openspec): решения №16–17 Среза 3b — форма без meta при подтверждении, detail.failures
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 12:39:51 +04:00
Andrey Epifancev
729d4cb072 docs(openspec): решения №13–15 Среза 3b; уточнение «форма без строк» (колонки — если есть в результате)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 11:51:06 +04:00
Andrey Epifancev
590d4ebc09 docs(openspec): решения №11–12 Среза 3b — повтор формы при маппинге, статус после правки
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 10:57:25 +04:00
Andrey Epifancev
dd454983e6 openspec: спека Среза 3b — формы ББ/ОФР в ядре и API до сводной ОСВ (#36)
proposal, design (D-1…D-14, решения без обсуждения №1–10), дельты osv-result-mapping (маппинг форм, статус),
statement-checks (новая: §7, межформенная, акцепт), documents-api (форма, правка, акцепт, подтверждение, комментарии,
исходный файл), consolidations-api (CSV чек-листа), directories-api (documents_count), users-admin (справочник имён).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 08:21:57 +04:00
Andrey Epifancev
93cd1f8aa0 feat(seed): dev-ГК под документы fixtures — «Русский Бисквит» из выгрузки ЕЦП и владельцы форм ДКБ
seed/dev/company_groups.yaml: ГК «Русский Бисквит» ровно как в fixtures/directories/ecp-export-russkiy-biskvit.xlsx
(20 ЮЛ/ИП, crm_id, филиал «Санкт-Петербургский РФ», ГСК из РБ и Счастливочной), ГК Унагранде/НПЗ/Межениновская по
ИНН из форм ББ/ОФР; алиасы под имена контрагентов и шапок ОСВ («Юг-Финанс / ПЕКАРНЯ СЧАСТЛИВОЧНАЯ», ...), чтобы
документы из fixtures ложились на «своих» ЮЛ и резолвились. Загрузчик проверяет ИНН, виды, ссылки членов и
уникальность «ЮЛ в одной ГСК/ГСЗ» до записи; apply — upsert по name/inn/(ГК, name), коды из последовательностей
API, без удалений. `--no-dev-groups` / `run_seed(dev_groups=False)` — dev-данные без ГК; фикстуры тестов API
используют его, чтобы начинать с пустых справочников.

make check: 1132 passed; интеграция seed/import: 23 passed. Два теста падают и на main из-за обновлённых golden
(test_mapping_golden 88 → 113, test_consolidation_fixtures UNMAPPED_TOTAL) — отдельная issue.

Closes #31

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b
2026-10-06 17:05:46 +04:00
aep
4879fdca88 Merge pull request 'fix(aliases,consolidations): блокировка удаления алиаса, границы входов (T11.3, M-4, M-6)' (#26) from fix/21-aliases-bounds into main
Reviewed-on: #26
2026-10-06 14:01:19 +03:00
Andrey Epifancev
5868b14c4d fix(consolidations): верхние границы входов и видимость до FOR UPDATE (M-6)
MembersIn.legal_entity_ids ≤ 500, StatusIn.comment ≤ 1000, OsvFilters.q ≤ 500 (422 со списком ошибок);
lock_visible_version проверяет видимость версии до FOR UPDATE. Спека consolidations-api: требование
«Границы входных данных».

Refs #21

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b
2026-10-06 13:06:11 +04:00
Andrey Epifancev
096d53b10c feat(seed): полный план счетов 1С в seed (488 строк)
Seed chart_of_accounts.csv заменён выгрузкой 1С: буквенные субсчета (01.К, 62.ОТ, 76.АВ),
забалансовые 001–012 и буквенные корни (МЦ, ГТД…), «Я…». Валидатор seed принимает буквенные
коды, 000 и 012, сирот выгрузки («Я68.01» без «Я68») с пустым parent_code; kind — из «Вида» 1С.
18 из 19 кодов реальных ОСВ теперь получают account_id (60.АВ — только в синтетике, в 1С нет).
ASSUMPTION(OQ-113): выгрузка считается полной.

Closes #23

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b
2026-10-06 12:57:20 +04:00
Andrey Epifancev
483ce8523b openspec: архив change slice-4-consolidation (2026-10-06), спеки consolidations-api, consolidated-osv, дельты data-model/documents-api/primary-files/osv-result-mapping/directory-policy/audit-trail
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-06 10:39:30 +04:00
Andrey Epifancev
42c253146c test(consolidation): подходящесть неподтверждённых кандидатов чек-листа, правки spec и design по финальному ревью
I-1 (T8.2): тесты, что неподтверждённый документ даёт NEEDS_CHECK/RECOGNIZED только если подходит версии (fits):
нарастающий Q2 и квартальный Q4 при версии Q3, другой год и ЮЛ вне периметра не влияют; положительный контроль.
M-2: 404 `NOT_FOUND` с сообщением `…_NOT_FOUND`, ключ привязки с признаком нарастающего (R-1, R-14), порядок и
режимы блокировок подтверждения (R-3) в spec. M-3: в design #39 и #43 — окно коммита перехода после загрузки.
M-5: docstring lock_versions_for_entity про ЮЛ без ГК в периметре.

Co-Authored-By: Claude Sonnet <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-06 08:28:24 +04:00
Andrey Epifancev
98922cc75c docs(slice-4): правки README и design.md по ревью Task 14
Co-Authored-By: Claude Sonnet <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-06 08:10:57 +04:00