# Руководство ревьюера Ordinis Это руководство — для **ревьюеров schema drafts**: тех, кто принимает или отклоняет предложения изменить схему справочников. Если ты **оператор** (заводишь записи) — смотри [руководство оператора](../operator/index.md). ## Когда нужен ревью Изменения схемы справочника (добавление поля, изменение типа, новое ограничение) **не применяются автоматически**. Оператор создаёт **schema draft** — предложение, которое проходит через ревью: ``` DRAFT → REVIEW_PENDING → APPROVED → PUBLISHED ↘ REJECTED ↘ CHANGES_REQUESTED ↘ WITHDRAWN ``` Ты как ревьюер решаешь: безопасно ли применить это изменение? Не сломает ли оно существующих записей? Не сломает ли консьюмеров (Альтум, BI и пр.)? ## Что внутри - [Ревью schema drafts](schema-drafts.md) — пошаговая инструкция, как смотреть diff, какие проверки делать, как принимать решение ## Какая роль нужна Для approve / reject schema drafts требуется realm role `ordinis:schema:reviewer`. Для финального publish — `ordinis:schema:publisher` (обычно более узкая группа). Полная матрица — см. [Роли доступа](../operator/rbac.md) в руководстве оператора. ## Когда чаще всего стоит REJECT или REQUEST_CHANGES | Сценарий | Что делать | |---|---| | Меняется тип существующего поля (string → number) | **REJECT** — поломает существующие записи. Если очень нужно, делать через миграцию данных, не через draft | | Удаляется обязательное поле | **REJECT** или **REQUEST_CHANGES** с альтернативой (мигрировать данные) | | Добавляется обязательное поле без default | **REQUEST_CHANGES** — нужен default или поле должно быть опциональным | | Добавляется FK без проверки целостности | **REQUEST_CHANGES** — попроси добавить orphan check | | Меняется `enum` (удаляется значение) | **REQUEST_CHANGES** — закрой все записи с этим значением сначала | | Просто добавляется опциональное поле | Обычно **APPROVE** — безопасно | | Косметика (description, examples) | **APPROVE** — это документация | ## Когда APPROVE - Добавление опционального поля - Расширение `enum` (новое значение) - Уточнение `description` / `examples` - Добавление формата валидации (`format: date`) к ранее не-валидируемому полю, если все существующие данные ему соответствуют ## Базовые принципы 1. **Не ломай существующие записи.** Если изменение делает 1+ запись невалидной — это breaking change, нужна data migration. 2. **Не ломай downstream.** Если поле читают Альтум / геопортал / BI — спроси их перед изменением имени или типа. 3. **Документируй причину.** Approve / reject комментарий — это аудит. Через год кто-то будет смотреть «почему мы так сделали». 4. **Сомневаешься — REQUEST_CHANGES.** Это не отказ, это просьба автора уточнить. Лучше потратить день на обсуждение, чем неделю на rollback. ## Связанные материалы - [Обзор API](../integration/api/index.md) — чтобы понять, как изменение отразится на потребителях - [Bitemporal модель](../integration/api/bitemporal.md) — как работают периоды действия (важно для миграций) - [Cross-references](../integration/api/x-references.md) — как изменения FK влияют на зависимые справочники