Руководство для разработчиков и контрибьюторов¶
Обязательные правила при изменениях, затрагивающих персональные данные, согласия или публичные тексты.
1. Что нельзя нарушать¶
| Требование | Причина | Проверка |
|---|---|---|
Веб-аналитика только при konstructorium_analytics_consent === granted |
152-ФЗ, политика cookie | src/test/webAnalyticsTracker.test.js, ручной Network без batch до согласия |
Регистрация без privacy_consent и terms_accepted → 400 |
Фиксация согласия | tests/auth_service/test_legal_consent.py |
Checkout без offer_accepted → 400 |
Оферта / ЗоЗПП | tests/order_service/test_checkout_legal.py |
| Не логировать пароли, OTP, полные cookie в открытом виде | Безопасность ПДн | code review |
| Не коммитить реальные ПДн в тесты/дампы | 152-ФЗ, CONTRIBUTING | CI, ревью |
2. Карта кода (источник истины для UI)¶
Подробнее о маршрутах и env: документация frontend.
| Компонент / модуль | Назначение |
|---|---|
frontend/src/content/legal/ |
Тексты RU/EN для /legal/:slug |
frontend/src/config/legalConfig.js |
Версия, оператор, LEGAL_CONSENT_VERSION |
frontend/src/components/AnalyticsConsentBanner.jsx |
Баннер cookie/аналитики |
frontend/src/services/webAnalyticsTracker.js |
page_view, batch, gating |
frontend/src/components/AnalyticsRouteTracker.jsx |
SPA page views |
Register.jsx, Cart.jsx, BecomeSeller.jsx, CreateProduct.jsx |
Чекбоксы согласия |
ProfilePrivacySection.jsx |
Отзыв аналитики, запросы по ПДн |
user_service → UserLegalConsent, PersonalDataRequest |
Аудит согласий в БД |
auth_service → регистрация + record_registration_legal_consent |
Согласие при signup |
order_service → checkout + record_offer_acceptance |
Оферта при заказе |
analytics_service |
Ingest /api/analytics/events/batch/, /consent/ |
3. Версионирование документов¶
При существенном изменении юридического текста:
- Обновить
versionиeffectiveDateв модуляхfrontend/src/content/legal/ru/*.jsи зеркалеen/. - Обновить соответствующий файл в
docs/legal/*.md(см. document-sync.md). - Увеличить
VITE_LEGAL_DOCUMENT_VERSION(и задеплоить env). - Учесть: уже зарегистрированные пользователи приняли старую версию — для критичных изменений может потребоваться повторный запрос согласия (отдельная задача продукта).
Константа для API: consent_version / offer_version передаётся с фронтенда как LEGAL_CONSENT_VERSION.
4. Переменные окружения (frontend)¶
VITE_LEGAL_OPERATOR_NAME=...
VITE_LEGAL_OPERATOR_EMAIL=...
VITE_LEGAL_OPERATOR_WEBSITE=...
VITE_PRIVACY_POLICY_URL=/legal/privacy
VITE_LEGAL_DOCUMENT_VERSION=2026-05-17
5. API (backend)¶
| Endpoint | Сервис | Назначение |
|---|---|---|
POST /api/register/ |
auth | Поля privacy_consent, terms_accepted, consent_version |
POST /api/.../checkout/ |
order | offer_accepted, offer_version |
POST /api/profiles/request_seller_status/ |
user | seller_terms_accepted, seller_terms_version |
POST /api/users/legal/data-request/ |
user | access | delete | withdraw_analytics |
POST /api/analytics/consent/ |
analytics | Запись выбора баннера |
POST /api/analytics/events/batch/ |
analytics | События только с валидным visitor_id |
6. Миграции¶
Юридические таблицы: user_service миграция 0006_legal_consent_models (user_legal_consent, user_personal_data_request).
При деплое migrate --noinput выполняется в команде запуска контейнера (см. docker-compose.prod.yml, CI run_smoke_migrations.sh).
7. Тесты перед merge¶
# Frontend
cd frontend && npm test -- --run src/content/legal/legalContent.test.js src/test/webAnalyticsTracker.test.js
# API (нужны поднятые сервисы или CI)
pytest tests/auth_service/test_legal_consent.py
pytest tests/order_service/test_checkout_legal.py
pytest tests/user_service/test_legal_smoke.py
pytest tests/analytics_service/test_smoke.py
8. Типичные ошибки в PR¶
- Включить сторонний трекер (Google Analytics и т.п.) без обновления политики и баннера.
- Отправлять аналитику до проверки
isAnalyticsTrackingEnabled(). - Хардкодить ИНН/адрес в коде вместо env и
/legal/imprint. - Менять только docs или только SPA — расхождение текстов (см. document-sync.md).