---
name: xbsl-meta-add
description: >
  Создание объекта конфигурации в 1С:Элемент (XBSL). Используй этот скилл когда
  пользователь хочет создать новый объект метаданных в проекте
---

# Создание объекта конфигурации в 1С:Элемент

## HttpСервис — быстрый путь

Если тип объекта `HttpСервис` — используй скрипт вместо шагов 1–4:

### Шаг 1 — Dry-run

```bash
python3 .claude/skills/xbsl-meta-add/scripts/generate_http.py \
  --name <ИмяСервиса> \
  --url /api/<ресурс> \
  --routes "GET /, POST /, GET /{id}" \
  --root <корень>
```

Опциональные флаги:
- `--subsystem <ИмяПодсистемы>` — если нужно выбрать конкретную подсистему
- `--access РазрешеноАутентифицированным` — контроль доступа (по умолчанию `РазрешеноВсем`)

Показать вывод пользователю. Если `⚠️  Сервис уже существует` — спросить: заменить или отмена.
Если скрипт завершился с ошибкой — сообщи пользователю и остановись.

### Шаг 2 — Применить (только после подтверждения)

```bash
python3 .claude/skills/xbsl-meta-add/scripts/generate_http.py \
  --name <ИмяСервиса> --url /api/<ресурс> --routes "..." --root <корень> --apply
```

### Шаг 3 — Итог

Перечислить созданные файлы из вывода скрипта:
- `<ИмяСервиса>.yaml` — объект HttpСервис с маршрутами
- `<ИмяСервиса>.xbsl` — заготовки обработчиков

---

## Добавление маршрутов в существующий сервис

Если пользователь хочет добавить endpoint в уже существующий HttpСервис:

### Шаг 1 — Dry-run

```bash
python3 .claude/skills/xbsl-meta-add/scripts/generate_http.py \
  --service <ИмяСервиса> \
  --add-routes "DELETE /{id}, GET /{id}/items" \
  --root <корень>
```

Показать вывод пользователю. Если `⚠️  обработчик уже существует` — он будет пропущен.

### Шаг 2 — Применить

```bash
python3 .claude/skills/xbsl-meta-add/scripts/generate_http.py \
  --service <ИмяСервиса> --add-routes "..." --root <корень> --apply
```

### Шаг 3 — Итог

- `<ИмяСервиса>.yaml` — добавлены новые `ШаблоныUrl`
- `<ИмяСервиса>.xbsl` — добавлены новые методы-обработчики

---

## Все остальные типы объектов

## Шаг 0: Определи тип объекта

Из запроса пользователя определи `ВидЭлемента`:

| ВидЭлемента | Когда использовать |
|---|---|
| `Перечисление` | Фиксированный набор значений (статусы, приоритеты, виды) |
| `Справочник` | Хранилище записей (сотрудники, контрагенты, товары) |
| `Документ` | Бизнес-событие с историей (заказы, накладные, акты) |
| `РегистрСведений` | Срезы данных по измерениям (курсы валют, цены) |
| `РегистрНакопления` | Обороты или остатки (продажи, складские остатки) |
| `ОбщийМодуль` | Переиспользуемый код (утилиты, сервисы) |
| `Структура` | DTO / value object (данные для передачи между методами) |
| `ЛокализованныеСтроки` | Тексты интерфейса (один объект на подсистему) |
| `HttpСервис` | REST API (эндпоинты для внешних систем) |
| `ГлобальноеКлиентскоеСобытие` | Событие между подсистемами (оповещение об изменении) |
| `КлючДоступа` | Маркер прав доступа (роль, владелец) |
| `Отчет` | Аналитический отчёт с визуализацией (остатки, продажи, анализ данных) |

## Шаги 1 и 2: выполни параллельно

**Шаг 1 — Загрузи спецификацию.** Прочитай файл спецификации для нужного типа:

```
references/{ТипОбъекта}.md
```

Для объектов с реквизитами (Справочник, Документ, РегистрСведений, РегистрНакопления) дополнительно прочитай `references/types.md`.

Для `Отчет` — читай `references/Отчет.md`; если есть `ПараметрыЗапроса` — дополнительно прочитай `references/types.md`.

Если в запросе упоминаются табличные части (ТЧ, строки, таблица, колонки) — дополнительно прочитай `references/ТабличныеЧасти.md`.

**Шаг 2 — Разведка проекта.** Используй скилл `xbsl-explore`, передав тип объекта и имя (если известно из запроса).

Если `xbsl-explore` вернул пустой список `projects` — **остановись** и предложи пользователю сначала создать проект через скилл `xbsl-init`, затем повторить запрос.

## Шаг 3: Сгенерируй UUID

Из спецификации узнай, сколько UUID нужно (1 на объект + по 1 на каждый реквизит/элемент/измерение/ресурс). Посчитай точное количество и вызови скилл `xbsl-uuid` с этим числом.

## Шаг 3а: Проверь межподсистемные ссылки

Для каждого ссылочного реквизита (`<Имя>.Ссылка?`) из запроса определи подсистему объекта-источника.

**Как определить подсистему источника:**
- Из результатов `xbsl-explore` (шаг 2) извлеки корень проекта
- Найди файл `<Имя>.yaml` в дереве проекта: `<root>/**/<Имя>.yaml`
- Имя папки-родителя этого файла — подсистема Y источника
- Имя папки из `suggested_path` нового объекта — подсистема X

**Если подсистема Y источника отличается от подсистемы X нового объекта:**

| Файл | Действие |
|------|----------|
| `<ПодсистемаY>/<Источник>.yaml` | Прочитай. Если `ОбластьВидимости: ВПодсистеме` — изменить на `ВПроекте` |
| `<ПодсистемаX>/Подсистема.yaml` | Добавить `Y` в список `Использование` (если Y ещё не в списке) |
| Новый объект (создаётся в Шаге 4) | Включить поле `Импорт: [Y]` (объединить все внешние подсистемы одним списком) |

Для каждого изменённого существующего файла кратко сообщи пользователю:
- «Обновлён `ОбластьВидимости` → `ВПроекте` в `Основное/Склады.yaml`»
- «Добавлено `Использование: [Основное]` в `Закупки/Подсистема.yaml`»

Если объект-источник не найден в проекте — действуй по текущему правилу (ставь `Тип: Строка`, предупреди пользователя).

## Шаг 4: Создай файлы

- Создай `{ИмяОбъекта}.yaml` по структуре из спецификации, в `suggested_path` из разведки
- Создай `{ИмяОбъекта}.xbsl` только если пользователь явно запросил методы

## Шаг 5: Движения по регистру (только для Документа)

Если создаётся `Документ` **и** пользователь упоминает движения, регистр накопления, регистр сведений, приход, расход, списание, поступление, проведение — после создания `.yaml` вызови скилл `xbsl-pattern-register`.

Скилл напишет код в файл `<ИмяДокумента>.Объект.xbsl` (не `.xbsl`). Без суффикса `.Объект` платформа не привяжет код к объекту.
