DBML v5.17: КПП юридического лица (legal_entity.kpp), пересмотр OQ-31 (#53) #54

Merged
aep merged 3 commits from feat/53-kpp-dbml-v5-17 into main 2026-10-07 18:01:23 +03:00
Owner

Closes #53

Парный PR: реализация в arm-core (RSHB/arm-core#45) — сливать после этого PR.

Что сделано

  • model/data-model-v5.17.dbml, model/entities-v5.17.md (v5.16 не тронуты): legal_entity.kpp, legal_entity_history.kpp (varchar, nullable), запись в changelog шапки.
  • 07-open-questions.md: OQ-31 — новое решение 07.10.2026, старое (04.10.2026) оставлено в истории строки.
  • 05-domain-rules.md: колонка КПП в импорте (§13.1), шаг и код INVALID_KPP (§13.2, перечень кодов 16 -> 17), новый §13.5 «КПП» (формат, ИП, уникальность, PATCH/снимок, импорт, поиск).
  • 04-data-model-guide.md, 03-architecture.md, repo-templates/arm-core.CLAUDE.md — ссылки на v5.17; mockup/INDEX.md (51-02 и досъёмка), 10-user-journey.md (шаги 1.1, 1.2).

Решения владельца (07.10.2026)

Формат 9 символов (4 цифры, 2 цифры/латинские A-Z, 3 цифры), иначе INVALID_KPP; у ИП запрещён (422; импорт — строка пропускается); для ЮЛ необязателен; уникален только inn; изменение — обычный PATCH со снимком.

Rulings I made

  • R-1: kpp в DBML поставлен последней колонкой обеих таблиц (после updated_at / changed_by): сверка ORM-DBML сравнивает порядок колонок, миграция добавляет колонку в конец (прецедент counterparty_match_kind, v5.16).
  • R-2: импорт: неверный формат КПП у ЮЛ тоже даёт INVALID_KPP и пропуск строки (владелец решил явно только ИП); код — итоговый, строка считается в errors; порядок проверок: тип -> ИНН -> КПП -> дубль.
  • R-3: импорт со стратегией update: непустой КПП из файла обновляет kpp существующего ЮЛ (со снимком), пустая ячейка существующий КПП не стирает.
  • R-4: поиск ЮЛ: подстрочный q (имя, ИНН) ищет и по КПП; точный фильтр inn не меняется.
  • R-5: смена entity_type на ИП у ЮЛ с КПП без очистки КПП — INVALID_KPP.

Не сделано

  • make check в docs не запущен до конца: нет jsonschema в системном python (проверяет контракты, которые PR не затрагивает).
  • Диаграммы model/diagrams/ не перерисовывались (как и в v5.14–v5.16).
  • /CLAUDE.md workspace (не git-файл) ссылается на v5.16 — правится вручную владельцем.

🤖 Generated with Claude Code

https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3

Closes #53 Парный PR: реализация в arm-core (RSHB/arm-core#45) — сливать после этого PR. ## Что сделано - `model/data-model-v5.17.dbml`, `model/entities-v5.17.md` (v5.16 не тронуты): `legal_entity.kpp`, `legal_entity_history.kpp` (varchar, nullable), запись в changelog шапки. - `07-open-questions.md`: OQ-31 — новое решение 07.10.2026, старое (04.10.2026) оставлено в истории строки. - `05-domain-rules.md`: колонка `КПП` в импорте (§13.1), шаг и код `INVALID_KPP` (§13.2, перечень кодов 16 -> 17), новый §13.5 «КПП» (формат, ИП, уникальность, PATCH/снимок, импорт, поиск). - `04-data-model-guide.md`, `03-architecture.md`, `repo-templates/arm-core.CLAUDE.md` — ссылки на v5.17; `mockup/INDEX.md` (51-02 и досъёмка), `10-user-journey.md` (шаги 1.1, 1.2). ## Решения владельца (07.10.2026) Формат 9 символов (4 цифры, 2 цифры/латинские A-Z, 3 цифры), иначе `INVALID_KPP`; у ИП запрещён (422; импорт — строка пропускается); для ЮЛ необязателен; уникален только `inn`; изменение — обычный PATCH со снимком. ## Rulings I made - R-1: `kpp` в DBML поставлен **последней колонкой** обеих таблиц (после `updated_at` / `changed_by`): сверка ORM-DBML сравнивает порядок колонок, миграция добавляет колонку в конец (прецедент `counterparty_match_kind`, v5.16). - R-2: импорт: неверный формат КПП у ЮЛ тоже даёт `INVALID_KPP` и пропуск строки (владелец решил явно только ИП); код — итоговый, строка считается в `errors`; порядок проверок: тип -> ИНН -> КПП -> дубль. - R-3: импорт со стратегией `update`: непустой КПП из файла обновляет `kpp` существующего ЮЛ (со снимком), пустая ячейка существующий КПП не стирает. - R-4: поиск ЮЛ: подстрочный `q` (имя, ИНН) ищет и по КПП; точный фильтр `inn` не меняется. - R-5: смена `entity_type` на `ИП` у ЮЛ с КПП без очистки КПП — `INVALID_KPP`. ## Не сделано - `make check` в docs не запущен до конца: нет `jsonschema` в системном python (проверяет контракты, которые PR не затрагивает). - Диаграммы `model/diagrams/` не перерисовывались (как и в v5.14–v5.16). - `/CLAUDE.md` workspace (не git-файл) ссылается на v5.16 — правится вручную владельцем. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
aep added 2 commits 2026-10-07 17:31:01 +03:00
Решение владельца 07.10.2026: КПП нужен. data-model-v5.17.dbml и entities-v5.17.md (v5.16 не тронуты):
legal_entity.kpp и legal_entity_history.kpp (nullable). Формат 9 символов (4 цифры, 2 цифры/латинские A-Z,
3 цифры), иначе INVALID_KPP; у ИП запрещён; для ЮЛ необязателен; уникален только inn; изменение —
обычный PATCH со снимком. 05-domain-rules: §13.1/13.2 (колонка КПП, код INVALID_KPP) и новый §13.5.
OQ-31 — новое решение (старое оставлено в истории строки). Гайд модели, 03-architecture,
mockup/INDEX, 10-user-journey, repo-templates — на v5.17.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
aep added 1 commit 2026-10-07 17:52:00 +03:00
aep merged commit fa32e8e16a into main 2026-10-07 18:01:23 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-ka-docs#54
No description provided.