# Работа с записями

Запись — одна строка в справочнике (например, конкретный космический
аппарат «ISS» в справочнике `spacecraft`).

## Добавить запись

1. Открой справочник в каталоге
2. Кнопка **«Создать запись»** в правом верхнем
3. Заполни поля по схеме — обязательные помечены звёздочкой
4. **Период действия** — `valid_from` / `valid_to`:
   - `valid_from` — с какой даты запись актуальна (по умолчанию: сейчас)
   - `valid_to` — до какой даты (по умолчанию: открыто)
5. **«Сохранить»** — запись появляется в списке

### Бизнес-ключ

Если у справочника `x-id-source: "code"`, бизнес-ключ берётся из поля
`code`. Иначе — задаётся отдельно при создании. Бизнес-ключ должен быть
уникален: попытка создать запись с уже существующим ключом → ошибка 409.

### Локализованные поля

Поля с `x-localized: true` имеют отдельные значения для каждого языка:

```
Название [ru]: Международная космическая станция
Название [en]: International Space Station
```

Если оператор ввёл только одну локаль — остальные пусты, при чтении в
другой локали покажется fallback на язык по умолчанию словаря (обычно
`ru` для ЦУОД).

### FK-поля (ссылки)

Поля с `x-references` отображаются как выпадающий список. Например, у
`spacecraft` поле `type` ссылается на `satellite_type.code` — оператор
выбирает значение из готового списка типов. Если нужный тип отсутствует —
сначала добавь его в справочник `satellite_type`, потом возвращайся.

## Редактировать запись

1. Клик по записи в списке → открывается боковая панель (drawer)
2. Меняешь нужные поля, **«Сохранить»**
3. Новая версия записи создаётся; **предыдущая остаётся в истории**
   (см. [bitemporal модель](../integration/api/bitemporal.md))

История версий доступна:
- В drawer'е — кнопка **«История версий»**
- В timeline-режиме (`TimeTravel`) — слайдер по датам

### Что нельзя редактировать

- **Бизнес-ключ** — фиксирован с момента создания. Если ошибся — нужно
  закрыть запись (см. [Закрытие записи](close-record.md)) и создать новую.
- **Схему** — общая для всех записей справочника, меняется только через
  [schema draft](../reviewer/schema-drafts.md).

## Поиск и фильтрация

В каталоге справочника — toolbar поиска и фильтров:

- **Поиск по тексту** — ищет по бизнес-ключу и локализованным полям
- **Только заполненные** — toggle, скрывает записи где конкретное поле пустое
- **Период** — фильтр по `valid_from` / `valid_to`
- **Scope** — фильтр по уровню доступа (для администраторов)

### Глобальный поиск

В шапке (TopBar) — `⌘K` / `Ctrl+K` — поиск через все справочники по
бизнес-ключу или фрагменту названия.

## Bulk-операции

Сейчас bulk import / export — **только через API** ([интеграционный гайд](../integration/api/index.md)).
В UI массовых операций пока нет — добавятся в будущих версиях по запросам
от операторов.

## Что произойдёт при сохранении

- В БД добавляется новая версия записи
- В Kafka-топик публикуется событие `RecordCreated` или `RecordUpdated`
  (потребители — Альтум, геопортал, BI — узнают об изменении в течение
  секунд)
- В audit log пишется кто изменил, когда, что было до и после
- Если справочник имеет включённую Redis-проекцию — кэш обновляется
  автоматически

## Типичные ошибки

См. [Разбор ошибок](errors.md). Самые частые:

- **«Бизнес-ключ уже существует»** (409) — попробуй другой `code` или
  проверь, не закрыта ли существующая запись (фильтр истории)
- **«Поле X обязательно»** (422) — посмотри `required` в схеме
- **«FK не найден»** (422) — значение `x-references` указывает на запись,
  которой нет; добавь в referenced справочник
- **«Период действия пересекается»** (409) — для bitemporal: нельзя
  иметь две активные версии одной записи в один момент. См.
  [Закрытие записи](close-record.md).
