Files
shop-server/.opencode/plans/2026-05-23-legal-docs-fix.md
T
2026-05-23 18:47:35 +05:00

20 KiB

Приведение Политики конфиденциальности и Пользовательского соглашения в соответствие с проектом

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):

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: Проверить синтаксис
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 + локальные константы).

Было:

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

Стало:

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_NAMESTORE_OP_NAME, OP_INNSTORE_OP_INN, OP_OGRNSTORE_OP_OGRN, OP_ADDRSTORE_OP_ADDR во всём файле (replaceAll).

  • Step 2: Исправить раздел 2 — актуальный список собираемых данных

Заменить items в секции 2.

Было:

items: [
  '2.1. Оператор обрабатывает следующие персональные данные Пользователей:',
  '— фамилия, имя, отчество;',
  '— адрес электронной почты;',
  '— номер телефона;',
  '— данные файлов cookie;',
  '— данные о действиях на сайте (аналитика);',
  '— адрес доставки и геолокационные координаты.',
],

Стало:

items: [
  '2.1. Оператор обрабатывает следующие персональные данные Пользователей:',
  '— адрес электронной почты;',
  '— имя (отображаемое имя, может быть указано Пользователем добровольно);',
  '— номер телефона (указывается Пользователем добровольно при оформлении доставки);',
  '— адрес доставки и геолокационные координаты (указываются Пользователем при оформлении заказа);',
  '— аутентификационные данные (сессионные cookie для поддержания входа в Личный кабинет).',
],
  • Step 3: Исправить раздел 3 — убрать несуществующую персонализацию

Было:

items: [
  '3.1. Оператор обрабатывает персональные данные в следующих целях:',
  '— идентификация Пользователя;',
  '— оказание услуг / продажа товаров;',
  '— направление уведомлений и информационных сообщений;',
  '— улучшение качества работы сайта;',
  '— построение персонализированных предложений и рекомендаций.',
],

Стало:

items: [
  '3.1. Оператор обрабатывает персональные данные в следующих целях:',
  '— идентификация и аутентификация Пользователя;',
  '— оказание услуг / продажа товаров и оформление доставки;',
  '— направление транзакционных уведомлений о статусе заказов и информационных сообщений;',
  '— улучшение качества работы сайта.',
],
  • Step 4: Исправить раздел 5 — убрать неавтоматизированную обработку и нереалистичный срок

Было:

items: [
  '5.1. Обработка осуществляется путём сбора, записи, систематизации, накопления, хранения, уточнения, извлечения, использования, передачи, обезличивания, блокирования, удаления и уничтожения персональных данных.',
  '5.2. Обработка осуществляется автоматизированным и неавтоматизированным способами.',
  '5.3. Срок хранения персональных данных: не более 7 лет с момента последнего обращения Пользователя либо до момента отзыва согласия на обработку.',
],

Стало:

items: [
  '5.1. Обработка осуществляется путём сбора, записи, систематизации, накопления, хранения, уточнения, извлечения, использования, передачи, блокирования, удаления и уничтожения персональных данных.',
  '5.2. Обработка осуществляется автоматизированным способом с использованием программных средств Сайта.',
  '5.3. Срок хранения персональных данных: до достижения целей обработки либо до момента отзыва Пользователем согласия на обработку.',
],
  • Step 5: Исправить раздел 6 — Яндекс.Метрика → ЮKassa

Было:

items: [
  '6.1. Оператор может передать персональные данные третьим лицам в следующих случаях:',
  '— с согласия субъекта;',
  '— по требованию законодательства РФ;',
  '— для выполнения договорных обязательств (перечень третьих лиц): службы доставки, платёжные агрегаторы, сервисы аналитики (Яндекс.Метрика).',
],

Стало:

items: [
  '6.1. Оператор может передать персональные данные третьим лицам в следующих случаях:',
  '— с согласия субъекта;',
  '— по требованию законодательства РФ;',
  '— для выполнения договорных обязательств (перечень третьих лиц): службы доставки, платёжный сервис (ЮKassa).',
],
  • Step 6: Добавить дату обновления

Заменить текст подзаголовка (строка 99):

Политика в отношении обработки персональных данных.

на:

Последнее обновление: 23 мая 2026 г.
  • Step 7: Проверить линтер
cd client && npm run lint

Expected: 0 новых ошибок.


Task 3: Исправить Пользовательское соглашение

Files:

  • Modify: client/src/pages/terms/ui/TermsPage.tsx

  • Step 1: Заменить локальные константы на импорт из config

Заменить строки 4-11.

Было:

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А'

Стало:

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_NAMESTORE_OP_NAME, OP_INNSTORE_OP_INN, OP_OGRNSTORE_OP_OGRN, OP_ADDRSTORE_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.

Было:

{
  title: '7. Доступ к ресурсам третьих лиц',
  items: [
    '7.1. Доступ Пользователя к Сайту может вызывать обращение к интернет-ресурсам третьих лиц (реклама, сбор статистики).',
    '7.2. Владельцы таких ресурсов имеют техническую возможность собирать информацию о Пользователях и самостоятельно определяют условия её использования.',
    '7.3. При переходе на сторонние ресурсы Пользователи самостоятельно определяют пределы использования своей информации согласно правилам соответствующих ресурсов.',
  ],
},

Стало:

{
  title: '7. Доступ к ресурсам третьих лиц',
  items: [
    '7.1. Для обеспечения функциональности Сайта используются сервисы третьих лиц: платёжный сервис ЮKassa (для обработки онлайн-платежей), картографический сервис OpenStreetMap/Nominatim (для выбора адреса доставки).',
    '7.2. Владельцы указанных ресурсов имеют собственную политику конфиденциальности и самостоятельно определяют условия обработки получаемой информации.',
    '7.3. При переходе на сторонние ресурсы Пользователи самостоятельно определяют пределы использования своей информации согласно правилам соответствующих ресурсов.',
  ],
},
  • Step 6: Исправить раздел 8 — Cookie только для сессии, не для аналитики

Заменить всю секцию 8.

Было:

{
  title: '8. Информация, хранящаяся на стороне браузера',
  items: [
    '8.1. Администратор использует cookie-файлы для определения уникального идентификатора доступа Пользователя к Сайту.',
    '8.2. Цели использования cookie:',
    '— поддержка функциональности Сайта, требующей использования cookie;',
    '— измерение аудитории Сайта;',
    '— определение статистических предпочтений Пользователей;',
    '— исследование корреляции статистических данных.',
    '8.3. Пользователь может запретить использование cookie в настройках браузера, однако это может привести к частичной или полной потере функциональности Сайта.',
  ],
},

Стало:

{
  title: '8. Информация, хранящаяся на стороне браузера',
  items: [
    '8.1. Администратор использует сессионные cookie-файлы исключительно для поддержания аутентификации Пользователя в Личном кабинете.',
    '8.2. Сайт не использует cookie для сбора статистики, отслеживания действий Пользователя или показа рекламы.',
    '8.3. Пользователь может запретить использование cookie в настройках браузера, однако это приведёт к невозможности входа в Личный кабинет и использования функций, требующих аутентификации.',
  ],
},
  • Step 7: Исправить раздел 9.3–9.4 — актуальный перечень данных и целей

Заменить строки 9.3 и 9.4 в секции 9.

Было:

'9.3. Администратор обрабатывает следующие персональные данные: Ф. И. О., адрес электронной почты, номер телефона, IP-адрес, тип браузера, данные о действиях на Сайте.',
'9.4. Цели обработки персональных данных: обеспечение функционирования Сайта, оказание информационной поддержки, предоставление персонализированных сервисов, направление информационных сообщений.',

Стало:

'9.3. Администратор обрабатывает следующие персональные данные: адрес электронной почты, имя (при добровольном указании), номер телефона (при оформлении доставки), адрес доставки.',
'9.4. Цели обработки персональных данных: обеспечение функционирования Сайта, аутентификация Пользователя, оформление и доставка заказов, направление транзакционных уведомлений.',
  • Step 8: Проверить линтер
cd client && npm run lint

Expected: 0 новых ошибок.


Task 4: Финальная проверка

Files: No modifications, verification only.

  • Step 1: TypeScript check
cd client && npx tsc -b --noEmit

Expected: no errors.

  • Step 2: Lint
cd client && npm run lint

Expected: 0 errors (warnings OK).

  • Step 3: Сборка
cd client && npm run build

Expected: успешная сборка.

  • Step 4: Format check
cd client && npm run format:check

Expected: все файлы отформатированы (или отформатировать через npm run format).