---
name: bsp-protection-pd
description: "Use this skill when the agent needs to check or record consent of a personal data subject for compliance with Russian Federal Law 152-FZ on personal data, destroy or hide personal data of subjects, register access events to personal data, integrate the personal data protection subsystem into subject list forms (consent column, hidden subjects filter), override personal data destruction handlers in an applied configuration, or query the storage period and destruction date of personal data. Do not use for unrelated data protection, access management (delegate to bsp-users-access), subsystem connectivity checks (delegate to bsp-base-common), or printing/email/document flows (delegate to bsp-print-reports)."
metadata:
  scope: bsp-3.1.11
  version: "3.1.11"
  layer: L3
  related_subsystems:
    - ЗащитаПерсональныхДанных
  related_skills:
    - bsp-fundamentals
    - bsp-base-common
    - bsp-users-access
---

# BSP Protection of Personal Data (152-FZ compliance)

Скил по подсистеме «Защита персональных данных» (152-ФЗ): согласия субъектов, уничтожение/скрытие ПДн, регистрация событий доступа, встраивание подсистемы в формы списков субъектов и прикладные переопределяемые обработчики жизненного цикла ПДн.

## When to use

- Нужно программно узнать, есть ли у субъекта действующее согласие на обработку ПДн в указанной организации на дату (перед записью карточки, при печати, при формировании отчёта).
- Нужно определить, что объект содержит уничтоженные ПДн, чтобы скрыть его в списках/отчётах/печатных формах.
- Нужно инициировать уничтожение ПДн субъекта по истечении срока хранения или отзыве согласия (через `УничтожитьПерсональныеДанныеСубъектов`) или просто пометить данные как скрытые.
- Нужно добавить команду печати согласия на обработку ПДн в форму объекта-субъекта (из переопределения `ДобавитьКомандыПечати` прикладной конфигурации).
- Нужно встроить подсистему в форму списка субъектов: добавить колонку «ОтсутствуетСогласие» с картинкой, команду «ПоказыватьСоСкрытымиПДн», обработку оповещений об уничтожении ПДн из формы объекта/списка.
- Нужно в прикладной конфигурации переопределить логику уничтожения/скрытия ПДн (заполнить состав персональных данных, области данных, отказаться от уничтожения конкретного субъекта, выполнить дополнительные действия до/после уничтожения).
- Нужно узнать дату уничтожения ПДн субъекта или срок хранения ПДн (например, для информирования пользователя или для расчёта даты следующей очистки).
- Нужно изменить настройки уничтожения ПДн программно (включить/выключить функциональную опцию) из прикладного кода, в том числе из длительной операции.
- Нужно настроить регистрацию события «Доступ.Доступ» к ПДн (включить/выключить, опционально — по категориям данных) и узнать текущее состояние.

## Не использовать, если

- Задача про **управление доступом и правами** (роли, RLS, группы доступа, внешние пользователи) — это `bsp-users-access`.
- Нужно проверить, подключена ли подсистема БСП в конфигурации, или получить свой общий модуль `ОбщегоНазначения` (подсистемы/функциональные опции, безопасное хранилище, файлы, строки) — это `bsp-base-common`.
- Нужно **напечатать** что-то (формирование табличного документа, печатные формы объектов, команды печати в форме — кроме единственной команды «Согласие на обработку ПДн», которую добавляет эта подсистема) — это `bsp-print-reports`.
- Нужно отправить e-mail/SMS субъекту об уничтожении/истечении согласия — это `bsp-comms` или `bsp-users-access` (в части уведомлений).
- Нужно спроектировать процесс миграции данных при переходе на новую версию БСП (обработчики `ПриДобавленииОбработчиковОбновления`) — это `bsp-update`/L2 по обновлению ИБ, а не этот скил.
- Задача — очистка **помеченных на удаление** объектов, не связанных с ПДн — это `bsp-admin-tools`.

## Core concepts

### Закон и терминология

Подсистема «Защита персональных данных» обеспечивает соответствие требованиям **Федерального закона от 27.07.2006 № 152-ФЗ** «О персональных данных». Ключевые сценарии:

- **Согласие субъекта** — документ `СогласиеНаОбработкуПерсональныхДанных`; отзыв — `ОтзывСогласияНаОбработкуПерсональныхДанных`. Сведения о действующих согласиях хранятся в регистре сведений `СогласияНаОбработкуПерсональныхДанных`.
- **Категории ПДн** — ФИО, паспортные данные, ИНН, СНИЛС, адрес, контакты и т. п. Состав категорий для конкретной конфигурации **настраивается прикладным разработчиком** в переопределяемом модуле (`ЗащитаПерсональныхДанныхПереопределяемый.ЗаполнитьСведенияОПерсональныхДанных`).
- **Срок хранения** — заполняется для каждого субъекта (например, в карточке физического лица). Регламентное задание `РасчетСроковХраненияПерсональныхДанных` рассчитывает дату уничтожения.
- **Уничтожение** — безвозвратное удаление ПДн субъекта в случаях, перечисленных в ст. 21 закона (отзыв согласия, истечение срока, достижение цели обработки, неправомерная обработка). Фиксируется актом `АктОбУничтоженииПерсональныхДанных`. Запись о факте уничтожения попадает в регистр `УничтоженныеПерсональныеДанные`.
- **Скрытие** — программная пометка ПДн как скрытых (через `СкрытьПерсональныеДанныеСубъектов`) для отображения в форме списка фильтром «Показывать со скрытыми ПДн». Внутри `Скрыть…` сводится к `Уничтожить…` (см. реализацию).
- **События доступа** — 6 типов: вход, выход, аутентификация, отказ в аутентификации, доступ к ПДн, отказ в доступе к ПДн. Регистрация событий доступа к ПДн — опциональная, включается администратором через `УстановитьИспользованиеСобытияДоступ`.

### Семейство модулей

Подсистема `ЗащитаПерсональныхДанных` (см. `<Subsystems>/ЗащитаПерсональныхДанных.xml`) физически состоит из семи общих модулей с предсказуемой суффиксной системой:

| Модуль | Контекст | Назначение |
|---|---|---|
| `ЗащитаПерсональныхДанных` | Сервер | Основной API: уничтожение, скрытие, проверки, события доступа, обновление ИБ, формы |
| `ЗащитаПерсональныхДанныхКлиент` | Клиент | Обработчики оповещений форм, открытие формы согласия, клиентская часть настроек |
| `ЗащитаПерсональныхДанныхВызовСервера` | Клиент+Сервер (с вызовом сервера) | Запуск длительной операции смены настроек, серверные обёртки для клиента |
| `ЗащитаПерсональныхДанныхПереопределяемый` | Сервер | **Хуки** для прикладной конфигурации (заполнение состава ПДн, до/после уничтожения) — реализуются в прикладном коде, **не вызываются** напрямую |
| `ЗащитаПерсональныхДанныхПовтИсп` | Сервер+Кэш | Кэшированные справочники (типы субъектов, имена источников, категории) |
| `ЗащитаПерсональныхДанныхУничтожениеПовтИсп` | Сервер+Кэш | Кэшированные параметры для уничтожения |
| `ЗащитаПерсональныхДанныхСлужебный` | Сервер | ⚠️ **Служебный API** (обратная совместимость не гарантируется). Прямой вызов из прикладного кода — только если стабильного аналога нет |

Определяемые типы: `СубъектПерсональныхДанных` (ссылка), `СубъектПерсональныхДанныхОбъект` (объект).

### Ключевые регистры сведений

- `СогласияНаОбработкуПерсональныхДанных` — действующие и истёкшие согласия.
- `УничтоженныеПерсональныеДанные` — субъекты с уничтоженными ПДн + дата уничтожения.
- `ОбластиПерсональныхДанных` — защищаемые области (конфигуратор/администратор).
- `СрокиХраненияПерсональныхДанных`, `СубъектыДляРасчетаСроковХранения` — расчёт сроков.

### Документы и обработки

- `СогласиеНаОбработкуПерсональныхДанных`, `ОтзывСогласияНаОбработкуПерсональныхДанных`, `АктОбУничтоженииПерсональныхДанных` — журнал `СогласияНаОбработкуПерсональныхДанных`.
- `Обработка.УничтожениеПерсональныхДанных` — интерактивный список субъектов под уничтожение.
- `Обработка.СкрытиеКонфиденциальнойИнформации` — техническая обработка, используемая методом `УничтожитьПерсональныеДанныеСубъектов` внутри транзакции.

### Функциональная опция

`ИспользоватьСкрытиеПерсональныхДанныхСубъектов` (константа) — глобальный выключатель уничтожения/скрытия ПДн. По умолчанию выключен. Большинство методов подсистемы (`ЭтоОбъектСУничтоженнымиПерсональнымиДанными`, `СкрытьПерсональныеДанныеСубъектов`, добавление колонки в список) корректно отрабатывают и при выключенной опции (возвращают `Ложь` / не добавляют колонку) — но **настройки событий доступа и регламентное задание расчёта сроков** имеют смысл только при включённой опции.

### Устаревшие методы (deprecated)

`ЭтоОбъектСоСкрытымиПерсональнымиДанными` и `ИзменитьНастройкиСкрытияПерсональныхДанных` помечены в коде как «Устарела». Используйте `ЭтоОбъектСУничтоженнымиПерсональнымиДанными` и `ИзменитьНастройкиУничтоженияПерсональныхДанных` соответственно.

## Key methods

Таблица — **10 строк** (верхняя граница L3 по §3 плана): шесть стабильных методов основного модуля + одна стабильная связка из 4 хуков встраивания в форму + одна ⚠️-переопределяемая связка из 3 хуков жизненного цикла + один ⚠️-служебный метод. Дополнительные геттеры (`ДатаУничтоженияДанныхСубъекта`, `СрокХраненияПерсональныхДанныхСубъекта`, `ИспользованиеСобытияДоступ`) перечислены в `## How to explore deeper` — для L3 это служебный материал.

| Метод | Сигнатура | Сервер/Клиент | Стабильность | Назначение | Пример вызова |
|---|---|---|---|---|---|
| `ЗащитаПерсональныхДанных.ДействующееСогласиеНаОбработкуПерсональныхДанных` | `ДействующееСогласиеНаОбработкуПерсональныхДанных(Субъект, Организация = Неопределено, Знач Дата = Неопределено, ИсключаемыйРегистратор = Неопределено)` | Сервер | стабильный | Возвращает `Неопределено` или `Структура` с полями `ДатаПолучения`, `СрокДействия`, `ДокументОснование` — действующее согласие субъекта на дату. Запрос идёт в привилегированном режиме | `ЗащитаПерсональныхДанных.ДействующееСогласиеНаОбработкуПерсональныхДанных(ФизЛицо, Организация, ТекущаяДатаСеанса())` |
| `ЗащитаПерсональныхДанных.ИспользоватьУничтожениеПерсональныхДанныхСубъектов` | `ИспользоватьУничтожениеПерсональныхДанныхСубъектов()` | Сервер | стабильный | Геттер функциональной опции `ИспользоватьСкрытиеПерсональныхДанныхСубъектов`. `Ложь` — подсистема уничтожения выключена | `Если ЗащитаПерсональныхДанных.ИспользоватьУничтожениеПерсональныхДанныхСубъектов() Тогда ...` |
| `ЗащитаПерсональныхДанных.УничтожитьПерсональныеДанныеСубъектов` | `УничтожитьПерсональныеДанныеСубъектов(Знач Субъекты)` | Сервер | стабильный | Безвозвратное уничтожение ПДн (транзакция + журнал регистрации + перехват ошибок). `Субъекты` — ссылка или массив одного типа. Возвращает `Неопределено` или таблицу с полями `ИмяОбъекта, Поле, Категория, ИдентификаторОбъекта` | `ЗащитаПерсональныхДанных.УничтожитьПерсональныеДанныеСубъектов(МассивСубъектов)` |
| `ЗащитаПерсональныхДанных.СкрытьПерсональныеДанныеСубъектов` | `СкрытьПерсональныеДанныеСубъектов(Знач Субъекты, СообщатьОбИсключениях = Ложь)` | Сервер | стабильный | Помечает ПДн как скрытые (внутри сводится к `УничтожитьПерсональныеДанныеСубъектов`). Используется для пометки из прикладного кода без вызова длительной операции | `ЗащитаПерсональныхДанных.СкрытьПерсональныеДанныеСубъектов(Субъект)` |
| `ЗащитаПерсональныхДанных.ЭтоОбъектСУничтоженнымиПерсональнымиДанными` | `ЭтоОбъектСУничтоженнымиПерсональнымиДанными(Знач Объект)` | Сервер | стабильный | `Истина`, если у субъекта уничтожены ПДн (по регистру `УничтоженныеПерсональныеДанные`); для не-субъекта проверяет наличие уничтоженных ПДн в подчинённых реквизитах | `ЗащитаПерсональныхДанных.ЭтоОбъектСУничтоженнымиПерсональнымиДанными(ДокументОбъект)` |
| `ЗащитаПерсональныхДанных.ДобавитьКомандуПечатиСогласияНаОбработкуПерсональныхДанных` | `ДобавитьКомандуПечатиСогласияНаОбработкуПерсональныхДанных(КомандыПечати)` | Сервер | стабильный | Добавляет в коллекцию команд печати объекта-субъекта команду «Согласие на обработку ПДн...». Вызывается из переопределения `ДобавитьКомандыПечати` прикладной конфигурации | `ЗащитаПерсональныхДанных.ДобавитьКомандуПечатиСогласияНаОбработкуПерсональныхДанных(КомандыПечати)` |
| `ЗащитаПерсональныхДанных.УстановитьИспользованиеСобытияДоступ` | `УстановитьИспользованиеСобытияДоступ(Использование, КатегорииДанных = Неопределено)` | Сервер | стабильный | Включает/выключает регистрацию событий «Доступ.Доступ» к ПДн. `КатегорииДанных` — необязательный массив имён категорий (по умолчанию — все категории из переопределяемого `ЗаполнитьСведенияОПерсональныхДанных`) | `ЗащитаПерсональныхДанных.УстановитьИспользованиеСобытияДоступ(Истина)` |
| `ЗащитаПерсональныхДанных.ПриСозданииНаСервереФормыСписка` + `ПриПолученииДанныхНаСервере` + `ЗащитаПерсональныхДанныхКлиент.ОбработкаОповещенияФормы*` | `ПриСозданииНаСервереФормыСписка(Форма, СписокФормы)` / `ПриПолученииДанныхНаСервере(Настройки, Строки)` / `ОбработкаОповещенияФормы(Форма, ИмяСобытия)` / `ОбработкаОповещенияФормыСписка(СписокФормы, ИмяСобытия)` | Сервер / Клиент | стабильный (связка из 4 хуков) | Встраивание подсистемы в форму списка субъектов: колонка «ОтсутствуетСогласие» с картинкой, команда «ПоказыватьСоСкрытымиПДн», автообновление списка при уничтожении ПДн в другой форме. **Все 4 вызова обязательны** — без одного из них подсистема работает «наполовину» | См. Pattern 2 |
| `ЗащитаПерсональныхДанныхПереопределяемый.ПередУничтожениемПерсональныхДанных` + `ПослеУничтоженияПерсональныхДанных` + `ЗаполнитьСведенияОПерсональныхДанных` | `ПередУничтожениемПерсональныхДанных(Объект, Субъекты, ВыполнитьЗаписьОбъекта)` / `ПослеУничтоженияПерсональныхДанных(Объект, Субъекты)` / `ЗаполнитьСведенияОПерсональныхДанных(ТаблицаСведений)` | Сервер | ⚠️ **переопределяемый** (не вызывать, **реализовать** в прикладной конфигурации) | Хуки жизненного цикла ПДн. `ПередУничтожением` — добавить субъектов в исключения / отказаться от записи. `ПослеУничтожения` — выполнить доп. действия (уведомления). `ЗаполнитьСведенияОПерсональныхДанных` — обязательная реализация в прикладном коде, иначе уничтожение и регистрация событий доступа работают «вхолостую» | (Реализация в `ЗащитаПерсональныхДанныхПереопределяемый` прикладной конфигурации) |
| `ЗащитаПерсональныхДанныхСлужебный.СведенияОПерсональныхДанных` | `СведенияОПерсональныхДанных()` | Сервер | ⚠️ **служебный** | Прямое чтение таблицы состава ПДн (если стабильного `ЗаполнитьСведенияОПерсональныхДанных` недостаточно). Обратная совместимость **не гарантируется** | `ЗащитаПерсональныхДанныхСлужебный.СведенияОПерсональныхДанных()` |

**Примечание:** геттеры `ДатаУничтоженияДанныхСубъекта`, `СрокХраненияПерсональныхДанныхСубъекта`, `ИспользованиеСобытияДоступ` (все — стабильные, сервер) опущены из таблицы для компактности. Они перечислены в `## How to explore deeper` и в `## Core concepts` (`Ключевые регистры сведений`).

## Patterns

### 1. Проверка наличия действующего согласия перед записью

```bsl
// В модуле объекта-субъекта, в обработчике ПередЗаписью
Процедура ПередЗаписью(Отказ)
    
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    
    Если Не ЭтоНовый() И Не ЭтоГруппа Тогда
        
        Согласие = ЗащитаПерсональныхДанных.ДействующееСогласиеНаОбработкуПерсональныхДанных(
            Ссылка, Организация, ТекущаяДатаСеанса());
        
        Если Согласие = Неопределено Тогда
            ОбщегоНазначения.СообщитьПользователю(
                НСтр("ru = 'Нет действующего согласия на обработку ПДн. Запись не рекомендуется.'"),
                ,
                ,
                ,
                Отказ);
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры
```

Запрос выполняется в привилегированном режиме — обход RLS. Возвращает `Неопределено`, если согласия нет или срок истёк; иначе `Структура` с датами и документом-основанием.

### 2. Интеграция подсистемы в форму списка субъектов

```bsl
// В форме списка справочника ФизическиеЛица
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ЗащитаПерсональныхДанных.ПриСозданииНаСервереФормыСписка(ЭтаФорма, Элементы.Список);
    
КонецПроцедуры

&НаСервере
Процедура ПриПолученииДанныхНаСервере(ИмяСписка, Настройки, Строки)
    
    ЗащитаПерсональныхДанных.ПриПолученииДанныхНаСервере(Настройки, Строки);
    
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    
    ЗащитаПерсональныхДанныхКлиент.ОбработкаОповещенияФормыСписка(Элементы.Список, ИмяСобытия);
    
КонецПроцедуры
```

Без всех трёх вызовов подсистема работает в форме «наполовину» (например, есть колонка, но иконка согласия не подсвечивается, или наоборот).

### 3. Программное уничтожение ПДн субъекта

```bsl
// В обработчике проведения акта об уничтожении ПДн
Процедура ОбработкаПроведения(Отказ, Режим)
    
    // ... движения по акту ...
    
    Если Не Отказ Тогда
        // Физически уничтожаем ПДн указанных субъектов
        ЗащитаПерсональныхДанных.УничтожитьПерсональныеДанныеСубъектов(Субъекты);
    КонецЕсли;
    
КонецПроцедуры
```

Операция необратима: после успешного завершения транзакции в РС `УничтоженныеПерсональныеДанные` появляется запись, и метод `ЭтоОбъектСУничтоженнымиПерсональнымиДанными` возвращает `Истина`.

### 4. Прикладной хук «отказаться от уничтожения конкретного субъекта»

```bsl
// В модуле ЗащитаПерсональныхДанныхПереопределяемый прикладной конфигурации
Процедура ПередСкрытиемПерсональныхДанныхСубъектов(Субъекты, ТаблицаИсключений, ОтказОтСкрытия) Экспорт
    
    Для Каждого Субъект Из Субъекты Цикл
        // Не уничтожать ПДн, если субъект — действующий сотрудник
        Если СубъектЯвляетсяДействующимСотрудником(Субъект) Тогда
            НоваяСтрока = ТаблицаИсключений.Добавить();
            НоваяСтрока.Субъект = Субъект;
            НоваяСтрока.ПричинаОтменыУничтожения = НСтр("ru = 'Субъект является действующим сотрудником.'");
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры
```

Этот хук вызывается **самой подсистемой** перед уничтожением; прикладной код только **реализует** его в своём `ЗащитаПерсональныхДанныхПереопределяемый`. Прямой вызов из прикладного кода не нужен.

## Anti-patterns

### ❌ Прямой вызов методов из `ЗащитаПерсональныхДанныхСлужебный`

```bsl
// ❌ Служебный API — обратная совместимость не гарантируется
Сведения = ЗащитаПерсональныхДанныхСлужебный.СведенияОПерсональныхДанных();
```

```bsl
// ✅ Если нужно получить состав ПДн — реализовать его через переопределяемый хук
//    ЗащитаПерсональныхДанныхПереопределяемый.ЗаполнитьСведенияОПерсональныхДанных.
//    Чтение в прикладном коде: использовать хук + временное хранилище или копию.
//    Если позарез нужно — вызывать с явной отметкой ⚠️:
ТаблицаСведений = ЗащитаПерсональныхДанныхСлужебный.СведенияОПерсональныхДанных(); // ⚠️ Служебный API
```

### ❌ Универсальный «принудительный» DELETE через прямой запрос к регистрам

```bsl
// ❌ Обходит обработчики подсистемы, ломает регистрацию событий доступа и связи
НаборЗаписей = РегистрыСведений.УничтоженныеПерсональныеДанные.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Субъект.Установить(ФизЛицо);
НаборЗаписей.Записать();
```

```bsl
// ✅ Только через подсистему — она сама очистит данные в объектах
ЗащитаПерсональныхДанных.УничтожитьПерсональныеДанныеСубъектов(ФизЛицо);
```

### ❌ Использование устаревших методов `СоСкрытымиПДн`

```bsl
// ❌ Устарел с версии 3.1.3 (см. исходник: «Устарела. Следует использовать ...УничтоженнымиПерсональнымиДанными»)
Если ЗащитаПерсональныхДанных.ЭтоОбъектСоСкрытымиПерсональнымиДанными(Объект) Тогда
```

```bsl
// ✅ Актуальный стабильный API
Если ЗащитаПерсональныхДанных.ЭтоОбъектСУничтоженнымиПерсональнымиДанными(Объект) Тогда
```

### ❌ Переопределение методов основного модуля `ЗащитаПерсональныхДанных`

```bsl
// ❌ В прикладной конфигурации НЕ создавать свой «ЗащитаПерсональныхДанных»
//    с перезаписью стабильных методов — это сломает связи с другими подсистемами
```

```bsl
// ✅ Расширять только через ЗащитаПерсональныхДанныхПереопределяемый
//    (реализовать хуки ПередУничтожением / ПослеУничтожения /
//     ЗаполнитьСведенияОПерсональныхДанных / ЗаполнитьОбластиПерсональныхДанных)
```

### ❌ Игнорирование функциональной опции `ИспользоватьСкрытиеПерсональныхДанныхСубъектов`

```bsl
// ❌ Вызывать уничтожение без проверки ФО — операция может пройти «втихую»
//    и сбить настройки, если ФО ещё не включена администратором
Для Каждого Субъект Из Субъекты Цикл
    ЗащитаПерсональныхДанных.УничтожитьПерсональныеДанныеСубъектов(Субъект);
КонецЦикла;
```

```bsl
// ✅ Сначала проверить, что ФО включена, и при необходимости предложить пользователю включить
Если Не ЗащитаПерсональныхДанных.ИспользоватьУничтожениеПерсональныхДанныхСубъектов() Тогда
    ВызватьИсключение НСтр("ru = 'Включите опцию уничтожения ПДн в настройках программы.'");
КонецЕсли;
```

### ❌ Забыть подключить `ОбработкаОповещения` в форме списка

```bsl
// ❌ Колонка с иконкой согласия не будет обновляться после уничтожения
//    в другой форме / фоне
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    // Нет вызова подсистемы
КонецПроцедуры
```

```bsl
// ✅ Делегировать обработку оповещений подсистеме
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    ЗащитаПерсональныхДанныхКлиент.ОбработкаОповещенияФормыСписка(Элементы.Список, ИмяСобытия);
КонецПроцедуры
```

## How to explore deeper

### Модули семейства (имена для поиска в дереве конфигурации)

- `ЗащитаПерсональныхДанных` (сервер) — основной модуль: `#Область ПрограммныйИнтерфейс`, `#Область СлужебныйПрограммныйИнтерфейс` (обновление ИБ, обмен данными), `#Область СлужебныеПроцедурыИФункции`.
- `ЗащитаПерсональныхДанныхКлиент` (клиент) — `#Область ПрограммныйИнтерфейс` (обработчики оповещений форм, открытие формы согласия), `#Область СлужебныйПрограммныйИнтерфейс` (настройка длительной операции).
- `ЗащитаПерсональныхДанныхВызовСервера` (клиент+сервер с вызовом) — `ЗапуститьДлительнуюОперациюИзменениеНастроекУничтоженияПДн`, `НастройкиУничтоженияПерсональныхДанныхСистемы`, `СохранитьПоложениеОтбораПоказыватьСоСкрытымиПДн`, `ТипыСубъектов`.
- `ЗащитаПерсональныхДанныхПереопределяемый` (сервер) — хуки: `ЗаполнитьСведенияОПерсональныхДанных`, `ЗаполнитьОбластиПерсональныхДанных`, `ДополнитьДанныеСубъектовПерсональныхДанных`, `ДополнитьДанныеОрганизацииОператораПерсональныхДанных`, `ЗаполнитьФИОФизическогоЛица`, `ПриЗаполненииСведенийОбУничтожаемыхПерсональныхДанных`, `ПередСкрытиемПерсональныхДанныхСубъектов`, `ПередУничтожениемПерсональныхДанных`, `ПослеУничтоженияПерсональныхДанных`, `ПриРасчетеСроковХраненияПерсональныхДанных`, `ОрганизацияПоУмолчанию`.
- `ЗащитаПерсональныхДанныхПовтИсп` (сервер+кэш) — кэшированные справочники (типы субъектов, источники, категории).
- `ЗащитаПерсональныхДанныхУничтожениеПовтИсп` (сервер+кэш) — кэшированные параметры для уничтожения.
- `ЗащитаПерсональныхДанныхСлужебный` (сервер, ⚠️) — внутренний API. Не использовать из прикладного кода.

### Объекты метаданных подсистемы

- **Документы:** `СогласиеНаОбработкуПерсональныхДанных`, `ОтзывСогласияНаОбработкуПерсональныхДанных`, `АктОбУничтоженииПерсональныхДанных`.
- **Журнал документов:** `СогласияНаОбработкуПерсональныхДанных`.
- **Регистры сведений:** `СогласияНаОбработкуПерсональныхДанных`, `УничтоженныеПерсональныеДанные`, `ОбластиПерсональныхДанных`, `СрокиХраненияПерсональныхДанных`, `СубъектыДляРасчетаСроковХранения`, `СубъектыДляСкрытияПерсональныхДанных`, `УдалитьОбластиПерсональныхДанных` (устаревший).
- **Определяемые типы:** `СубъектПерсональныхДанных`, `СубъектПерсональныхДанныхОбъект`.
- **Перечисление:** `СостоянияСубъектовДляСкрытия`.
- **Константа / ФО:** `ИспользоватьСкрытиеПерсональныхДанныхСубъектов` / `ИспользоватьСкрытиеПерсональныхДанныхСубъектов`.
- **Обработки:** `УничтожениеПерсональныхДанных`, `СкрытиеКонфиденциальнойИнформации`, `ЗащитаПерсональныхДанных`.
- **Отчёты:** `СогласияНаОбработкуПерсональныхДанныхДействующие`, `СогласияНаОбработкуПерсональныхДанныхИстекающие`.
- **Роли:** `ДобавлениеИзменениеАктовОбУничтоженииПерсональныхДанных`, `ЧтениеАктовОбУничтоженииПерсональныхДанных`, `ИспользованиеОбработкиУничтожениеПерсональныхДанных`, `ДобавлениеИзменениеСогласийНаОбработкуПерсональныхДанных`, `ЧтениеСогласийНаОбработкуПерсональныхДанных`.
- **Регламентное задание:** `РасчетСроковХраненияПерсональныхДанных`.
- **Подписки на события:** `СубъектПерсональныхДанныхПередЗаписью`, `СубъектПерсональныхДанныхПриЗаписи`, `ПроверитьДатуЗапретаИзмененияПередЗаписьюДокументаЗащитаПерсональныхДанных`, `ПроверитьДатуЗапретаИзмененияПередУдалениемЗащитаПерсональныхДанных`, `УстановитьПрефиксИнформационнойБазыИОрганизацииНомеруДокументаЗащитаПДн`.

### Grep-шаблоны

```text
# Все экспортные методы основного модуля
^(Функция|Процедура) \w+.*Экспорт

# Стабильный API модуля
^#Область ПрограммныйИнтерфейс

# Служебный API (⚠️)
^#Область СлужебныйПрограммныйИнтерфейс

# Подписки на события, привязанные к субъектам
СубъектПерсональныхДанных(Перед|При)Записи

# Очистка/уничтожение
Уничтожить|Скрыть|УдалитьИнформациюОбУничтожении
```

### Где искать в дереве конфигурации

- Подсистема: `<Subsystems>/ЗащитаПерсональныхДанных.xml` (содержимое — список всех модулей, документов, регистров, ролей, обработок, отчётов).
- Документы согласий: `<Documents>/СогласиеНаОбработкуПерсональныхДанных/`, `<Documents>/ОтзывСогласияНаОбработкуПерсональныхДанных/`, `<Documents>/АктОбУничтоженииПерсональныхДанных/`.
- Модули: `CommonModules/ЗащитаПерсональныхДанных*/`.
- Регистры: `InformationRegisters/СогласияНаОбработкуПерсональныхДанных/`, `InformationRegisters/УничтоженныеПерсональныеДанные/`, `InformationRegisters/ОбластиПерсональныхДанных/`.
- Определяемый тип субъекта: `<DefinedTypes>/СубъектПерсональныхДанных.xml` (состав типов — какие справочники/документы являются субъектами).
