пва
This commit is contained in:
@@ -0,0 +1,371 @@
|
||||
# Приведение Политики конфиденциальности и Пользовательского соглашения в соответствие с проектом
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Убрать из юридических документов упоминания несуществующих функций (аналитика, рекламные рассылки, персонализация, Яндекс.Метрика) и исправить неточности (OAuth, cookie, IP-логирование, дублирование данных оператора).
|
||||
|
||||
**Architecture:** 4 задачи: унификация данных оператора в shared/config, правка Политики конфиденциальности, правка Пользовательского соглашения, финальная проверка.
|
||||
|
||||
**Tech Stack:** TypeScript, React, MUI — изменения только в статическом JSX-тексте и shared/config.
|
||||
|
||||
---
|
||||
|
||||
## Файловая структура изменений
|
||||
|
||||
| Файл | Что делаем |
|
||||
|---|---|
|
||||
| `client/src/shared/config/index.ts` | Добавляем `STORE_OP_NAME`, `STORE_OP_INN`, `STORE_OP_OGRN`, `STORE_OP_ADDR` |
|
||||
| `client/src/pages/privacy-policy/ui/PrivacyPolicyPage.tsx` | Импорт из config, правка пунктов 2, 3, 5, 6, 7, добавляем дату |
|
||||
| `client/src/pages/terms/ui/TermsPage.tsx` | Импорт из config, правка пунктов 1, 3, 7, 8, 9, убираем противоречие 6.1 vs 2.2 |
|
||||
|
||||
---
|
||||
|
||||
### Task 1: Вынести данные оператора в shared/config
|
||||
|
||||
**Files:**
|
||||
- Modify: `client/src/shared/config/index.ts`
|
||||
|
||||
- [ ] **Step 1: Добавить константы оператора в shared/config**
|
||||
|
||||
Вставить после строки 17 (перед `export const VK_URL`):
|
||||
|
||||
```ts
|
||||
export const STORE_OP_NAME = 'Индивидуальный предприниматель Новоселова Наталия Владимировна'
|
||||
export const STORE_OP_INN = '402900832341'
|
||||
export const STORE_OP_OGRN = '305402922700051'
|
||||
export const STORE_OP_ADDR = '248000, Россия, г. Калуга, ул. Никитина, д. 12А'
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Проверить синтаксис**
|
||||
|
||||
```bash
|
||||
cd client && npx tsc -b --noEmit
|
||||
```
|
||||
Expected: no errors.
|
||||
|
||||
---
|
||||
|
||||
### Task 2: Исправить Политику конфиденциальности
|
||||
|
||||
**Files:**
|
||||
- Modify: `client/src/pages/privacy-policy/ui/PrivacyPolicyPage.tsx`
|
||||
|
||||
- [ ] **Step 1: Заменить импорт и локальные константы**
|
||||
|
||||
Заменить строки 4-10 (импорт STORE_EMAIL + локальные константы).
|
||||
|
||||
Было:
|
||||
```ts
|
||||
import { STORE_EMAIL } from '@/shared/config'
|
||||
|
||||
const OP_NAME = 'Индивидуальный предприниматель Новоселова Наталия Владимировна'
|
||||
const OP_INN = '402900832341'
|
||||
const OP_OGRN = '305402922700051'
|
||||
const OP_ADDR = '248000, Россия, г. Калуга, ул. Никитина, д. 12А'
|
||||
const SITE_URL = window.location.origin
|
||||
```
|
||||
|
||||
Стало:
|
||||
```ts
|
||||
import { STORE_EMAIL, STORE_OP_NAME, STORE_OP_INN, STORE_OP_OGRN, STORE_OP_ADDR, STORE_PUBLIC_SITE_URL } from '@/shared/config'
|
||||
|
||||
const SITE_URL = STORE_PUBLIC_SITE_URL || (typeof window !== 'undefined' ? window.location.origin : '')
|
||||
```
|
||||
|
||||
И заменить `OP_NAME` → `STORE_OP_NAME`, `OP_INN` → `STORE_OP_INN`, `OP_OGRN` → `STORE_OP_OGRN`, `OP_ADDR` → `STORE_OP_ADDR` во всём файле (replaceAll).
|
||||
|
||||
- [ ] **Step 2: Исправить раздел 2 — актуальный список собираемых данных**
|
||||
|
||||
Заменить `items` в секции 2.
|
||||
|
||||
Было:
|
||||
```ts
|
||||
items: [
|
||||
'2.1. Оператор обрабатывает следующие персональные данные Пользователей:',
|
||||
'— фамилия, имя, отчество;',
|
||||
'— адрес электронной почты;',
|
||||
'— номер телефона;',
|
||||
'— данные файлов cookie;',
|
||||
'— данные о действиях на сайте (аналитика);',
|
||||
'— адрес доставки и геолокационные координаты.',
|
||||
],
|
||||
```
|
||||
|
||||
Стало:
|
||||
```ts
|
||||
items: [
|
||||
'2.1. Оператор обрабатывает следующие персональные данные Пользователей:',
|
||||
'— адрес электронной почты;',
|
||||
'— имя (отображаемое имя, может быть указано Пользователем добровольно);',
|
||||
'— номер телефона (указывается Пользователем добровольно при оформлении доставки);',
|
||||
'— адрес доставки и геолокационные координаты (указываются Пользователем при оформлении заказа);',
|
||||
'— аутентификационные данные (сессионные cookie для поддержания входа в Личный кабинет).',
|
||||
],
|
||||
```
|
||||
|
||||
- [ ] **Step 3: Исправить раздел 3 — убрать несуществующую персонализацию**
|
||||
|
||||
Было:
|
||||
```ts
|
||||
items: [
|
||||
'3.1. Оператор обрабатывает персональные данные в следующих целях:',
|
||||
'— идентификация Пользователя;',
|
||||
'— оказание услуг / продажа товаров;',
|
||||
'— направление уведомлений и информационных сообщений;',
|
||||
'— улучшение качества работы сайта;',
|
||||
'— построение персонализированных предложений и рекомендаций.',
|
||||
],
|
||||
```
|
||||
|
||||
Стало:
|
||||
```ts
|
||||
items: [
|
||||
'3.1. Оператор обрабатывает персональные данные в следующих целях:',
|
||||
'— идентификация и аутентификация Пользователя;',
|
||||
'— оказание услуг / продажа товаров и оформление доставки;',
|
||||
'— направление транзакционных уведомлений о статусе заказов и информационных сообщений;',
|
||||
'— улучшение качества работы сайта.',
|
||||
],
|
||||
```
|
||||
|
||||
- [ ] **Step 4: Исправить раздел 5 — убрать неавтоматизированную обработку и нереалистичный срок**
|
||||
|
||||
Было:
|
||||
```ts
|
||||
items: [
|
||||
'5.1. Обработка осуществляется путём сбора, записи, систематизации, накопления, хранения, уточнения, извлечения, использования, передачи, обезличивания, блокирования, удаления и уничтожения персональных данных.',
|
||||
'5.2. Обработка осуществляется автоматизированным и неавтоматизированным способами.',
|
||||
'5.3. Срок хранения персональных данных: не более 7 лет с момента последнего обращения Пользователя либо до момента отзыва согласия на обработку.',
|
||||
],
|
||||
```
|
||||
|
||||
Стало:
|
||||
```ts
|
||||
items: [
|
||||
'5.1. Обработка осуществляется путём сбора, записи, систематизации, накопления, хранения, уточнения, извлечения, использования, передачи, блокирования, удаления и уничтожения персональных данных.',
|
||||
'5.2. Обработка осуществляется автоматизированным способом с использованием программных средств Сайта.',
|
||||
'5.3. Срок хранения персональных данных: до достижения целей обработки либо до момента отзыва Пользователем согласия на обработку.',
|
||||
],
|
||||
```
|
||||
|
||||
- [ ] **Step 5: Исправить раздел 6 — Яндекс.Метрика → ЮKassa**
|
||||
|
||||
Было:
|
||||
```ts
|
||||
items: [
|
||||
'6.1. Оператор может передать персональные данные третьим лицам в следующих случаях:',
|
||||
'— с согласия субъекта;',
|
||||
'— по требованию законодательства РФ;',
|
||||
'— для выполнения договорных обязательств (перечень третьих лиц): службы доставки, платёжные агрегаторы, сервисы аналитики (Яндекс.Метрика).',
|
||||
],
|
||||
```
|
||||
|
||||
Стало:
|
||||
```ts
|
||||
items: [
|
||||
'6.1. Оператор может передать персональные данные третьим лицам в следующих случаях:',
|
||||
'— с согласия субъекта;',
|
||||
'— по требованию законодательства РФ;',
|
||||
'— для выполнения договорных обязательств (перечень третьих лиц): службы доставки, платёжный сервис (ЮKassa).',
|
||||
],
|
||||
```
|
||||
|
||||
- [ ] **Step 6: Добавить дату обновления**
|
||||
|
||||
Заменить текст подзаголовка (строка 99):
|
||||
```
|
||||
Политика в отношении обработки персональных данных.
|
||||
```
|
||||
на:
|
||||
```
|
||||
Последнее обновление: 23 мая 2026 г.
|
||||
```
|
||||
|
||||
- [ ] **Step 7: Проверить линтер**
|
||||
|
||||
```bash
|
||||
cd client && npm run lint
|
||||
```
|
||||
Expected: 0 новых ошибок.
|
||||
|
||||
---
|
||||
|
||||
### Task 3: Исправить Пользовательское соглашение
|
||||
|
||||
**Files:**
|
||||
- Modify: `client/src/pages/terms/ui/TermsPage.tsx`
|
||||
|
||||
- [ ] **Step 1: Заменить локальные константы на импорт из config**
|
||||
|
||||
Заменить строки 4-11.
|
||||
|
||||
Было:
|
||||
```ts
|
||||
import { STORE_EMAIL, STORE_PHONE, STORE_PUBLIC_SITE_URL } from '@/shared/config'
|
||||
|
||||
const SITE_URL = STORE_PUBLIC_SITE_URL || (typeof window !== 'undefined' ? window.location.origin : '')
|
||||
|
||||
const OP_NAME = 'Индивидуальный предприниматель Новоселова Наталия Владимировна'
|
||||
const OP_INN = '402900832341'
|
||||
const OP_OGRN = '305402922700051'
|
||||
const OP_ADDR = '248000, Россия, г. Калуга, ул. Никитина, д. 12А'
|
||||
```
|
||||
|
||||
Стало:
|
||||
```ts
|
||||
import { STORE_EMAIL, STORE_PHONE, STORE_PUBLIC_SITE_URL, STORE_OP_NAME, STORE_OP_INN, STORE_OP_OGRN, STORE_OP_ADDR } from '@/shared/config'
|
||||
|
||||
const SITE_URL = STORE_PUBLIC_SITE_URL || (typeof window !== 'undefined' ? window.location.origin : '')
|
||||
```
|
||||
|
||||
Заменить `OP_NAME` → `STORE_OP_NAME`, `OP_INN` → `STORE_OP_INN`, `OP_OGRN` → `STORE_OP_OGRN`, `OP_ADDR` → `STORE_OP_ADDR` во всём файле (replaceAll).
|
||||
|
||||
- [ ] **Step 2: Дополнить раздел 1 — упомянуть OAuth и вход по коду**
|
||||
|
||||
В секции 1, в определении «Аутентификационные данные». Найти:
|
||||
```
|
||||
'— Аутентификационные данные Пользователя — адрес электронной почты Пользователя и пароль (код доступа), которые в совокупности признаются простой электронной подписью Пользователя.',
|
||||
```
|
||||
Заменить на:
|
||||
```
|
||||
'— Аутентификационные данные Пользователя — адрес электронной почты и пароль (код доступа), либо данные, полученные через сервисы авторизации третьих лиц (VK ID, Яндекс ID), либо одноразовый код, направляемый на электронную почту. Совокупность аутентификационных данных признаётся простой электронной подписью Пользователя.',
|
||||
```
|
||||
|
||||
- [ ] **Step 3: Убрать «рекламные» сообщения из п. 3.7**
|
||||
|
||||
Найти:
|
||||
```
|
||||
'3.7. При регистрации Пользователь даёт согласие на получение информационных и рекламных сообщений от Администратора на указанный адрес электронной почты.',
|
||||
```
|
||||
Заменить на:
|
||||
```
|
||||
'3.7. При регистрации Пользователь даёт согласие на получение транзакционных уведомлений (статус заказа, сообщения в чате заказа, статус оплаты) на указанный адрес электронной почты.',
|
||||
```
|
||||
|
||||
- [ ] **Step 4: Исправить противоречие 6.1 vs 2.2 («гарантирует» vs «as is»)**
|
||||
|
||||
Найти в секции 6:
|
||||
```
|
||||
'6.1. Администратор гарантирует достоверность и полноту только той информации, которую он разместил на Сайте самостоятельно.',
|
||||
```
|
||||
Заменить на:
|
||||
```
|
||||
'6.1. Администратор прилагает разумные усилия для обеспечения достоверности и полноты информации, размещённой на Сайте, однако не даёт явных гарантий точности такой информации.',
|
||||
```
|
||||
|
||||
- [ ] **Step 5: Исправить раздел 7 — указать реальных третьих лиц (ЮKassa, OSM вместо рекламы/аналитики)**
|
||||
|
||||
Заменить всю секцию 7.
|
||||
|
||||
Было:
|
||||
```ts
|
||||
{
|
||||
title: '7. Доступ к ресурсам третьих лиц',
|
||||
items: [
|
||||
'7.1. Доступ Пользователя к Сайту может вызывать обращение к интернет-ресурсам третьих лиц (реклама, сбор статистики).',
|
||||
'7.2. Владельцы таких ресурсов имеют техническую возможность собирать информацию о Пользователях и самостоятельно определяют условия её использования.',
|
||||
'7.3. При переходе на сторонние ресурсы Пользователи самостоятельно определяют пределы использования своей информации согласно правилам соответствующих ресурсов.',
|
||||
],
|
||||
},
|
||||
```
|
||||
|
||||
Стало:
|
||||
```ts
|
||||
{
|
||||
title: '7. Доступ к ресурсам третьих лиц',
|
||||
items: [
|
||||
'7.1. Для обеспечения функциональности Сайта используются сервисы третьих лиц: платёжный сервис ЮKassa (для обработки онлайн-платежей), картографический сервис OpenStreetMap/Nominatim (для выбора адреса доставки).',
|
||||
'7.2. Владельцы указанных ресурсов имеют собственную политику конфиденциальности и самостоятельно определяют условия обработки получаемой информации.',
|
||||
'7.3. При переходе на сторонние ресурсы Пользователи самостоятельно определяют пределы использования своей информации согласно правилам соответствующих ресурсов.',
|
||||
],
|
||||
},
|
||||
```
|
||||
|
||||
- [ ] **Step 6: Исправить раздел 8 — Cookie только для сессии, не для аналитики**
|
||||
|
||||
Заменить всю секцию 8.
|
||||
|
||||
Было:
|
||||
```ts
|
||||
{
|
||||
title: '8. Информация, хранящаяся на стороне браузера',
|
||||
items: [
|
||||
'8.1. Администратор использует cookie-файлы для определения уникального идентификатора доступа Пользователя к Сайту.',
|
||||
'8.2. Цели использования cookie:',
|
||||
'— поддержка функциональности Сайта, требующей использования cookie;',
|
||||
'— измерение аудитории Сайта;',
|
||||
'— определение статистических предпочтений Пользователей;',
|
||||
'— исследование корреляции статистических данных.',
|
||||
'8.3. Пользователь может запретить использование cookie в настройках браузера, однако это может привести к частичной или полной потере функциональности Сайта.',
|
||||
],
|
||||
},
|
||||
```
|
||||
|
||||
Стало:
|
||||
```ts
|
||||
{
|
||||
title: '8. Информация, хранящаяся на стороне браузера',
|
||||
items: [
|
||||
'8.1. Администратор использует сессионные cookie-файлы исключительно для поддержания аутентификации Пользователя в Личном кабинете.',
|
||||
'8.2. Сайт не использует cookie для сбора статистики, отслеживания действий Пользователя или показа рекламы.',
|
||||
'8.3. Пользователь может запретить использование cookie в настройках браузера, однако это приведёт к невозможности входа в Личный кабинет и использования функций, требующих аутентификации.',
|
||||
],
|
||||
},
|
||||
```
|
||||
|
||||
- [ ] **Step 7: Исправить раздел 9.3–9.4 — актуальный перечень данных и целей**
|
||||
|
||||
Заменить строки 9.3 и 9.4 в секции 9.
|
||||
|
||||
Было:
|
||||
```ts
|
||||
'9.3. Администратор обрабатывает следующие персональные данные: Ф. И. О., адрес электронной почты, номер телефона, IP-адрес, тип браузера, данные о действиях на Сайте.',
|
||||
'9.4. Цели обработки персональных данных: обеспечение функционирования Сайта, оказание информационной поддержки, предоставление персонализированных сервисов, направление информационных сообщений.',
|
||||
```
|
||||
|
||||
Стало:
|
||||
```ts
|
||||
'9.3. Администратор обрабатывает следующие персональные данные: адрес электронной почты, имя (при добровольном указании), номер телефона (при оформлении доставки), адрес доставки.',
|
||||
'9.4. Цели обработки персональных данных: обеспечение функционирования Сайта, аутентификация Пользователя, оформление и доставка заказов, направление транзакционных уведомлений.',
|
||||
```
|
||||
|
||||
- [ ] **Step 8: Проверить линтер**
|
||||
|
||||
```bash
|
||||
cd client && npm run lint
|
||||
```
|
||||
Expected: 0 новых ошибок.
|
||||
|
||||
---
|
||||
|
||||
### Task 4: Финальная проверка
|
||||
|
||||
**Files:** No modifications, verification only.
|
||||
|
||||
- [ ] **Step 1: TypeScript check**
|
||||
|
||||
```bash
|
||||
cd client && npx tsc -b --noEmit
|
||||
```
|
||||
Expected: no errors.
|
||||
|
||||
- [ ] **Step 2: Lint**
|
||||
|
||||
```bash
|
||||
cd client && npm run lint
|
||||
```
|
||||
Expected: 0 errors (warnings OK).
|
||||
|
||||
- [ ] **Step 3: Сборка**
|
||||
|
||||
```bash
|
||||
cd client && npm run build
|
||||
```
|
||||
Expected: успешная сборка.
|
||||
|
||||
- [ ] **Step 4: Format check**
|
||||
|
||||
```bash
|
||||
cd client && npm run format:check
|
||||
```
|
||||
Expected: все файлы отформатированы (или отформатировать через `npm run format`).
|
||||
@@ -0,0 +1,64 @@
|
||||
# Юридические документы: приведение к реальности + удаление аккаунта + cookie-баннер
|
||||
|
||||
## Данные оператора
|
||||
|
||||
- **Имя:** Комарова Лариса Николаевна (самозанятый)
|
||||
- **ИНН:** 402900832341 (тестовый)
|
||||
- **Адрес:** 34, ул. Мира, кв. 34, Лысьва, Пермский край, 618909
|
||||
- **Сайт:** https://любимыйкреатив.рф
|
||||
- **ОГРН:** отсутствует (самозанятый)
|
||||
|
||||
## Задачи
|
||||
|
||||
### 1. Shared config — обновить данные оператора
|
||||
Файл: `client/src/shared/config/index.ts`
|
||||
- `STORE_OP_NAME`, `STORE_OP_TYPE`, `STORE_OP_INN` (тестовый), `STORE_OP_ADDR`
|
||||
- Убрать `STORE_OP_OGRN`
|
||||
- `STORE_PUBLIC_SITE_URL`: https://любимыйкреатив.рф
|
||||
|
||||
### 2. Политика конфиденциальности
|
||||
Файл: `client/src/pages/privacy-policy/ui/PrivacyPolicyPage.tsx`
|
||||
- Импорт из config, убрать локальные константы
|
||||
- Оператор: самозанятый вместо ИП, без ОГРН
|
||||
- Раздел 2: только email, имя, телефон (при доставке), адрес, сессионные cookie (без ФИО, аналитики)
|
||||
- Раздел 3: без персонализации
|
||||
- Раздел 5: только автообработка, срок до достижения целей
|
||||
- Раздел 6: Яндекс.Метрика → ЮKassa
|
||||
- Раздел 7: добавить право на самоудаление (п. 7.3)
|
||||
- Добавить дату обновления
|
||||
- Перенести cookie-раздел из Соглашения в Политику
|
||||
|
||||
### 3. Пользовательское соглашение
|
||||
Файл: `client/src/pages/terms/ui/TermsPage.tsx`
|
||||
- Импорт из config, убрать локальные константы
|
||||
- Оператор: самозанятый, без ОГРН
|
||||
- Раздел 1: упомянуть OAuth и вход по коду
|
||||
- П. 3.7: «рекламные» → «транзакционные»
|
||||
- П. 6.1: убрать противоречие с «as is»
|
||||
- Раздел 7: реальные третьи лица (ЮKassa, OSM)
|
||||
- Раздел 8: cookie только для сессии, не для аналитики
|
||||
- П. 9.3-9.4: без IP/браузера/персонализации, только реальные данные
|
||||
|
||||
### 4. Cookie-баннер
|
||||
Новый компонент: `client/src/shared/ui/CookieConsentBanner.tsx`
|
||||
- Снизу, фиксированный, localStorage
|
||||
- Текст о cookie и ссылка на Политику
|
||||
- Кнопка «Понятно»
|
||||
- Рендер в MainLayout перед футером
|
||||
|
||||
### 5. Текст согласия на формах входа/регистрации
|
||||
- AuthPasswordForm, AuthCodeForm
|
||||
- Под кнопкой отправки: «Нажимая «Продолжить», вы принимаете пользовательское соглашение и политику конфиденциальности»
|
||||
- Ссылки на /terms и /privacy
|
||||
|
||||
### 6. Удаление аккаунта
|
||||
**Сервер:** `DELETE /api/me` в `server/src/routes/auth.js`
|
||||
- Проверка активных заказов (не DONE, не CANCELLED)
|
||||
- Если нет активных — каскадное удаление
|
||||
- Если есть — 400 с перечнем заказов
|
||||
|
||||
**Клиент:** секция в SettingsPage
|
||||
- Кнопка «Удалить аккаунт» (outlined, error)
|
||||
- Tooltip при активных заказах
|
||||
- Диалог подтверждения
|
||||
- После удаления — редирект на /
|
||||
Reference in New Issue
Block a user