# Разбор ошибок валидации Ordinis старается давать понятные ошибки, но иногда нужна расшифровка. Эта страница — справочник самых частых. ## Формат ошибок В UI ошибки появляются: - **Инлайн под полем формы** — для конкретных полей (red text) - **Тост в правом верхнем** — для общих ошибок (например, сеть) - **Полноэкранный экран** — для серьёзных проблем (500 / 503) Каждая ошибка имеет: - **Код** (`webhook_status_invalid`, `record_not_active`) — машинный идентификатор - **Сообщение** — человеческое описание на русском - **Trace ID** (для серверных ошибок) — для передачи в ops ## Самые частые ошибки ### 422: «Поле X обязательно» Что значит: схема справочника требует это поле, но ты его не заполнил. Что делать: заполни и сохрани. Если поле кажется ненужным — это вопрос к схеме справочника, обсуди с ревьюером (см. [schema drafts](../reviewer/schema-drafts.md)). ### 422: «Тип значения не соответствует схеме» Что значит: например, в поле `mass_kg` (number) введён текст. Что делать: проверь тип в hint'е под полем. Числовые поля принимают только цифры (точка как разделитель десятых для дробей: `1234.5`). ### 422: «FK не найден» Что значит: значение в поле со ссылкой (`x-references`) указывает на запись, которой нет в целевом справочнике. Что делать: 1. Открой целевой справочник (имя есть в hint'е поля) 2. Проверь, есть ли там запись с этим бизнес-ключом 3. Если нет — сначала добавь запись туда, потом возвращайся 4. Если есть, но закрыта — нужно её **активировать** или создать новую ### 409: «Бизнес-ключ уже существует» Что значит: ты пытаешься создать запись с `code`, который уже занят активной записью того же справочника. Что делать: - Выбери другой `code` - Или: найди существующую запись и обнови её, а не создавай новую - Или: закрой существующую (если она устарела) и создай заново ### 409: «Период действия пересекается» Что значит: bitemporal модель не разрешает двум версиям одной записи быть активными одновременно. Что делать: 1. Найди активную версию того же бизнес-ключа 2. **Закрой её** (`valid_to = момент новой версии`), потом создавай новую 3. Или: укажи `valid_from` новой версии так, чтобы периоды не пересекались См. [Закрытие записи](close-record.md). ### 403: «Нет доступа» Что значит: у твоего пользователя нет прав на эту операцию или scope. Что делать: - Если справочник `RESTRICTED` — нужны права администратора, спроси у руководителя - Если `INTERNAL` — нужен внутренний токен (не публичный) - Если операция «approve schema draft» — это право ревьюера, не оператора (см. [reviewer guide](../reviewer/index.md)) ### 401: «Требуется вход» Что значит: твоя сессия истекла или нет валидного токена. Что делать: войди заново через Keycloak. После logout / refresh всё должно работать. ### 503: «Сервер временно недоступен» Что значит: backend временно не отвечает (rolling restart, плановое обслуживание, или сетевой сбой). Что делать: 1. Подожди 30-60 секунд, нажми **«Повторить»** 2. Если повторяется > 5 минут — свяжись с ops 3. Никакие данные не пропали — сервер вернётся, твои изменения сохранены локально пока не отправил ### Network error / «Нет соединения» Что значит: твой браузер не может достучаться до сервера. Чаще всего проблема в твоей сети, не в Ordinis. Что делать: 1. Проверь соединение (открой любой другой сайт) 2. Если корпоративная сеть — проверь VPN / прокси 3. Если изменения не сохранились — они **не пропадут**, попробуй повторить когда соединение вернётся ### «AxiosError: Request failed with status code 503» (raw) Что значит: техническая ошибка, которая «убежала» в UI без friendly обёртки. Это **баг UI**, не баг данных. Что делать: сделай скриншот, передай в support с trace ID (если есть). ## Schema validation на стороне сервера Когда ты сохраняешь запись, сервер валидирует её по JSON Schema справочника. Если ошибка — увидишь подробности: ``` Validation failed: - /satellite_type: must be one of ['OPERATIONAL', 'TESTING', 'DECOMMISSIONED'] - /mass_kg: must be number, got string - /name: required property missing ``` Каждая строка — отдельная проблема. Поправь все, сохрани заново. ## Если не помогает 1. **Скриншот** — снимок экрана со всеми видимыми деталями ошибки 2. **Trace ID** — если есть в сообщении, скопируй 3. **Время** — точное время, когда возникла 4. **Что ты делал** — последняя последовательность действий 5. Передай это команде поддержки. По этим данным они смогут восстановить контекст через [журнал аудита](audit-log.md) и серверные логи. ## Что НЕ нужно делать - ❌ **Очищать кэш браузера / cookies** — это сломает сессию, ошибку не уберёт - ❌ **Открывать в инкогнито** — то же самое - ❌ **Менять JSON вручную в DevTools** — данные не сохранятся всё равно, но можешь напугать себя - ❌ **Заводить дубликат записи «чтобы попробовать»** — если первая не сохранилась, она и не сохранилась, дубликат не появится