Исправил недочеты и уязвимости
This commit is contained in:
parent
cec732e372
commit
0259959f1a
5 changed files with 185 additions and 155 deletions
|
|
@ -1,65 +1,46 @@
|
|||
# Протокол Финальной Проверки (Final Audit Protocol)
|
||||
# Протокол интерактивного аудита и синхронизации (Accountant Protocol)
|
||||
|
||||
Этот протокол — завершающий этап контроля. Твоя задача: провести скрытую от пользователя математическую сверку двух типов цен и гарантировать чистоту корзины.
|
||||
Этот протокол описывает финальную стадию проверки перед оплатой. Твоя задача — провести сверку «Плана» (твоей памяти на диске) и «Факта» (реальной корзины в аккаунте пользователя на сайте) и подготовить понятный отчет.
|
||||
|
||||
## ШАГ 1: Сбор данных из корзины
|
||||
Дай команду `internet_browser`:
|
||||
*"Зайди в корзину. Для каждого товара извлеки: Название, Текущую цену в корзине, Обычную цену (без скидок) и Цену по карте магазина. Проверь список на наличие платных пакетов, подписок или страховок. Верни Итоговую сумму к оплате. Ответ выдай в виде простого текстового списка."*
|
||||
## ШАГ 1: Извлечение реальности (Инструкция для Браузера)
|
||||
Дай команду `internet_browser` (будь максимально краток для экономии токенов):
|
||||
> "Зайди в корзину. Для каждого товара извлеки: Название, Артикул (если есть) и Итоговую цену, которую просит сайт. Найди итоговую сумму всей корзины. Верни данные простым списком. Игнорируй рекламные блоки."
|
||||
|
||||
## ШАГ 2: Математический движок (execute_code)
|
||||
Получив данные, ты обязан запустить Python-скрипт для верификации. Скрипт должен работать по логике «ценового коридора».
|
||||
## ШАГ 2: Сверка «План vs Факт» (Логика в execute_code)
|
||||
Ты обязан запустить Python-скрипт, который вернет тебе структурированный анализ расхождений.
|
||||
|
||||
**Логика для Python-скрипта:**
|
||||
1. **Загрузка эталона:** Считать данные из `/app/workspace/cart_state.json`.
|
||||
2. **Расчет контрольных сумм:**
|
||||
- `sum_base`: Сумма всех стандартных цен из памяти.
|
||||
- `sum_card`: Сумма всех цен по карте лояльности из памяти.
|
||||
3. **Сверка с реальностью:**
|
||||
- Извлечь `total_site` (то, что браузер увидел в графе "Итого").
|
||||
- Если `sum_card <= total_site <= sum_base` — проверка пройдена (цена валидна, расхождение объясняется применением или отсутствием скидки по карте).
|
||||
- Если `total_site` выходит за эти рамки — зафиксировать реальное изменение цены.
|
||||
4. **Очистка данных:** Если в ответе браузера есть позиции, которых нет в памяти (страховки, пакеты), скрипт помечает их как "мусор".
|
||||
**Ключевая логика скрипта:**
|
||||
1. **Загрузка:** Читает `/app/workspace/cart_state.json`.
|
||||
2. **Анализ состава:**
|
||||
- Находит товары, которые есть в памяти, но пропали с сайта.
|
||||
- Находит лишние товары на сайте (которых нет в памяти).
|
||||
3. **Анализ цен:**
|
||||
- Сравнивает цену сайта с «коридором» (между `pricing.loyalty` и `pricing.standard`).
|
||||
- Если цена на сайте НИЖЕ любого из значений — это «Приятный сюрприз» (авто-одобрение).
|
||||
- Если цена на сайте ВЫШЕ `standard` — это «Наценка» (требует согласования).
|
||||
4. **Удаление мусора:** Скрипт помечает позиции типа «Пакет», «Страховка», «Подписка» на автоматическое удаление.
|
||||
|
||||
**Пример реализации в execute_code:**
|
||||
```python
|
||||
import json
|
||||
## ШАГ 3: Обработка результатов Менеджером
|
||||
На основе данных из Python, ты (Менеджер) принимаешь решение:
|
||||
|
||||
with open('/app/workspace/cart_state.json', 'r') as f:
|
||||
data = json.load(f)
|
||||
### Сценарий А: Полное совпадение или Скидка
|
||||
Если состав совпадает, а цена в коридоре или ниже:
|
||||
- **Действие:** Обнови файл, установи статус `AUDIT_SUCCESS`.
|
||||
- **Отчет:** *"Проверка завершена. Все товары на месте, итоговая сумма подтверждена (даже чуть ниже ожидаемой благодаря [скидке/акции])."*
|
||||
|
||||
# Считаем два идеальных сценария
|
||||
total_standard = sum(item['pricing']['standard'] for item in data['items'])
|
||||
total_loyalty = sum(item['pricing']['loyalty'] for item in data['items'])
|
||||
### Сценарий Б: Обнаружены изменения (Диалог)
|
||||
Если цена выросла или состав корзины на сайте изменился:
|
||||
- **Действие:** НЕ меняй статус на успешный.
|
||||
- **Отчет:** Сформируй человеческое сообщение:
|
||||
> 💡 **Я проверил вашу корзину и заметил изменения:**
|
||||
> - [Товар] подорожал на [X] ₽.
|
||||
> - [Товар] больше недоступен, я исключил его из расчетов.
|
||||
> **Итоговая сумма теперь: [Сумма] ₽. Мы продолжаем оформление с этими изменениями?**
|
||||
|
||||
actual_from_browser = ... # Данные от интернет-браузера
|
||||
|
||||
if total_loyalty <= actual_from_browser <= total_standard:
|
||||
data['status'] = 'AUDIT_SUCCESS'
|
||||
data['final_amount'] = actual_from_browser
|
||||
# Сохраняем подтвержденное состояние
|
||||
with open('/app/workspace/cart_state.json', 'w') as f:
|
||||
json.dump(data, f)
|
||||
print("VERIFICATION_SUCCESS")
|
||||
else:
|
||||
print("PRICE_MISMATCH_ALERT")
|
||||
```
|
||||
|
||||
## ШАГ 3: Защитный барьер и Фильтр мусора
|
||||
1. **Удаление лишнего:** Если скрипт обнаружил "мусор" (платную упаковку или страховку), прикажи браузеру: *"Удали из корзины [название услуги] и вернись к Шагу 1"*.
|
||||
2. **Безопасность:** Если браузер при парсинге корзины обнаружил поля для ввода номера карты — немедленно закрой вкладку. Это зона высокого риска.
|
||||
|
||||
## ШАГ 4: Формирование отчета для пользователя
|
||||
После завершения (когда скрипт выдал `VERIFICATION_SUCCESS`), отправь сообщение в Telegram. Используй только понятные человеку данные, скрывая техническую логику.
|
||||
|
||||
**✅ Проверка списка покупок завершена**
|
||||
|
||||
📦 **[Название товара]**
|
||||
- **Стандартная цена:** [X] ₽
|
||||
- **С картой лояльности:** [Y] ₽
|
||||
- **Статус:** В корзине, проверено.
|
||||
## ШАГ 4: Финализация и Безопасность
|
||||
1. **Подтверждение:** Только после того, как пользователь скажет "Да" или "Ок" на изменения, ты фиксируешь финальную сумму в `cart_state.json` и ставишь статус `AUDIT_SUCCESS`.
|
||||
2. **Очистка сайта:** Если найден "мусор" (страховки), сначала дай браузеру команду на их удаление, а затем повтори Шаг 1.
|
||||
3. **Защита данных:** Если на этапе корзины браузер увидел поля для ввода номера банковской карты — немедленно закрой вкладку. Оплата картой напрямую запрещена регламентом.
|
||||
|
||||
---
|
||||
💰 **ИТОГО К ОПЛАТЕ:** **[Сумма с сайта] ₽**
|
||||
*(Сумма подтверждена и соответствует официальным тарифам маркетплейса)*
|
||||
|
||||
**Что дальше?** Мы можем перейти к безопасной оплате через СБП или добавить что-то еще.
|
||||
**ВАЖНО:** Весь этот процесс должен выглядеть для пользователя как забота о его средствах. Если ты нашел способ сэкономить (например, применилась скрытая скидка), обязательно акцентируй на этом внимание в итоговом сообщении.
|
||||
Reference in a new issue