diff --git a/_prj_blueprint/STATELESS-ORDERS.md b/_prj_blueprint/STATELESS-ORDERS.md new file mode 100644 index 0000000..271ffd5 --- /dev/null +++ b/_prj_blueprint/STATELESS-ORDERS.md @@ -0,0 +1,45 @@ +# Архитектурные решения: Анонимные Заказы (Stateless Cart & Orders) + +**Дата и время создания:** 02.08.2026 23:54 +**Проект:** LPON.RU (Django 6.0+, Python 3.12) +**Статус:** Согласованная архитектура + +--- + +## 1. Бесконтактная Корзина и Заказы без Персональных Данных (Privacy-First / Stateless Orders) + +### 1.1. Концепция полного отказа от ПДн +- **Проблема:** Хранение персональных данных клиентов (ФИО, телефон, адрес доставки, e-mail, паспорта) накладывает жесткие юридические обязательства (152-ФЗ), требует аттестации БД, согласий на обработку ПДн и несёт риски утечек. +- **Решение:** Полный отказ от хранения ПДн клиентов в базе данных LPON.RU. Сайт работает как смарт-витрина и генератор заказов, а персональные данные либо вообще не собираются, либо обрабатываются внешними специализированными сервисами (Авито, СДЭК, Яндекс.Доставка, эквайринг). + +### 1.2. Архитектура клиентоориентированной корзины (Stateless Cart) +1. **Хранение состава корзины:** + - Состав корзины хранится исключительно на стороне клиента: в `Session Cookies` или `LocalStorage`. + - В БД LPON.RU записи корзины пользователей НЕ создаются. +2. **Идентификация товаров:** + - В корзине сохраняется список уникальных кодов офферов (`s_offer_code`, сгенерированных через Hashids) и их количество: `{"codes": {"4gfFCJ": 1, "9xK2Lm": 2}}`. + - Все данные о цене, названии и наличии запрашиваются у сервера динамически по списку `s_offer_code`. +3. **DSL-модуль корзины (`!cart-app`):** + - Страница `/cart/` создаётся как стандартная статья-хаб `TbArticle` (тип `HUB`), в метаданные которой встроен динамический модуль `["!cart-app"]`. + - Это позволяет нативно обвешивать страницу корзины маркетинговыми блоками через DSL (например, выводить снизу карусель товаров `["cassettes-sale", "carousel"]`). + +### 1.3. Способы оформления заказа без сохранения ПДн в БД LPON.RU + +#### Вариант А: Оформление через Авито / Маркетплейсы +- По кнопке «Оформить» сайт формирует ссылку или готовый текст заказа для перехода на профиль продавца на Авито. +- Покупатель оформляет сделку через безопасную сделку Авито-Доставки. LPON.RU вообще не касается данных о доставке и оплате. + +#### Вариант Б: Интеграция со СДЭК / Яндекс.Доставкой через виджет +- При выборе доставки СДЭК прямо на странице корзины открывается официальный виджет СДЭК. Посылка "наложенным платежом" (что, кстати, защитит от недобросовестных покупателей, которые получают одно, а возвращают другое. Покупатель все проверяет при получении, а деньги СДЭК переводит только после подтверждения получения). +- Клиент вводит свои данные (ФИО, пункт выдачи, телефон) **напрямую в формы виджета СДЭК**. +- Сервер LPON.RU получает от API СДЭК только **Трек-номер (Waybill ID)**. +- На стороне LPON.RU в журнале анонимных транзакций сохраняется лишь минимальная агрегированная запись: + - Идентификатор заказа (`Order Hash`); + - Состав офферов (`s_offer_code`); + - Трек-номер СДЭК; + - Статус оплаты/доставки. + - *Данные получателя в БД LPON.RU отсутствуют.* + +#### Вариант В: Анонимный статус заказа по Токену +- Покупатель получает уникальную ссылку вида `lpon.ru/order//` (или хранит токен в куках/LocalStorage). +- По этой ссылке клиент может проверить текущий статус посылки (информация подтягивается из API СДЭК/Почты по трек-номеру в реальном времени) без необходимости авторизации и ввода личных данных.