# Подписи

> **⚠️ «Подпись» — омоним: approval vs cryptographic signature.** В 1Форме «подпись» в первую очередь означает **approval / sign-off** (согласование/утверждение на переходе маршрута), а не криптографическую электронную подпись. Криптоподпись (ЭЦП, Cryptopro/CryptoCOM) — отдельная интеграция ([КриптоПро УЦ 2.0 — техническая документация](https://help.1forma.ru/domains/signatures/cryptopro-ca.md)). Если во внешней системе речь о «signature» в смысле согласования — это механизм подписей; если о e-signature — см. раздел ЭЦП.

Документ описывает бизнес-логику подписей в 1Форме (approval / sign-off mechanism): классификацию, настройки подписи, алгоритмы определения акцептантов (approvers), резолюции (approval decisions) и маршруты согласования (approval workflows). Внутри описаны статические и динамические подписи, должностные и личные подписи, делегирование, эскалация, замещение акцептанта, отзыв подписей, журнал подписей и список активных подписей. Документ также фиксирует ЭЦП, дополнительные настройки категории, интеграцию со смарт-автоматизацией и рекомендации по проектированию маршрута согласования.

## Обзор

Подпись в 1Форме — механизм фиксации согласия или решения пользователя по задаче. Подпись удостоверяет, что документ утвержден, заявка принята к исполнению или иное решение вынесено уполномоченным лицом. Пользователь, выносящий решение, называется **акцептантом**. Акцептантом может быть назначен конкретный пользователь или группа (тогда подпись ставит любой представитель группы).

Подписи запрашиваются при переходе задачи между статусами. Задача переходит в новый статус только после получения всех обязательных подписей. В момент подписания система автоматически создаёт цифровой снимок (snapshot) задачи — копию всех данных (ДП, файлы и прочее), что гарантирует невозможность изменения данных после подписания.

Подпись считается **активной**, пока ожидает резолюции акцептанта.

## Классификация подписей

Подписи делятся по двум признакам: по способу запроса (автоматически или вручную) и по типу акцептанта (конкретный человек или должность).

### Статические и динамические

**Статические подписи** настраиваются на конкретном переходе между статусами в режиме администрирования. Они всегда запрашиваются в одной и той же точке маршрута. Это основной инструмент автоматизированного согласования бизнес-процессов.

**Динамические подписи** запрашиваются пользователями вручную из карточки задачи в любом нетерминальном статусе. Они используются для оперативного согласования вопросов, возникающих по ходу работы. Динамическая подпись приостанавливает продвижение задачи по маршруту, но при обработке не выполняет переход в другой статус.

Одна и та же подпись может использоваться и как статическая, и как динамическая, если в её настройках включен параметр "Может быть динамической".

### Должностные и личные

**Личная подпись** запрашивается у конкретного сотрудника. В системе для этого используется специальная подпись, указанная в Общих настройках приложения (параметр "Подпись пользователя"). Эта подпись должна иметь включенный флаг "Может быть динамической".

**Должностная подпись** запрашивается у сотрудника определенной должности, группы или оргединицы. Конкретный акцептант вычисляется по алгоритму в момент запроса подписи. Должностные и личные подписи запрашиваются на разных вкладках в пользовательском интерфейсе.

### Запрос динамической подписи из карточки задачи

Динамическая подпись запрашивается из карточки задачи. В окне запроса два режима: личный и по должности.

В режиме по должности пользователь выбирает шаблон подписи. Список допустимых адресатов строится только из акцептантов выбранного шаблона — выбрать пользователя вне этого списка нельзя. Если срок не указан явно, берётся срок шаблона: минимальный, а при его отсутствии — срок по умолчанию; когда в шаблоне нет ни того, ни другого, для должностной подписи предлагается 2 часа.

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

В личном режиме адресатов выбирают напрямую, без шаблона; поведение личного режима этим не меняется.

## Настройки подписи

Каждая подпись имеет набор параметров, организованных в несколько блоков.

### Блок "Основное"

Основные параметры определяют идентификатор подписи, её название, привязку к модулю и поведение при повторных запросах и эскалациях.

| Параметр | Назначение |
|---|---|
| ID | Уникальный номер, присваивается автоматически |
| Название подписи | Отображается на карточках задач. Поддерживает мультиязычность |
| Модуль | Привязка к модулю; без модуля — глобальная подпись |
| Не запрашивать повторно | Однократный запрос: если подпись была получена, при повторении цикла новый запрос не создается |
| Добавлять в подписчики акцептанта | Акцептант и заместители автоматически становятся подписчиками задачи |
| Запрашивать комментарий при подписании | При вынесении резолюции открывается окно «Требуется комментарий» — ввод обязателен. Введённый акцептантом текст сохраняется в ленте задачи как комментарий от его имени и записывается в поле «Причина запроса» обрабатываемой подписи. Настройка может быть глобальной на самой подписи или индивидуальной на конкретном переходе |
| Можно эскалировать | Доступность кнопки "Эскалировать" — удаление подписи и запрос подписи начальника |
| Не слать ошибку, если акцепт не указан | Подавление уведомления на системный почтовый ящик при пустом списке акцептантов |
| Запретить акцептовать если в документах есть правки от текущего пользователя | Блокировка резолюции, если пользователь вносил правки в файлы задачи или ДП "Файл" (не распространяется на скрытые ДП) |

**Блок "Подпись начальника"**

Определяет подпись, которая запрашивается при эскалации. Параметр "Добавлять акцептантов подписи начальника" включает акцептантов подписи руководителя в подписчики задачи.

### Блок "Срок"

Параметры срока задают временные ограничения на обработку подписи: минимально допустимый, рекомендуемый и обязательность его указания.

| Параметр | Назначение |
|---|---|
| Минимальное время на подписание | Нижний порог: при запросе нельзя указать меньше. Задается в часах, минутах или днях |
| Время на подписание по умолчанию | Рекомендуемый срок обработки подписи |
| Срок обязателен | Обязательность указания срока при запросе |
| Срок можно менять | Возможность корректировки срока уже запрошенной подписи |

**Единица «день» — рабочий день (с 2.268.341).** Когда срок задаётся в днях, значение переводится в минуты через системную настройку `workTimeSettings.workMinutesInDay` (стандартно 8 рабочих часов = 480 минут). То есть «1 день» в поле срока — это 1 рабочий день, а не календарные 24 часа: рантайм считает срок через `AddWorkingMinutesToDate`. Правило одинаково и для настроек самой подписи, и для подписи на переходе маршрута (обе формы используют общий хелпер `signature-time.helpers.ts`).

Приоритет сроков: срок на переходе (если задан) имеет приоритет над сроком по умолчанию из настроек подписи. Срок на переходе не может быть меньше минимального.


Если в настройках подписи параметр «Срок можно менять» отключён, срок запрошенной подписи заблокирован для всех категорий и настройки блокировки на переходе на него не влияют.

### Блок "Динамическая подпись"

Параметры этого блока разрешают использование подписи в динамическом режиме и определяют базовый пользователь для алгоритма выбора акцептанта.

| Параметр | Назначение |
|---|---|
| Может быть динамической | Разрешение использования подписи в качестве динамической |
| Акцептант определяется по | Базовый пользователь для алгоритма: по заказчику, по исполнителю, по ответственному исполнителю, по запросившему, по смарт-выражению |
| При отклонении | Действие при отклонении: прервать согласование / ожидать решения всех / продолжить согласование |
| Причина запроса для динамической подписи обязательна | Обязательное обоснование при запросе |

**Вкладка "Используется"**

Отображает все категории, в которых данная подпись настроена хотя бы на одном переходе. Для каждой записи видны: категория, исходный статус, целевой статус, обязательность подписи, алгоритм определения акцептантов, кнопка перехода.

## Алгоритмы определения акцептантов

Система поддерживает шесть алгоритмов определения акцептанта. Каждый может рассчитываться относительно заказчика, исполнителя, ответственного исполнителя, запросившего или по смарт-выражению (параметр "Акцептант определяется по").

Если алгоритм определяет нескольких акцептантов для одной подписи, резолюция любого из них считается общим решением (если не включен режим "Каждому акцептанту отдельную копию").

**По группам**

Строится таблица соответствий "группа — акцептант(ы)". Система определяет, в какие группы входит базовый пользователь, и запрашивает подписи у соответствующих акцептантов. Если пользователь состоит в нескольких группах из таблицы, запрашиваются подписи у акцептантов всех совпавших групп. Для фиксированного списка акцептантов достаточно привязать группу Users (содержит всех пользователей).

**По параметру (ДП)**

Акцептант определяется по значению дополнительного параметра (ДП) в конкретной задаче. Настраивается таблица соответствий "значение ДП — акцептант". При совпадении запрашивается подпись соответствующего акцептанта. При отсутствии совпадения используется акцептант по умолчанию (поле "Кому"). Таблица может формироваться вручную. Подходит для случаев, когда будущий сотрудник еще не имеет учетной записи (HR-процессы).

**По руководителю**

Акцептантом назначается руководитель базового пользователя. Параметр "Ступень руководителя" задает смещение от непосредственного руководителя: 0 — непосредственный (линейный) руководитель; 1 — руководитель непосредственного руководителя; 2 — на два уровня выше и т.д. (ступень N — уровень N + 1 оргструктуры). Подпись запрашивается ровно у руководителей указанного уровня — одного яруса, а не у всей цепочки до него. Если руководителя нужного уровня в оргструктуре нет (заданная ступень выше её глубины), подпись запрашивается у руководителей верхнего доступного яруса. Если у пользователя нет ни одного руководителя, подпись создается без акцептантов. Если у пользователя несколько руководителей в оргединице, запрашивается одна подпись со всеми ими как акцептантами (или отдельные подписи при включенной опции "Каждому акцептанту отдельную копию").

Если базовый пользователь сам занимает руководящую должность в подразделении, другие руководители этого же подразделения считаются его коллегами по горизонтали и в акцептанты не попадают — подпись уходит выше. То же правило действует для алгоритмов «По уровню оргструктуры» и «По типу оргструктуры». Когда пользователь состоит в нескольких оргединицах, акцептанты собираются по каждой из них: ступень отсчитывается внутри оргединицы, а результаты объединяются.

**По смарт-выражению**

Акцептанты вычисляются смарт-выражением.

**По уровню оргструктуры**

Акцептант — руководитель оргединицы указанного уровня (1 — компания, 2 — департамент и т.д.) в ветке иерархии базового пользователя. Уровень берется из справочника типов оргструктур. Если на нужном уровне руководитель отсутствует, выбирается ближайший вышестоящий.

**По типу оргструктуры**

Акцептант — руководитель оргединицы более высокого уровня относительно уровня базового пользователя. Уровень определяется по справочнику типов оргструктур.

## Резолюции

Резолюция — решение, которое акцептант выносит по запрошенной подписи. Резолюции отображаются в виде кнопок в интерфейсе.

### Типы действий

Каждая резолюция привязана к одному из шести действий:

| Действие | Результат |
|---|---|
| **Подписать** | Подпись обработана успешно, задача может двигаться дальше по маршруту |
| **Отклонить** | Подпись отклонена, задача остается в текущем статусе (или переходит в указанный) |
| **Удалить** | Подпись удаляется, задача движется дальше по маршруту |
| **Эскалировать** | Подпись передается руководителю текущего акцептанта |
| **Делегировать** | Акцептантом становится другой пользователь |
| **Отозвать согласование** | Подпись удаляется, задача остается в текущем статусе |

**Обязательность причины при отклонении.** При выборе действия «Отклонить» диалог ввода причины открывается всегда — чтобы у акцептанта была возможность оставить комментарий к решению. Обязательность поля «Комментарий к резолюции» определяется настройкой «Причина обязательна» у данного типа резолюции:

- **Флаг включён** — поле помечено звёздочкой `*`, кнопка «ОК» заблокирована до ввода непустого текста (пробельные символы не считаются).
- **Флаг выключен** — поле без звёздочки, кнопка «ОК» активна при пустом поле, резолюция выносится без комментария.

Поведение одинаково в карточке задачи, мобильной версии, гриде подписей и гриде подписей подзадач.

**Проверка на сервере.** Кнопка «ОК» блокируется на клиенте, но резолюция дополнительно проверяется на сервере: если комментарий к резолюции не проходит проверку (пустой, из одних пробелов или короче минимальной длины), подпись не обрабатывается, а пользователю возвращается сообщение «Пожалуйста, заполните комментарий к резолюции», на английском интерфейсе — Please write the resolution comment. Проверка касается только текста, который вводит подписант: заданная инициатором причина запроса подписи при этом не запрашивается и не проверяется. Раньше сервер отвечал на это «Пожалуйста, заполните причину» — тем же текстом, которым называется причина запроса подписи, из-за чего было неясно, какое поле имеется в виду.

**Как называются поля.** Поле, которое заполняет подписант при вынесении резолюции, называется «Комментарий к резолюции»; настройка обязательности при этом сохраняет имя «Причина обязательна». Текст, указанный инициатором при запросе подписи, называется «Причина запроса» — так названы поле в форме запроса подписи, колонка в списке подписей и поле в диалоге изменения причины запрошенной подписи; подписант его не редактирует. Общий диалог причины, не связанный с резолюцией, по-прежнему называется «Причина».

Диалог причины не блокирует страницу под ним: колесом мыши или жестом прокрутки над фоном вокруг диалога страницу можно прокручивать и просматривать, не закрывая диалог.

**Сохранение причины как варианта ответа.** В диалоге причины доступна опция «Сделать вариантом ответа»: отмеченная причина сохраняется как готовый вариант и предлагается для быстрого выбора при последующем вводе причины. Сохранить как вариант можно только причину не короче 4 символов — при более коротком тексте под полем выводится подсказка «Укажите причину. Минимум 4 символа», и диалог не закрывается.

**Длинная подсказка в окне причины.** Те же быстрые подсказки причины доступны и в окне указания причины переноса срока. Если текст подсказки длинный, при наведении показывается её полный текст поверх диалога; у края окна превью разворачивается, чтобы не выйти за границы видимой области.

**Повторная обработка уже обработанной подписи.** Если по подписи, которая уже была обработана — акцептована или отклонена через интерфейс, почту или другой канал, — приходит повторное решение по почте, система не считает это ошибкой: обработка письма завершается штатно, событие фиксируется в журнале как информационное, а не как ошибка, а пользователю, приславшему повторный ответ, отправляется сервисный комментарий «Подпись уже обработана» с уведомлением на почту. Повторная попытка обработать подпись через интерфейс по-прежнему сообщает, что она уже обработана, — этот путь не менялся.


### Параметры резолюции

У каждой резолюции есть настройки, влияющие на её отображение и поведение при нажатии.

| Параметр | Назначение |
|---|---|
| Название | Текст кнопки. Поддерживает мультиязычность |
| Описание | Всплывающая подсказка |
| Заголовок диалога | Текст окна запроса причины (по умолчанию — стандартный текст) |
| Причина обязательна | Обязательный комментарий при вынесении данной резолюции |
| Необходимо подтверждение | Дополнительное окно подтверждения (важно для мобильного приложения) |
| Цвет | Цвет кнопки: red, yellow, orange, green, cyan, blue, purple, pink, brown, grey или HEX |
| По умолчанию | Автоматическое добавление в каждую новую подпись |
| Название по смарт-выражению | Динамическое формирование названия через смарт-автоматизацию |

По умолчанию подпись содержит четыре резолюции: "Подписать", "Отклонить", "Удалить", "Делегировать". Порядок кнопок в интерфейсе определяется порядком в настройках.

Названия резолюций, заданные администратором, переводятся как значения сущностей — см. [Локализация](https://help.1forma.ru/domains/localization/business.md). Подписи самого экрана — кнопки панели, меню столбцов, метки фильтра — берутся из словаря языка интерфейса и от настроек резолюций не зависят.

<img src="https://help.1forma.ru/help-images/signatures/sign_cancel_spa_.png" alt="Диалог ввода причины при отклонении подписи" width="400">

Важные нюансы:

- Резолюция "Эскалировать" доступна в интерфейсе только при включенном параметре "Можно эскалировать".
- Кнопка "Удалить" на статическом маршруте регулируется правом "Администратор задач". На динамическом маршруте она также доступна запросившему подпись.
- При обработке необязательной подписи на переходе кнопка "Удалить" доступна всем акцептантам.

## Маршрут согласования

Маршрут согласования — состав и порядок подписей, запрашиваемых для выполнения перехода. Задается на вкладке "Подписи на переходе" в настройках перехода между статусами. Может быть статическим или динамическим.

### Параллельное и последовательное согласование

Подписи объединяются в **этапы** (параметр "Этап согласования"). Подписи одного этапа запрашиваются одновременно (параллельно). Подписи разных этапов обрабатываются последовательно: следующий этап начинается только после завершения предыдущего.

Причина запроса, введённая инициатором на первом этапе, автоматически копируется в подписи последующих этапов того же перехода. Перенос работает только если у подписи-источника не настроен собственный шаблон причины (статический, локализованный или smart) и не применяется к подписям с включённой опцией «Причина обязательна».

**Одна подпись на нескольких этапах.** Одну и ту же подпись можно привязать к одному переходу несколько раз — на разных этапах согласования (с разными значениями параметра «Этап согласования»). Например, подпись финансового директора может стоять и на этапе 1 (предварительное согласование), и на этапе 3 (финальное утверждение) одного и того же перехода. Каждая такая привязка — самостоятельная запись со своим набором настроек (обязательность, срок, поведение при отклонении, акцептанты); изменение или удаление настроек одной привязки не затрагивает другие привязки той же подписи на этом переходе.

**Промежуточный статус "На подписи"**

Пока запрошенные подписи ожидают обработки, задача получает промежуточный статус с префиксом "На подписи — {исходный статус}". В этом промежуточном статусе права на редактирование ДП соответствуют исходному статусу.

**Рекомендация**: для защиты данных от изменения во время согласования следует добавить отдельный статус "Согласование" с правами только на чтение и переводить задачу через него с помощью смарт-автоматизации.

**Обязательные и необязательные подписи**

- **Обязательная** подпись запрашивается автоматически при выполнении перехода.
- **Необязательная** подпись может быть запрошена по усмотрению пользователя, у которого есть доступ к задаче. Если на переходе настроены только необязательные подписи, система ожидает, пока кто-либо запросит хотя бы одну подпись или нажмет кнопку "Подписи не требуются".

```mermaid
stateDiagram-v2
    [*] --> Запрошена : переход по маршруту задачи
    Запрошена --> НаПодписи : промежуточный статус «На подписи — {исходный}»
    НаПодписи --> НаПодписи : параллельный этап (ожидание остальных)
    НаПодписи --> НаПодписи : следующий этап (последовательно)
    НаПодписи --> Подписана : акцепт «Подписать»
    НаПодписи --> Отклонена : акцепт «Отклонить»
    НаПодписи --> Делегирована : смена акцептанта
    НаПодписи --> Эскалирована : эскалация руководителю
    НаПодписи --> Удалена : удаление подписи (запросившим)
    НаПодписи --> Отозвана : отзыв всего согласования
    НаПодписи --> Отозвана : отзыв одной подписи (задача остаётся)
    Подписана --> [*] : переход в следующий статус задачи
    Отклонена --> [*] : возврат в предыдущий статус
    Делегирована --> НаПодписи
    Эскалирована --> НаПодписи
    Удалена --> [*] : пропуск этапа
    Отозвана --> [*] : возврат на статус до согласования
```

## Статический маршрут согласования

Набор подписей фиксирован и задается в таблице настроек на переходе. Для каждой подписи настраиваются параметры запроса, условия, действия при отклонении.

### Ключевые параметры подписи на переходе

Для каждой подписи, добавленной на переход маршрута, настраивается набор параметров, управляющих сроком, акцептантами, условиями отклонения и правами на делегирование.

| Параметр | Назначение |
|---|---|
| ЭЦП | Включение подписания файлов электронной подписью |
| Запретить подписывать заместителю | Заместитель не может обработать подпись (но видит её) |
| Асинхронное подписание | Обработка резолюции через очередь событий (ускоряет массовое подписание) |
| Акцептант определяется по | Условие определения акцептантов на данном переходе |
| Этап согласования | Номер этапа (одинаковый номер = параллельный запрос) |
| На подписание | Срок обработки на данном переходе |
| Причина / Причина обязательна / Причину можно менять | Управление причиной запроса подписи |
| Не запрашивать повторно | Исключение повторного запроса у уже акцептовавших |
| Каждому акцептанту отдельную копию | Персональная подпись каждому акцептанту вместо общей |
| Можно эскалировать / Эскалировать, когда просрочена | Управление эскалацией |
| Можно делегировать | Доступность делегирования акцептантом |
| Запрашивать подпись 1 раз | Подпись в задаче запрашивается только один раз |
| При отклонении | Прервать / ожидать всех / продолжить |
| В статус если отклонена подпись | Целевой статус при отклонении (по умолчанию — предыдущий) |
| При отклонении выполнить переход | Переход, выполняемый при отклонении (со всеми его автоматизациями) |
| Активна | Включена/отключена подпись |
| Обязательна | Автоматический запрос vs. по усмотрению пользователя |
| Можно заблокировать срок подписи | Разрешает заказчику или пользователю с правом «Администратор задач» вручную заблокировать срок запрошенной подписи в карточке задачи. Попытка изменить срок заблокированной подписи возвращает ошибку. Активно только если в настройках самой подписи включён параметр «Срок можно менять» |
| Заблокировать срок, смарт-фильтр | Смарт-фильтр вычисляется после запроса подписи; если условие выполнено, срок подписи блокируется автоматически. Активен только при включённом параметре «Можно заблокировать срок подписи» и при разрешённом изменении срока в настройках подписи |

### Обязательные и информационные ДП

На переходе можно задать два вспомогательных набора дополнительных параметров: обязательные для заполнения перед резолюцией и информационные — для отображения акцептанту при обработке подписи.

- **Обязательные ДП** — список параметров, которые должны быть заполнены до вынесения резолюции. Подпись запрашивается, но акцептант не может обработать её до заполнения всех обязательных ДП.
- **Информационные ДП** — параметры, отображаемые при запросе подписи для помощи в принятии решения без необходимости заходить в задачу. Работают и в веб-версии, и в мобильном приложении. Ограничение: не отображаются ДП типов "Большой текст с форматированием", "Таблица", "Выбор пользователей", "Адрес", "Дерево".

#### Где видны информационные ДП

Информационные ДП адресованы тому, кто обрабатывает подпись: они показываются при запросе подписи (см. выше), а в журнале подписей — рядом с подписью в строке списка. В карточке задачи и в блоке «Подписи» их нет, и это штатное поведение, а не сбой настройки. Чтобы параметры появились у согласующего, настройка подписи должна быть сохранена, а тип параметра — допускать отображение (ограничение по типам выше).

Значения информационных ДП согласующий не меняет: они нужны для принятия решения без захода в задачу. Если параметр обязателен к заполнению, его следует вынести на вкладку «Обязательные ДП» — во вкладке «Информационные ДП» для этого нет поля ввода.

**Условия запроса**

Подпись может запрашиваться условно — по значению ДП или по смарт-фильтру. Используется, когда разные подписи нужны при разных значениях ДП (например, разные юристы для разных видов деятельности).

**Действия при отклонении**

Три режима поведения при отклонении:
1. **Прервать согласование** (право вето) — необработанные подписи аннулируются у всех участников этапа.
2. **Ожидать решения всех участников** — согласование продолжается до сбора всех решений на этапе. Полезно для сбора замечаний от всех подразделений.
3. **Продолжить согласование** — согласование идет до завершения всех этапов.

При отклонении задача по умолчанию возвращается в предыдущий статус. Можно указать конкретный целевой статус или переход.

**Обработка разных резолюций отклонения**

Если для подписи настроены несколько резолюций с действием "Отклонить" (например, "Отклонить" и "На доработку"), рекомендуемый подход: использовать одну резолюцию "Отклонить" со стандартными действиями при отклонении, а прочие резолюции ("На доработку", "Согласовать с замечаниями") привязать к действию "Подписать" и обрабатывать через смарт-события.

## Динамический маршрут согласования

Состав подписей формируется динамически и зависит от решений, принятых на предыдущих этапах. Например: если юрист акцептовал — запрашивается подпись финдиректора, если с замечаниями — гендиректора. Настраивается администратором индивидуально для каждой категории.

Параметр **«Кешировать полный маршрут согласования»** фиксирует настройки на момент начала согласования — изменения вступят в силу только при следующем согласовании.

Типичный сценарий — матрица согласования: условия запроса подписей (суммы, проценты скидок) хранятся в справочнике; изменить их можно без участия администратора.

В ходе динамического маршрута инициируются смарт-события динамических подписей (запрос, подписание, отклонение).

**Делегирование подписи**

Делегирование (смена акцептантов) возможно при выполнении одного из двух условий:
1. Включена настройка "Можно делегировать" в подписи на переходе **и** пользователь является акцептантом.
2. У пользователя есть право "Добавлять и менять акцептантов" в текущей категории.

**Эскалация**

Эскалация — передача подписи на уровень руководителя. Доступна, если:

- В настройках подписи включен параметр "Можно эскалировать".
- В блоке "Подпись начальника" указана подпись, которая будет запрашиваться при эскалации.

Настройка "Эскалировать, когда просрочена" на переходе позволяет автоматически эскалировать подпись по истечении срока.

## Временное замещение акцептанта

Если акцептант назначил себе временного заместителя, заместитель получает право выносить резолюции по подписям от имени замещаемого сотрудника. В списке согласующих рядом с именем отсутствующего акцептанта в скобках отображается имя его заместителя.

Если в ходе согласования бизнес-процесс запрашивает несколько подписей, может получиться, что подпись запрашивается и у сотрудника, и у его временного заместителя. Чтобы заместителю не приходилось обрабатывать несколько подписей (за себя и за замещаемого), в таких случаях "лишние" подписи не запрашиваются.

Флаг «требуется ваша подпись» в ленте мобильного приложения и счётчик подписей считают одно и то же: обе величины учитывают подписи, где акцептант — сам пользователь, и подписи сотрудников, которых он замещает. Учитывается режим категорий замещения — заместитель видит подписи только по тем категориям, которые разрешены его замещением. Подписи на переходах, где включено «Запретить подписывать заместителю», ни во флаг, ни в счётчик не попадают.

<img src="https://help.1forma.ru/help-images/signatures/signatures-spa-001.png" alt="Имя заместителя рядом с именем акцептанта в блоке подписей" width="320">

## Отзыв подписей

Отзыв — прерывание маршрута согласования с возвратом задачи на предыдущий статус. Управляется настройками категории:

| Настройка | Кому доступно |
|---|---|
| Разрешить исполнителям отзывать запрошенные подписи | Исполнителям, акцептантам, заказчикам, запросившим подпись, администраторам задач |
| Разрешить акцептантам отзывать подписанные подписи | Акцептантам |
| Разрешить заказчику отзывать подписанные подписи | Заказчику |
| Разрешить запросившим подпись отзывать подписанные подписи | Запросившему подпись |

При нажатии кнопки "Отозвать согласование" все запрошенные и подписанные подписи отзываются, задача возвращается на статус до начала согласования.

![Кнопка «Отозвать согласование» в меню тулбара задачи](https://help.1forma.ru/help-images/signatures/signatures_spa-003.png)

**Отзыв одной подписи**

Чтобы отозвать отдельно взятую подпись, в меню "Больше действий" по подписи выбирается пункт "Отозвать". В отличие от удаления, при отзыве одной подписи задача остаётся в текущем статусе.

**Удаление одной подписи**

Чтобы удалить отдельно взятую подпись, в меню "Больше действий" по подписи выбирается пункт "Удалить". Пункт доступен только пользователям, запросившим подпись. В отличие от отзыва, при удалении подпись пропускается, и задача переходит в следующий статус по маршруту.

**Отзыв нескольких подписей одним действием.** Кнопка «Отозвать согласование» отзывает сразу все активные запрошенные подписи задачи, сколько бы их ни было, и действие завершается при любом их числе — и в веб-интерфейсе, и в мобильном приложении. В истории задачи появляется один системный комментарий об отзыве, а в журнал подписей попадает по строке на каждую отозванную подпись. Отзыв единственной подписи устроен так же и оставляет одну строку журнала.

**Подписи, требующие акцепта для действий с делегированием, сменой заказчика и изменением срока**

В настройках категории можно привязать запрос подписи к определенным действиям:

| Действие | Механизм |
|---|---|
| Делегирование задачи | Смена исполнителя происходит только после акцепта подписи; при отклонении — отмена |
| Смена заказчика | Аналогично делегированию |
| Изменение срока | Запрос подписи при изменении дедлайна. Смарт-выражение может возвращать -1 для пропуска |

Подпись может указываться напрямую или через смарт-выражение (возвращает ID подписи).

## Журнал подписей (Лист согласования)

По умолчанию после обработки подписи сохраняется только информация о том, кто фактически обработал подпись. Сведения об изначальных акцептантах не сохраняются.

Параметр "Удалять историю акцептантов подписи после обработки" (Общие настройки приложения) управляет этим поведением. При отключении сохраняется полная информация: кому была запрошена подпись, кто фактически обработал. Это критично для контроля работы заместителей: в Листе согласования видно, что резолюция вынесена заместителем от имени замещаемого сотрудника.

**Несколько строк на одну операцию.** На один системный комментарий в журнале может приходиться несколько строк — по одной на каждую задействованную подпись: так устроен отзыв согласования, где одной записи об отзыве отвечает строка на каждую отозванную подпись. Поэтому одинаковые значения в колонках «Обработал», «Комментарий» и «Дата запроса» могут повторяться в соседних строках: это разные подписи одной операции, а не дубли.

### Открытие журнала и вид

Открыть журнал подписей можно из панели инструментов карточки задачи, по ссылке в шапке блока «Подписи» или из меню «Больше действий». Пустой журнал — штатное состояние: по задаче ещё не запрашивали подписей. Просмотр журнала и повторная загрузка истории ничего не меняют в подписях и резолюций не выносят.

![Журнал подписей задачи](https://help.1forma.ru/help-images/signatures/task_sign_list_spa_new.png)

В шапке журнала отображается текст задачи (максимум 3 строки + кнопка «Показать все», свернуть обратно нельзя). Под таблицей доступны опции:

| Опция | Описание |
|---|---|
| Печать журнала подписей | Печать в текущем виде. Если текст свернут — печатается тремя строками; если развёрнут — целиком |
| Вид для печати | Предварительный просмотр; можно изменить порядок и ширину столбцов |
| Только итоговое решение | Показать только итоговую резолюцию по каждой подписи (если она запрашивалась повторно). Ещё не запрошенные подписи при включённой опции скрываются |
| Показывать акцептантов | Колонка «Акцептант» с фактически вынесшим резолюцию |
| Скрыть удалённые подписи | Исключить удалённые из списка |

**Ещё не запрошенные подписи.** Помимо запрошенных и обработанных, в журнале видны подписи, которые по этой задаче ещё будут или могут быть запрошены: по журналу видно, сколько этапов согласования предстоит и какие подписи на них запросят.

| Колонка журнала | Что показывает для такой строки |
|---|---|
| Подпись | Название подписи из настроек перехода |
| Состояние | «Будет запрошена на N этапе» — для обязательной подписи, «Может быть запрошена N этапе» — для необязательной; N — номер этапа согласования |
| Динамическая подпись | Признак подписи, не привязанной к этапу перехода |
| Акцептанты | Возможные согласующие; колонка включается опцией «Показывать акцептантов» |
| Дата запроса, Обработал, Резолюция, Комментарий | Пусто: подпись ещё не запрашивалась |

Правила показа:

- показывается только то, что действительно будет или может быть запрошено: учитываются условия запроса подписи по значениям дополнительных параметров и смарт-фильтр подписи, а отключённые на переходе подписи не показываются;
- такие строки идут после запрошенных и обработанных, по возрастанию номера этапа согласования;
- опция «Только итоговое решение» их скрывает;
- показывается остаток текущего этапа согласования — подписи текущего перехода с номером этапа больше текущего; подписи предстоящих статусов маршрута в журнал не попадают;
- счётчики не меняются: и счётчик в шапке блока «Подписи», и число подписей, по которому блок показывается в карточке задачи, учитывают только фактические подписи, а в самом блоке ещё не запрошенные подписи не отображаются — они видны только в журнале;
- если по подписи не удалось рассчитать согласующих или не найден дополнительный параметр из условия запроса, строка пропускается, а в журнал ошибок пишется запись; журнал при этом открывается как обычно.

Печать журнала и «Вид для печати» выводят эти строки наравне с остальными.

При обработке подписи заместителем в колонке «Обработал» рядом с именем в скобках пишется «Заместитель».

Клик по строке журнала раскрывает блок с полной информацией из всех колонок — позволяет скопировать развёрнутые комментарии акцептанта и причины запроса.

![Раскрытая строка журнала подписей с деталями резолюции](https://help.1forma.ru/help-images/signatures/task_sign_list_spa_new-001.png)

**Снэпшот задачи**

В правой части журнала по иконке открывается **Снэпшот** — состояние задачи на момент подписания: рассчитанный и сохранённый хэш задачи, системные параметры, ДП.

## Запрос подписи (UX)

Большинство подписей запрашивается автоматически по регламенту бизнес-процесса. Для запроса вручную в карточке задачи доступно действие «Запросить подпись» (через меню «Подписи» в тулбаре или кнопку `+` в блоке подписей). Кнопка отображается только при наличии соответствующего права.

<img src="https://help.1forma.ru/help-images/signatures/signatures_spa-008.png" alt="Кнопка «Запросить подпись» в меню тулбара задачи" width="400">

Окно запроса содержит две вкладки. Открывается оно на вкладке, выбранной в общей настройке «Вид динамической подписи по умолчанию»; если настройка не задана — на «Должностных подписях». Для категорий, перечисленных в ключе `personalDynSignaturesOnly` ([настройки приложения](https://help.1forma.ru/domains/system/settings-custom.md)), переключателя вкладок нет: окно сразу показывает личные подписи.

**Личные подписи** — подпись запрашивается у конкретных сотрудников.

- Поле «Кому» — выбор одного или нескольких пользователей.
- Опция «Запросить у каждого акцептанта отдельную подпись» (по умолчанию вкл): отдельная подпись и отдельная резолюция у каждого. Поиск в поле «Кому» фильтрует список по ФИО; в найденной строке показываются аватар, имя сотрудника и служебные сведения о нём, в том числе «когда был». Имя не вытесняется служебной подписью, длинное ФИО усекается многоточием, а строка поиска не сжимается — ни от длинного имени, ни от нескольких уже выбранных акцептантов.
- Если опцию выключить — формируется одна общая подпись на всех; резолюция любого акцептанта считается общей.

![Форма запроса личной подписи — вкладка «Личные подписи»](https://help.1forma.ru/help-images/signatures/signatures_spa-10.png)

**Должностные подписи** — подпись из списка преднастроенных в системе.

- Выбор подписи из списка автоматически заполняет акцептантов и срок.
- Поле **«Подписи, доступные сотруднику»** (одиночный выбор) фильтрует список должностных подписей: остаются только подписи, на которые указанный сотрудник имеет право; подписчиком задачи он при этом не становится. Отдельное поле **«Подписчики»** (мультивыбор) задаёт, кого подписать на задачу, — можно указать нескольких, и каждый остаётся в списке. Поле «Подписчики» занимает всю ширину формы: при добавлении нескольких сотрудников чипы переносятся на новые строки, а поле растёт по высоте и не перекрывает элементы ниже. Строка поиска внутри поля сохраняет ширину не менее 150 px и при нехватке места переносится на отдельную строку.
- **Поиск в выпадающем списке** — в поле выбора подписи доступен ввод текста для фильтрации списка по названию (регистронезависимо). При смене значения в поле «Подписи, доступные сотруднику» поиск автоматически сбрасывается, и снова открывается полный отфильтрованный по сотруднику список. Если по введённому запросу совпадений нет, отображается сообщение об отсутствии элементов.

Поля «Причина запроса» и «Срок» — общие. Причина обязательна, если в подписи это настроено (помечается `*`). Если причина не указана и не обязательна, в поле выводится «Не указана причина». При неуспехе по сроку — подпись считается просроченной (уведомления акцептантам и запросившему); при настроенном эскалировании передаётся руководителю.

![Форма запроса должностной подписи — вкладка «Должностные подписи»](https://help.1forma.ru/help-images/signatures/signatures_spa-11.png)

**Быстрые подсказки причины.** Для поля «Причина запроса» доступны быстрые подсказки. Клик по подсказке подставляет её текст в поле — текст остаётся доступным для редактирования и дополнения. Сам запрос подписи при этом не отправляется: чтобы отправить, нужно нажать кнопку «Запросить». Если отмечено «Сделать вариантом ответа», а причина короче 4 символов, при нажатии «Запросить» выводится ошибка: окно не закрывается, подпись не запрашивается.

**Как читается длинная подсказка.** Если текст быстрой подсказки не помещается в одну строку, при наведении курсора на неё показывается всплывающее превью с полным текстом — поверх окна запроса подписи, ничего в нём не перекрывая. У нижнего и правого края окна превью автоматически разворачивается или сдвигается, чтобы остаться полностью видимым и не выйти за пределы экрана. Для коротких подсказок, которые помещаются целиком, поведение прежнее — превью не появляется и не мешает выбору.


**Изменение параметров запрошенной подписи**

Если у пользователя есть право менять параметры запрошенной подписи (срок, причина, согласующие), при наведении на параметр в блоке подписей появляется подсказка, и поле становится редактируемым по клику. Проверяются три отдельных права: менять причину, менять состав согласующих и менять срок. Без нужного права поле не становится редактируемым, а срок заблокированной подписи изменить нельзя — система вернёт ошибку. Изменение причины, состава или срока не выносит резолюцию и не завершает подпись.

Краткая карточка профиля согласующего и его помощника открывается наведением на ФИО независимо от того, есть ли право менять состав согласующих. Клик сохраняет прежнее действие: с правом он открывает редактирование состава, без права — ту же карточку профиля. Как устроена карточка и где ещё она вызывается наведением — см. [Краткие карточки пользователя и группы](https://help.1forma.ru/domains/users-and-groups/business.md).

<img src="https://help.1forma.ru/help-images/signatures/signatures_spa-07.png" alt="Редактируемые параметры подписи в блоке задачи" width="320">

**Окно «Делегировать подпись».** Согласующие показаны в одном окне: поле «Кому» со строкой поиска, а каждый выбранный сотрудник — отдельным чипом с его фото (или инициалами) и ФИО. Сотрудника убирают крестиком на чипе, поиском добавляют следующего. Если ФИО не помещается, имя усекается многоточием — высота строки от этого не меняется, аватары и точки присутствия остаются целыми. Чипы переносятся в несколько рядов, когда согласующих больше одного, и каждый ряд идёт без пустого промежутка. Тот же вид у окна смены ответственного в карточке задачи — это одно и то же окно выбора людей; отличается только поведение клика по чипу: в окне смены ответственного клик по имени оставляет в списке одного этого человека, а в делегировании подписи состав не меняется. Права, состав акцептантов и правила подписи при этом не затрагиваются: описан только вид.

**Работа со списком согласующих.** Клик по имени или другой части чипа не удаляет и не заменяет остальных согласующих. Чтобы убрать человека из списка, нажмите кнопку-крестик справа на его чипе; чтобы добавить другого — найдите его через поле «Кому». Над списком показано, сколько согласующих выбрано. Если список не помещается в видимую область окна, прокручивайте область со списком: от прокрутки состав не меняется. Проверьте счётчик перед нажатием «Делегировать» — он показывает число согласующих, выбранных для делегирования.

**Вкладки «Активные» и «Завершенные»**

Блок подписей в карточке задачи разделён на две вкладки со своими счётчиками. «Активные» показывается, если по задаче есть подписи, ожидающие резолюции; «Завершенные» — если есть обработанные: подписанные, отклонённые, удалённые, а также оставшиеся необработанными. При открытии задачи выбрана вкладка «Активные»; если активных подписей нет, открывается «Завершенные».

Сам блок подписей показывается в карточке задачи, когда по задаче есть запрошенные подписи — активные или завершённые.

На вкладке «Активные» подписи выглядят и обрабатываются как прежде. На вкладке «Завершенные» кнопок резолюций нет: слева стоит отметка состояния — подписана, отклонена, удалена или не обработана, а сама запись занимает одну строку. В записи видна причина запроса, мета-данные («Запросил», «Запрошено», «Обработал», «Обработана») и блок резолюции с подписями «Тип резолюции» и «Комментарий»: если тип не указан, выводится «Не указан», если комментария нет — «Нет комментария». Заголовок записи — причина запроса, указанная инициатором; когда её нет, выводится «Не указана причина». На узкой карточке запись складывается в колонку.

Записи сгруппированы плашками: одна плашка — одна волна запроса, то есть подписи, запрошенные одним действием в одну минуту. Один и тот же тип подписи может встречаться в списке несколько раз — это ожидаемо. Порядок записей хронологический, по дате запроса.

Даты и время в записях показываются в системном формате: сегодняшние — с указанием «Сегодня» и времени, текущего года — день, месяц и время, прошлых лет — полная дата со временем. Свой формат в блоке не задаётся.

Если история подписей не загрузилась, вкладка «Завершенные» остаётся видимой и показывает внутри ошибку с кнопкой повтора; отдельное окно с ошибкой не открывается.

Если карточка задачи открыта и по задаче запрошена новая подпись, блок подписей раскрывается и переключается на вкладку «Активные» — в том числе если блок был свёрнут вручную или была открыта вкладка «Завершенные». Обработка последней активной подписи блок заново не раскрывает.

Если в блоке нет ни активных, ни завершённых подписей, вместо списка выводится «Нет активных подписей» с пояснением, что прошлые подписи хранятся в журнале, и кнопкой перехода в него. Полная история подписей во всех состояниях, включая активные, остаётся в журнале подписей.

На вкладке «Активные» резолюции с действиями «принять» и «отклонить» показаны кнопками. На кнопке — название резолюции, как его задал администратор: «Подписать», «Отклонить» или любое другое. Кнопка по ширине равна своему тексту, с отступом от границ; короткое название не растягивается до фиксированной ширины. Если название длиннее свободного места в строке, оно усекается многоточием, а отступ от границ сохраняется. Несколько кнопок стоят в ряд с промежутком и переносятся на следующую строку, когда ряд заполнен. Прочие действия в этот ряд не выносятся — они собраны в меню «…» рядом с кнопками.

Доступна только та резолюция, кнопка которой показана именно вам в этой задаче. Если кнопки нет, она скрыта в меню «Больше» или показана неактивной — значит, действие вам недоступно, и обходных путей искать не нужно. Записи на вкладке «Прошлые» кнопок не имеют: повторное решение по обработанной подписи через карточку не выносится.

## Список активных подписей

Открывается через индикатор "Ожидающие вашей подписи" в панели навигации. Просроченные подписи в списке выделяются **красным шрифтом**; список только просроченных доступен через отдельный индикатор «Просроченные подписи».

**Конфиденциальные задачи.** Если задача помечена конфиденциальной, а доступа к её содержимому у пользователя нет, подпись в списке остаётся — видны задача, срок и действия, — а текст задачи и значения дополнительных параметров приходят с заглушкой. Доступ к содержимому есть у подписчиков задачи; подробнее — в разделе [«Конфиденциальные и зашифрованные задачи»](https://help.1forma.ru/domains/permissions/business.md#что-видно-пользователю-без-доступа-к-содержимому).
Начиная с версии 2.266 Дракон состав колонок настраивается через кнопку "Наборы полей".

Доступные колонки: номер задачи, текст, подпись и текст, причина запроса, срок, описание, согласующие, дата запроса, категория, заказчик, исполнитель, запросивший, время на подпись, действия, вопросы от меня / мне, статус, подзадачи, приоритет, дата создания задачи, произвольные ДП (по ID).

Заголовки колонок в «Наборах полей» приходят с сервера, поэтому в списке выбора и в самом гриде колонка называется одинаково — «Причина запроса». Это текст, который указал инициатор при запросе подписи; комментарий, который подписант вводит при вынесении резолюции, отдельной колонкой в списке подписей не выводится и в выборе колонок не настраивается. До 2.268 колонка называлась «Причина» — тем же названием, что и в других местах интерфейса.

Значения дополнительных параметров в колонках показываются на языке интерфейса пользователя: для ДП типа «Флажок» подпись логического значения берётся из словаря локали (блок `common`, ключи `yes` и `no`) — на русском интерфейсе «Да» и «Нет», на остальных языках перевод своего языка с откатом на английский, затем на русский.

Подписи самого списка — названия кнопок панели и колонок, пункты меню столбцов, подсказки, метки фильтра, тексты окон подтверждения и уведомлений — берутся из словаря языка интерфейса: на русском они русские, на остальных языках — на языке пользователя, а если строки для этого языка в словаре нет, берётся английская, затем русская. Значения, которые список отправляет на сервер — условия фильтра, данные выбранной подписи, — и сравнение решений от языка интерфейса не зависят. Набор значений фильтра по приоритету единый для всех языков и совпадает с текстом ячейки, которую локализует сервер.

Список перечитывается автоматически, без перезагрузки страницы: когда подпись запрашивают у вас и когда по задаче из списка подпись ставят, отклоняют или отзывают. Пока вкладка со списком неактивна, обновление откладывается — список перечитается при возврате в неё. Кнопка «Обновить» на панели инструментов перечитывает список вручную в любой момент.

### Действия из списка

Резолюцию можно вынести прямо из списка кнопкой с нужным действием — без перехода в карточку задачи. Если информации недостаточно, по клику на текст задачи открывается её карточка (`Ctrl + ЛКМ` — открыть в новой вкладке).

Для ускорения обработки рядом с подписью в строке списка могут отображаться информационные параметры. Если у акцептанта есть права, он может перенести причину и срок обработки подписи.

При наведении на поля «Согласующие» и «Срок» в строке появляется иконка редактирования: при наличии прав можно сменить акцептанта или перенести срок не выходя из списка.

### Панель инструментов

В верхней части реестра подписей расположена панель с кнопками для обработки отдельных и массовых операций над выбранными подписями.

| Кнопка | Описание |
|---|---|
| Принять | Принятие выбранной подписи |
| Отклонить | Отклонение выбранной подписи |
| Делегировать | Делегирование подписи другому пользователю |
| Подписать | Подписание выбранной подписи |
| Отозвать | Отзыв подписи |
| Обновить | Обновляет список |
| Фильтр | Включает строку фильтрации значений по столбцу |
| Группировка | Группировка по столбцу. Только системные колонки; группировка по ДП недоступна. **В режиме «Подзадачи» недоступна полностью** |
| Колонки | Меню выбора отображаемых столбцов |
| В Excel | Выгрузка списка |
| Вид по умолчанию | Сброс пользовательских настроек таблицы (сортировка, группировка, порядок колонок) к дефолту |

**Массовая обработка**

Слева от каждой строки — чекбокс. Можно выбрать как все подписи сразу, так и отдельные. Количество выбранных отображается в панели инструментов. После выбора активируются кнопки массовых действий, применяемые ко всем отмеченным подписям одним кликом.

### Режим отображения «Подзадачи»

Переключатель в панели инструментов меняет режим отображения. Система запоминает выбор между сессиями.

| Поведение | По умолчанию | Подзадачи |
|---|---|---|
| Группировка | По выбранному столбцу | Авто по «Подпись и текст задачи»; смена недоступна |
| Сортировка подзадач | — | По дате создания, возрастание |
| Подзадачи задачи с подписью | Не отображаются | Видны иерархически; недоступны для выбора |
| Колонка «Статус» | По желанию | Полезна для контроля, на подписи ли подзадачи у других сотрудников |

### Действия с колонками

При наведении на шапку колонки появляется иконка меню: фильтрация, сортировка, группировка. Сортировка доступна **не для всех** колонок:

- В режиме «По умолчанию» — недоступна для: Согласующие, Избранное и колонок с любыми ДП.
- В режиме «Подзадачи» — недоступна для: Причина запроса, Текст задачи, Номер задачи, Согласующие, Время на подпись, Вопросы от меня / мне / Мои вопросы, Активных подзадач, Всего подзадач, Подзадачи, Статус, Избранное.

Состав доступных пользователю колонок может настраиваться администратором.

#### Фильтрация по колонкам дополнительных параметров

Для выведенных в реестр колонок ДП типов «Ссылка» и «Множественная ссылка» действует отбор по значениям справочника: в окне фильтра показывается список значений с чекбоксами и полем поиска, есть отметка всех значений и догрузка кнопкой «Показать ещё». Отметив несколько значений, пользователь оставляет строки, у которых значение параметра совпадает хотя бы с одним из отмеченных. Текстовый поиск по таким колонкам не применяется — доступен только отбор по выбранным значениям.

Отбор выполняется без повторного запроса к серверу: список перефильтровывается сразу при отметке или снятии значения, а если снять все отметки, фильтр колонки снимается. Состав значений ограничен задачами категории-источника, доступными пользователю.

**Колонки по вопросам**

| Колонка | Что показывает |
|---|---|
| Вопросы от меня | Кол-во вопросов, заданных пользователем в задаче |
| Вопросы ко мне | Кол-во вопросов, адресованных пользователю |
| Мои вопросы | Сводный статус: «Не отвечены» / «Нет» / «Отвечены» |

**Режим «Скрыть вопросы»**

В списке подписей доступен переключатель **Скрыть вопросы**. При включении из списка не отображаются подписи из задач, в которых есть:

- запрошенные пользователем и ещё необработанные **динамические подписи**, или
- заданные пользователем и ещё **неотвеченные вопросы**

**Смысл режима:** убрать из рассмотрения задачи, по которым пользователь ожидает разъяснений и поэтому не готов сейчас принимать решение.

## Подписи в настройках группы

В настройках группы (вкладка "Подписи") отображаются все подписи с алгоритмом "По группам", в которых фигурирует данная группа. Указанные акцептанты добавляются **в дополнение** к акцептантам, вычисленным другими способами, для любой подписи, запрошенной от имени члена группы.

Специальные права группы, связанные с подписями:

- **Запрашивать динамическую подпись** — право запрашивать динамические подписи.
- **Создавать динамическую подпись** — право создавать подписи для пользователей, не фигурирующих ни в одной подписи как акцептанты.

**Карточка пользователя: вкладка "Подписи"**

Сводка по всем подписям, в которых фигурирует пользователь, в двух таблицах:

- **"Подписывает"**: подписи, где пользователь — акцептант (по группам и по ДП).
- **"Его задачи подписывает"**: подписи, акцептующие действия групп, в которые входит пользователь.

## ЭЦП (электронная подпись)

Стандартные подписи в 1Форме — простые (неквалифицированные) электронные подписи. Для усиленных и квалифицированных подписей (ЭП/ЭЦП) необходимо заверение сертификатом удостоверяющего центра (УЦ).

**Поддерживаемые СКЗИ**

| СКЗИ | Интерфейс | Особенности |
|---|---|---|
| **КриптоПро / РуТокен** | Только веб | Плагин + ПО КриптоПро CSP. Поддерживает открепленную/прикрепленную подпись, соподпись, массовую обработку |
| **PayControl** | Только мобильное приложение | Серверное или клиентское подписание через PayControl SDK |
| **DSSCryptoPro** | Только веб | Облачный сервис КриптоПро. Типы: GOST3410, CAdES, PDF, MSOffice, CMS |

**Доступность ЭП в Certificate Edition (с 2.268.353).** В сборке `UniForm.Barebone` (Certificate Edition) доступна только локальная КриптоПро CSP / РуТокен; DSS КриптоПро, Контур.Cloud и УЦ КриптоПро вынесены в `Valhalla.Eds` + `UniForm.Module.Eds` и в этой сборке недоступны.

**Ввод PIN аппаратного токена.** При подписании через РуТокен PIN-код запрашивается диалогом и в 1Форме не хранится — ни в браузере, ни на сервере. Если в диалоге отметить флажок «Запомнить пин-код», PIN сохраняет сам плагин токена, и повторные подписи в этом же окне проходят без ввода; без флажка PIN спрашивается на каждое новое подключение к токену. Запоминание живёт до конца сессии страницы: при первой подписи после перезагрузки страницы, открытия системы в новой вкладке или нового входа в 1Форму сохранённый PIN сбрасывается, и система спрашивает его заново. Это сделано намеренно — PIN может быть сменён на самом токене, и устаревший кеш не должен блокировать подпись.

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

Сохранённый PIN сбрасывается автоматически ещё в двух случаях: если вход с ним не удался, вместо блокировки диалог ввода показывается заново при повторной попытке; и сразу после смены PIN-кода. Если при сбросе плагин токена не ответил, операция останавливается сообщением «Плагин Рутокен не ответил при сбросе сохранённого PIN-кода. Повторите попытку.» — подпись нужно повторить.

**Настройка ЭЦП на переходе**

1. Включить флаг "ЭЦП" на подписи в настройках перехода.
2. Перейти на вкладку "Настройки ЭДС".
3. Выбрать СКЗИ.
4. Указать подписываемые файлы.
5. Настроить ИНН юрлица для ограничения сертификатов (необязательно).
6. Включить МЧД (машиночитаемая доверенность) при необходимости — проверка права подписи от лица компании перед подписанием.
7. Для КриптоПро/РуТокен: вид подписи (открепленная/прикрепленная), соподпись.
8. Для PayControl: серверное подписание (опционально).

**Проверка состава подписей при соподписи.** Если на подписи включена соподпись — один файл последовательно подписывают несколько сотрудников, — состав сертификатов проверяет сервер. В журнал подписей и в свойства файла попадают данные того сертификата, которого не было в предыдущей подписи по этому файлу.

За одно подтверждение допускается добавить строго одного нового участника. Если присланная подпись содержит сразу несколько новых сертификатов или не содержит нового сертификата вовсе, подтверждение отклоняется сообщением об ошибке, а подпись не фиксируется.

**Массовая обработка** ЭЦП

Работает только с СКЗИ КриптоПро/РуТокен. Все файлы подписываются одним сертификатом, выбранным при первом использовании. Настройки плагинов и фильтры по ИНН игнорируются.

**Дополнительные настройки категории для ЭЦП**

- "Создавать системные копии вложенных файлов при акцепте подписи" — создание скрытой версии файла при подписании, ссылка на неё сохраняется в снэпшоте.
- Проверка статуса сертификата: подписание блокируется при истекшем или отозванном сертификате.



**Дополнительные настройки категории**

| Настройка | Назначение |
|---|---|
| Отсылать запросы подписей от имени диспетчера задач | Уведомления приходят от имени диспетчера |
| Осуществлять переходы при отклонении от имени диспетчера задач | Переход при отклонении от имени диспетчера (решает проблему отсутствия прав у акцептанта) |

## Интеграция со смарт-автоматизацией

### Смарт-события

Смарт-события позволяют выполнять автоматические действия в ключевых точках жизненного цикла подписи — перед запросом, акцептом, делегированием, отклонением и после завершения.

| Событие | Тип |
|---|---|
| Перед запросом подписи на переходе | Статическая |
| Перед акцептом подписи | Обе |
| Перед делегированием подписи | Обе |
| Перед отклонением подписи | Обе |
| Перед удалением подписи | Обе |
| Перед эскалированием подписи | Обе |
| Перед отзывом подписи | Обе |
| Перед запросом динамической подписи | Динамическая |
| После подписания статической подписи | Статическая |
| После отклонения статической подписи | Статическая |
| После подписания динамической подписи | Динамическая |
| После отклонения динамической подписи | Динамическая |
| После удаления динамической подписи | Динамическая |
| После эскалирования динамической подписи | Динамическая |
| После отзыва подписи | Обе |
| После запроса подписи на переходе | Статическая |
| После запроса динамической подписи | Динамическая |
| После истечения срока подписи | Обе |

В событии «После запроса подписи на переходе» сведения о запрошенной подписи фиксируются до запуска смарт-пакета, поэтому пакет и Lua-скрипт могут их читать. На событие «После запроса динамической подписи» эта гарантия не распространяется.

**Смарт-действия**

- Запросить динамическую подпись
- Запросить подпись пользователя
- Добавить акцептанта динамической подписи
- Отозвать запрошенную подпись
- Изменить срок динамической подписи
- Изменить причину динамической подписи

## Проектирование маршрута согласования (рекомендации)

При проектировании бизнес-процесса с согласованием необходимо определить:

1. **Какие подписи нужны** и в каком порядке (параллельно или последовательно).
2. **Условия запроса** — всегда ли нужны все подписи или есть зависимость от параметров задачи.
3. **Поведение при отклонении** — возврат на доработку, полное отклонение, право вето.
4. **Повторное согласование** — все подписи заново или только непринятые.
5. **Защита данных** — отдельный статус "Согласование" с правами только на чтение.
6. **Статус при отклонении** — обязательно указать целевой статус, иначе задача может "застрять" в статусе "Согласование".
