Files
shop-server/.opencode/plans/2026-05-23-legal-docs-fix.md
T
2026-05-24 12:03:21 +05:00

440 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Приведение Политики конфиденциальности и Пользовательского соглашения в соответствие с проектом
> **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 (для обработки онлайн-платежей).
'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`).