> ## Documentation Index
> Fetch the complete documentation index at: https://faq.exode.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Редактирование сертификата

> Изменение шаблона, фирменного цвета и переменные, из которых собирается сертификат.

Настройки сертификата редактируются на той же странице курса, что и при создании (раздел «Сертификаты», `ManageCourseCertificatesPage`). Изменения затрагивают только будущие выдачи — уже выданные сертификаты остаются неизменными, потому что строятся из снимка данных, сделанного в момент выдачи.

<Warning>
  Отредактировать уже выданный сертификат нельзя. Если в данных ошибка, сертификат отзывается и выдаётся заново — редактирование действующих документов не предусмотрено (принцип неизменяемости).
</Warning>

## Что можно изменить

| Настройка      | Поле                | Эффект                       |
| -------------- | ------------------- | ---------------------------- |
| Дизайн         | `templateId`        | Смена оформления сертификата |
| Срок действия  | `expireInMonths`    | Новый срок для будущих выдач |
| Фирменный цвет | `brandColor`        | Акцентный цвет оформления    |
| Подпись        | `signatureImageUrl` | Изображение подписи          |
| Печать         | `stampImageUrl`     | Изображение печати           |

## Фирменный цвет (brandColor)

Поле «Фирменный цвет» задаётся через компонент выбора цвета (`ColorPicker`) и хранится как HEX-строка. Цвет используется шаблоном как акцентный. На стороне backend значение валидируется как корректный HEX.

<img src="https://mintlify.s3.us-west-1.amazonaws.com/exode-faq/images/online-schools/gamification/certificate-brand-color.png" alt="Выбор фирменного цвета сертификата" />

## Переменные шаблона

Сертификат собирается из снимка данных (`snapshot`) — словаря «переменная → значение». Ключи снимка соответствуют плейсхолдерам `{{...}}` в HTML-шаблоне. Пустые необязательные значения не записываются, а соответствующие блоки шаблона скрываются через `{{#if}}`.

| Переменная          | Что содержит                 | Обязательна |
| ------------------- | ---------------------------- | ----------- |
| `recipientName`     | Имя ученика на момент выдачи | Да          |
| `courseName`        | Название курса               | Да          |
| `lessonsCount`      | Количество уроков в курсе    | Да          |
| `brandName`         | Название школы               | Да          |
| `curatorName`       | Имя куратора                 | Нет         |
| `curatorRole`       | Роль куратора                | Нет         |
| `brandColor`        | Фирменный цвет (HEX)         | Нет         |
| `logoImageUrl`      | Логотип школы                | Нет         |
| `signatureImageUrl` | Изображение подписи          | Нет         |
| `stampImageUrl`     | Изображение печати           | Нет         |

Выводимые значения в снимке не хранятся — они вычисляются при отображении: даты форматируются из `issuedAt` / `expireAt`, ссылка проверки и QR-код строятся из `uuid`, номер сертификата — это его `id`.

Пример фрагмента снимка:

```json theme={null}
{
  "recipientName": "Иван Петров",
  "courseName": "Основы веб-разработки",
  "lessonsCount": 24,
  "brandName": "Моя школа",
  "brandColor": "#4570CA",
  "signatureImageUrl": "https://storage.exode.ru/...",
  "stampImageUrl": "https://storage.exode.ru/..."
}
```

<Tip>
  Словарь переменных свободный: будущие кастомные шаблоны школ смогут использовать дополнительные плейсхолдеры без изменения структуры базы данных.
</Tip>
