Представьте: ваше мобильное приложение с миллионом пользователей в EU. DPA запрашивает Records of Processing Activities — доказательство compliance. Если журнала нет, штраф до 4% годового оборота. Именно это произошло с одним из наших клиентов: после аудита они получили предписание за недокументированную передачу данных в рекламную сеть. Мы внедрили журнал за 3 дня, и при повторной проверке штрафа удалось избежать.
GDPR (Article 30) требует не просто получить согласие, а фиксировать каждую операцию: когда, какие данные, для каких целей и на каком основании. Для B2C приложений с аудиторией в EU это означает хранить машиночитаемый журнал. Мы предлагаем полный цикл: аудит текущего стека, проектирование схемы, реализацию middleware и клиентского интерфейса.
На практике 60% приложений, которые мы проверяли, не логируют передачу данных аналитическим сервисам. А это прямое нарушение. Наше решение автоматически перехватывает такие операции и фиксирует их в append-only журнале.
Какие операции нужно журналировать?
Операции обработки, которые обязательно логировать:
- Сбор данных при регистрации: поля, timestamp, правовое основание (consent/contract/legitimate interest)
- Передача третьим лицам: отправка email в Mailchimp, аналитика в Firebase, реклама в AdMob — каждая передача с указанием получателя и цели
- Изменение данных: обновление профиля, email, телефона
- Удаление: по запросу пользователя или по истечении retention period
- Доступ: когда и кем из сотрудников просматривались данные (для корпоративных приложений)
Почему журнал должен быть append-only?
Редактирование или удаление записей журнала само по себе нарушение GDPR. Поэтому журнал — append-only. Записи не изменяются и не удаляются. Retention журнала — минимум 3 года. Для мобильных приложений с высокой частотой операций это может быть от 50 000 до 500 000 записей в месяц. Правильная индексация (user_id, operation_type, created_at) обеспечивает быстрый поиск при аудите.
Схема журнала
data_processing_logs:
id UUID PK
user_id UUID FK NULLABLE -- null для анонимных операций
operation_type VARCHAR -- 'collect', 'transfer', 'update', 'delete', 'access'
data_categories TEXT[] -- ['email', 'location', 'purchase_history']
purpose VARCHAR -- 'analytics', 'marketing', 'service_provision'
legal_basis VARCHAR -- 'consent', 'contract', 'legitimate_interest'
third_party VARCHAR NULLABLE -- 'firebase', 'mailchimp', null
actor_type VARCHAR -- 'user', 'system', 'staff'
actor_id UUID NULLABLE -- ID сотрудника при actor_type='staff'
ip_address INET NULLABLE
metadata JSONB -- доп. контекст
created_at TIMESTAMPTZ DEFAULT NOW()
Подробнее о выборе типа данных
Для категорий данных используем массив строк, а не отдельную таблицу — это ускоряет запись. Индексы по user_id и operation_type снижают latency поиска до 10 мс при 1 млн записей.Как реализовать журнал на сервере?
Удобнее всего реализовать через middleware/аспекты, а не вручную в каждом сервисе. Это снижает риск пропустить операцию. Пример на Django:
class DataProcessingLogMiddleware:
LOGGED_ENDPOINTS = {
'POST /api/auth/register': ('collect', ['email', 'name'], 'contract'),
'PUT /api/user/profile': ('update', ['profile_data'], 'contract'),
'DELETE /api/user': ('delete', ['all_user_data'], 'legal_obligation'),
}
def process_response(self, request, response):
key = f"{request.method} {request.path}"
if key in self.LOGGED_ENDPOINTS and response.status_code < 400:
op_type, categories, basis = self.LOGGED_ENDPOINTS[key]
DataProcessingLog.objects.create(
user_id=request.user.id if request.user.is_authenticated else None,
operation_type=op_type,
data_categories=categories,
legal_basis=basis,
ip_address=get_client_ip(request)
)
return response
Что видит пользователь в разделе «Мои данные»?
Пользователь по GDPR имеет право увидеть, как обрабатывались его данные. В приложении — раздел «Настройки → Приватность → История обработки данных». Показываем отфильтрованный журнал: только записи с user_id текущего пользователя, без технических деталей, с понятными описаниями операций.
struct DataProcessingEntry: Identifiable, Decodable {
let id: UUID
let operationDescription: String // "Ваши данные переданы аналитическому сервису"
let date: Date
let dataCategories: [String]
let purpose: String
}
Третьи стороны указываем по официальным названиям (Google Analytics, Meta Pixel) — пользователь должен узнать сервис.
Интеграция с consent management
При отзыве согласия на конкретную цель (например, маркетинг) — создаём запись в журнале operation_type='consent_revoked' и прекращаем передачу данных соответствующим третьим лицам. Это документирует момент отзыва — важно при аудите DPA.
Как мы это делаем: этапы внедрения
- Аудит потоков данных — выявляем все точки сбора и передачи. Анализируем код, конфиги сетевых запросов, интеграции с SDK (Firebase, AppsFlyer).
- Проектирование схемы журнала под ваш стек (PostgreSQL, MongoDB, BigQuery). Выбираем оптимальную модель с учётом нагрузки.
- Реализация middleware/аспектов для автоматического логирования ключевых операций. Настраиваем триггеры на critical endpoints.
- API для чтения истории пользователем — с фильтрацией, пагинацией, правами доступа.
- Разработка клиентского UI на SwiftUI / Jetpack Compose / Flutter — показываем понятную историю.
- Интеграция с CMP (consent management platform) и отработка отзыва согласия.
- Документация API и аудита, обучение команды.
Сроки и гарантия
| Этап | Срок |
|---|---|
| Аудит потоков данных | 1–2 дня |
| Проектирование схемы | 0.5–1 день |
| Middleware + API | 2–3 дня |
| Клиентский UI | 1–2 дня |
| Интеграция с CMP | 1 день |
| Документация | 0.5 дня |
Полный проект от 5 до 10 дней. Предоставляем гарантию на соответствие требованиям GDPR и помощь при DPA-аудите. Наш опыт — более 5 лет в разработке мобильных приложений и compliance-решений. Получите консультацию: пришлите описание вашего приложения, мы оценим объём работ.
Свяжитесь с нами для аудита — проверим ваш текущий журнал за 1 день. Закажите внедрение журнала обработки данных и защитите бизнес от штрафов.
Сравнение подходов к логированию
| Подход | Трудозатраты | Риск пропуска операций | Гибкость |
|---|---|---|---|
| Вручную в каждом сервисе | Высокие | Высокий | Низкая |
| Middleware/аспекты | Средние | Низкий | Высокая |
| DPA-фреймворк (OneTrust) | Низкие | Средний | Средняя |
Для большинства проектов мы рекомендуем middleware-подход. Он даёт баланс между стоимостью внедрения и полнотой покрытия. При высокой частоте изменений в API можно перейти на декларативный DPA-фреймворк.







