OpenSpec: change slice-2c-osv-ingest (DBML v5.15, правила маппинга ОСВ в ядре, OQ) и data-model-v5.15.dbml
Issue: RSHB/arm-ka-docs#16 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
This commit is contained in:
parent
8130eed1e6
commit
c821e0fbfe
1321
model/data-model-v5.15.dbml
Normal file
1321
model/data-model-v5.15.dbml
Normal file
File diff suppressed because it is too large
Load Diff
3
openspec/changes/slice-2c-osv-ingest/.openspec.yaml
Normal file
3
openspec/changes/slice-2c-osv-ingest/.openspec.yaml
Normal file
@ -0,0 +1,3 @@
|
||||
schema: spec-driven
|
||||
created: 2026-10-05
|
||||
skip_specs: true
|
||||
25
openspec/changes/slice-2c-osv-ingest/design.md
Normal file
25
openspec/changes/slice-2c-osv-ingest/design.md
Normal file
@ -0,0 +1,25 @@
|
||||
# Design: Срез 2c (сквозное, docs)
|
||||
|
||||
## Context
|
||||
См. proposal и `arm-core/openspec/changes/slice-2c-osv-ingest/design.md` (D-1…D-13).
|
||||
|
||||
## Decisions
|
||||
|
||||
### D-1. v5.15 без expression-индекса
|
||||
`lower(email)` как уникальный индекс не поддерживается сверкой ORM↔DBML (индексы сравниваются по колонкам). Вместо
|
||||
этого email нормализуется в нижний регистр при записи, уникальность — прежний UNIQUE. Миграция приводит данные.
|
||||
|
||||
### D-2. Правила маппинга фиксируются в §1.3/§9 после реализации
|
||||
Как в Срезе 2a: задача docs-change «по факту» выполняется после merge дочернего change'а, расхождения — правкой §.
|
||||
|
||||
### D-3. Автозамена — новый §9.5
|
||||
Решение владельца 05.10.2026: новый файл с документом того же типа/счёта/периода заменяет прежние (в т.ч. `CONFIRMED`,
|
||||
с пометкой в аудите); удаление файла — пока нет `CONFIRMED` и файл никого не заменял; после Среза 4 — ограничение по консолидациям.
|
||||
|
||||
## Decisions made without discussion
|
||||
|
||||
| № | Дата | Решение | Обоснование | Цена ошибки |
|
||||
|---|---|---|---|---|
|
||||
| 1 | 2026-10-05 | D-1: email в нижнем регистре вместо `lower(email)`-индекса | сверка DBML | индекс в v5.16 |
|
||||
| 2 | 2026-10-05 | D-3: §9.5 автозамена/удаление по решению владельца; удаление заменившего файла запрещено | целостность цепочки версий | ослабить |
|
||||
| 3 | 2026-10-05 | `period_check = UNKNOWN` до Среза 4 | нет версии консолидации | пересчёт в Срезе 4 |
|
||||
37
openspec/changes/slice-2c-osv-ingest/proposal.md
Normal file
37
openspec/changes/slice-2c-osv-ingest/proposal.md
Normal file
@ -0,0 +1,37 @@
|
||||
# Proposal: Срез 2c (сквозное) — DBML v5.15, правила маппинга ОСВ в ядре по факту, OQ
|
||||
|
||||
**Срез:** 2, подсрез 2c (загрузка файлов, очередь, маппинг результата парсера в `document`/`osv_entry`). **Репозиторий:**
|
||||
arm-ka-docs. **Issue:** RSHB/arm-ka-docs#16. **Дочерний change:** `arm-core/openspec/changes/slice-2c-osv-ingest` (RSHB/arm-core#14).
|
||||
|
||||
## Why
|
||||
|
||||
Решения владельца 05.10.2026 (OQ-45 `NU` хранить; OQ-59 регистр email; OQ-01/02/05; автозамена файлов) требуют новой
|
||||
версии модели и фиксации правил маппинга, которых в §1.3/§3/§9 нет в деталях (кто ставит статусы файла, как
|
||||
разделены inbox и маппинг, что делать с повтором счёта в файле, что такое `period_check` без консолидации).
|
||||
|
||||
## What Changes
|
||||
|
||||
- **DBML v5.15** (`model/data-model-v5.15.dbml`, v5.14 остаётся): `osv_data_type + NU`; `app_user.email` в нижнем
|
||||
регистре (структура без изменений); уточнения семантики `stored_file.status`/`recognition_job.group_schema` в changelog.
|
||||
`entities-v5.15.md`, `04-data-model-guide.md`, ссылки в `CLAUDE.md`/`repo-templates` — на v5.15.
|
||||
- **`05-domain-rules.md`**: §1.3 — маппинг в ядре по факту (TOTAL не хранится, нормализация кода, `account_root` при
|
||||
нечисловом первом сегменте, повтор счёта в файле); §1.5 — `period_check = UNKNOWN` до Среза 4, `is_cumulative` по Q1;
|
||||
§3 п. 4 — резолв без policy, нормализация имени ЮЛ как алиаса; §9.2 — таблица «кто ставит статус файла»; §9.3 — условия
|
||||
`RECOGNIZED`/`NEEDS_CHECK`; новый §9.5 «Автозамена и удаление файлов» (решение владельца).
|
||||
- **`03-architecture.md`**: цикл маппинга как третий фоновый процесс ядра (outbox, вахтёр, маппинг), OQ-69 закрыт.
|
||||
- **`07-open-questions.md`**: закрыты OQ-67, OQ-69, OQ-70, OQ-59 (реализацией), OQ-109 (лимит на загрузке у ядра);
|
||||
новые OQ: удаление файлов после появления консолидаций (ANL-020 — уточнить условие), ретеншн `expires_at` (связь с OQ-22).
|
||||
- **`09-delivery-plan.md`**: 2c по факту; **`dev/qa-guide.md`**: сценарии загрузки ОСВ, статусы, просмотр строк через API.
|
||||
|
||||
## Capabilities
|
||||
|
||||
Change документный (`skip_specs: true`); поведение описывают спеки дочернего change'а.
|
||||
|
||||
## Impact
|
||||
|
||||
- Таблицы: `osv_entry` (enum), `app_user` (данные). Правила: §1.3, §1.5, §3, §9. Потребители: arm-core (миграция 0003,
|
||||
`DBML_VERSION`), tabular-parser — без изменений (контракт не меняется).
|
||||
|
||||
## Non-goals
|
||||
|
||||
- UI (2d), ББ/ОФР (2b/Срез 3), replay заданий, JetStream, аудит обмена (OQ-55).
|
||||
10
openspec/changes/slice-2c-osv-ingest/tasks.md
Normal file
10
openspec/changes/slice-2c-osv-ingest/tasks.md
Normal file
@ -0,0 +1,10 @@
|
||||
# Tasks: Срез 2c (docs)
|
||||
|
||||
- [x] 1.1 `model/data-model-v5.15.dbml` — changelog v5.15, `osv_data_type + NU`, note на `app_user.email`; проверка: 43 таблицы, 27 enum.
|
||||
- [ ] 1.2 `model/entities-v5.15.md` (копия v5.14 + «Что изменилось в v5.15»), `context/04-data-model-guide.md`, `CLAUDE.md` workspace и
|
||||
`repo-templates/arm-core.CLAUDE.md` → v5.15. Ссылка на DBML в `openspec/specs/quality-checks/spec.md` (там ещё v5.13) —
|
||||
отдельным bounded-коммитом в этой же ветке с пометкой в описании PR (дельты в change со `skip_specs` нет).
|
||||
- [ ] 2.1 После реализации (дочерний change, задачи 2–4): §1.3, §1.5, §3 п. 4, §9.2–9.3, новый §9.5 в `05-domain-rules.md`;
|
||||
`03-architecture.md` — цикл маппинга; `07-open-questions.md` — закрыть OQ-67/69/70/59/109, новые OQ (удаление после консолидаций,
|
||||
ретеншн при удалении); `09-delivery-plan.md` — 2c по факту; `dev/qa-guide.md` — сценарии загрузки и просмотра ОСВ через API.
|
||||
- [ ] 2.2 После merge дочернего change: `openspec archive slice-2c-osv-ingest`.
|
||||
Loading…
x
Reference in New Issue
Block a user