# AI-отчёт и оформление

## AI-отчёт, сохранённые фильтры и оформление

AI-отчёт требует тарифной опции AI-отчётов и права участника **`view_results`**:
он строится по ответам респондентов. Плюс тарифный лимит — сколько разных
опросов аккаунта могут иметь AI-отчёт; у опроса с уже собранным отчётом место
занято, и перезапуск лимита не касается.

---

### 72. Запустить сборку AI-отчёта

*Метод в API с 2026-09-08.*

Сборка идёт в фоне и стоит денег, поэтому запуск и чтение разделены.

**HTTP:** `POST /quiz/{id}/ai-report`

| Поле | Тип | Описание |
|---|---|---|
| `section` | string | `all` (по умолчанию), `text`, `comparative`, `quantitative`. |
| `locale` | string | Язык отчёта. По умолчанию язык интерфейса владельца ключа. |

```json
{"status": true, "quiz_id": 18547, "queued": ["text"], "already_running": ["comparative"], "refused": {}}
```

`refused` — разделы, которые сборку не приняли, с причиной. Принудительного
перезапуска в API нет: в кабинете он только для админов и обходит задержку,
которая защищает от лишних трат.

Лимит исчерпан — `403` с кодом `ai_report_limit_reached`, признаком
`blocked_by_tariff: true` и полями `used` и `limit`.

Ни один раздел не встал в очередь — `400` с кодом `ai_report_refused` и полем
`refused`: причины перечислены там же.

---

### 73. Готовый AI-отчёт

*Метод в API с 2026-09-08.*

**HTTP:** `GET /quiz/{id}/ai-report`

---

### 74. Публичная ссылка на AI-отчёт

*Метод в API с 2026-09-08.*

**HTTP:** `POST /quiz/{id}/ai-report/share`

Отчёт ещё не собран — `400` с кодом `report_not_ready`. Тариф без публичных
ссылок — `403` с `blocked_by_tariff`.

---

### 75. Сохранить набор фильтров

*Метод в API с 2026-09-08.*

Требует право **`view_results`**.

**HTTP:** `POST /quiz/{id}/filters`

| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| `type` | string | Да | `answers` — для списка ответов, `report` — для отчёта. |
| `filters` | array | Да | Набор фильтров. |

В ответе — актуальный список сохранённых наборов этого типа.

---

### 76. Оформление отчётов аккаунта

*Метод в API с 2026-09-08.*

Цвета, шрифт и подписи — настройка **аккаунта**: действует сразу на все его
отчёты и PDF.

**HTTP:** `GET /workspace/{workspace_id}/report-appearance`

```json
{
    "status": true,
    "report_appearance_default": null,
    "presets": [...],
    "defaults": {...},
    "row_options_defaults": {...},
    "allowed": {"palette_id": [...], "bar_color_mode": ["single", "palette"],
                "custom_colors_min": 2, "custom_colors_max": 14, "font_family_max": 64,
                "sort_mode": [...], "value_format": [...]}
}
```

`report_appearance_default: null` означает «общая палитра не настроена»: опросы с
включённым флагом показывают стандартный вид. `allowed` избавляет от угадывания.

Оговорка: `allowed.sort_mode` и `allowed.value_format` — это допустимые значения
на стороне отчёта, но запись палитры (метод 77) их **не принимает**; они
задаются у самого опроса. Остальные ключи `allowed` совпадают с полями записи.

---

### 77. Изменить палитру отчётов

*Метод в API с 2026-09-08.*

**HTTP:** `POST /workspace/{workspace_id}/report-appearance`

Требует право **`account_quiz_settings`**: палитра общая для всех отчётов и PDF
аккаунта. Без права — `403` с `blocked_by_access: true`.

| Поле | Тип | Описание |
|---|---|---|
| `settings.palette_id` | string | Готовая палитра из `allowed.palette_id`. |
| `settings.custom_colors` | array | Свои цвета, каждый в виде `#RRGGBB`, от 2 до 14. |
| `settings.bar_color_mode` | string | `single` или `palette`. |
| `settings.font_family` | string\|null | До 64 символов. |
| `settings.show_value_labels` | boolean | Подписи значений. |
| `settings.show_grid_lines` | boolean | Линии сетки. |

---

### 78. Наборы оформления

*Метод в API с 2026-09-08.*

| Действие | HTTP |
|---|---|
| Создать | `POST /workspace/{workspace_id}/report-appearance/presets` с полями `name` и `settings` |
| Удалить | `DELETE /workspace/{workspace_id}/report-appearance/presets/{presetId}` |

Набор чужого аккаунта не удалится: отбор идёт по аккаунту.

---