---
name: xbsl-form-dashboard
description: >
  Создаёт главную страницу приложения 1С:Элемент (КомпонентИнтерфейса типа Форма)
  с виджетами СтандартнаяКарточка: KPI-счётчики, навигационные карточки, таблицы
  данных, баннеры, диаграммы, карусели и бенто-сетки. Генерирует два файла:
  ГлавнаяСтраница.yaml и ГлавнаяСтраница.xbsl с обработчиком ПослеСоздания.
  Вызывай когда пользователь хочет создать главную страницу, дашборд, стартовый
  экран приложения или лендинг с карточками.
compatibility:
  runtime:
    - python3
---

## Отличие от других скиллов форм

`xbsl-form-add` и `xbsl-form-cards` создают формы для конкретного объекта
(Справочника, Документа). Этот скилл создаёт **независимую** форму типа `Форма`
без привязки к объекту — главную страницу с виджетами и динамическими данными.

---

## Алгоритм

### Шаг 0 — Определить виджеты

Из запроса пользователя выделить список виджетов. Сопоставить с паттернами P1–P9:

| Паттерн | Когда применять |
|---------|----------------|
| P1 KPI | «счётчик», «количество», «итого», динамическое число |
| P2 Навигация | «ссылка на раздел», «перейти», «открыть список» |
| P3 Таблица | «список последних», «таблица», «курсы», данные массивом |
| P4 Баннер | «баннер», «заглавный блок», «картинка с текстом» |
| P5 Диаграмма | «воронка», «диаграмма», «круговая», «аналитика» |
| P6 Карусель | «карусель», «слайдер», «прокрутка», «отзывы» |
| P7 Бенто | «плитка», «категории», «bento», сетка разного размера |
| P8 Поиск | «поиск», «поисковая строка», «фильтр» |
| P9 Статика | «преимущества», «возможности», без динамических данных |

Уточнить:
- Имя формы (по умолчанию `ГлавнаяСтраница`)
- Подсистема (если явно не указана — найдёт xbsl-explore)

### Шаг 1 — Разведка

```bash
python3 .claude/skills/xbsl-explore/scripts/explore.py \
    --type КомпонентИнтерфейса --name <ИмяФормы> --root <корень>
```

- `suggested_path` — куда создавать файлы
- `conflict` — если форма уже существует, спросить: **Заменить** или **Отмена**

### Шаг 2 — Загрузить спецификацию

Читать файлы из `references/` выборочно — только нужные для конкретного запроса.

**Всегда читать (3 файла):**
- `references/базовая-структура.md` — YAML-скелет и правила компоновки
- `references/критические-правила.md` — правила из тестирования (кавычки, SVG, видимость и др.)
- `references/регистрация.md` — как подключить форму к навигации

**По паттернам из Шага 0:**
- P1 → `references/p1-kpi.md`
- P2 → `references/p2-навигация.md`
- P3 → `references/p3-таблица.md`
- P4 → `references/p4-баннер.md`
- P5 → `references/p5-диаграмма.md`
- P6 → `references/p6-карусель.md`
- P7 → `references/p7-бенто.md`
- P8 → `references/p8-поиск.md`
- P9 → `references/p9-статика.md`

**Дополнительно:**
- Если есть P4 или упоминание кастомных цветов/шрифтов → `references/стилизация.md`
- Если есть P1, P2, P3 или P5 (динамические данные) → `references/xbsl-шаблон.md`

### Шаг 3 — Сгенерировать UUID

```bash
python3 -c "import uuid; print(str(uuid.uuid4()))"
```

### Шаг 4 — Создать `<ИмяФормы>.yaml`

По базовой структуре из reference + карточки из шага 0.

**Обязательные правила:**
- `ВидЭлемента: КомпонентИнтерфейса`
- `ОбластьВидимости: ВПодсистеме`
- `Наследует.Тип: Форма`
- `ВключатьВАвтоИнтерфейс: Ложь` — **всегда**
- `ПовторноеИспользованиеФормы: Истина` — **всегда** (для производительности)
- `Импорт:` — добавить все подсистемы, из которых берутся данные
- KPI-компоненты (Надписи со значениями) должны иметь уникальные `Имя:` — они обновляются из .xbsl

### Шаг 4.5 — Проверить видимость целевых форм (если есть навигация)

Если в виджетах P2 или P7 есть переходы в формы из других подсистем — перед написанием
обработчиков проверить `ОбластьВидимости` каждой целевой формы:

```bash
grep "ОбластьВидимости" <путь>/<Подсистема>/<ФормаСписка>.yaml
```

- `ВПроекте` — доступна, всё хорошо
- `ВПодсистеме` — **исправить на `ВПроекте`** до генерации, иначе ошибка компиляции:
  `Variable "ХххФормаСписка" is not defined`

### Шаг 5 — Создать `<ИмяФормы>.xbsl`

Создать только если есть виджеты с динамическими данными (P1, P3, P5) или
обработчиками навигации (P2, P7). Для чисто статических страниц (только P4, P6, P7, P9) —
.xbsl не нужен.

Шаблон файла смотри в `references/xbsl-шаблон.md`.

### Шаг 6 — Итог и инструкции по регистрации

Перечислить созданные файлы. Вывести важное напоминание:

> Форма **не появится** в приложении автоматически. Нужно зарегистрировать её в навигации.
>
> **Важно:** для `Тип: Форма` нет автокоманды `=ГлавнаяСтраница.Открыть` — только `НавигационнаяКоманда` с `ТипФормы`.
>
> 1. Проверить: есть ли в проекте `КомпонентИнтерфейса` с `Тип: СтандартноеКлиентскоеПриложениеСРазделами`
>    - Если **нет** (авто-навигация) — создать `Приложение.yaml` с `КомандныйИнтерфейсПанелиНавигации`
>    - Если **есть** — добавить `НавигационнаяКоманда ТипФормы: <ИмяФормы>` в его навигацию
>
> ```yaml
> # В КомандныйИнтерфейсПанелиНавигации первым элементом:
> -
>     Тип: НавигационнаяКоманда
>     Представление: Главная
>     Изображение: Плюс.svg
>     ТипФормы: <ИмяФормы>
> ```
>
> Подробный шаблон `Приложение.yaml` — в `references/регистрация.md`.
