Proposal, design и tasks сквозного change'а Среза 4: enum counterparty_match_kind и колонка osv_entry.counterparty_match_kind, правила приведения периодов (ключ, пробел), явная привязка документов, статусы Среза 4, контракт API для фронта. Refs RSHB/arm-ka-docs#19 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
53 lines
5.8 KiB
Markdown
53 lines
5.8 KiB
Markdown
# Proposal: Срез 4 (сквозное) — DBML v5.16, правила консолидации и сводной ОСВ по факту, OQ
|
||
|
||
**Срез:** 4 (консолидация: версии, периметр, блокировка, привязка документов, сводная ОСВ, экспорт). **Репозиторий:**
|
||
arm-ka-docs. **Issue:** RSHB/arm-ka-docs#19. **Дочерний change:** `arm-core/openspec/changes/slice-4-consolidation`
|
||
(RSHB/arm-core#18). Объём по решению владельца 06.10.2026: бэкенд + API + экспорт xlsx; UI — другой разработчик.
|
||
|
||
## Why
|
||
|
||
Решения владельца 06.10.2026 закрывают OQ-03 (пропуск квартала → пробел; ключ (счёт, контрагент)), OQ-19
|
||
(блокировка закрывает все правки версии, перехват по `CONSOLIDATION_EDIT` с причиной), фиксируют автоматику статусов
|
||
Среза 4, явную привязку документов к версии при подтверждении и требование показывать в API способ сопоставления
|
||
контрагента. Последнее требует новой версии модели: `osv_entry` хранит только `counterparty_id`, и после ручного
|
||
сопоставления появляется алиас, по которому ручное неотличимо от автоматического.
|
||
|
||
## What Changes
|
||
|
||
- **DBML v5.16** (`model/data-model-v5.16.dbml`, v5.15 остаётся): enum `counterparty_match_kind` (`INN`, `NAME`,
|
||
`ALIAS`, `MANUAL`, `PROPAGATED`), колонка `osv_entry.counterparty_match_kind` (NULL ⇔ `counterparty_id` NULL);
|
||
changelog в шапке; уточнение note `consolidation_document` (точки привязки/отвязки) и `consolidation_lock`
|
||
(без истечения). `entities-v5.16.md`, `04-data-model-guide.md` (DECISION-5: «что не хранится» дополнено способом
|
||
сопоставления и пробелами), ссылки в `CLAUDE.md`/`repo-templates`/`arm-core/openspec/config.yaml` — на v5.16.
|
||
- **`05-domain-rules.md`**: §2 — ключ склейки (счёт, контрагент по сырому имени и ИНН), договоры внутри контрагента,
|
||
пропуск квартала → пробел по паре (ЮЛ, счёт), правило выбора источников (нарастающий > квартальные), нули для
|
||
отсутствующего квартала, дубль ключа внутри квартала; §3 — явная привязка `consolidation_document` (вместо «последние
|
||
подтверждённые»), дорезолв на чтение не сохраняется, `counterparty_match_kind`, кандидаты (`group`/`all`), перенос
|
||
алиаса без `DIRECTORY_DELETE`, автоприменение по всем ОСВ версии; §9.1 — таблица переходов Среза 4 (кто/чем), остальные
|
||
переходы — Срез 7; §9.3 — `period_check` остаётся `UNKNOWN` (OQ-120); §9.5 — отвязка при автозамене, удаление файла
|
||
с документом в версии (OQ-110 закрыт для Среза 4); §10 — policy «в работе + своя блокировка».
|
||
- **`03-architecture.md`**: пакет консолидаций, чистый домен свода (D-1), порядок блокировок «файл → документ → версия».
|
||
- **`07-open-questions.md`**: закрыты OQ-03, OQ-19, OQ-110 (Срез 4), OQ-40 (допущение принято); новые OQ-118 (запрет
|
||
загрузки/подтверждения после `DATA_CORRECTION`, ТЗ 03_9 A1 — Срез 7), OQ-119 (истечение блокировки), OQ-120
|
||
(`period_check` документа по версиям), OQ-121 (порог размера свода для кэша), OQ-122 (ячейка `PROCESSING` чек-листа до
|
||
маппинга), OQ-123 (общие строки `osv_entry` у нескольких версий — ручное сопоставление в одной меняет все).
|
||
- **`09-delivery-plan.md`**: Срез 4 по факту (чек-лист перенесён из Среза 3; UI — отдельно); **`10-user-journey.md`**:
|
||
шаги 2.1–2.6, 3.1 — ссылки на эндпоинты; **`dev/qa-guide.md`**: §7 «Консолидация через API» (создание, блокировка,
|
||
загрузка с версией, подтверждение, чек-лист, свод, сопоставление, экспорт).
|
||
- **`dev/api-contract-slice-4.md`** (новый): перечень эндпоинтов, схем и кодов ошибок для разработчика фронта (экраны
|
||
`34`–`37`, `42`, `30`, `32-*`, `31-00`).
|
||
|
||
## Capabilities
|
||
|
||
Change документный (`skip_specs: true`); поведение описывают спеки дочернего change'а.
|
||
|
||
## Impact
|
||
|
||
- Таблицы: `osv_entry` (колонка), `consolidation_document`/`consolidation_lock` (семантика). Правила: §2, §3, §9, §10.
|
||
Потребители: arm-core (миграция 0004, `DBML_VERSION`), фронт (контракт API); tabular-parser — без изменений.
|
||
|
||
## Non-goals
|
||
|
||
- Маршрут согласования, УОБ, ЕХ, «Добавить версию», `CONFIRM`, `EXTENDED` (Срезы 6–7); шахматка и ВГО (Срез 5);
|
||
ББ/ОФР (2b), PDF (3); UI (другой разработчик); CSV чек-листа.
|