---
name: xbsl-file-add
description: >
  Добавление файловых вложений (компонент СписокФайлов) к существующему объекту конфигурации 1С:Элемент.
  Поддерживает 4 паттерна: P1 — стандартные вложения через встроенный реквизит Файлы (новых реквизитов нет);
  P2 — одиночный файл (ДвоичныйОбъект.Ссылка?, макс. 1); P3 — категория файлов
  (Массив<ДвоичныйОбъект.Ссылка> с лимитами и фильтрами); P4 — несколько категорий (несколько P3).
  Вызывай когда пользователь хочет добавить вложения, загрузку файлов, скан договора, логотип,
  прикреплённые документы к справочнику или документу.
  НЕ для работы с изображениями (используй xbsl-image-add).
compatibility:
  runtime:
    - python3
---

## Алгоритм

### Шаг 1 — Определить паттерн (P1–P4)

Прочитай `references/patterns.md` и выбери паттерн по описанию пользователя:

| Паттерн | Реквизит | Когда |
|---------|----------|-------|
| **P1** | встроенный `Файлы` | произвольные вложения без ограничений по типу/количеству |
| **P2** | `ДвоичныйОбъект.Ссылка?` | ровно один файл (скан, логотип, один обязательный документ) |
| **P3** | `Массив<ДвоичныйОбъект.Ссылка>` | именованная категория файлов с лимитами и/или фильтром |
| **P4** | несколько реквизитов P3 | объект с несколькими категориями документов |

### Шаг 2 — Анализ объекта (параллельно с шагом 1)

Вызови скилл **xbsl-form-info**:

```bash
python3 .claude/skills/xbsl-form-info/scripts/form_info.py --name <ИмяОбъекта> --root .
```

Используй результат:
- `object_path` — путь к папке подсистемы
- `object_file` — имя YAML-файла объекта (`object_path/object_file`)
- `fields` — проверь конфликт имён реквизитов (для P2–P4)
- `existing_forms` — найди YAML форм для шага 5

Если скрипт вернул `error` — сообщи пользователю и остановись.

### Шаг 3 — UUID

- **P1**: UUID не нужен
- **P2 или P3**: вызови скилл `xbsl-uuid` → 1 UUID
- **P4**: вызови скилл `xbsl-uuid` → N UUID (по количеству новых реквизитов)

### Шаг 4 — Обновить YAML объекта (только P2–P4)

Открой `object_path/object_file`. Добавь новые реквизиты в конец секции `Реквизиты`.

Шаблоны из `references/patterns.md`:
- **P2**: реквизит `ДвоичныйОбъект.Ссылка?`
- **P3**: реквизит `Массив<ДвоичныйОбъект.Ссылка>`
- **P4**: несколько реквизитов P3

Для **P1** шаг 4 пропустить — реквизит `Файлы` уже присутствует в объекте.

### Шаг 5 — Обновить форму

Найди YAML-файл формы из `existing_forms["ФормаОбъекта"]`.

**Если форма не найдена**: сообщи пользователю и предложи сначала вызвать скилл `xbsl-form-add`.

**Если форма найдена**: добавь компонент `СписокФайлов` по шаблону из `references/patterns.md`.
Место вставки — в конец `Содержимое` формы (после последнего поля/группы, перед закрытием блока).

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

Перечисли изменённые файлы:
- P1: только файл формы
- P2–P4: файл объекта + файл формы
