## MODIFIED Requirements ### Requirement: Версия DBML зафиксирована в коде Пакет моделей SHALL объявлять константу версии DBML (`DBML_VERSION = "5.23"`); скрипт сверки SHALL сравнивать её с версией в шапке файла DBML и падать при расхождении — смена модели без осознанного обновления ORM невозможна. #### Scenario: Новая версия DBML без обновления ORM - **WHEN** в `docs/model/` появляется `data-model-v5.24.dbml`, а константа в ORM — `5.23` - **THEN** сверка против нового файла падает с сообщением о версии до сравнения таблиц ## ADDED Requirements ### Requirement: Миграция DBML v5.23 — версия правил элиминации обязательна Миграция `0010_dbml_v5_23` после `0009_dbml_v5_21` SHALL заполнить пустой `consolidation_version.elimination_rules_version` номером версии правил, действовавшей на московскую дату `created_at` версии (пустой `created_at` — текущая дата), а если такой нет — последней открытой версии (`valid_to IS NULL`), затем сделать колонку NOT NULL. Если после заполнения остаются пустые значения (правил нет вовсе), миграция SHALL завершиться ошибкой с числом таких версий до изменения схемы. Откат SHALL снимать только NOT NULL, значения сохраняются. v5.22 структуру БД не меняла, отдельной миграции у неё нет. #### Scenario: Заполнение по дате создания - **WHEN** правила v1 действуют до 30.06.2026, v2 — с 01.07.2026, версии созданы 01.03.2026, 30.06.2026 21:30 UTC и без даты - **THEN** после `upgrade head` у них 1, 2 и 2; колонка NOT NULL; `downgrade 0009_dbml_v5_21` снимает NOT NULL, значения остаются #### Scenario: Версии без правил - **WHEN** в БД есть версия консолидации и нет ни одного правила элиминации - **THEN** `upgrade head` падает с ошибкой «миграция v5.23 невозможна…», ревизия остаётся `0009_dbml_v5_21`