Andrey Epifancev 01767fd2b9 chore(openspec): архив change slice-1-directories (2026-10-05)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-05 11:09:08 +04:00

5.5 KiB
Raw Blame History

Proposal: Срез 1 (сквозное) — DBML v5.14, правила импорта из ЕЦП CRM, политика видимости, OQ

Срез: 1 «Справочники» (docs/context/09-delivery-plan.md), сокращённый по решению владельца 04.10.2026: без UI справочника, минимальный экран администратора — цель быстрее дойти до Среза 2 (tabular-parser). Репозиторий: arm-ka-docs. Issue: RSHB/arm-ka-docs#6. Дочерние change'и: arm-core/openspec/changes/slice-1-directories (RSHB/arm-core#5), фикстура — RSHB/arm-ka-fixtures#2.

Why

Срез 1 требует двух решений, которые нельзя принять в коде молча: модель данных (ЮЛ одновременно в одной ГСК и одной ГСЗ — DBML v5.13 это запрещает) и правила импорта реальной выгрузки ЕЦП CRM, формат которой появился только сейчас (docs/source/biq/ecp-export-lagal-entity.xlsx, 8400 строк) и отличается от макета [38] и от предположений ТЗ. По CLAUDE.md изменение модели идёт только через новую версию DBML с changelog, алгоритмы — только через 05-domain-rules.md.

What Changes

  • DBML v5.14 (docs/model/data-model-v5.14.dbml, v5.13 остаётся в истории): related_group_member.kind (денормализация related_group.kind) и частичный уникальный индекс (legal_entity_id, kind) WHERE is_current вместо legal_entity_id — ЮЛ может состоять одновременно в одной ГСК и одной ГСЗ (решение владельца, отменяет ANL-030); КПП не вводится; audit_action + LEGAL_ENTITY_CHANGE, USER_CHANGE (ТЗ 8.2 требует журнал изменений ЮЛ и пользователей, в v5.13 для них не было действия); уточнена семантика company_group.crm_id / base_regional_office_id по выгрузке ЕЦП. entities-v5.14.md, 04-data-model-guide.md, ссылки в CLAUDE.md репозиториев — на v5.14.
  • 05-domain-rules.md: новый §13 «Импорт справочников из выгрузки ЕЦП CRM» (формат файла, построчные правила, коды отчёта, транзакция, след в audit_event и S3, ручные операции справочника: перевод в другую ГК, вывод из состава, алиасы, ГСК/ГСЗ); §10.1 «Видимость справочников» — policy через данные (regional_office.is_head_office), без кода роли; ЗО не фильтрует (OQ-86).
  • 07-open-questions.md: OQ-31 и OQ-32 закрыты решением владельца; OQ-25 частично закрыт по выгрузке (состав ГК «Русский Бисквит»); новые OQ-86…OQ-91 (ЗО-фильтр, типы нерез./ФЛ, контрольные разряды ИНН, «ЦКБ»/«Головная организация», ИНН в нескольких ГК, одна ГСК/ГСЗ на ГК в выгрузке).
  • Выгрузка ЕЦП docs/source/biq/ecp-export-lagal-entity.xlsx закоммичена как первоисточник формата (добавлена владельцем); срез по ГК «Русский Бисквит» — фикстура fixtures/directories/ecp-export-russkiy-biskvit.xlsx.
  • 09-delivery-plan.md: Срез 1 по факту (без UI справочника; минимальный экран администратора; импорт из ЕЦП); 10-user-journey.md: пометка, что экраны справочника (50, 51, 61, 77–80) реализуются позже, API — в Срезе 1.
  • 08-source-docs-index.md: строка про выгрузку ЕЦП.

Capabilities

Change документный: поведение описывается спеками дочернего change'а в arm-core (directories-api, directory-import, directory-policy, users-admin). Здесь — skip_specs: true.

Impact

  • Таблицы DBML: related_group_member (новая колонка, новый индекс) — миграция 0002 в arm-core; остальные таблицы частей 01–02 без изменений структуры.
  • Правила: §13 — новый; §10.1 — уточнение §10; §3 (алиасы) — без изменений.
  • Потребители: arm-core (ORM, миграция, check_dbml_vs_orm.py на v5.14, импорт, policy), fixtures (срез выгрузки).

Non-goals

  • UI справочника по макету (экраны 50, 51, 61, 77–80) — отдельный срез по решению владельца.
  • Расширение entity_type (нерезиденты, ФЛ), контрольные разряды ИНН, маппинг «ЦКБ» на ГО — после ответов на OQ-87…OQ-89.
  • Онлайн-интеграция с ЕЦП CRM — только файл.
  • Контракт сервисов распознавания — не затрагивается.