# Учёт согласий с документами

## Процедура

Процедура `consent.register` позволяет зарегистрировать согласие пользователя на обработку данных, принятие условий использования, политики конфиденциальности и других документов.

{% code title="tag template" overflow="wrap" %}

```python
{% consent.register consent_type="<consent_type>" event_type="<event_type>" consent_mode="<consent_mode>" document_type="<document_type>" <параметры> as result %}
```

{% endcode %}

**Параметры**

* `consent_type` <mark style="color:yellow;">`string`</mark> <mark style="color:red;">\*</mark> – Тип согласия. [См. Типы согласий](#tip-soglasiya-consent_type)
* `event_type` <mark style="color:yellow;">`string`</mark> <mark style="color:red;">\*</mark> – Тип события. [См. Типы событий](#tip-sobytiya-event_type)
* `consent_mode` <mark style="color:yellow;">`string`</mark> <mark style="color:red;">\*</mark> – Режим получения согласия. [См. Режимы согласия](#rezhim-consent_mode)
* `document_type` <mark style="color:yellow;">`string`</mark> <mark style="color:red;">\*</mark> – Тип документа. [См. Типы документов](#tip-dokumenta-document_type)
* `document_title` <mark style="color:yellow;">`string`</mark> – Название документа
* `document_version` <mark style="color:yellow;">`string`</mark> – Версия документа
* `document_date` <mark style="color:yellow;">`datetime`</mark> – Дата документа
* `document_url` <mark style="color:yellow;">`string`</mark> – URL документа
* `web_source_info` <mark style="color:yellow;">`dict`</mark> – Информация о веб-источнике
* `chat_source_info` <mark style="color:yellow;">`dict`</mark> – Информация об источнике чата
* `contact_external_id` <mark style="color:yellow;">`string`</mark> – Внешний идентификатор контакта

**Информация о веб-источнике**

В параметр `web_source_info` можно добавить информацию, которая связана с веб-инсточником, например, если пользователь предоставил согласие через форму, на сайте, после которой перешел в чат-бот.

```json
{
  "ip_address": "IP-адрес пользователя",
  "user_agent": "User-Agent браузера"
  // другие парараметры
}
```

Ключи `ip_address` и `user_agent` в данном случае передавать обязательно. Если используются формы Fasttrack, то значения для `ip_address` и `user_agent` автоматически доступны в контексте сценария после заполнения формы.

**Информация о пользователе**

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

```json
{
  "chat_uuid": "UUID чата",
  "channel_name": "Название канала"
  // другие парараметры
}
```

Ключи `chat_uuid` и `channel_name` в данном случае передавать обязательно.

**Результат**

Процедура возвращает UUID созданной записи согласия в виде строки.

## Примеры

<details>

<summary>Базовый пример</summary>

```python
{% consent.register 
   consent_type="PRIVACY_POLICY" 
   event_type="CONSENT_GIVEN" 
   consent_mode="FORM_SUBMISSION" 
   document_type="TERMS_OF_SERVICE" 
   as consent_uuid %}
```

</details>

<details>

<summary>Пример 1: С дополнительными параметрами</summary>

```python
{% createobj web_source_info %}
{
  "ip_address": "127.0.0.1",
  "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
{% endcreateobj %}

{% createobj chat_source_info %}
{
  "chat_uuid": "a2413922-420e-427f-9289-e8199b9d458c",
  "channel_name": "Telegram"
}
{% endcreateobj %}

{% consent.register 
   consent_type="PRIVACY_POLICY" 
   event_type="CONSENT_GIVEN" 
   consent_mode="FORM_SUBMISSION" 
   document_type="TERMS_OF_SERVICE" 
   document_title="Политика конфиденциальности" 
   document_version="2.1" 
   document_date="2025-05-28"|as_datetime 
   document_url="https://example.com/privacy-policy" 
   web_source_info=web_source_info 
   chat_source_info=chat_source_info 
   contact_external_id="user_12345" 
   as consent_uuid %}
```

</details>

<details>

<summary>Пример 2: Отзыв согласия</summary>

```python
{% consent.register 
   consent_type="MARKETING_COMMUNICATIONS" 
   event_type="CONSENT_WITHDRAWN" 
   consent_mode="EXPLICIT_CLICK" 
   document_type="PRIVACY_POLICY" 
   document_title="Политика конфиденциальности" 
   document_version="2.1" 
   as withdrawal_uuid %}
```

</details>

<details>

<summary>Пример 3: Уведомление об ознакомлении</summary>

```python
{% consent.register 
   consent_type="DOCUMENT" 
   event_type="ACKNOWLEDGED" 
   consent_mode="FORM_SUBMISSION" 
   document_type="PARTICIPATION_RULES" 
   document_title="Правила участия в акции" 
   document_version="1.0" 
   document_date="2025-06-01"|as_datetime 
   document_url="https://example.com/rules" 
   as acknowledgment_uuid %}
```

</details>

## Справочники

### Режим согласия (consent\_mode)

* `EXPLICIT_CLICK` – Явно нажал кнопку или чекбокс
* `FORM_SUBMISSION` – Получено в момент отправки формы
* `IMPLICIT_VIA_CONTINUED_USE` – Продолжил пользоваться, зная условия
* `API_CALL` – Передано через API от внешней системы
* `EXPLICIT_CODE_ENTRY` – Подтверждено через код (SMS, email, telegram gateway)

### Тип согласия (consent\_type)

* `PRIVACY_POLICY` – Политика конфиденциальности
* `TERMS_OF_SERVICE` – Пользовательское соглашение
* `PERSONAL_DATA_PROCESSING` – Обработка персональных данных (включая хранение)
* `DOCUMENT` – Информационный документ (условия, правила участия, регламент)
* `MARKETING_COMMUNICATIONS` – Рекламные рассылки
* `SERVICE_NOTIFICATIONS` – Нерекламные уведомления (напоминания, статус заказов)
* `THIRD_PARTY_SHARING` – Передача данных партнерам (аналитика, реклама)
* `COOKIES_AND_TRACKING` – Сбор данных через cookies/трекинг
* `PAYMENT_PROCESSING` – Обработка платежей и хранение платёжных данных
* `AGE_VERIFICATION` – Подтверждение возраста (18+)

### Тип документа (document\_type)

* `PRIVACY_POLICY` – Политика конфиденциальности
* `TERMS_OF_SERVICE` – Пользовательское соглашение
* `PARTICIPATION_RULES` – Правила участия
* `SECURITY_POLICY` – Политика безопасности
* `USAGE_INSTRUCTION` – Инструкция по использованию
* `UPDATE_NOTICE` – Уведомление об изменениях
* `CODE_OF_CONDUCT` – Правила поведения
* `INFORMATION_NOTICE` – Юридически значимое уведомление или разъяснение

### Тип события (event\_type)

* `CONSENT_GIVEN` – Согласие предоставлено
* `CONSENT_EXPIRED` – Автоматическое прекращение (истек срок)
* `CONSENT_UPDATED` – Согласие обновлено
* `CONSENT_WITHDRAWN` – Отзыв ранее данного согласия
* `ACKNOWLEDGED` – Ознакомлен
