From 2cb7e1d0ba16d9028043ef13c0d4ee562c1d096e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sat, 25 Jul 2026 20:08:31 +0300 Subject: [PATCH 001/213] =?UTF-8?q?docs(=D1=80=D0=B5=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B0):=20=D0=B0=D1=83=D0=B4=D0=B8=D1=82=20=D0=A40=20+?= =?UTF-8?q?=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD-=D1=81=D0=BF=D0=B5?= =?UTF-8?q?=D0=BA=D0=B0=20+=20=D0=BF=D0=BB=D0=B0=D0=BD=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BE=D0=BA=20=D0=AF=D0=BD=D0=B4=D0=B5=D0=BA=D1=81?= =?UTF-8?q?-=D0=B1=D0=BB=D0=BE=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ф0-разведка (находки F0-9…F0-24 + 9 скриншотов), дизайн-спека и пошаговый план (21 задача, 3 очереди) по UX-правкам рекламного Яндекс-блока портала. Реализация — в этой ветке от main. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../audit-01-yandex-showcase-desktop.png | Bin 0 -> 100986 bytes .../audit-02-topup-dialog-empty.png | Bin 0 -> 124808 bytes .../audit-03-wizard-step1.png | Bin 0 -> 109660 bytes .../audit-04-wizard-step2-ads-empty.png | Bin 0 -> 100641 bytes .../audit-05-wizard-step2-with-image.png | Bin 0 -> 106209 bytes .../audit-06-wizard-step4-review.png | Bin 0 -> 111967 bytes .../audit-07-wizard-step2-server-422.png | Bin 0 -> 119907 bytes .../audit-08-report-dialog-draft.png | Bin 0 -> 132237 bytes .../audit-09-yandex-mobile-390.png | Bin 0 -> 69624 bytes ...5-reklama-modul-zamechaniya-zhivoy-test.md | 184 ++++++++ ...026-07-25-yandex-reklama-ux-audit-fixes.md | 436 ++++++++++++++++++ ...25-yandex-reklama-ux-audit-fixes-design.md | 130 ++++++ 12 files changed, 750 insertions(+) create mode 100644 docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-01-yandex-showcase-desktop.png create mode 100644 docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-02-topup-dialog-empty.png create mode 100644 docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-03-wizard-step1.png create mode 100644 docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-04-wizard-step2-ads-empty.png create mode 100644 docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-05-wizard-step2-with-image.png create mode 100644 docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-06-wizard-step4-review.png create mode 100644 docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-07-wizard-step2-server-422.png create mode 100644 docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-08-report-dialog-draft.png create mode 100644 docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-09-yandex-mobile-390.png create mode 100644 docs/superpowers/findings/2026-07-25-reklama-modul-zamechaniya-zhivoy-test.md create mode 100644 docs/superpowers/plans/2026-07-25-yandex-reklama-ux-audit-fixes.md create mode 100644 docs/superpowers/specs/2026-07-25-yandex-reklama-ux-audit-fixes-design.md diff --git a/docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-01-yandex-showcase-desktop.png b/docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-01-yandex-showcase-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..c01c5cc0f3bf728f53ed8f315f19736ec1a3470f GIT binary patch literal 100986 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 z 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%0AmWEYzfu<)Z_3oGThL(d2Zeq+2!Nute1 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 literal 0 HcmV?d00001 diff --git a/docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-03-wizard-step1.png b/docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-03-wizard-step1.png new file mode 100644 index 0000000000000000000000000000000000000000..c9342ac589e7fa4448b7c133ee07eb8d3fc70e66 GIT binary patch literal 109660 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 literal 0 HcmV?d00001 diff --git a/docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-04-wizard-step2-ads-empty.png b/docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-04-wizard-step2-ads-empty.png new file mode 100644 index 0000000000000000000000000000000000000000..7fdd07ca92bbde2b3406f38f4e9e5ce4485b671e GIT binary patch literal 100641 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 literal 0 HcmV?d00001 diff --git a/docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-08-report-dialog-draft.png b/docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-08-report-dialog-draft.png new file mode 100644 index 0000000000000000000000000000000000000000..d38caa48f4c585cd779bc1f7d7bcef03a09b0c26 GIT binary patch literal 132237 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

    aJ|bdN?p(_f*LrN7KwVwE5jcsk)u@Qo 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%0D_~a{I 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. + +--- + +## 1. Рекламный кошелёк → в левое меню + +**Замечание:** кошелёк вынести в левое меню (сайдбар) в рекламный блок, назвать **«Рекламный кошелёк»**. + +**Сейчас:** плашка-шапка над мастером — компонент [app/resources/js/components/advertising/AdWalletHeader.vue](../../../app/resources/js/components/advertising/AdWalletHeader.vue) (баланс / заморожено / свободно + кнопка «Пополнить рекламный кошелёк»), рендерится внутри `AdvertisingYandexView.vue`. + +**Что делать:** перенести отображение баланса рекламного кошелька в левый сайдбар ([app/resources/js/components/layout/AppSidebar.vue](../../../app/resources/js/components/layout/AppSidebar.vue) + [app/resources/js/components/layout/advertisingChannels.ts](../../../app/resources/js/components/layout/advertisingChannels.ts)) в рекламную секцию, подпись «Рекламный кошелёк». Уточнить у владельца: пункт-ссылка на отдельную страницу кошелька ИЛИ компактный показ баланса прямо в меню. + +--- + +## 2. Текст шага «Кого рекламируем» — переформулировать + +**Замечание:** заменить формулировку. + +**Сейчас** (захардкожено в [app/resources/js/components/advertising/CampaignWizard.vue](../../../app/resources/js/components/advertising/CampaignWizard.vue), шаг 1): +> «Покажем рекламу тем, кто недавно оставил заявку — выберите, за сколько дней брать контакты.» + +**Новый текст (от владельца):** +> «Покажем рекламу людям, которых мы нашли по вашим источникам — выберите, за сколько дней брать контакты.» + +Заодно проверить подпись ползунка «За сколько дней брать свежие сделки» — возможно тоже переформулировать под «источники» вместо «сделки». Уточнить у владельца. + +--- + +## 3. «Использовать мой список номеров» — фича НЕ доделана + +**Замечание владельца:** «использовать мой список — как добавить-то его?» + +**Диагностика:** тумблер `use_uploaded_list` есть (CampaignWizard шаг 1, `v-switch` «Использовать мой загруженный список номеров»), таблица `ad_campaign_phones` создана, НО: +- **эндпоинта загрузки списка НЕТ** — в [app/routes/web.php](../../../app/routes/web.php) группа `/api/advertising` не содержит роута для загрузки телефонов кампании; +- в [app/resources/js/api/advertising.ts](../../../app/resources/js/api/advertising.ts) нет функции загрузки; +- фронт-UI загрузки нет. + +Т.е. тумблер — заглушка: включить можно, а положить номера некуда. `CampaignAudienceBuilder` читает `ad_campaign_phones` при `use_uploaded_list`, но их нечем наполнить. + +**Решение владельца (25.07):** пока **ничего не делать, только зафиксировать**. Реализация (загрузка файлом Excel/CSV ИЛИ вставка номеров текстом → запись в `ad_campaign_phones`, с бэкендом + фронтом) — отдельный инкремент. ⚠️ Чужие номера = ПДн + требуется согласие (галочка согласия на шаге 4 уже есть, `needsConsent`). + +**Промежуточный вариант (на выбор, если мешает):** временно спрятать тумблер, пока загрузка не сделана — чтобы не путал (реклама и так идёт по найденным нами контактам). + +--- + +## 4. Шаг «Объявления» — нет клиентских проверок + баг с картинкой + +Файл: [app/resources/js/components/advertising/CreativeForm.vue](../../../app/resources/js/components/advertising/CreativeForm.vue). + +**Общая причина (по коду):** форма СПЕЦИАЛЬНО не проверяет ничего на клиенте — все нормативы Яндекса (длины, картинка) проверяет сервер ([CreativeValidator](../../../app/app/Services/Advertising/CreativeValidator.php)), а фронт лишь показывает ошибку 422 после отправки. Владелец хочет **живые проверки прямо в форме** (сразу, до отправки, с понятными лимитами). + +### 4a. Нет проверки правильности сайта +Поле «Ссылка на ваш сайт» (`href`) не валидируется на клиенте. **Добавить:** проверку, что это корректный URL (http/https), с подсказкой формата. + +### 4b. Нет проверки длины текста объявления +Заголовок (лимит Яндекса ≤56), второй заголовок (≤30, узкие символы), текст (≤81) — на клиенте не считаются. **Добавить:** счётчики символов + лимиты (взять точные числа из [CreativeValidator](../../../app/app/Services/Advertising/CreativeValidator.php), НЕ выдумывать), блокировать/предупреждать при превышении. NB: у Vuetify есть `counter`/`:rules`. + +### 4c. 🔴 Баг: картинка добавляется ДВЕ вместо одной +**Замечание владельца:** «картинки 2 добавляется а не одна!» + +**Диагностика:** сервер (`uploadAdImage`, [AdvertisingCampaignController.php](../../../app/app/Http/Controllers/Api/AdvertisingCampaignController.php) стр. ~265–304) грузит ОДНУ картинку и ставит только `image_normal_hash`. Значит баг **на клиенте**. Наиболее вероятно — квирк Vuetify `v-file-input`: `v-model="file"` типизирован `File | null`, но `v-file-input` в ряде версий Vuetify 3 отдаёт **массив** `File[]` → в форме показывается/обрабатывается как две записи. **Воспроизвести в браузере** (клиентский вход на `lk.liderra.ru`), проверить фактическое значение `file`, поправить (single-file режим / привести тип). Возможно связано с `image_wide_hash` (широкая картинка) — свериться с дизайном §4.7 и `CreativeValidator::validateImage`. + +### 4d. Нет проверки размеров и веса картинки на клиенте +**Замечание:** «проверка размеров и объёма картинки!!!!» + +Сейчас размеры/вес проверяет только сервер (`validateImage(width,height,mime,size)`; лимит файла `max:10240` KB = 10 МБ). **Добавить на клиенте:** при выборе файла читать размеры (naturalWidth/Height через `Image`/`createObjectURL`) и `file.size`, показывать понятную ошибку до отправки (мин. размеры обычной 450–5000px 1:1..4:3, широкой 16:9 1080×607+, вес ≤10 МБ, JPG/PNG/GIF — точные числа из `CreativeValidator`). + +--- + +## 5. Шаг «Бюджет» — нет цены за клик (стоимость перехода) + +**Замечание владельца:** «а стоимость где за клик?» + +**Диагностика:** шаг 3 «Бюджет» ([CampaignWizard.vue](../../../app/resources/js/components/advertising/CampaignWizard.vue)) показывает только «Бюджет в неделю» + «Бюджет в день», но **поля цены за клик нет**. При этом в модели/таблице `ad_campaigns` есть колонка `click_bid_rub` (nullable), а в цепочке Директа ставка клика идёт в `AudienceTargets.add {ContextBid}` (см. план B1 / дизайн §4.7). То есть цена за клик технически есть, но: +- пользователь её **не видит и не задаёт** в мастере; +- если не задать — `click_bid_rub` = null → надо проверить, чем её подставляет `CampaignLauncher` (дефолт? падает?). + +**Что делать:** на шаге «Бюджет» показать/дать задать **цену за клик** (ставку `ContextBid`) с понятной подписью («Сколько готовы платить за один переход») и разумным дефолтом/подсказкой. Свериться с `CampaignLauncher` и дизайном §4.7 — не выдумывать значения. Также на шаге «Проверка и запуск» добавить цену за клик в сводку. + +--- + +## Как реализовывать (для следующего раунда) + +- Отдельная ветка от `main` + worktree (рабочая папка занята параллельной сессией; на Windows worktree Laravel — свой `composer install`, см. память `feedback-worktree-laravel-windows`). +- TDD на логику проверок (Vitest: URL-валидатор, счётчики длины, чтение размеров картинки; фикс бага «2 картинки»). +- Точные лимиты Яндекса брать ТОЛЬКО из `CreativeValidator` (не хардкодить наугад). +- После — выкат по ранбуку `docs/superpowers/runbooks/2026-06-18-gitea-prod-deploy-pipeline.md` (только изменённые фронт-файлы + пересборка бандла; миграций тут нет). +- Приоритет: 4c (баг с картинкой) и 2 (текст) — быстрые/заметные; 4a/4b/4d — проверки; 1 (кошелёк в меню) — UX; 3 (мой список) — отдельная фича по решению владельца. + +--- + +## Скилы и цепочка для UX-аудита всего Яндекс-блока (согласовано с владельцем 25.07) + +Правки делать НЕ точечно, а провести системный UX-аудит+устранение по всему рекламному блоку, **с обязательным вызовом скилов** (Pravila §12 hard-rule — skill инвокируется ПЕРВЫМ для подходящей задачи; координация Superpowers↔Frontend Design — PSR_v1, фильтр стека Vue 3 + Vuetify 3, Forest-override). + +**Скилы/инструменты по ролям:** +- Поиск дыр: **Playwright MCP** (пройти каждый экран вживую «глазами клиента», скриншоты) + **Pa11y** (a11y: контраст/клавиатура/скринридер/ярлыки; `npm run a11y`). +- Дизайн-решение: **superpowers:brainstorming** (спорное — цена клика, кошелёк в меню, «мой список») + **Frontend Design plugin** (доменная база UI/UX под Vue+Vuetify). +- Реализация: **superpowers:writing-plans** → **superpowers:using-git-worktrees** → **superpowers:test-driven-development** → **superpowers:debugging** (баг «2 картинки») → **superpowers:subagent-driven-development**. +- Проверка/завершение: **superpowers:requesting-code-review** + **Pa11y** → **superpowers:finishing-a-development-branch** (свести в main + выкат по ранбуку). +- Материал по PSR (не решатель, по необходимости, НЕ параллельно с Frontend Design): UI-UX-Pro-Max (резерв-библиотека), 21st Magic MCP (шаблоны). + +**Экраны блока (что обходим полностью):** +1. Витрина «Рекламные возможности» → «Яндекс Аудитория». +2. Рекламный кошелёк (баланс/заморожено/свободно) + «Пополнить» (счёт и карта). +3. Мастер «Новая реклама»: шаг 1 Кого рекламируем · 2 Объявления · 3 Бюджет · 4 Проверка и запуск. +4. «Мои кампании» (карточки статусов). +5. Карточка кампании: пауза/возобновить, отчёт, правка на ходу. +6. Админ-экран «Реклама — расход и маржа». + +**Фазы (на каждой — СТОП на согласование с владельцем):** +- **Ф0 Разведка** — Playwright + Pa11y: пройти все 6 групп экранов (клиент + админ), скриншот каждого, дополнить ЭТОТ файл полным списком дыр (к пунктам 1–5 добавятся находки). +- **Ф1 Дизайн** — brainstorming + Frontend Design: решить спорное, согласовать. +- **Ф2 План** — writing-plans: пошаговый план с приоритетами. +- **Ф3 Реализация** — worktree + TDD + debugging + Frontend Design, по задачам с ревью между. +- **Ф4 Проверка** — requesting-code-review + Pa11y. +- **Ф5 Выкат** — по ранбуку `docs/superpowers/runbooks/2026-06-18-gitea-prod-deploy-pipeline.md` + повторный прогон Playwright. + +--- + +**Статус:** зафиксировано 25.07.2026, не исправлено. Источник — живой тест владельца после выката модуля. Следующий шаг — Ф0 (разведка) в отдельной сессии, с обязательным вызовом скилов. + +--- + +# ФАЗА 0 — РАЗВЕДКА (проведена 25.07.2026) + +**Как проверял:** инвокированы скилы Frontend Design (доменная база UX под Vue3+Vuetify3, фильтр стека/Forest по PSR_v1) → живой проход браузером (Playwright MCP) под тестовым клиентским входом `info@lkomega.ru` на боевом `lk.liderra.ru` → точечный WCAG-проб дерева доступности (axe/скринридер-уровень) → сверка с кодом на `main` (`CreativeForm.vue`, `CampaignWizard.vue`, `AdminAdvertisingView.vue`, `CreativeValidator.php`). Прод **не менялся** (только чтение). + +**Состояние тест-аккаунта:** рекламный кошелёк = 0 ₽, боевой Директ выключен (`YANDEX_DIRECT_ENABLED` off) → **активные/на-паузе кампании физически недостижимы**; проверены черновики и пустые состояния. Скриншоты — `docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-01…09`. + +**⚠️ Побочный эффект разведки:** сам вход в мастер «Новая реклама» создал на бою **черновик кампании №4** (см. F0-9 — черновик создаётся при открытии мастера). Реального объявления не сохранено (все попытки — 422). Лишний черновик можно удалить, когда появится эндпоинт удаления. + +**Точные лимиты Яндекса (из `CreativeValidator.php`, канон — НЕ выдумывать):** заголовок ≤ **56** (слово ≤22); второй заголовок ≤ **30** обычных + ≤15 узких (`! , . ; : "`); текст ≤ **81** обычных + ≤15 узких (слово ≤23); картинка ≥ **450×450**, ≤ **10 МБ**, JPG/PNG/GIF. Пропорции (1:1/16:9) и «широкая» картинка сервером **не проверяются** (`TODO(verify)`; грузится только `image_normal_hash`). + +## Подтверждение замечаний владельца (1–5) + +| # | Замечание | Подтверждено вживую | +|---|---|---| +| 1 | Кошелёк → в левое меню | ✅ Кошелёк только в шапке экрана; в сайдбаре секция «Рекламные возможности» баланса не показывает. `audit-01`. | +| 2 | Текст шага 1 переформулировать | ✅ Старый текст на месте: «…тем, кто недавно оставил заявку…»; ползунок подписан «за сколько дней брать свежие **сделки**». `audit-03`. | +| 3 | «Мой список» не доделан | ✅ Галочку «Использовать мой загруженный список номеров» поставить можно — **никакого поля/кнопки загрузки не появляется** (мёртвый тумблер). `audit-03`. | +| 4c | Баг «2 картинки» | ⚠️ На чистой сессии двоение на уровне поля **НЕ воспроизвёл** (файл был один; `input.files.length=1`). Владелец видел вживую → корень искать на Ф3 через skill debugging (вероятно связка `image_normal`/`image_wide` или квирк версии `v-file-input`). | +| 4a/4b/4d | Нет клиентских проверок | ✅ Заголовок 77 симв. + ссылка «это_не_ссылка» → **ни счётчика, ни ошибки до отправки**; проверки только серверные (422). `audit-04/05/07`. | +| 5 | Нет цены за клик | ✅ Шаг 3 «Бюджет» — только «в неделю» и «в день», поля цены за клик нет. `audit-06`. | + +## Новые находки Ф0 + +**🔴 Баги / поведение** +- **F0-9 (🔴 копятся черновики).** Открытие мастера сразу создаёт черновик кампании на сервере (`onMounted → createDraft`), брошенные **не чистятся и не переиспользуются** (прямо сказано в комментарии кода). Итог — список «Мои кампании» забит одинаковыми «Реклама от 25.07.2026» (в тесте стало 4). Нужен reuse/удаление черновика. `audit-01`. +- **F0-10 (🔴 объявление теряется).** Форма креатива на шаге 2 не засчитывается, пока не нажата «Добавить объявление». Заполнил поля → «Далее» → на шаге 4 **«Объявлений: 0»**, данные потеряны без предупреждения. `audit-06`. Нужно: авто-коммит заполненной формы при переходе ИЛИ явное требование добавить. +- **F0-11 (🟠 сырые серверные ошибки).** Тексты 422 показывают **имена полей движка**: «Количество символов в поле **title**…», «Поле **text** обязательно…», «Поле **href** должно содержать корректный URL». Клиенту-непрограммисту непонятно. `audit-07`. +- **F0-12 (🟠 обязательность не помечена).** «Текст объявления» по факту **обязателен** (422 «text обязательно»), но в форме звёздочки/пометки нет — узнаёшь только после отправки. `audit-07`. + +**🟠 UX-дыры** +- **F0-13 (кошелёк).** Диалог «Пополнить» тесный: три кнопки «Закрыть / Получить счёт / Оплатить картой» не помещаются, «Закрыть» **обрезана** до «РЫТЬ» уже на 1440px. `audit-02`. +- **F0-14 (кошелёк).** Выключенная кнопка «Оплатить картой» отрисована **сплошной зелёной** (выглядит активной) при пустой сумме — ложная доступность. `audit-02`. +- **F0-15 (кошелёк).** Нет пресетов суммы (1000/3000/5000), нет пояснения «Заморожено/Свободно» (три числа без подсказки). Валидация «минимум 100 ₽» — есть и работает (👍). +- **F0-16 (кошелёк, ⚠️ проверить).** «Оплатить картой» подана как основной путь, но go-live ЮKassa не завершён (5 тест-платежей падали, см. память). Если карта на бою не работает — клиент упрётся в тупик. **Нельзя проверить в Ф0** (не нажимаю оплату/счёт на бою) — вынести решение на Ф1. +- **F0-17 (список).** 4 карточки с **одинаковым именем** «Реклама от 25.07.2026» — не различить. Имя по дате бесполезно при нескольких за день (добавить № / заголовок объявления). `audit-01`. +- **F0-18 (список).** Вкладка «Новая реклама» **дублирует** кнопку «+ Новая реклама» рядом — два элемента, одно действие. `audit-01`. +- **F0-19 (отчёт).** «Отчёт» доступен на **черновике**, который никогда не запускался → показывает «Объявлений пока нет / статистика появится после подключения к Директу». Кнопку «Отчёт» на черновике логично прятать/дизейблить. `audit-08`. +- **F0-20 (мастер).** Плавающий значок чата 💬 **перекрывает** кнопку «Далее» на шаге 2 (обрезано «ДАЛ›»). `audit-05`. +- **F0-21 (мастер).** «Далее» на шаге 1 активна при аудитории ~0 (предупреждение есть, но не блокирует переход); запуск на шаге 4 при этом корректно заблокирован с подсказкой (👍). Стоит согласовать: пускать ли вперёд при пустой аудитории. +- **F0-22 (мобильный).** На 390px нижняя навигация + чат **перекрывают** карточку черновика; кнопка «Пополнить рекламный кошелёк» почти вылезает по ширине. В остальном блок адаптируется (сайдбар→бургер, блоки стопкой). `audit-09`. + +**♿ Доступность (a11y)** +- **F0-23 (♿).** Вкладки «Мои кампании» / «Новая реклама» визуально подписаны, но **в дереве доступности имя пустое** → скринридер объявит вкладку без названия (Vuetify `v-tabs`, имя не попадает в accessible name). На проверенных экранах прочее чисто: нет кнопок-иконок без подписи, у полей есть label, `lang=ru`, один `h1`. +- **F0-24 (♿, процесс).** `npm run a11y` (Pa11y) настроен на `http://localhost:8000` и **публичные** страницы (login/register/…) — **до авторизованных рекламных экранов прода не достаёт**. Формальный Pa11y по рекламному блоку требует локального авторизованного прогона — вынести в Ф4. + +## Экран 6 (админка «Реклама — расход и маржа») — предварительно по коду + +Живьём не пройден — **нужен админ-доступ** (nginx basic-auth + админ-логин). По коду `AdminAdvertisingView.vue` экран структурно полный: переключатель периода (тек. месяц / прош. месяц / 90 дней / всё), три плитки-итога (расход клиентов / расход у Яндекса / наша маржа), наценка %, таблица по тенантам, пустое состояние «За период рекламных расходов нет.», алерт ошибки. Предварительные заметки к проверке на живом: суффикс «₽» у чисел (`formatPlain`), экспорт таблицы (нет — возможный запрос финансов), зависимость от `srv_bypass` для `crm_admin_user` (иначе тихий ноль, см. память выката). Без Директа/расходов ожидается пустое состояние. + +## Чего Ф0 НЕ покрыла (ограничения) +- Активная / на-паузе кампания, кнопки «Пауза/Возобновить», живой отчёт с показами — недостижимы (0 ₽ + Директ off). +- Реальный флоу «Получить счёт» и «Оплатить картой» — не нажимал (создаёт реальный счёт/платёж на бою). +- Живой админ-экран расход/маржа — нужен админ-доступ. +- Формальный Pa11y-прогон рекламных экранов — нужен локальный авторизованный прогон. + +**Итог Ф0:** подтверждены все 5 замечаний владельца (баг «2 картинки» — как «есть вживую, воспроизвести/добить на Ф3»), добавлено 16 находок (F0-9…F0-24). Дальше — **СТОП на согласование**, затем Ф1 (Дизайн: brainstorming + Frontend Design). diff --git a/docs/superpowers/plans/2026-07-25-yandex-reklama-ux-audit-fixes.md b/docs/superpowers/plans/2026-07-25-yandex-reklama-ux-audit-fixes.md new file mode 100644 index 00000000..2092573e --- /dev/null +++ b/docs/superpowers/plans/2026-07-25-yandex-reklama-ux-audit-fixes.md @@ -0,0 +1,436 @@ +# Яндекс-блок рекламы — UX-правки по аудиту: Implementation Plan + +> **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:** Устранить UX-дыры во всём клиентском Яндекс-блоке рекламы (кошелёк, мастер 1–4, список/карточка), добавить живые проверки, цену за клик, загрузку своего списка номеров, переиспользование/удаление черновиков и страницу кошелька. + +**Architecture:** Vue 3 + Vuetify 3 фронт (компоненты `resources/js/components/advertising/*`, `views/advertising/*`), Laravel 13 бэкенд (`AdvertisingCampaignController`, `routes/web.php` группа `/api/advertising`). Деньги — `bcmath` + `AdMarkup`/`AdWalletService` (не трогаем — конвертация ÷1,3 уже верна). Лимиты Яндекса — единый источник `CreativeValidator.php`, на фронт выносим синхронную копию-модуль. Работа в git-worktree от `main`. + +**Tech Stack:** Vue 3, Vuetify 3, TypeScript, Vitest (фронт-тесты), Pest 4 (бэк-тесты), PhoneNormalizer (переиспользуем для «моего списка»). + +**Спека:** `docs/superpowers/specs/2026-07-25-yandex-reklama-ux-audit-fixes-design.md`. Находки: `docs/superpowers/findings/2026-07-25-reklama-modul-zamechaniya-zhivoy-test.md`. + +**Точные лимиты (из `app/app/Services/Advertising/CreativeValidator.php`):** заголовок ≤56 (слово ≤22); второй ≤30 обычных +15 узких (`! , . ; : "`); текст ≤81 обычных +15 узких (слово ≤23); картинка ≥450×450, ≤10 МБ (10*1024*1024), MIME jpeg/png/gif. + +**Prereq (Ф3, до Task 1):** worktree от `main` через `superpowers:using-git-worktrees`; на Windows Laravel-worktree = свой `composer install`, `node_modules` можно junction (см. память `feedback-worktree-laravel-windows`). Первый коммит в ветку — Ф0-находки + спека (docs), под эскейп владельца. + +--- + +## ОЧЕРЕДЬ 1 — быстрые/заметные (в основном шаблон, look-first) + +### Task 1: Текст шага 1 + подпись ползунка + +**Files:** Modify: `app/resources/js/components/advertising/CampaignWizard.vue` (шаг 1 template, ~строки 216–221 «Покажем рекламу…» и ~строка 232 «За сколько дней брать свежие сделки»). + +- [ ] **Step 1: Заменить текст абзаца шага 1** + +Было: +```html +

    + Покажем рекламу тем, кто недавно оставил заявку — выберите, за сколько дней брать контакты. +

    +``` +Стало: +```html +

    + Покажем рекламу людям, которых мы нашли по вашим источникам — выберите, за сколько дней брать контакты. +

    +``` + +- [ ] **Step 2: Заменить подпись ползунка** + +Было: `За сколько дней брать свежие сделки` +Стало: `За сколько дней брать свежие контакты` + +- [ ] **Step 3: Проверка в браузере (Playwright) шага 1** — открыть мастер, убедиться, что новый текст и подпись отображаются. + +- [ ] **Step 4: Commit** — `git add app/resources/js/components/advertising/CampaignWizard.vue && git commit -m "fix(реклама): текст шага «Кого рекламируем» и подпись ползунка"` + +--- + +### Task 2: Убрать «Бюджет в день» из мастера + фикс отображения бюджета + +**Files:** Modify: `app/resources/js/components/advertising/CampaignWizard.vue` (шаг 3 template — поле `daily_budget_rub`; форма `form.daily_budget_rub`; вызовы `patchCampaign`/сводка шаг 4). + +- [ ] **Step 1: Убрать поле «Бюджет в день (необязательно)»** — удалить `v-text-field` с `v-model="form.daily_budget_rub"` на шаге 3. + +- [ ] **Step 2: В `saveBudgetStep` перестать слать daily** — в `patchCampaign(...)` убрать ключ `daily_budget_rub` (Яндекс при ручной стратегии его игнорирует; колонку БД не трогаем). + +- [ ] **Step 3: Убрать «.00» в отображении недельного бюджета** — там где бюджет показывается (шаг 3 hint / сводка шаг 4), форматировать через существующий `formatPlain(Number(form.weekly_budget_rub))` (как в `CampaignList.vue`), а не сырую строку `1000.00`. + +- [ ] **Step 4: Проверка Playwright** — шаг 3 без поля «в день»; сводка шага 4 «1 000 ₽» без «.00». + +- [ ] **Step 5: Commit** — `git commit -m "fix(реклама): убрать неработающий «Бюджет в день», формат бюджета без .00"` + +--- + +### Task 3: Спрятать «Отчёт» на черновике + +**Files:** Modify: `app/resources/js/components/advertising/CampaignList.vue` (карточка кампании, кнопка «Отчёт»). + +- [ ] **Step 1: Обернуть кнопку «Отчёт» условием** — показывать только если `campaign.status !== 'draft'`: +```html +Отчёт +``` + +- [ ] **Step 2: Проверка Playwright** — у черновика кнопки «Отчёт» нет, есть «Изменить» (и «Удалить» после Task 15). + +- [ ] **Step 3: Commit** — `git commit -m "fix(реклама): не показывать «Отчёт» у черновика"` + +--- + +### Task 4: Доступное имя вкладок «Мои кампании / Новая реклама» + +**Files:** Modify: `app/resources/js/views/advertising/AdvertisingYandexView.vue` (Vuetify `v-tabs`/`v-tab`). + +- [ ] **Step 1: Прочитать текущий блок вкладок** в `AdvertisingYandexView.vue` (найти ``/``). + +- [ ] **Step 2: Добавить каждому `v-tab` доступное имя** — либо явный текст-лейбл внутри таба, либо `aria-label="Мои кампании"` / `aria-label="Новая реклама"`, чтобы accessible name не был пустым (в Ф0 дерево доступности показало пустые имена). + +- [ ] **Step 3: Проверка через Playwright a11y-проб** — `document.querySelectorAll('[role=tab]')` accessible name непустой; либо повторить `browser_snapshot` — у tab появилось имя. + +- [ ] **Step 4: Commit** — `git commit -m "fix(a11y): доступные имена вкладок рекламного экрана"` + +--- + +### Task 5: Значок чата не перекрывает «Далее» в мастере + +**Files:** Modify: компонент плавающего чата (FAB 💬) ИЛИ футер мастера. Найти: `git grep -n "Открыть чат поддержки\|support-chat\|jivo\|chat" app/resources/js`. + +- [ ] **Step 1: Найти FAB чата** и его `z-index`/`position` + футер мастера с кнопкой «Далее». + +- [ ] **Step 2: Развести перекрытие** — добавить нижний отступ футеру мастера на мобильном/узком (`padding-bottom`) ИЛИ приподнять кнопки мастера над FAB, чтобы 💬 не накрывал «Далее». Не менять положение FAB глобально (он общий для портала). + +- [ ] **Step 3: Проверка Playwright** — на шаге 2 при 1440px и 390px кнопка «Далее» полностью видна и кликабельна, 💬 не поверх неё. + +- [ ] **Step 4: Commit** — `git commit -m "fix(реклама): чат-кнопка не перекрывает «Далее» в мастере"` + +**Ревью Очереди 1:** Frontend Design (визуал/токены/состояния) + Playwright прогон экранов. STOP на согласование перед Очередью 2. + +--- + +## ОЧЕРЕДЬ 2 — проверки формы + баг картинки + цена за клик (логика → TDD) + +### Task 6: Единый фронт-модуль лимитов креатива (синхрон с CreativeValidator) + +**Files:** Create: `app/resources/js/lib/advertising/creativeLimits.ts`; Test: `app/resources/js/lib/advertising/__tests__/creativeLimits.spec.ts`. + +- [ ] **Step 1: Написать падающие тесты** (Vitest): +```ts +import { describe, it, expect } from 'vitest'; +import { validateTitle, validateTitle2, validateText, NARROW_CHARS } from '../creativeLimits'; + +describe('creativeLimits', () => { + it('заголовок ровно 56 — ок, 57 — ошибка', () => { + expect(validateTitle('a'.repeat(56))).toBeNull(); + expect(validateTitle('a'.repeat(57))).toMatch(/56/); + }); + it('слово длиннее 22 в заголовке — ошибка', () => { + expect(validateTitle('a'.repeat(23))).toMatch(/22/); + }); + it('второй заголовок: 30 обычных ок, 31 — ошибка; узкие считаются отдельно', () => { + expect(validateTitle2('a'.repeat(30))).toBeNull(); + expect(validateTitle2('a'.repeat(31))).not.toBeNull(); + expect(validateTitle2('a'.repeat(30) + '!!!!!')).toBeNull(); // 30 обычных + 5 узких + }); + it('текст: 81 обычных ок, 82 — ошибка; слово >23 — ошибка', () => { + expect(validateText('a'.repeat(81))).toBeNull(); + expect(validateText('a'.repeat(82))).not.toBeNull(); + expect(validateText('a'.repeat(24))).toMatch(/23/); + }); +}); +``` + +- [ ] **Step 2: Запустить — упасть** — `npm run test:vue -- creativeLimits` → FAIL (модуля нет). + +- [ ] **Step 3: Реализовать `creativeLimits.ts`** портом логики `CreativeValidator` (те же константы 56/22/30/15/81/15/23, тот же список узких символов, подсчёт обычных/узких раздельно, разбивка слов по `\s+`). Возвращает строку-ошибку по-русски или `null`. + +- [ ] **Step 4: Запустить — пройти** — `npm run test:vue -- creativeLimits` → PASS. + +- [ ] **Step 5: Commit** — `git commit -m "feat(реклама): фронт-модуль лимитов креатива (синхрон с CreativeValidator)"` + +--- + +### Task 7: Живые счётчики символов в форме объявления + +**Files:** Modify: `app/resources/js/components/advertising/CreativeForm.vue` (поля title/title2/text). + +- [ ] **Step 1: Подключить `creativeLimits`** — computed-ошибки `titleError = validateTitle(title.value)` и т.д. + +- [ ] **Step 2: Добавить счётчики/правила Vuetify** — на `v-text-field`/`v-textarea` добавить `:counter="56"` (title), `:counter="30"` (title2), `:counter="81"` (text) и `:error-messages="[...(fieldErrors?.title ?? []), ...(liveTitleError ? [liveTitleError] : [])]"` — живая ошибка + серверная. + +- [ ] **Step 3: Проверка Playwright** — ввод 77 символов в заголовок сразу показывает предупреждение и счётчик 77/56 (в Ф0 было молчание). + +- [ ] **Step 4: Commit** — `git commit -m "feat(реклама): живые счётчики и проверка длин в форме объявления"` + +--- + +### Task 8: Клиентская проверка ссылки (URL) + +**Files:** Create: `app/resources/js/lib/advertising/urlRule.ts`; Test: `.../__tests__/urlRule.spec.ts`; Modify: `CreativeForm.vue`. + +- [ ] **Step 1: Падающий тест**: +```ts +import { isValidHttpUrl } from '../urlRule'; +it('только http/https', () => { + expect(isValidHttpUrl('https://liderra.ru')).toBe(true); + expect(isValidHttpUrl('http://a.b')).toBe(true); + expect(isValidHttpUrl('это_не_ссылка')).toBe(false); + expect(isValidHttpUrl('ftp://x')).toBe(false); + expect(isValidHttpUrl('')).toBe(false); +}); +``` + +- [ ] **Step 2: Запустить — упасть**. + +- [ ] **Step 3: Реализовать `isValidHttpUrl`** через `new URL()` + проверку протокола http/https. + +- [ ] **Step 4: Запустить — пройти**. + +- [ ] **Step 5: Подключить в `CreativeForm.vue`** — живая ошибка «Укажите адрес вида https://ваш-сайт.ru» под полем ссылки при непустом невалидном вводе. + +- [ ] **Step 6: Проверка Playwright** — «это_не_ссылка» подсвечивается сразу. + +- [ ] **Step 7: Commit** — `git commit -m "feat(реклама): клиентская проверка адреса сайта"` + +--- + +### Task 9: Клиентская проверка картинки (размер/вес/MIME) + +**Files:** Create: `app/resources/js/lib/advertising/imageMeta.ts` (чтение размеров) + `imageRule.ts`; Test: `.../__tests__/imageRule.spec.ts`; Modify: `CreativeForm.vue`. + +- [ ] **Step 1: Падающий тест на правило** (чистая функция, без DOM): +```ts +import { checkImage } from '../imageRule'; +it('размеры/вес/формат', () => { + expect(checkImage({width:500,height:500,bytes:1000,mime:'image/png'})).toBeNull(); + expect(checkImage({width:449,height:500,bytes:1000,mime:'image/png'})).toMatch(/450/); + expect(checkImage({width:500,height:500,bytes:11*1024*1024,mime:'image/png'})).toMatch(/10/); + expect(checkImage({width:500,height:500,bytes:1000,mime:'image/webp'})).toMatch(/формат/i); +}); +``` + +- [ ] **Step 2: Запустить — упасть**. + +- [ ] **Step 3: Реализовать `checkImage`** — те же пороги, что `CreativeValidator::validateImage` (min 450, 10 МБ, jpeg/png/gif). И `imageMeta.ts::readImageMeta(file): Promise<{width,height,bytes,mime}>` через `createObjectURL` + `Image()` (revokeObjectURL после). + +- [ ] **Step 4: Запустить — пройти**. + +- [ ] **Step 5: Подключить в `CreativeForm.vue`** — при выборе файла `readImageMeta` → `checkImage` → ошибка в `:error-messages` поля картинки до отправки. + +- [ ] **Step 6: Проверка Playwright** — загрузка мелкой/тяжёлой/webp картинки даёт понятную ошибку сразу. + +- [ ] **Step 7: Commit** — `git commit -m "feat(реклама): клиентская проверка размеров/веса/формата картинки"` + +--- + +### Task 10: Дружелюбные подписи серверных ошибок 422 + +**Files:** Modify: `app/resources/js/components/advertising/CreativeForm.vue` (маппинг ключей `title/title2/text/href/image` на русские подписи в выводе `fieldErrors`). + +- [ ] **Step 1: Ввести словарь подписей** `{ title:'Заголовок', title2:'Второй заголовок', text:'Текст объявления', href:'Ссылка на сайт', image:'Картинка' }` и заменять в тексте серверной ошибки имя поля на подпись (или, проще, показывать серверный текст ПОД правильным полем, а сам текст очищать от «поле title»-префикса регуляркой на русскую подпись). + +- [ ] **Step 2: Проверка Playwright** — отправка с длинным заголовком/битой ссылкой даёт «Заголовок длиннее 56…», а не «поле title…». + +- [ ] **Step 3: Commit** — `git commit -m "fix(реклама): человеческие подписи ошибок формы объявления"` + +--- + +### Task 11: «Текст объявления» — обязательное поле + +**Files:** Modify: `CreativeForm.vue`. + +- [ ] **Step 1: Пометить обязательным** — лейбл «Текст объявления *» + правило `:rules="[v => !!v || 'Заполните текст объявления']"`; блокировать «Добавить объявление» при пустом тексте (или показывать ошибку до серверного 422). + +- [ ] **Step 2: Проверка Playwright** — пустой текст явно помечен и не уходит молча в 422. + +- [ ] **Step 3: Commit** — `git commit -m "fix(реклама): текст объявления помечен обязательным"` + +--- + +### Task 12: Баг «2 картинки» — воспроизвести и починить + +**Files:** Test: `app/resources/js/components/advertising/__tests__/CreativeForm.image.spec.ts`; Modify: `CreativeForm.vue` (обработка `v-file-input` `v-model="file"`). + +- [ ] **Step 1: REQUIRED SUB-SKILL — `superpowers:systematic-debugging`.** Сначала воспроизвести двоение (Playwright на живом + проверка фактического значения `file` в разных версиях выбора: одиночный выбор, повторный выбор, замена файла). Зафиксировать точную причину (гипотезы: `v-file-input` отдаёт `File[]` при `File|null`-типе; либо двойной `@change`/`@update:modelValue`; либо связка normal/wide). + +- [ ] **Step 2: Падающий тест** (Vitest + @vue/test-utils), воспроизводящий двоение по найденной причине — например, что после выбора одного файла в модели/загрузке оказывается один `File`, а не массив/два. + +- [ ] **Step 3: Запустить — упасть**. + +- [ ] **Step 4: Фикс** по найденной причине (например, нормализовать `file` к одиночному: `Array.isArray(v) ? v[0] ?? null : v`; или снять дубль обработчика). + +- [ ] **Step 5: Запустить — пройти** + Playwright: одна картинка добавляется как одна. + +- [ ] **Step 6: Commit** — `git commit -m "fix(реклама): картинка объявления не двоится при загрузке"` + +--- + +### Task 13: Поле «Цена за клик» (шаг 3) + в сводку (шаг 4) + +**Files:** Modify: `CampaignWizard.vue` (форма `form` + шаг 3 template + сводка шаг 4). API `createCampaign`/`patchCampaign` уже принимают `click_bid_rub` (см. `api/advertising.ts::CampaignCreate`). + +- [ ] **Step 1: Добавить в `form`** поле `click_bid_rub: '10.00'` (дефолт как в `CampaignLauncher`, не выдумывать иной). + +- [ ] **Step 2: Поле на шаге 3** — `v-text-field type="number"` «Цена за клик», suffix «₽», подсказка «Сколько максимум готовы платить за один переход». Слать в `saveBudgetStep` через `patchCampaign({... click_bid_rub: form.click_bid_rub})`. + +- [ ] **Step 3: В сводку шага 4** добавить строку «Цена за клик: {{ форматированный click_bid_rub }} ₽» и «Сайт: {{ ссылка первого объявления }}». + +- [ ] **Step 4: Проверка Playwright** — поле цены клика видно на шаге 3, значение попадает в сводку шага 4. + +- [ ] **Step 5: Commit** — `git commit -m "feat(реклама): цена за клик в мастере и сводке"` + +**Ревью Очереди 2:** `superpowers:requesting-code-review` (логика/тесты) + Frontend Design (UI) + Pa11y-локально. STOP на согласование перед Очередью 3. + +--- + +## ОЧЕРЕДЬ 3 — крупное (backend + фронт + внешние зависимости) + +### Task 14: Переиспользование черновика при входе в мастер + +**Files:** Modify: `app/resources/js/components/advertising/CampaignWizard.vue` (`createDraft`/`onMounted`); при необходимости — `AdvertisingCampaignController@index`/новый параметр, но проще на фронте. + +- [ ] **Step 1: На фронте перед `createDraft`** — запросить список кампаний (`fetchCampaigns`), найти последний со `status==='draft'`; если есть — войти в режим правки этого черновика (`loadForEdit(id)`), иначе создавать новый. Это устраняет плодение черновиков. + +- [ ] **Step 2: Проверка Playwright** — двойной вход в «Новая реклама» не создаёт двух черновиков (в списке остаётся один незапущенный). + +- [ ] **Step 3: Commit** — `git commit -m "fix(реклама): переиспользовать черновик вместо создания нового при каждом входе"` + +--- + +### Task 15: Удаление черновика (backend + кнопка) + +**Files:** Modify: `app/routes/web.php` (группа `/api/advertising`), `app/app/Http/Controllers/Api/AdvertisingCampaignController.php` (метод `destroy`), `app/resources/js/api/advertising.ts` (fn `deleteCampaign`), `CampaignList.vue` (кнопка «Удалить»); Test: `app/tests/Feature/Advertising/DeleteCampaignTest.php`. + +- [ ] **Step 1: REQUIRED SUB-SKILL — `superpowers:test-driven-development`. Падающий Pest-тест**: DELETE `/api/advertising/campaigns/{id}` удаляет только `draft` своего тенанта (204); чужой тенант / не-draft → 403/409; RLS-изоляция соблюдена. + +- [ ] **Step 2: Запустить — упасть** (`composer test -- --filter=DeleteCampaign`). + +- [ ] **Step 3: Роут** — `Route::delete('/campaigns/{id}', '...AdvertisingCampaignController@destroy')->whereNumber('id');` + +- [ ] **Step 4: Метод `destroy`** — проверка tenant + `status==='draft'`, удалить кампанию (и связанные `ad_creatives`/`ad_campaign_phones` каскадом/явно). Не трогать запущенные. + +- [ ] **Step 5: Запустить — пройти**. + +- [ ] **Step 6: Фронт** — `deleteCampaign(id)` в `api/advertising.ts`; кнопка «Удалить» на карточке черновика в `CampaignList.vue` с подтверждением; после — `loadCampaigns()`. + +- [ ] **Step 7: Проверка Playwright** — черновик удаляется, список обновляется. + +- [ ] **Step 8: Commit** — `git commit -m "feat(реклама): удаление черновика кампании"` + +--- + +### Task 16: Различимое имя черновика + +**Files:** Modify: `CampaignWizard.vue::autoName()` и/или `CampaignList.vue` отображение. + +- [ ] **Step 1: Сделать имя информативнее** — например «Реклама от ДД.ММ.ГГГГ №{id}» или подставлять заголовок первого объявления, если есть. Простой вариант: в `CampaignList.vue` к имени черновика добавлять `#{id}`. + +- [ ] **Step 2: Проверка Playwright** — несколько черновиков различимы. + +- [ ] **Step 3: Commit** — `git commit -m "fix(реклама): различимые имена черновиков"` + +--- + +### Task 17: «Мой список» — backend загрузки телефонов + +**Files:** Modify: `routes/web.php`, `AdvertisingCampaignController.php` (метод `storePhones`); переиспользовать `App\Support\PhoneNormalizer`; Test: `app/tests/Feature/Advertising/UploadPhonesTest.php`. + +- [ ] **Step 1: REQUIRED SUB-SKILL — `superpowers:test-driven-development`. Падающий Pest-тест**: POST `/api/advertising/campaigns/{id}/phones` принимает либо файл (CSV/XLSX), либо текст со списком номеров; нормализует через `PhoneNormalizer` к `79XXXXXXXXX`, дедуп, пишет в `ad_campaign_phones` (tenant_id, campaign_id); возвращает `{recognized, skipped}`; чужой тенант → 403; RLS. **В фикстурах — синтетические номера, НЕ реальные ПДн** (gitleaks не смотрит в tests/, см. память). + +- [ ] **Step 2: Запустить — упасть**. + +- [ ] **Step 3: Роут** — `Route::post('/campaigns/{id}/phones', '...@storePhones')->whereNumber('id');` + +- [ ] **Step 4: Метод `storePhones`** — валидация (файл `mimes:csv,txt,xlsx max:...` ИЛИ поле `text`), парс строк, `PhoneNormalizer::normalize` каждой, отбросить невалидные/дубли, upsert в `ad_campaign_phones`. Вернуть счётчики. + +- [ ] **Step 5: Запустить — пройти**. + +- [ ] **Step 6: Commit** — `git commit -m "feat(реклама): загрузка своего списка номеров кампании (backend)"` + +> ⚠️ Если `ad_campaign_phones` под RLS и добавляются политики — пере-применить `db/03_service_bypass_policies.sql` (грабля srv_bypass, память выката). Таблица уже существует (лаунчер её читает) — проверить наличие GRANT/политик. + +--- + +### Task 18: «Мой список» — фронт загрузки в шаге 1 + +**Files:** Modify: `CampaignWizard.vue` (шаг 1, блок под тумблером `use_uploaded_list`), `api/advertising.ts` (fn `uploadCampaignPhones`). + +- [ ] **Step 1: `uploadCampaignPhones(id, {file?|text?})`** в `api/advertising.ts` (FormData для файла / JSON для текста). + +- [ ] **Step 2: Блок загрузки под тумблером** — когда `use_uploaded_list` включён: `v-file-input` (CSV/XLSX) + `v-textarea` «или вставьте номера» + кнопка «Загрузить»; после ответа показать «Распознано N, отброшено M номеров». Пояснение про согласие/ПДн. + +- [ ] **Step 3: Проверка Playwright** — включение тумблера показывает загрузку; тестовый список синтетических номеров загружается, счётчики видны (в Ф0 тумблер был мёртвый). + +- [ ] **Step 4: Commit** — `git commit -m "feat(реклама): загрузка своего списка номеров (фронт)"` + +--- + +### Task 19: Страница «Рекламный кошелёк» + пункт меню + +**Files:** Create: `app/resources/js/views/advertising/AdWalletView.vue`; Modify: `app/resources/js/router` (роут `/advertising/wallet`), `components/layout/advertisingChannels.ts` или `AppSidebar.vue` (пункт меню «Рекламный кошелёк»). + +- [ ] **Step 1: Пункт меню** — добавить «Рекламный кошелёк» (icon `mdi-wallet-outline`, route `/advertising/wallet`) в секцию «Рекламные возможности» (отдельно от `AD_CHANNELS`, т.к. это не канал; либо новый массив/пункт в `AppSidebar.vue`). + +- [ ] **Step 2: Роут + `AdWalletView.vue`** — страница: баланс (Кошелёк/Заморожено/Свободно) **с подсказками** что это; кнопка «Пополнить» (открывает `AdWalletTopupDialog`); лента истории пополнений/списаний (если есть API транзакций кошелька — использовать; если нет — показать баланс + пополнение, историю пометить как следующий инкремент, НЕ выдумывать эндпоинт). + +- [ ] **Step 3: Проверка Playwright** — пункт меню ведёт на страницу, баланс и пояснения видны. + +- [ ] **Step 4: Commit** — `git commit -m "feat(реклама): страница рекламного кошелька + пункт меню"` + +--- + +### Task 20: Переделка окна «Пополнить» + +**Files:** Modify: `app/resources/js/components/advertising/AdWalletTopupDialog.vue`. + +- [ ] **Step 1: Прочитать текущий `AdWalletTopupDialog.vue`** (кнопки, вёрстка, disabled-стиль). + +- [ ] **Step 2: Пресеты сумм** — чипы 1000/3000/5000 + «своя сумма»; минимум 100 ₽ оставить. + +- [ ] **Step 3: Починить вёрстку кнопок** — на узком/1440px «Закрыть» не обрезается; кнопки в столбик при нехватке ширины; выключенная «Оплатить картой» стилизована как выключенная (не сплошная зелёная). + +- [ ] **Step 4: Проверка Playwright** — 1440px и 390px: все кнопки читаемы, disabled-состояние явное, пресеты работают. + +- [ ] **Step 5: Commit** — `git commit -m "fix(реклама): переделка окна пополнения кошелька (пресеты, вёрстка, состояния)"` + +--- + +### Task 21: Проверить/починить оплату картой + +**Files:** Modify (по итогам проверки): `AdWalletTopupDialog.vue` (обработка результата `topupAdvertisingByCard`). + +- [ ] **Step 1: Проверить happy-path** — `topupAdvertisingByCard` уже шлёт `/api/billing/topup` credit_target=advertising; при ВКЛ `billing_yookassa_enabled` возвращает `confirmation_url` (редирект). Убедиться, что фронт делает редирект на `confirmation_url`, а при заглушке (`ok:true`) — обновляет баланс. + +- [ ] **Step 2: Обработка ошибок** — если оплата не создаётся / ЮKassa вернула отказ — показать понятную ошибку, не «тихий тупик». Добавить обработку отсутствия `confirmation_url` и `ok`. + +- [ ] **Step 3: ⚠️ Живая проверка картой на бою — ТОЛЬКО с владельцем** (go-live ЮKassa не завершён; happy-path картой в бою не проверялся). Без живой успешной оплаты «готово по карте» НЕ заявлять — зафиксировать как внешнюю блокировку, если платёж не проходит. + +- [ ] **Step 4: Commit** — `git commit -m "fix(реклама): корректный редирект/ошибки при оплате кошелька картой"` + +**Ревью Очереди 3:** code-review (логика/RLS через `rls-reviewer` для новых таблиц/политик) + Frontend Design + Pa11y. STOP. + +--- + +## Ф4 Проверка (после реализации) +- `superpowers:requesting-code-review` по всем изменениям; `rls-reviewer` для Task 15/17 (удаление/телефоны). +- Локальный авторизованный прогон **Pa11y** по рекламным экранам (текущий `pa11y.config.json` бьёт по публичным localhost-страницам — добавить авторизованный сценарий рекламных экранов). +- Полный прогон `/regression full` (Pest --parallel, Vitest, Vite build, larastan). + +## Ф5 Выкат +- По ранбуку `docs/superpowers/runbooks/2026-06-18-gitea-prod-deploy-pipeline.md`: свод в `main` → пуш gitea (GitHub мёртв) → билд-дерево → миграции на кластер (если появятся — способ §6b, под crm_migrator) → пере-применить `db/03_service_bypass_policies.sql` при новых RLS-таблицах → рестарт php-fpm/queue → smoke. +- Повторный прогон Playwright по всем 6 экранам. Живая проверка карты — с владельцем. +- Удалить лишний черновик №4, созданный при разведке Ф0. + +--- + +## Self-review (соответствие спеке) +- §4.A кошелёк → Task 19 (страница+меню), Task 20 (окно), Task 21 (карта). ✅ +- §4.B шаг 1 → Task 1 (текст/ползунок), Task 17+18 (мой список). ✅ +- §4.C шаг 2 → Task 6–12 (лимиты, счётчики, url, картинка, ошибки, обязательность, баг картинки). ✅ +- §4.D шаг 3 → Task 2 (убрать «в день»), Task 13 (цена клика). ✅ +- §4.E шаг 4 → Task 13 (сводка). ✅ +- §4.F список/карточка → Task 3 (отчёт на черновике), Task 14 (переиспользование), Task 15 (удаление), Task 16 (имена). ✅ +- §4.G a11y/мобильный → Task 4 (вкладки), Task 5 (чат), Ф4 (Pa11y), Task 20 (мобильный топап). ✅ +- §4.H админка → Ф-отдельно (админ-доступ). ⏳ вне этого плана (ждёт доступ). +- Денежная корректность §2 — не трогаем (верно). ✅ diff --git a/docs/superpowers/specs/2026-07-25-yandex-reklama-ux-audit-fixes-design.md b/docs/superpowers/specs/2026-07-25-yandex-reklama-ux-audit-fixes-design.md new file mode 100644 index 00000000..1368dc9a --- /dev/null +++ b/docs/superpowers/specs/2026-07-25-yandex-reklama-ux-audit-fixes-design.md @@ -0,0 +1,130 @@ +# Дизайн: системные UX-правки Яндекс-блока рекламы (по аудиту Ф0) + +**Дата:** 2026-07-25 +**Статус:** согласовано владельцем (Ф1). Следующий шаг — Ф2 (writing-plans). +**Вход:** аудит Ф0 — `docs/superpowers/findings/2026-07-25-reklama-modul-zamechaniya-zhivoy-test.md` (5 замечаний владельца + находки F0-9…F0-24, скриншоты `…/2026-07-25-reklama-modul-audit/`). +**Стек:** Vue 3 + Vuetify 3 (PSR_v1 R6 фильтр, Forest-override). Backend PHP 8.3 / Laravel 13. Деньги — `bcmath` + `AdMarkup`/`AdWalletService`/`LedgerService`. + +--- + +## 1. Цель и рамки + +Устранить UX-дыры во **всём клиентском Яндекс-блоке** (витрина → кошелёк → мастер 1–4 → список/карточка) + доступность и мобильный. Админ-экран «Расход и маржа» — отдельно, под админ-доступом (по коду структура ок, живьём не пройден). + +**Вне рамок:** боевой Директ (выключен, ждём одобрение Яндекса), реальный go-live онлайн-оплаты ЮKassa (ждёт тест-платёж владельца) — эти две внешние зависимости не «чинятся» здесь, но карта оплаты кошелька от go-live ЮKassa **зависит** (см. §4.A). + +**Источник лимитов Яндекса — канон `app/app/Services/Advertising/CreativeValidator.php`, не выдумывать:** +- Заголовок ≤ **56** символов, любое слово ≤ **22**. +- Второй заголовок ≤ **30** обычных + до **15** «узких» (`! , . ; : "`). +- Текст ≤ **81** обычных + до **15** узких, любое слово ≤ **23**. +- Картинка: сторона ≥ **450×450**, вес ≤ **10 МБ** (`10*1024*1024`), MIME `image/jpeg|png|gif`. Пропорции сервер не проверяет (`TODO(verify)`). + +--- + +## 2. Проверенная денежная корректность (менять не нужно) + +`CampaignLauncher::launch` уже конвертирует и бюджет, и ставку клика в «яндексовые» рубли перед отправкой в Директ: +- недельный лимит: `$markup->yandexFromClient(weekly_budget_rub)` → `WeeklySpendLimit` (×1e6); +- ставка клика: `$markup->yandexFromClient(click_bid_rub ?? '10.00')` → `ContextBid` (×1e6); +- заморозка в кошельке — в **клиентских** рублях (`AdWalletService::freeze`). + +⇒ Лимит клиента в клиентских рублях соблюдается (Яндекс тратит ≈ лимит ÷ 1,3; клиент платит это ×1,3 = его лимит). **Требование владельца «проверь, что лимит тоже снижается на 30%» выполнено — в коде верно.** Новое поле «цена за клик» ложится в уже существующий `click_bid_rub` и ту же конвертацию. + +--- + +## 3. Решения владельца (Ф1) + +| Тема | Решение | +|---|---| +| Кошелёк в меню | **A** — пункт-ссылка «Рекламный кошелёк» → отдельная страница (число в меню не показываем). | +| Цена за клик | **B** — клиент задаёт максимальную цену (в клиентских ₽); в Яндекс уходит ÷1,3. | +| «Мой список» | Делаем **загрузку сейчас** (файл + вставка номеров) + согласие ПДн. | +| Оплата картой | **Проверить/починить** (зависит от go-live ЮKassa). | +| Черновики | **Переиспользовать** последний незапущенный + кнопка **«Удалить»** (нужен эндпоинт удаления). | +| «Бюджет в день» | **Убрать** поле. | + +--- + +## 4. Дизайн по областям + +### 4.A. Рекламный кошелёк +- **Пункт меню «Рекламный кошелёк»** (`advertisingChannels.ts` + `AppSidebar.vue`) → новый роут/страница кошелька: баланс (Кошелёк / Заморожено / Свободно **с подсказками-пояснениями**), «Пополнить», **история пополнений и списаний** (лента транзакций кошелька). Компактный баланс над мастером на `/advertising/yandex` — оставляем. +- **Диалог «Пополнить» (`AdWalletTopupDialog`) переделать:** пресеты сумм (1000 / 3000 / 5000 / своя), почин тесной вёрстки (кнопки в столбик на узком, «Закрыть» не обрезается), **выключенная кнопка выглядит выключенной** (не сплошная зелёная при пустой сумме). Валидацию «минимум 100 ₽» оставить. +- **Карта:** проверить путь «Оплатить картой» для кошелька (какой эндпоинт, идёт ли через ЮKassa). Если go-live ЮKassa не завершён и карта на бою не работает — **честно зафиксировать внешнюю блокировку**, решить с владельцем (временно спрятать/ждать). Не выдаём «готово», если happy-path картой в бою не проверен. + +### 4.B. Мастер, шаг 1 «Кого рекламируем» (`CampaignWizard.vue`) +- Текст шага: → «Покажем рекламу людям, которых мы нашли по вашим источникам — выберите, за сколько дней брать контакты.» +- Подпись ползунка: «за сколько дней брать свежие **сделки**» → «…свежие **контакты**». +- **«Мой список» (загрузка):** тумблер `use_uploaded_list` включает блок загрузки: + - вход двумя способами — **файл** (Excel/CSV) **или** вставка номеров текстом; + - парс/нормализация номеров (формат `79…`, как в существующем finder-коде — переиспользовать, не дублировать), дедуп, показ «распознано N номеров / отброшено M»; + - запись в `ad_campaign_phones` (таблица есть) через новый бэкенд-эндпоинт загрузки телефонов кампании (в `routes/web.php` группе `/api/advertising` его нет — добавить) + функция в `api/advertising.ts`; + - **ПДн/согласие:** галочка согласия на шаге 4 (`needsConsent` при `use_uploaded_list`) уже есть — оставить; чужие номера = ПДн, в тесты реальные номера НЕ класть (gitleaks не смотрит в `tests/`, см. память). + +### 4.C. Мастер, шаг 2 «Объявления» (`CreativeForm.vue`) +- **Живые клиентские проверки (до отправки), лимиты — из `CreativeValidator` (не хардкодить наугад, держать один источник):** + - счётчики символов заголовок/второй/текст + предупреждение при превышении (Vuetify `counter`/`:rules`); учёт «узких» символов по правилу сервера; + - проверка ссылки — корректный URL (http/https), подсказка формата; + - картинка — при выборе читать `naturalWidth/Height` (через `Image`/`createObjectURL`) и `file.size`, MIME; понятная ошибка (мин. 450×450, ≤ 10 МБ, JPG/PNG/GIF) до отправки. +- **Дружелюбные ошибки:** маппинг серверных 422 на человеческие подписи полей (не «поле title/text/href»). +- «Текст объявления» — **пометить обязательным** (звёздочка/`required`). +- **Баг «2 картинки» (F0/4c):** воспроизвести и починить на Ф3 через `superpowers:debugging`. Гипотезы: квирк версии `v-file-input` (`File[]` vs `File`) либо связка `image_normal`/`image_wide`. На чистой сессии Ф0 двоение на уровне поля не воспроизведено (`input.files.length=1`) — искать в связке/версии. +- **Объявление не теряется (F0-10):** при «Далее» с шага 2, если форма креатива заполнена и не добавлена — авто-добавлять (или явно требовать «Добавить объявление» с понятным сообщением). Дефолт — **авто-добавление валидной формы** (щадящий путь). +- Значок чата 💬 не должен перекрывать «Далее» (z-index/отступ на шаге мастера). + +### 4.D. Мастер, шаг 3 «Бюджет» +- **Новое поле «Цена за клик»** (клиентские ₽) → `click_bid_rub`. Подпись «Сколько максимум готов платить за переход», дефолт/подсказка (дефолт `10.00`, как в лаунчере — не выдумывать иные значения). Конвертация в Яндекс ÷1,3 уже есть. +- **Убрать «Бюджет в день»** (`daily_budget_rub`) из мастера — Яндекс при ручной стратегии его игнорирует. (Колонку в БД не трогаем; просто не показываем/не шлём.) +- Недельный бюджет — убрать некрасивое «.00» в отображении. + +### 4.E. Мастер, шаг 4 «Проверка и запуск» +- В сводку добавить **цену за клик** и **сайт/ссылку** объявления. Галочка-согласие для «моего списка» — как есть. + +### 4.F. Список кампаний / карточка (`CampaignList.vue`, `AdvertisingYandexView.vue`) +- **Черновики:** при входе в мастер — **переиспользовать** последний незапущенный черновик тенанта вместо `createCampaign` каждый раз; кнопка **«Удалить»** на карточке черновика (новый эндпоинт удаления + `api/advertising.ts`; удалять только `draft`). +- **Имя черновика различимое:** дата + № (или заголовок первого объявления), чтобы не было 4× «Реклама от 25.07.2026». +- **«Отчёт» на черновике** — прятать/дизейблить (отчитываться нечего). + +### 4.G. Доступность и мобильный +- Вкладки «Мои кампании / Новая реклама» — задать доступное имя (`aria-label`/корректный slot), чтобы скринридер их озвучивал. +- Мобильный (390px): нижняя навигация и чат не перекрывают карточки; кнопка «Пополнить рекламный кошелёк» не вылезает по ширине. +- Формальный **Pa11y** по авторизованным рекламным экранам — локальным авторизованным прогоном на **Ф4** (текущий `pa11y.config.json` бьёт по `localhost:8000` и публичным страницам). + +### 4.H. Админка «Расход и маржа» (`AdminAdvertisingView.vue`) +- Пройти живьём под админ-доступом (позже). Предварительно к проверке: суффикс «₽» у чисел (`formatPlain`), возможный экспорт таблицы, зависимость видимости данных от `srv_bypass` для `crm_admin_user` на кластере (иначе тихий ноль — см. память выката). + +--- + +## 5. Тестирование (TDD на логику — Ф3) + +Тесты **до кода** на чистую логику: +- URL-валидатор (http/https, мусор типа «это_не_ссылка» → невалидно). +- Счётчики символов заголовка/второго/текста с учётом «узких» символов и длинных слов (граничные 56/57, 30+15, 81+15, слово 22/23) — сверять с `CreativeValidator` (единый источник; вынести общие пределы, чтобы фронт и бэк не разошлись). +- Чтение размеров/веса картинки (≥450×450, ≤10 МБ, MIME). +- Парсер «моего списка» (нормализация `79…`, дедуп, счёт распознанных/отброшенных) — БЕЗ реальных ПДн в фикстурах. +- Баг «2 картинки» — сначала падающий тест, воспроизводящий двоение, потом фикс (`superpowers:debugging`). +Визуальная сборка (шаблоны/токены) — look-first, вне TDD (PSR R3). + +--- + +## 6. Порядок (приоритеты) + +1. **Быстрое/заметное:** текст шага 1 + подпись ползунка; убрать «Бюджет в день»; спрятать «Отчёт» на черновике; доступное имя вкладок; чат не перекрывает «Далее». +2. **Проверки формы + баг картинки + цена за клик:** живые проверки (ссылка/счётчики/картинка), дружелюбные ошибки, «Текст» обязателен, фикс «2 картинки», поле «Цена за клик» + сводка. +3. **Крупное:** загрузка «моего списка» (бэкенд+фронт+ПДн); переиспользование/удаление черновиков; страница кошелька + переделка окна «Пополнить»; проверка/починка карты (внешняя зависимость ЮKassa). + +Каждый пункт — с ревью между (PSR R5: логика — Superpowers code-review; UI — Frontend Design; a11y — Pa11y). + +--- + +## 7. Внешние зависимости и честные ограничения +- **Карта оплаты кошелька** зависит от go-live ЮKassa (не завершён). Happy-path картой в бою не проверялся — «готово» по карте не заявляем без живой проверки. +- **Боевой Директ выключен** → активные/на-паузе кампании и живой отчёт с показами недостижимы; проверка этих состояний — после включения Директа. +- **Админ-экран** — нужен админ-доступ (nginx basic-auth + логин). +- Новые RLS-таблицы (если появятся под «мой список»/удаление) — не забыть `db/03_service_bypass_policies.sql` пере-применить (грабля srv_bypass, память выката). + +--- + +## 8. Затрагиваемые файлы (ориентир, точный список — в плане Ф2) +- Фронт: `components/advertising/{AdWalletHeader,AdWalletTopupDialog,CampaignWizard,CreativeForm,CampaignList,CampaignReportDialog}.vue`, новый экран страницы кошелька, `views/advertising/AdvertisingYandexView.vue`, `components/layout/{AppSidebar.vue,advertisingChannels.ts}`, `api/advertising.ts`, общий модуль лимитов креатива. +- Бэкенд: `routes/web.php` (`/api/advertising` — эндпоинты загрузки телефонов и удаления черновика), `Http/Controllers/Api/AdvertisingCampaignController.php`, сервисы загрузки/парсинга телефонов, при необходимости — общий источник лимитов (сверка с `CreativeValidator`). From 17172c4cfe7c8ce686e8013020ac2a003d448524 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sat, 25 Jul 2026 20:16:43 +0300 Subject: [PATCH 002/213] =?UTF-8?q?fix(=D1=80=D0=B5=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B0=20=D1=8F=D0=BD=D0=B4=D0=B5=D0=BA=D1=81):=20=D0=9E?= =?UTF-8?q?=D1=87=D0=B5=D1=80=D0=B5=D0=B4=D1=8C=201=20UX-=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BE=D0=BA=20=D0=BC=D0=B0=D1=81=D1=82=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=20=D0=BA=D0=B0=D0=BC=D0=BF=D0=B0=D0=BD=D0=B8=D0=B8=20?= =?UTF-8?q?=E2=80=94=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=D1=8B,=20=D0=B1?= =?UTF-8?q?=D1=8E=D0=B4=D0=B6=D0=B5=D1=82,=20=D0=BE=D1=82=D1=87=D1=91?= =?UTF-8?q?=D1=82,=20=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C,=20=D1=87=D0=B0=D1=82-=D0=BA=D0=BD=D0=BE?= =?UTF-8?q?=D0=BF=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - шаг 1: текст про источники контактов вместо «недавней заявки», подпись ползунка «свежие контакты» - шаг 3: убрано неиспользуемое поле «Бюджет в день» из формы, PATCH его больше не отправляет - шаг 4: сумма бюджета в сводке — без «.00», через formatPlain (как в CampaignList) - список кампаний: кнопка «Отчёт» скрыта для черновиков - вкладки «Мои кампании»/«Новая реклама» получили aria-label для скринридера - футер шагов мастера — отступ снизу, чтобы плавающая кнопка чата не перекрывала «Далее» Co-Authored-By: Claude Opus 4.8 (1M context) --- .../components/advertising/CampaignList.vue | 1 + .../components/advertising/CampaignWizard.vue | 36 ++++++++++--------- .../advertising/AdvertisingYandexView.vue | 4 +-- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/app/resources/js/components/advertising/CampaignList.vue b/app/resources/js/components/advertising/CampaignList.vue index b7f56ef7..2ccb3262 100644 --- a/app/resources/js/components/advertising/CampaignList.vue +++ b/app/resources/js/components/advertising/CampaignList.vue @@ -240,6 +240,7 @@ defineExpose({ loadCampaigns }); { try { await patchCampaign(draftId.value, { weekly_budget_rub: form.weekly_budget_rub, - daily_budget_rub: form.daily_budget_rub || null, audience_days: form.audience_days, use_uploaded_list: form.use_uploaded_list, }); @@ -284,7 +284,7 @@ defineExpose({ form, draftId, audienceSize, canLaunch, refreshAudienceSize, budg

    Кого рекламируем

    - Покажем рекламу тем, кто недавно оставил заявку — выберите, за сколько дней брать контакты. + Покажем рекламу людям, которых мы нашли по вашим источникам — выберите, за сколько дней брать контакты.

    - За сколько дней брать свежие сделки + За сколько дней брать свежие контакты {{ form.audience_days }} дн.
    - -

    {{ budgetError }}

    @@ -437,7 +426,9 @@ defineExpose({ form, draftId, audienceSize, canLaunch, refreshAudienceSize, budg Бюджет в неделю - {{ form.weekly_budget_rub }} ₽ + {{ + formatPlain(Number(form.weekly_budget_rub)) + }} Бюджет в день @@ -495,7 +486,7 @@ defineExpose({ form, draftId, audienceSize, canLaunch, refreshAudienceSize, budg + + + + Удалить кампанию? + + Черновик «{{ campaignToDelete?.name }} #{{ campaignToDelete?.id }}» будет удалён без возможности + восстановления. + + + + Отмена + + Удалить + + + +
    diff --git a/app/resources/js/components/advertising/CampaignWizard.vue b/app/resources/js/components/advertising/CampaignWizard.vue index a4230407..e34dd427 100644 --- a/app/resources/js/components/advertising/CampaignWizard.vue +++ b/app/resources/js/components/advertising/CampaignWizard.vue @@ -16,10 +16,14 @@ * без id не работает живой счётчик аудитории (GET .../audience-size требует * campaign id). Имя черновика — авто, «Реклама от ДД.ММ.ГГГГ» (дата создания). * - * ⚠️ Брошенные черновики (клиент закрыл мастер, не дойдя до запуска) пока - * НЕ чистятся и НЕ переиспользуются — они остаются в статусе draft. Чистка/ - * переиспользование черновиков — следующий инкремент (эндпоинта удаления - * в API B1 нет, выдумывать его здесь нельзя). + * ПЕРЕИСПОЛЬЗОВАНИЕ ЧЕРНОВИКА (T14): без `campaignId` мастер сперва спрашивает + * список кампаний (`fetchCampaigns`) и ищет ПОСЛЕДНИЙ незапущенный черновик + * (`status === 'draft'`, список приходит отсортированным `id` desc — первый + * найденный и есть последний). Нашёлся — продолжаем его через `loadForEdit` + * (без `createDraft`, новый черновик НЕ плодим); это НЕ режим правки — + * `isEditMode` завязан строго на `props.campaignId`, подсказка Р30 не + * показывается. Черновиков нет или список не удалось получить — как раньше, + * `createDraft()`. * * РЕЖИМ ПРАВКИ (B2-9, Р30): опциональный prop `campaignId`. Если задан — при * монтировании грузим существующую кампанию (`fetchCampaign`) и префиллим @@ -36,8 +40,10 @@ import { createCampaign, patchCampaign, fetchCampaign, + fetchCampaigns, fetchAudienceSize, launchCampaign, + uploadCampaignPhones, type CampaignCreate, type AudienceSize, type AdCreative, @@ -263,15 +269,72 @@ function stepValue(item: unknown): number { return Number((item as { value: number }).value); } +/** + * T14 — без `campaignId` не плодим черновик бездумно: сперва смотрим список + * кампаний тенанта и, если там уже есть незапущенный черновик, продолжаем + * его вместо создания нового. Сбой запроса списка — не роняем мастер молча, + * фолбэк на прежнее поведение (`createDraft`). + */ +async function initDraftOrResume(): Promise { + try { + const campaigns = await fetchCampaigns(); + const existingDraft = campaigns.find((c) => c.status === 'draft'); + if (existingDraft) { + await loadForEdit(existingDraft.id); + return; + } + } catch { + // Список кампаний не удалось получить — не блокируем создание рекламы этим сбоем. + } + await createDraft(); +} + onMounted(() => { if (props.campaignId != null) { void loadForEdit(props.campaignId); } else { - void createDraft(); + void initDraftOrResume(); } }); -defineExpose({ form, draftId, audienceSize, canLaunch, refreshAudienceSize, budgetError, launchError }); +const phonesFile = ref(null); +const phonesText = ref(''); +const phonesUploading = ref(false); +const phonesUploadError = ref(null); +const phonesUploadResult = ref<{ recognized: number; skipped: number } | null>(null); + +/** T18 — загрузка «моего списка номеров» с шага 1 (файл и/или текст, хотя бы один нужен серверу). */ +async function uploadPhones(): Promise { + if (draftId.value === null) return; + phonesUploadError.value = null; + phonesUploadResult.value = null; + phonesUploading.value = true; + try { + phonesUploadResult.value = await uploadCampaignPhones(draftId.value, { + file: phonesFile.value, + text: phonesText.value, + }); + } catch (e) { + phonesUploadError.value = extractErrorMessage(e, 'Не удалось загрузить список номеров.'); + } finally { + phonesUploading.value = false; + } +} + +defineExpose({ + form, + draftId, + audienceSize, + canLaunch, + refreshAudienceSize, + budgetError, + launchError, + phonesFile, + phonesText, + uploadPhones, + phonesUploadResult, + phonesUploadError, +}); - + diff --git a/app/resources/js/components/layout/AppMoreDrawer.vue b/app/resources/js/components/layout/AppMoreDrawer.vue index 1ee6d427..1c74a389 100644 --- a/app/resources/js/components/layout/AppMoreDrawer.vue +++ b/app/resources/js/components/layout/AppMoreDrawer.vue @@ -67,6 +67,14 @@ function onChannelClick(c: AdChannel): void { :data-testid="c.testid" @click="onChannelClick(c)" /> + + diff --git a/app/resources/js/components/layout/AppSidebar.vue b/app/resources/js/components/layout/AppSidebar.vue index da8ac061..dd1c34cb 100644 --- a/app/resources/js/components/layout/AppSidebar.vue +++ b/app/resources/js/components/layout/AppSidebar.vue @@ -82,11 +82,16 @@ const navGroups = computed(() => [ eyebrow: 'Рекламные возможности', // B2-2: канал с route (сейчас — Яндекс Аудитория) ведёт на реальный экран // (RouterLink, как обычные пункты); остальные — по-прежнему заглушка openAdStub. - items: AD_CHANNELS.map((c) => - c.route - ? { title: c.title, icon: c.icon, to: c.route, testid: c.testid } - : { title: c.title, icon: c.icon, stub: true, testid: c.testid }, - ), + // T19: «Рекламный кошелёк» — не канал (в AD_CHANNELS не входит), отдельный + // пункт-ссылка на /advertising/wallet. Число баланса в меню не показываем. + items: [ + ...AD_CHANNELS.map((c) => + c.route + ? { title: c.title, icon: c.icon, to: c.route, testid: c.testid } + : { title: c.title, icon: c.icon, stub: true, testid: c.testid }, + ), + { title: 'Рекламный кошелёк', icon: 'mdi-wallet-outline', to: '/advertising/wallet', testid: 'ad-nav-wallet' }, + ], }, { eyebrow: 'Финансы', diff --git a/app/resources/js/router/index.ts b/app/resources/js/router/index.ts index a741388e..e0dca25f 100644 --- a/app/resources/js/router/index.ts +++ b/app/resources/js/router/index.ts @@ -184,6 +184,18 @@ const routes: RouteRecordRaw[] = [ devLabel: 'Реклама · Яндекс', }, }, + { + path: '/advertising/wallet', + name: 'advertising-wallet', + component: () => import('../views/advertising/AdWalletView.vue'), + meta: { + layout: 'app', + title: 'Рекламный кошелёк', + requiresAuth: true, + transition: 'ld-route-fadeup', + devLabel: 'Реклама · Кошелёк', + }, + }, { path: '/settings', name: 'settings', diff --git a/app/resources/js/views/advertising/AdWalletView.vue b/app/resources/js/views/advertising/AdWalletView.vue new file mode 100644 index 00000000..018cd5f5 --- /dev/null +++ b/app/resources/js/views/advertising/AdWalletView.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/app/tests/Frontend/AppMoreDrawerAdvertising.spec.ts b/app/tests/Frontend/AppMoreDrawerAdvertising.spec.ts index 7e689642..526c2a89 100644 --- a/app/tests/Frontend/AppMoreDrawerAdvertising.spec.ts +++ b/app/tests/Frontend/AppMoreDrawerAdvertising.spec.ts @@ -67,4 +67,16 @@ describe('AppMoreDrawer — раздел «Рекламные возможнос expect(wrapper.find('[data-testid="ad-stub-dialog"]').exists()).toBe(false); expect(wrapper.emitted('update:open')?.at(-1)).toEqual([false]); }); + + // T19: «Рекламный кошелёк» — реальная ссылка, не заглушка; клик закрывает «Ещё». + it('содержит «Рекламный кошелёк», клик НЕ открывает заглушку и закрывает «Ещё»', async () => { + const wrapper = await setup(); + const link = wrapper.find('[data-testid="ad-nav-wallet"]'); + expect(link.exists()).toBe(true); + expect(link.text()).toContain('Рекламный кошелёк'); + + await link.trigger('click'); + expect(wrapper.find('[data-testid="ad-stub-dialog"]').exists()).toBe(false); + expect(wrapper.emitted('update:open')?.at(-1)).toEqual([false]); + }); }); diff --git a/app/tests/Frontend/AppSidebarAdvertising.spec.ts b/app/tests/Frontend/AppSidebarAdvertising.spec.ts index 4548b76b..ed325421 100644 --- a/app/tests/Frontend/AppSidebarAdvertising.spec.ts +++ b/app/tests/Frontend/AppSidebarAdvertising.spec.ts @@ -99,4 +99,16 @@ describe('AppSidebar — раздел «Рекламные возможност await link.trigger('click'); expect(wrapper.find('[data-testid="ad-stub-dialog"]').exists()).toBe(false); }); + + // T19: «Рекламный кошелёк» — отдельная ссылка (НЕ канал-заглушка), без числа баланса в меню. + it('пункт «Рекламный кошелёк» — ссылка на /advertising/wallet, без суммы баланса в подписи', async () => { + const { wrapper } = await setup(); + const link = wrapper.find('[data-testid="ad-nav-wallet"]'); + expect(link.exists()).toBe(true); + expect(link.attributes('href')).toBe('/advertising/wallet'); + expect(link.text()).toBe('Рекламный кошелёк'); + + await link.trigger('click'); + expect(wrapper.find('[data-testid="ad-stub-dialog"]').exists()).toBe(false); + }); }); diff --git a/app/tests/Frontend/advertising-wallet-topup.spec.ts b/app/tests/Frontend/advertising-wallet-topup.spec.ts index e19bb6c0..2a0bb201 100644 --- a/app/tests/Frontend/advertising-wallet-topup.spec.ts +++ b/app/tests/Frontend/advertising-wallet-topup.spec.ts @@ -162,6 +162,63 @@ describe('AdWalletTopupDialog.vue (T3 + C2 — пополнение реклам expect(w.find('[data-testid="topup-pdf-link"]').exists()).toBe(false); }); + it('T20: клик по пресету 3000 подставляет сумму в поле', async () => { + const w = mount(AdWalletTopupDialog, { + props: { modelValue: true }, + global: { plugins: [vuetify], stubs: DIALOG_STUBS }, + }); + + expect((w.find('[data-testid="topup-amount"] input').element as HTMLInputElement).value).toBe(''); + + await w.find('[data-testid="topup-preset-3000"]').trigger('click'); + await w.vm.$nextTick(); + + expect((w.find('[data-testid="topup-amount"] input').element as HTMLInputElement).value).toBe('3000'); + }); + + it('T20: при пустой сумме «Оплатить картой» выключена', () => { + const w = mount(AdWalletTopupDialog, { + props: { modelValue: true }, + global: { plugins: [vuetify], stubs: DIALOG_STUBS }, + }); + + const btn = w.find('[data-testid="topup-card-btn"]'); + expect(btn.attributes('disabled')).not.toBeUndefined(); + }); + + it('T20: после подстановки пресета «Оплатить картой» становится активной', async () => { + const w = mount(AdWalletTopupDialog, { + props: { modelValue: true }, + global: { plugins: [vuetify], stubs: DIALOG_STUBS }, + }); + + await w.find('[data-testid="topup-preset-1000"]').trigger('click'); + await w.vm.$nextTick(); + + const btn = w.find('[data-testid="topup-card-btn"]'); + expect(btn.attributes('disabled')).toBeUndefined(); + }); + + it('T21: ни confirmation_url, ни ok:true в ответе — явная ошибка, не тихий тупик', async () => { + topupAdvertisingByCardMock.mockResolvedValue({}); + + const w = mount(AdWalletTopupDialog, { + props: { modelValue: true }, + global: { plugins: [vuetify], stubs: DIALOG_STUBS }, + }); + + await w.find('[data-testid="topup-amount"] input').setValue(2000); + await w.find('[data-testid="topup-card-btn"]').trigger('click'); + await flush(); + await w.vm.$nextTick(); + + expect(redirectToMock).not.toHaveBeenCalled(); + expect(w.emitted('topped-up')).toBeFalsy(); + const error = w.find('[data-testid="topup-error"]'); + expect(error.exists()).toBe(true); + expect(error.text().length).toBeGreaterThan(0); + }); + it('открытие диалога сбрасывает предыдущую сумму/ошибку/счёт/успех оплаты картой', async () => { createAdvertisingInvoiceMock.mockResolvedValue({ id: 1, diff --git a/app/tests/Frontend/advertising-wallet-view.spec.ts b/app/tests/Frontend/advertising-wallet-view.spec.ts new file mode 100644 index 00000000..dd89a05f --- /dev/null +++ b/app/tests/Frontend/advertising-wallet-view.spec.ts @@ -0,0 +1,123 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { mount } from '@vue/test-utils'; +import { createVuetify } from 'vuetify'; + +/** + * AdWalletView (T19 — страница «Рекламный кошелёк», план 2026-07-25). + * Баланс через fetchWallet() (тот же источник, что и AdWalletHeader), кнопка + * «Пополнить» открывает AdWalletTopupDialog, история операций — пометка + * «появится позже» (клиентского эндпоинта списка операций нет). + */ +const { fetchWalletMock } = vi.hoisted(() => ({ + fetchWalletMock: vi.fn(), +})); + +vi.mock('../../resources/js/api/advertising', () => ({ + fetchWallet: fetchWalletMock, +})); + +import AdWalletView from '../../resources/js/views/advertising/AdWalletView.vue'; + +const vuetify = createVuetify(); + +async function flush(): Promise { + await new Promise((r) => setTimeout(r, 0)); +} + +describe('AdWalletView.vue (T19 — страница «Рекламный кошелёк»)', () => { + beforeEach(() => { + fetchWalletMock.mockReset(); + }); + + it('показывает баланс/заморожено/свободно из fetchWallet', async () => { + fetchWalletMock.mockResolvedValue({ + solvent: true, + balance_rub: '18400.00', + frozen_rub: '2500.00', + free_rub: '15900.00', + }); + const w = mount(AdWalletView, { global: { plugins: [vuetify], stubs: { teleport: true } } }); + await flush(); + await w.vm.$nextTick(); + + expect(w.find('[data-testid="ad-wallet-balance"]').text()).toMatch(/18\s400/); + expect(w.find('[data-testid="ad-wallet-frozen"]').text()).toMatch(/2\s500/); + expect(w.find('[data-testid="ad-wallet-free"]').text()).toMatch(/15\s900/); + }); + + it('показывает заметный алерт, когда solvent=false', async () => { + fetchWalletMock.mockResolvedValue({ + solvent: false, + balance_rub: '0.00', + frozen_rub: '0.00', + free_rub: '0.00', + }); + const w = mount(AdWalletView, { global: { plugins: [vuetify], stubs: { teleport: true } } }); + await flush(); + await w.vm.$nextTick(); + + expect(w.find('[data-testid="ad-wallet-insolvent-alert"]').exists()).toBe(true); + }); + + it('кнопка «Пополнить» открывает AdWalletTopupDialog', async () => { + fetchWalletMock.mockResolvedValue({ + solvent: true, + balance_rub: '1000.00', + frozen_rub: '0.00', + free_rub: '1000.00', + }); + const w = mount(AdWalletView, { global: { plugins: [vuetify], stubs: { teleport: true } } }); + await flush(); + await w.vm.$nextTick(); + + expect(w.findComponent({ name: 'AdWalletTopupDialog' }).props('modelValue')).toBe(false); + + await w.find('[data-testid="ad-wallet-topup-btn"]').trigger('click'); + await w.vm.$nextTick(); + + expect(w.findComponent({ name: 'AdWalletTopupDialog' }).props('modelValue')).toBe(true); + }); + + it('история операций помечена «появится позже» — клиентского эндпоинта списка операций нет', async () => { + fetchWalletMock.mockResolvedValue({ + solvent: true, + balance_rub: '1000.00', + frozen_rub: '0.00', + free_rub: '1000.00', + }); + const w = mount(AdWalletView, { global: { plugins: [vuetify], stubs: { teleport: true } } }); + await flush(); + await w.vm.$nextTick(); + + expect(w.find('[data-testid="ad-wallet-history-placeholder"]').text()).toContain('появится позже'); + }); + + it('ошибка загрузки не рушит экран — тихий inline-текст вместо сумм', async () => { + fetchWalletMock.mockRejectedValue(new Error('network fail')); + const w = mount(AdWalletView, { global: { plugins: [vuetify], stubs: { teleport: true } } }); + await flush(); + await w.vm.$nextTick(); + + expect(w.find('[data-testid="ad-wallet-balance"]').exists()).toBe(false); + expect(w.find('[data-testid="ad-wallet-load-error"]').exists()).toBe(true); + }); + + it('после успешного пополнения (topped-up) баланс перечитывается', async () => { + fetchWalletMock.mockResolvedValue({ + solvent: true, + balance_rub: '1000.00', + frozen_rub: '0.00', + free_rub: '1000.00', + }); + const w = mount(AdWalletView, { global: { plugins: [vuetify], stubs: { teleport: true } } }); + await flush(); + await w.vm.$nextTick(); + expect(fetchWalletMock).toHaveBeenCalledTimes(1); + + await w.findComponent({ name: 'AdWalletTopupDialog' }).vm.$emit('topped-up'); + await flush(); + await w.vm.$nextTick(); + + expect(fetchWalletMock).toHaveBeenCalledTimes(2); + }); +}); From a487c6602c4e0c6a82b04f4a0c14867d75a1802e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sat, 25 Jul 2026 22:36:24 +0300 Subject: [PATCH 011/213] =?UTF-8?q?fix(=D1=80=D0=B5=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B0=20=D0=AF=D0=BD=D0=B4=D0=B5=D0=BA=D1=81):=20=D1=87?= =?UTF-8?q?=D0=B8=D0=BD=D1=8E=20=D0=BF=D0=B0=D0=B4=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20=D0=BE=D0=B1=D1=8A=D1=8F?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BD=D0=B0=20422=20?= =?UTF-8?q?=D0=B8=20=C2=AB=D1=82=D0=B8=D1=85=D0=B8=D0=B9=20=D0=BD=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=C2=BB=20=D0=BF=D1=80=D0=B8=20=D0=B7=D0=B0=D0=B3?= =?UTF-8?q?=D1=80=D1=83=D0=B7=D0=BA=D0=B5=20=D0=BD=D0=BE=D0=BC=D0=B5=D1=80?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ревью нашло: форма объявления (CreativeForm.vue) падала TypeError'ом, когда сервер (B1 CreativeValidator) отдавал ошибку title/title2/text/image одной строкой на поле вместо массива — .map() ломался на штатном 422. Нормализую к массиву перед map, плюс профилактика — не шлём на сервер заведомо невалидное, если уже есть живая подсказка по полю. Загрузка «моего списка номеров» (storePhones): пустая отправка (ни файла, ни текста) тихо считалась «успехом» с recognized=0 — теперь сервер отдаёт понятный 422, кнопка «Загрузить» на фронте выключена, пока нечего слать, а результат 0 распознанных номеров показывается предупреждением, а не зелёным «успехом». Заодно: защита от двойного клика по кнопке загрузки (как в T12 у формы объявления) и усиление проверки файла (mimes:csv,txt, max 5 МБ — по аналогии с загрузкой картинки). Мелкая чистка: осиротевший префилл form.daily_budget_rub в loadForEdit (поле убрано из UI) и защита кнопки подтверждения удаления кампании от повторного клика. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../Api/AdvertisingCampaignController.php | 13 ++- .../components/advertising/CampaignList.vue | 1 + .../components/advertising/CampaignWizard.vue | 23 +++++- .../components/advertising/CreativeForm.vue | 24 +++++- .../AdvertisingCampaignPhonesUploadTest.php | 39 +++++++++ .../advertising-campaign-wizard.spec.ts | 80 +++++++++++++++++++ .../advertising-creative-form.spec.ts | 19 +++++ 7 files changed, 192 insertions(+), 7 deletions(-) diff --git a/app/app/Http/Controllers/Api/AdvertisingCampaignController.php b/app/app/Http/Controllers/Api/AdvertisingCampaignController.php index be8282ee..20b97c9a 100644 --- a/app/app/Http/Controllers/Api/AdvertisingCampaignController.php +++ b/app/app/Http/Controllers/Api/AdvertisingCampaignController.php @@ -349,10 +349,21 @@ class AdvertisingCampaignController extends Controller $campaign = AdCampaign::where('tenant_id', $tenantId)->where('id', $id)->firstOrFail(); $data = $request->validate([ - 'file' => ['nullable', 'file'], + 'file' => ['nullable', 'file', 'mimes:csv,txt', 'max:5120'], 'text' => ['nullable', 'string'], ]); + // «Тихий ноль» (Ф3): без этой проверки пустая отправка (ни файла, ни текста) + // тихо считается «успехом» с recognized=0 — клиент не понимает, что ничего + // не загрузилось. Отдаём явный 422 с понятным сообщением. + $hasFile = $request->hasFile('file'); + $hasText = trim((string) ($data['text'] ?? '')) !== ''; + if (! $hasFile && ! $hasText) { + return response()->json([ + 'message' => 'Загрузите файл или вставьте номера', + ], 422); + } + $raw = ''; if ($request->hasFile('file')) { /** @var UploadedFile $file */ diff --git a/app/resources/js/components/advertising/CampaignList.vue b/app/resources/js/components/advertising/CampaignList.vue index d1834828..e69505e6 100644 --- a/app/resources/js/components/advertising/CampaignList.vue +++ b/app/resources/js/components/advertising/CampaignList.vue @@ -325,6 +325,7 @@ defineExpose({ loadCampaigns }); diff --git a/app/resources/js/components/advertising/CampaignWizard.vue b/app/resources/js/components/advertising/CampaignWizard.vue index e34dd427..52bd85af 100644 --- a/app/resources/js/components/advertising/CampaignWizard.vue +++ b/app/resources/js/components/advertising/CampaignWizard.vue @@ -146,7 +146,8 @@ async function loadForEdit(id: number): Promise { form.audience_days = detail.campaign.audience_days; form.use_uploaded_list = detail.campaign.use_uploaded_list ?? false; form.weekly_budget_rub = detail.campaign.weekly_budget_rub; - form.daily_budget_rub = detail.campaign.daily_budget_rub ?? null; + // daily_budget_rub убран из UI (не рендерится и не шлётся в saveBudgetStep) — + // префилл сюда был осиротевшим, чистка (#5). form.click_bid_rub = detail.campaign.click_bid_rub ?? '10.00'; form.ads = detail.ads ?? []; draftId.value = detail.campaign.id; @@ -303,9 +304,17 @@ const phonesUploading = ref(false); const phonesUploadError = ref(null); const phonesUploadResult = ref<{ recognized: number; skipped: number } | null>(null); +/** Хотя бы одно из полей должно быть непустым — иначе нажимать «Загрузить» нечего (сервер откажет 422). */ +const phonesUploadDisabled = computed( + () => draftId.value === null || phonesUploading.value || (!phonesFile.value && phonesText.value.trim() === '') +); + /** T18 — загрузка «моего списка номеров» с шага 1 (файл и/или текст, хотя бы один нужен серверу). */ async function uploadPhones(): Promise { if (draftId.value === null) return; + // Защита от повторного клика (как в T12 у CreativeForm.vue) — без guard'а быстрый + // двойной клик успевает вызвать запрос дважды до ответа первого. + if (phonesUploading.value) return; phonesUploadError.value = null; phonesUploadResult.value = null; phonesUploading.value = true; @@ -334,6 +343,7 @@ defineExpose({ uploadPhones, phonesUploadResult, phonesUploadError, + phonesUploadDisabled, }); @@ -441,13 +451,18 @@ defineExpose({ - Распознано {{ phonesUploadResult.recognized }}, отброшено {{ phonesUploadResult.skipped }} + + (null); const submitting = ref(false); -const fieldErrors = ref | null>(null); +// Сервер (Api/AdvertisingCampaignController::storeAd/uploadAdImage → B1 CreativeValidator) +// отдаёт `errors` как array (одна строка на поле), а не Laravel-массив +// сообщений — кроме href (обычная валидация `$request->validate`, там уже string[]). +// Тип держим широким (string | string[]), нормализация — в humanFieldErrors ниже. +const fieldErrors = ref | null>(null); const generalError = ref(null); const imageError = ref(null); @@ -48,11 +52,20 @@ const liveHrefError = computed(() => ); // Серверные сообщения об ошибках, очеловеченные (технические имена полей → русские подписи). +// +// БЛОКЕР-фикс: сервер для title/title2/text/image (B1 CreativeValidator, «плоский» +// формат ключ→строка) отдаёт СТРОКУ на поле, а не массив — `messages.map` падал с +// TypeError на штатном 422. href идёт по обычной Laravel-валидации (`$request-> +// validate`) и остаётся array. Нормализуем к массиву перед `.map`, пустые/ +// undefined значения пропускаем. const humanFieldErrors = computed | null>(() => { if (!fieldErrors.value) return null; const result: Record = {}; for (const [field, messages] of Object.entries(fieldErrors.value)) { - result[field] = messages.map(humanizeMessage); + if (!messages) continue; + const list = Array.isArray(messages) ? messages : [messages]; + if (list.length === 0) continue; + result[field] = list.map(humanizeMessage); } return result; }); @@ -99,6 +112,13 @@ async function submit(): Promise { return; } + // Профилактика к БЛОКЕР-фиксу выше: если «живые» подсказки (T7-T9, порт лимитов + // Яндекса) уже показывают ошибку по заголовку/тексту/ссылке/картинке — заведомо + // невалидное на сервер не шлём (сервер всё равно откажет тем же 422). + if (liveTitleError.value || liveTitle2Error.value || liveTextError.value || liveHrefError.value || imageError.value) { + return; + } + submitting.value = true; try { const payload: { title: string; text: string; href: string; title2?: string } = { diff --git a/app/tests/Feature/Advertising/AdvertisingCampaignPhonesUploadTest.php b/app/tests/Feature/Advertising/AdvertisingCampaignPhonesUploadTest.php index fb50a476..5d7a4a03 100644 --- a/app/tests/Feature/Advertising/AdvertisingCampaignPhonesUploadTest.php +++ b/app/tests/Feature/Advertising/AdvertisingCampaignPhonesUploadTest.php @@ -111,6 +111,45 @@ it('does not fail on repeated upload thanks to the unique constraint', function expect($count)->toBe(1); }); +it('returns 422 when neither file nor text is provided ("тихий ноль")', function () { + $response = $this->postJson("/api/advertising/campaigns/{$this->campaign->id}/phones", []); + + $response->assertStatus(422) + ->assertJsonPath('message', 'Загрузите файл или вставьте номера'); + + $count = DB::table('ad_campaign_phones')->where('campaign_id', $this->campaign->id)->count(); + expect($count)->toBe(0); +}); + +it('returns 422 when text is only whitespace and no file is provided', function () { + $response = $this->postJson("/api/advertising/campaigns/{$this->campaign->id}/phones", [ + 'text' => ' ', + ]); + + $response->assertStatus(422) + ->assertJsonPath('message', 'Загрузите файл или вставьте номера'); +}); + +it('rejects a file with a disallowed extension', function () { + $file = UploadedFile::fake()->createWithContent('phones.pdf', '%PDF-1.4 not a real pdf'); + + $response = $this->postJson("/api/advertising/campaigns/{$this->campaign->id}/phones", [ + 'file' => $file, + ]); + + $response->assertStatus(422)->assertJsonValidationErrors('file'); +}); + +it('rejects a file larger than the 5 MB limit', function () { + $file = UploadedFile::fake()->create('phones.csv', 5121); // KB, чуть больше лимита + + $response = $this->postJson("/api/advertising/campaigns/{$this->campaign->id}/phones", [ + 'file' => $file, + ]); + + $response->assertStatus(422)->assertJsonValidationErrors('file'); +}); + it('returns 404 when uploading phones for another tenants campaign', function () { $tenantB = Tenant::factory()->create(); $campaignB = AdCampaign::create([ diff --git a/app/tests/Frontend/advertising-campaign-wizard.spec.ts b/app/tests/Frontend/advertising-campaign-wizard.spec.ts index 25c28b4a..8bde93a8 100644 --- a/app/tests/Frontend/advertising-campaign-wizard.spec.ts +++ b/app/tests/Frontend/advertising-campaign-wizard.spec.ts @@ -609,6 +609,11 @@ describe('CampaignWizard.vue (T18 — загрузка «моего списка await uploadSwitchInput.setValue(true); await w.vm.$nextTick(); + // Кнопка теперь выключена при пустых файле и тексте (Ф3 «тихий ноль») — заполняем текст, + // чтобы дойти до реального запроса и проверить обработку его ошибки. + (w.vm as unknown as { phonesText: string }).phonesText = '79267654321'; + await w.vm.$nextTick(); + await w.find('[data-testid="phones-upload-btn"]').trigger('click'); await flush(); await w.vm.$nextTick(); @@ -617,4 +622,79 @@ describe('CampaignWizard.vue (T18 — загрузка «моего списка expect(error.exists()).toBe(true); expect(error.text()).toContain('Не удалось разобрать файл.'); }); + + it('кнопка «Загрузить список» выключена, пока и файл, и текст пустые', async () => { + const w = mount(CampaignWizard, { global: { plugins: [vuetify] } }); + await flush(); + await w.vm.$nextTick(); + + const uploadSwitchInput = w.find('[data-testid="use-list-switch"] input'); + await uploadSwitchInput.setValue(true); + await w.vm.$nextTick(); + + const btn = w.find('[data-testid="phones-upload-btn"]'); + expect(btn.attributes('disabled')).toBeDefined(); + + (w.vm as unknown as { phonesText: string }).phonesText = '79267654321'; + await w.vm.$nextTick(); + + expect(w.find('[data-testid="phones-upload-btn"]').attributes('disabled')).toBeUndefined(); + }); + + it('распознано 0 номеров — предупреждение, а не «успех»', async () => { + uploadCampaignPhonesMock.mockResolvedValue({ recognized: 0, skipped: 3 }); + + const w = mount(CampaignWizard, { global: { plugins: [vuetify] } }); + await flush(); + await w.vm.$nextTick(); + + const uploadSwitchInput = w.find('[data-testid="use-list-switch"] input'); + await uploadSwitchInput.setValue(true); + await w.vm.$nextTick(); + + (w.vm as unknown as { phonesText: string }).phonesText = 'не номер'; + await w.vm.$nextTick(); + + await w.find('[data-testid="phones-upload-btn"]').trigger('click'); + await flush(); + await w.vm.$nextTick(); + + const result = w.find('[data-testid="phones-upload-result"]'); + expect(result.exists()).toBe(true); + expect(result.text()).toContain('Не распознан ни один номер'); + // v-alert type="warning" рендерит mdi-alert иконку по умолчанию, а не «успешный» чек. + expect(result.html()).not.toContain('mdi-check-circle'); + }); + + it('двойной клик по «Загрузить список», пока первый запрос ещё в полёте — вызывает uploadCampaignPhones РОВНО один раз', async () => { + let resolveUpload: ((v: { recognized: number; skipped: number }) => void) | null = null; + uploadCampaignPhonesMock.mockImplementation( + () => + new Promise((resolve) => { + resolveUpload = resolve; + }), + ); + + const w = mount(CampaignWizard, { global: { plugins: [vuetify] } }); + await flush(); + await w.vm.$nextTick(); + + const uploadSwitchInput = w.find('[data-testid="use-list-switch"] input'); + await uploadSwitchInput.setValue(true); + await w.vm.$nextTick(); + + (w.vm as unknown as { phonesText: string }).phonesText = '79267654321'; + await w.vm.$nextTick(); + + const btn = w.find('[data-testid="phones-upload-btn"]'); + await btn.trigger('click'); + await btn.trigger('click'); + await flush(); + + resolveUpload?.({ recognized: 1, skipped: 0 }); + await flush(); + await w.vm.$nextTick(); + + expect(uploadCampaignPhonesMock).toHaveBeenCalledTimes(1); + }); }); diff --git a/app/tests/Frontend/advertising-creative-form.spec.ts b/app/tests/Frontend/advertising-creative-form.spec.ts index 0525eee8..60fa3dc4 100644 --- a/app/tests/Frontend/advertising-creative-form.spec.ts +++ b/app/tests/Frontend/advertising-creative-form.spec.ts @@ -179,6 +179,25 @@ describe('CreativeForm.vue (B2-6 — форма одного объявлени expect(uploadCreativeImageMock).toHaveBeenCalledTimes(1); }); + it('(f) БЛОКЕР — сервер вернул fieldErrors в «плоском» формате (строка на поле, не массив) — не падает, показывает текст', async () => { + // B1 CreativeValidator (Api/AdvertisingCampaignController::storeAd) отдаёт + // errors как array — одна строка на поле title/title2/text/image, + // а НЕ Laravel-массив сообщений (как для href, обычная `$request->validate`). + // Раньше `messages.map(humanizeMessage)` падал TypeError'ом на такой форме. + addCreativeMock.mockRejectedValue( + axErr(422, { errors: { title: 'Заголовок длиннее 56 символов' } }), + ); + + const w = mount(CreativeForm, { props: { campaignId: 42 }, global: { plugins: [vuetify] } }); + await fillForm(w); + await w.find('[data-testid="creative-submit"]').trigger('click'); + await flush(); + await w.vm.$nextTick(); + + expect(w.text()).toContain('Заголовок длиннее 56 символов'); + expect(w.emitted('added')).toBeFalsy(); + }); + it('общая ошибка (не 422) показывается в v-alert, а не под полем', async () => { addCreativeMock.mockRejectedValue(axErr(500, { message: 'Внутренняя ошибка сервера.' })); From c9443dca0c8e5edc7ddd2bd0b6f290173bd8ec2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sun, 26 Jul 2026 00:43:26 +0300 Subject: [PATCH 012/213] =?UTF-8?q?feat(=D1=80=D0=B5=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B0):=20=D0=A7=D0=B0=D1=81=D1=82=D1=8C=201=20=E2=80=94?= =?UTF-8?q?=20=D0=B4=D0=B5=D0=BD=D0=B5=D0=B6=D0=BD=D0=B0=D1=8F=20=D0=BC?= =?UTF-8?q?=D0=BE=D0=B4=D0=B5=D0=BB=D1=8C=20=D0=BA=D0=B0=D0=BC=D0=BF=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B8=20=C2=AB=D0=B7=D0=B0=20=D0=BF=D0=BE=D0=BA?= =?UTF-8?q?=D0=B0=D0=B7=D1=8B=C2=BB=20(CPM)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Перевод рекламного модуля с «за клики» на «за показы» (медийная кампания), Часть 1 из 6 — денежное ядро и модель. На бой не выкачивается. - AdImpressionPricing: чистый калькулятор (показы=аудитория×частота, клиентская сумма по 120₽/1000 с округлением вверх до копейки, маржа); bcmath scale 2. - ad_settings.client_cpm_rub (default 120.00) — плоская клиентская цена, наценка клиенту не видна. - ad_campaigns: поля модели «за показы» (frequency, *_impressions, budget_rub, yandex_cost_rub, charged_client_rub), weekly_budget_rub → nullable (клик-наследие). - AdCampaign: fillable/casts + default delivered_impressions=0. - CHANGELOG_schema v8.96 + требование скрытия маржи (yandex_cost_rub) в клиентской выдаче. Тесты: 12/12 рекламных зелёные (вкл. регресс кошелька). rls-reviewer: PASS. Spec: docs/superpowers/specs/2026-07-25-yandex-reklama-medijnaya-pokazy-design.md Co-Authored-By: Claude Opus 4.8 (1M context) --- app/app/Models/AdCampaign.php | 17 +++++++ .../Advertising/AdImpressionPricing.php | 49 +++++++++++++++++++ ...6_100000_add_client_cpm_to_ad_settings.php | 29 +++++++++++ ..._add_impression_fields_to_ad_campaigns.php | 39 +++++++++++++++ .../AdCampaignImpressionFieldsTest.php | 38 ++++++++++++++ .../AdSettingsClientCpmMigrationTest.php | 13 +++++ .../Advertising/AdImpressionPricingTest.php | 31 ++++++++++++ db/CHANGELOG_schema.md | 35 +++++++++++++ 8 files changed, 251 insertions(+) create mode 100644 app/app/Services/Advertising/AdImpressionPricing.php create mode 100644 app/database/migrations/2026_07_26_100000_add_client_cpm_to_ad_settings.php create mode 100644 app/database/migrations/2026_07_26_100100_add_impression_fields_to_ad_campaigns.php create mode 100644 app/tests/Feature/Advertising/AdCampaignImpressionFieldsTest.php create mode 100644 app/tests/Feature/Advertising/AdSettingsClientCpmMigrationTest.php create mode 100644 app/tests/Unit/Advertising/AdImpressionPricingTest.php diff --git a/app/app/Models/AdCampaign.php b/app/app/Models/AdCampaign.php index 7f18bb5b..d26db130 100644 --- a/app/app/Models/AdCampaign.php +++ b/app/app/Models/AdCampaign.php @@ -34,6 +34,7 @@ class AdCampaign extends Model protected $attributes = [ 'status' => self::STATUS_DRAFT, + 'delivered_impressions' => 0, ]; protected $fillable = [ @@ -43,6 +44,14 @@ class AdCampaign extends Model 'status', 'audience_days', 'use_uploaded_list', + 'frequency', + 'frequency_period_days', + 'estimated_impressions', + 'paid_impressions', + 'delivered_impressions', + 'budget_rub', + 'yandex_cost_rub', + 'charged_client_rub', 'weekly_budget_rub', 'daily_budget_rub', 'click_bid_rub', @@ -60,6 +69,14 @@ class AdCampaign extends Model 'tenant_id' => 'integer', 'audience_days' => 'integer', 'use_uploaded_list' => 'boolean', + 'frequency' => 'integer', + 'frequency_period_days' => 'integer', + 'estimated_impressions' => 'integer', + 'paid_impressions' => 'integer', + 'delivered_impressions' => 'integer', + 'budget_rub' => 'decimal:2', + 'yandex_cost_rub' => 'decimal:2', + 'charged_client_rub' => 'decimal:2', 'weekly_budget_rub' => 'decimal:2', 'daily_budget_rub' => 'decimal:2', 'click_bid_rub' => 'decimal:2', diff --git a/app/app/Services/Advertising/AdImpressionPricing.php b/app/app/Services/Advertising/AdImpressionPricing.php new file mode 100644 index 00000000..6b6ced61 --- /dev/null +++ b/app/app/Services/Advertising/AdImpressionPricing.php @@ -0,0 +1,49 @@ +roundUpToKopeck($raw); + } + + /** Маржа (₽) = списано клиенту − расход Яндекса. */ + public function marginRub(string $chargedClientRub, string $yandexCostRub): string + { + return bcsub($chargedClientRub, $yandexCostRub, 2); + } + + /** Округление денежной строки ВВЕРХ до 2 знаков (копейки). */ + private function roundUpToKopeck(string $value): string + { + $kopecks = bcmul($value, '100', 6); + $floor = bcdiv($kopecks, '1', 0); + if (bccomp($kopecks, $floor, 6) > 0) { + $floor = bcadd($floor, '1', 0); + } + + return bcdiv($floor, '100', 2); + } +} diff --git a/app/database/migrations/2026_07_26_100000_add_client_cpm_to_ad_settings.php b/app/database/migrations/2026_07_26_100000_add_client_cpm_to_ad_settings.php new file mode 100644 index 00000000..a28414a6 --- /dev/null +++ b/app/database/migrations/2026_07_26_100000_add_client_cpm_to_ad_settings.php @@ -0,0 +1,29 @@ +decimal('client_cpm_rub', 8, 2)->default('120.00')->after('markup_percent'); + }); + + DB::table('ad_settings')->update(['client_cpm_rub' => '120.00', 'updated_at' => now()]); + } + + public function down(): void + { + Schema::table('ad_settings', function (Blueprint $table) { + $table->dropColumn('client_cpm_rub'); + }); + } +}; diff --git a/app/database/migrations/2026_07_26_100100_add_impression_fields_to_ad_campaigns.php b/app/database/migrations/2026_07_26_100100_add_impression_fields_to_ad_campaigns.php new file mode 100644 index 00000000..484dbce6 --- /dev/null +++ b/app/database/migrations/2026_07_26_100100_add_impression_fields_to_ad_campaigns.php @@ -0,0 +1,39 @@ +unsignedSmallInteger('frequency')->nullable()->after('use_uploaded_list'); + $table->unsignedSmallInteger('frequency_period_days')->nullable()->after('frequency'); + $table->unsignedBigInteger('estimated_impressions')->nullable()->after('frequency_period_days'); + $table->unsignedBigInteger('paid_impressions')->nullable()->after('estimated_impressions'); + $table->unsignedBigInteger('delivered_impressions')->default(0)->after('paid_impressions'); + $table->decimal('budget_rub', 14, 2)->nullable()->after('delivered_impressions'); + $table->decimal('yandex_cost_rub', 14, 2)->default('0.00')->after('budget_rub'); + $table->decimal('charged_client_rub', 14, 2)->default('0.00')->after('yandex_cost_rub'); + + // Клик-наследие больше не обязательно (клик-поля удалим отдельной уборкой позже). + $table->decimal('weekly_budget_rub', 14, 2)->nullable()->change(); + }); + } + + public function down(): void + { + Schema::table('ad_campaigns', function (Blueprint $table) { + $table->dropColumn([ + 'frequency', 'frequency_period_days', 'estimated_impressions', + 'paid_impressions', 'delivered_impressions', 'budget_rub', + 'yandex_cost_rub', 'charged_client_rub', + ]); + }); + } +}; diff --git a/app/tests/Feature/Advertising/AdCampaignImpressionFieldsTest.php b/app/tests/Feature/Advertising/AdCampaignImpressionFieldsTest.php new file mode 100644 index 00000000..7a29f260 --- /dev/null +++ b/app/tests/Feature/Advertising/AdCampaignImpressionFieldsTest.php @@ -0,0 +1,38 @@ +toBeTrue("нет колонки {$col}"); + } +}); + +it('позволяет создать кампанию БЕЗ weekly_budget_rub (клик-поле больше не обязательно)', function () { + $tenant = Tenant::factory()->create(); + $c = AdCampaign::create([ + 'tenant_id' => $tenant->id, + 'name' => 'Прогрев за показы', + 'audience_days' => 30, + 'use_uploaded_list' => true, + 'frequency' => 15, + 'estimated_impressions' => 24450, + 'paid_impressions' => 24450, + 'budget_rub' => '2934.00', + ]); + + expect($c->status)->toBe(AdCampaign::STATUS_DRAFT) + ->and($c->weekly_budget_rub)->toBeNull() + ->and($c->frequency)->toBe(15) + ->and($c->estimated_impressions)->toBe(24450) + ->and($c->delivered_impressions)->toBe(0) + ->and($c->budget_rub)->toBe('2934.00'); +}); diff --git a/app/tests/Feature/Advertising/AdSettingsClientCpmMigrationTest.php b/app/tests/Feature/Advertising/AdSettingsClientCpmMigrationTest.php new file mode 100644 index 00000000..2b5a6a58 --- /dev/null +++ b/app/tests/Feature/Advertising/AdSettingsClientCpmMigrationTest.php @@ -0,0 +1,13 @@ +toBeTrue(); + + $cpm = DB::table('ad_settings')->value('client_cpm_rub'); + expect((string) $cpm)->toBe('120.00'); +}); diff --git a/app/tests/Unit/Advertising/AdImpressionPricingTest.php b/app/tests/Unit/Advertising/AdImpressionPricingTest.php new file mode 100644 index 00000000..4487efb6 --- /dev/null +++ b/app/tests/Unit/Advertising/AdImpressionPricingTest.php @@ -0,0 +1,31 @@ +impressionsForAudience(1630, 15))->toBe(24450); + expect($p->impressionsForAudience(0, 15))->toBe(0); + expect($p->impressionsForAudience(100, 1))->toBe(100); +}); + +it('считает клиентскую сумму по 120 ₽ за 1000 показов, округляя ВВЕРХ до копейки', function () { + $p = new AdImpressionPricing(); + expect($p->clientCostRub(24450, '120.00'))->toBe('2934.00'); + expect($p->clientCostRub(1, '120.00'))->toBe('0.12'); + expect($p->clientCostRub(7, '120.00'))->toBe('0.84'); + expect($p->clientCostRub(0, '120.00'))->toBe('0.00'); +}); + +it('округляет неровную сумму вверх до копейки (клиент не недоплачивает)', function () { + $p = new AdImpressionPricing(); + expect($p->clientCostRub(1, '125.00'))->toBe('0.13'); +}); + +it('считает маржу как списано клиенту минус расход Яндекса', function () { + $p = new AdImpressionPricing(); + expect($p->marginRub('2934.00', '1956.00'))->toBe('978.00'); + expect($p->marginRub('100.00', '100.00'))->toBe('0.00'); +}); diff --git a/db/CHANGELOG_schema.md b/db/CHANGELOG_schema.md index 0819ba85..9e9ae4ca 100644 --- a/db/CHANGELOG_schema.md +++ b/db/CHANGELOG_schema.md @@ -8,6 +8,41 @@ > параллельно с боевым main. Их прежние номера (v8.59–v8.62) **столкнулись** с боевыми (автоподбор), > поэтому при сведении они перенумерованы. Содержание не менялось. +## v8.96 (2026-07-26) — Реклама «за показы», Часть 1 — денежная модель кампании (CPM) + +Перевод рекламного модуля с «за клики» на «за показы» (медийная кампания). Часть 1 из 6 +(spec `docs/superpowers/specs/2026-07-25-yandex-reklama-medijnaya-pokazy-design.md`). + +Таблица `ad_settings` — добавлена колонка `client_cpm_rub` (`DECIMAL(8,2)`, `DEFAULT '120.00'`) — +**плоская** клиентская цена за 1000 показов (наценка клиенту не показывается; см. spec §3). Строка +единственная, backfill'ится в той же миграции. RLS нет (глобальная таблица, как было); GRANT +наследуется от таблицы (`SELECT crm_app_user`, `SELECT,UPDATE crm_admin_user`). Миграция +`app/database/migrations/2026_07_26_100000_add_client_cpm_to_ad_settings.php`. + +Таблица `ad_campaigns` — добавлены поля модели «за показы»: `frequency` (`SMALLINT` unsigned, +частота показов на человека), `frequency_period_days` (`SMALLINT` unsigned, период частоты; NULL = +весь срок), `estimated_impressions` / `paid_impressions` (`BIGINT` unsigned), `delivered_impressions` +(`BIGINT` unsigned, `DEFAULT 0`), `budget_rub` (`DECIMAL(14,2)`, клиентская сумма сметы), +`yandex_cost_rub` (`DECIMAL(14,2)`, `DEFAULT '0.00'`, факт расход Яндекса — только для админ-маржи), +`charged_client_rub` (`DECIMAL(14,2)`, `DEFAULT '0.00'`, списано клиенту по факту). Клик-наследие +`weekly_budget_rub` → **nullable** (`DROP NOT NULL`). Клик-поля `click_bid_rub` / `daily_budget_rub` +оставлены (уже nullable) — удаление отдельной уборкой после переезда всего кода. RLS +`tenant_isolation` и GRANT не меняются (та же таблица). Миграция +`app/database/migrations/2026_07_26_100100_add_impression_fields_to_ad_campaigns.php`. + +Обе миграции прогнаны на `liderra_testing` (12/12 рекламных тестов зелёные, вкл. регресс кошелька). +Расчёт денег — новый чистый сервис `App\Services\Advertising\AdImpressionPricing` (bcmath scale 2, +округление клиентской суммы вверх до копейки). `schema.sql` (консолидированный снимок) — +регенерировать при завершении фичи; здесь фиксируются миграции как источник. + +⚠️ **Конфиденциальность маржи (требование для Частей 5/6, вердикт rls-reviewer):** RLS ограничивает +строки, НЕ столбцы. `crm_app_user` имеет table-level `SELECT` на `ad_campaigns`, поэтому клиент +технически может прочитать `yandex_cost_rub` (и вывести наценку) на СВОИХ строках. База это не +запретит — запрет ОБЯЗАН стоять в приложении: клиентские сериализаторы/выдача НИКОГДА не отдают +`yandex_cost_rub` (и margin-производные `charged_client_rub`/факт-расход) в клиентский ответ. Нужен +явный allowlist столбцов для клиентской роли + тест «`yandex_cost_rub` не встречается в клиентском +JSON». `srv_bypass` перезапускать НЕ нужно (таблица уже под RLS, изменения аддитивные). + ## v8.95 (2026-07-25) — Рекламный кошелёк, Часть A — оплата картой ЮKassa зачисляет рекламный кошелёк Таблица `saas_transactions` дополнена NOT NULL колонкой `credit_target` From f99bc54d6a973a90a1ffa5535ce6c285a942a88c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sun, 26 Jul 2026 10:26:09 +0300 Subject: [PATCH 013/213] =?UTF-8?q?feat(=D1=80=D0=B5=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B0):=20=D0=A7=D0=B0=D1=81=D1=82=D1=8C=202=20=E2=80=94?= =?UTF-8?q?=20=D1=81=D0=BC=D0=B5=D1=82=D0=B0=20=D0=BF=D0=BE=D0=BA=D0=B0?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=20(CampaignEstimateService=20+=20endpoint)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Часть 2 из 6. Живая смета медийной кампании «за показы»: из аудитории (окно дней) и частоты → показы × 120₽/1000 = сумма клиенту (наценка не видна). - CampaignEstimateService: size×частота=показы, сумма по ad_settings.client_cpm_rub через AdImpressionPricing (bcmath, вверх до копейки); порог MIN_AUDIENCE=100. - AdvertisingCampaignController::audienceSize — при переданной frequency добавляет в ответ impressions/cpm_rub/cost_rub; без частоты ответ прежний (обратная совместимость). - Аудитория (deals за N дней + свой список, дедуп, RLS) и порог 100 уже были в модуле. - Тест сметы обёрнут в DatabaseTransactions (мутация глобальной ad_settings не утекает). Тесты: 17/17 зелёные (вкл. проверку отсутствия утечки цены + регресс). Spec: docs/superpowers/specs/2026-07-25-yandex-reklama-medijnaya-pokazy-design.md Co-Authored-By: Claude Opus 4.8 (1M context) --- .../Api/AdvertisingCampaignController.php | 18 +++++++-- .../Advertising/CampaignEstimateService.php | 37 ++++++++++++++++++ .../CampaignEstimateEndpointTest.php | 39 +++++++++++++++++++ .../CampaignEstimateServiceTest.php | 37 ++++++++++++++++++ 4 files changed, 128 insertions(+), 3 deletions(-) create mode 100644 app/app/Services/Advertising/CampaignEstimateService.php create mode 100644 app/tests/Feature/Advertising/CampaignEstimateEndpointTest.php create mode 100644 app/tests/Feature/Advertising/CampaignEstimateServiceTest.php diff --git a/app/app/Http/Controllers/Api/AdvertisingCampaignController.php b/app/app/Http/Controllers/Api/AdvertisingCampaignController.php index 20b97c9a..73c9da0c 100644 --- a/app/app/Http/Controllers/Api/AdvertisingCampaignController.php +++ b/app/app/Http/Controllers/Api/AdvertisingCampaignController.php @@ -10,6 +10,7 @@ use App\Models\AdCampaign; use App\Models\AdCampaignAd; use App\Models\AdWalletTransaction; use App\Services\Advertising\CampaignAudienceBuilder; +use App\Services\Advertising\CampaignEstimateService; use App\Services\Advertising\CampaignLauncher; use App\Services\Advertising\CreativeValidator; use App\Services\Advertising\YandexDirectClient; @@ -146,7 +147,7 @@ class AdvertisingCampaignController extends Controller return response()->json(null, 204); } - public function audienceSize(Request $request, int $id, CampaignAudienceBuilder $builder): JsonResponse + public function audienceSize(Request $request, int $id, CampaignAudienceBuilder $builder, CampaignEstimateService $estimator): JsonResponse { $tenantId = (int) $request->user()->tenant_id; @@ -154,6 +155,7 @@ class AdvertisingCampaignController extends Controller $data = $request->validate([ 'days' => ['nullable', 'integer', 'min:1', 'max:90'], + 'frequency' => ['nullable', 'integer', 'min:1', 'max:1000'], ]); // Живой счётчик (Р22-Р23): временно проставляем audience_days на инстансе, @@ -163,12 +165,22 @@ class AdvertisingCampaignController extends Controller $size = $builder->size($campaign); $enough = $size >= 100; - return response()->json([ + $payload = [ 'size' => $size, 'min' => 100, 'enough' => $enough, 'hint' => $enough ? null : 'Аудитория меньше 100 — увеличьте число дней или добавьте свой список', - ]); + ]; + + if (isset($data['frequency'])) { + $est = $estimator->estimate($size, (int) $data['frequency']); + $payload['frequency'] = $est['frequency']; + $payload['impressions'] = $est['impressions']; + $payload['cpm_rub'] = $est['cpm_rub']; + $payload['cost_rub'] = $est['cost_rub']; + } + + return response()->json($payload); } public function launch(Request $request, int $id, CampaignLauncher $launcher): JsonResponse diff --git a/app/app/Services/Advertising/CampaignEstimateService.php b/app/app/Services/Advertising/CampaignEstimateService.php new file mode 100644 index 00000000..b55b7c5b --- /dev/null +++ b/app/app/Services/Advertising/CampaignEstimateService.php @@ -0,0 +1,37 @@ +value('client_cpm_rub') ?? '120.00'); + $impressions = $this->pricing->impressionsForAudience($size, $frequency); + + return [ + 'size' => max(0, $size), + 'frequency' => max(0, $frequency), + 'impressions' => $impressions, + 'cpm_rub' => $cpm, + 'cost_rub' => $this->pricing->clientCostRub($impressions, $cpm), + 'min' => self::MIN_AUDIENCE, + 'enough' => $size >= self::MIN_AUDIENCE, + ]; + } +} diff --git a/app/tests/Feature/Advertising/CampaignEstimateEndpointTest.php b/app/tests/Feature/Advertising/CampaignEstimateEndpointTest.php new file mode 100644 index 00000000..a035aff1 --- /dev/null +++ b/app/tests/Feature/Advertising/CampaignEstimateEndpointTest.php @@ -0,0 +1,39 @@ +create(); + $user = User::factory()->create(['tenant_id' => $tenant->id]); + $campaign = AdCampaign::create([ + 'tenant_id' => $tenant->id, 'name' => 'C', 'audience_days' => 10, 'use_uploaded_list' => false, + ]); + Deal::factory()->create(['tenant_id' => $tenant->id, 'phone' => '79990000001', 'received_at' => now()->subDays(2)]); + Deal::factory()->create(['tenant_id' => $tenant->id, 'phone' => '79990000002', 'received_at' => now()->subDays(3)]); + + $res = $this->actingAs($user)->getJson("/api/advertising/campaigns/{$campaign->id}/audience-size?days=10&frequency=10"); + + $res->assertOk() + ->assertJsonPath('size', 2) + ->assertJsonPath('impressions', 20) + ->assertJsonPath('cpm_rub', '120.00') + ->assertJsonPath('cost_rub', '2.40') + ->assertJsonPath('enough', false); +}); + +it('без частоты endpoint отдаёт прежний ответ без сметы', function () { + $tenant = Tenant::factory()->create(); + $user = User::factory()->create(['tenant_id' => $tenant->id]); + $campaign = AdCampaign::create([ + 'tenant_id' => $tenant->id, 'name' => 'C', 'audience_days' => 10, 'use_uploaded_list' => false, + ]); + + $res = $this->actingAs($user)->getJson("/api/advertising/campaigns/{$campaign->id}/audience-size?days=10"); + + $res->assertOk()->assertJsonPath('size', 0)->assertJsonMissingPath('cost_rub'); +}); diff --git a/app/tests/Feature/Advertising/CampaignEstimateServiceTest.php b/app/tests/Feature/Advertising/CampaignEstimateServiceTest.php new file mode 100644 index 00000000..c47e55a1 --- /dev/null +++ b/app/tests/Feature/Advertising/CampaignEstimateServiceTest.php @@ -0,0 +1,37 @@ +estimate(size: 1630, frequency: 15); + expect($est['size'])->toBe(1630) + ->and($est['frequency'])->toBe(15) + ->and($est['impressions'])->toBe(24450) + ->and($est['cpm_rub'])->toBe('120.00') + ->and($est['cost_rub'])->toBe('2934.00') + ->and($est['min'])->toBe(100) + ->and($est['enough'])->toBeTrue(); +}); + +it('помечает enough=false при аудитории меньше 100', function () { + $svc = app(CampaignEstimateService::class); + $est = $svc->estimate(size: 50, frequency: 10); + expect($est['enough'])->toBeFalse()->and($est['impressions'])->toBe(500); +}); + +it('уважает изменённую цену client_cpm_rub', function () { + DB::table('ad_settings')->update(['client_cpm_rub' => '200.00']); + $svc = app(CampaignEstimateService::class); + $est = $svc->estimate(size: 1000, frequency: 10); + expect($est['cpm_rub'])->toBe('200.00')->and($est['cost_rub'])->toBe('2000.00'); +}); From ec8f189b07e1039e365695548ebf164b58b87275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sun, 26 Jul 2026 11:16:00 +0300 Subject: [PATCH 014/213] =?UTF-8?q?feat(=D1=80=D0=B5=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B0):=20=D0=A7=D0=B0=D1=81=D1=82=D1=8C=203a=20?= =?UTF-8?q?=E2=80=94=20=D1=8F=D0=B4=D1=80=D0=BE=20=D0=B3=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20=D0=B1=D0=B0=D0=BD=D0=BD=D0=B5?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=20=D0=B8=D0=B7=20=D0=BE=D0=B4=D0=BD=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=BA=D0=B0=D1=80=D1=82=D0=B8=D0=BD=D0=BA=D0=B8=20(GD?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Часть 3a из 6. Чистое ядро под медийные баннеры, без БД/сети. - BannerSizes: 15 базовых размеров блоков медийной Яндекса (1×). - BannerGenerator::coverJpeg — GD cover-crop (масштаб+центр-обрезка) в ТОЧНЫЙ размер, JPEG с подбором качества под вес ≤512КБ; исключение на нечитаемой картинке. Логика повторяет ручной gen_banners.py (Pillow cover) владельца. Тесты: 5/5 зелёные (квадрат/широкий/высокий, точные пиксели, вес, ошибка). Дальше 3b: загрузка 1 картинки → все размеры → превью-галерея → утверждение. Spec: docs/superpowers/specs/2026-07-25-yandex-reklama-medijnaya-pokazy-design.md §4 Co-Authored-By: Claude Opus 4.8 (1M context) --- .../Services/Advertising/BannerGenerator.php | 52 +++++++++++++++++++ app/app/Services/Advertising/BannerSizes.php | 28 ++++++++++ .../Unit/Advertising/BannerGeneratorTest.php | 44 ++++++++++++++++ .../Unit/Advertising/BannerSizesTest.php | 24 +++++++++ 4 files changed, 148 insertions(+) create mode 100644 app/app/Services/Advertising/BannerGenerator.php create mode 100644 app/app/Services/Advertising/BannerSizes.php create mode 100644 app/tests/Unit/Advertising/BannerGeneratorTest.php create mode 100644 app/tests/Unit/Advertising/BannerSizesTest.php diff --git a/app/app/Services/Advertising/BannerGenerator.php b/app/app/Services/Advertising/BannerGenerator.php new file mode 100644 index 00000000..0670921a --- /dev/null +++ b/app/app/Services/Advertising/BannerGenerator.php @@ -0,0 +1,52 @@ + $maxBytes && $quality >= 40); + + imagedestroy($src); + imagedestroy($dst); + + return $bytes; + } +} diff --git a/app/app/Services/Advertising/BannerSizes.php b/app/app/Services/Advertising/BannerSizes.php new file mode 100644 index 00000000..5223c022 --- /dev/null +++ b/app/app/Services/Advertising/BannerSizes.php @@ -0,0 +1,28 @@ + */ + public const SIZES = [ + [160, 600], [240, 400], [240, 600], [300, 250], [300, 300], + [300, 500], [300, 600], [320, 480], [336, 280], [480, 320], + [728, 90], [970, 250], [320, 50], [320, 100], [1000, 120], + ]; + + /** @return list */ + public static function all(): array + { + return self::SIZES; + } +} diff --git a/app/tests/Unit/Advertising/BannerGeneratorTest.php b/app/tests/Unit/Advertising/BannerGeneratorTest.php new file mode 100644 index 00000000..b1d7187f --- /dev/null +++ b/app/tests/Unit/Advertising/BannerGeneratorTest.php @@ -0,0 +1,44 @@ +coverJpeg(srcJpeg(2000, 2000), 300, 250); + + $info = getimagesizefromstring($out); + expect($info)->not->toBeFalse() + ->and($info[0])->toBe(300) + ->and($info[1])->toBe(250) + ->and($info['mime'])->toBe('image/jpeg') + ->and(strlen($out))->toBeLessThanOrEqual(512000); +}); + +it('работает для широкого и высокого форматов (cover, точные пиксели)', function () { + $gen = new BannerGenerator(); + + $wide = getimagesizefromstring($gen->coverJpeg(srcJpeg(1200, 1200), 728, 90)); + expect($wide[0])->toBe(728)->and($wide[1])->toBe(90); + + $tall = getimagesizefromstring($gen->coverJpeg(srcJpeg(1200, 1200), 240, 600)); + expect($tall[0])->toBe(240)->and($tall[1])->toBe(600); +}); + +it('бросает исключение на нечитаемой картинке', function () { + expect(fn () => (new BannerGenerator())->coverJpeg('не картинка', 300, 250)) + ->toThrow(RuntimeException::class); +}); diff --git a/app/tests/Unit/Advertising/BannerSizesTest.php b/app/tests/Unit/Advertising/BannerSizesTest.php new file mode 100644 index 00000000..da4fbcc6 --- /dev/null +++ b/app/tests/Unit/Advertising/BannerSizesTest.php @@ -0,0 +1,24 @@ +toHaveCount(15); + foreach ($sizes as $s) { + expect($s)->toHaveCount(2) + ->and($s[0])->toBeInt()->toBeGreaterThan(0) + ->and($s[1])->toBeInt()->toBeGreaterThan(0); + } +}); + +it('содержит ходовые размеры (300×250, 240×400, 728×90, 970×250)', function () { + $sizes = BannerSizes::all(); + expect($sizes)->toContain([300, 250]) + ->toContain([240, 400]) + ->toContain([728, 90]) + ->toContain([970, 250]); +}); From 8e91be53c3cb4e049c41684d7bf4e9c43aa34ecd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sun, 26 Jul 2026 11:35:31 +0300 Subject: [PATCH 015/213] =?UTF-8?q?feat(=D1=80=D0=B5=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B0):=20=D0=A7=D0=B0=D1=81=D1=82=D1=8C=203b-1=20?= =?UTF-8?q?=E2=80=94=20=D0=BD=D0=B0=D0=B1=D0=BE=D1=80=20=D0=B1=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D0=B5=D1=80=D0=BE=D0=B2=20=D0=BA=D0=B0=D0=BC=D0=BF=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B8=20(=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20+=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Часть 3b-1 из 6. Из одной картинки клиента генерируется и сохраняется полный набор баннеров кампании (15 размеров Яндекса). - Таблица ad_campaign_banners (RLS tenant_isolation, GRANT crm_app_user SELECT/INSERT/DELETE, клиентская — srv_bypass не нужен). Модель AdCampaignBanner. - CampaignBannerService::generate — прогон исходной картинки по BannerSizes через BannerGenerator, файлы на приватный диск local, строки в БД; перегенерация заменяет набор. - CHANGELOG_schema v8.97 + предупреждение для Части 4 (джоб под crm_supplier_worker потребует GRANT + srv_bypass re-run, иначе тихий ноль). Тесты: 9/9 зелёные (Storage::fake). rls-reviewer: PASS. Spec: docs/superpowers/specs/2026-07-25-yandex-reklama-medijnaya-pokazy-design.md §4 Co-Authored-By: Claude Opus 4.8 (1M context) --- app/app/Models/AdCampaignBanner.php | 36 ++++++++++++ .../Advertising/CampaignBannerService.php | 53 +++++++++++++++++ ...7_26_100200_create_ad_campaign_banners.php | 38 +++++++++++++ .../AdCampaignBannerMigrationTest.php | 12 ++++ .../Advertising/CampaignBannerServiceTest.php | 57 +++++++++++++++++++ db/CHANGELOG_schema.md | 27 +++++++++ 6 files changed, 223 insertions(+) create mode 100644 app/app/Models/AdCampaignBanner.php create mode 100644 app/app/Services/Advertising/CampaignBannerService.php create mode 100644 app/database/migrations/2026_07_26_100200_create_ad_campaign_banners.php create mode 100644 app/tests/Feature/Advertising/AdCampaignBannerMigrationTest.php create mode 100644 app/tests/Feature/Advertising/CampaignBannerServiceTest.php diff --git a/app/app/Models/AdCampaignBanner.php b/app/app/Models/AdCampaignBanner.php new file mode 100644 index 00000000..bc538c53 --- /dev/null +++ b/app/app/Models/AdCampaignBanner.php @@ -0,0 +1,36 @@ + 'integer', + 'campaign_id' => 'integer', + 'width' => 'integer', + 'height' => 'integer', + 'bytes' => 'integer', + ]; + } + + /** @return BelongsTo */ + public function campaign(): BelongsTo + { + return $this->belongsTo(AdCampaign::class, 'campaign_id'); + } +} diff --git a/app/app/Services/Advertising/CampaignBannerService.php b/app/app/Services/Advertising/CampaignBannerService.php new file mode 100644 index 00000000..f2ac0278 --- /dev/null +++ b/app/app/Services/Advertising/CampaignBannerService.php @@ -0,0 +1,53 @@ +tenant_id) + ->where('campaign_id', $campaign->id)->get(); + foreach ($old as $banner) { + $disk->delete($banner->path); + $banner->delete(); + } + + $count = 0; + foreach (BannerSizes::all() as [$w, $h]) { + $jpeg = $this->generator->coverJpeg($sourceBinary, $w, $h); + $path = "ad-banners/{$campaign->tenant_id}/{$campaign->id}/{$w}x{$h}.jpg"; + $disk->put($path, $jpeg); + + AdCampaignBanner::create([ + 'tenant_id' => $campaign->tenant_id, + 'campaign_id' => $campaign->id, + 'width' => $w, + 'height' => $h, + 'path' => $path, + 'bytes' => strlen($jpeg), + ]); + $count++; + } + + return $count; + } +} diff --git a/app/database/migrations/2026_07_26_100200_create_ad_campaign_banners.php b/app/database/migrations/2026_07_26_100200_create_ad_campaign_banners.php new file mode 100644 index 00000000..c94ad66a --- /dev/null +++ b/app/database/migrations/2026_07_26_100200_create_ad_campaign_banners.php @@ -0,0 +1,38 @@ +id(); + $table->foreignId('tenant_id')->constrained()->cascadeOnDelete(); + $table->foreignId('campaign_id')->constrained('ad_campaigns')->cascadeOnDelete(); + $table->unsignedSmallInteger('width'); + $table->unsignedSmallInteger('height'); + $table->string('path'); + $table->unsignedInteger('bytes'); + $table->timestamps(); + $table->index(['tenant_id', 'campaign_id']); + }); + + DB::statement('ALTER TABLE ad_campaign_banners ENABLE ROW LEVEL SECURITY'); + DB::statement('ALTER TABLE ad_campaign_banners FORCE ROW LEVEL SECURITY'); + DB::statement('DROP POLICY IF EXISTS tenant_isolation ON ad_campaign_banners'); + DB::statement("CREATE POLICY tenant_isolation ON ad_campaign_banners USING (tenant_id = NULLIF(current_setting('app.current_tenant_id', true), '')::bigint)"); + + DB::statement('GRANT SELECT, INSERT, DELETE ON ad_campaign_banners TO crm_app_user'); + } + + public function down(): void + { + Schema::dropIfExists('ad_campaign_banners'); + } +}; diff --git a/app/tests/Feature/Advertising/AdCampaignBannerMigrationTest.php b/app/tests/Feature/Advertising/AdCampaignBannerMigrationTest.php new file mode 100644 index 00000000..1ab12b08 --- /dev/null +++ b/app/tests/Feature/Advertising/AdCampaignBannerMigrationTest.php @@ -0,0 +1,12 @@ +toBeTrue(); + foreach (['id', 'tenant_id', 'campaign_id', 'width', 'height', 'path', 'bytes', 'created_at'] as $col) { + expect(Schema::hasColumn('ad_campaign_banners', $col))->toBeTrue("нет колонки {$col}"); + } +}); diff --git a/app/tests/Feature/Advertising/CampaignBannerServiceTest.php b/app/tests/Feature/Advertising/CampaignBannerServiceTest.php new file mode 100644 index 00000000..36cc44f1 --- /dev/null +++ b/app/tests/Feature/Advertising/CampaignBannerServiceTest.php @@ -0,0 +1,57 @@ +create(); + $campaign = AdCampaign::create([ + 'tenant_id' => $tenant->id, 'name' => 'C', 'audience_days' => 10, 'use_uploaded_list' => false, + ]); + + $count = app(CampaignBannerService::class)->generate($campaign, bannerSrcJpeg(1500, 1500)); + + expect($count)->toBe(15) + ->and(AdCampaignBanner::where('campaign_id', $campaign->id)->count())->toBe(15); + + $b = AdCampaignBanner::where('campaign_id', $campaign->id)->where('width', 300)->where('height', 250)->first(); + expect($b)->not->toBeNull(); + Storage::disk('local')->assertExists($b->path); + $info = getimagesizefromstring((string) Storage::disk('local')->get($b->path)); + expect($info[0])->toBe(300)->and($info[1])->toBe(250)->and($b->bytes)->toBeGreaterThan(0); +}); + +it('перегенерация заменяет прежний набор (снова 15, старые файлы удалены)', function () { + Storage::fake('local'); + $tenant = Tenant::factory()->create(); + $campaign = AdCampaign::create([ + 'tenant_id' => $tenant->id, 'name' => 'C', 'audience_days' => 10, 'use_uploaded_list' => false, + ]); + $svc = app(CampaignBannerService::class); + + $svc->generate($campaign, bannerSrcJpeg(1500, 1500)); + $firstPaths = AdCampaignBanner::where('campaign_id', $campaign->id)->pluck('path')->all(); + + $svc->generate($campaign, bannerSrcJpeg(1200, 1200)); + + expect(AdCampaignBanner::where('campaign_id', $campaign->id)->count())->toBe(15); + expect(count($firstPaths))->toBe(15); +}); diff --git a/db/CHANGELOG_schema.md b/db/CHANGELOG_schema.md index 9e9ae4ca..84e72104 100644 --- a/db/CHANGELOG_schema.md +++ b/db/CHANGELOG_schema.md @@ -8,6 +8,33 @@ > параллельно с боевым main. Их прежние номера (v8.59–v8.62) **столкнулись** с боевыми (автоподбор), > поэтому при сведении они перенумерованы. Содержание не менялось. +## v8.97 (2026-07-26) — Реклама «за показы», Часть 3b-1 — набор баннеров кампании + +Новая таблица `ad_campaign_banners` — сгенерированные из ОДНОЙ картинки клиента баннеры +точных размеров блоков Яндекса (медийная). Колонки: `id`, `tenant_id` (FK tenants, cascade), +`campaign_id` (FK ad_campaigns, cascade), `width`/`height` (`SMALLINT` unsigned), `path` (файл на +приватном диске `local` = `storage/app/private`), `bytes` (`INT` unsigned), `timestamps`; индекс +`(tenant_id, campaign_id)`. + +RLS: `ENABLE`+`FORCE ROW LEVEL SECURITY`, политика `tenant_isolation` +(`tenant_id = current_setting('app.current_tenant_id')`) — как у `ad_campaigns`. GRANT +`SELECT, INSERT, DELETE` только `crm_app_user` (клиент). Таблица **клиентская** — служебные роли +(`crm_admin_user`/`crm_supplier_worker`) её не читают, поэтому **`srv_bypass` перезапускать НЕ +нужно** (нет кросс-тенантного доступа служебных ролей). Миграция +`app/database/migrations/2026_07_26_100200_create_ad_campaign_banners.php`, прогнана на +`liderra_testing`. + +Наполняет `App\Services\Advertising\CampaignBannerService::generate()` — прогон исходной картинки +по `BannerSizes` через `BannerGenerator` (Часть 3a), файлы на диск `local`, строки в БД; +перегенерация заменяет прежний набор. `schema.sql` (снимок) — регенерировать при завершении фичи. + +⚠️ **Предупреждение для Части 4 (джоб загрузки баннеров в Яндекс, вердикт rls-reviewer):** Директ- +джобы бегут под `pgsql_supplier` (`crm_supplier_worker`, на кластере НЕ BYPASSRLS — ср. хотфикс v8.94 +для `ad_campaigns`). Когда появится джоб, читающий `ad_campaign_banners` под этой ролью, ему +понадобится `GRANT SELECT ON ad_campaign_banners TO crm_supplier_worker` + перезапуск +`db/03_service_bypass_policies.sql` (srv_bypass), иначе «тихий ноль». Здесь (клиентская генерация) +это не нужно. + ## v8.96 (2026-07-26) — Реклама «за показы», Часть 1 — денежная модель кампании (CPM) Перевод рекламного модуля с «за клики» на «за показы» (медийная кампания). Часть 1 из 6 From ed1be2edfe081c8c0352517daa2cf42ce85d7158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sun, 26 Jul 2026 11:36:57 +0300 Subject: [PATCH 016/213] =?UTF-8?q?docs(=D1=80=D0=B5=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B0):=20HANDOFF=20=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA?= =?UTF-8?q?=D0=B8=20=C2=AB=D0=B7=D0=B0=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7?= =?UTF-8?q?=D1=8B=C2=BB=20=E2=80=94=204=20=D1=87=D0=B0=D1=81=D1=82=D0=B8?= =?UTF-8?q?=20=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D1=8B,=20=D0=BF=D0=BB=D0=B0?= =?UTF-8?q?=D0=BD=203b-2/4/5/6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- ...26-07-26-HANDOFF-reklama-pokazy-stroyka.md | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 docs/superpowers/2026-07-26-HANDOFF-reklama-pokazy-stroyka.md diff --git a/docs/superpowers/2026-07-26-HANDOFF-reklama-pokazy-stroyka.md b/docs/superpowers/2026-07-26-HANDOFF-reklama-pokazy-stroyka.md new file mode 100644 index 00000000..fdebbc40 --- /dev/null +++ b/docs/superpowers/2026-07-26-HANDOFF-reklama-pokazy-stroyka.md @@ -0,0 +1,42 @@ +# HANDOFF — Реклама «за показы» (переделка clicks→CPM), стройка + +**Дата:** 26.07.2026. **Ветка:** `feat/reklama-yandex-pokazy` (от `main` a487c660, в `.claude/worktrees/reklama-pokazy`). НА БОЙ НЕ ВЫКАЧЕНО, только локальные коммиты. + +## Зачем (одно предложение) +Рекламный модуль портала был построен на модели **«за клики»** (не работает для строгого прогрева сегмента); переводим на **«за показы»** — медийная кампания Яндекса `CpmBannerCampaign`, оплата CPM, клиенту плоская цена **120 ₽ / 1000 показов** (наценка клиенту НЕ видна). + +## Нормативка (источники истины) +- Спека: `docs/superpowers/specs/2026-07-25-yandex-reklama-medijnaya-pokazy-design.md` (6 частей, §7 декомпозиция). +- Планы: `docs/superpowers/plans/2026-07-26-yandex-reklama-pokazy-chast{1,2,3a,3b1}-*.md`. +- Исходный контекст Яндекса: `docs/superpowers/2026-07-25-HANDOFF-reklama-progrev-mediynaya-kampaniya.md` (сегмент 58034825, размеры баннеров §5.2, аккаунты). + +## Сделано и закоммичено (4 части) +| Часть | Что | Коммит | +|---|---|---| +| 1 | Денежное ядро: `AdImpressionPricing` (показы=аудитория×частота, сумма по 120₽/1000 вверх до копейки, маржа); `ad_settings.client_cpm_rub=120`; поля «за показы» в `ad_campaigns` (frequency, *_impressions, budget_rub, yandex_cost_rub, charged_client_rub), weekly_budget_rub→nullable | `c9443dca` | +| 2 | Смета: `CampaignEstimateService` + расширение endpoint `GET /api/advertising/campaigns/{id}/audience-size` (при `frequency` отдаёт impressions/cpm_rub/cost_rub). Аудитория (`deals` за N дней + свой список `ad_campaign_phones`, дедуп, RLS) и порог 100 уже были в `CampaignAudienceBuilder`/`audienceSize` | `f99bc54d` | +| 3a | `BannerSizes` (15 размеров) + `BannerGenerator::coverJpeg` (GD cover-crop в точный размер, JPEG ≤512КБ) | `ec8f189b` | +| 3b-1 | Таблица `ad_campaign_banners` (RLS, GRANT crm_app_user) + модель + `CampaignBannerService::generate` (1 картинка → 15 баннеров на диск `local` + строки; перегенерация заменяет) | `8e91be53` | + +Все части: TDD, diff читал контроллер сам, rls-reviewer PASS на миграциях. Тесты зелёные. + +## Осталось +- **Часть 3b-2 (endpoint'ы баннеров):** `POST` загрузка 1 картинки → `CampaignBannerService::generate`; `GET` список превью (стрим приватного файла, tenant-scoped — НЕ публичный URL); `POST` утверждение набора (флаг на кампании, напр. `banners_approved_at`). + source_image хранение при желании. +- **Часть 4 (связь с Директом — САМАЯ КРУПНАЯ/РИСКОВАЯ):** переделать `YandexDirectClient` (`TextCampaign`→`CpmBannerCampaign`, стратегия `CP_MAXIMUM_IMPRESSIONS`, `FrequencyCap`, `AverageCpm`/`SpendLimit`; `addTextAd`→медийное объявление `CPM_BANNER_AD`+`AdImages`) и `CampaignLauncher` (деньги по показам). **Обкатка в песочнице.** Проверено фактом: API умеет медийные (`campaigns.add` CpmBannerCampaign — yandex.ru/dev/direct/doc/ru/campaigns/add-cpm-banner-campaign). +- **Часть 5 (мастер, Vue):** 4 шага (окно дней → частота → 1 картинка+превью-утверждение → смета+запуск); `store/update` контроллера клик→частота; убрать «цену за клик». +- **Часть 6 (отчёты/списание):** отчёт по показам (не кликам), списание с кошелька по факту, стоп при достижении оплаченного, админ-маржа. **Скрыть `yandex_cost_rub` от клиента** (см. ниже). + +## 🔴 Обязательные требования/мины (не потерять) +- **Маржа НЕ видна клиенту** (владелец резко подчёркивал). RLS не режет столбцы: клиентская выдача НИКОГДА не отдаёт `yandex_cost_rub` (и margin-производные) — allowlist столбцов + тест «yandex_cost_rub не в клиентском JSON». Часть 5/6. (CHANGELOG v8.96.) +- **Часть 4 srv_bypass:** джоб загрузки баннеров под `crm_supplier_worker` (`pgsql_supplier`) потребует `GRANT SELECT ON ad_campaign_banners TO crm_supplier_worker` + перезапуск `db/03_service_bypass_policies.sql`, иначе «тихий ноль». (CHANGELOG v8.97.) +- **Модель денег:** клиент платит плоские 120₽/1000 показов по ФАКТУ; заморозка по смете, списание по факту, возврат остатка; тройная страховка от перерасхода (FrequencyCap + фикс.сегмент + джоб-стоп по оплаченным показам). Всё bcmath. + +## Грабли окружения (важно!) +- 🪤 **Тестовая БД `liderra_testing` — ОБЩАЯ, параллельная сессия её периодически обнуляет** (мои колонки/таблицы исчезают). ПЕРЕД прогоном тестов с БД: `DB_DATABASE=liderra_testing php artisan migrate --force` (НЕ `--env=testing` — уходит в дев-БД `liderra`). +- 🪤 Worktree Laravel на Windows: свой `composer install` (vendor нельзя junction'ить — тесты пойдут против чужого кода). Larastan/lefthook в worktree не идут (`Can't find lefthook` при коммите — норма, `LEFTHOOK_EXCLUDE=larastan`). +- 🪤 `origin` = мёртвый GitHub (origin/main СТАРЫЙ). Настоящий main = локальный + gitea. Worktree ветвить от **локального `main`** (`git worktree add ... main`), НЕ от origin. +- Библиотеки картинок: только **GD** (нет Intervention/Imagick). +- Коммит — контроллером через escape (стена), по «го» владельца. Пуш в gitea — НЕ делали (по решению владельца). + +## Процесс стройки +subagent-driven-development: субагент (Sonnet) пишет тест+код, НЕ коммитит; контроллер читает diff сам + перепрогоняет + rls-reviewer на миграциях + коммит через «го» владельца. Спека→план→реализация по частям. From 2c8c876d51ac936f15767990887617f4fca41cbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sun, 26 Jul 2026 11:49:17 +0300 Subject: [PATCH 017/213] =?UTF-8?q?feat(=D1=80=D0=B5=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B0):=20=D0=A7=D0=B0=D1=81=D1=82=D1=8C=203b-2=20?= =?UTF-8?q?=E2=80=94=20endpoint'=D1=8B=20=D0=B1=D0=B0=D0=BD=D0=BD=D0=B5?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=20(=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7?= =?UTF-8?q?=D0=BA=D0=B0/=D0=BF=D1=80=D0=B5=D0=B2=D1=8C=D1=8E/=D1=83=D1=82?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D0=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Часть 3b-2 из 6 (Часть 3 «баннеры» закрыта целиком). - ad_campaigns.banners_approved_at (nullable) — момент утверждения набора; новая загрузка сбрасывает в NULL. - Endpoint'ы tenant-scoped: banner-source (1 картинка→15 баннеров), banners (список превью), banners/{id}/preview (стрим приватного файла), banners/approve (флаг; пусто→422). Чужой→404. Тесты: 22/22 зелёные (вкл. регресс). CHANGELOG v8.98. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../Api/AdvertisingCampaignController.php | 69 ++++++++++++++++ app/app/Models/AdCampaign.php | 2 + ...dd_banners_approved_at_to_ad_campaigns.php | 24 ++++++ app/routes/web.php | 4 + ...AdCampaignBannersApprovedMigrationTest.php | 18 +++++ .../CampaignBannerEndpointsTest.php | 81 +++++++++++++++++++ db/CHANGELOG_schema.md | 13 +++ 7 files changed, 211 insertions(+) create mode 100644 app/database/migrations/2026_07_26_100300_add_banners_approved_at_to_ad_campaigns.php create mode 100644 app/tests/Feature/Advertising/AdCampaignBannersApprovedMigrationTest.php create mode 100644 app/tests/Feature/Advertising/CampaignBannerEndpointsTest.php diff --git a/app/app/Http/Controllers/Api/AdvertisingCampaignController.php b/app/app/Http/Controllers/Api/AdvertisingCampaignController.php index 73c9da0c..2d6f18af 100644 --- a/app/app/Http/Controllers/Api/AdvertisingCampaignController.php +++ b/app/app/Http/Controllers/Api/AdvertisingCampaignController.php @@ -8,8 +8,10 @@ use App\Exceptions\Advertising\AudienceTooSmallException; use App\Http\Controllers\Controller; use App\Models\AdCampaign; use App\Models\AdCampaignAd; +use App\Models\AdCampaignBanner; use App\Models\AdWalletTransaction; use App\Services\Advertising\CampaignAudienceBuilder; +use App\Services\Advertising\CampaignBannerService; use App\Services\Advertising\CampaignEstimateService; use App\Services\Advertising\CampaignLauncher; use App\Services\Advertising\CreativeValidator; @@ -20,6 +22,7 @@ use Illuminate\Http\Request; use Illuminate\Http\UploadedFile; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Storage; use RuntimeException; /** @@ -432,4 +435,70 @@ class AdvertisingCampaignController extends Controller 'skipped' => $skipped, ]); } + + public function uploadBannerSource(Request $request, int $id, CampaignBannerService $banners): JsonResponse + { + $tenantId = (int) $request->user()->tenant_id; + $campaign = AdCampaign::where('tenant_id', $tenantId)->where('id', $id)->firstOrFail(); + + $request->validate(['file' => ['required', 'image', 'max:10240']]); + $file = $request->file('file'); + $binary = (string) file_get_contents($file->getRealPath() ?: $file->getPathname()); + + $count = $banners->generate($campaign, $binary); + $campaign->update(['banners_approved_at' => null]); + + return response()->json(['count' => $count, 'banners' => $this->bannerList($campaign)], 201); + } + + public function listBanners(Request $request, int $id): JsonResponse + { + $tenantId = (int) $request->user()->tenant_id; + $campaign = AdCampaign::where('tenant_id', $tenantId)->where('id', $id)->firstOrFail(); + + return response()->json([ + 'banners' => $this->bannerList($campaign), + 'approved_at' => $campaign->banners_approved_at, + ]); + } + + public function previewBanner(Request $request, int $id, int $bannerId): mixed + { + $tenantId = (int) $request->user()->tenant_id; + $campaign = AdCampaign::where('tenant_id', $tenantId)->where('id', $id)->firstOrFail(); + $banner = AdCampaignBanner::where('tenant_id', $tenantId) + ->where('campaign_id', $campaign->id)->where('id', $bannerId)->firstOrFail(); + + return Storage::disk('local')->response($banner->path, null, ['Content-Type' => 'image/jpeg']); + } + + public function approveBanners(Request $request, int $id): JsonResponse + { + $tenantId = (int) $request->user()->tenant_id; + $campaign = AdCampaign::where('tenant_id', $tenantId)->where('id', $id)->firstOrFail(); + + $has = AdCampaignBanner::where('tenant_id', $tenantId)->where('campaign_id', $campaign->id)->exists(); + if (! $has) { + return response()->json(['message' => 'Сначала загрузите картинку — баннеров ещё нет.'], 422); + } + + $campaign->update(['banners_approved_at' => now()]); + + return response()->json(['approved_at' => $campaign->fresh()->banners_approved_at]); + } + + /** @return list */ + private function bannerList(AdCampaign $campaign): array + { + return AdCampaignBanner::where('tenant_id', $campaign->tenant_id) + ->where('campaign_id', $campaign->id) + ->orderBy('width')->orderBy('height') + ->get(['id', 'width', 'height']) + ->map(fn ($b) => [ + 'id' => (int) $b->id, + 'width' => (int) $b->width, + 'height' => (int) $b->height, + 'preview_url' => "/api/advertising/campaigns/{$campaign->id}/banners/{$b->id}/preview", + ])->all(); + } } diff --git a/app/app/Models/AdCampaign.php b/app/app/Models/AdCampaign.php index d26db130..32d1506a 100644 --- a/app/app/Models/AdCampaign.php +++ b/app/app/Models/AdCampaign.php @@ -52,6 +52,7 @@ class AdCampaign extends Model 'budget_rub', 'yandex_cost_rub', 'charged_client_rub', + 'banners_approved_at', 'weekly_budget_rub', 'daily_budget_rub', 'click_bid_rub', @@ -77,6 +78,7 @@ class AdCampaign extends Model 'budget_rub' => 'decimal:2', 'yandex_cost_rub' => 'decimal:2', 'charged_client_rub' => 'decimal:2', + 'banners_approved_at' => 'datetime', 'weekly_budget_rub' => 'decimal:2', 'daily_budget_rub' => 'decimal:2', 'click_bid_rub' => 'decimal:2', diff --git a/app/database/migrations/2026_07_26_100300_add_banners_approved_at_to_ad_campaigns.php b/app/database/migrations/2026_07_26_100300_add_banners_approved_at_to_ad_campaigns.php new file mode 100644 index 00000000..0d0c9d1f --- /dev/null +++ b/app/database/migrations/2026_07_26_100300_add_banners_approved_at_to_ad_campaigns.php @@ -0,0 +1,24 @@ +timestamp('banners_approved_at')->nullable()->after('charged_client_rub'); + }); + } + + public function down(): void + { + Schema::table('ad_campaigns', function (Blueprint $table) { + $table->dropColumn('banners_approved_at'); + }); + } +}; diff --git a/app/routes/web.php b/app/routes/web.php index 1fb4ebe1..4de70e14 100644 --- a/app/routes/web.php +++ b/app/routes/web.php @@ -391,6 +391,10 @@ Route::middleware(['auth:sanctum', 'tenant'])->prefix('/api/advertising')->group Route::get('/campaigns/{id}', 'App\Http\Controllers\Api\AdvertisingCampaignController@show')->whereNumber('id'); Route::patch('/campaigns/{id}', 'App\Http\Controllers\Api\AdvertisingCampaignController@update')->whereNumber('id'); Route::get('/campaigns/{id}/audience-size', 'App\Http\Controllers\Api\AdvertisingCampaignController@audienceSize')->whereNumber('id'); + Route::post('/campaigns/{id}/banner-source', 'App\Http\Controllers\Api\AdvertisingCampaignController@uploadBannerSource')->whereNumber('id'); + Route::get('/campaigns/{id}/banners', 'App\Http\Controllers\Api\AdvertisingCampaignController@listBanners')->whereNumber('id'); + Route::get('/campaigns/{id}/banners/{bannerId}/preview', 'App\Http\Controllers\Api\AdvertisingCampaignController@previewBanner')->whereNumber('id')->whereNumber('bannerId'); + Route::post('/campaigns/{id}/banners/approve', 'App\Http\Controllers\Api\AdvertisingCampaignController@approveBanners')->whereNumber('id'); Route::post('/campaigns/{id}/launch', 'App\Http\Controllers\Api\AdvertisingCampaignController@launch')->whereNumber('id'); Route::post('/campaigns/{id}/pause', 'App\Http\Controllers\Api\AdvertisingCampaignController@pause')->whereNumber('id'); Route::post('/campaigns/{id}/resume', 'App\Http\Controllers\Api\AdvertisingCampaignController@resume')->whereNumber('id'); diff --git a/app/tests/Feature/Advertising/AdCampaignBannersApprovedMigrationTest.php b/app/tests/Feature/Advertising/AdCampaignBannersApprovedMigrationTest.php new file mode 100644 index 00000000..9a86c2a6 --- /dev/null +++ b/app/tests/Feature/Advertising/AdCampaignBannersApprovedMigrationTest.php @@ -0,0 +1,18 @@ +toBeTrue(); + + $tenant = Tenant::factory()->create(); + $c = AdCampaign::create([ + 'tenant_id' => $tenant->id, 'name' => 'C', 'audience_days' => 10, 'use_uploaded_list' => false, + 'banners_approved_at' => now(), + ]); + expect($c->banners_approved_at)->not->toBeNull(); +}); diff --git a/app/tests/Feature/Advertising/CampaignBannerEndpointsTest.php b/app/tests/Feature/Advertising/CampaignBannerEndpointsTest.php new file mode 100644 index 00000000..728e0495 --- /dev/null +++ b/app/tests/Feature/Advertising/CampaignBannerEndpointsTest.php @@ -0,0 +1,81 @@ +create(); + $user = User::factory()->create(['tenant_id' => $tenant->id]); + $campaign = AdCampaign::create([ + 'tenant_id' => $tenant->id, 'name' => 'C', 'audience_days' => 10, 'use_uploaded_list' => false, + ]); + + return [$tenant, $user, $campaign]; +} + +it('загрузка одной картинки генерирует набор из 15 баннеров', function () { + Storage::fake('local'); + [, $user, $campaign] = bannerCampaign(); + + $res = $this->actingAs($user)->postJson("/api/advertising/campaigns/{$campaign->id}/banner-source", [ + 'file' => UploadedFile::fake()->image('src.jpg', 1500, 1500), + ]); + + $res->assertCreated()->assertJsonPath('count', 15); + expect(AdCampaignBanner::where('campaign_id', $campaign->id)->count())->toBe(15) + ->and(count($res->json('banners')))->toBe(15); + expect($res->json('banners.0'))->toHaveKeys(['id', 'width', 'height', 'preview_url']); +}); + +it('список баннеров и стрим превью работают', function () { + Storage::fake('local'); + [, $user, $campaign] = bannerCampaign(); + $this->actingAs($user)->postJson("/api/advertising/campaigns/{$campaign->id}/banner-source", [ + 'file' => UploadedFile::fake()->image('src.jpg', 1500, 1500), + ])->assertCreated(); + + $list = $this->actingAs($user)->getJson("/api/advertising/campaigns/{$campaign->id}/banners"); + $list->assertOk(); + expect(count($list->json('banners')))->toBe(15); + + $bannerId = AdCampaignBanner::where('campaign_id', $campaign->id)->value('id'); + $preview = $this->actingAs($user)->get("/api/advertising/campaigns/{$campaign->id}/banners/{$bannerId}/preview"); + $preview->assertOk(); + expect($preview->headers->get('content-type'))->toContain('image/jpeg'); +}); + +it('утверждение набора ставит banners_approved_at', function () { + Storage::fake('local'); + [, $user, $campaign] = bannerCampaign(); + $this->actingAs($user)->postJson("/api/advertising/campaigns/{$campaign->id}/banner-source", [ + 'file' => UploadedFile::fake()->image('src.jpg', 1500, 1500), + ])->assertCreated(); + + $this->actingAs($user)->postJson("/api/advertising/campaigns/{$campaign->id}/banners/approve")->assertOk(); + expect($campaign->fresh()->banners_approved_at)->not->toBeNull(); +}); + +it('нельзя утвердить пустой набор', function () { + [, $user, $campaign] = bannerCampaign(); + $this->actingAs($user)->postJson("/api/advertising/campaigns/{$campaign->id}/banners/approve")->assertStatus(422); +}); + +it('чужой тенант не видит баннеры (404)', function () { + Storage::fake('local'); + [, $user, $campaign] = bannerCampaign(); + $this->actingAs($user)->postJson("/api/advertising/campaigns/{$campaign->id}/banner-source", [ + 'file' => UploadedFile::fake()->image('src.jpg', 1500, 1500), + ])->assertCreated(); + $bannerId = AdCampaignBanner::where('campaign_id', $campaign->id)->value('id'); + + $otherTenant = Tenant::factory()->create(); + $otherUser = User::factory()->create(['tenant_id' => $otherTenant->id]); + $this->actingAs($otherUser)->get("/api/advertising/campaigns/{$campaign->id}/banners/{$bannerId}/preview")->assertNotFound(); +}); diff --git a/db/CHANGELOG_schema.md b/db/CHANGELOG_schema.md index 84e72104..e8b6e6ae 100644 --- a/db/CHANGELOG_schema.md +++ b/db/CHANGELOG_schema.md @@ -8,6 +8,19 @@ > параллельно с боевым main. Их прежние номера (v8.59–v8.62) **столкнулись** с боевыми (автоподбор), > поэтому при сведении они перенумерованы. Содержание не менялось. +## v8.98 (2026-07-26) — Реклама «за показы», Часть 3b-2 — утверждение набора баннеров + +`ad_campaigns` — добавлена колонка `banners_approved_at` (`TIMESTAMP` nullable) — момент, когда +клиент утвердил сгенерированный набор баннеров. Новая загрузка картинки сбрасывает флаг в NULL +(нужно утверждать заново). RLS `tenant_isolation` и GRANT не меняются (та же таблица, аддитивно). +Миграция `app/database/migrations/2026_07_26_100300_add_banners_approved_at_to_ad_campaigns.php`. + +Endpoint'ы (tenant-scoped, `AdvertisingCampaignController`): `POST campaigns/{id}/banner-source` +(1 картинка → `CampaignBannerService::generate` → 15 баннеров + сброс утверждения), +`GET campaigns/{id}/banners` (список превью), `GET campaigns/{id}/banners/{bannerId}/preview` +(стрим ПРИВАТНОГО файла с диска `local`, не публичный URL), `POST campaigns/{id}/banners/approve` +(ставит `banners_approved_at`; пустой набор → 422). Чужой тенант → 404. + ## v8.97 (2026-07-26) — Реклама «за показы», Часть 3b-1 — набор баннеров кампании Новая таблица `ad_campaign_banners` — сгенерированные из ОДНОЙ картинки клиента баннеры From 1faf6ea76c4c637f58c8b2649fa9414daf595867 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sun, 26 Jul 2026 12:23:19 +0300 Subject: [PATCH 018/213] =?UTF-8?q?feat(=D1=80=D0=B5=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B0):=20=D0=A7=D0=B0=D1=81=D1=82=D1=8C=205a=20?= =?UTF-8?q?=E2=80=94=20=D1=84=D1=80=D0=BE=D0=BD=D1=82=20API-=D1=81=D0=BB?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D0=BE=D0=B2=20+?= =?UTF-8?q?=20HANDOFF=20(=D0=94=D0=B8=D1=80=D0=B5=D0=BA=D1=82=20err58)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Часть 5a из 6. Функции api/advertising.ts под endpoint'ы показов для мастера (Ч.5b). - AudienceSize +estimate-поля; fetchAudienceSize(id,days,frequency) шлёт frequency для сметы. Баннеры: uploadBannerSource/fetchBanners/approveBanners/bannerPreviewUrl. - HANDOFF: Часть 4 ЗАБЛОКИРОВАНА Яндексом (err58 — проверено живым API-вызовом; доступ к API не одобрен, нужна заявка+Госуслуги) + вторая стена (баннер-креатив только руками). Тесты: vitest 6/6 новых + 19/19 регресс. Co-Authored-By: Claude Opus 4.8 (1M context) --- app/resources/js/api/advertising.ts | 56 ++++++++++++++-- .../Frontend/advertising-api-pokazy.spec.ts | 66 +++++++++++++++++++ ...26-07-26-HANDOFF-reklama-pokazy-stroyka.md | 4 +- 3 files changed, 120 insertions(+), 6 deletions(-) create mode 100644 app/tests/Frontend/advertising-api-pokazy.spec.ts diff --git a/app/resources/js/api/advertising.ts b/app/resources/js/api/advertising.ts index 22b2f6c4..346300ea 100644 --- a/app/resources/js/api/advertising.ts +++ b/app/resources/js/api/advertising.ts @@ -43,6 +43,10 @@ export interface AudienceSize { min: number; enough: boolean; hint: string | null; + frequency?: number; + impressions?: number; + cpm_rub?: string; + cost_rub?: string; } /** Тело POST /api/advertising/campaigns (создание черновика кампании). */ @@ -108,14 +112,56 @@ export async function patchCampaign(id: number, payload: Partial return data; } -/** GET /api/advertising/campaigns/{id}/audience-size — живой счётчик аудитории. */ -export async function fetchAudienceSize(id: number, days?: number): Promise { - const { data } = await apiClient.get(`/api/advertising/campaigns/${id}/audience-size`, { - params: days ? { days } : {}, - }); +/** GET /api/advertising/campaigns/{id}/audience-size — живой счётчик аудитории (+ показы/бюджет при заданной частоте). */ +export async function fetchAudienceSize(id: number, days?: number, frequency?: number): Promise { + const params: Record = {}; + if (days !== undefined) params.days = days; + if (frequency !== undefined) params.frequency = frequency; + const { data } = await apiClient.get(`/api/advertising/campaigns/${id}/audience-size`, { params }); return data; } +/** Один сгенерированный баннер набора кампании. */ +export interface CampaignBanner { + id: number; + width: number; + height: number; + preview_url: string; +} + +/** Ответ GET /api/advertising/campaigns/{id}/banners. */ +export interface CampaignBannerSet { + banners: CampaignBanner[]; + approved_at: string | null; +} + +/** POST banner-source — одна картинка → набор баннеров. */ +export async function uploadBannerSource(id: number, file: File): Promise<{ count: number; banners: CampaignBanner[] }> { + await ensureCsrfCookie(); + const form = new FormData(); + form.append('file', file); + const { data } = await apiClient.post<{ count: number; banners: CampaignBanner[] }>(`/api/advertising/campaigns/${id}/banner-source`, form); + return data; +} + +/** GET набор баннеров кампании (список превью + момент утверждения). */ +export async function fetchBanners(id: number): Promise { + const { data } = await apiClient.get(`/api/advertising/campaigns/${id}/banners`); + return data; +} + +/** POST утвердить набор баннеров. */ +export async function approveBanners(id: number): Promise<{ approved_at: string | null }> { + await ensureCsrfCookie(); + const { data } = await apiClient.post<{ approved_at: string | null }>(`/api/advertising/campaigns/${id}/banners/approve`); + return data; +} + +/** URL превью конкретного баннера (стрим приватного файла, tenant-scoped). */ +export function bannerPreviewUrl(id: number, bannerId: number): string { + return `/api/advertising/campaigns/${id}/banners/${bannerId}/preview`; +} + /** POST /api/advertising/campaigns/{id}/launch — запустить кампанию (модерация Яндекса). */ export async function launchCampaign(id: number): Promise<{ status: CampaignStatus }> { await ensureCsrfCookie(); diff --git a/app/tests/Frontend/advertising-api-pokazy.spec.ts b/app/tests/Frontend/advertising-api-pokazy.spec.ts new file mode 100644 index 00000000..9eb39710 --- /dev/null +++ b/app/tests/Frontend/advertising-api-pokazy.spec.ts @@ -0,0 +1,66 @@ +import { describe, it, expect, beforeEach, vi } from 'vitest'; + +vi.mock('../../resources/js/api/client', () => ({ + apiClient: { get: vi.fn(), post: vi.fn(), patch: vi.fn(), delete: vi.fn() }, + ensureCsrfCookie: vi.fn().mockResolvedValue(undefined), +})); + +import { + fetchAudienceSize, + uploadBannerSource, + fetchBanners, + approveBanners, + bannerPreviewUrl, +} from '../../resources/js/api/advertising'; +import { apiClient } from '../../resources/js/api/client'; + +describe('api/advertising показы', () => { + beforeEach(() => vi.clearAllMocks()); + + it('fetchAudienceSize with frequency passes days+frequency and returns estimate', async () => { + vi.mocked(apiClient.get).mockResolvedValue({ + data: { size: 1630, min: 100, enough: true, hint: null, frequency: 15, impressions: 24450, cpm_rub: '120.00', cost_rub: '2934.00' }, + }); + const est = await fetchAudienceSize(1, 10, 15); + expect(apiClient.get).toHaveBeenCalledWith('/api/advertising/campaigns/1/audience-size', { params: { days: 10, frequency: 15 } }); + expect(est.cost_rub).toBe('2934.00'); + expect(est.impressions).toBe(24450); + }); + + it('fetchAudienceSize without frequency passes only days', async () => { + vi.mocked(apiClient.get).mockResolvedValue({ data: { size: 0, min: 100, enough: false, hint: 'x' } }); + await fetchAudienceSize(1, 10); + expect(apiClient.get).toHaveBeenCalledWith('/api/advertising/campaigns/1/audience-size', { params: { days: 10 } }); + }); + + it('uploadBannerSource POSTs FormData and returns count+banners', async () => { + vi.mocked(apiClient.post).mockResolvedValue({ + data: { count: 15, banners: [{ id: 7, width: 300, height: 250, preview_url: '/x' }] }, + }); + const file = new File(['x'], 'a.jpg', { type: 'image/jpeg' }); + const res = await uploadBannerSource(1, file); + expect(vi.mocked(apiClient.post).mock.calls[0][0]).toBe('/api/advertising/campaigns/1/banner-source'); + expect(vi.mocked(apiClient.post).mock.calls[0][1]).toBeInstanceOf(FormData); + expect(res.count).toBe(15); + expect(res.banners[0].id).toBe(7); + }); + + it('fetchBanners GETs banners list', async () => { + vi.mocked(apiClient.get).mockResolvedValue({ data: { banners: [{ id: 7, width: 300, height: 250, preview_url: '/x' }], approved_at: null } }); + const set = await fetchBanners(1); + expect(apiClient.get).toHaveBeenCalledWith('/api/advertising/campaigns/1/banners'); + expect(set.banners).toHaveLength(1); + expect(set.approved_at).toBeNull(); + }); + + it('approveBanners POSTs approve', async () => { + vi.mocked(apiClient.post).mockResolvedValue({ data: { approved_at: '2026-07-26T00:00:00Z' } }); + const res = await approveBanners(1); + expect(vi.mocked(apiClient.post).mock.calls[0][0]).toBe('/api/advertising/campaigns/1/banners/approve'); + expect(res.approved_at).not.toBeNull(); + }); + + it('bannerPreviewUrl builds the preview path', () => { + expect(bannerPreviewUrl(1, 7)).toBe('/api/advertising/campaigns/1/banners/7/preview'); + }); +}); diff --git a/docs/superpowers/2026-07-26-HANDOFF-reklama-pokazy-stroyka.md b/docs/superpowers/2026-07-26-HANDOFF-reklama-pokazy-stroyka.md index fdebbc40..1b506a7c 100644 --- a/docs/superpowers/2026-07-26-HANDOFF-reklama-pokazy-stroyka.md +++ b/docs/superpowers/2026-07-26-HANDOFF-reklama-pokazy-stroyka.md @@ -22,7 +22,9 @@ ## Осталось - **Часть 3b-2 (endpoint'ы баннеров):** `POST` загрузка 1 картинки → `CampaignBannerService::generate`; `GET` список превью (стрим приватного файла, tenant-scoped — НЕ публичный URL); `POST` утверждение набора (флаг на кампании, напр. `banners_approved_at`). + source_image хранение при желании. -- **Часть 4 (связь с Директом — САМАЯ КРУПНАЯ/РИСКОВАЯ):** переделать `YandexDirectClient` (`TextCampaign`→`CpmBannerCampaign`, стратегия `CP_MAXIMUM_IMPRESSIONS`, `FrequencyCap`, `AverageCpm`/`SpendLimit`; `addTextAd`→медийное объявление `CPM_BANNER_AD`+`AdImages`) и `CampaignLauncher` (деньги по показам). **Обкатка в песочнице.** Проверено фактом: API умеет медийные (`campaigns.add` CpmBannerCampaign — yandex.ru/dev/direct/doc/ru/campaigns/add-cpm-banner-campaign). +- **Часть 4 (связь с Директом) — 🔴 ЗАБЛОКИРОВАНА ЯНДЕКСОМ (проверено живьём 26.07):** дёрнули API Директа реальным OAuth-токеном (приложение «Лидерра — реклама», client_id `5919f23ef9114baf9d14b88cd929a8ae`, права `direct:api`) — **и боевой, и песочница отвечают err58 «Незавершённая регистрация: заполнить заявку на доступ к API для приложения и дождаться подтверждения»**. В кабинете «Программный доступ: открыт», приложение в «Мои приложения», но «**Мои заявки** ПУСТ» → заявка на доступ к API для приложения не одобрена. Аккаунт также просит верификацию через **Госуслуги** (вероятно, prerequisite одобрения). ⇒ **никакой Direct API сейчас не работает**, Часть 4 ждёт одобрения Яндекса (внешний барьер, кодом не обойти). Владелец проходит Госуслуги + ждём заявку. + - 🧱 **Вторая стена (доки+живьё):** медийное объявление требует `Creative`/`CreativeId`, а **баннер-креатив через API создать НЕЛЬЗЯ** (`creatives.add` — только видео; графические — только веб-интерфейс, конструктор закрыт 01.06). ⇒ Часть 4 в любом случае **ГИБРИД**: портал автоматизирует сегмент+кампанию+группу+стратегию+частоту+бюджет через API; **креатив-баннеры человек заливает руками в кабинете и вводит CreativeId в портал**. + - Что делать, когда откроют доступ: переделать `YandexDirectClient` (`TextCampaign`→`CpmBannerCampaign`, `CP_MAXIMUM_IMPRESSIONS`, `FrequencyCap`, `AverageCpm`/`SpendLimit`) + `CampaignLauncher` (деньги по показам), объявления через CreativeId. Обкатка в песочнице. TDD через `Http::fake` (структуру campaigns.add CpmBannerCampaign сверял — yandex.ru/dev/direct/doc/ru/campaigns/add-cpm-banner-campaign). - **Часть 5 (мастер, Vue):** 4 шага (окно дней → частота → 1 картинка+превью-утверждение → смета+запуск); `store/update` контроллера клик→частота; убрать «цену за клик». - **Часть 6 (отчёты/списание):** отчёт по показам (не кликам), списание с кошелька по факту, стоп при достижении оплаченного, админ-маржа. **Скрыть `yandex_cost_rub` от клиента** (см. ниже). From 449c6c5e27ec62af2077dcc1906d9e87031700d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sun, 26 Jul 2026 12:30:07 +0300 Subject: [PATCH 019/213] =?UTF-8?q?docs(=D1=80=D0=B5=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B0):=20=D0=BF=D1=80=D0=BE=D0=BC=D1=82=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B7=D0=B0=D0=BF=D1=83=D1=81?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=81=D0=B5=D1=81=D1=81=D0=B8=D0=B8=20=E2=80=94?= =?UTF-8?q?=20=D0=B2=D0=BE=D1=81=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B5=D0=BA?= =?UTF-8?q?=D1=81=D1=82=D0=B0=20+=20=D0=BF=D1=80=D0=BE=D0=B4=D0=BE=D0=BB?= =?UTF-8?q?=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=20=D0=A7.5b?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- ...026-07-26-PROMPT-restart-reklama-pokazy.md | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 docs/superpowers/2026-07-26-PROMPT-restart-reklama-pokazy.md diff --git a/docs/superpowers/2026-07-26-PROMPT-restart-reklama-pokazy.md b/docs/superpowers/2026-07-26-PROMPT-restart-reklama-pokazy.md new file mode 100644 index 00000000..57e9fa6c --- /dev/null +++ b/docs/superpowers/2026-07-26-PROMPT-restart-reklama-pokazy.md @@ -0,0 +1,51 @@ +# Промт для перезапуска сессии — Реклама «за показы» + +Продолжаем переделку рекламного модуля портала Лидерры с модели «за клики» на «за показы» +(медийная кампания Яндекса, CPM). 🔴 Боевой прод lk.liderra.ru — живые клиенты и деньги. +На бой НИЧЕГО не выкачено, всё в ветке. + +## СНАЧАЛА ПРОЧИТАЙ (восстанови контекст) +1. 📌 ГЛАВНОЕ — HANDOFF стройки (в ветке): `docs/superpowers/2026-07-26-HANDOFF-reklama-pokazy-stroyka.md` — полный статус: что готово, что заблокировано, грабли, требования. +2. Спека: `docs/superpowers/specs/2026-07-25-yandex-reklama-medijnaya-pokazy-design.md` (6 частей, §7 декомпозиция). ⚠️ Спека и планы лежат в ОСНОВНОМ checkout `c:\моя\проекты\портал crm\Документация\docs\superpowers\{specs,plans}\` (писались до worktree, возможно НЕ закоммичены — проверь, при нужде скопируй в ветку). +3. Планы частей: `docs/superpowers/plans/2026-07-26-yandex-reklama-pokazy-chast{1,2,3a,3b1,3b2,5a}-*.md`. +4. CLAUDE.md (§0/§1/§3/§5), память: `feedback-worktree-laravel-windows`, `feedback_environment`, `project-reklama-modul-vykat-2026-07-25`. + +## ГДЕ РАБОТАТЬ +- Worktree: `c:\моя\проекты\портал crm\Документация\.claude\worktrees\reklama-pokazy` (в него зайти через EnterWorktree `path`). +- Ветка `feat/reklama-yandex-pokazy` от локального `main` (a487c660). HEAD = `1faf6ea7`, 7 коммитов. НЕ запушено в gitea, НЕ в main, НЕ на бой. +- Laravel в подпапке `app/`. Тесты: `php artisan test ...` (Pest, БД liderra_testing) и `npx vitest run tests/Frontend/` (node_modules подключён junction'ом; если нет — `New-Item -ItemType Junction` из основного checkout). + +## ЧТО ГОТОВО (закоммичено, TDD, diff читан контроллером, миграции — rls-reviewer PASS) +- **Ч.1** `c9443dca` — денежное ядро: `AdImpressionPricing` (показы=аудитория×частота, сумма 120₽/1000 вверх до копейки, маржа), `ad_settings.client_cpm_rub=120`, поля «за показы» в `ad_campaigns`, weekly_budget_rub→nullable. +- **Ч.2** `f99bc54d` — смета: `CampaignEstimateService` + endpoint `GET audience-size?days=&frequency=` отдаёт impressions/cpm_rub/cost_rub. Аудитория (`deals` за N дней + свой список) и порог 100 уже были. +- **Ч.3a** `ec8f189b` — `BannerSizes` (15 размеров) + `BannerGenerator` (GD cover-crop в точный размер, ≤512КБ). +- **Ч.3b-1** `8e91be53` — таблица `ad_campaign_banners` (RLS) + `CampaignBannerService::generate` (1 картинка → 15 баннеров на диск `local`). +- **Ч.3b-2** `2c8c876d` — endpoint'ы: banner-source (загрузка), banners (список превью), banners/{id}/preview (стрим приватного файла), banners/approve; `ad_campaigns.banners_approved_at`. Tenant-scoped, чужой→404. +- **Ч.5a** `1faf6ea7` — фронт `api/advertising.ts`: fetchAudienceSize(id,days,frequency), uploadBannerSource/fetchBanners/approveBanners/bannerPreviewUrl (+типы). + +## 🔴 ЗАБЛОКИРОВАНО ЯНДЕКСОМ — Ч.4 (связь с Директом) +Проверено ЖИВЬЁМ 26.07 (OAuth-токен приложения «Лидерра — реклама», client_id `5919f23ef9114baf9d14b88cd929a8ae`, права direct:api): и боевой, и песочница API Директа → **err58 «Незавершённая регистрация: заявка на доступ к API для приложения не одобрена»**. Аккаунт: «Программный доступ открыт», но «Мои заявки» ПУСТ; висит требование верификации через **Госуслуги**. ⇒ **никакой Direct API сейчас не работает**, Ч.4 ждёт одобрения Яндекса (внешний барьер). +- 🧱 Вторая стена: медийное объявление требует `CreativeId`, а баннер-креатив через API создать НЕЛЬЗЯ (`creatives.add` — только видео). ⇒ Ч.4 будет ГИБРИД: портал автоматизирует сегмент+кампанию+группу+стратегию+частоту+бюджет; **баннер-креатив человек заливает руками в кабинете и вводит CreativeId в портал**. +- Действия ВЛАДЕЛЬЦА (только он): пройти Госуслуги-верификацию + подать/дождаться заявку на API. Спроси статус в начале сессии. + +## ЧТО ДАЛЬШЕ (по приоритету) +1. **Ч.5b — мастер `CampaignWizard.vue` (~690 строк, клик→показы)** — САМЫЙ БОЛЬШОЙ клиентский кусок. Шаги: окно дней (своё число) → частота + живая смета (fetchAudienceSize с frequency) → загрузка 1 картинки + превью-галерея (fetchBanners/bannerPreviewUrl) + утверждение (approveBanners) → «Запустить». Пока Директ закрыт — шаг запуска как «заявка отправлена / ждёт оператора». Vue 3 + **Vuetify 3 + палитра Forest** (НЕ новая айдентика — система портала). Убрать «цену за клик». Component-Vitest. Навык **Frontend Design** обязателен (§12). + - 🔴 ГЛАВНОЕ требование владельца: **клиент НЕ видит маржу/цену Яндекса** — только 120₽/1000 и сумму. Клиентская выдача НИКОГДА не отдаёт `yandex_cost_rub` (allowlist столбцов + тест «yandex_cost_rub не в клиентском JSON»). + - Переделать `store/update` контроллера кампаний: клик-поля → frequency + budget из сметы. +2. **Ч.6 — отчёты/списание** (живой частью зависит от Ч.4): отчёт по показам (не кликам), списание с кошелька по факту (`AdWalletService::charge`, идемпотентно), стоп при достижении оплаченного, админ-маржа (`AdminAdvertisingView`, маржа = списано − yandex_cost). Скрыть yandex_cost от клиента. +3. Когда Яндекс откроет доступ — Ч.4: `YandexDirectClient` TextCampaign→CpmBannerCampaign (`CP_MAXIMUM_IMPRESSIONS`, `FrequencyCap`, `AverageCpm`/`SpendLimit`) + `CampaignLauncher` (деньги по показам), объявления через введённый CreativeId. Обкатка в песочнице, TDD через `Http::fake`. srv_bypass: джоб под crm_supplier_worker потребует `GRANT SELECT ON ad_campaign_banners TO crm_supplier_worker` + перезапуск `db/03_service_bypass_policies.sql`. + +## ГРАБЛИ ОКРУЖЕНИЯ +- 🪤 **liderra_testing — ОБЩАЯ БД, параллельная сессия её обнуляет.** Перед тестами с БД: `DB_DATABASE=liderra_testing php artisan migrate --force` (НЕ `--env=testing` — уходит в дев-БД). +- 🪤 Worktree Laravel на Windows: свой `composer install` (vendor нельзя junction). node_modules junction — можно. Larastan/lefthook в worktree нет (`Can't find lefthook` при коммите — норма; `LEFTHOOK_EXCLUDE=larastan`). +- 🪤 `origin` = мёртвый GitHub (origin/main СТАРЫЙ). Настоящий main = локальный + gitea. Ветвить от локального `main`. +- Картинки: только GD (нет Intervention/Imagick). +- 🪤 Браузер MCP залипает → `taskkill //F //IM chrome.exe` + `rm SingletonLock` (профиль mcp-chrome-517c7e1). + +## ПРОЦЕСС И ПРАВИЛА +- Скилы ПЕРВЫМИ (Pravila §12): brainstorming (если новое), Frontend Design (UI), subagent-driven-development (реализация), superpowers (процесс). Планы — writing-plans. +- subagent-driven: субагент (Sonnet, НЕ Haiku для git) пишет тест+код и НЕ коммитит; контроллер читает diff САМ (не верить «тесты зелёные»), перепрогоняет, rls-reviewer на миграциях, коммитит через «го» владельца (`LEFTHOOK_EXCLUDE=larastan`, явные пути). НЕ пушить в gitea/на бой без явного «го». +- Владелец — **Дмитрий, не программист**: говорить простым русским, без жаргона. «Не уверен — спроси». Упёрся в стену — остановись и скажи (как с Ч.4). +- Клиентский тест-вход: `info@lkomega.ru` / `Qwerty9363` на lk.liderra.ru. Директ-кабинет: `sasha261185`. + +ПЕРВЫЙ ШАГ: прочитай HANDOFF, зайди в worktree, спроси у владельца статус Госуслуг/заявки на API Директа, и начинай с Части 5b (мастер) — навык Frontend Design первым. From de9f0d7d8e69abdb329ada74e569e76c5987692f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sun, 26 Jul 2026 15:45:53 +0300 Subject: [PATCH 020/213] =?UTF-8?q?feat(=D1=80=D0=B5=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B0):=20=D0=A7=D0=B0=D1=81=D1=82=D1=8C=205b=20?= =?UTF-8?q?=E2=80=94=20=D0=BC=D0=B0=D1=81=D1=82=D0=B5=D1=80=20=C2=AB=D0=B7?= =?UTF-8?q?=D0=B0=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D1=8B=C2=BB,=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0-=D0=B7=D0=B0=D1=8F?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0,=20=D1=81=D0=BA=D1=80=D1=8B=D1=82=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BC=D0=B0=D1=80=D0=B6=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Мастер CampaignWizard переделан с клик-модели на показы: окно дней → частота + живая смета (120 ₽/1000 показов, без маржи) → одна картинка + галерея превью + утверждение баннеров → проверка и «Отправить заявку». Бэкенд store/update принимают частоту/бюджет показов (клик-поля убраны), новый submit → статус queued («готова к запуску», реальный запуск в Директ — Часть 4). Маржа yandex_cost_rub скрыта от клиента ($hidden, тест). CampaignList: метка queued и показы вместо недельного бюджета. Тесты: бэкенд 99/99, фронт 102/102. Директ: заявка на ПОЛНЫЙ доступ к API подана 26.07 (upgrade, статус «новая»); картинка-креатив через API невозможна (creatives.add только видео) — гибрид, баннер заливается в кабинет вручную, CreativeId вставляется в портал. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../Api/AdvertisingCampaignController.php | 49 +- app/app/Models/AdCampaign.php | 6 + app/resources/js/api/advertising.ts | 49 +- .../components/advertising/CampaignList.vue | 15 +- .../components/advertising/CampaignWizard.vue | 630 +++++++++++------- app/routes/web.php | 1 + .../AdvertisingCampaignEndpointTest.php | 6 +- .../Advertising/CampaignMarginHiddenTest.php | 31 + .../Advertising/CampaignPokazyStoreTest.php | 39 ++ .../Advertising/CampaignSubmitTest.php | 52 ++ .../Frontend/advertising-api-pokazy.spec.ts | 11 +- .../advertising-campaign-list-pokazy.spec.ts | 56 ++ ...advertising-campaign-wizard-pokazy.spec.ts | 374 +++++++++++ .../advertising-campaign-wizard.spec.ts | 342 ++-------- ...26-07-26-HANDOFF-reklama-pokazy-stroyka.md | 6 +- ...yandex-reklama-pokazy-chast5b-master-ui.md | 404 +++++++++++ 16 files changed, 1499 insertions(+), 572 deletions(-) create mode 100644 app/tests/Feature/Advertising/CampaignMarginHiddenTest.php create mode 100644 app/tests/Feature/Advertising/CampaignPokazyStoreTest.php create mode 100644 app/tests/Feature/Advertising/CampaignSubmitTest.php create mode 100644 app/tests/Frontend/advertising-campaign-list-pokazy.spec.ts create mode 100644 app/tests/Frontend/advertising-campaign-wizard-pokazy.spec.ts create mode 100644 docs/superpowers/plans/2026-07-26-yandex-reklama-pokazy-chast5b-master-ui.md diff --git a/app/app/Http/Controllers/Api/AdvertisingCampaignController.php b/app/app/Http/Controllers/Api/AdvertisingCampaignController.php index 2d6f18af..b1ce001a 100644 --- a/app/app/Http/Controllers/Api/AdvertisingCampaignController.php +++ b/app/app/Http/Controllers/Api/AdvertisingCampaignController.php @@ -42,7 +42,7 @@ class AdvertisingCampaignController extends Controller $campaigns = AdCampaign::where('tenant_id', $tenantId) ->orderByDesc('id') - ->get(['id', 'name', 'status', 'weekly_budget_rub', 'audience_days', 'launched_at']); + ->get(['id', 'name', 'status', 'audience_days', 'frequency', 'estimated_impressions', 'budget_rub', 'launched_at']); return response()->json(['data' => $campaigns]); } @@ -53,14 +53,12 @@ class AdvertisingCampaignController extends Controller $data = $request->validate([ 'name' => ['required', 'string', 'max:255'], - // TODO(бизнес): уточнить минимальный недельный бюджет клиента (после ÷1.3 - // у Яндекса — фактический минимум площадки), Р8/В-open — НЕ хардкодить - // выдуманное число. Пока только "> 0". 'audience_days' => ['required', 'integer', 'min:1', 'max:90'], 'use_uploaded_list' => ['boolean'], - 'weekly_budget_rub' => ['required', 'numeric', 'min:1'], - 'daily_budget_rub' => ['nullable', 'numeric', 'min:1'], - 'click_bid_rub' => ['nullable', 'numeric', 'min:1'], + 'frequency' => ['nullable', 'integer', 'min:1', 'max:1000'], + 'frequency_period_days' => ['nullable', 'integer', 'min:1', 'max:90'], + 'estimated_impressions' => ['nullable', 'integer', 'min:0'], + 'budget_rub' => ['nullable', 'numeric', 'min:0'], ]); $campaign = AdCampaign::create([ @@ -69,9 +67,10 @@ class AdvertisingCampaignController extends Controller 'name' => $data['name'], 'audience_days' => $data['audience_days'], 'use_uploaded_list' => $data['use_uploaded_list'] ?? false, - 'weekly_budget_rub' => $data['weekly_budget_rub'], - 'daily_budget_rub' => $data['daily_budget_rub'] ?? null, - 'click_bid_rub' => $data['click_bid_rub'] ?? null, + 'frequency' => $data['frequency'] ?? null, + 'frequency_period_days' => $data['frequency_period_days'] ?? null, + 'estimated_impressions' => $data['estimated_impressions'] ?? null, + 'budget_rub' => $data['budget_rub'] ?? null, ]); return response()->json($campaign, 201); @@ -115,9 +114,10 @@ class AdvertisingCampaignController extends Controller 'name' => ['sometimes', 'required', 'string', 'max:255'], 'audience_days' => ['sometimes', 'required', 'integer', 'min:1', 'max:90'], 'use_uploaded_list' => ['sometimes', 'boolean'], - 'weekly_budget_rub' => ['sometimes', 'required', 'numeric', 'min:1'], - 'daily_budget_rub' => ['sometimes', 'nullable', 'numeric', 'min:1'], - 'click_bid_rub' => ['sometimes', 'nullable', 'numeric', 'min:1'], + 'frequency' => ['sometimes', 'nullable', 'integer', 'min:1', 'max:1000'], + 'frequency_period_days' => ['sometimes', 'nullable', 'integer', 'min:1', 'max:90'], + 'estimated_impressions' => ['sometimes', 'nullable', 'integer', 'min:0'], + 'budget_rub' => ['sometimes', 'nullable', 'numeric', 'min:0'], ]); // Правка аудитории/списка (audience_days, use_uploaded_list) применяется на @@ -205,6 +205,29 @@ class AdvertisingCampaignController extends Controller return response()->json(['status' => $campaign->fresh()->status]); } + /** + * Ч.5b — «отправить заявку на запуск». Пока Директ закрыт (заявка на доступ на рассмотрении), + * мастер не запускает кампанию в Директе (это Часть 4), а переводит готовую кампанию в статус + * `queued` — «готова к запуску, ждёт оператора». Требует: утверждённые баннеры + заданную частоту. + * Реальный запуск/заморозку денег доделает Часть 4. + */ + public function submit(Request $request, int $id): JsonResponse + { + $tenantId = (int) $request->user()->tenant_id; + $campaign = AdCampaign::where('tenant_id', $tenantId)->where('id', $id)->firstOrFail(); + + if ($campaign->banners_approved_at === null) { + return response()->json(['message' => 'Сначала утвердите баннеры.'], 422); + } + if ($campaign->frequency === null || $campaign->estimated_impressions === null) { + return response()->json(['message' => 'Не заданы частота и смета показов.'], 422); + } + + $campaign->update(['status' => AdCampaign::STATUS_QUEUED]); + + return response()->json(['status' => $campaign->fresh()->status]); + } + public function pause(Request $request, int $id): JsonResponse { $tenantId = (int) $request->user()->tenant_id; diff --git a/app/app/Models/AdCampaign.php b/app/app/Models/AdCampaign.php index 32d1506a..268627fb 100644 --- a/app/app/Models/AdCampaign.php +++ b/app/app/Models/AdCampaign.php @@ -32,6 +32,12 @@ class AdCampaign extends Model public const STATUS_STOPPED_NO_FUNDS = 'stopped_no_funds'; + public const STATUS_QUEUED = 'queued'; + + /** yandex_cost_rub — наш расход у Яндекса (основа маржи), клиенту НИКОГДА не показываем. + * Только атрибут-доступ (админка строит явные массивы), сериализация — скрыта (Ч.5b, спека §3). */ + protected $hidden = ['yandex_cost_rub']; + protected $attributes = [ 'status' => self::STATUS_DRAFT, 'delivered_impressions' => 0, diff --git a/app/resources/js/api/advertising.ts b/app/resources/js/api/advertising.ts index 346300ea..49e56c4c 100644 --- a/app/resources/js/api/advertising.ts +++ b/app/resources/js/api/advertising.ts @@ -9,7 +9,14 @@ import { apiClient, ensureCsrfCookie } from './client'; */ /** Статус кампании Директа (см. App\Models\AdCampaign константы STATUS_*). */ -export type CampaignStatus = 'draft' | 'pending_moderation' | 'running' | 'paused' | 'rejected' | 'stopped_no_funds'; +export type CampaignStatus = + | 'draft' + | 'queued' + | 'pending_moderation' + | 'running' + | 'paused' + | 'rejected' + | 'stopped_no_funds'; /** Ответ GET /api/advertising/wallet — статус рекламного кошелька тенанта. */ export interface AdWalletStatus { @@ -19,22 +26,32 @@ export interface AdWalletStatus { free_rub: string; } -/** Кампания Директа (строка из GET /api/advertising/campaigns, а также POST/PATCH-ответ). */ +/** + * Кампания «за показы» (строка из GET /api/advertising/campaigns, а также + * POST/PATCH-ответ). `yandex_cost_rub` (наша маржа) сюда НИКОГДА не + * добавляется — модель прячет поле в сериализации (Ч.5b Task 1, `$hidden`), + * клиент его физически не видит. + */ export interface Campaign { id: number; name: string; status: CampaignStatus; - weekly_budget_rub: string; audience_days: number; launched_at: string | null; + /** Частота показов на человека за период (Ч.5b). */ + frequency?: number; + /** Сколько показов ожидаем — смета с сервера (Ч.5b, из audience-size). */ + estimated_impressions?: number; + /** Итоговый бюджет показов клиента — та же смета, что и estimated_impressions. */ + budget_rub?: string; /** * Приходят и в POST/PATCH-ответе, и в GET .../{id} (detail, controller::show * отдаёт модель целиком) — но НЕ в списке GET /campaigns (index явно * выбирает узкий набор колонок), поэтому опциональны. */ use_uploaded_list?: boolean; - daily_budget_rub?: string | null; - click_bid_rub?: string | null; + /** Legacy-поле модели клик-кампаний — оставлено опциональным, новый мастер его не шлёт/не читает. */ + weekly_budget_rub?: string; } /** Ответ GET /api/advertising/campaigns/{id}/audience-size. */ @@ -49,14 +66,17 @@ export interface AudienceSize { cost_rub?: string; } -/** Тело POST /api/advertising/campaigns (создание черновика кампании). */ +/** Тело POST/PATCH /api/advertising/campaigns (создание/правка черновика кампании «за показы»). */ export interface CampaignCreate { name: string; audience_days: number; use_uploaded_list: boolean; - weekly_budget_rub: string; - daily_budget_rub?: string | null; - click_bid_rub?: string | null; + /** Частота показов на человека (Ч.5b, шаг «Как часто показывать»). */ + frequency?: number; + frequency_period_days?: number; + /** Смета показов/бюджета — берём из ответа audience-size, фронт не считает сам (Р37). */ + estimated_impressions?: number; + budget_rub?: string; } /** Объявление кампании (ответ POST /api/advertising/campaigns/{id}/ads). */ @@ -169,6 +189,17 @@ export async function launchCampaign(id: number): Promise<{ status: CampaignStat return data; } +/** + * POST /api/advertising/campaigns/{id}/submit — отправить готовую кампанию «за показы» на запуск. + * Директа сейчас нет (заявка на доступ на рассмотрении, Ч.5b) — переводит кампанию в статус + * `queued` («готова к запуску, ждёт оператора»), реальный запуск в Директ — Часть 4. + */ +export async function submitCampaign(id: number): Promise<{ status: CampaignStatus }> { + await ensureCsrfCookie(); + const { data } = await apiClient.post<{ status: CampaignStatus }>(`/api/advertising/campaigns/${id}/submit`); + return data; +} + /** POST /api/advertising/campaigns/{id}/pause — поставить кампанию на паузу. */ export async function pauseCampaign(id: number): Promise<{ status: CampaignStatus }> { await ensureCsrfCookie(); diff --git a/app/resources/js/components/advertising/CampaignList.vue b/app/resources/js/components/advertising/CampaignList.vue index e69505e6..59682a84 100644 --- a/app/resources/js/components/advertising/CampaignList.vue +++ b/app/resources/js/components/advertising/CampaignList.vue @@ -54,6 +54,8 @@ interface StatusMeta { const STATUS_META: Record = { running: { label: 'Крутится', color: 'success', icon: 'mdi-play-circle' }, + // Ч.5b — заявка отправлена (submitCampaign), ждёт запуска оператором (Директа пока нет). + queued: { label: 'Готова к запуску', color: 'info', icon: 'mdi-clock-check-outline' }, pending_moderation: { label: 'Проверяется Яндексом', color: 'warning', icon: 'mdi-clock-outline' }, rejected: { label: 'Отклонено', color: 'error', icon: 'mdi-close-circle' }, stopped_no_funds: { label: 'Остановлено (нет денег)', color: 'error', icon: 'mdi-alert-circle' }, @@ -231,11 +233,14 @@ defineExpose({ loadCampaigns }); {{ statusMeta(campaign.status).label }} -
    - Бюджет в неделю - {{ - formatMoney(campaign.weekly_budget_rub) - }} +
    + Показов + ~{{ campaign.estimated_impressions }} +
    + +
    + Бюджет показов + {{ formatMoney(campaign.budget_rub) }}
    diff --git a/app/resources/js/components/advertising/CampaignWizard.vue b/app/resources/js/components/advertising/CampaignWizard.vue index 52bd85af..9809501d 100644 --- a/app/resources/js/components/advertising/CampaignWizard.vue +++ b/app/resources/js/components/advertising/CampaignWizard.vue @@ -1,59 +1,51 @@ @@ -358,7 +408,7 @@ defineExpose({ diff --git a/app/resources/views/mail/ad-document-attached.blade.php b/app/resources/views/mail/ad-document-attached.blade.php new file mode 100644 index 00000000..4f207cf1 --- /dev/null +++ b/app/resources/views/mail/ad-document-attached.blade.php @@ -0,0 +1,22 @@ +

    Клиент приложил документ по рекламной кампании «{{ $campaignName }}».

    + +
      +
    • Кампания: № {{ $campaignId }}
    • +
    • Клиент: № {{ $tenantId }}
    • +
    • Файл: {{ $fileName }}
    • +
    + +@if ($comment !== '') +

    Клиент написал:

    +
    + {{ $comment }} +
    +@endif + +

    + Яндекс не принимает документы от программы — отнести файл придётся руками: + чат поддержки в кабинете Директа либо форма обратной связи модерации. + Сам документ лежит в портале, в переписке по кампании. +

    + +

    Это письмо отправлено автоматически.

    diff --git a/app/tests/Feature/Advertising/CampaignMessageEndpointsTest.php b/app/tests/Feature/Advertising/CampaignMessageEndpointsTest.php index efb1f283..f051829c 100644 --- a/app/tests/Feature/Advertising/CampaignMessageEndpointsTest.php +++ b/app/tests/Feature/Advertising/CampaignMessageEndpointsTest.php @@ -2,11 +2,13 @@ declare(strict_types=1); +use App\Mail\AdDocumentAttachedMail; use App\Models\AdCampaign; use App\Models\AdCampaignMessage; use App\Models\Tenant; use App\Models\User; use Illuminate\Http\UploadedFile; +use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Storage; function messageEndpointCampaign(): array @@ -178,3 +180,74 @@ it('свой файл клиент скачивает, чужой — нет', f ->get("/api/advertising/campaigns/{$campaign->id}/messages/{$message->id}/file") ->assertStatus(404); }); + +/** + * 🔴 Задача 16 закрыта по факту: везти документ роботом НЕКУДА. Проверено двумя нарочными + * отказами — в окне отказа Яндекса ноль полей для файла, документы он принимает только + * снаружи кабинета. Значит портал обязан сказать клиенту правду: файл у нас, сам он + * никуда не уедет. Молчать нельзя — клиент будет ждать ответа, которого не будет. + */ +it('приложил документ — портал честно говорит, что сам он к Яндексу не уедет', function () { + Storage::fake('local'); + Mail::fake(); + [, $user, $campaign] = messageEndpointCampaign(); + + $this->actingAs($user)->postJson("/api/advertising/campaigns/{$campaign->id}/messages", [ + 'body' => 'Прикладываю лицензию', + 'file' => UploadedFile::fake()->create('licence.pdf', 200, 'application/pdf'), + ])->assertStatus(201); + + $note = AdCampaignMessage::where('campaign_id', $campaign->id) + ->where('author', AdCampaignMessage::AUTHOR_SYSTEM) + ->latest('id')->first(); + + expect($note)->not->toBeNull() + ->and($note->body)->toContain('Яндекс'); +}); + +/** И зовём владельца письмом: без этого «разберёмся вручную» было бы пустым обещанием. */ +it('о приложенном документе владелец узнаёт письмом', function () { + Storage::fake('local'); + Mail::fake(); + [, $user, $campaign] = messageEndpointCampaign(); + + $this->actingAs($user)->postJson("/api/advertising/campaigns/{$campaign->id}/messages", [ + 'file' => UploadedFile::fake()->create('licence.pdf', 200, 'application/pdf'), + ])->assertStatus(201); + + Mail::assertQueued(AdDocumentAttachedMail::class); +}); + +/** Обычный ответ без файла — обычный ответ. Ни отметки, ни письма владельцу. */ +it('ответ без документа отметки не порождает и владельца не дёргает', function () { + Storage::fake('local'); + Mail::fake(); + [, $user, $campaign] = messageEndpointCampaign(); + + $this->actingAs($user)->postJson("/api/advertising/campaigns/{$campaign->id}/messages", [ + 'body' => 'Переделал картинку', + ])->assertStatus(201); + + expect(AdCampaignMessage::where('campaign_id', $campaign->id) + ->where('author', AdCampaignMessage::AUTHOR_SYSTEM)->count())->toBe(0); + + Mail::assertNothingQueued(); +}); + +/** + * Отметка и письмо — дело второстепенное, а сообщение клиента с документом нет. Беда + * с почтой не должна возвращать клиенту отказ на успешно принятый файл. + */ +it('упавшая почта не мешает принять документ клиента', function () { + Storage::fake('local'); + [, $user, $campaign] = messageEndpointCampaign(); + + Mail::shouldReceive('to')->andThrow(new RuntimeException('почта легла')); + + $this->actingAs($user)->postJson("/api/advertising/campaigns/{$campaign->id}/messages", [ + 'file' => UploadedFile::fake()->create('licence.pdf', 200, 'application/pdf'), + ])->assertStatus(201); + + expect(AdCampaignMessage::where('campaign_id', $campaign->id) + ->where('author', AdCampaignMessage::AUTHOR_CLIENT)->count())->toBe(1); +}); diff --git a/app/tests/Feature/Advertising/CampaignMessageServiceTest.php b/app/tests/Feature/Advertising/CampaignMessageServiceTest.php index 36a20479..fd525037 100644 --- a/app/tests/Feature/Advertising/CampaignMessageServiceTest.php +++ b/app/tests/Feature/Advertising/CampaignMessageServiceTest.php @@ -108,13 +108,16 @@ it('пустой текст в ленту не кладём', function () { }); /** - * 🪤 Ловушка, которую открыла разведка. Дедуп сравнивал текст только с ПОСЛЕДНИМ сообщением - * Яндекса. Порядок в жизни такой: обход модерации кладёт «причину выясняем» → робот приносит - * настоящую причину → следующий обход снова кладёт «причину выясняем», потому что последним - * теперь лежит доклад робота. Клиент, уже прочитавший настоящую причину, получал бы поверх - * неё письмо «Яндекс отклонил рекламу, но причину не назвал». + * 🪤 Ловушка, которую открыла разведка, и которую нельзя чинить дедупом по всей истории. + * + * Клиент починил рекламу, отправил заново — и получил ТОТ ЖЕ отказ. Это новость: клиент + * должен узнать, что его опять не пустили, и по той же причине. Дедуп «такой текст уже + * когда-то был» съел бы это сообщение, и клиент остался бы без объяснения. + * + * Поэтому защита от дублей смотрит только на ПОСЛЕДНЕЕ сообщение, а «заглушку» держит + * не она, а джоб модерации — см. SyncCampaignModerationJobTest. */ -it('прежний текст Яндекса не всплывает в ленте второй раз поверх свежего', function () { +it('тот же отказ после доклада разведки клиент увидит снова', function () { [$tenant, $campaign] = messageCampaign(); $banner = AdCampaignBanner::create([ 'tenant_id' => $tenant->id, 'campaign_id' => $campaign->id, @@ -123,10 +126,48 @@ it('прежний текст Яндекса не всплывает в лент ]); $service = app(CampaignMessageService::class); - $service->postFromYandex($campaign, $banner->id, 'Причину выясняем'); - $service->postFromYandex($campaign, $banner->id, 'Нет предупреждения: финансовые услуги'); - $again = $service->postFromYandex($campaign, $banner->id, 'Причину выясняем'); + $service->postFromRobot($campaign, $banner->id, 'Нет предупреждения: финансовые услуги'); + $service->postFromYandex($campaign, $banner->id, 'Отклонено'); + $again = $service->postFromRobot($campaign, $banner->id, 'Нет предупреждения: финансовые услуги'); - expect($again)->toBeNull() - ->and(AdCampaignMessage::where('campaign_id', $campaign->id)->count())->toBe(2); + expect($again)->not->toBeNull() + ->and(AdCampaignMessage::where('campaign_id', $campaign->id)->count())->toBe(3); +}); + +/** Доклад разведки умеет нести снимок экрана — он и есть доказательство прочитанного. */ +it('доклад разведки кладётся со снимком экрана', function () { + [$tenant, $campaign] = messageCampaign(); + + $message = app(CampaignMessageService::class)->postFromRobot($campaign, null, 'Причина', [ + 'path' => 'ad-messages/1/1/okno.png', + 'name' => 'okno.png', + 'size' => 1024, + 'mime' => 'image/png', + ]); + + expect($message->file_name)->toBe('okno.png') + ->and($message->file_path)->toBe('ad-messages/1/1/okno.png') + ->and($message->author)->toBe(AdCampaignMessage::AUTHOR_YANDEX); +}); + +/** Пустой доклад — не доклад. В ленту не кладём. */ +it('пустой доклад разведки в ленту не попадает', function () { + [, $campaign] = messageCampaign(); + + expect(app(CampaignMessageService::class)->postFromRobot($campaign, null, ' '))->toBeNull() + ->and(AdCampaignMessage::where('campaign_id', $campaign->id)->count())->toBe(0); +}); + +/** Признак «Яндекс уже что-то сказал» — на нём держится защита от повторной заглушки. */ +it('признак «слова Яндекса уже есть» считается по баннеру, а не по кампании целиком', function () { + [$tenant, $campaign] = messageCampaign(); + $slot = ['tenant_id' => $tenant->id, 'campaign_id' => $campaign->id, 'bytes' => 1000, 'included' => true]; + $a = AdCampaignBanner::create($slot + ['width' => 300, 'height' => 250, 'path' => 'ad-banners/a/300x250.jpg']); + $b = AdCampaignBanner::create($slot + ['width' => 728, 'height' => 90, 'path' => 'ad-banners/a/728x90.jpg']); + + $service = app(CampaignMessageService::class); + $service->postFromYandex($campaign, $a->id, 'Отклонено'); + + expect($service->hasFromYandex($campaign, $a->id))->toBeTrue() + ->and($service->hasFromYandex($campaign, $b->id))->toBeFalse(); }); diff --git a/app/tests/Feature/Advertising/SyncCampaignModerationJobTest.php b/app/tests/Feature/Advertising/SyncCampaignModerationJobTest.php index a75bc695..22407699 100644 --- a/app/tests/Feature/Advertising/SyncCampaignModerationJobTest.php +++ b/app/tests/Feature/Advertising/SyncCampaignModerationJobTest.php @@ -452,3 +452,73 @@ it('рубильник выключен — ни обращения к Янде expect(AdCreativeJob::where('campaign_id', $campaign->id)->count())->toBe(0) ->and($campaign->banners()->first()->moderation_status)->toBe(AdCampaignBanner::MOD_MODERATION); }); + +/** + * 🪤 Ловушка, вскрытая разведкой. Порядок в жизни такой: обход кладёт клиенту «Яндекс + * причину не назвал, выясняем» → робот приносит НАСТОЯЩУЮ причину → следующий обход + * снова кладёт заглушку, ведь последним в ленте лежит уже доклад робота. + * + * Клиент, только что прочитавший настоящую причину, получил бы поверх неё «причину + * не назвали» и ещё одно письмо. Заглушку показываем ОДИН раз — пока сказать нечего. + * + * 🔴 Кампания тут с ДВУМЯ объявлениями: одно приняли, одно отклонили. Иначе сценария + * не существует вовсе — при отказе ВСЕХ объявлений кампания уходит в «отклонена», + * и обход её больше не берёт. Первая версия этого теста была пустышкой ровно поэтому: + * вырезание защиты её не роняло. + */ +it('после доклада разведки заглушка «причину выясняем» в ленту не возвращается', function () { + configureYandexForModeration(); + + [$campaign, $banners] = makeModeratedCampaignWithBanners([9106, 9108]); + $otkloneny = $banners->first(); + + $otvet = ['result' => ['Ads' => [ + ['Id' => 9106, 'State' => 'OFF', 'Status' => 'REJECTED', 'StatusClarification' => ' +Отклонено на модерации.'], + ['Id' => 9108, 'State' => 'ON', 'Status' => 'ACCEPTED', 'StatusClarification' => 'Принято'], + ]]]; + + Http::fake(['*' => Http::response($otvet)]); + + // Первый обход — заглушка. Кампания остаётся работающей: одно объявление принято. + (new SyncCampaignModerationJob)->handle(); + expect($campaign->refresh()->status)->toBe(AdCampaign::STATUS_RUNNING); + + // Робот сходил и принёс настоящую причину. + app(CampaignMessageService::class)->postFromRobot( + $campaign, (int) $otkloneny->id, 'Нет предупреждения: финансовые услуги', + ); + + // Второй обход — заглушке в ленте больше не место. + (new SyncCampaignModerationJob)->handle(); + + $bodies = AdCampaignMessage::where('campaign_id', $campaign->id) + ->where('banner_id', $otkloneny->id) + ->orderBy('id')->pluck('body')->all(); + + expect($bodies)->toHaveCount(2) + ->and($bodies[1])->toContain('финансовые услуги'); +}); + +/** + * Обратная сторона: пока Яндекс молчит, а робот ещё не сходил, заглушка нужна — + * иначе под ярлыком «Отклонено» у клиента будет пустота. + */ +it('пока разведка не сходила, заглушка клиенту всё-таки показывается', function () { + configureYandexForModeration(); + + [$campaign] = makeModeratedCampaignWithBanners([9107]); + + Http::fake(['*' => Http::response(['result' => ['Ads' => [[ + 'Id' => 9107, 'State' => 'OFF', 'Status' => 'REJECTED', + 'StatusClarification' => ' +Отклонено на модерации.', + ]]]])]); + + (new SyncCampaignModerationJob)->handle(); + + $first = AdCampaignMessage::where('campaign_id', $campaign->id)->first(); + + expect($first)->not->toBeNull() + ->and($first->body)->toContain('причину не назвал'); +}); diff --git a/app/tests/Frontend/admin-advertising-view.spec.ts b/app/tests/Frontend/admin-advertising-view.spec.ts index c9eb02d9..9c310ea9 100644 --- a/app/tests/Frontend/admin-advertising-view.spec.ts +++ b/app/tests/Frontend/admin-advertising-view.spec.ts @@ -13,6 +13,7 @@ vi.mock('../../resources/js/api/admin', async (importOriginal) => { updateAdSettings: vi.fn(), fetchAdAwaitingCampaigns: vi.fn(), setAdCampaignCreative: vi.fn(), + fetchAdRobotStuck: vi.fn(), }; }); @@ -22,6 +23,7 @@ beforeEach(() => { vi.clearAllMocks(); vi.mocked(adminApi.fetchAdSettings).mockResolvedValue({ client_cpm_rub: '150.00', ad_margin_percent: '40.00' }); vi.mocked(adminApi.fetchAdAwaitingCampaigns).mockResolvedValue([]); + vi.mocked(adminApi.fetchAdRobotStuck).mockResolvedValue([]); }); function makeAwaitingCampaign(overrides: Partial = {}): AdminAwaitingCampaign { @@ -269,3 +271,48 @@ describe('AdminAdvertisingView ↔ кампании, ждущие номер к expect(wrapper.find('[data-testid="ad-creative-saved"]').exists()).toBe(false); }); }); + +/** + * 🔴 «Ждёт разбора» — места, где ЦЕПОЧКА ВСТАЛА: робот сходил в кабинет и не понял, что + * видит. Это не обычные отказы (их клиент разбирает сам по причине в переписке), а обрыв, + * о котором иначе никто не узнает: клиент будет ждать ответа, которого не будет. + */ +describe('AdminAdvertisingView ↔ GET /api/admin/advertising/robot-stuck', () => { + it('показывает сбойные задания робота с причиной и номером объявления', async () => { + vi.mocked(adminApi.fetchAdvertisingSpend).mockResolvedValueOnce(makeResponse()); + vi.mocked(adminApi.fetchAdRobotStuck).mockResolvedValueOnce([ + { + id: 9, + campaign_id: 42, + tenant_id: 1, + tenant_name: 'Окна Москва', + campaign_name: 'Кампания на показы', + campaign_status: 'rejected', + kind: 'inspect', + yandex_ad_id: 17787055204, + failure_reason: 'разметка не совпала: окна BannerStatusCell.Popup нет', + attempts: 1, + finished_at: '2026-07-28T18:00:00+00:00', + }, + ]); + + const wrapper = mountView(); + await flushPromises(); + + const rows = wrapper.findAll('[data-testid="ad-stuck-row"]'); + expect(rows).toHaveLength(1); + expect(rows[0].text()).toContain('Окна Москва'); + expect(rows[0].text()).toContain('разметка не совпала'); + expect(rows[0].text()).toContain('17787055204'); + }); + + it('когда разбирать нечего — говорит об этом прямо, а не показывает пустую таблицу', async () => { + vi.mocked(adminApi.fetchAdvertisingSpend).mockResolvedValueOnce(makeResponse()); + + const wrapper = mountView(); + await flushPromises(); + + expect(wrapper.find('[data-testid="ad-stuck-empty"]').exists()).toBe(true); + expect(wrapper.findAll('[data-testid="ad-stuck-row"]')).toHaveLength(0); + }); +}); diff --git a/bots/yandex-creatives/src/cabinet.js b/bots/yandex-creatives/src/cabinet.js index 0935864e..ae3ad6ad 100644 --- a/bots/yandex-creatives/src/cabinet.js +++ b/bots/yandex-creatives/src/cabinet.js @@ -29,13 +29,6 @@ const MODAL = '[data-testid="CanvasModal.html5"]'; const FILE_INPUT = `${MODAL} input[type=file]`; const SUBMIT = '[data-testid="CanvasFooter.SubmitButton"]'; const MODAL_CLOSE = '[data-testid="CanvasModal.html5.CloseButton"]'; -/** - * Список наборов на вкладке «Мои креативы». Живьём окно после «Создать» НЕ закрывается, - * а переключается на эту вкладку — появление списка и есть признак «набор создан» - * (cabinet-flow.md §5.2). Роботу дальше ничего выбирать не надо: креативы уже в библиотеке - * аккаунта, а номера портал добывает слепком `creatives.get`. - */ -const BATCHES = '[data-testid="BatchesList"]'; /** * Адрес «прихожей» — форма НОВОГО объявления существующей группы. @@ -61,7 +54,8 @@ export async function uploadCreatives(page, config, files, options = {}) { menuTimeoutMs = 5000, modalTimeoutMs = 10000, acceptTimeoutMs = 60000, - modalCloseTimeoutMs = 120000, + // Живьём окно не закрывается вовсе — держать робота две минуты впустую незачем. + modalCloseTimeoutMs = 20000, pollMs = 250, } = options; @@ -96,31 +90,35 @@ export async function uploadCreatives(page, config, files, options = {}) { await humanPause(config); await submit.click(); - // Шаг 6 — дожидаемся, чем кончилась загрузка. + // Шаг 6 — окно после «Создать». // - // 🔑 Снято живьём 28.07.2026: окно НЕ закрывается. После «Создать» оно переключается - // на вкладку «Мои креативы» со списком наборов — вот это и есть «набор создан». - // Раньше здесь ждали закрытия и на КАЖДОЙ удачной загрузке звали человека письмом - // «окно не закрылось». Закрытие оставлено как второй допустимый исход: кабинет живой, - // завтра может повести себя иначе. + // 🔑 Снято живьём 28.07.2026: окно НЕ закрывается — оно переключается на вкладку + // «Мои креативы». Поэтому «окно не закрылось» это НОРМА, а не беда. Раньше робот на + // каждой удачной загрузке звал человека письмом-алярмом; письмо, которое приходит + // всегда, перестают читать вовсе. // - // 🔴 Ни один из исходов провалом НЕ считается. Правда об успехе живёт не на экране, - // а в слепке creatives.get — её знает портал. Объяви робот провал, портал пометил бы - // задание сбойным, хотя креативы уже лежат в кабинете: получили бы и враньё, и мусор. - // Робот только докладывает, что видел. - const outcome = await waitForUploadOutcome(page, modalCloseTimeoutMs, pollMs); + // 🔴 Признак «набор создан» с экрана мы НЕ читаем. Подтверждённой метки у нас нет: + // список наборов в разметке — скрытая галочка `BatchesList`, по видимости её проверять + // нельзя, а гадать по экрану — ровно тот способ, которым уже дважды за этот день + // получалась мёртвая программа при зелёных тестах. + // + // Правда об успехе живёт не на экране, а в слепке `creatives.get`: портал сверяет + // «до/после» и, если креатив не появился, закрывает задание сбоем с внятной причиной — + // она видна в админке «ждёт разбора». Этого сторожа достаточно, экранный не нужен. + // + // Ждём закрытия недолго: обычно его не будет вовсе, и держать робота две минуты + // впустую незачем. + let modalClosed = true; + let cabinetSaid = ''; - const batchesShown = outcome === 'batches'; - const modalClosed = outcome === 'closed'; - // Слова кабинета снимаем только в непонятном случае: когда набор создан, в окне лежит - // список наборов, и тащить его наружу незачем. - const cabinetSaid = outcome === 'none' - ? (await page.locator(MODAL).innerText().catch(() => '')).trim() - : ''; - - if (!modalClosed) { + try { + await page.locator(MODAL).first().waitFor({ state: 'detached', timeout: modalCloseTimeoutMs }); + } catch { + modalClosed = false; + // Слова кабинета уносим в отчёт — по ним разбирают сбой, если он всё-таки случился. + cabinetSaid = (await page.locator(MODAL).first().innerText().catch(() => '')).trim(); // Закрываем крестиком — так предписывает разметка, §2 шаг 6. - await page.locator(MODAL_CLOSE).click().catch(() => {}); + await page.locator(MODAL_CLOSE).first().click().catch(() => {}); } // Шаг 7 — уходим со страницы. Кнопку «Сохранить изменения» (SaveBannerButton) не @@ -132,31 +130,7 @@ export async function uploadCreatives(page, config, files, options = {}) { // иначе портал пометит задание сбойным, а креативы останутся лежать в кабинете. await page.goto(overviewUrl(config), { waitUntil: 'domcontentloaded' }).catch(() => {}); - return { modalClosed, batchesShown, cabinetSaid }; -} - -/** - * Чем кончилась загрузка: `batches` — окно показало список наборов, `closed` — окно ушло - * само, `none` — ни то, ни другое за отведённое время. - * - * Опрашиваем по очереди, а не ждём одного признака: исход заранее неизвестен, а ждать - * сначала один целый срок, потом второй — значит на удачной загрузке простоять лишние - * две минуты. - */ -async function waitForUploadOutcome(page, timeoutMs, pollMs) { - const deadline = Date.now() + timeoutMs; - - while (Date.now() < deadline) { - if (await page.locator(BATCHES).isVisible().catch(() => false)) { - return 'batches'; - } - if (!(await page.locator(MODAL).isVisible().catch(() => false))) { - return 'closed'; - } - await new Promise((resolve) => setTimeout(resolve, pollMs)); - } - - return 'none'; + return { modalClosed, cabinetSaid }; } // ── Разведка: прочитать, за что Яндекс отклонил объявление ──────────────────────────── @@ -217,8 +191,12 @@ export async function readRejection(page, config, job, screenshotPath, options = } // 🪤 Окно открывается КЛИКОМ. Наведение мышью не работает — проверено живьём. + // + // Везде `.first()`: если на странице почему-то окажется два таких элемента, Playwright + // в строгом режиме бросит ошибку про «несколько совпадений», и робот сдастся не потому, + // что кабинет поменялся, а потому, что мы неаккуратно выбрали элемент. await cell.locator(STATUS_CONTENT).first().click(); - await page.locator(POPUP).waitFor({ timeout: popupTimeoutMs }); + await page.locator(POPUP).first().waitFor({ timeout: popupTimeoutMs }); await humanPause(config); // 🔑 Строку причины надо РАСКРЫТЬ: до этого виден только короткий заголовок @@ -229,7 +207,7 @@ export async function readRejection(page, config, job, screenshotPath, options = await humanPause(config); } - const report = (await page.locator(POPUP).innerText()).trim(); + const report = (await page.locator(POPUP).first().innerText()).trim(); if (report === '') { throw new Error(`Окно причины по объявлению ${adId} пустое — докладывать нечего`); } @@ -238,7 +216,7 @@ export async function readRejection(page, config, job, screenshotPath, options = // а не страницу целиком: на полном снимке видна боковая панель с логином и остатком счёта. let shot = screenshotPath; try { - await page.locator(POPUP).screenshot({ path: screenshotPath }); + await page.locator(POPUP).first().screenshot({ path: screenshotPath }); } catch { shot = null; } diff --git a/bots/yandex-creatives/src/runner.js b/bots/yandex-creatives/src/runner.js index 6127391c..06cc684c 100644 --- a/bots/yandex-creatives/src/runner.js +++ b/bots/yandex-creatives/src/runner.js @@ -172,25 +172,24 @@ export async function runOnce(config, portal, browser, mailer, { timestamp, work } catch { /* письмо — не повод считать работу проваленной */ } } - // Зовём человека, только когда исход НЕПОНЯТЕН: ни список наборов не появился, ни окно - // не закрылось. 🔴 Само по себе «окно не закрылось» бедой не является — живьём оно - // и не закрывается, а переключается на список наборов (cabinet-flow.md §5.2). Пока - // условие было только по закрытию, письмо уходило на КАЖДОЙ удачной загрузке, а письмо, - // которое приходит всегда, перестают читать вовсе. - if (said && said.modalClosed === false && said.batchesShown === false) { - try { - await mailer.alarm({ - step: 'загрузка креативов', - reason: `Окно загрузки повело себя незнакомо: ни список наборов не появился, ни окно не закрылось. ` - + `Кабинет сказал: ${said.cabinetSaid || 'ничего не написал'}`, - campaignId: job.campaign_id, - screenshotPath: null, - uploaded: true, - }); - } catch { /* см. выше */ } - } - - return { ok: true, jobId: job.id, count: files.length, reportedToPortal: true }; + // 🔴 По виду окна загрузки человека НЕ зовём вовсе. + // + // Раньше письмо-алярм уходило на каждое «окно не закрылось» — а живьём оно и не + // закрывается, оно переключается на вкладку «Мои креативы» (снято 28.07.2026). То есть + // письмо приходило на КАЖДОЙ удачной загрузке, а письмо, которое приходит всегда, + // перестают читать вовсе. + // + // Настоящего сбоя это не прячет: правда об успехе живёт в слепке `creatives.get`. + // Не появился креатив — портал закрывает задание сбоем с внятной причиной, и оно видно + // в админке «ждёт разбора». Слова кабинета отдаём наружу в результате прохода — они + // попадают в журнал робота, если разбирать всё-таки придётся. + return { + ok: true, + jobId: job.id, + count: files.length, + reportedToPortal: true, + cabinetSaid: said?.cabinetSaid || '', + }; } /** diff --git a/bots/yandex-creatives/test/cabinet.test.js b/bots/yandex-creatives/test/cabinet.test.js index e13b591d..ffe623b7 100644 --- a/bots/yandex-creatives/test/cabinet.test.js +++ b/bots/yandex-creatives/test/cabinet.test.js @@ -20,9 +20,8 @@ const FAST = { acceptTimeoutMs: 60, modalCloseTimeoutMs: 60, pollMs: 5 }; function fakePage({ enabledAfter = 1, // Умолчание — то, что происходит ЖИВЬЁМ: окно после «Создать» не закрывается, - // а переключается на вкладку «Мои креативы» со списком наборов (cabinet-flow.md §5.2). + // а переключается на вкладку «Мои креативы» (cabinet-flow.md §5.2). modalCloses = false, - batchesShown = true, modalText = '', leavingThrows = false, } = {}) { @@ -39,7 +38,10 @@ function fakePage({ if (leavingThrows && !url.includes('banners-edit')) throw new Error('сеть икнула на уходе'); }, locator(selector) { - return { + const self = { + // Настоящий Playwright в строгом режиме падает на нескольких совпадениях — + // поэтому боевой код везде зовёт .first(). Подделка обязана это уметь. + first: () => self, async waitFor(options = {}) { actions.push({ type: 'waitFor', selector, state: options.state }); if (options.state === 'detached' && !modalCloses) throw new Error('окно не закрылось'); @@ -47,13 +49,10 @@ function fakePage({ async click() { actions.push({ type: 'click', selector }); }, async setInputFiles(files) { actions.push({ type: 'files', selector, files }); }, async isDisabled() { disabledAsked += 1; return disabledAsked < enabledAfter; }, - async isVisible() { - if (selector.includes('BatchesList')) return batchesShown; - if (selector === '[data-testid="CanvasModal.html5"]') return !modalCloses; - return true; - }, async innerText() { return modalText; }, }; + + return self; }, }; } @@ -132,23 +131,28 @@ test('бросает понятную ошибку, если кабинет та /** * 🔑 Как оно на самом деле, снято живьём 28.07.2026: окно после «Создать» НЕ закрывается, - * а переключается на вкладку «Мои креативы» со списком наборов. Раньше робот считал это - * «окно не закрылось» и звал человека письмом — на КАЖДОЙ удачной загрузке. + * оно переключается на вкладку «Мои креативы». Значит «не закрылось» — это НОРМА. + * Робот закрывает окно крестиком и уходит, ничего не объявляя провалом. + * + * 🔴 Признак «набор создан» с экрана мы намеренно НЕ читаем: подтверждённой метки у нас + * нет, а гадать по экрану — способ получить мёртвую программу при зелёных тестах. + * Правду об успехе знает портал по слепку creatives.get. */ -test('после «Создать» окно переключается на список наборов — это удача, человека не зовём', async () => { - const page = fakePage(); +test('окно после «Создать» не закрылось — это норма: закрываем крестиком и уходим', async () => { + const page = fakePage({ modalText: 'Мои креативы 300×250' }); const result = await uploadCreatives(page, config, FILES, FAST); - assert.equal(result.batchesShown, true); - assert.equal(result.cabinetSaid, ''); + assert.equal(result.modalClosed, false); + // Слова кабинета уносим наружу — по ним разбирают сбой, если он всё-таки был. + assert.equal(result.cabinetSaid, 'Мои креативы 300×250'); // Крестик тут нажать НАДО: окно само не уйдёт, а робот обязан уйти со страницы чистым. assert.ok(page.clicked().includes('[data-testid="CanvasModal.html5.CloseButton"]')); assert.equal(page.clicked().includes('[data-testid="SaveBannerButton"]'), false); }); -test('окно закрылось само — тоже удача, и крестик тогда не трогаем', async () => { - const page = fakePage({ modalCloses: true, batchesShown: false }); +test('окно закрылось само — тоже нормальный исход, крестик тогда не трогаем', async () => { + const page = fakePage({ modalCloses: true }); const result = await uploadCreatives(page, config, FILES, FAST); @@ -157,20 +161,6 @@ test('окно закрылось само — тоже удача, и крес assert.equal(page.clicked().includes('[data-testid="CanvasModal.html5.CloseButton"]'), false); }); -test('ни списка наборов, ни закрытия — НЕ объявляем провал, но слова кабинета отдаём наружу', async () => { - const page = fakePage({ modalCloses: false, batchesShown: false, modalText: 'Файл слишком большой' }); - - // Провал тут объявлять нельзя: правду об успехе знает портал по слепку креативов, - // а не робот по экрану. Но это и есть тот единственный случай, когда зовём человека. - const result = await uploadCreatives(page, config, FILES, FAST); - - assert.equal(result.modalClosed, false); - assert.equal(result.batchesShown, false); - assert.equal(result.cabinetSaid, 'Файл слишком большой'); - assert.ok(page.clicked().includes('[data-testid="CanvasModal.html5.CloseButton"]')); - assert.equal(page.clicked().includes('[data-testid="SaveBannerButton"]'), false); -}); - test('сетевая икота на уходе со страницы не считается провалом загрузки', async () => { // Файлы уже приняты, «Создать» нажата — работа сделана. Уход со страницы это уборка // за собой, и её осечка не должна выдаваться за «креативы не загрузились»: портал @@ -179,7 +169,7 @@ test('сетевая икота на уходе со страницы не сч const result = await uploadCreatives(page, config, FILES, FAST); - assert.equal(result.batchesShown, true); + assert.equal(result.modalClosed, false); assert.equal(page.clicked().includes('[data-testid="SaveBannerButton"]'), false); }); diff --git a/bots/yandex-creatives/test/runner.test.js b/bots/yandex-creatives/test/runner.test.js index adf0fa10..6ae0a936 100644 --- a/bots/yandex-creatives/test/runner.test.js +++ b/bots/yandex-creatives/test/runner.test.js @@ -28,7 +28,7 @@ async function withWorkDir(fn) { function stubs({ job = null, uploadThrows = null, - uploadResult = { modalClosed: true, cabinetSaid: '' }, + uploadResult = { modalClosed: false, cabinetSaid: '' }, loggedIn = true, inspectThrows = null, inspectResult = { report: 'Нет предупреждения: финансовые услуги', screenshotPath: '/tmp/shot.png' }, @@ -241,15 +241,19 @@ test('слетевший вход не пытается грузить и отч }); /** - * 🔴 Живьём окно загрузки НЕ закрывается: после «Создать» оно показывает список наборов - * (cabinet-flow.md §5.2). Пока роботу это казалось бедой, он слал письмо-алярм на КАЖДОЙ - * удачной загрузке — а письмо, которое приходит всегда, перестают читать вовсе. + * 🔴 Живьём окно загрузки НЕ закрывается: после «Создать» оно переключается на вкладку + * «Мои креативы» (cabinet-flow.md §5.2). Пока роботу это казалось бедой, он слал + * письмо-алярм на КАЖДОЙ удачной загрузке — а письмо, которое приходит всегда, + * перестают читать вовсе. + * + * 🔴 Настоящий сбой это не прячет: если креатив не появился, портал ловит это слепком + * creatives.get и закрывает задание сбоем — оно видно в админке «ждёт разбора». */ test('обычная удачная загрузка человека письмом НЕ дёргает', async () => { await withWorkDir(async (workDir) => { const s = stubs({ job: JOB, - uploadResult: { modalClosed: false, batchesShown: true, cabinetSaid: '' }, + uploadResult: { modalClosed: false, cabinetSaid: 'Мои креативы 300×250' }, }); const res = await runOnce(FAST_CONFIG, s.portal, s.browser, s.mailer, opts(workDir)); @@ -264,20 +268,24 @@ test('обычная удачная загрузка человека письм }); }); -test('окно не закрылось — докладываем «готово» порталу, но письмом зовём человека', async () => { +/** + * Слова кабинета не теряем: они уезжают в результат прохода и попадают в журнал робота. + * Но письмом по ним человека НЕ зовём — приговор об успехе выносит портал по слепку + * креативов, а не робот по экрану. + */ +test('слова кабинета уносим в результат прохода, но письмом по ним не зовём', async () => { await withWorkDir(async (workDir) => { - // Приговор выносит портал по слепку креативов, а не робот по экрану: окно может - // остаться открытым и после удачной загрузки. Но человек должен это увидеть. const s = stubs({ job: JOB, - uploadResult: { modalClosed: false, batchesShown: false, cabinetSaid: 'Файл слишком большой' }, + uploadResult: { modalClosed: false, cabinetSaid: 'Файл слишком большой' }, }); const res = await runOnce(FAST_CONFIG, s.portal, s.browser, s.mailer, opts(workDir)); assert.equal(res.ok, true); + assert.equal(res.cabinetSaid, 'Файл слишком большой'); assert.deepEqual(s.reports, [{ ok: true, id: 7 }]); - assert.equal(s.sent.some((m) => m.kind === 'alarm' && /Файл слишком большой/.test(m.reason)), true); + assert.equal(s.sent.some((m) => m.kind === 'alarm'), false); }); }); @@ -329,10 +337,7 @@ test('доклад «готово» повторяется, если с перв // оставит дубли, вычистить которые можно только руками. test('письма после заливки помечены «креативы уже в кабинете»', async () => { await withWorkDir(async (workDir) => { - const s = stubs({ - job: JOB, - uploadResult: { modalClosed: false, batchesShown: false, cabinetSaid: 'что-то не так' }, - }); + const s = stubs({ job: JOB, uploadResult: { modalClosed: false, cabinetSaid: 'что-то не так' } }); s.portal.reportDone = async () => { throw new Error('Портал ответил 502 на /done'); }; await runOnce(FAST_CONFIG, s.portal, s.browser, s.mailer, opts(workDir)); diff --git a/db/CHANGELOG_schema.md b/db/CHANGELOG_schema.md index 31890d4f..f3db81c4 100644 --- a/db/CHANGELOG_schema.md +++ b/db/CHANGELOG_schema.md @@ -6,6 +6,32 @@ ⚠️ **Рекламный модуль в `schema.sql` не консолидирован.** Записи v9.x ведут таблицы `ad_*`, которых в теле `schema.sql` нет вовсе — их DDL живёт только в дельта-миграциях. Идти за версией v9.x в header `schema.sql` бесполезно: там своя нумерация v8.x. Правка шапки от 29.07.2026, к содержанию записей отношения не имеет. +## v9.17 — 28.07.2026 — служебная роль получает право ПИСАТЬ в ленту: INSERT + нумератор + +```sql +GRANT INSERT ON ad_campaign_messages TO crm_admin_user; +GRANT USAGE, SELECT ON SEQUENCE public.ad_campaign_messages_id_seq TO crm_admin_user; +``` + +Миграция: `app/database/migrations/2026_07_29_120000_grant_admin_insert_ad_campaign_messages.php`. + +🔴 **Без этой записи разведка на бою уронила бы очередь целиком.** Доклад робота приходит +на `POST /api/creative-robot/jobs/{id}/inspection`; маршруты робота идут через посредник +`admin-db`, который подменяет подключение по умолчанию на `pgsql_admin` = `crm_admin_user`. +Значит INSERT в ленту уходит под этой ролью, а записью v9.14 ей выдали **только SELECT**. +На бою доклад упал бы с «permission denied for table ad_campaign_messages», робот получил +бы 500, трижды повторил и сдался. **Задание осталось бы навсегда «в работе», а пока хоть +одно задание в работе, выдача отвечает «работы нет» ВСЕМ клиентам.** + +Нумератор — отдельный объект: GRANT INSERT на таблицу НЕ даёт права взять следующий номер. +Общий `GRANT ... ON ALL SEQUENCES` из `db/02_grants.sql` разовый и покрыл только те +нумераторы, что существовали при создании ролей; `ad_campaign_messages_id_seq` появился +позже. Тот же класс ошибки уже ловили в v9.05. + +🪤 На dev/тестах дырка невидима — там ходит суперпользователь `postgres`, которому права +не проверяются. Поймал её не тест, а агент `rls-reviewer` по коду. UPDATE и DELETE +не выдаём: лента только пополняется. + ## v9.16 — 28.07.2026 — какое объявление Яндекса смотрит разведка: ad_creative_jobs.yandex_ad_id ```sql diff --git a/docs/superpowers/2026-07-27-PROGRESS-pochinka-v12.md b/docs/superpowers/2026-07-27-PROGRESS-pochinka-v12.md index c28d7867..1255b16b 100644 --- a/docs/superpowers/2026-07-27-PROGRESS-pochinka-v12.md +++ b/docs/superpowers/2026-07-27-PROGRESS-pochinka-v12.md @@ -1327,3 +1327,109 @@ for sequence». Поэтому сторож поставлен не на рез перед тем, как писать рядом, — правило, которое я нарушил второй раз за два дня. Числа после починки: портал **382/382, 1222 проверки**. + +--- + +## Задача 16 закрыта решением владельца: говорим клиенту правду (28.07.2026) + +Дороги «робот везёт документ в кабинет» не существует — доказано двумя нарочными отказами. +Владелец выбрал: приём документа оставить, но сказать клиенту как есть. + +Что сделано: + +- клиент приложил файл → в ленту сразу ложится служебная отметка: **документ у нас, + передать его Яндексу автоматически нельзя, при необходимости отнесём сами и напишем здесь**; +- владельцу уходит письмо `AdDocumentAttachedMail` на `services.monitoring.alert_email`. + 🔑 Без письма «отнесём сами» было бы **пустым обещанием**: файл просто лёг бы на диск, + и о нём никто бы не узнал; +- сам файл письмом НЕ отправляем — это чужие бумаги (лицензии, свидетельства). В письме + только номер кампании, имя файла и комментарий клиента; +- отметка и письмо под `try/catch`: беда с почтой не должна возвращать клиенту отказ + на успешно принятый документ. Есть тест-сторож. + +Обычный ответ без файла ни отметки, ни письма не порождает — иначе владельца дёргали бы +на каждую реплику клиента. + +## Экран «ждёт разбора» в админке (28.07.2026) + +Ручка была, экрана не было — нарисован третьей карточкой на странице «Реклама» в админке. +Показывает клиента, кампанию, что робот делал (человеческими словами, не `inspect`), +номер объявления в Яндексе и на чём споткнулся. Пусто — говорит об этом прямо, +а не показывает пустую таблицу. + +🔑 В подписи к экрану прямо сказано, чего там НЕ будет: обычных отказов модерации. +Их клиент разбирает сам, причина лежит у него в переписке. Экран — только про обрывы +цепочки, иначе он превратится в свалку и его перестанут смотреть. + +### Числа на конец захода 4 + +- портал: **386/386, 1232 проверки** +- экраны рекламы и админки: **35/35** на затронутых наборах +- робот: **75/75** +- мест снятия заморозки денег — **четыре** + +--- + +## 🔴 Разбор собственной работы: четыре ошибки, найденные перечитыванием (28.07.2026, ночь) + +Владелец сказал остановиться и посмотреть, что сделано. Посмотрел — нашёл четыре штуки, +одна тяжёлая. Все четыре относятся к коду, написанному в этот же день. + +### 1. Доклад разведки уронил бы очередь целиком + +Робот пишет в ленту под ролью `crm_admin_user` — маршруты робота идут через посредник +`admin-db`. У этой роли на `ad_campaign_messages` было **только чтение** (v9.14). +На бою: `permission denied` → 500 роботу → три повтора → сдался. **Задание навсегда +«в работе», а пока хоть одно задание в работе, выдача отвечает «работы нет» ВСЕМ +клиентам — очередь встала бы колом для всего продукта.** + +Обиднее всего, что в плане это было записано прямым текстом как «хвост задачи 16», и я +прошёл мимо. Лечение — запись **v9.17**: INSERT + нумератор. + +🪤 Тесты не поймали и не могли: ходят суперпользователем, права не проверяются. + +### 2. Признак «набор создан» я выдумал + +Взял метку `BatchesList` как признак удачной загрузки. А в нашей же разметке (§5.2) +написано: это **скрытая галочка**, её жмут через `force`. Проверка «видно ли её» +не сработала бы никогда — вернулся бы ровно тот алярм на каждой загрузке, который +я этой правкой и чинил. Плюс строгий режим Playwright упал бы на нескольких совпадениях. + +**Признак с экрана убран совсем.** «Окно не закрылось» объявлено нормой (так и есть +живьём), человека по виду окна не зовём. Настоящий сбой ловит портал слепком +`creatives.get` — не появился креатив, задание закрывается сбоем с внятной причиной, +и оно видно в админке «ждёт разбора». Экранный сторож не нужен. + +🪤 Урок ровно тот же, что я сам записал утром: **не гадать по экрану**. Записал — и через +несколько часов сделал. + +### 3. Сломал ленту для повторного отказа + +Поменял защиту от дублей на «такой текст уже когда-либо был». Выглядит надёжнее, а ломает +главный случай: клиент починил рекламу, отправил заново, получил ТОТ ЖЕ отказ — и такое +сообщение не показалось бы вовсе. Клиент остался бы без объяснения, почему опять не пустили. + +Вернул сравнение с последним сообщением. Заглушку «причину выясняем» держит теперь не дедуп, +а сам джоб: показываем её один раз, пока сказать нечего. + +### 4. Мой собственный тест оказался ПУСТЫШКОЙ + +Тест «после доклада разведки заглушка не возвращается» был зелёным и **оставался зелёным +при вырезанной защите**. Причина: в тесте отклонялись ВСЕ объявления кампании, а тогда +кампания уходит в «отклонена», и обход её больше не берёт — второго прохода просто +не случалось. + +Сценарий существует только при ЧАСТИЧНОМ отказе: одно объявление принято, одно отклонено, +кампания продолжает работать. Тест переписан на две штуки — теперь вырезание защиты +его роняет. + +🪤 Это второй раз за неделю: тест проверял состояние, в которое продукт не попадает. +**Вырезание защиты — единственный способ отличить сторожа от украшения.** + +### Числа после разбора + +- портал: **391/391, 1244 проверки** +- админские экраны: **9/9** +- фронт на затронутых наборах: **52/52** +- робот: **74/74** +- мест снятия заморозки денег — **четыре** diff --git a/docs/superpowers/2026-07-28-STATE-okno-peredachi.md b/docs/superpowers/2026-07-28-STATE-okno-peredachi.md index e4e360ee..69e6db34 100644 --- a/docs/superpowers/2026-07-28-STATE-okno-peredachi.md +++ b/docs/superpowers/2026-07-28-STATE-okno-peredachi.md @@ -3,15 +3,20 @@ Файл пишется в конце каждого захода. Читать его **первым делом** после компакта: всё, что нужно следующей сессии, лежит здесь, а не в переписке. -Обновлено: 28.07.2026, поздний вечер — **задачи 13, 14 и 15 закрыты**. Разведка роботом +Обновлено: 28.07.2026, ночь — **заход 4 закрыт целиком: задачи 13, 14, 15 и 16**. Разведка роботом написана целиком: портал ставит задание на отказ, робот читает экран кабинета, доклад -ложится клиенту в ленту со снимком. 🔴 **Задача 16 упёрлась окончательно: второй вердикт -пришёл, поля для документа нет и у лицензируемой тематики** — решение за владельцем, +ложится клиенту в ленту со снимком. 🔴 **Задача 16 закрыта по факту: везти документ роботом +некуда** — второй вердикт это подтвердил. Владелец выбрал говорить клиенту правду, сделано; подробности ниже и в `cabinet-flow.md` §7.6. 🔴 **Попутно починен дефект в роботе:** он грузил картинки в поле, которое Яндекс не принимает — живьём не залил бы ничего. Подробности ниже. +🔴 **В конце захода перечитал свою же работу и нашёл четыре ошибки, все исправлены.** +Тяжёлая: доклад разведки на бою уронил бы очередь заданий целиком — служебной роли +не хватало права писать в ленту (лечение — запись схемы **v9.17**). Разбор — в PROGRESS, +раздел «Разбор собственной работы». + 🪤 Записи прошлого захода помечены датой «29.07.2026» — это моя ошибка в календаре, вся та работа сделана **28.07**. Имена миграций `2026_07_29_*` менять не стали: они уже закоммичены, а дата в имени — только порядок применения. @@ -24,9 +29,9 @@ - Коммиты 28.07, вечер: `23db59bd` экран отказа снят · `22203465` вторая проба заведена · `898f9d57` Яндекс не сообщает машине причину · `865bd211` починка дефекта · `0b0a4705` снимок состояния · `7a446132` починка поля файлов у робота. -- **Заходы 1, 2 и 3 закрыты целиком** (задачи 1–12). **Куски 1 «переписка» и 2 - «оживление» замысла готовы.** Заход 4: задачи 13, 14 и 15 сделаны, - 16 упёрлась в кабинет Яндекса окончательно. +- **Все четыре захода закрыты** (задачи 1–16). **Куски 1 «переписка», 2 «оживление» + и 3 «разведка» готовы.** Кусок 3 в части доставки документа отменён по факту: + такой дороги у Яндекса нет. - Никуда не пушили, на боевой не выкатывали, рубильник Директа выключен, в живой кабинет Яндекса никто не заходил. @@ -48,14 +53,15 @@ abb3941e feat реклама за показы: удаление отклонё ## Зелёные числа на этом коммите -- портал: **382/382, 1222 проверки, ~65 с** — `cd app && DB_DATABASE=liderra_testing_reklama php artisan test --filter=Advertising` - (было 361 — двадцать один тест добавила разведка) +- портал: **391/391, 1244 проверки, ~69 с** — `cd app && DB_DATABASE=liderra_testing_reklama php artisan test --filter=Advertising` + (было 361 — разведка, честность про документ и разбор собственных ошибок) - админский список «ждёт разбора»: **9/9** — `--filter="AdminRobotStuck|AdminAdCampaignCreative"` +- фронт на затронутых наборах: **52/52** — `npx vitest run tests/Frontend/admin-advertising-view.spec.ts tests/Frontend/advertising-campaign-messages.spec.ts tests/Frontend/advertising-campaign-list.spec.ts tests/Frontend/advertising-api.spec.ts` - фронт: **227 файлов, 1671 тест** — `cd app && npx vitest run` 🪤 единственная посторонняя ошибка в выводе — `autopodbor.ts::fetchProposalGroups`, чужая и давняя, к этой работе отношения не имеет. - `npm run type-check` — **6 чужих** ошибок, ни одной новой. Чужие не чинить. -- робот: **75/75** — `cd bots/yandex-creatives && node --test` (было 60) +- робот: **74/74** — `cd bots/yandex-creatives && node --test` (было 60) - мест снятия заморозки денег — **четыре**: `AdvertisingCampaignController`, `SyncCampaignModerationJob`, `PauseCampaignsOnAdStop`, `CampaignImpressionCharger`. Остальные находки `->release(` — замки `Cache::lock`, не деньги. @@ -65,22 +71,24 @@ abb3941e feat реклама за показы: удаление отклонё ## Что теперь работает -Круг «Яндекс → клиент → Яндекс» замкнут в обе стороны, кроме доставки документов: +Круг «Яндекс → клиент → Яндекс» замкнут: 1. Яндекс отклоняет объявление, джоб кладёт пояснение **целиком** в переписку; -2. клиенту письмо и колокольчик, в списке под ярлыком «Отклонено» — первая строка причины; -3. клиент читает переписку в карточке кампании, отвечает и может приложить документ; -4. **клиент жмёт «Исправить»** — отклонённые объявления удаляются из кабинета, кампания +2. **робот идёт в кабинет и приносит настоящую причину** со снимком экрана — без него + портал знал бы только факт отказа; +3. клиенту письмо и колокольчик, в списке под ярлыком «Отклонено» — первая строка причины; +4. клиент читает переписку в карточке кампании, отвечает и может приложить документ; +5. **клиент жмёт «Исправить»** — отклонённые объявления удаляются из кабинета, кампания возвращается в черновик с отметкой «отдана на починку», номера кампании, группы и сегмента Яндекса целы; -5. клиент меняет картинку и настройки привычными экранами; -6. обычная кнопка «Запустить» доводит кампанию до модерации, ничего не заводя в Яндексе +6. клиент меняет картинку и настройки привычными экранами; +7. обычная кнопка «Запустить» доводит кампанию до модерации, ничего не заводя в Яндексе заново; отметка о починке гаснет, замок закрывается сам. -**Чего пока нет:** документ клиента никуда не едет — робот его не носит, и причину -из кабинета робот не читает (кусок 3, заход 4). +**Документ клиента роботом никуда не едет — и не поедет:** такой дороги у Яндекса нет. +Портал говорит об этом клиенту прямо и зовёт владельца письмом. -## Что дальше — заход 4, задачи 13–16 +## Заход 4 — задачи 13–16, все закрыты ### Задача 13 — ✅ ЗАКРЫТА 28.07.2026, вердикт пришёл @@ -118,12 +126,15 @@ abb3941e feat реклама за показы: удаление отклонё `yandex` **слово в слово**, клиенту письмо и колокольчик; 4. робот не понял, что видит — задание сбойное, владельцу письмо, **в ленту клиенту ничего не сочиняем**; -5. в админке `/api/admin/advertising/robot-stuck` — «ждёт разбора»: ВСЕ сбойные задания - робота, не только разведка (сорванная заливка — тоже вставшая кампания); +5. в админке, на странице «Реклама», третьей карточкой — экран **«Ждёт разбора»** + (`/api/admin/advertising/robot-stuck`): ВСЕ сбойные задания робота, не только разведка + (сорванная заливка — тоже вставшая кампания). В подписи прямо сказано, чего там НЕ будет: + обычных отказов модерации, их клиент разбирает сам; 6. рубильник Директа выключен — задания не ставятся и роботу не выдаются. -Новое в базе — **v9.16**, колонка `ad_creative_jobs.yandex_ad_id` + индекс. Грантов -не требует, перезапуска `03_service_bypass_policies.sql` не требует (новых таблиц нет). +Новое в базе — **v9.16** (колонка `ad_creative_jobs.yandex_ad_id` + индекс) и **v9.17** +(право `crm_admin_user` ПИСАТЬ в ленту: INSERT + нумератор). Перезапуска +`03_service_bypass_policies.sql` обе не требуют — новых таблиц нет. 🔴 **Четыре ловушки, пойманные в этой задаче** (все проверены вырезанием): @@ -157,7 +168,20 @@ abb3941e feat реклама за показы: удаление отклонё 🪤 **Урок:** поправка живой разметки обязана доезжать до КОДА в тот же заход. -### Задача 16 — 🔴 УПЁРЛАСЬ ОКОНЧАТЕЛЬНО, решение за владельцем +### ✅ Задача 16 — ЗАКРЫТА 28.07.2026 решением владельца: говорим клиенту правду + +Дороги «робот везёт документ в кабинет» не существует. Вместо неё сделано: + +- приём документа в переписке **остаётся** — файл клиента сохраняется как раньше; +- сразу после приёма в ленту ложится служебная отметка: документ у нас, передать его + Яндексу автоматически нельзя, при необходимости отнесём сами и напишем здесь; +- владельцу уходит письмо `AdDocumentAttachedMail` на `services.monitoring.alert_email` — + иначе «отнесём сами» было бы пустым обещанием, а файл просто лёг бы на диск; +- сам файл письмом НЕ отправляем: это чужие бумаги, в письме только адрес кампании; +- отметка и письмо под `try/catch` — беда с почтой не возвращает клиенту отказ + на успешно принятый документ. + +Ниже — как мы к этому пришли. **Вердикт по второй пробе пришёл 28.07 вечером: окно отказа то же самое.** Объявление № 17787102785 отклонено — «Нет предупреждений: медицина». Разметка совпала @@ -355,17 +379,42 @@ Playwright на **копии** профиля браузера MCP, вход в строк молча. ✅ Грант выдан записью **v9.14**; список «ждёт разбора» сделан 28.07 и читает `ad_creative_jobs`, а не ленту. -## Что осталось незакрытым в заходе 4 +## Что осталось незакрытым -- **Задача 16** — решение за владельцем (см. выше). Кода под неё не написано. -- **Экрана в админке для списка «ждёт разбора» нет** — сделана только ручка - `/api/admin/advertising/robot-stuck`. Экран рисовать отдельно. +- 🔴 **Живьём разведка не гонялась ни разу** — рубильник Директа выключен, боевой прогон + только вместе с владельцем. Разметка §7 снята по натуре на двух отказах, но робот по ней + ещё ни разу не ходил сам. **Это главный незакрытый риск куска 3**, и опыт этого дня + говорит прямо: между «разметка записана» и «программа по ней ходит» уже дважды + обнаруживался разрыв. Первый живой прогон делать при владельце, на пустышке + № 713110757 — там лежат два отклонённых объявления, годных для проверки. +- **Признак удачной загрузки с экрана намеренно не читаем** — подтверждённой метки + «набор создан» у нас нет. Успех определяет портал слепком `creatives.get`. Если однажды + такую метку снимут живьём, это можно упростить; выдумывать её нельзя. - **Экран ленты снимок не показывает картинкой** — файл отдаётся ссылкой через уже существующую ручку `/api/advertising/campaigns/{id}/messages/{messageId}/file`. Клиент снимок скачает, но не увидит прямо в переписке. -- **Живьём разведка не гонялась** — рубильник Директа выключен, боевой прогон только - вместе с владельцем. Разметка §7 снята по натуре на двух отказах, но робот по ней - ещё ни разу не ходил сам. +- **Частичный отказ не чиним** — записано в замысле §5 как следующий кусок, не как забытое. +- **Открытые вопросы владельца** — Д4 (проводка при нехватке денег) и срок хранения чужих + документов. Сам не закрывал. + +## Перед выкатом на боевой + +- [ ] `prod-deploy-validator` → GO +- [ ] 🔴 **перезапустить `db/03_service_bypass_policies.sql`** — в ветке новые RLS-таблицы + `ad_campaign_messages` и `ad_creative_jobs`. Файл сам обходит все таблицы с RLS, + править его не надо — надо **прогнать заново**. Без этого служебные роли увидят + ноль строк **молча**, при зелёном журнале +- [ ] записи схемы **v9.10 – v9.17** едут вместе; v9.13, v9.14 и v9.15 — обязательно вместе. + 🔴 **v9.17 обязательна вместе с разведкой**: без неё доклад робота падает на правах, + задание застревает «в работе», и очередь встаёт колом для ВСЕХ клиентов +- [ ] после выката проверить руками, что `crm_admin_user` может писать в `in_app_notifications` + (колокольчик по докладу разведки). Право должно быть с общей раздачи `db/02_grants.sql`, + но она разовая — если нет, колокольчик молча не появится, письмо при этом уйдёт +- [ ] проверить, что мест снятия заморозки денег по-прежнему четыре +- [ ] `YANDEX_DIRECT_ENABLED` держать выключенным до отдельного решения владельца +- [ ] задать в `.env` `MONITORING_ALERT_EMAIL` — на него уходит письмо о приложенном + документе (умолчание `ops@liderra.ru`) +- [ ] выкат — только с явного «go» владельца ## Красные линии, которые действуют всегда diff --git a/docs/superpowers/plans/2026-07-28-yandex-otkazy-okno-peredachi.md b/docs/superpowers/plans/2026-07-28-yandex-otkazy-okno-peredachi.md index 0ea7644f..0786d521 100644 --- a/docs/superpowers/plans/2026-07-28-yandex-otkazy-okno-peredachi.md +++ b/docs/superpowers/plans/2026-07-28-yandex-otkazy-okno-peredachi.md @@ -2093,7 +2093,26 @@ Schema::table('ad_creative_jobs', function (Blueprint $table) { --- -## Задача 16: доставка документа — 🔴 ЗАБЛОКИРОВАНА НАХОДКОЙ 28.07.2026 +## Задача 16: доставка документа — ✅ ЗАКРЫТА ПО ФАКТУ 28.07.2026, дороги нет + +> 🔴 **Вторая проба дала ответ: поля для документа нет и у лицензируемой тематики.** +> Объявление № 17787102785 («Стоматология») отклонено — «Нет предупреждений: медицина», +> окно отказа совпало с первым до метки, список полей пуст. Обоим отказам лечение одно — +> **переделать картинку**, документ не помог бы ни в одном случае. +> +> **Решение владельца 28.07.2026: закрыть задачу и сказать клиенту правду.** Что сделано +> вместо доставки роботом: +> +> - [x] приём документа в переписке **остаётся** — файл клиента сохраняется как раньше; +> - [x] сразу после приёма в ленту ложится служебная отметка: документ у нас, передать +> его Яндексу автоматически нельзя, при необходимости отнесём сами и напишем здесь; +> - [x] владельцу уходит письмо `AdDocumentAttachedMail` на адрес +> `services.monitoring.alert_email` — иначе «отнесём сами» было бы пустым обещанием, +> а файл просто лёг бы на диск; +> - [x] отметка и письмо под `try/catch`: беда с почтой не возвращает клиенту отказ +> на успешно принятый документ. +> +> Ниже — прежний текст задачи, оставлен для истории. > 🔴🔴 **Задача 13 показала, что везти документ роботом НЕКУДА.** В окне отказа Яндекса > нет ни одного поля для файла (проверено программно, список полей пуст), а кнопки diff --git a/docs/superpowers/specs/2026-07-28-yandex-otkazy-okno-peredachi-design.md b/docs/superpowers/specs/2026-07-28-yandex-otkazy-okno-peredachi-design.md index 5dbb8d40..8e59250f 100644 --- a/docs/superpowers/specs/2026-07-28-yandex-otkazy-okno-peredachi-design.md +++ b/docs/superpowers/specs/2026-07-28-yandex-otkazy-okno-peredachi-design.md @@ -284,11 +284,14 @@ PREACCEPTED | REJECTED | UNKNOWN` — и одна текстовая строк - [x] Доклад разведки попадает в переписку вместе со снимком экрана - [x] Робот не понял, что видит, — задание сбойное, письмо владельцу, клиенту ничего не сочиняем -- [ ] ~~Документ клиента доезжает до кабинета и уходит на модерацию~~ 🔴 **ОТМЕНЯЕТСЯ +- [x] ~~Документ клиента доезжает до кабинета и уходит на модерацию~~ 🔴 **ОТМЕНЕНО ПО ФАКТУ: такой дороги в кабинете Яндекса нет.** Проверено двумя нарочными отказами (обычная и лицензируемая тематика) — в окне отказа ноль полей для файла, документы Яндекс принимает только снаружи: чат поддержки или `forms.yandex.ru`. - Решение, что делать вместо этого, — за владельцем, см. `cabinet-flow.md` §7.5–7.6 + См. `cabinet-flow.md` §7.5–7.6. + **Заменено решением владельца 28.07.2026:** документ принимаем как прежде, но портал + сразу говорит клиенту правду («передать автоматически нельзя, отнесём сами»), + а владельцу уходит письмо — иначе обещание было бы пустым - [x] Рубильник Директа выключен — ни одного задания и ни одного обращения к Яндексу ### Общее From 08640c020eac1e1e488847a9f5c1f20c3a44ed36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Tue, 28 Jul 2026 20:48:47 +0300 Subject: [PATCH 134/213] =?UTF-8?q?fix=20=D1=80=D0=B5=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B0=20=D0=B7=D0=B0=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7?= =?UTF-8?q?=D1=8B:=20=D0=B6=D0=B8=D0=B2=D0=BE=D0=B9=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=D0=BD=20=D1=80=D0=B0=D0=B7=D0=B2=D0=B5=D0=B4=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=B2=D1=81=D0=BA=D1=80=D1=8B=D0=BB=20=D0=B4=D0=B2?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=BE=D0=BB=D0=BE=D0=BC=D0=BA=D0=B8=20=E2=80=94?= =?UTF-8?q?=20=D1=80=D0=BE=D0=B1=D0=BE=D1=82=20=D1=81=D1=87=D0=B8=D1=82?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20=D1=82?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE,=20=D1=87=D1=82=D0=BE=D0=B1=D1=8B=20=D0=B6?= =?UTF-8?q?=D0=B4=D0=B0=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Разведку впервые прогнали живьём, с разрешения владельца: вызвали саму функцию робота против боевого кабинета на двух отклонённых объявлениях кампании-пустышки. Живую кампанию не трогали, робот только читал. Прогон окупился сразу — вскрылись две поломки, которых не видел ни один из 74 зелёных тестов. Первая. Робот не нашёл объявление, которое в кабинете было: провал за три секунды, «объявления в списке нет». Замерили — список рисуется две секунды, а робот считал ячейки сразу после человекоподобной паузы в 800 миллисекунд. Счёт не ждёт, он отвечает про «прямо сейчас». На бою это значило бы, что КАЖДЫЙ отказ уезжает в «ждёт разбора», а клиент причину не узнаёт никогда. Вторая. После первой починки робот стал находить объявление и приносить 29 знаков — один заголовок «Модератор отклонил объявление», без причины. Та же ошибка: строка причины появляется позже окна, робот считал её и получал ноль, раскрывать было нечего. Клиенту уехало бы сообщение от Яндекса, в котором нет ни слова о том, что чинить. Текст окна нарастает по частям: 29 знаков, потом 82, потом 785. Окно не отдаёт ошибку — честно показывает то, что успело нарисоваться. Поэтому промах молчаливый: робот считал бы, что справился. Починка одна на обе: ждать, а не считать. Раскрытие строки подтверждаем появлением подробности, а не паузой — пауза это надежда, элемент это факт. Не дождались подробности, остаёмся с короткой причиной: она честная и клиенту полезна, промолчать было бы хуже. Оба сторожа написаны ДО починки и падали с теми самыми живыми ошибками. Хвост доклада: по решению владельца срезаются подписи кнопок кабинета «Написать в чат» и «Написать письмо» — у клиента этих кнопок нет, а выглядят они приглашением написать Яндексу. Режем только хвост и только точное совпадение строки: те же слова внутри пояснения это слова Яндекса, их не трогаем. Живая проверка обрезки вскрыла третью ловушку: «Написать письмо» срезалось, а «Написать в чат» оставалось. Яндекс ставит между короткими словами неразрывный пробел. Глазу он неотличим от обычного, а сравнению это совсем другой символ. Правило для этого кабинета: сравнивать текст только по человеческому виду строки, а элементы ждать, а не считать. Замеры записаны в разметку кабинета, раздел 7.8. Итог живой проверки с продовой паузой: причины приезжают целиком, кнопок в них нет — 760 знаков по финансовым услугам и 589 по медицине, шесть-семь секунд на объявление. Снимок берётся только с окна, логин и остаток счёта в кадр не попадают. Робот 80 из 80. Портал не тронут. На боевой не выкатывалось, рубильник Директа выключен. Co-Authored-By: Claude Opus 5 --- bots/yandex-creatives/docs/cabinet-flow.md | 53 ++++++++ bots/yandex-creatives/src/cabinet.js | 81 ++++++++++- bots/yandex-creatives/test/inspect.test.js | 127 +++++++++++++++++- .../2026-07-27-PROGRESS-pochinka-v12.md | 96 +++++++++++++ .../2026-07-28-STATE-okno-peredachi.md | 76 +++++++++-- 5 files changed, 413 insertions(+), 20 deletions(-) diff --git a/bots/yandex-creatives/docs/cabinet-flow.md b/bots/yandex-creatives/docs/cabinet-flow.md index 1751795f..a94785a6 100644 --- a/bots/yandex-creatives/docs/cabinet-flow.md +++ b/bots/yandex-creatives/docs/cabinet-flow.md @@ -454,3 +454,56 @@ https://direct.yandex.ru/dna/banners-edit?ulogin=<логин>&campaigns-ids=<н 🪤 Урок тот же, что с экраном кабинета: **источник, который считался говорящим, на живых данных оказался немым.** Поймать это тестами было нельзя — тесты подставляют выдуманную причину, и в них всё выглядит прекрасно. + +### 7.8. 🔴 Живой прогон робота 28.07.2026 — ЗАМЕРЫ, а не догадки + +Разведку впервые прогнали живьём: вызвали **саму функцию робота** `readRejection()` против +боевого кабинета на обоих отклонённых объявлениях пустышки. Прогон вскрыл **две поломки**, +которых не видел ни один из 74 зелёных тестов. Обе — один и тот же класс: **робот СЧИТАЛ +элементы вместо того, чтобы их ЖДАТЬ**. + +Замеры (кабинет `sasha261185`, обычный рабочий канал): + +| Что | Сколько ждать | +|---|---| +| Список объявлений: ячейка `Grid.Cell-<номер>_aggregated-status-info` | появляется на **2-й секунде** после загрузки страницы | +| Окно `BannerStatusCell.Popup` после клика | открывается быстро, но **с одним заголовком** | +| Строка `RejectRow` внутри окна | появляется **позже** окна, в пределах секунды-двух | +| `MiniGridRow` (подробное пояснение) | только **после клика** по `RejectRow` | +| Весь путь разведки целиком | **6–7 секунд** на объявление | + +🪤 **Текст окна НАРАСТАЕТ по частям** — это главное, что надо знать. Замеры одного окна: + +- сразу после открытия — **29 знаков**: один заголовок «Модератор отклонил объявление»; +- когда дорисовалась строка причины — **82 знака**: плюс краткая формулировка; +- после раскрытия строки — **785 знаков**: полное пояснение модератора. + +Читать окно раньше времени не даёт ошибки: оно честно отдаёт то, что успело нарисоваться. +Именно поэтому промах здесь **молчаливый** — робот доложил бы заголовок и считал бы, что +справился. + +🔴 **Правило, выведенное из прогона: в этом кабинете `count()` применять нельзя.** +`count()` отвечает про «прямо сейчас» и не ждёт. Годится только `waitFor` с запасом. +Обе поломки были ровно этим; починка — ожидание вместо счёта, сторожа в `test/inspect.test.js`. + +Проверено после починки: оба объявления отдали причину целиком — 792 знака (финансовые +услуги) и 621 знак (медицина). Снимок берётся **только с окна**, логин и остаток счёта +в кадр не попадают — проверено глазами. + +🪤 **Хвост доклада.** В текст окна входят подписи кнопок «Написать в чат» и «Написать +письмо». Это кнопки НАШЕГО кабинета поставщика, клиенту они бесполезны и выглядят +приглашением написать Яндексу. Решением владельца 28.07.2026 обе строки срезаются +с конца доклада; слова Яндекса про причину не трогаются. + +🪤🪤 **Яндекс пишет через НЕРАЗРЫВНЫЙ пробел (код 160).** Поймано на обрезке хвоста: +«Написать письмо» срезалось, а «Написать в чат» оставалось — между «в» и «чат» стоит +не тот пробел, что кажется глазу. Видно и в соседней строке: «Показы не·идут». +🔑 **Любое сравнение текста из этого кабинета делать по «человеческому» виду строки** +(все пробельные подряд → один обычный), иначе сравнение врёт на ровном месте. + +⚠️ Кнопки `AggregatedStatusAction` появляются в окне **только после раскрытия** строки +причины: до раскрытия их список пуст. Это ещё одно подтверждение, что окно наливается +по частям. + +Строк причины в обоих отказах — по одной. Отказ **с несколькими** причинами живьём +не встречался: раскрывается только первая строка, поведение остальных неизвестно. diff --git a/bots/yandex-creatives/src/cabinet.js b/bots/yandex-creatives/src/cabinet.js index ae3ad6ad..b9f61729 100644 --- a/bots/yandex-creatives/src/cabinet.js +++ b/bots/yandex-creatives/src/cabinet.js @@ -144,6 +144,46 @@ export async function uploadCreatives(page, config, files, options = {}) { const STATUS_CONTENT = '[data-testid="AggregatedStatusContent"]'; const POPUP = '[data-testid="BannerStatusCell.Popup"]'; const REJECT_ROW = '[data-testid="RejectRow"]'; +// Подробное пояснение модератора. Живёт на слой глубже и появляется ТОЛЬКО после раскрытия +// строки причины — по нему и понимаем, что раскрытие сработало. +const MINI_GRID_ROW = '[data-testid="MiniGridRow"]'; + +/** + * Подписи кнопок, которые попадают в текст окна вместе с причиной. Сняты живьём + * 28.07.2026: обе ведут наружу из НАШЕГО кабинета поставщика, у клиента их нет и быть + * не может. В докладе они выглядят приглашением написать Яндексу — то есть обманывают. + */ +const KNOPKI_KABINETA = ['Написать в чат', 'Написать письмо']; + +/** + * Срезает с КОНЦА доклада подписи кнопок кабинета. Решение владельца 28.07.2026. + * + * 🔴 Только хвост и только точное совпадение строки: те же слова внутри пояснения — + * это слова Яндекса, и трогать их нельзя. Причина едет клиенту слово в слово. + * + * 🪤 Сравниваем по «человеческому» виду строки: Яндекс ставит между короткими словами + * НЕРАЗРЫВНЫЙ пробел (код 160). Глазу он неотличим от обычного, а точному сравнению — + * совсем другой символ. Поймано живым прогоном: «Написать письмо» срезалось, а + * «Написать в чат» оставалось именно из-за него. + * + * 🪤 Переименует Яндекс кнопки — две лишние строки вернутся в доклад. Это некрасиво, + * но безопасно: причина не пострадает. Гоняться за подписями не стоит. + */ +export function bezKnopokKabineta(report) { + const почеловечески = (s) => s.replace(/\s+/g, ' ').trim(); + const кнопки = KNOPKI_KABINETA.map(почеловечески); + const строки = report.split('\n'); + + while (строки.length > 0) { + const последняя = почеловечески(строки[строки.length - 1]); + if (последняя !== '' && !кнопки.includes(последняя)) { + break; + } + строки.pop(); + } + + return строки.join('\n'); +} /** * Адрес СПИСКА объявлений кампании. @@ -173,7 +213,7 @@ export function rejectionUrl(config, job) { * по выдуманной клиент пойдёт переделывать не то. */ export async function readRejection(page, config, job, screenshotPath, options = {}) { - const { popupTimeoutMs = 20000 } = options; + const { popupTimeoutMs = 20000, cellTimeoutMs = 30000, rowTimeoutMs = 20000 } = options; const adId = String(job.yandex_ad_id); // Ячейка статуса ИМЕННО нашего объявления. 🪤 Брать «первую строку с отказом» нельзя: @@ -185,8 +225,18 @@ export async function readRejection(page, config, job, screenshotPath, options = await page.goto(rejectionUrl(config, job), { waitUntil: 'domcontentloaded' }); await humanPause(config); + // 🔴 Ячейку надо ЖДАТЬ, а не считать. Проверено живым прогоном 28.07.2026: кабинет рисует + // список примерно за 2 секунды, а `count()` не ждёт — отвечает тем, что на экране прямо + // сейчас. Робот считал сразу после человекоподобной паузы (по умолчанию 800 мс) и получал + // честный ноль: «объявления нет». На бою это значило бы, что КАЖДЫЙ отказ уезжает + // в «ждёт разбора», а клиент причину не узнаёт никогда. + // + // Отличить «ещё не отрисовалось» от «объявления правда нет» умеет только ожидание — + // ровно так же, как ждут все остальные шаги этого файла. const cell = page.locator(cellSelector); - if ((await cell.count()) === 0) { + try { + await cell.first().waitFor({ timeout: cellTimeoutMs }); + } catch { throw new Error(`Объявления ${adId} в списке кабинета нет — причину прочитать не у чего`); } @@ -201,13 +251,32 @@ export async function readRejection(page, config, job, screenshotPath, options = // 🔑 Строку причины надо РАСКРЫТЬ: до этого виден только короткий заголовок // («Нет предупреждения: финансовые услуги»), а всё пояснение спрятано на слой глубже. + // + // 🔴 Строку тоже ЖДЁМ. Живой прогон 28.07.2026: окно открывается РАНЬШЕ, чем в нём + // появляется строка причины. Робот считал строки сразу после паузы, получал ноль, + // раскрывать было нечего — и уносил клиенту один заголовок «Модератор отклонил + // объявление»: 29 знаков вместо 785. Клиент узнал бы ровно то, что и так знает. const row = page.locator(REJECT_ROW); - if ((await row.count()) > 0) { - await row.first().click(); - await humanPause(config); + try { + await row.first().waitFor({ timeout: rowTimeoutMs }); + } catch { + throw new Error(`В окне по объявлению ${adId} нет строки причины — докладывать нечего`); } - const report = (await page.locator(POPUP).first().innerText()).trim(); + await row.first().click(); + + // Раскрытие подтверждаем ПОЯВЛЕНИЕМ подробности, а не паузой: пауза — это надежда, + // а `MiniGridRow` — факт. Не дождались — не беда: короткая формулировка уже в окне + // и клиенту полезна. Промолчать из-за недостающей подробности хуже, чем сказать коротко. + try { + await page.locator(MINI_GRID_ROW).first().waitFor({ timeout: rowTimeoutMs }); + } catch { + // остаёмся с короткой причиной — она честная, просто без пояснения + } + + await humanPause(config); + + const report = bezKnopokKabineta((await page.locator(POPUP).first().innerText()).trim()); if (report === '') { throw new Error(`Окно причины по объявлению ${adId} пустое — докладывать нечего`); } diff --git a/bots/yandex-creatives/test/inspect.test.js b/bots/yandex-creatives/test/inspect.test.js index b5d7d7e9..5824e44f 100644 --- a/bots/yandex-creatives/test/inspect.test.js +++ b/bots/yandex-creatives/test/inspect.test.js @@ -1,6 +1,6 @@ import test from 'node:test'; import assert from 'node:assert/strict'; -import { rejectionUrl, readRejection } from '../src/cabinet.js'; +import { rejectionUrl, readRejection, bezKnopokKabineta } from '../src/cabinet.js'; const config = { cabinetUrl: 'https://direct.yandex.ru', @@ -18,8 +18,22 @@ const POPUP = '[data-testid="BannerStatusCell.Popup"]'; * Поддельная страница списка объявлений. Помнит всё, что робот делал, и умеет * притворяться, что ячейки объявления нет или что окно причины не открылось. */ -function fakePage({ cellExists = true, popupOpens = true, rowExists = true, text = '' } = {}) { +/** + * Поддельное окно повторяет главную повадку живого: текст в нём НАРАСТАЕТ. Пока строка + * причины не раскрыта, видно один заголовок; подробность появляется только после клика. + * Снято живьём 28.07.2026: 29 знаков до раскрытия против 785 после. + */ +function fakePage({ + cellExists = true, + cellLate = false, + popupOpens = true, + rowExists = true, + rowLate = false, + header = 'Модератор отклонил объявление', + text = '', +} = {}) { const actions = []; + let раскрыто = false; return { actions, @@ -27,19 +41,28 @@ function fakePage({ cellExists = true, popupOpens = true, rowExists = true, text visited: () => actions.filter((a) => a.type === 'goto').map((a) => a.url), locator(selector) { const self = { + // 🪤 `count()` у Playwright НЕ ждёт — отвечает тем, что есть на экране прямо сейчас. + // Живой кабинет рисует список ~2 с, поэтому «поздняя» ячейка отвечает нулём. async count() { - if (selector === CELL) return cellExists ? 1 : 0; - if (selector.includes('RejectRow')) return rowExists ? 1 : 0; + if (selector === CELL) return cellExists && !cellLate ? 1 : 0; + if (selector.includes('RejectRow')) return rowExists && !rowLate ? 1 : 0; + if (selector.includes('MiniGridRow')) return раскрыто ? 1 : 0; return 1; }, first: () => self, locator: (inner) => fakePageChild(inner), - async click() { actions.push({ type: 'click', selector }); }, + async click() { + actions.push({ type: 'click', selector }); + if (selector.includes('RejectRow')) раскрыто = true; + }, async waitFor() { actions.push({ type: 'waitFor', selector }); + if (selector === CELL && !cellExists) throw new Error('ячейка так и не появилась'); if (selector === POPUP && !popupOpens) throw new Error('окно не открылось'); + if (selector.includes('RejectRow') && !rowExists) throw new Error('строки причины нет'); + if (selector.includes('MiniGridRow') && !раскрыто) throw new Error('не раскрылось'); }, - async innerText() { return text; }, + async innerText() { return раскрыто ? text : header; }, async screenshot(opts) { actions.push({ type: 'shot', selector, path: opts?.path }); }, }; @@ -105,6 +128,98 @@ test('своего объявления в списке нет — честно ); }); +/** + * 🔴 Найдено ЖИВЫМ прогоном 28.07.2026, тесты этого не ловили. + * + * Кабинет рисует список объявлений примерно за 2 секунды, а робот считал ячейки сразу + * после человекоподобной паузы (по умолчанию 800 мс). `count()` не ждёт — он отвечает + * «ноль» и робот докладывал «объявления в кабинете нет». На бою это значило бы: КАЖДЫЙ + * отказ уезжает в «ждёт разбора», а клиент причину не узнаёт никогда. + * + * Отличать «ещё не отрисовалось» от «объявления правда нет» умеет только ожидание. + */ +test('ячейка появляется не сразу — робот ЖДЁТ её, а не сдаётся мгновенно', async () => { + const page = fakePage({ cellLate: true, text: 'Нет предупреждений: медицина' }); + + const said = await readRejection(page, config, JOB, '/tmp/shot.png', FAST); + + assert.match(said.report, /Нет предупреждений: медицина/); +}); + +/** + * 🔴 Вторая поломка того же живого прогона 28.07.2026 — и ровно та же ошибка, что с ячейкой. + * + * Окно открывается раньше, чем в нём появляется строка причины. Робот считал строки + * через `count()` сразу после паузы, получал ноль, раскрывать было нечего — и уносил + * клиенту ОДИН ЗАГОЛОВОК «Модератор отклонил объявление». Живьём это 29 знаков вместо 785. + * Клиент получил бы сообщение от Яндекса, в котором нет ни слова о том, что чинить. + */ +test('строка причины появляется не сразу — робот ЖДЁТ её и раскрывает', async () => { + const ПРИЧИНА = 'Модератор отклонил объявление Нет предупреждения: финансовые услуги ' + + 'Объявление о финансовых услугах должно содержать наименование юридического лица'; + const page = fakePage({ rowLate: true, text: ПРИЧИНА }); + + const said = await readRejection(page, config, JOB, '/tmp/shot.png', FAST); + + assert.match(said.report, /должно содержать наименование юридического лица/); + assert.ok(page.clicked().some((s) => s.includes('RejectRow')), 'строку причины не раскрыли'); +}); + +/** + * Заголовок без причины — это не доклад, а пустота: клиент и так знает, что его отклонили. + * Лучше честно сдаться и позвать человека через «ждёт разбора», чем прислать бесполезное. + */ +test('строки причины в окне нет вовсе — сдаётся, один заголовок клиенту не шлёт', async () => { + const page = fakePage({ rowExists: false, text: 'сюда робот дойти не должен' }); + + await assert.rejects( + () => readRejection(page, config, JOB, '/tmp/shot.png', FAST), + /причин/i, + ); +}); + +/** + * Хвост доклада. В текст окна входят подписи кнопок «Написать в чат» и «Написать письмо» — + * это кнопки НАШЕГО кабинета поставщика. У клиента их нет и быть не может, а выглядят они + * как приглашение написать Яндексу. Решение владельца 28.07.2026: две строки срезать, + * слова Яндекса про причину не трогать. + */ +test('срезает подписи кнопок кабинета, слова Яндекса не трогает', () => { + const доклад = [ + 'Модератор отклонил объявление', + 'Нет предупреждений: медицина', + 'Площадь предупреждения — не менее 5% площади объявления.', + '', + 'Написать в чат', + 'Написать письмо', + ].join('\n'); + + const итог = bezKnopokKabineta(доклад); + + assert.match(итог, /Нет предупреждений: медицина/); + assert.match(итог, /не менее 5%/); + assert.doesNotMatch(итог, /Написать в чат/); + assert.doesNotMatch(итог, /Написать письмо/); +}); + +/** + * 🪤 Живой прогон 28.07.2026: «Написать письмо» срезалось, а «Написать в чат» оставалось. + * Яндекс ставит между короткими словами НЕРАЗРЫВНЫЙ пробел — это другой символ, код 160, + * и точное сравнение его не узнаёт. Видно по соседней строке: «не·идут» тоже через него. + */ +test('узнаёт кнопку, написанную через неразрывный пробел', () => { + const доклад = 'Нет предупреждений: медицина\nНаписать в чат\nНаписать письмо'; + + assert.equal(bezKnopokKabineta(доклад), 'Нет предупреждений: медицина'); +}); + +/** Режем только ХВОСТ: те же слова в середине пояснения — это слова Яндекса, они остаются. */ +test('те же слова в середине пояснения не трогает', () => { + const доклад = 'Написать письмо в поддержку можно из кабинета.\nНет предупреждений: медицина'; + + assert.equal(bezKnopokKabineta(доклад), доклад); +}); + test('окно причины не открылось — сдаётся, ничего не выдумывает', async () => { const page = fakePage({ popupOpens: false }); diff --git a/docs/superpowers/2026-07-27-PROGRESS-pochinka-v12.md b/docs/superpowers/2026-07-27-PROGRESS-pochinka-v12.md index 1255b16b..69984288 100644 --- a/docs/superpowers/2026-07-27-PROGRESS-pochinka-v12.md +++ b/docs/superpowers/2026-07-27-PROGRESS-pochinka-v12.md @@ -1433,3 +1433,99 @@ for sequence». Поэтому сторож поставлен не на рез - фронт на затронутых наборах: **52/52** - робот: **74/74** - мест снятия заморозки денег — **четыре** + +--- + +## 🟢 Живой прогон разведки: две поломки, невидимые для 74 зелёных тестов (28.07.2026) + +Владелец разрешил прогнать разведку живьём. Гоняли **саму функцию робота** +`readRejection()` против боевого кабинета, на обоих отклонённых объявлениях пустышки +№ 713110757. Живую кампанию № 713051718 не трогали, робот только читал. + +### Поломка 1 — робот не нашёл объявление, которое там было + +Первый запуск: **оба раза провал за 3 секунды**, «объявления в списке кабинета нет». +Объявления при этом на месте. + +Замерил, а не гадал: считал ячейки раз в секунду. Список рисуется за **2 секунды**, +а робот считал сразу после человекоподобной паузы — по умолчанию **800 мс**. +`count()` не ждёт: он отвечает про «прямо сейчас». + +На бою это значило бы, что **каждый** отказ уезжает в «ждёт разбора», а клиент причину +не узнаёт никогда. Разведка не работала бы вообще — при зелёном журнале. + +### Поломка 2 — доклад из одного заголовка + +После первой починки робот стал находить объявление и приносить **29 знаков**: +«Модератор отклонил объявление». Причины нет. + +Причина та же самая: строка `RejectRow` появляется ПОЗЖЕ окна, робот считал её +через `count()`, получал ноль и раскрывать не пытался. Клиент получил бы письмо +от Яндекса, в котором нет ни слова о том, что чинить. + +🪤 **Текст окна нарастает по частям: 29 знаков → 82 → 785.** Окно не отдаёт ошибку — +оно честно показывает то, что успело нарисоваться. Поэтому промах молчаливый: +робот считал бы, что справился. + +### Починка и проверка + +Одна на обе: **ждать, а не считать**. Раскрытие строки подтверждаем появлением +подробности `MiniGridRow`, а не паузой — пауза это надежда, элемент это факт. +Не дождались подробности — остаёмся с короткой причиной: она честная и клиенту +полезна, промолчать было бы хуже. + +Оба сторожа написаны ДО починки и падали с теми самыми живыми ошибками. Робот **77/77**. + +Перепроверено живым кабинетом с продовой паузой 800 мс: причины приехали целиком — +**792 знака** (финансовые услуги) и **621** (медицина), 6–7 секунд на объявление. +Снимок берётся только с окна: логин и остаток счёта в кадр не попадают. + +Замеры записаны в разметку — `bots/yandex-creatives/docs/cabinet-flow.md` §7.8. + +### Что из этого следует + +🔴 **В этом кабинете `count()` применять нельзя вообще** — только `waitFor` с запасом. +Обе поломки дня ровно это. + +🔑 Разрыв «разметка записана — программа по ней ходит» обнаружился **третий раз +за два дня**, и снова его не увидел ни один зелёный тест. Живой прогон нашёл +за десять минут то, чего 74 теста не видели вовсе. Никакое число зелёных тестов +не заменяет одного живого запуска. + +### Осталось открытым + +- Отказ **с несколькими** причинами живьём не встречался: раскрывается только первая + строка. Чинить вслепую нельзя — неизвестно, не сворачивает ли раскрытие второй + строки первую. +- В хвосте доклада клиенту едут подписи кнопок «Написать в чат» и «Написать письмо» — + это кнопки нашего кабинета поставщика, клиенту бесполезны. Обрезать или оставить — + решать владельцу. + +### Хвост доклада срезан — и вскрыл третью ловушку + +Владелец решил: подписи кнопок «Написать в чат» и «Написать письмо» клиенту не показывать. +Это кнопки нашего кабинета поставщика, у клиента их нет, а выглядят они приглашением +написать Яндексу. + +Срезаем только ХВОСТ и только точное совпадение строки: те же слова внутри пояснения — +слова Яндекса, их не трогаем. + +🪤🪤 **Первая же живая проверка показала: «Написать письмо» срезалось, а «Написать в чат» +оставалось.** Причина — Яндекс ставит между короткими словами **неразрывный пробел** +(код 160). Глазу он неотличим от обычного, а точному сравнению — совсем другой символ. +Видно и в соседней строке кабинета: «Показы не·идут». + +🔑 **Правило: любое сравнение текста из этого кабинета делать по «человеческому» виду +строки** — все пробельные подряд считать одним обычным. Иначе сравнение врёт на ровном +месте и молча. + +Попутно замечено: кнопки `AggregatedStatusAction` появляются в окне только ПОСЛЕ раскрытия +строки причины — ещё одно подтверждение, что окно наливается по частям. + +Робот **80/80**. Живьём проверено на обоих объявлениях: причины целы, кнопок нет — +760 знаков по финансовым услугам и 589 по медицине. + +🪤 Грабля дня из своих: правил снимок состояния скриптом на Python — он открыл файл +на запись и упал на эмодзи, оставив НОЛЬ байт. Спасло то, что файл был заранее отобран +в индекс git. Для правки текстовых файлов с эмодзи скрипты не нужны, есть обычный +редактор. diff --git a/docs/superpowers/2026-07-28-STATE-okno-peredachi.md b/docs/superpowers/2026-07-28-STATE-okno-peredachi.md index 69e6db34..0fa189e4 100644 --- a/docs/superpowers/2026-07-28-STATE-okno-peredachi.md +++ b/docs/superpowers/2026-07-28-STATE-okno-peredachi.md @@ -3,7 +3,13 @@ Файл пишется в конце каждого захода. Читать его **первым делом** после компакта: всё, что нужно следующей сессии, лежит здесь, а не в переписке. -Обновлено: 28.07.2026, ночь — **заход 4 закрыт целиком: задачи 13, 14, 15 и 16**. Разведка роботом +🟢 **Обновлено: 28.07.2026, заход 6 — РАЗВЕДКА ПРОГНАНА ЖИВЬЁМ, с разрешения владельца.** +Прогон вскрыл **две поломки**, невидимые для 74 зелёных тестов, обе починены и перепроверены +живым кабинетом. Робот приносит причину целиком: 792 знака по финансовым услугам, 621 — +по медицине. Замеры — `cabinet-flow.md` §7.8, разбор — ниже раздел «Живой прогон разведки». +Робот **80/80**. На боевой не выкатывалось, рубильник Директа выключен. + +Прежняя запись: 28.07.2026, ночь — **заход 4 закрыт целиком: задачи 13, 14, 15 и 16**. Разведка роботом написана целиком: портал ставит задание на отказ, робот читает экран кабинета, доклад ложится клиенту в ленту со снимком. 🔴 **Задача 16 закрыта по факту: везти документ роботом некуда** — второй вердикт это подтвердил. Владелец выбрал говорить клиенту правду, сделано; @@ -61,7 +67,8 @@ abb3941e feat реклама за показы: удаление отклонё 🪤 единственная посторонняя ошибка в выводе — `autopodbor.ts::fetchProposalGroups`, чужая и давняя, к этой работе отношения не имеет. - `npm run type-check` — **6 чужих** ошибок, ни одной новой. Чужие не чинить. -- робот: **74/74** — `cd bots/yandex-creatives && node --test` (было 60) +- робот: **80/80** — `cd bots/yandex-creatives && node --test` (было 74; +6 сторожей + по итогам живого прогона разведки) - мест снятия заморозки денег — **четыре**: `AdvertisingCampaignController`, `SyncCampaignModerationJob`, `PauseCampaignsOnAdStop`, `CampaignImpressionCharger`. Остальные находки `->release(` — замки `Cache::lock`, не деньги. @@ -379,14 +386,67 @@ Playwright на **копии** профиля браузера MCP, вход в строк молча. ✅ Грант выдан записью **v9.14**; список «ждёт разбора» сделан 28.07 и читает `ad_creative_jobs`, а не ленту. +## Живой прогон разведки — 28.07.2026, заход 6 + +Владелец разрешил. Прогнали **саму функцию робота** `readRejection()` против боевого +кабинета на обоих отклонённых объявлениях пустышки № 713110757. Живую кампанию +№ 713051718 не трогали, робот только читал. + +**Результат первого запуска: робот не справился ОБА раза, за 3 секунды.** +«Объявления в списке кабинета нет». При этом объявления там были — оба. + +🔑 **Разгадку дал замер, а не догадка.** Считали ячейки раз в секунду: список рисуется +за **2 секунды**, а робот считал их сразу после человекоподобной паузы (по умолчанию +**800 мс**). `count()` у Playwright **не ждёт** — отвечает про «прямо сейчас». +На бою это значило бы: **каждый отказ уезжает в «ждёт разбора», клиент причину +не узнаёт никогда**. + +**Вторая поломка вылезла сразу за первой.** Робот стал находить объявление, но принёс +**29 знаков** — один заголовок «Модератор отклонил объявление», без причины. Причина +та же: строка `RejectRow` появляется ПОЗЖЕ окна, робот считал её через `count()`, +получал ноль, раскрывать было нечего. Клиент получил бы сообщение от Яндекса, +в котором нет ни слова о том, что чинить, — ровно та «тихая пустота», ради которой +весь кусок и делался. + +🪤 **Текст окна нарастает по частям:** 29 знаков → 82 → 785. Окно не отдаёт ошибку, +оно честно показывает то, что успело нарисоваться. Поэтому промах **молчаливый**. + +**Починка одна на обе:** ждать (`waitFor`), а не считать (`count`). Раскрытие строки +подтверждаем появлением подробности `MiniGridRow`, а не паузой — пауза это надежда, +а элемент это факт. Не дождались подробности — не беда: короткая причина уже в окне +и клиенту полезна, промолчать было бы хуже. + +**Проверено вырезанием:** оба сторожа написаны ДО починки и падали с теми самыми +живыми ошибками. Робот **80/80**. + +**Перепроверено живым кабинетом с продовой паузой 800 мс:** обе причины приехали +целиком — 792 знака (финансовые услуги) и 621 (медицина), путь занимает 6–7 секунд +на объявление. Снимок берётся только с окна: логин и остаток счёта в кадр не попадают, +смотрели глазами. + +🔴 **Правило для этого кабинета: `count()` здесь применять нельзя вообще.** Только +`waitFor` с запасом. Обе поломки дня — ровно это. + +🔑 **Главный вывод захода.** Разрыв «разметка записана — программа по ней ходит» +обнаружился **в третий раз за два дня**, и снова его не увидел ни один зелёный тест. +Живой прогон нашёл за десять минут то, чего 74 теста не видели вовсе. + ## Что осталось незакрытым -- 🔴 **Живьём разведка не гонялась ни разу** — рубильник Директа выключен, боевой прогон - только вместе с владельцем. Разметка §7 снята по натуре на двух отказах, но робот по ней - ещё ни разу не ходил сам. **Это главный незакрытый риск куска 3**, и опыт этого дня - говорит прямо: между «разметка записана» и «программа по ней ходит» уже дважды - обнаруживался разрыв. Первый живой прогон делать при владельце, на пустышке - № 713110757 — там лежат два отклонённых объявления, годных для проверки. +- ✅ **Разведка ПРОГНАНА живьём 28.07.2026 с разрешения владельца** — и прогон окупился + сразу: вскрылись **две поломки**, которых не видел ни один из 74 зелёных тестов. + Обе починены, обе проверены вырезанием, разметка и замеры записаны в `cabinet-flow.md` + **§7.8**. Подробности — ниже, в разделе про живой прогон. +- **Отказ с НЕСКОЛЬКИМИ причинами по-прежнему не проверен.** В обоих живых отказах + строка причины была одна. Робот раскрывает только первую: при двух причинах клиент + получит подробное пояснение по одной и лишь заголовок по второй. **Чинить вслепую + нельзя** — неизвестно, не сворачивает ли раскрытие второй строки первую (обычное + поведение «гармошки»). Ждать живого случая. +- ✅ **Хвост с подписями кнопок срезан** решением владельца: «Написать в чат» и «Написать + письмо» клиенту больше не едут, слова Яндекса про причину не тронуты. + 🪤 Попутно вскрылось, что Яндекс пишет через **неразрывный пробел** — «Написать письмо» + срезалось, а «Написать в чат» оставалось. Сравнение текста из этого кабинета делать + только по «человеческому» виду строки, см. `cabinet-flow.md` §7.8. - **Признак удачной загрузки с экрана намеренно не читаем** — подтверждённой метки «набор создан» у нас нет. Успех определяет портал слепком `creatives.get`. Если однажды такую метку снимут живьём, это можно упростить; выдумывать её нельзя. From 6f469fb13d370ac0b2a5c7a0e1efb29929facc6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Wed, 29 Jul 2026 06:26:07 +0300 Subject: [PATCH 135/213] =?UTF-8?q?feat(=D1=82=D0=B5=D0=BB=D0=B5=D0=B3?= =?UTF-8?q?=D1=80=D0=B0=D0=BC-=D1=80=D0=B5=D0=BA=D0=BB=D0=B0=D0=BC=D0=B0):?= =?UTF-8?q?=20=D0=B4=D0=B5=D0=BD=D1=8C=D0=B3=D0=B8=20=D0=BD=D0=B0=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=89=D0=B5=D0=BC=20=D0=B1=D0=B0=D0=BB=D0=B0=D0=BD=D1=81?= =?UTF-8?q?=D0=B5=20+=20=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B0=20=D0=A1?= =?UTF-8?q?=D0=9C=D0=A1-=D1=84=D0=B0=D0=BD=D1=82=D0=B0=D0=B7=D0=B8=D0=B9?= =?UTF-8?q?=20+=20=D0=BC=D0=B5=D0=B4=D0=B8=D0=B0=20=D0=BE=D0=B1=D1=8A?= =?UTF-8?q?=D1=8F=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Денежная модель (куски 1-2): реклама в Телеграме (МТС Маркетолог, робот-в-браузере) оплачивается с ОБЩЕГО баланса тенанта (как СМС), наценка 40%. Списание при запуске, возврат при отказе модерации/сбое/отмене (сальдо-идемпотентность tg_ad_charge/tg_ad_refund). Старый рекламный кошелёк-заморозка убран из потока кампаний (таблицы ad_wallets НЕ удалены). Новый TelegramCampaignChargeService (зеркало SmsChargeService); F5 money-safety сохранён (сбой с mts_campaign_id → needs_review без возврата). Уборщик добивает зависшие queued с возвратом. Чистка СМС-наследия (аудит модуля построчно 5 проверяющими): модуль ресейлит ПОКАЗЫ рекламы, а не рассылку сообщений — вырезаны выдуманные сущности, механически скопированные из СМС: - «имя/бренд отправителя» + помесячная абонплата (в телеге МТС имени отправителя нет): ChargeTgNameFeeJob, TelegramSenderService, SenderController, модели Sender/Setting, фронт-панель TelegramSenderPanel, админ-карточка, updateTgSettings, тип tg_name_fee. Таблицы client_tg_senders/_settings дропнуты. - мёртвые таблицы client_tg_messages (доставка по номеру) и client_tg_templates (шаблоны сообщений) — без модели/использования, дропнуты (миграция 000017, create-миграции удалены). - client_tg_optouts переосмыслен как ручной список «не показывать этим номерам» (не «отписки»). - лексика рассылки → рекламы: «Авторассылка»→«Авто-реклама», «кошелёк/заморожено»→«общий баланс». Медиа объявления (реальный пробел показов): новый POST /api/telegram/campaigns/{id}/media (картинка/видео к черновику, png/jpg/gif/mp4 ≤50 МБ, замена удаляет старый файл) + поле загрузки в форме кабинета. Робот уже принимал media_path (RunTelegramCampaignJob → mediaFile → cabinet.js fillAdMedia) — не хватало только приёма файла от клиента. Схема: db/CHANGELOG_schema.md v8.94 (CHECK += tg_ad_charge/tg_ad_refund) + v8.95 (дроп СМС-таблиц, tg_name_fee убран). Тесты зелёные поштучно (квирк партиций — гонять по одному): Schema/Models/AdminTg/CampaignCharge/CampaignApi/Audience/Media; фронт advertising-telegram-view 19 + admin-tg/auto-rule 24. pint/deptrac(0) чисто; larastan исключён (Pest-$this шум). Робот bots/mts-telegram-ads НЕ трогали. Co-Authored-By: Claude Opus 4.8 --- .../Api/Admin/TgTariffController.php | 28 +- .../Api/ClientTg/CampaignController.php | 128 +++++---- .../Api/ClientTg/SenderController.php | 85 ------ app/app/Jobs/ClientTg/ChargeTgNameFeeJob.php | 126 --------- .../ClientTg/PollTelegramModerationJob.php | 20 +- .../ClientTg/ResubmitTelegramCampaignJob.php | 40 ++- .../Jobs/ClientTg/RunTelegramCampaignJob.php | 36 ++- .../SweepStuckTelegramCampaignsJob.php | 113 ++++++-- app/app/Models/BalanceTransaction.php | 4 + app/app/Models/ClientTg/Optout.php | 9 +- app/app/Models/ClientTg/Sender.php | 55 ---- app/app/Models/ClientTg/Setting.php | 33 --- app/app/Models/ClientTg/Template.php | 32 --- .../ClientTg/TelegramAudienceService.php | 4 +- .../ClientTg/TelegramAutoAccumulator.php | 60 ++--- .../TelegramCampaignChargeService.php | 147 +++++++++++ .../ClientTg/TelegramSenderService.php | 247 ------------------ .../ClientTg/TelegramTariffService.php | 11 + app/config/client_tg.php | 10 + ...07_27_000003_create_client_tg_messages.php | 43 --- ...7_27_000006_create_client_tg_templates.php | 34 --- ...07_27_000008_create_client_tg_settings.php | 43 --- ..._07_27_000010_create_client_tg_senders.php | 60 ----- ...balance_transactions_type_for_telegram.php | 44 ++++ ...00017_drop_client_tg_sms_legacy_tables.php | 41 +++ app/resources/js/api/admin.ts | 24 +- app/resources/js/api/telegram.ts | 54 +--- app/resources/js/views/admin/AdminTgView.vue | 68 +---- .../advertising/AdvertisingTelegramView.vue | 35 ++- .../advertising/TelegramAutoRulePanel.vue | 6 +- .../views/advertising/TelegramSenderPanel.vue | 221 ---------------- app/routes/console.php | 11 - app/routes/web.php | 14 +- app/tests/Feature/ClientTg/AdminTgApiTest.php | 33 +-- .../Feature/ClientTg/AudienceGateTest.php | 42 ++- app/tests/Feature/ClientTg/AutoFreezeTest.php | 59 +++-- .../Feature/ClientTg/AutoSafeguardTest.php | 80 ++++-- .../Feature/ClientTg/CampaignApiTest.php | 20 +- .../ClientTg/CampaignChargeServiceTest.php | 118 +++++++++ .../ClientTg/ConservativeReleaseTest.php | 83 +++--- .../Feature/ClientTg/MediaUploadTest.php | 116 ++++++++ app/tests/Feature/ClientTg/ModelsTest.php | 19 +- .../Feature/ClientTg/PollModerationTest.php | 79 +++--- .../Feature/ClientTg/RefundOnFailTest.php | 99 ++++--- .../Feature/ClientTg/ResubmitJobTest.php | 67 +++-- app/tests/Feature/ClientTg/SchemaTest.php | 23 -- app/tests/Feature/ClientTg/SenderApiTest.php | 147 ----------- .../Feature/ClientTg/SenderLifecycleTest.php | 204 --------------- app/tests/Feature/ClientTg/SweepStuckTest.php | 130 ++++++--- .../Feature/ClientTg/TariffServiceTest.php | 18 ++ app/tests/Frontend/admin-tg-view.spec.ts | 21 +- .../advertising-telegram-view.spec.ts | 52 +++- .../Frontend/telegram-auto-rule-panel.spec.ts | 2 +- .../Frontend/telegram-sender-panel.spec.ts | 96 ------- cspell-words.txt | 26 ++ db/CHANGELOG_schema.md | 65 +++++ db/schema.sql | 5 +- ...2026-07-28-telegram-dengi-kusok1-ACCEPT.md | 64 +++++ ...2026-07-28-telegram-dengi-kusok2-ACCEPT.md | 125 +++++++++ ...2026-07-28-telegram-dengi-kusok3-ACCEPT.md | 113 ++++++++ ...026-07-28-telegram-module-fantasy-audit.md | 118 +++++++++ ...-28-telegram-dengi-obshchiy-balans-spec.md | 86 ++++++ 62 files changed, 1893 insertions(+), 2103 deletions(-) delete mode 100644 app/app/Http/Controllers/Api/ClientTg/SenderController.php delete mode 100644 app/app/Jobs/ClientTg/ChargeTgNameFeeJob.php delete mode 100644 app/app/Models/ClientTg/Sender.php delete mode 100644 app/app/Models/ClientTg/Setting.php delete mode 100644 app/app/Models/ClientTg/Template.php create mode 100644 app/app/Services/ClientTg/TelegramCampaignChargeService.php delete mode 100644 app/app/Services/ClientTg/TelegramSenderService.php delete mode 100644 app/database/migrations/2026_07_27_000003_create_client_tg_messages.php delete mode 100644 app/database/migrations/2026_07_27_000006_create_client_tg_templates.php delete mode 100644 app/database/migrations/2026_07_27_000008_create_client_tg_settings.php delete mode 100644 app/database/migrations/2026_07_27_000010_create_client_tg_senders.php create mode 100644 app/database/migrations/2026_07_28_000001_extend_balance_transactions_type_for_telegram.php create mode 100644 app/database/migrations/2026_07_28_000017_drop_client_tg_sms_legacy_tables.php delete mode 100644 app/resources/js/views/advertising/TelegramSenderPanel.vue create mode 100644 app/tests/Feature/ClientTg/CampaignChargeServiceTest.php create mode 100644 app/tests/Feature/ClientTg/MediaUploadTest.php delete mode 100644 app/tests/Feature/ClientTg/SenderApiTest.php delete mode 100644 app/tests/Feature/ClientTg/SenderLifecycleTest.php delete mode 100644 app/tests/Frontend/telegram-sender-panel.spec.ts create mode 100644 docs/superpowers/2026-07-28-telegram-dengi-kusok1-ACCEPT.md create mode 100644 docs/superpowers/2026-07-28-telegram-dengi-kusok2-ACCEPT.md create mode 100644 docs/superpowers/2026-07-28-telegram-dengi-kusok3-ACCEPT.md create mode 100644 docs/superpowers/2026-07-28-telegram-module-fantasy-audit.md create mode 100644 docs/superpowers/specs/2026-07-28-telegram-dengi-obshchiy-balans-spec.md diff --git a/app/app/Http/Controllers/Api/Admin/TgTariffController.php b/app/app/Http/Controllers/Api/Admin/TgTariffController.php index ae8b00f5..6f8d9ea7 100644 --- a/app/app/Http/Controllers/Api/Admin/TgTariffController.php +++ b/app/app/Http/Controllers/Api/Admin/TgTariffController.php @@ -5,20 +5,18 @@ declare(strict_types=1); namespace App\Http\Controllers\Api\Admin; use App\Http\Controllers\Controller; -use App\Models\ClientTg\Setting; use App\Models\ClientTg\Tariff; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; /** - * SaaS-admin → Клиентская Telegram-реклама: тарифная сетка (client_tg_tariffs) + - * общие настройки (client_tg_settings, singleton). План §Сессия 4, задача 4.4. + * SaaS-admin → Клиентская Telegram-реклама: тарифная сетка (client_tg_tariffs). + * План §Сессия 4, задача 4.4. * - * Зона saas-admin/admin-db (crm_admin_user); GRANT — миграции client_tg_tariffs / - * client_tg_settings. Обе таблицы глобальные (без RLS, не tenant-scoped) — единый - * прайс на всех тенантов. updateTariffs заменяет весь набор ступеней целиком - * (owner правит сетку списком). Зеркало AdminSmsTariffController. + * Зона saas-admin/admin-db (crm_admin_user); GRANT — миграция client_tg_tariffs. + * Таблица глобальная (без RLS, не tenant-scoped) — единый прайс на всех тенантов. + * updateTariffs заменяет весь набор ступеней целиком (owner правит сетку списком). */ class TgTariffController extends Controller { @@ -27,7 +25,6 @@ class TgTariffController extends Controller { return response()->json([ 'tariffs' => Tariff::orderBy('min_qty')->get(), - 'settings' => Setting::first(), ]); } @@ -61,19 +58,4 @@ class TgTariffController extends Controller 'tariffs' => Tariff::orderBy('min_qty')->get(), ]); } - - /** PUT /api/admin/telegram/settings — singleton настроек. */ - public function updateSettings(Request $request): JsonResponse - { - $validated = $request->validate([ - 'name_fee_rub_per_month' => ['required', 'numeric', 'min:0'], - 'name_debt_grace_days' => ['required', 'integer', 'min:0'], - ]); - - $settings = Setting::first() ?? new Setting; - $settings->fill($validated); - $settings->save(); - - return response()->json($settings); - } } diff --git a/app/app/Http/Controllers/Api/ClientTg/CampaignController.php b/app/app/Http/Controllers/Api/ClientTg/CampaignController.php index 1a9f54b2..3aa08386 100644 --- a/app/app/Http/Controllers/Api/ClientTg/CampaignController.php +++ b/app/app/Http/Controllers/Api/ClientTg/CampaignController.php @@ -8,17 +8,17 @@ use App\Exceptions\Billing\InsufficientBalanceException; use App\Http\Controllers\Controller; use App\Jobs\ClientTg\ResubmitTelegramCampaignJob; use App\Jobs\ClientTg\RunTelegramCampaignJob; -use App\Models\AdWallet; use App\Models\ClientTg\Campaign; use App\Models\ClientTg\CampaignPhone; -use App\Services\Advertising\AdWalletService; +use App\Models\Tenant; use App\Services\ClientTg\TelegramAudienceService; +use App\Services\ClientTg\TelegramCampaignChargeService; use App\Services\ClientTg\TelegramTariffService; use App\Support\PhoneNormalizer; -use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Storage; /** * HTTP-API клиентской Telegram-рекламы «по своей базе» (план §Сессия 3, задача 3.1). @@ -26,9 +26,9 @@ use Illuminate\Support\Facades\DB; * (смета-потолок), RunTelegramCampaignJob (робот кабинета МТС). * * 🔴 Отличие от СМС-близнеца: создание и запуск РАЗДЕЛЕНЫ. `store` создаёт ЧЕРНОВИК - * (деньги/робот не трогаются) — клиент видит смету и число кандидатов; `launch` - * переводит draft→queued, в бою бронирует лимит на объявление (budget_cap_rub) и - * ставит джоб. Песочница (TG_SANDBOX): заморозки нет, робот пойдёт черновиком. + * (деньги/робот не трогаются) — клиент видит клиентскую смету (с наценкой) и число + * кандидатов; `launch` переводит draft→queued, в бою СПИСЫВАЕТ клиентскую смету с + * общего баланса и ставит джоб. Песочница (TG_SANDBOX): денег не трогаем, робот — черновиком. * * tenant_id всегда из $request->user()->tenant_id; каждый запрос — с явным * ->where('tenant_id', ...) поверх RLS (defense-in-depth, паттерн ClientSmsController). @@ -44,9 +44,9 @@ class CampaignController extends Controller { $tenantId = (int) $request->user()->tenant_id; - // Баланс/заморозка — чтобы экран мог погасить «Запустить» при нехватке - // свободных средств ДО обращения к серверу. - $wallet = AdWallet::where('tenant_id', $tenantId)->first(); + // Баланс — общий баланс тенанта (как СМС): экран гасит «Запустить» при нехватке + // средств ДО обращения к серверу. Заморозки больше нет (frozen всегда 0). + $tenant = Tenant::find($tenantId); return response()->json([ 'campaigns' => Campaign::where('tenant_id', $tenantId) @@ -54,8 +54,8 @@ class CampaignController extends Controller ->limit(50) ->get(), 'sandbox' => (bool) config('client_tg.sandbox', true), - 'balance_rub' => $wallet !== null ? (string) $wallet->balance_rub : '0.00', - 'frozen_rub' => $wallet !== null ? (string) $wallet->frozen_rub : '0.00', + 'balance_rub' => $tenant !== null ? (string) $tenant->balance_rub : '0.00', + 'frozen_rub' => '0.00', ]); } @@ -95,7 +95,8 @@ class CampaignController extends Controller $candidates = $this->audience->build($campaign)->candidatesCount; $campaign->update([ 'planned_count' => $candidates, - 'estimated_cost_rub' => $this->tariff->estimateRub($candidates), + // Клиентская цена (с наценкой) — её клиент видит и платит при запуске. + 'estimated_cost_rub' => $this->tariff->clientEstimateRub($candidates), ]); $payload = $campaign->fresh()->toArray(); @@ -114,9 +115,9 @@ class CampaignController extends Controller } /** - * Запуск кампании: draft → queued + джоб робота. В бою бронирует лимит на - * объявление (budget_cap_rub); не хватает денег → 409, кампания остаётся - * черновиком. Песочница — без заморозки. Не-черновик → 422 (повторно не жмём). + * Запуск кампании: draft → queued + джоб робота. В бою СПИСЫВАЕТ клиентскую смету + * (с наценкой) с общего баланса; не хватает денег → 409, кампания остаётся + * черновиком. Песочница — без денег. Не-черновик → 422 (повторно не жмём). */ public function launch(Request $request, int $id): JsonResponse { @@ -130,10 +131,11 @@ class CampaignController extends Controller $sandbox = (bool) config('client_tg.sandbox', true); - // Предстартовый гейт аудитории (находка #2): в бою НЕ бронируем деньги под + // Предстартовый гейт аудитории (находка #2): в бою НЕ списываем деньги под // заведомо непроходную кампанию. Минимум у МТС Маркетолог — 367 кандидатов; - // <367 или пусто — робот всё равно упал бы, но бронь уже залипла. В песочнице + // <367 или пусто — робот всё равно упал бы, но деньги уже ушли бы. В песочнице // гейта нет — денег нет, а сам робот отсеет по MIN_NON_MTS. + $candidates = 0; if (! $sandbox) { $candidates = $this->audience->build($campaign)->candidatesCount; $min = (int) config('client_tg.auto_batch_threshold', 367); @@ -146,16 +148,19 @@ class CampaignController extends Controller } try { - DB::transaction(function () use ($tenantId, $campaign, $sandbox): void { + DB::transaction(function () use ($campaign, $sandbox, $candidates): void { if (! $sandbox) { - app(AdWalletService::class)->freeze( - $tenantId, 'telegram', 'campaign', $campaign->id, (string) $campaign->budget_cap_rub, - ); + // Пересчёт клиентской сметы по свежему числу кандидатов — клиент видит + // и платит одно и то же. Списание с общего баланса; нехватка бросает + // InsufficientBalanceException → откат транзакции → кампания в draft. + $clientCost = $this->tariff->clientEstimateRub($candidates); + $campaign->update(['estimated_cost_rub' => $clientCost]); + app(TelegramCampaignChargeService::class)->charge($campaign, $clientCost); } $campaign->transitionTo(Campaign::STATUS_QUEUED); }); - } catch (InsufficientBalanceException|ModelNotFoundException $e) { - return response()->json(['message' => 'Не хватает денег на кошельке продвижения'], 409); + } catch (InsufficientBalanceException $e) { + return response()->json(['message' => 'Не хватает денег на балансе — пополните счёт'], 409); } RunTelegramCampaignJob::dispatch($campaign->id, $tenantId)->afterCommit(); @@ -164,10 +169,10 @@ class CampaignController extends Controller } /** - * Отмена кампании ДО запуска (draft/queued → cancelled). В бою возвращает бронь - * кошелька (release снимает hold, уменьшает frozen) — иначе резерв залипает - * (находка #1, задача 2.3). Песочница брони не имела — release пропускаем. - * Из running/терминальных отмена запрещена (422) по машине статусов модели. + * Отмена кампании ДО запуска (draft/queued → cancelled). В бою возвращает списанную + * смету на общий баланс (refund) — из queued (уже списали на launch) вернёт деньги, + * из draft (не списывали) refund — no-op. Песочница денег не трогала. Из running/ + * терминальных отмена запрещена (422) по машине статусов модели. */ public function cancel(Request $request, int $id): JsonResponse { @@ -181,16 +186,12 @@ class CampaignController extends Controller $sandbox = (bool) config('client_tg.sandbox', true); - try { - DB::transaction(function () use ($tenantId, $campaign, $sandbox): void { - if (! $sandbox) { - app(AdWalletService::class)->release($tenantId, 'telegram', 'campaign', $campaign->id); - } - $campaign->transitionTo(Campaign::STATUS_CANCELLED); - }); - } catch (ModelNotFoundException $e) { - return response()->json(['message' => 'Не удалось вернуть бронь'], 409); - } + DB::transaction(function () use ($campaign, $sandbox): void { + if (! $sandbox) { + app(TelegramCampaignChargeService::class)->refund($campaign); + } + $campaign->transitionTo(Campaign::STATUS_CANCELLED); + }); return response()->json($campaign->fresh()); } @@ -235,8 +236,9 @@ class CampaignController extends Controller $sandbox = (bool) config('client_tg.sandbox', true); - // Предстартовый гейт аудитории (как launch): в бою не бронируем деньги под + // Предстартовый гейт аудитории (как launch): в бою не списываем деньги под // заведомо непроходную кампанию. Песочница — без гейта (денег нет, робот отсеет). + $candidates = 0; if (! $sandbox) { $candidates = $this->audience->build($campaign)->candidatesCount; $min = (int) config('client_tg.auto_batch_threshold', 367); @@ -249,11 +251,14 @@ class CampaignController extends Controller } try { - DB::transaction(function () use ($tenantId, $campaign, $data, $moderatorPath, $sandbox): void { + DB::transaction(function () use ($campaign, $data, $moderatorPath, $sandbox, $candidates): void { + // Пересдача платится ЗАНОВО: на отказе модерации смету вернул опросчик + // (refund), сальдо выровнялось — новое списание проходит. Не хватает → + // InsufficientBalanceException → откат → кампания остаётся rejected. if (! $sandbox) { - app(AdWalletService::class)->freeze( - $tenantId, 'telegram', 'campaign', $campaign->id, (string) $campaign->budget_cap_rub, - ); + $clientCost = $this->tariff->clientEstimateRub($candidates); + $campaign->update(['estimated_cost_rub' => $clientCost]); + app(TelegramCampaignChargeService::class)->charge($campaign, $clientCost); } $campaign->fill([ @@ -268,8 +273,8 @@ class CampaignController extends Controller $campaign->transitionTo(Campaign::STATUS_QUEUED); }); - } catch (InsufficientBalanceException|ModelNotFoundException $e) { - return response()->json(['message' => 'Не хватает денег на кошельке продвижения'], 409); + } catch (InsufficientBalanceException $e) { + return response()->json(['message' => 'Не хватает денег на балансе — пополните счёт'], 409); } ResubmitTelegramCampaignJob::dispatch($campaign->id, $tenantId)->afterCommit(); @@ -277,6 +282,41 @@ class CampaignController extends Controller return response()->json($campaign->fresh()); } + /** + * Прикладывает картинку/видео к объявлению ЧЕРНОВИКА (у МТС объявление может быть + * с медиа). Файл кладём на локальный диск; путь в `media_path` робот отдаёт кабинету + * МТС при запуске (RunTelegramCampaignJob → mediaFile → cabinet.js `fillAdMedia`). + * Только для черновика — после запуска объявление уже ушло в кабинет. Замена медиа + * удаляет прежний файл, чтобы не копить мусор на диске. + */ + public function attachMedia(Request $request, int $id): JsonResponse + { + $tenantId = (int) $request->user()->tenant_id; + + $campaign = Campaign::where('tenant_id', $tenantId)->findOrFail($id); + + if ($campaign->status !== Campaign::STATUS_DRAFT) { + return response()->json(['message' => 'Медиа можно приложить только к черновику — до запуска'], 422); + } + + $request->validate([ + // Картинка (png/jpg/gif) или видео (mp4); лимит 50 МБ (кабинет МТС жмёт крупные сам). + 'media' => 'required|file|mimes:png,jpg,jpeg,gif,mp4|max:51200', + ]); + + $path = $request->file('media')->store('client_tg/media', 'local'); + + $old = $campaign->media_path; + $campaign->update(['media_path' => $path]); + + // Прежний файл больше не нужен — убираем с диска (после успешной записи пути). + if ($old !== null && $old !== '' && $old !== $path) { + Storage::disk('local')->delete($old); + } + + return response()->json($campaign->fresh()); + } + /** * Валидация полей кампании. Для «по сделкам» срок обязателен — иначе выборка * ушла бы по ВСЕЙ истории (и сканировала бы все партиции deals). diff --git a/app/app/Http/Controllers/Api/ClientTg/SenderController.php b/app/app/Http/Controllers/Api/ClientTg/SenderController.php deleted file mode 100644 index 6a16f712..00000000 --- a/app/app/Http/Controllers/Api/ClientTg/SenderController.php +++ /dev/null @@ -1,85 +0,0 @@ -user()->tenant_id — сервис скоупит по тенанту - * поверх RLS (defense-in-depth, паттерн CampaignController). - */ -class SenderController extends Controller -{ - public function __construct( - private readonly TelegramSenderService $senders, - ) {} - - public function show(Request $request): JsonResponse - { - $tenantId = (int) $request->user()->tenant_id; - - return response()->json($this->senders->snapshot($tenantId)); - } - - public function store(Request $request): JsonResponse - { - $tenantId = (int) $request->user()->tenant_id; - $data = $request->validate([ - 'name' => 'required|string|max:64', // = колонка client_tg_senders.name varchar(64) - ]); - - try { - $sender = $this->senders->requestSender($tenantId, $data['name'], (int) $request->user()->id); - } catch (InsufficientBalanceException $e) { - return response()->json(['message' => 'Не хватает денег на кошельке продвижения'], 409); - } catch (DomainException $e) { - return response()->json(['message' => $e->getMessage()], 422); - } - - return response()->json($sender, 201); - } - - public function disable(Request $request): JsonResponse - { - $tenantId = (int) $request->user()->tenant_id; - - try { - $sender = $this->senders->disableSender($tenantId); - } catch (ModelNotFoundException $e) { - return response()->json(['message' => 'Имя отправителя не найдено'], 404); - } - - return response()->json($sender); - } - - public function enable(Request $request): JsonResponse - { - $tenantId = (int) $request->user()->tenant_id; - - try { - $sender = $this->senders->enableSender($tenantId); - } catch (InsufficientBalanceException $e) { - return response()->json(['message' => 'Не хватает денег на кошельке продвижения'], 409); - } catch (DomainException $e) { - return response()->json(['message' => $e->getMessage()], 422); - } catch (ModelNotFoundException $e) { - return response()->json(['message' => 'Имя отправителя не найдено'], 404); - } - - return response()->json($sender); - } -} diff --git a/app/app/Jobs/ClientTg/ChargeTgNameFeeJob.php b/app/app/Jobs/ClientTg/ChargeTgNameFeeJob.php deleted file mode 100644 index 82a6c670..00000000 --- a/app/app/Jobs/ClientTg/ChargeTgNameFeeJob.php +++ /dev/null @@ -1,126 +0,0 @@ -value('name_debt_grace_days') ?? 29); - $today = Carbon::now()->toDateString(); - - $rows = DB::connection('pgsql_supplier')->table('client_tg_senders') - ->where('status', Sender::STATUS_ACTIVE) - ->whereNotNull('paid_until') - ->whereDate('paid_until', '<', $today) - ->get(['id', 'tenant_id', 'monthly_fee_rub', 'paid_until', 'debt_since']); - - foreach ($rows as $row) { - $tenantId = (int) $row->tenant_id; - - try { - DB::transaction(function () use ($row, $tenantId, $grace, $today, $wallet): void { - DB::statement('SET LOCAL app.current_tenant_id = '.$tenantId); - - $fee = (string) $row->monthly_fee_rub; - $period = Carbon::parse($row->paid_until)->format('Y-m'); - $externalKey = "telegram:sender:{$row->id}:{$period}"; - - $adWallet = AdWallet::where('tenant_id', $tenantId)->first(); - $free = $adWallet !== null - ? bcsub((string) $adWallet->balance_rub, (string) $adWallet->frozen_rub, 2) - : '0.00'; - - if (bccomp($free, $fee, 2) >= 0) { - $wallet->charge($tenantId, 'telegram', 'sender', (int) $row->id, $fee, $externalKey); - - Sender::where('tenant_id', $tenantId)->whereKey($row->id)->update([ - 'paid_until' => Carbon::parse($row->paid_until)->addMonthNoOverflow()->toDateString(), - 'debt_since' => null, - ]); - - return; - } - - // Денег не хватает — фиксируем/копим долг, paid_until НЕ двигаем. - $debtSince = $row->debt_since ?? $today; - - if (Carbon::parse($debtSince)->diffInDays(Carbon::parse($today)) > $grace) { - Sender::where('tenant_id', $tenantId)->whereKey($row->id)->update([ - 'status' => Sender::STATUS_SUSPENDED, - 'note' => 'Долг более '.$grace.' дней — имя отключено, погасить у МТС', - 'debt_since' => $debtSince, - ]); - - // Сигнал владельцу: имя выключено за долг — у МТС гасим вручную (API нет). - Log::warning('client_tg.name_suspended_for_debt', [ - 'sender_id' => $row->id, - 'tenant_id' => $tenantId, - 'debt_since' => $debtSince, - ]); - } else { - Sender::where('tenant_id', $tenantId)->whereKey($row->id)->update([ - 'debt_since' => $debtSince, - ]); - } - }); - } catch (Throwable $e) { - Log::warning('ChargeTgNameFeeJob: сбой списания платы за имя', [ - 'sender_id' => $row->id, - 'tenant_id' => $row->tenant_id, - 'error' => $e->getMessage(), - ]); - } - } - } -} diff --git a/app/app/Jobs/ClientTg/PollTelegramModerationJob.php b/app/app/Jobs/ClientTg/PollTelegramModerationJob.php index 8f199df5..71f6b293 100644 --- a/app/app/Jobs/ClientTg/PollTelegramModerationJob.php +++ b/app/app/Jobs/ClientTg/PollTelegramModerationJob.php @@ -6,8 +6,8 @@ namespace App\Jobs\ClientTg; use App\Models\ClientTg\Campaign; use App\Models\Tenant; -use App\Services\Advertising\AdWalletService; use App\Services\ClientTg\RobotResult; +use App\Services\ClientTg\TelegramCampaignChargeService; use App\Services\ClientTg\TelegramRobotRunner; use App\Services\NotificationService; use Illuminate\Bus\Queueable; @@ -28,12 +28,11 @@ use Throwable; * bots/mts-telegram-ads/FLOW-FINDINGS.md, «Разведка Сессии 6»). Опросчик применяет * вердикт КОНСЕРВАТИВНО: * - * — `rejected` («Отклонена») → статус `rejected` + причина из кабинета; возврат - * брони кошелька (в бою — зеркало release при отказе робота, задача 2.3); + * — `rejected` («Отклонена») → статус `rejected` + причина из кабинета; ВОЗВРАТ + * списанной сметы на общий баланс (в бою — refund, зеркало отказа робота); * уведомление клиенту «реклама отклонена». * — `approved` («Одобрена») → `launched` (показы пошли); уведомление «одобрена». - * Деньги НЕ трогаем — бронь под потолок держится, фактическую стоимость спишет - * билинг по факту показов (задача 2.4 → позже). + * Деньги НЕ трогаем — смету списали при запуске, одобрение ничего не меняет. * — `moderating` / робот не смог прочитать вердикт (null) → НЕ трогаем, оставляем * на модерации до следующего цикла (тихо пропускаем). * @@ -87,15 +86,14 @@ class PollTelegramModerationJob implements ShouldQueue [$outcome, $campaign, $tenant] = $applied; - // Возврат брони — только при отказе и только в бою (в песочнице заморозки - // не было; ключ совпадает с freeze в launch). Отдельный tenantTx: сбой - // возврата не должен откатить уже проставленный статус. + // Возврат сметы — только при отказе и только в бою (в песочнице денег не + // списывали, refund найдёт сальдо 0). Отдельный tenantTx: сбой возврата + // не должен откатить уже проставленный статус. if ($outcome === Campaign::STATUS_REJECTED && ! $sandbox) { try { - $this->tenantTx($tenantId, fn () => app(AdWalletService::class) - ->release($tenantId, 'telegram', 'campaign', $campaignId)); + $this->tenantTx($tenantId, fn () => app(TelegramCampaignChargeService::class)->refund($campaign)); } catch (Throwable $e) { - Log::warning('client_tg.poll_release_failed', [ + Log::warning('client_tg.poll_refund_failed', [ 'campaign_id' => $campaignId, 'error' => $e->getMessage(), ]); diff --git a/app/app/Jobs/ClientTg/ResubmitTelegramCampaignJob.php b/app/app/Jobs/ClientTg/ResubmitTelegramCampaignJob.php index 037e0737..71be4f22 100644 --- a/app/app/Jobs/ClientTg/ResubmitTelegramCampaignJob.php +++ b/app/app/Jobs/ClientTg/ResubmitTelegramCampaignJob.php @@ -6,8 +6,8 @@ namespace App\Jobs\ClientTg; use App\Models\ClientTg\Campaign; use App\Models\Tenant; -use App\Services\Advertising\AdWalletService; use App\Services\ClientTg\RobotResult; +use App\Services\ClientTg\TelegramCampaignChargeService; use App\Services\ClientTg\TelegramRobotRunner; use App\Services\NotificationService; use Illuminate\Bus\Queueable; @@ -119,8 +119,8 @@ class ResubmitTelegramCampaignJob implements ShouldQueue $fresh->status_reason = $result->reason; // Осторожно с деньгами (F5): есть mts_campaign_id → кампания в кабинете - // реальна и могла уйти на пере-модерацию → needs_review БЕЗ возврата брони. - // Без id (край — контроллер это отсекает) → failed + возврат брони. + // реальна и могла уйти на пере-модерацию → needs_review БЕЗ возврата сметы. + // Без id (край — контроллер это отсекает) → failed + возврат сметы. if ($fresh->mts_campaign_id !== null && $fresh->mts_campaign_id !== '') { $fresh->transitionTo(Campaign::STATUS_NEEDS_REVIEW); @@ -144,21 +144,20 @@ class ResubmitTelegramCampaignJob implements ShouldQueue $fresh->transitionTo(Campaign::STATUS_DRAFT_READY); } else { // Аномалия контракта: бой (submitMode:'live') ДОЛЖЕН давать resubmitted=true. - // Если робот вернул ok, но не отправил — деньги заморожены, а кампания на - // модерацию НЕ ушла → needs_review (бронь держим, ручная сверка), не - // терминальный draft_ready (иначе бронь зависнет навсегда). + // Если робот вернул ok, но не отправил — смета списана, а кампания на + // модерацию НЕ ушла → needs_review (списание держим, ручная сверка), не + // терминальный draft_ready (иначе деньги зависнут навсегда). $fresh->transitionTo(Campaign::STATUS_NEEDS_REVIEW); } }); - // Возврат брони — ТОЛЬКО для заведомо не ушедших (failed без id), как в + // Возврат сметы — ТОЛЬКО для заведомо не ушедших (failed без id), как в // RunTelegramCampaignJob. Отдельный tenantTx, чтобы сбой возврата не откатил статус. if ($failedCampaign !== null && ! $sandbox) { try { - $this->tenantTx(fn () => app(AdWalletService::class) - ->release($this->tenantId, 'telegram', 'campaign', $failedCampaign->id)); + $this->tenantTx(fn () => app(TelegramCampaignChargeService::class)->refund($failedCampaign)); } catch (Throwable $e) { - Log::warning('client_tg.release_failed', [ + Log::warning('client_tg.refund_failed', [ 'campaign_id' => $failedCampaign->id, 'error' => $e->getMessage(), ]); @@ -190,13 +189,13 @@ class ResubmitTelegramCampaignJob implements ShouldQueue // 🔑 Отличие пересдачи от RunTelegramCampaignJob: у неё queued ВСЕГДА с // mts_campaign_id. Но в статусе `queued` Фаза A ещё НЕ закоммитила `running` → // робот кабинет НЕ трогал → кампания в кабинете осталась прежней (rejected), - // бронь безопасно вернуть. Поэтому queued → failed + release (переход + // смету безопасно вернуть. Поэтому queued → failed + refund (переход // queued→needs_review в TRANSITIONS отсутствует; без этой ветки кампания зависла - // бы в queued с замороженными деньгами — уборщик метёт только running/moderating). + // бы в queued со списанными деньгами — уборщик метёт только running/moderating). // А вот `running` мог тронуть кабинет → прежняя осторожная логика по mts_campaign_id. - $shouldRelease = false; + $campaignToRefund = null; try { - $this->tenantTx(function () use (&$shouldRelease): void { + $this->tenantTx(function () use (&$campaignToRefund): void { $campaign = Campaign::where('tenant_id', $this->tenantId)->find($this->campaignId); if ($campaign === null) { return; @@ -205,7 +204,7 @@ class ResubmitTelegramCampaignJob implements ShouldQueue if ($campaign->status === Campaign::STATUS_QUEUED) { if ($campaign->canTransitionTo(Campaign::STATUS_FAILED)) { $campaign->transitionTo(Campaign::STATUS_FAILED); - $shouldRelease = true; + $campaignToRefund = $campaign; } return; @@ -216,7 +215,7 @@ class ResubmitTelegramCampaignJob implements ShouldQueue } // running: робот мог войти в кабинет. Есть mts_campaign_id → needs_review - // без release (могла уйти на пере-модерацию); нет id → failed + release. + // без возврата (могла уйти на пере-модерацию); нет id → failed + refund. $hasMtsId = $campaign->mts_campaign_id !== null && $campaign->mts_campaign_id !== ''; if ($hasMtsId) { if ($campaign->canTransitionTo(Campaign::STATUS_NEEDS_REVIEW)) { @@ -228,7 +227,7 @@ class ResubmitTelegramCampaignJob implements ShouldQueue if ($campaign->canTransitionTo(Campaign::STATUS_FAILED)) { $campaign->transitionTo(Campaign::STATUS_FAILED); - $shouldRelease = true; + $campaignToRefund = $campaign; } }); } catch (Throwable $inner) { @@ -238,12 +237,11 @@ class ResubmitTelegramCampaignJob implements ShouldQueue ]); } - if ($shouldRelease && ! (bool) config('client_tg.sandbox', true)) { + if ($campaignToRefund !== null && ! (bool) config('client_tg.sandbox', true)) { try { - $this->tenantTx(fn () => app(AdWalletService::class) - ->release($this->tenantId, 'telegram', 'campaign', $this->campaignId)); + $this->tenantTx(fn () => app(TelegramCampaignChargeService::class)->refund($campaignToRefund)); } catch (Throwable $inner) { - Log::warning('client_tg.release_failed', [ + Log::warning('client_tg.refund_failed', [ 'campaign_id' => $this->campaignId, 'error' => $inner->getMessage(), ]); diff --git a/app/app/Jobs/ClientTg/RunTelegramCampaignJob.php b/app/app/Jobs/ClientTg/RunTelegramCampaignJob.php index 06717026..9cfed471 100644 --- a/app/app/Jobs/ClientTg/RunTelegramCampaignJob.php +++ b/app/app/Jobs/ClientTg/RunTelegramCampaignJob.php @@ -6,9 +6,9 @@ namespace App\Jobs\ClientTg; use App\Models\ClientTg\Campaign; use App\Models\Tenant; -use App\Services\Advertising\AdWalletService; use App\Services\ClientTg\RobotResult; use App\Services\ClientTg\TelegramAudienceService; +use App\Services\ClientTg\TelegramCampaignChargeService; use App\Services\ClientTg\TelegramRobotRunner; use App\Services\NotificationService; use Illuminate\Bus\Queueable; @@ -178,16 +178,15 @@ class RunTelegramCampaignJob implements ShouldQueue $fresh->transitionTo($result->launched ? Campaign::STATUS_MODERATING : Campaign::STATUS_DRAFT_READY); }); - // Задача 2.3: при отказе робота возвращаем бронь кошелька (frozen), иначе она - // залипает (находка #1). Отдельный tenantTx ПОСЛЕ записи статуса — чтобы сбой - // возврата не откатил FAILED. В песочнице заморозки не было — release пропускаем - // (иначе firstOrFail на несуществующем кошельке). Ключ совпадает с freeze в launch. + // При отказе робота (заведомо не ушла в кабинет — id нет) возвращаем списанную + // смету на общий баланс, иначе клиент заплатил за несделанную работу. Отдельный + // tenantTx ПОСЛЕ записи статуса — чтобы сбой возврата не откатил FAILED. В + // песочнице денег не списывали — refund просто ничего не найдёт (сальдо 0). if ($failedCampaign !== null && ! $sandbox) { try { - $this->tenantTx(fn () => app(AdWalletService::class) - ->release($this->tenantId, 'telegram', 'campaign', $failedCampaign->id)); + $this->tenantTx(fn () => app(TelegramCampaignChargeService::class)->refund($failedCampaign)); } catch (Throwable $e) { - Log::warning('client_tg.release_failed', [ + Log::warning('client_tg.refund_failed', [ 'campaign_id' => $failedCampaign->id, 'error' => $e->getMessage(), ]); @@ -217,12 +216,12 @@ class RunTelegramCampaignJob implements ShouldQueue // Осторожно с деньгами (ревью-фикс F5, симметрия с уборщиком/finalize): трогаем // ТОЛЬКО кампанию, застрявшую до старта (running/queued) — если finalize уже - // увёл её дальше (moderating/…), статус не меняем и бронь не возвращаем. Есть - // mts_campaign_id → могла уйти на модерацию → needs_review без release; нет id → - // failed + возврат брони. release делаем ТОЛЬКО когда реально ушли в failed. - $shouldRelease = false; + // увёл её дальше (moderating/…), статус не меняем и деньги не возвращаем. Есть + // mts_campaign_id → могла уйти на модерацию → needs_review без возврата; нет id → + // failed + возврат сметы. refund делаем ТОЛЬКО когда реально ушли в failed. + $campaignToRefund = null; try { - $this->tenantTx(function () use (&$shouldRelease): void { + $this->tenantTx(function () use (&$campaignToRefund): void { $campaign = Campaign::where('tenant_id', $this->tenantId)->find($this->campaignId); if ($campaign === null) { return; @@ -242,7 +241,7 @@ class RunTelegramCampaignJob implements ShouldQueue if ($campaign->canTransitionTo(Campaign::STATUS_FAILED)) { $campaign->transitionTo(Campaign::STATUS_FAILED); - $shouldRelease = true; + $campaignToRefund = $campaign; } }); } catch (Throwable $inner) { @@ -252,15 +251,14 @@ class RunTelegramCampaignJob implements ShouldQueue ]); } - // Задача 2.3: перманентный сбой джоба возвращает бронь (в бою) — но ТОЛЬКО для + // Перманентный сбой джоба возвращает списанную смету (в бою) — но ТОЛЬКО для // заведомо не ушедших (failed). Отдельный tenantTx в своём try/catch — сбой // возврата не должен ронять обработчик failed. - if ($shouldRelease && ! (bool) config('client_tg.sandbox', true)) { + if ($campaignToRefund !== null && ! (bool) config('client_tg.sandbox', true)) { try { - $this->tenantTx(fn () => app(AdWalletService::class) - ->release($this->tenantId, 'telegram', 'campaign', $this->campaignId)); + $this->tenantTx(fn () => app(TelegramCampaignChargeService::class)->refund($campaignToRefund)); } catch (Throwable $inner) { - Log::warning('client_tg.release_failed', [ + Log::warning('client_tg.refund_failed', [ 'campaign_id' => $this->campaignId, 'error' => $inner->getMessage(), ]); diff --git a/app/app/Jobs/ClientTg/SweepStuckTelegramCampaignsJob.php b/app/app/Jobs/ClientTg/SweepStuckTelegramCampaignsJob.php index 8b20d245..c6f75424 100644 --- a/app/app/Jobs/ClientTg/SweepStuckTelegramCampaignsJob.php +++ b/app/app/Jobs/ClientTg/SweepStuckTelegramCampaignsJob.php @@ -5,7 +5,7 @@ declare(strict_types=1); namespace App\Jobs\ClientTg; use App\Models\ClientTg\Campaign; -use App\Services\Advertising\AdWalletService; +use App\Services\ClientTg\TelegramCampaignChargeService; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; @@ -25,17 +25,25 @@ use Throwable; * не идущий прогон. Уборщик добивает статус, но 🔴 КОНСЕРВАТИВНО с деньгами: * * — НЕТ `mts_campaign_id` (черновик в кабинете МТС не создавался) → кампания - * заведомо НЕ ушла на модерацию → `failed` + возврат брони кошелька; + * заведомо НЕ ушла на модерацию → `failed` + возврат списанной сметы на баланс; * — ЕСТЬ `mts_campaign_id` (черновик реально создан) → кампания МОГЛА уйти на * модерацию МТС → деньги вслепую НЕ возвращаем (иначе оплатим показанную * рекламу из своего кармана), помечаем `needs_review` до ручной сверки / * опросчика вердикта (задача 3.4). * + * Плюс зависшие `queued` (ревью-фикс: деньги списаны на launch, но джоб так и не + * стартовал — воркер умер / Redis сброшен / задача потеряна). Такая кампания без + * этой уборки залипла бы в `queued` НАВСЕГДА со списанными с общего баланса деньгами + * (finalize/failed срабатывают только если джоб реально бежал). queued НЕ имеет + * `mts_campaign_id` (его ставит робот уже в running) → робот кабинет не трогал → + * безопасно `failed` + ВОЗВРАТ сметы. Порог для queued — с большим запасом + * (QUEUED_STUCK_AFTER_MINUTES), чтобы не гоняться с живым, но занятым воркером. + * * 🔴 RLS/роли: на проде очередь бежит под `crm_app_user` (НЕ BYPASSRLS) БЕЗ * tenant-контекста — перечисление кампаний через дефолтное соединение вернуло бы * 0 строк (молчаливый сбой). Поэтому кросс-тенантное перечисление идёт плоскими - * строками через `pgsql_supplier` (BYPASSRLS, как ChargeTgNameFeeJob), а правка - * статуса и возврат брони — под `SET LOCAL app.current_tenant_id` на ДЕФОЛТНОМ + * строками через `pgsql_supplier` (BYPASSRLS, как PollTelegramModerationJob), а правка + * статуса и возврат сметы — под `SET LOCAL app.current_tenant_id` на ДЕФОЛТНОМ * соединении; денежные операции всегда получают tenant_id явным аргументом. */ class SweepStuckTelegramCampaignsJob implements ShouldQueue @@ -45,13 +53,20 @@ class SweepStuckTelegramCampaignsJob implements ShouldQueue /** Окно «зависания»: running дольше стольких минут = мёртвый прогон (робот ≤ 420с). */ public const STUCK_AFTER_MINUTES = 15; + /** + * Окно для зависшей `queued`: джоб в норме подхватывается за секунды. Большой запас + * (1 час), чтобы НЕ добить кампанию, которую живой, но занятый бэклогом воркер вот-вот + * запустит. Деньги при этом не теряются — они уже списаны и вернутся возвратом. + */ + public const QUEUED_STUCK_AFTER_MINUTES = 60; + public function handle(): void { $sandbox = (bool) config('client_tg.sandbox', true); $cutoff = Carbon::now()->subMinutes(self::STUCK_AFTER_MINUTES); // Кросс-тенантное перечисление зависших running через BYPASSRLS-роль, - // БЕЗ открытой транзакции (как ChargeTgNameFeeJob). + // БЕЗ открытой транзакции (как PollTelegramModerationJob). $rows = DB::connection('pgsql_supplier')->table('client_tg_campaigns') ->where('status', Campaign::STATUS_RUNNING) ->where('updated_at', '<', $cutoff) @@ -63,8 +78,8 @@ class SweepStuckTelegramCampaignsJob implements ShouldQueue $hasMtsId = $row->mts_campaign_id !== null && $row->mts_campaign_id !== ''; try { - // Возвращаем true, только если реально перевели в failed (нужен release). - $needsRelease = $this->tenantTx($tenantId, function () use ($campaignId, $hasMtsId): bool { + // Возвращаем true, только если реально перевели в failed (нужен возврат). + $needsRefund = $this->tenantTx($tenantId, function () use ($campaignId, $hasMtsId): bool { // Блокировка + повторная проверка статуса: между перечислением и // этим моментом finalize мог увести кампанию из running (гонка) — // тогда не трогаем (идемпотентность). @@ -86,7 +101,7 @@ class SweepStuckTelegramCampaignsJob implements ShouldQueue return false; } - // Черновика нет → заведомо не ушла → добиваем в failed, бронь вернём. + // Черновика нет → заведомо не ушла → добиваем в failed, смету вернём. $campaign->status_reason = 'Прогон оборвался до создания черновика — кампания не запущена'; $campaign->transitionTo(Campaign::STATUS_FAILED); @@ -97,15 +112,19 @@ class SweepStuckTelegramCampaignsJob implements ShouldQueue return true; }); - // Возврат брони — только для заведомо не ушедших (failed) и только в бою - // (в песочнице заморозки не было). Отдельный tenantTx: сбой возврата не - // должен откатить уже проставленный статус. Ключ совпадает с freeze. - if ($needsRelease && ! $sandbox) { + // Возврат сметы — только для заведомо не ушедших (failed) и только в бою + // (в песочнице денег не списывали, refund найдёт сальдо 0). Отдельный + // tenantTx: сбой возврата не должен откатить уже проставленный статус. + if ($needsRefund && ! $sandbox) { try { - $this->tenantTx($tenantId, fn () => app(AdWalletService::class) - ->release($tenantId, 'telegram', 'campaign', $campaignId)); + $this->tenantTx($tenantId, function () use ($campaignId): void { + $campaign = Campaign::where('id', $campaignId)->first(); + if ($campaign !== null) { + app(TelegramCampaignChargeService::class)->refund($campaign); + } + }); } catch (Throwable $e) { - Log::warning('client_tg.sweep_release_failed', [ + Log::warning('client_tg.sweep_refund_failed', [ 'campaign_id' => $campaignId, 'error' => $e->getMessage(), ]); @@ -120,13 +139,75 @@ class SweepStuckTelegramCampaignsJob implements ShouldQueue } } + $this->sweepStuckQueued(); $this->sweepStuckModeration(); } + /** + * Зависшие `queued` (деньги списаны на launch, но джоб не стартовал). queued не имеет + * `mts_campaign_id` (его ставит робот в running) → робот кабинет не трогал → `failed` + * + возврат сметы. lockForUpdate + повторная проверка статуса: если джоб УЖЕ подхватил + * (стал running) — не трогаем (гонка решается блокировкой; кто первый, того и статус). + */ + private function sweepStuckQueued(): void + { + $sandbox = (bool) config('client_tg.sandbox', true); + $cutoff = Carbon::now()->subMinutes(self::QUEUED_STUCK_AFTER_MINUTES); + + $rows = DB::connection('pgsql_supplier')->table('client_tg_campaigns') + ->where('status', Campaign::STATUS_QUEUED) + ->where('updated_at', '<', $cutoff) + ->get(['id', 'tenant_id']); + + foreach ($rows as $row) { + $tenantId = (int) $row->tenant_id; + $campaignId = (int) $row->id; + + try { + $needsRefund = $this->tenantTx($tenantId, function () use ($campaignId): bool { + $campaign = Campaign::where('id', $campaignId)->lockForUpdate()->first(); + if ($campaign === null || $campaign->status !== Campaign::STATUS_QUEUED) { + return false; // джоб уже подхватил (running) / ушёл дальше — не трогаем + } + + $campaign->status_reason = 'Кампания зависла в очереди — воркер не подхватил задачу; запуск отменён, деньги возвращены'; + $campaign->transitionTo(Campaign::STATUS_FAILED); + + Log::warning('client_tg.sweep_queued_failed', ['campaign_id' => $campaignId]); + + return true; + }); + + // Возврат сметы (в бою). Отдельный tenantTx: сбой возврата не откатит статус. + if ($needsRefund && ! $sandbox) { + try { + $this->tenantTx($tenantId, function () use ($campaignId): void { + $campaign = Campaign::where('id', $campaignId)->first(); + if ($campaign !== null) { + app(TelegramCampaignChargeService::class)->refund($campaign); + } + }); + } catch (Throwable $e) { + Log::warning('client_tg.sweep_queued_refund_failed', [ + 'campaign_id' => $campaignId, + 'error' => $e->getMessage(), + ]); + } + } + } catch (Throwable $e) { + Log::warning('SweepStuckTelegramCampaignsJob: сбой обработки зависшей queued-кампании', [ + 'campaign_id' => $campaignId, + 'tenant_id' => $tenantId, + 'error' => $e->getMessage(), + ]); + } + } + } + /** * Ревью-фикс F4: кампания на модерации дольше окна `client_tg.moderation_stuck_hours` * — робот не смог прочитать вердикт (сломались селекторы кабинета / id протух). - * Уводим в `needs_review` для ручного разбора, БЕЗ возврата брони: кампания могла + * Уводим в `needs_review` для ручного разбора, БЕЗ возврата сметы: кампания могла * реально показываться, деньги вслепую не возвращаем (как ветка «есть mts_id» выше). * Опросчик не трогает строку, пока вердикта нет, поэтому `updated_at` честно растёт. */ diff --git a/app/app/Models/BalanceTransaction.php b/app/app/Models/BalanceTransaction.php index fb3f23d7..e144d472 100644 --- a/app/app/Models/BalanceTransaction.php +++ b/app/app/Models/BalanceTransaction.php @@ -46,6 +46,10 @@ class BalanceTransaction extends Model public const TYPE_SMS_CHARGE = 'sms_charge'; + public const TYPE_TG_AD_CHARGE = 'tg_ad_charge'; + + public const TYPE_TG_AD_REFUND = 'tg_ad_refund'; + public $timestamps = false; protected $fillable = [ diff --git a/app/app/Models/ClientTg/Optout.php b/app/app/Models/ClientTg/Optout.php index a68f3b73..16b63e19 100644 --- a/app/app/Models/ClientTg/Optout.php +++ b/app/app/Models/ClientTg/Optout.php @@ -7,11 +7,12 @@ namespace App\Models\ClientTg; use Illuminate\Database\Eloquent\Model; /** - * Отказ клиента от Telegram-рекламы (по номеру телефона, на уровне тенанта). + * Список «не показывать этим номерам» — ручной exclude-лист тенанта (по номеру + * телефона). В показах рекламы «отписки» нет (реклама показывается пачке в кабинете + * МТС, а не шлётся адресно); это просто номера, которые клиент не хочет включать + * в аудиторию — вырезаются при сборке (TelegramAudienceService). * - * Tenant-aware с RLS. Используется стоп-листом при сборке аудитории. - * - * Источник: миграция client_tg_optouts. + * Tenant-aware с RLS. Источник: миграция client_tg_optouts. */ class Optout extends Model { diff --git a/app/app/Models/ClientTg/Sender.php b/app/app/Models/ClientTg/Sender.php deleted file mode 100644 index 0b2e736d..00000000 --- a/app/app/Models/ClientTg/Sender.php +++ /dev/null @@ -1,55 +0,0 @@ - 'integer', - 'requested_by' => 'integer', - 'monthly_fee_rub' => 'decimal:2', - 'approved_at' => 'datetime', - 'paid_until' => 'date', - 'debt_since' => 'date', - ]; - } -} diff --git a/app/app/Models/ClientTg/Setting.php b/app/app/Models/ClientTg/Setting.php deleted file mode 100644 index 153e8b80..00000000 --- a/app/app/Models/ClientTg/Setting.php +++ /dev/null @@ -1,33 +0,0 @@ - 'decimal:2', - 'name_debt_grace_days' => 'integer', - ]; - } -} diff --git a/app/app/Models/ClientTg/Template.php b/app/app/Models/ClientTg/Template.php deleted file mode 100644 index 6a384ae3..00000000 --- a/app/app/Models/ClientTg/Template.php +++ /dev/null @@ -1,32 +0,0 @@ - 'integer', - ]; - } -} diff --git a/app/app/Services/ClientTg/TelegramAudienceService.php b/app/app/Services/ClientTg/TelegramAudienceService.php index a9a37e5a..bea7ef8b 100644 --- a/app/app/Services/ClientTg/TelegramAudienceService.php +++ b/app/app/Services/ClientTg/TelegramAudienceService.php @@ -110,7 +110,9 @@ final class TelegramAudienceService } /** - * Стоп-лист: убираем номера, по которым клиент отказался (client_tg_optouts). + * Список «не показывать этим номерам»: вырезаем из аудитории номера, которые клиент + * пометил как исключаемые (client_tg_optouts). В показах рекламы «отписок» нет — это + * ручной exclude-лист тенанта. * * @param list $phones * @return list diff --git a/app/app/Services/ClientTg/TelegramAutoAccumulator.php b/app/app/Services/ClientTg/TelegramAutoAccumulator.php index 1d4d3f19..99e654d0 100644 --- a/app/app/Services/ClientTg/TelegramAutoAccumulator.php +++ b/app/app/Services/ClientTg/TelegramAutoAccumulator.php @@ -6,11 +6,9 @@ namespace App\Services\ClientTg; use App\Exceptions\Billing\InsufficientBalanceException; use App\Jobs\ClientTg\RunTelegramCampaignJob; -use App\Models\AdWallet; use App\Models\ClientTg\AutoRule; use App\Models\ClientTg\Campaign; use App\Models\ClientTg\CampaignPhone; -use App\Services\Advertising\AdWalletService; use App\Support\PhoneNormalizer; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\DB; @@ -20,8 +18,9 @@ use Illuminate\Support\Facades\Log; * Накопитель авто-режима Telegram-рекламы (план §Сессия 4, задача 4.1). * * Копит номера новых лидов в один «открытый» черновик авто-кампании; когда наберётся - * пачка (≥ порога кандидатов — по умолчанию 367), доводит смету и ставит кампанию в - * очередь В РАМКАХ `budget_cap_rub` из авто-правила. Ниже порога — только копим. + * пачка (≥ порога кандидатов — по умолчанию 367), доводит смету, СПИСЫВАЕТ клиентскую + * смету с общего баланса (как ручной launch) и ставит кампанию в очередь. Ниже порога — + * только копим. `budget_cap_rub` из правила — лимит трат в кабинете МТС, не резерв. * * 🔴 Отличие от СМС-близнеца: СМС шлёт по одной на каждый лид, Telegram копит ПАЧКУ — * МТС Маркетолог показывает рекламу загруженной базе целиком, а не по одному номеру. @@ -34,7 +33,7 @@ class TelegramAutoAccumulator public function __construct( private readonly TelegramAudienceService $audience, private readonly TelegramTariffService $tariff, - private readonly AdWalletService $wallets, + private readonly TelegramCampaignChargeService $charger, ) {} /** @@ -69,11 +68,11 @@ class TelegramAutoAccumulator ]); } - // Кандидаты (нормализованы, без дублей/стоп-листа) + смета-потолок для UI. + // Кандидаты (нормализованы, без дублей/стоп-листа) + клиентская смета (с наценкой). $candidates = $this->audience->build($campaign)->candidatesCount; $campaign->update([ 'planned_count' => $candidates, - 'estimated_cost_rub' => $this->tariff->estimateRub($candidates), + 'estimated_cost_rub' => $this->tariff->clientEstimateRub($candidates), ]); // Порог пачки — из правила (клиент мог поднять), иначе дефолт из конфига. @@ -91,16 +90,15 @@ class TelegramAutoAccumulator } /** - * Предохранитель авто-рассылки (план §Этап 5, задача 5.1 + ревью-фикс F3). В + * Предохранитель авто-рекламы (план §Этап 5, задача 5.1 + ревью-фикс F3). В * песочнице деньги не трогаются — гейта нет (как ручной launch). В бою: - * - смета пачки + трата за сегодня не должна превышать дневной лимит правила - * (дефолт 0 → авто выключено); - * - свободного остатка (balance − frozen) должно хватать на ПОТОЛОК брони - * (budget_cap_rub) — его и бронируем симметрично ручному launch, иначе кампания - * уходила в очередь без зарезервированных денег (находка I2). + * - смета пачки (клиентская, с наценкой) + трата за сегодня не должна превышать + * дневной лимит правила (дефолт 0 → авто выключено); + * - клиентская смета СПИСЫВАЕТСЯ с общего баланса (charge, как ручной launch) — + * не хватило → мягко пропускаем (приём лидов не должен падать). * Всё под `lockForUpdate` строки правила — счётчик `spent_today_rub` не гоняется * двумя параллельными джобами одного тенанта. Не прошла — держим черновиком и - * пишем причину; прошла — бронируем потолок и учитываем трату за сегодня. + * пишем причину; прошла — списываем смету и учитываем трату за сегодня. */ private function passesSafeguard(int $tenantId, AutoRule $rule, Campaign $campaign): bool { @@ -109,10 +107,9 @@ class TelegramAutoAccumulator } $cost = (string) $campaign->estimated_cost_rub; - $cap = (string) $campaign->budget_cap_rub; $today = Carbon::now()->toDateString(); - return DB::transaction(function () use ($tenantId, $rule, $campaign, $cost, $cap, $today): bool { + return DB::transaction(function () use ($tenantId, $rule, $campaign, $cost, $today): bool { $locked = AutoRule::where('id', $rule->id)->lockForUpdate()->first(); if ($locked === null) { return false; @@ -135,34 +132,17 @@ class TelegramAutoAccumulator return false; } - $wallet = AdWallet::where('tenant_id', $tenantId)->first(); - $free = $wallet !== null - ? bcsub((string) $wallet->balance_rub, (string) $wallet->frozen_rub, 2) - : '0.00'; - - if (bccomp($free, $cap, 2) < 0) { + // Списываем клиентскую смету с общего баланса симметрично ручному launch. + // Не хватило — мягко пропускаем (кампания остаётся черновиком, приём лидов + // не падает). Идемпотентность charge по сальдо: повтор не задвоит. + try { + $this->charger->charge($campaign, $cost); + } catch (InsufficientBalanceException $e) { Log::info('client_tg.auto_skipped', [ 'reason' => 'insufficient_balance', 'tenant_id' => $tenantId, 'campaign_id' => $campaign->id, - 'cap_rub' => $cap, - 'free_rub' => $free, - ]); - - return false; - } - - // Бронируем потолок симметрично ручному launch. InsufficientBalance тут не - // ожидается (free≥cap выше), но при гонке с другим каналом ловим и мягко - // пропускаем — приём лидов не должен падать. - try { - $this->wallets->freeze($tenantId, 'telegram', 'campaign', $campaign->id, $cap); - } catch (InsufficientBalanceException $e) { - Log::info('client_tg.auto_skipped', [ - 'reason' => 'insufficient_balance_race', - 'tenant_id' => $tenantId, - 'campaign_id' => $campaign->id, - 'cap_rub' => $cap, + 'cost_rub' => $cost, ]); return false; diff --git a/app/app/Services/ClientTg/TelegramCampaignChargeService.php b/app/app/Services/ClientTg/TelegramCampaignChargeService.php new file mode 100644 index 00000000..f9c94ddf --- /dev/null +++ b/app/app/Services/ClientTg/TelegramCampaignChargeService.php @@ -0,0 +1,147 @@ +tenant_id)->lockForUpdate()->firstOrFail(); + + // Идемпотентность по сальдо — строго ПОСЛЕ взятия замка. Есть непогашенное + // списание (charges > refunds) → повтор не списывает. После возврата сальдо + // выравнивается и новое списание (пересдача) проходит. + if ($this->hasOutstandingCharge($campaign)) { + return; + } + + if (bccomp($priceRub, '0', 2) === 0) { + return; + } + + if (bccomp((string) $tenant->balance_rub, $priceRub, 2) < 0) { + throw new InsufficientBalanceException( + priceKopecks: (int) bcmul($priceRub, '100', 0), + balanceRub: (string) $tenant->balance_rub, + ); + } + + $newBalance = bcsub((string) $tenant->balance_rub, $priceRub, 2); + + DB::table('tenants')->where('id', $tenant->id)->update(['balance_rub' => $newBalance]); + + BalanceTransaction::create([ + 'tenant_id' => $tenant->id, + 'type' => BalanceTransaction::TYPE_TG_AD_CHARGE, + 'amount_rub' => '-'.$priceRub, + 'amount_leads' => null, + 'balance_rub_after' => $newBalance, + 'balance_leads_after' => null, + 'related_type' => Campaign::class, + 'related_id' => $campaign->id, + 'created_at' => now(), + ]); + }); + } + + /** + * Вернуть ранее списанную смету на общий баланс тенанта. Идемпотентно: + * если списания не было или возврат уже сделан — ничего не делает. + */ + public function refund(Campaign $campaign): void + { + DB::transaction(function () use ($campaign): void { + /** @var Tenant $tenant */ + $tenant = Tenant::whereKey($campaign->tenant_id)->lockForUpdate()->firstOrFail(); + + // Нечего возвращать — непогашенного списания нет (списаний не было или все + // уже возвращены). + if (! $this->hasOutstandingCharge($campaign)) { + return; + } + + /** @var BalanceTransaction $chargeTx */ + $chargeTx = BalanceTransaction::query() + ->where('type', BalanceTransaction::TYPE_TG_AD_CHARGE) + ->where('related_type', Campaign::class) + ->where('related_id', $campaign->id) + ->orderByDesc('id') + ->firstOrFail(); + + // Сумма возврата = модуль ПОСЛЕДНЕГО (непогашенного) списания + // (amount_rub у charge отрицательный). + $amount = ltrim((string) $chargeTx->amount_rub, '-'); + + if (bccomp($amount, '0', 2) === 0) { + return; + } + + $newBalance = bcadd((string) $tenant->balance_rub, $amount, 2); + + DB::table('tenants')->where('id', $tenant->id)->update(['balance_rub' => $newBalance]); + + BalanceTransaction::create([ + 'tenant_id' => $tenant->id, + 'type' => BalanceTransaction::TYPE_TG_AD_REFUND, + 'amount_rub' => $amount, + 'amount_leads' => null, + 'balance_rub_after' => $newBalance, + 'balance_leads_after' => null, + 'related_type' => Campaign::class, + 'related_id' => $campaign->id, + 'created_at' => now(), + ]); + }); + } + + /** Есть ли по кампании непогашенное списание: count(tg_ad_charge) > count(tg_ad_refund). */ + private function hasOutstandingCharge(Campaign $campaign): bool + { + $charges = BalanceTransaction::query() + ->where('type', BalanceTransaction::TYPE_TG_AD_CHARGE) + ->where('related_type', Campaign::class) + ->where('related_id', $campaign->id) + ->count(); + + $refunds = BalanceTransaction::query() + ->where('type', BalanceTransaction::TYPE_TG_AD_REFUND) + ->where('related_type', Campaign::class) + ->where('related_id', $campaign->id) + ->count(); + + return $charges > $refunds; + } +} diff --git a/app/app/Services/ClientTg/TelegramSenderService.php b/app/app/Services/ClientTg/TelegramSenderService.php deleted file mode 100644 index fec424f9..00000000 --- a/app/app/Services/ClientTg/TelegramSenderService.php +++ /dev/null @@ -1,247 +0,0 @@ -first(); - if ($existing !== null) { - if ($existing->status === Sender::STATUS_ACTIVE) { - throw new DomainException('У вас уже есть активное имя отправителя'); - } - if ($existing->status === Sender::STATUS_PENDING) { - throw new DomainException('Заявка на имя уже на рассмотрении'); - } - } - - $monthlyFee = (string) (Setting::query()->value('name_fee_rub_per_month') ?? '2500.00'); - $sandbox = (bool) config('client_tg.sandbox', true); - - return DB::transaction(function () use ($tenantId, $name, $requestedBy, $monthlyFee, $sandbox): Sender { - $sender = Sender::updateOrCreate( - ['tenant_id' => $tenantId], - [ - 'name' => $name, - 'status' => Sender::STATUS_PENDING, - 'monthly_fee_rub' => $monthlyFee, - 'requested_by' => $requestedBy, - 'note' => null, - 'approved_at' => null, - 'paid_until' => null, - 'debt_since' => null, - ], - ); - - // Бронь ПОСЛЕ создания строки: freeze бросит InsufficientBalanceException - // при недоборе → транзакция откатится, заявка не сохранится. - if (! $sandbox) { - $this->wallet->freeze($tenantId, self::CHANNEL, self::SOURCE, $sender->id, $monthlyFee); - } - - return $sender; - }); - } - - /** Клиент отключает своё имя. У pending снимаем бронь; ставим cancelled. */ - public function disableSender(int $tenantId): Sender - { - $sender = Sender::where('tenant_id', $tenantId)->first(); - if ($sender === null) { - throw new ModelNotFoundException('Имя отправителя не найдено'); - } - - $sandbox = (bool) config('client_tg.sandbox', true); - - DB::transaction(function () use ($tenantId, $sender, $sandbox): void { - if ($sender->status === Sender::STATUS_PENDING && ! $sandbox) { - $this->wallet->release($tenantId, self::CHANNEL, self::SOURCE, $sender->id); - } - $sender->update(['status' => Sender::STATUS_CANCELLED]); - }); - - return $sender->fresh(); - } - - /** - * Клиент включает отключённое за долг имя обратно (suspended → active). В бою: - * проверяем средства ДО списания (charge не бросает) и списываем плату за текущий - * период; идемпотентность по external_key {Y-m} не даёт списать дважды за один - * календарный месяц. В песочнице деньги не трогаем. - */ - public function enableSender(int $tenantId): Sender - { - $sender = Sender::where('tenant_id', $tenantId)->first(); - if ($sender === null) { - throw new ModelNotFoundException('Имя отправителя не найдено'); - } - if ($sender->status !== Sender::STATUS_SUSPENDED) { - throw new DomainException('Имя не отключено'); - } - - $sandbox = (bool) config('client_tg.sandbox', true); - - return DB::transaction(function () use ($tenantId, $sender, $sandbox): Sender { - if (! $sandbox) { - $fee = (string) $sender->monthly_fee_rub; - $wallet = AdWallet::where('tenant_id', $tenantId)->first(); - $free = $wallet !== null - ? bcsub((string) $wallet->balance_rub, (string) $wallet->frozen_rub, 2) - : '0.00'; - if (bccomp($free, $fee, 2) < 0) { - throw new InsufficientBalanceException( - priceKopecks: (int) bcmul($fee, '100', 0), - balanceRub: $free, - ); - } - - $externalKey = 'telegram:sender:'.$sender->id.':'.Carbon::now()->format('Y-m'); - $this->wallet->charge($tenantId, self::CHANNEL, self::SOURCE, $sender->id, $fee, $externalKey); - } - - $sender->update([ - 'status' => Sender::STATUS_ACTIVE, - 'paid_until' => Carbon::now()->addMonthNoOverflow()->toDateString(), - 'debt_since' => null, - 'note' => null, - ]); - - return $sender->fresh(); - }); - } - - /** - * Снимок имени для кабинета: сам отправитель (или null), режим песочницы и остаток - * грейса (дней до автоотключения) для имени с долгом. Грейс — из настроек - * (name_debt_grace_days, по умолчанию 29), как в помесячном джобе. - * - * @return array{sender: Sender|null, grace_days_left: int|null, sandbox: bool} - */ - public function snapshot(int $tenantId): array - { - $sender = Sender::where('tenant_id', $tenantId)->first(); - - $graceDaysLeft = null; - if ($sender !== null && $sender->debt_since !== null) { - $grace = (int) (Setting::query()->value('name_debt_grace_days') ?? 29); - $used = (int) Carbon::parse($sender->debt_since)->diffInDays(Carbon::now()); - $graceDaysLeft = max(0, $grace - $used); - } - - return [ - 'sender' => $sender, - 'grace_days_left' => $graceDaysLeft, - 'sandbox' => (bool) config('client_tg.sandbox', true), - ]; - } - - /** Админ одобряет: списывает плату, снимает бронь, active + paid_until +1мес. */ - public function approve(int $senderId): Sender - { - $sender = Sender::findOrFail($senderId); - if ($sender->status !== Sender::STATUS_PENDING) { - throw new DomainException('Имя не в статусе на рассмотрении'); - } - - $sandbox = (bool) config('client_tg.sandbox', true); - - DB::transaction(function () use ($sender, $sandbox): void { - if (! $sandbox) { - $externalKey = 'telegram:sender:'.$sender->id.':'.Carbon::now()->format('Y-m'); - $this->wallet->charge( - (int) $sender->tenant_id, self::CHANNEL, self::SOURCE, $sender->id, - (string) $sender->monthly_fee_rub, $externalKey, - ); - $this->wallet->release((int) $sender->tenant_id, self::CHANNEL, self::SOURCE, $sender->id); - } - - $sender->update([ - 'status' => Sender::STATUS_ACTIVE, - 'approved_at' => Carbon::now(), - 'paid_until' => Carbon::now()->addMonthNoOverflow()->toDateString(), - 'debt_since' => null, - ]); - }); - - return $sender->fresh(); - } - - /** Админ отклоняет: снимает бронь, ставит rejected с заметкой. */ - public function reject(int $senderId, ?string $note = null): Sender - { - $sender = Sender::findOrFail($senderId); - if ($sender->status !== Sender::STATUS_PENDING) { - throw new DomainException('Имя не в статусе на рассмотрении'); - } - - $sandbox = (bool) config('client_tg.sandbox', true); - - DB::transaction(function () use ($sender, $sandbox, $note): void { - if (! $sandbox) { - $this->wallet->release((int) $sender->tenant_id, self::CHANNEL, self::SOURCE, $sender->id); - } - $sender->update([ - 'status' => Sender::STATUS_REJECTED, - 'note' => $note, - ]); - }); - - return $sender->fresh(); - } - - /** Админ служебно отключает имя (suspended). */ - public function disableByAdmin(int $senderId): Sender - { - $sender = Sender::findOrFail($senderId); - - $sandbox = (bool) config('client_tg.sandbox', true); - - DB::transaction(function () use ($sender, $sandbox): void { - if ($sender->status === Sender::STATUS_PENDING && ! $sandbox) { - $this->wallet->release((int) $sender->tenant_id, self::CHANNEL, self::SOURCE, $sender->id); - } - $sender->update([ - 'status' => Sender::STATUS_SUSPENDED, - 'note' => 'Отключено владельцем — погасить у МТС', - ]); - }); - - return $sender->fresh(); - } -} diff --git a/app/app/Services/ClientTg/TelegramTariffService.php b/app/app/Services/ClientTg/TelegramTariffService.php index 696b124b..fb9066cb 100644 --- a/app/app/Services/ClientTg/TelegramTariffService.php +++ b/app/app/Services/ClientTg/TelegramTariffService.php @@ -30,4 +30,15 @@ final class TelegramTariffService { return bcmul((string) max($impressions, 0), $this->pricePerImpressionRub($impressions), 2); } + + /** + * Клиентская смета = базовая смета × наценка (config client_tg.markup). + * Это цена, которую клиент ВИДИТ и ПЛАТИТ (базовый тариф — себестоимость-оценка). + */ + public function clientEstimateRub(int $impressions): string + { + $markup = (string) config('client_tg.markup', '1.40'); + + return bcmul($this->estimateRub($impressions), $markup, 2); + } } diff --git a/app/config/client_tg.php b/app/config/client_tg.php index dc547ebe..6da04fc6 100644 --- a/app/config/client_tg.php +++ b/app/config/client_tg.php @@ -14,6 +14,16 @@ return [ */ 'sandbox' => filter_var(env('TG_SANDBOX', true), FILTER_VALIDATE_BOOL), + /* + |-------------------------------------------------------------------------- + | Наценка на клиентскую цену Telegram-рекламы + |-------------------------------------------------------------------------- + | Клиент платит цену С наценкой: клиентская смета = базовая смета тарифа + | (себестоимость-оценка) × markup. 1.40 = +40%. Строка для bcmath (scale 2). + | Меняется без правки кода через env TG_MARKUP. + */ + 'markup' => (string) env('TG_MARKUP', '1.40'), + /* |-------------------------------------------------------------------------- | Порог авто-пачки diff --git a/app/database/migrations/2026_07_27_000003_create_client_tg_messages.php b/app/database/migrations/2026_07_27_000003_create_client_tg_messages.php deleted file mode 100644 index 182c4a51..00000000 --- a/app/database/migrations/2026_07_27_000003_create_client_tg_messages.php +++ /dev/null @@ -1,43 +0,0 @@ -id(); - $table->foreignId('tenant_id')->constrained('tenants')->cascadeOnDelete(); - $table->unsignedBigInteger('campaign_id')->nullable(); - $table->unsignedBigInteger('deal_id')->nullable(); - $table->string('phone', 11); - $table->text('operator')->nullable(); - $table->string('provider_key', 32)->nullable(); - $table->string('status', 24); - $table->decimal('cost_rub', 14, 2)->default('0.00'); - $table->string('provider_message_id', 64)->nullable(); - $table->string('error', 255)->nullable(); - $table->timestamps(); - - $table->index(['tenant_id', 'campaign_id']); - $table->index(['tenant_id', 'deal_id']); - $table->unique(['tenant_id', 'campaign_id', 'phone'], 'client_tg_messages_tenant_campaign_phone_unique'); - }); - - DB::statement('ALTER TABLE client_tg_messages ENABLE ROW LEVEL SECURITY'); - DB::statement('ALTER TABLE client_tg_messages FORCE ROW LEVEL SECURITY'); - DB::statement('DROP POLICY IF EXISTS tenant_isolation ON client_tg_messages'); - DB::statement("CREATE POLICY tenant_isolation ON client_tg_messages USING (tenant_id = NULLIF(current_setting('app.current_tenant_id', true), '')::bigint)"); - - DB::statement('GRANT SELECT, INSERT, UPDATE ON client_tg_messages TO crm_app_user'); - } - - public function down(): void - { - Schema::dropIfExists('client_tg_messages'); - } -}; diff --git a/app/database/migrations/2026_07_27_000006_create_client_tg_templates.php b/app/database/migrations/2026_07_27_000006_create_client_tg_templates.php deleted file mode 100644 index f9798dff..00000000 --- a/app/database/migrations/2026_07_27_000006_create_client_tg_templates.php +++ /dev/null @@ -1,34 +0,0 @@ -id(); - $table->foreignId('tenant_id')->constrained('tenants')->cascadeOnDelete(); - $table->string('title', 200); - $table->string('body', 1000); - $table->timestamps(); - - $table->index(['tenant_id']); - }); - - DB::statement('ALTER TABLE client_tg_templates ENABLE ROW LEVEL SECURITY'); - DB::statement('ALTER TABLE client_tg_templates FORCE ROW LEVEL SECURITY'); - DB::statement('DROP POLICY IF EXISTS tenant_isolation ON client_tg_templates'); - DB::statement("CREATE POLICY tenant_isolation ON client_tg_templates USING (tenant_id = NULLIF(current_setting('app.current_tenant_id', true), '')::bigint)"); - - DB::statement('GRANT SELECT, INSERT, UPDATE, DELETE ON client_tg_templates TO crm_app_user'); - } - - public function down(): void - { - Schema::dropIfExists('client_tg_templates'); - } -}; diff --git a/app/database/migrations/2026_07_27_000008_create_client_tg_settings.php b/app/database/migrations/2026_07_27_000008_create_client_tg_settings.php deleted file mode 100644 index f39562e4..00000000 --- a/app/database/migrations/2026_07_27_000008_create_client_tg_settings.php +++ /dev/null @@ -1,43 +0,0 @@ -id(); - $table->decimal('name_fee_rub_per_month', 10, 2)->default('2500.00'); - $table->integer('name_debt_grace_days')->default(29); - $table->timestamps(); - }); - - DB::table('client_tg_settings')->insert([ - 'name_fee_rub_per_month' => '2500.00', - 'name_debt_grace_days' => 29, - 'created_at' => now(), - 'updated_at' => now(), - ]); - - DB::statement(<<<'SQL' -DO $$ -BEGIN - IF EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'crm_app_user') THEN - GRANT SELECT ON client_tg_settings TO crm_app_user; - END IF; - IF EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'crm_admin_user') THEN - GRANT SELECT, INSERT, UPDATE, DELETE ON client_tg_settings TO crm_admin_user; - END IF; -END $$; -SQL); - } - - public function down(): void - { - Schema::dropIfExists('client_tg_settings'); - } -}; diff --git a/app/database/migrations/2026_07_27_000010_create_client_tg_senders.php b/app/database/migrations/2026_07_27_000010_create_client_tg_senders.php deleted file mode 100644 index ae8306f4..00000000 --- a/app/database/migrations/2026_07_27_000010_create_client_tg_senders.php +++ /dev/null @@ -1,60 +0,0 @@ -id(); - $table->foreignId('tenant_id')->constrained('tenants')->cascadeOnDelete(); - $table->string('name', 64); - $table->string('status', 16)->default('pending'); - $table->decimal('monthly_fee_rub', 10, 2)->default('0.00'); - $table->string('note', 255)->nullable(); - $table->unsignedBigInteger('requested_by')->nullable(); - $table->timestampTz('approved_at')->nullable(); - $table->date('paid_until')->nullable(); - $table->date('debt_since')->nullable(); - $table->timestamps(); - - $table->unique('tenant_id'); - }); - - DB::statement('ALTER TABLE client_tg_senders ENABLE ROW LEVEL SECURITY'); - DB::statement('ALTER TABLE client_tg_senders FORCE ROW LEVEL SECURITY'); - DB::statement('DROP POLICY IF EXISTS tenant_isolation ON client_tg_senders'); - DB::statement("CREATE POLICY tenant_isolation ON client_tg_senders USING (tenant_id = NULLIF(current_setting('app.current_tenant_id', true), '')::bigint)"); - - DB::statement('GRANT SELECT, INSERT, UPDATE ON client_tg_senders TO crm_app_user'); - - // Помесячный джоб перечисляет активные имена кросс-тенантно через - // crm_supplier_worker (BYPASSRLS); админ (crm_admin_user) согласует. - DB::statement(<<<'SQL' -DO $$ -BEGIN - IF EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'crm_supplier_worker') THEN - GRANT SELECT ON client_tg_senders TO crm_supplier_worker; - END IF; - IF EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'crm_admin_user') THEN - GRANT SELECT, UPDATE ON client_tg_senders TO crm_admin_user; - END IF; -END $$; -SQL); - } - - public function down(): void - { - Schema::dropIfExists('client_tg_senders'); - } -}; diff --git a/app/database/migrations/2026_07_28_000001_extend_balance_transactions_type_for_telegram.php b/app/database/migrations/2026_07_28_000001_extend_balance_transactions_type_for_telegram.php new file mode 100644 index 00000000..7e93c0d9 --- /dev/null +++ b/app/database/migrations/2026_07_28_000001_extend_balance_transactions_type_for_telegram.php @@ -0,0 +1,44 @@ + { await apiClient.post(`/api/admin/invoices/${id}/mark-paid`); } -// --- Клиентская Telegram-реклама: тарифы + настройки (задача 4.4) ----------- +// --- Клиентская Telegram-реклама: тарифная сетка (задача 4.4) --------------- // Зеркало SMS-функций выше. Ступень = ₽ за показ по объёму (у нас — потолок/оценка). /** Ступень тарифа Telegram-рекламы. */ @@ -647,16 +647,9 @@ export interface AdminTgTariffRow { price_rub: string; } -/** Настройки платного имени (часть GET /api/admin/telegram/tariffs, а также PUT /api/admin/telegram/settings). */ -export interface AdminTgSettings { - name_fee_rub_per_month: string; - name_debt_grace_days: number; -} - /** Ответ GET /api/admin/telegram/tariffs. */ export interface AdminTgTariffsResponse { tariffs: AdminTgTariff[]; - settings: AdminTgSettings; } /** Ответ PUT /api/admin/telegram/tariffs — заменённый набор ступеней. */ @@ -664,7 +657,7 @@ export interface AdminTgTariffsUpdateResponse { tariffs: AdminTgTariff[]; } -/** GET /api/admin/telegram/tariffs — ступени тарифа + настройки платного имени. */ +/** GET /api/admin/telegram/tariffs — ступени тарифа. */ export async function fetchTgTariffs(): Promise { const { data } = await apiClient.get('/api/admin/telegram/tariffs'); return data; @@ -676,16 +669,3 @@ export async function updateTgTariffs(rows: AdminTgTariffRow[]): Promise('/api/admin/telegram/tariffs', { rows }); return data; } - -/** PUT /api/admin/telegram/settings — плата за имя/мес и срок долга до отключения. */ -export async function updateTgSettings( - nameFeeRubPerMonth: string, - nameDebtGraceDays: number, -): Promise { - await ensureCsrfCookie(); - const { data } = await apiClient.put('/api/admin/telegram/settings', { - name_fee_rub_per_month: nameFeeRubPerMonth, - name_debt_grace_days: nameDebtGraceDays, - }); - return data; -} diff --git a/app/resources/js/api/telegram.ts b/app/resources/js/api/telegram.ts index db8df08f..1eda0c4e 100644 --- a/app/resources/js/api/telegram.ts +++ b/app/resources/js/api/telegram.ts @@ -111,55 +111,19 @@ export async function resubmitTelegram(id: number, payload: TelegramResubmitPayl } /** - * Своё имя отправителя Telegram-рекламы (план §Этап 5, задачи 5.2/5.3). - * Один отправитель на тенанта; клиент заводит/отключает/включает его из кабинета. + * POST /api/telegram/campaigns/{id}/media — приложить картинку/видео к ЧЕРНОВИКУ + * объявления (png/jpg/gif или mp4, ≤50 МБ). Робот отдаёт файл кабинету МТС при запуске. */ -export interface TelegramSender { - id: number; - name: string; - status: string; - monthly_fee_rub?: string; - paid_until?: string | null; - debt_since?: string | null; - note?: string | null; -} - -/** Ответ GET /api/telegram/sender — сам отправитель (или null), остаток грейса, режим. */ -export interface TelegramSenderSnapshot { - sender: TelegramSender | null; - grace_days_left: number | null; - sandbox: boolean; -} - -/** GET /api/telegram/sender — статус имени тенанта. */ -export async function fetchSender(): Promise { - const { data } = await apiClient.get('/api/telegram/sender'); - return data; -} - -/** POST /api/telegram/sender — завести имя (в песочнице деньги не трогаются). */ -export async function createSender(name: string): Promise { +export async function uploadTelegramMedia(id: number, file: File): Promise { await ensureCsrfCookie(); - const { data } = await apiClient.post('/api/telegram/sender', { name }); - return data; -} - -/** POST /api/telegram/sender/disable — отключить имя. */ -export async function disableSender(): Promise { - await ensureCsrfCookie(); - const { data } = await apiClient.post('/api/telegram/sender/disable'); - return data; -} - -/** POST /api/telegram/sender/enable — включить отключённое за долг имя обратно. */ -export async function enableSender(): Promise { - await ensureCsrfCookie(); - const { data } = await apiClient.post('/api/telegram/sender/enable'); + const form = new FormData(); + form.append('media', file); + const { data } = await apiClient.post(`/api/telegram/campaigns/${id}/media`, form); return data; } /** - * Правило авторассылки Telegram (план §Этап 5, задача 5.4). Одно на тенанта: клиент + * Правило авто-рекламы Telegram (план §Этап 5, задача 5.4). Одно на тенанта: клиент * из кабинета включает авто, задаёт объявление, порог пачки, бюджет и дневной лимит. */ export interface TelegramAutoRule { @@ -173,13 +137,13 @@ export interface TelegramAutoRule { batch_threshold: number | null; } -/** GET /api/telegram/auto-rule — правило авторассылки тенанта (или дефолты). */ +/** GET /api/telegram/auto-rule — правило авто-рекламы тенанта (или дефолты). */ export async function fetchAutoRule(): Promise { const { data } = await apiClient.get('/api/telegram/auto-rule'); return data; } -/** PUT /api/telegram/auto-rule — сохранить правило авторассылки. */ +/** PUT /api/telegram/auto-rule — сохранить правило авто-рекламы. */ export async function saveAutoRule(payload: TelegramAutoRule): Promise { await ensureCsrfCookie(); const { data } = await apiClient.put('/api/telegram/auto-rule', payload); diff --git a/app/resources/js/views/admin/AdminTgView.vue b/app/resources/js/views/admin/AdminTgView.vue index 073d7185..1712c6c2 100644 --- a/app/resources/js/views/admin/AdminTgView.vue +++ b/app/resources/js/views/admin/AdminTgView.vue @@ -1,34 +1,22 @@ @@ -148,40 +121,5 @@ onMounted(load); Сохранено - - - - Своё имя / бренд - -
    - - -
    -
    - - - Сохранить настройки - - Сохранено - -
    diff --git a/app/resources/js/views/advertising/AdvertisingTelegramView.vue b/app/resources/js/views/advertising/AdvertisingTelegramView.vue index b80039ea..4eedb473 100644 --- a/app/resources/js/views/advertising/AdvertisingTelegramView.vue +++ b/app/resources/js/views/advertising/AdvertisingTelegramView.vue @@ -14,17 +14,16 @@ import { createTelegram, launchTelegram, resubmitTelegram, + uploadTelegramMedia, type TelegramCampaign, type TelegramAudienceKind, type TelegramCreatePayload, } from '../../api/telegram'; -import TelegramSenderPanel from './TelegramSenderPanel.vue'; import TelegramAutoRulePanel from './TelegramAutoRulePanel.vue'; const loading = ref(false); const sandbox = ref(false); const balanceRub = ref('0.00'); -const frozenRub = ref('0.00'); const campaigns = ref([]); const adText = ref(''); @@ -34,6 +33,8 @@ const audienceDays = ref('30'); const phonesText = ref(''); const budgetCap = ref(''); const ordCategory = ref('Размещение рекламы'); +// Необязательное медиа объявления (картинка/видео) — у МТС объявление может быть с медиа. +const mediaFile = ref(null); // Двухшаговый поток (спека §5): «Рассчитать» создаёт черновик со сметой/охватом, // «Запустить» переводит его в очередь. draft — результат последнего расчёта; любая @@ -90,7 +91,6 @@ async function load(): Promise { const data = await fetchTelegram(); sandbox.value = data.sandbox; balanceRub.value = data.balance_rub; - frozenRub.value = data.frozen_rub; campaigns.value = data.campaigns; } finally { loading.value = false; @@ -127,7 +127,11 @@ async function calc(): Promise { error.value = ''; calculating.value = true; try { - draft.value = await createTelegram(buildPayload()); + const created = await createTelegram(buildPayload()); + // Приложили картинку/видео — грузим к свежему черновику (робот отдаст его кабинету МТС). + draft.value = mediaFile.value + ? await uploadTelegramMedia(created.id, mediaFile.value) + : created; } catch { error.value = 'Не удалось рассчитать кампанию'; } finally { @@ -143,10 +147,11 @@ async function launch(): Promise { try { await launchTelegram(draft.value.id); draft.value = null; + mediaFile.value = null; await load(); } catch (e: unknown) { const status = (e as { response?: { status?: number } })?.response?.status; - error.value = status === 409 ? 'Не хватает денег на кошельке продвижения' : 'Не удалось запустить кампанию'; + error.value = status === 409 ? 'Не хватает денег на балансе' : 'Не удалось запустить кампанию'; } finally { submitting.value = false; } @@ -154,7 +159,7 @@ async function launch(): Promise { // Любая правка формы делает прежний расчёт недействительным — прячем смету и // снова требуем «Рассчитать», чтобы запуск шёл строго по актуальным данным. -watch([adText, adLink, audienceKind, audienceDays, phonesText, budgetCap, ordCategory], () => { +watch([adText, adLink, audienceKind, audienceDays, phonesText, budgetCap, ordCategory, mediaFile], () => { draft.value = null; }); @@ -206,7 +211,7 @@ async function submitResubmit(): Promise { await load(); } catch (e: unknown) { const status = (e as { response?: { status?: number } })?.response?.status; - error.value = status === 409 ? 'Не хватает денег на кошельке продвижения' : 'Не удалось пересдать кампанию'; + error.value = status === 409 ? 'Не хватает денег на балансе' : 'Не удалось пересдать кампанию'; } finally { resubmitting.value = false; } @@ -256,14 +261,12 @@ onUnmounted(() => { {{ error }} - - Новая кампания - Баланс кошелька продвижения: {{ balanceRub }} ₽ (заморожено {{ frozenRub }} ₽) + Общий баланс: {{ balanceRub }} ₽ { variant="outlined" /> + + /** - * Панель «Авторассылка новым лидам» Telegram-рекламы (план §Этап 5, задача 5.4). + * Панель «Авто-реклама новым лидам» Telegram-рекламы (план §Этап 5, задача 5.4). * * Самодостаточна: грузит правило (fetchAutoRule) и даёт клиенту включить авто-режим, * задать объявление, порог пачки, бюджет на кампанию и дневной лимит трат. Живёт @@ -80,7 +80,7 @@ onMounted(load);

    u=`7;_B1of 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%0Abg=I1(6kf$2Z#9}*tPYK@yumh! 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 literal 0 HcmV?d00001 diff --git a/docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-06-wizard-step4-review.png b/docs/superpowers/findings/2026-07-25-reklama-modul-audit/audit-06-wizard-step4-review.png new file mode 100644 index 0000000000000000000000000000000000000000..ddff703ab1feb1098a3fec887ceb754dbd0e5693 GIT binary patch literal 111967 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%0A=d7?Xt3-|8qi%t&2adRs~{{l7WSxBz6!g!dall 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�X=W|5K^b7(Z0gPRH-04* zo;efiJfST$dE{Oj50#w4bl=FPunng_BV39rNfEc7PGr@# zJmsoqCE4en6$|SUNIB?)eY7JAYAKA}P^jELmqP3%dZfFEGr_;v5Wkz{oXXU2in%p^ zR9`mfaF~t$3&9Ut$U@xVa&XPat&}+#>zkS_W+x{$vsi$FI4}74%;?Fz@0|srU=Vei zALk5E82^wE2h?AZnMXf~`^_>}qk^?es6;nQFz!p0s@?r0uGCbX4{K z=ReJa&S{Tyivl1v*Kde4#Ek2lcIQUN&0|>|hu_@CIj!z@3bL~IKizb3{PQ<}PH$qu zelms62qur`9*bXvfKT>_Gj^gj7s|WTzyjj{?veJVc}!&?j1|Z^3kmu2JGoHt{am`bkYi~32$nivxnGY0x;eQ;fnZ}>_y?M5W9c%>kGhcCZcY*o8dg7HzD;L~dY+M0np{Y=S>khy z36Op;S-+y}{9IVOUWmHQy3MfGgve!#P!P&KApdOcLRF` zpK;adYf({=wioNY^`%ezj%}zlNdALs8+)Auyg$Asa|Z%_c*n-7SDNSUY9QHRh1k3@ zzNbz^@Y*G5yzs@tEsS&5#i-uaEbtPN&P0ckd!&D8>ULqso+Avl>*ryV#1Clz2g>+Eh22baazk>rp%AV8T-&2F@l;ui|GuV35`KgZz(ss#LKQ|Gs zv+#|b;w^q3CJSt4LWs{5mApVva-ZL1F!eu%-vuBW51hQ$%#^w4wT(}ek6FxvBkgPh zANusYR(e(3`aoq@XdGHx0bKRhLSRl6e~&$oDHR;*qm;dsPx&_g(T#w=CF%)2Go`tK z8SWwvKEF|{t5v5{Ev{he?dzvow!xC+yu$wY@oeUblhoj|&U25QWap+M&y|dLl&GFw zmcv9B-D{b~yyp(ElZRCk8eXorB%3U!Tnw9Ktef2)^~I2=KB#!1Ezs|Ud^c6ZJ?iWM8Akx?H+H~FFCL1rQGRWdo)ZM?g@t1t$XZcx8PE$x5w%& zDF$3Zes)YIS7zug02OVVD&|(1V(BGD_>Ny$Nb^lS?I{>&ZFuFTz+H#*Em^RSDC28{ z$Q2t~yS$?BwvA#*UIjDJ-Um_{73wb!7G0esc8UiT^LeJRyx;};J0>q*XcNM^1EUc{ z_Sy-jQl`i_T*10Db#p3jz!&&%T_s1yWsLET9wq ziW~Szq$X_!sqN&UYoRHzP6!;DjI@q1AgyTXD_^k9KW}Z0*>Ir=39NiDJ`fe@?hP=O zHmWhnQh|4(N{PL_U&@bAMcz)!nK256j7uv+N=iG~rEch7`@3mXn z%Z75*^&StSu0~oUX@ywt0P@!-ws61(_mLpggrnR&u(# z(HCRn7K)kx7y#7M-E|dBkcG%y4{SNa<6CY8P&CU`@Mh5DHq&2qmx4kkir?lJ8SHC& zt^_`R@~Hmj_-?!!tL=^x?D6v81+bNiL3R;{Cg2h3_EEvv>(rkFjMae!vw)zF39q06 zTS?anjM7s-srlF+8_DCXyhJB`FJ@4137gOC8CWE z$vM~NsKNQ0pL}wRA9*{DH+Vs)6e-_EB+5)2e(#zpx;Qm?%_ED=?yw;So)AlNh9{ck z=WT!T!e8Ja(0F*Ef3&JnW(`pDxS44>KeEnZw-aV!r$XZM;I%~yn)J(Vw#I*j1nx(+ zWV6D?#auQf#=-FV{DQ2nHypF*93I~b#qB-+$^tbLEOPc$%#o(C1uw7KZmVa{_J!;c zSAepgwMK${1EUd^%hm-NmJhEK6qXKRi!~KYRzs;HnP@3YJ=QkXuDlrY&|b*i;480y zIr)k-DT7_AGM{D4PR=MPat~5tA7}qvu0JLe^~o7`HQ=cQ4(4n=u z>^hY@k(WPz+sAM5@*Hgv*YX!aoX@RJQTt_7aU>fI?I1|EzM}A{k{ueBL@C^Ivg_Zp z4Yzy>7Up~s&6^aZ0MBYRW4E*xEe4k<-E3vp{3)Bz;5Zd*rfJ|hwhKDKXlTA(H?zYQ zzZS>ZFcAFuF+n_3X4vssvFt5BP8d#%4gj7=8AI=E55}jc5gtXZ8#DHTFUAxsnwI5o zU-Ae)Ucw_u-3A3|Y-1oAa;FPAgWNr2KQ`Wf+On&AZI%%E<~GBPtIvaUUJ`a)$ai47 z{*8pG5MmvMO6K11@g@{aFF!J=P5bHU&L<@g=7G;e1!k%FYY;>lZ@KfX^F=AQx|u2c zzNsm?LFb8UOKa<4^bZ8@l2z=C2)YjwMT##hJtEVNAe*c$Mt?64uWku7d{b<7%j@n-PpPVp8Vmo+KRbrA(BOQ z@ronUjZFCZ6)B_pT!}JdngYDBWgRl)Lv@>Pct;+CB9N3DvLDL~!Brr9scya&HFBM@i7jcLDCVKX&%$9G#Y5j_)M~3FD zf4qne&KAkTy6(E>WuayEVIAc3`;(g9!dL^_eQWf>gRi-k=3N6WJGN>bUot~+plU9f z-GT!YgQDlKG{uEc9?7<;G_~XYZo#7IWi@Wp%ie zq>m~+Ad()ZY-X(ACLUma7u0bY;5jckv>oHi3~Jakz#e@avU=oAf;H^F(}>Ypb0spR zxHh;Gzg{SDvBMOHXWyCiO_^}2s3Ed~s%Q93RAatW))=fZ;g%@io90eU%h>^X<0_I8 zY$f;Ulxlj`Iyvc`4{&>v6Xs(@eRo3xt8UIQuK^Jc=vqlz&~=uJKqW=eAy7u**6pup z6$SG1*cLo`TTIk8W5_coy5N=g~j1B?C z{2WSe@%W7eOlRR%VH@{YFti?X!wC+|xuvJjFz4hlU#eDVe#Sz%x{gjQ0LiF5M)mgo zOJfZ^Y9Q?&Sg8aYB>s#6oAcL|RFJIp#J!#hU%k%=vC?UTd4H>x8D}`eg3u3X-$X^O z(`wNitubjLZc9zEl#}e&Y)Av>19uV~!Ng|UU;Lgei}2~C?&YPW?g^DJ{^1cIRk~x{ zf)%s;fl=6Q`n&NEdSr~gdQS*@QQTuL%fs8++YD(0@~Tnb#Kq{mh_sej2;xScywBH6ty`{bQ~SH78Wl%xozerl zMou`xz*YGl)nGkCRgV}!d;gZ~yu|D)!UMC>QH(_*+=bX6tam=`6y&K)iRLL}aSIb2 z?#79pHi-f0z+~N^=)4DN@j$sa3fz9wC+>w@DKyzxK;a zEGx)M-djFhl*6Zl{K&?16zX@ax6OiEGiskraXR)t2_0o<2Kf`kPCC z{py5ef~J18C~>TPi`9oUau%g7>UmPzB-NNM&1~C35Zir{hUG#eC3Jd#K48iNNgJ9|RCqM+ zA1_tna*HnSdQi2%ul}D2VjT|Rp~MUw&-Kmq{})nMq zx<Z`CEzze5$bD`8t3HRh>R|+O?IcS3*sOU@-ez_)ajn8X((_ zMGgGs7TPTW0^t^#FHf0F@3yOLR)AVK>r0j2?AT+hfZ*CmV{e4Re&qqnG1(gGfdOR* zGZ?F`x;pCT&*GCWe0O9p`Iu4nC02nO2o+`y@&DpE=4=LN7#P4^uv3!$*UNSOAVWI~$;j9UpfR5+zj;<%K6TrPb)t<*n!_flV8A|YziTrH>StYW)Hcqg zsT!mK%JqZT>mWRk%05DJGA5+q;T)A1){GVxUZESOT z7b8~y74M`!C4D^UY?5<0yM>M?+6jH+%o&7P;aQtRh)iOY&!4>BIk%4`Q-y{n3-fnR zL}BeIkoY)5;F}S1r_ZH96kc$QKYsV8Tiuy92&U&)678=))VDdet;OhmAOie5$@u%` zgkN>$6D^HymD6VIM2(ISKvq+h(?19%%afVM1pZIMWrb(i`Yn!!bDGxx%v(SousEk4 zklm1+J>Bu%%^gE{QtW^F!!!8Kxf*y0k^k9hl&Uw&y>^+`epca60(MAD!CAH}16p7m zQ2%KkP^W*w>hPyi`rbgN(txxQ$^R?`kO9nA);neMgzJF$!OZ@90Q!~3FkMc2(Xp_9 z#DBe8K)q8KSDOUj$yfHLGXk)O(686|>Ax-}*PU>WbpBWNFw z2(ru%y&GDLqly76%)zcizMLIv2jz@kBEKtH02uM7AO5D{`v~M4-U(`|CCu>UZ%?<1 zT0hK~7lU+L;Q>Gkc28V@?}g8PTH`n$#5N@IJTSTyOhE*mfApjNDt zj+TdHCM;2P3OfxbH>*PtZC$qlo5vMpZ15bL3d#ZMxXE^pj(j7?$LM*4oMeTdL=!R4 z*=9x2JM3QMX75#h!!ehs5-N|bkPg$w>KmzKk_ZsV7nvbd73m|O|F_e+gumuAU4{5a zUEWvQH)DCYODxXUOeU<{(lur)jhM|u{luvESkD&}86p%a5~S8SJuFMvw*5KG9xftE z1@tX8*T#pKki@39__*Tnl4{J+9I~Of>fa%H7eW*+Sb1923SUC@!YIxqC_%@-rfYi^ zwkCi@bgiOl4Dk1FA1s#C+RL3|cBC9n7Tad**)@U`J!c>mTJItjr%G$M!SlYY7uJ5H#z>gBeW&l^6l^BDh-jzT_0A&2VOSaZ@a@roC+Aqy zm%|=~8=cf&Y9gMSV){}CAseClB_TtfmS~FaN-gJ8)J=DEG0`eO6_`iIf#BxYI9Qi& zWQ@9#CJNMV85XO&*f3t7l2-6Fk;><2+hAXgs;1*(m#C|dVPtp1QZI~;0=+`V7c8eg z?s^Fqc2A&~A*JN`hK z-7>*4FZ-!@i!f3sX=iphqPv!BzX|vMML)2qwq?5}e)GIXWvv+R9s2sl%Ttq;51#xi zi7GU%V>SEaTjyoht#(cw$!*CgT)Txba`RkuipIPhsWbME3PAX<{QRk<$tn z1Fmi}9&2=rxqTPjF!z^>7T0-O!P+_Q(i&tJ9?x(syrIK`2QC=qolU>?n3uJBt;+&* z*8=HB0W6=Vj1V2vIIw9f+q~yyzQhDURLX5p)c*LkD_JE#gMvPgPpIZfC zN!1)!m{O;Po(P10K7uPtmKkFR84xg`d+ugtesxZ{Z1m9V#i1+Z()U>^DxO{kq84fA zCHStmSL=@6kI?0P7B2zkl+O}kl+|MS;_kk;>$t3?U;i}9b76w&q5{M)#qV7cztA%HMx0|9S=mcyVkF6dVqgA~GUKlVu4Gy+SX10@VSG?P{4}=XMBWYp zx6HokqvxlPr;kM!k=og@nF0U@QJ=AC7&W6QyaL9_(%$nf=MenYR2VUojo&mh22#qHEPYQ zD50EZ1e#8dXl`y5$;kG_qbs#M7FAzWi$+`4>_0Hnp%iKNT64uM?NH+876O zita;IpZgFsmf5cFQm?c!UGb75!#sWMReZU*Cu;c$wzd0^$FO#87UqwW=IG*OPpM;e za2XFOo^BiZIT?kwXLGOUI%3zb{cxk9@rj?>P6AV(mOIKMVeYY`7uj$lk>|mn>Nx@QamNayAQbVWSUDlUU zp65{|+Oz0Hc})Ux3o%1TyF= z7p#NeF!XT0#gWh`k;&yC3(6cvcnUy7;O4bNmfBnKkI-_$QEYqFbhJ z%*30LbwGEarfg=-u1jetL0Vysx*=lymU!V`!vY>`8^U#85znY5Idr!@ZQD2mY zNR`a^)&8m1P!{0CG0i*pE=w=W=KU5kNKpo~AG9vb<8>kAMRI5ctTWEh>|aHuaOmr3 zff!P`vFig7X=YQRS?dZM+!N_te(%c`*fjkTo`GCO{lnV*Xzl|I*8N0g70nUi{K7IH zh_g#nv~Qd~B0JACFnE5~n(O)cL$f{IDO9N-NeXFfTGzS!WNv!yI?Fk8cNNngIu8^# z#ugY;y3J(N7oQo|Ft1;|z4TpSmri|!pW@+-%!gcTAW0bmLVX`m-v~#Qc|mHIz9x^< zuUD|3H&wwLRZZm-S6gx(BwjQfB|7rkr9oZsk{zTR-CbdvYj>R7&|6qYNtVse<9*SG&}T2EF&WL5%u}Z;iXo zCR{nkdUZKO;#}v^yKK=|4y+#IgW)JQceN>Tg?E!3T?1&2ujg;f1Hl5!w44|#+@#&B zIpydkWRWJ`GCaC<_NeP}%Buz1>izP>Z03XM2*PJ2UM6278KXFCkmn-xEBS&b?@K(e z^v#FSZr9u?zee(?nP1IHZE-brSCH^lGAeyq#6PT5jqXXg6G;8Mh+6-rk+A93^*HkC z{K?nekJfHAh+X#Dxy0WwR86~?cI%a=IrCkz^KJL^G&_UACHA{9rIxtquPo+W;CPjgj$L+< z60HC191BrX&w?-#T-Cf~3Tq_ojJ+musuuJgg}#<2^$tvOGT6QI58nqyeLnRUw5dmS7U^cVU;rN3dd$ijFRv9|CdH3)390Mm^NEfkI~ zK2oG~5I_=gALC<>Rx-LA$?GSejqQV-N~_k=mfOnP05)NS{~k}- z?D{Pyfi-ddHw7C1(AudnBL!8X-3`*TU^H$^j=#awKm0ct^HAUY8m8R*3`j7hqIrXU<4lF=G`Exs5#YrjtzA1oE*xto3o=xx9p@lH768Q9zbM4?&?aAr7ZY3_|Z zXl?3_zffTh=mt$qO(luAP@$6ma)C7Hu{`uk?7edlU`lY zJ;8hDg++WzItA_idRyPJ3J&5}SpJrD1pOD7qX!vJw#fu0ej;2N07mmOOIg_*+RMH> zK;9034a#Q&h;eG>_dy^~atM*w+IDSxn=9A;E`zS-yd8IkXheC+(RRlVdvpt8hD=)W z#}GM4^`+v-PD9sx$B08;e6#VCv`?QMn7MNg5UBljjV=@;1JwCrN0u^f)u}9y=Bt66 zR80x|^cAZXS3B)XKyj&69TDfXD%_AxCYmy;s-wXR-$29_acGw>4WtmuPp{F|K^~Vv zR9pw+FN{*vwlV?$KyYA$8U(UkX)_Lli|JU>bY~y+9|DZZe!o*d!S1f2ZSZ8d{JI`+ zdAvo*^nbCtr|PPI-MhV}+%OfDm6uN*^4;*;*`88{nAwNwdU{@yPQS$urZc8Xk|8n) zm1X09u!`yd1~y%G8#(~h#j|3n-xtSA zrwZ+=0e+Oje=UYe)dMVgTJ$N13}7%e%Ex$H8|)9_vi%x0Zqm`eEc+k6p@DPODs?>k zgZI=W{^=O&pXcc-{O(xN?f*Ik2=SSy9%G6AEq|WCGyEGwG5iliIcAywlj6mHkO{2% zn7tL%_g`O)ashE`fTRDXB}l?CoTzvIKWxeYsQG$gvd5=Adl#Wx^Kl|3&*72zBA`RZ z|Et)c+HaFYaU_||R>t1|L=5z@4zd9Ya{m5ZC-3!xw?-);@$~D;tJKBDT3WL9H$H4fS&92>jcLyT_eSq?W7pu|?c@s`8>xMaZ_V>Wst zO&ldp7p<}R)CN#E9NB+QIdqy&ku(z)mLe+hWuhL?q|P}7f6N^ncXl3O<=?w#_QZy5 zYkbyP{(5;nW(O8>b^ZFBp{cy&GHY!Phg{u_xvyLGHD0U3-uN;$59jdHgb6{d%-bqN zrfRb`J@`Rfq#J%7J4{uAJ0zxWunWr`-<(!6i+n1oRQ39v)Oz| ziE?rXZ(ruRzFWQamt-j&rr8d7wWcvZ)+JLLtKQ1b`zMBe7x76-X84QyP{PF!8U&IS zL#=)*WTdYxf<4;r&P`;504$QR>+%X>rZ%D;c&>$E$%lfApr-mYwH5e##N4S;uhmaI+6iBMXfMdy4=dS(iHVbiQz&xY=-&W)RIjDr2 zod-Nj_{5~j#JIYAge{%ADW5Esg^bOXWjngTL3sR?KJ2g%mzFhfM+(&Z9O097fwwC_ z_qS6Mx_XIKa#tw9{mz&tCNZO!vmr8?+Qk;HH>(Jpf_V)8Ak_NpV(Em7t(M;1O3@U^ z&ap)tjpF2;aI#bhQ!cwAUh-Ey@>ggjOeZEaul4VxL}^LuT!y%ra~W=@inZ348f&rq zb{KL=<@N!_V-0IB_;F7hvL0mjxM2($_ScFGyuF(W*Q0AARQmg&hh0U)#rKdq>Im>0e#KH-2|_(42KdXIS@MKJ3N~Dw4#`#xR0e854D#T(gyA{ zImcy7DC&~O-|PL4wHo~Ooeg4pjiD)UyP@`t?Bt*p+?)0Oy~H_CQBDbhEkk*IZ12Td)P9#g z4u&Kyg7=u7~nOnuKrWP zY*z+3)?Pc+1AS9Abxu$@<*ucrP(G!7^6!d1^oW;^lW=q?U z&rfH8#r7<1mBcU-^T{*=#bjpOO)dzJLal#8HPOXER=~{7Qn1|>DnQ!a(U3|RX#I>F zBlRy+PPx`&meB#9HwRZ&3lBnzjs`pm3Efe{RdU?v+%(T-%Ew(zX0Gz29{WazSzsBG zmlfNfq9_M@uFWp>&ZH-gxue5n#r0Q-q1nUP4#T2&UGSW!g%nqrNr|h_9=)!Hzz_+aek~ehOkuDn#iD*2C+AQ% zyt-okU4EM8tx$vVZcQi8;gsRKrO3vW8{hnSn4oXO$#3?-e`5jYaZe|Qm~DmH48yrH zmOR5N%FrnhQ!(7^{U(u~n54=#$?oLb=N{wY0cVHdWK5Us6c42V?KZC#*-nTtKN=aP zBP{qOjgu0h5>~R>GKgsa5Q_ss8qQASL2j4gtTiLQR=G^rX_ZbjilJ4NK?7YZ_Fp zyA6#QG&8XEa@K>4x8UUcx)(<&dkU_mz9VtAmw=ulPQ%%l}*VHx)|)(^rS89Hp-mTkS zPIq(8lq3uH{-!vI|9S=F-hdu={Naz(C8hYewK0=N= zg|mAitX2HAM1ck^u&)D)_CLBe-VTgm@5UBJ{+hRHHA>5vwc6-W z%#QhCZ{G~@x#wP*&s&wFtrjzZjWHr2L3}Q0V9B{QDmL122-4g5#U26vWZx-Wt0%NA z2Sf%x9*2_bB4N(?9y|y0hagK78##DH&{6HvJ#{y?*6E{1p@OAWO_l3yQhG*^r$Iew z{*@bdqq!5NWVHvs$2sWhtf7fZbT(w@ae~SR+(<(+MRJ$gUqW@6q>k(x4&I(WOahxn zQ2P7I2I-jnjROCc$d@)c+wB|omv{L2*=`&4+aaQ`Ht{SbaZq|>%2$0xvmxn_hXK2# zOKUKc%mGkRV=d;wz>)^iP}Ag3%+{ScDS|HAaV`Z< z^ek-1ohyN89nbM0`MYvuEB)*3HffwYRYezCAEf%}0e&|@Gp~Mr$DO6x?af@}KDCN| zY3}j_Ps?2!cMG3LQh~l**hEvll|sbUSR1S%uHdge6$7T`K7pyAgq!)}^ji340H1e3gDN6+SS%D`aj+ z1zUcjD9UQ1d``Qn`&ZtDJ`G@vxOof$HOxDN*rB19X=unoin>(HbU!M()`W+3R?s?Q zb(GOnc7}l?f|Y;4Md)5`c;iRq9Vo_gy;Sr)T-&xs-EVb8I&@3#F5CvcTz8v$ej}c& zhn3wn@xC97;N9ble$2&>3MQ^{^c(0oul=kNh|7I zrA6EH)UQ!hZ&7@#3OV4|`!U`d<0dE<+|^J=cK^N44DraM2PV0D@XfLN_O1iFGg4iV z7Ko0z(atvgaiOY=DORL2`k~&QpUV?%QOT?8qr6KEoJGjS!7VWpaWP5R=+sPbi2kqf>*dD$-ql#EpwZWsUT z*19H|XOWz!#V?+VV0+ZOMZs>M#1`^MfJl5!7bsB2VNcptd_^L#SM#xe%Iy2_8v4rC z?5>lg>cjcbq}tspnnl7z8Z^}I1ec;%&753|{G2YLrbzaESVWu?pOe#A#3h?W@NoAN z3vDOJ_FIekw8?W0Q=YO%->;j*Z>t3IQNT-`;Ns(6LngufVs^&(1b&mGD|)H`BKog| z(K6=4C}y8JL12B9C2J5kQ4vKHMf0Q1-RlYJKFUspQ18trFu__2`H^bZj&pYasE-A07npP;<4${P|-c2EfXi0c1=~nZL z@h-tzhFv!;R60G-eoi7+!S(ib^9;&->86F(<}{yGG1`S}O*c?N?LH{Bh=}iORkAr4 zjYnrUH-_q0bQ+A`di{{!mbJJiXeGWz&T@aLFe%}JzHS7MP}RQVKPc%dh}xa#+YN5n zdK0^gl6N9f^X4ZAKXt&LKCp`vyrSynQXG)aD-1KJT|f&D_E^}4h4)pj(z!47Oi~U~ zFY?h(Z4PS8=vj~2zdv@kH2>PDdp^Jr%A=vt+IVsbv0Bu1LwS?h@AzFGm>j{Q%u2KsKWt5ibH5sh z@YX5NJ=$L=XkFKrr*UnYZLMi(IR93$y5$by*U@<+-mPMGgvdr=)8hdhrl&jF=A+kB zflf)$3woKOcL~yY)CqUGMp5Y8yz8l)= zVNmsyENZX^WKqnBb`7!#l{wmd6ufDfeoA4rpuCUD_lsH$gMg z#lvwpVe{gU^Khh?E_<28MrRC~<=6bJ0ztVFSiT8j1IE`EFYXm?k8$@R?waA66yW}gp0lvG=J z38M}BFSKPP;G+AOG?<_4imRieBli8yPh~ER!j-s-Xyq~}LLfnx!USDpZ|yM1Z%Dg84HF9IR$p>o=)eD+# zQK^th+Hq_1;|$97OkixspGW@HM86w-d7$iIB%PY(SPeYmqFiVlG3&0-ZaO`|9F?m+ z`?s#!LKGlNd-T&EBpN;;J^(LYI#je7v)c?e6*{}F0$D69pBeRO{Nhd*RZT?}^(1f4ftvF7?Q(7k z*^m%hPX{~Of(Ir6d;rAQf67;U6ry*C;+z@fWEP_6RZ65!3QrxbE z{g=3%oe?w1yoF4?(GY;pcD#m;Kb*ehG*SFFwJ~E}^Qm@qPPLVnB*V^%T@t$aEa=ww3w~Z*5jhX9W-tt4X4;>(-X}BrcD7)T8Od`B z(COZ~aRQuu151oq<0r8jaFREd#zi!h0!D?r19)piqrC@wslLU9$Amwh*{H&eNXt`% zPUcO*=bm6$i@co~BO}G9$RrVg?7qQ4W6C~iqhdgXn=wjXC3*dCo<2GYj~GCv7`b!r z0e~j*us@!d(1MT)l-St>Dln=if<7FspA(d19zFL9r*e`-qK zzyM^_dUctN&jG&<NJLgS~HS}lR5>AQK3P+8l=yqBeFO6`}F`r^e`vjPRE? z)7SJcz1${JQK|6F2qAKrYif|{lnnS3|L|v6AUmidDSqJQu$+E}sP zpW%U-MtjpN=dWEpOeODp`x^@gys7xA)|Y!&xB$uNbZ;>ZNbVkST}YU5hHli;@AT-| z_0wGc)#CS8a)_B*owMcBv!DeH*z?}?K8)YX%mM2s&GLPn;<8v7(uKbB@H1Skw&hCQOVi6I$CI8$V zU=1G{sYMMD1;yQU59iFRQVwPx)Mu_`cEXMKM>REy^a+4Gcd~u!JywnUs+HWljQzZ# z26qx+FEG3w5Cntow{T40oYb>99@|Hh#n(B5Em*2H=Q@mcf*=aM$C`LK_9vbH{$3-o zp{|)vk4~}2K-cqUST<=DPLy?b1JV;^E-g_Sc-jN5%VT%#`hp!QQ3ap;u8SwV8HcVg z-ZGW6;_od~vB~mq@nZL7mj9i_J~OZ`vzKkZprt>oMmH(4%_YGSlEl zFLAr+r?@D}?pPfTnR$nvpUErn%9gta6X&ygiV}>_qk?8rqU^&Dht?StJQHV6dipMX z3AtCZv$MeXDAkvn!oBrK)i>OWxZwg90rZ$|UhNjO`W(yop3%&_HaSw|oGqJr5qr7w zST8Wx&!>ZZ!(DxA7i$L5$U_J#MuGuF`x~Xm@F-a%XI-g$#ch!(m1-V{Y=r^}boH2( z{F`q6C^$KQZ_!xqLaPh9#C&;8)$;klqx*PKeB=s*GVu|NyDiM+nl@)Pm#OWxsOqm= zmXj{aB_(#}C;w27p@(OvM_L>|3~q7hu75oA*4w)3o?ke~m)}m3>oStm6RDsuZo|w5 zu2~9DwOW1txfW7uS?E6e&^U!U&q@+w@O6DqxZ@Fhq>0T^BPQbv5It)=9$?t-0XocQ z>jsa$j^RWVD^X{=<`QT6^PXEwKumjfIBws>Mqq0ssA4U?t+@IEOdOr0X-_4fiB@l5 z?Hm90zuIo2x#jU4>gbw{qwf~D?8|L}MjIb0%Q$+=Y&v-{9kCl0%IC(a9{#5<@Wx?z z;G=Ka*b8zo!KMX$uTg``ZTmZ!&n#ZD>ud?Prc)PnqyjY^f@Oisgx@8wABC|9u?{Ax zFR~dX4UjbulAulqsm8N~Lik2?v!vC|j_|yuJBRixvNPOtIf8~KN{1p1$3ch4$Jf`X zUa~-6+yqdQH=f1=RasALgqiLUpoKLXda^N}S#X7nW>cFn^a#_G?8Y1QmeH>Lz`&u z$b_+=fC)0-SDEOOtg7mPya=KrV!`V)!v8)RuG4}v9Hc3}Jl9)>T-h;;kzK+GaI=^$ zEPWJWN;13ZCKReM`ygTgu`6*BMtHOGYIG4X^(=FlOsYnk`uXEzYqC#;yS9u}OG}rm zw&id3?QX;xO7RV@UO900F!EE+OpW}G;H~w&btg`qZzcB*ZTv#fmvtRFSMEp)8IKO~ zjt14H-mBx|wAwCmAa@)u3rDbrYKXx&gU2IW!H#W(H=72F=l^NyN*tMR|GzFi5}zo{ zk-jOnxy@P1kz6SX+ei^}jgQSa$C4;fgv~Wq83}W2L^;ZpV`jN$T8GV*BXfitztyLH z-|zDuJn!RqKhNuVzg};31W%~|qY6?i*H*v`<$>TU;sR^;yI%$^sKlmoBWxy$K5i^w;fTqnGCioMSXiT25)9hm5(F5kFtiph#NH z7{SG#j1CGmcMaMhz};$aUtP9qTej$%#IG)g60BQ+atojvU|r5^Swa^l5i=19Ua-o_ zXXYbD?H|TI?(ZMbK~jbbs72wBAbStD58YV=ykoO__I(P zbir=+9ZcIevETeXy+iFt+kceb$>wV&?voH8LQg!=>SW-OBPcP`A(MX}En->!z$i+(n+Hjg?UKZq1Rw4I8>uDqbh z=*gzW(ylpQ%6dH$z&G1q7neRPp5j>RP|zmi2(T()!I{4B>w~EXAK=k%B6GLZybT4j zaL(W|Czm672Py=*($OO4D%T?4o06dSj2SieOI-qYP@=O{UH+DG`H>4%%*clA#Du$} zRo`r6h>duBTFF{zx>t9;pD(hMrS9#k6BhOKTjBARLqq#$kuyC@giq@iJ30xusE(V6 zE9uBj2yO_iJq2B7KpzMIMxI*m@P_TD~7EcCz~3nAxVGNO17NuW5KV z4xE*#)roGaOjlAP5jSV7-TG4)T4(NaM;Oo})}-){#1Rf^S5s}yGMobJ#;O;qaKfF` z()5R;Fe>*$KjzvN%AI$%UB=A!jm}XkNI9W+dPox2BkS%MDO{F#%A>$6)KJFup1{G@ zth{^u2+AXkx1?t_L4W_{TjyS7;ROx#dYLm}EaZTAXaV54{b1b1WW`4214@09y@Bk+ zg^I9l6TT%F&#TlngqRhco2S6nZx*@tmkt#sSFJAA6g{i?an@8tfv)tFJt-l~NEz0j zdt&KME_-uz;|=~u(958yqT>x-3tmU-U{L+Pn+h*wL|0qtb2xj}vL@n=&xi9d8O2W} z?M57v9v}8rXqQs~3p>@!({1;rXhtn6opc#1%EmhkI=n8lT77vzLvSvPJec3nzWkRX z!_cRegQWlD{oH)my|;Q}*Ks%NMTLc)JbsM{E{WEzm6?7UIX6BM=Y=r^$98qg2q^0H zQ~{LJQ%JvzSoNrs9a#NnhzU7=21*}qzas?_nYfNjM2Mdo%(2-|7*oWGo=%IA`sT6H zUzhN%J~a=nc7()KzfGtQzd3SZeDPw|kYbOUJ-3O)(w< zu3?|6U9S;67d~qk^k9(?WBp_%mBOidlN1m6@5)Iu#aYY*`SRTmzVFWg*K1yRmjanM zVtS<1b%v0Sz!omfs(I~g%a4yn0o&^*(P?9w#Q=_6UdhfR9=*vakuStxFHbF(+oD6j zq92cTIyXdn5w;sAGXE8r>#Gtl!$g0UuVrojiqcYlp}K zY+NZQ__c2r8sU3LUpX+YIta3U(GCHm(Iu4h2d`az<(=CF)3A>zAYa$8K7_@5eVeiPA89&RVm$F|3tp^e1*!8sQPu+&!WW z{}DhEU|#pu|YTnqM9s=k)U&Oc%g1D@maKNL5T0ym_M*8D<;SZu({BAeHCsfN*rxkScsjowmsV+JR=VZ zrq#8%DFJ-F0NGIqBULS4B_7G9mInkZ^}<^0c%O2ib%o~Ut{GI*0-szjSB<}-$!xOF zo>uO6#R%wO&-x2~WpipevoK!&p;YAu!2aeUeau*pH_$-YLkDlqQ^fEaZ-%RyFXz0V z0&`~vgYw0}&OQxWh!RAah4~3~h#U`IvdLMmRl+klb~zm@K`$RNIYs@H9IJ?XcFs1ln9eH(tK%DmvNJei-{DIy-*ge2nUhaMo}livqn6{doen{UO3)=!H?lZ z%ps@Db`hJ09CL?jR;arrI+bYI&2c1D=Y)88+04x;oE`H07fpvPY{e=tA8G*YNBLTX z7uOo(@QkK@LQ!ZN_dz@0lP$e!%i+!gfhzrAt09wq2T;K;rs^MTigV4fZ&lco_Li(Z zzsb^9jI}HLPm!p=tjLM@V|k*w)w@^4*!~*|I|oxh++5cV?|fvHJ;LEHT4?p6<(YLt zS7W!V)_^QL)j=~=3H3nqCEQ|>&cR%x2G9ZXA6GnmDvujhd>$H{!l58Lr2)RWYpb1` z)49R{ARRzWtUJ%f|w&z&~;exc)Yjow^biWezoW^i|_EwK(|yug=(KB=P>lsh05e0_FoNMGhH@&!H_ zrKnx${MG#Iq&k2}G5V}IuJ0V*XAQ&Ps+kE`?}6i!`a9r77^k}v<+?Q=$Z3vacye>P z7Jn|;`z-sOBn9`V-I{8AU+Cpz&uP<=xJ`WXtHQKKi;;_Zyl#_29`>>jcs(hhAEklX zpf;0pT5+i%Vn4JNm0Ey3x%=Rwg7ERn{{Oahaiz6+WX^L`DW=Lvw0?+H&XV$kcZLHu zgz?W15LV(cMXt?`rL2~h6xKEmSq@GqgF&viv;+z>+XWTJpZEa2POInZT?d4%PF4~8 z&i_wGOgoWm@YSji=3RlH+S&J=Q}Xtb*-?gn0m&5%7ZC@bkXgmNW>3xy{{Z#p90Bwe zu{pGGz8z!qH^fHgbqzkZmPT#Gz^6U(Z9a&QO_LvS#*D1&uUZ`rio;-mMa1W~&^xLE8i)viA)3F)awf+U&rX!A8ild4p?;1f@JaiJ7a?SsHC zLZx^1oa1QU#F^#b%c}tOwX6f~IYLU9G zp+&~iVHvj+Rx32lGK-QvwCZMn>)Gu0(wfr^jo^M6&-|t4AO5dj`ZusdYCnT=RZVh! zwzmDod=xk$U1GjjW0-pUo(H?tKXjcp#vj8b7_9VobtZ}VN8!oh@dYsrY1>gOxni>$ z>oo0R<9Zaf;rs+k&o_Zfu`fnj^}#QB=HDCju!Qy%lD(Pd9Ir5kCc1#%{a&;@c`0iD z*vV=7H75R)+YR^z^~Nnskc!R^Lt^pU4Gox7&}D~l;2%S|dytt^a&i2F$wZr|_!@l} z*wqteD7vevNu$*VbtmhP7`d!B2yP?K&Lre6&P#~HgZj0uNI5c2|8NGebd!>V^@g-a zdD@_<^c8wY04wNeNgnG24VJ(1&M*85-hPFG71ndk^RTK(wzn>cYfkoy^W!{&MN1C; zs|~3SiIH0%b^_m}lrbYn{9Eb~nWfHUU?Nz8p^r#g=_SvVR z9Kz?d4QhUasyT|Sc{YD?S)ch@NO%fZeNmmtQbPqRbvr1vZ qdmKTOy}gFA>`0FFxqs&N0j?X*+2<@hA_AibNJkJ5X*NKq(mN=19cnLkc#IZSEu6LYPd%orrcXG2uppgS{Wb#Q4e; zpCSAT9uyRCnCWkyOh)!A5_c>07uI^|xEQZRJ}=O{4VK^S=K0TyFT}`F)7pUV$*G$( z0sqxXi%ris@|=C8G_)ep4yvmOi2UylcTXs{nclr|>e9hA_^83Bt2`>vH||^i{P!Qg z$(mg?q{?F>eYgr&Abo$?b7=GL|Jh9?`shu^*q!g^9E%~16U|YUJAzxh;C~MG$8!r2 z*M+L?8p5L^WV3UC*DQDHM%zyQ+nZI)2{m(GvtRA{_ObVWyNTo7VnG3R+w0VQEfb$` z1un&@{^!L-!Ajr#bX~)VJm6$sf+=$49c$RN^Sj*~URl)EFiQd{9vsH^-#9A6#0hJ5ya^`2es;K@E1XuZwF5JQ`Z<$~qTwV^U7_`iuoyLa3? z;9~FqU;9w(k2M1KM!#eIB>8`hZL!pcI%RRbMEV+bOgXv{_%oV1s$4MepPxsm$5Y5V z;W3B0KXXY$WWS1Yzu*@O^Y~Z!8p66;Jp%~iS07g{c_OV1Ij=>(3qSc}xlRHdfh|6w zEFaweFX}`}NPv_~PKGz|+$xW0QZX>d)phIbJ|=4!p3l-=DuY&ypL0BK^p2HKy!Sh8 zQJpRC422wi;7vBRj{MtYd|@ScPRhwmZI2n$&WmRY5{4Doc$Iac_ZEI!9GCkPLh2VSfDjQ zi+v-9A$tRSginf?&d+i#m6D#cuL;Iv5Gi9f7ms{;l% zJPTI3{qo5=%)TDzV!tkfagp^DWXbC&d&OkQ$LH(WTKA<{s%~SXr`%$%w+!|1W=cJw zVPj-!vg5rOM-}%olu_tup6ndO;plhCj@SO(3jDcoZ+0eQlUZ4@YyS8J*}#+gt5$JT?^TaDLlFBrrGr(9C z!18yqM6)+ftRsJRe;+W^2LPW!BOF^4;GH`9sr$<5Nmv*ah{)1Fc{ zk}Q&=+!9hV$+lcX9;@EkuWoLx&NHDck%?=9tqGRx zmrBOpSZjBf8(_mEVFc=Qww@7q-lq4#FUG<8K=W%Z>U&yq3&;9pVTMcLTGPg(5X@pi zb9w17q~!Sn5QFv4vs^BUzVqSFT~@N6{L?BM$w<06DGI2(X|-(*55@qLCvF(PbjIQ{O}d@66dYrI)K9c zCwRXSako2?B|8)=A>rMGG>pGY8aRCw4cZ>V7kkxxf>XHaCn?Uv=nJS>2Qjm)|{`wemCx`{ZxVi>9`oG1etDIxlJ=oc_Vc!QT=^ouw(u3{hIUwJNiHZ4qRD%-i{Hbol(DLQ| zDOUSJGjL{fo6p$fq@ydsQgO@O6Xsqus60dI>bISeE%UnSnlhtvrCn&=%wghfK=}9&I9p@8~wlVN`OlBswx$@ zm(X4%wcY5)~^5xFP93N(Kv*vza@M_<3rcB~WyBITHpM}0}8!5qdyt=g}38X8)cQx$|x zG|J~UIR0*rfWkJ0P8?=JeQP#Z7Q0=YBSw{x7_e28_6Z55#ERHKmo&QU2nZzYQ%`EC z>mwzcBfi`FQ+OG&+wUlPe{+p{T59?l1u?-em-^+^o#|AQXU#s*@VM2v!P^Q#4x4QU zp)G#SBl$b29Fe1)^GD&vJ%aBdgRYV~Q#JjV(upq@gwa9_4Vb~_l zZX_;TGo)#uXK3k`hMp>f5D`rYA)fT6vrn6`VKl02TZll5C&=PQ8c7R$q62(<5=N@3 zy|*3(2KBepB0~I67_}LOz?l9_S;2d6`&+zKF0QH?*bAvMx^d)i-=_L6eJ8Y;if&Px z{Ou7k^93?p(S;O&WJi~(G_|^qU_#YNPg&eFVSXJ!Iv~W+6G4jgKFlOjb1FAnc5Nx_ z^C@7a6Te4MQI#?5cy?#8*hD98w?%0}?7W%gG)qA3>W!`o z5H(Zo4kXO9k_ZqG%n7BqLmBZ~(YOW8y6u4(P9LA$$IpHFMRkjjKN^7a6>Ac-j&_iM}A+$Wl#f1U*}(g(^Y*u z818=trO@q=B35LA?r@%%xgdt(HC(Z}=SkTN5yW>5_t!P%+fIP^VO)`Dzq?Vtoea(N zk5kZQGu%AhBc-me;>L$2K>u2@Y#j(mwxkam7=iOn<#9WdCoIJ&*@4|Jp+aOiD%ffk7W_1&V zSX~;47p#7&~gF1893$(Dxv<*=t?y#pG#&$}oU*QV%*%2IP6jkO*t24goEEgi4c@k?u2U zz-E7KXP$EPu{Ub5Y4<;$TptJcx2yB~Mx-92w0cKQ4Zo3~NF9y^j|d<(2=(m^_g<>% zPzX<_C8X}>NN1{o;kTgOb$JbAs_h8Fvg6(XINvf6A-X;2`y3((dnC->EC zeQF8zjFAwT2i&S<$;nt1yyYtTbD`iKro`8UL#VGTGV;4eTUG)@^>|e?{pRG-ykrXIbhdtfF6}jkLVN$-vb1C}>~(N2r}{Dz-Nl-Rw_Y$x#|M{r>)a z6=J&;7O|4q-|rSjgiuagwA`}>6|oB)FeQ`MZg$6;5qqZ6Za2N>7dZBma2WWs9J8g< zShj(LNd(LlNhVj_ zoAFw8JUjNtpfudCVHVx6FkK9r?kMUQQ6OpB4kvg*sE^*#_K16hCFk_nBfleo1?cF- zKt@7m9+6NOF@SlIeb|tkj5=IfTU^UZO=$6?elL63Guo!92X>$ja-RdGpkGD&IN5*r zR?wcXGhz_Pbrhe*$79N+$R-1P{SIEw0_WMn)Kt963}_QPJ^kh{EWiWI_!8##9BSwk z^=0&HYI8)nkTOX#lByfC+HXcvC#h%l{oDrM zx#Vqq5)zBKc|9coO4vld?e##zQHW>3&eGP8K|zV7a16C6wiJcw4-}J=L3#Lm5$8)Y zj6no`28QaZ9lDObXi>g2)_-11%F8Q+x{kjLjml9y)?5PBN@pDUEh2(jd>yG8kMVKu z$zkI(GjU4+5Z*w+?xBXj>V_4C%O#9#^v!--QzbkV!9pUL-08xyUXS=fx)5Syk9!r< z1)45`x{Sw&!!7*u7+C4|o)#<7k?4tJ*BQ9cYHfe*T~`9l{y()0=yA4!Y3%9wg7D>! zo_jz33^dbdEw^sViDW+`K6=F;gUx+(8vIGb%peS*8}7JRzC&VH9ej$p0} z^XRfW;wo?P7Q)U<1}wz~P>(CpOXbRUcJ5GL?Cq!W5Sk&M2C(s7>N;~Xqlr;Dw1_6> zq+F035>33=H9b;WQ~McSaj8Q(Ia$%tay;44uR*%5vexED0}?J^rLQlXbTgfnZpwqQ zc9~UTNk=pbAtK^YnBOQX3zwT`ffj0(L<`lSdV30_t&nMw^5WvWWUZfBvrmJ~T-He+ zepC1MJ{jtpC3pDSI}%hUQIy%>2VQ=;QHO2R*n|D`ndU%A!Bfzdpn@DYKwV5MXy17O zYB3FC3cv|4m`xuorPr|Yv7^&+LNbsOrj4mk+)$;K7Q2ZFQho+O`4xI7Vy3&&(ZSoE;D;kMIg{J| znd-{q%UflZX2Z8t$cp51ETTGDJBu=54;zgLknq!%(c1k3NRa1ikhT%TZa%%Z5{Lel z6H^qC6xJj!YOZ1(3gQM5=@putP;D|+ztox&iv-2%N7=oRh*Aqq&NWN{$N5o} z)db9QE+acEVY{LF{HCI#IClCz3tmr zlnmB5$^!11UAcO5X7~Z|*8*4Q#9%Xdj;gO$YPiUC^K0_ST3Z0JNbk`D{URl}?_2VR z+g4l#C8M0~t)pJHY;Ta-%!h!h4}1Z4Z1n5_vg1O;U$N?&4E|T`Gfg~QF#YHCjQAv9 z=GA~IGFT^H=xtJVwf1pLCqU1oCt%K3N_J-Lm9$uV*D8(r_t zpZRQMaN@*-sl|f!+QD`1^k!xy`prS=KhwEEBr*wXc^PPUgt6`Zj65E$7}Btn~smIDoJ(|^UoqEq>;{EXYwIuRe$EQO$2%S2WwUq zyv1h<`0HJOQj0In(do@qz~RQ6jVgaE*Wy^C4q>2e4{?m$DCpBBT*_7jnX=7ISAEu_ zk7!(%X@^lqN;F;2G1E>?%u1wpSy@meax?-5$-30Dv;qYcdRPI)CFFq8hnZoFYeS3a zGBPe36eJF#M4o3rZ+))^4Q^FTw~_0auxAffcgU^aW`EqnJtN zlP>%{fuG1bLRTy~1o>4J$M`R*jK1sBM}xOT&C(}Y8H`NKOfQC%?sXjHGXYJNn;>Ty z&MGWVl-Ep;rT3r-SRUfxuAhewIQ{5@8LY~KVIuspI(6oTuj0V>&NSQvZ)tD{bjDD_ zwi7R}6#t?xbaNW#>}Pf-2f+W zrd32jvl6DMgov$@XWmEWE+3zXY6c>!aRG86%0^YJDF02pz}j9|nHvwusQssu^}K-* z8vNxN*>dzQ&hxu@*opIkX5~|nR(D?EP4}}MSuq?sp|pVJ<%4IR!YW?9KPrkz=Z_8X z>uDLm96P55fF2M{u*UnNEqB|q_Nen%K$dt-|NRTk((3`v699hOnd@!)q?N-=d`Ock zwMwbxYnArPGt&lCyv|X{SziuA&U$GEA2E(CM$u*29>R1emk{=nyTDC+xvtcMJZ?sh zjky||AF-T6{%XWq+XoT)0K*wsN*_NS4yObNx{LMrPeQqf2z844xG((RDY2FGL7^-5l@gUpamH)#cWCyLX&$Cegb|o;x~SVU3kwU` zpAYLCvXI)ys88G)>Vcp)Wc?n(Hf&N}yrQo!c=Od=WT~(jG>D>v%IL(sT2yg}>Xsmy$Hl z?#z@cUJkdI7HFuca~|n8BN9{O)(!^T&_6M)0;J-5x`{I_4(|5j<1Gb;!eUq5V9f}* zzk^03$3^OZl~-Nu8oJc(SQ7kmdxA&Y0W9+FG)Dk|Xh2VopLGund5Z{?B% zn__NC+or)Xkux(VMBhhm1sjemBe%0)PCOIk8S<4+E3DZ~WQAaxt!atl z)BIe(Y*zPZe?NngpAiFb$|f9ejGhE?P6J89#YSfdfEp`QM^&ph@YTDTn&-j7a@!&`j-n zJ>^SVEP_Iq%7$>-j^VxOVho(QZIIwrF5Kde%chW}9bXG3l%z|j1P197O*z>o5jmN& zk$Y_SfXzlIxzt_F7DCAbF{_-F3=*kW(t(x_>Y{3M7CNP-jZOA9Ms*w)%V$3ZajQ*? z9p-UeGI6)qysw)jxcF29tjqDn;*E2x3Ltcj>=oFg*e9W68$5X39$1j+ghzqQ^Sh7FD4l zGw74Kk0l)b73Sh^<~#+pf)8#^D32@*Y>9=R5i=IwjClj)Miu6I6M;7M(`pJNaL7;47T*bDDhnGdnvuD{C#4oqFq2zHjDD>FT=b?p~zq z+l9sx*Mc>@$?17|hUS*$a!d{Uan2RL$1N6x6$nQD+Xp|)`Gg`Uu-mf2Dtf4FAM#qjFNe%erC~@PM)qGZC8!50H@~{;^l&M@El|fe@qY z>iUN3yZV4as#m>zTTEQdP*UYW5YPEV+6#T0@dKHMQjYgi3C1Zf&8q0S$BQ z60__Tx_4tg5!zI;7RnurY7mj(I>E!C6C0mp2}5`e!>t*FA7)+_K?#(RgT+JyuhqP` zdw*gR|Ca*D7}7uUk%$Spnd~!z7J-3 z>)Cy`1rUi(dUL91iUHZ2s{nEA{juOHpgpZn1N3FWT<$_yZ96X=F1L)_g^0s(BDlB6icu4b4cD6uMU(a3_%~Ip!xTMmcwztO zsK)decOfYzC?Fo?%b2+%p-y2q*HOxT6#U_&7pSCW8yh8KPC zAq{zrZ2N{)7DI&iL03Bi%izCpqoztNe^nQ5Qg@ zJ=9{2Lp^b7c4A_te`BHE}%cX=8FIJ&qz*&%a<>$^2?V4v>sIO);;3P3(XYS zI_2XZ#nLaq+-!q^vN_4jkQ$+rs$o<_xI6#)I8 z`d-3fp$L8B@{Qrr0*^i{^%fbwwxylf6y%2KNg?k4@YzKZ^8J^lCKB{WX0SPbdFU+hrD+6anusN}y6nF)48@Vo)edlVviN+0VO>rW89#pIw<)73cR6TFp328Y4^ zDtx207uHuN#efug&McXk0)o4tkt`pSppSS1m1I!6ISEBwt#T2&UDnpnO$^K|;&6Yl z&C1BtxVf?T1$*Fv?K@idGY1WnBM*FJQd0CfiLSQrMa2(`aK*?nx7kdj+o*sJ2I~AF z!fevCY(#65?>X^X9TDYY?f%l&xvDd!nEQJoZZOrG;O^*eUG)_?27;lNO#_+f|Mj-aMI{^h#P+ z*YGc|dnDTG>1bunI+B%UY$#m6Rlf%1r(Fu{J^df-3fdbyZ@J zm;29qJ@i4(EV6Ns#XtJf{DT|gljhDysD5X?;B{I6+ zWu!GwM`tJ*9;`^7SA9bT9XV1OfBhQRM4OtXa6jZykbnEy%mW`>8cg#N2y+7Zs`1u|IFQFrUERwcD~X zn*Cn8)_&8pE}Mlq2Qx~UYI0+VT315|xaaEzg)NlTkbum^F7<_fm7a+j;!sFt@cf{sL))>#X8R!F~0)tmh(l zdpiJZ2VdSA68VZ%P&XVOqmj^ORx(qMe`Hf-iK)g9GSU+-uZ`E|=Pz|n?Gd%I=7rAU z2>W&XBI%7Ic{>6nBuj(izry;m>*r&Q(`(<5Q>zknrS`weY#Z5 zJR|MR!hHMwj@41@m2x@YCyLV^Lsf={0^Zl~{lc`rAZDd)k^chfIE8?9gn~+!oZDEw z09YDM`V0^*AhELxd4u5@uZP_TsqkN#Z!bqi45`neTic z@H0-DWN65EA8`O!m;fDb?waXz>DP`=g9EsWk#bfdYzyQv;57>D?U8;o#@ptAB3gI6 z+oet(G345B)!{5S<9LuJsAGQ6x*ohayNdAFWm;eIojlracynHk_2aD_^ldf7;4m_} z=A#+0_kbIcrchoGQ*YhZ4{55&D(@+Fs`@I)VB=9@mJ;L}sM9h2YUwbN4Hj4#Rk8K0 zPMKH}4eAG!7BP_diCV%OhZhW>j40u?`^jQSn$t=eKEf)U`?9Ppgx4tgT_z!qyV38) zNtu0sMI)6MA73wd&;hP_llr30;mzhbN4HC+BUzKvlYVX!mV60KEzPlkCr+DLK5m#f zbnjP;`r=Kr+{M*7%^SNJsY&&B&rp!8=V7^@5^>u~B!FKJcyx4rlftb4c=S-b+R29S>(qM}7)imYKZUC; zli7V1O~rslJF6_FJ4I(?0gnk=8g~P}y<3+_DArcaSpd74`E$!Y&4eflKT;{oLVrYB z?iSEIpogO$es6G)z6;FA0F=6|qoaRBI}^Qb6{&r+(Z#*D%lL6j%)F(61T$DrbU;X# zL{xd;GUfD>SjnQs^}v5RFuKK!R#GN4bCTWnDM|4pV5Y!B+C9)^shZ4hV|->^^w>MJ zL4kM6-cH-R)qI-IB1>vgHaw_et%N%h&;iubSh57tg_a<@s zKpzIUi&*!y5}}2F0Nfq-2m8T`R?bVSjpSeR5v@#ii?}Z@lgS{`0l>CVECUCc}Orl%&12&6_tRr+xv^;sN`>O+648*n`-jN^m z_J?rd_g!qeF6epOWdv<{tYDX2dzWDDx6tAnY$%cS5Ago49vh0+_+@<8XY)d9o!;#4 ziUN#)UN~2AqZOf67QkKUz6y0QXt@2xz!uZVWvbb=W?sK?HiGffjkr};*qlX3@sH6T z+z$Y=X&Co6?ekLVhc(|k^RjkwGqHrXnR&;rx!L;!Ct1pbOV{?^k)HLdM@QE=Q8WbS zl_G|mDDRHnRayW|x7p$Gd_Zx+w@Buv6!L@>h~Jh(GhCHCs;`1&*jC&*AIex|X!a8;vjWO>ntgM9T>ETPZ6naq4 zy2jlS+%bZJf|Uo90$m#>m`c$AbYyz&h4m6{!)MP=O~jp$U}U9uJvjMfYp(J@6+xnG zL$yn4Lz|#XWtWcm7q$xQH<%;6E9MiH>xa+u$zmkT^Qf7V(pjLPh)d?ew4G_+1bIp z#k!JOT42QE{+pvcZey7@%XOwQ&WKTaEQ^UBRd=483pM)nT1+vMvjzCQPe{tbmK$?r z{ZIq(-5wXAcy6x!h(DCL^DEXE3?!@UVEpfa&6IY0w`yK09e&Oj>&ROX!t5`V&YO9h zR^ss~7c>-LmlT{mNRwykR{AMVXm-#rzVIWZBNg3S7P(iz?w*>F*1U$vG{7U8H|viH z{Mua7*@z;uy#DeH(B)gB*s&HKXVi0|$?PILGr7TOLMu~IxhweB&m9Sc(SyBz(o;## zy4eIi(~{fkG_KNdVD|vh$r1mSU-DUraAgO@PQnH!EhJNvdsxWFr>|W;yNCt}Vk_dl zUk|ChzYr%6?I`hgvAgm>h9oPpIFDD7AvI-0RL`pIs@e=3Daee!JygvskvOmPTbiex zP+K_p%OZ=}K;DVz-)2+bm=JfM-ls9Pp-hIdPQ(Wv`wn#Xp4gGY zJCvxxOSE{&X?`tGR*^D#yoWw~0uM4ZGwJBGX!cp`4E6B;`RxfKCNnN0jaA%z=7+rH zKTxSb>tM6#_+VbyrafSx=Ht%UquYQteEe<~^;BoiT@2t&0yUFZbkep1Sl( zQbo4}%L4uzZS_wUtK#Z#Z~IL9jKrq<2{T1rzOKNVzANKHYX~v}3SQT>ws9Y?DX2*b zWMNd~Z8{S*0x^&c1n+q71_(1Qx>pM>syy}<@~S#_0D4Yi*mAg9lFwxPJ%giBpc%k> z7cO}1c{c@q5fMQm`(vW-2531eNK3~Xr=-$QHEE~Ohx|&g?Cf7PN`A?DUqGvM3p4e> zXTr*L2^XS@O}@|Hs62_Dh@S5nyFDcNTXU|~7uC7fySS@^`%z+hr!F%52M;!`>doB1 zxQe~7=n=y#ZKC|?|Xx6^N2mp_S$)Y1I`B=*Q|H0(I}GQsFW<}f6{=hBbVt# zmrYExk0jsOSqM+TgG>82a-%O;S*U2^B=xi*<&W;B(BH(-sJQx^PKx0IjQ=V3pFG*B z(2)5Kj`H4*ve~?(ryp*3!Xpi4zJLzOpo+m){}kY#KH#s%>R*iVWb@`qUFDHJGQM#t zrszLdjDJ$nZy5!jt_zYE5Rtmi+(F~kWe4)(cx|NbfQF{M_NPqpxgBh!E{X<*hZ5(K}TENZkPajQ^8huT<6eHq#(=>(-#4PBe{m znPC)ZNe=1%L)rgJbwW3fmBTUaizD_OmN>k0g-3cjh2zwvzseNom@MjPltvr%j=jx0 zD&|bqv9FR0BWaWVuM=&n+%w>d3uuzqjJg(1Q-M#kqJY0f`W079qoxZO4UI$#jt#88 zzftqP%P)C+*$R0rk^+A7e|^U0KBM2fAM;c~JZVI*a_Rh8%Ru21J{52c)IAU zVYzfl%CrIeKK7l8xs}cT{w@Aix07YRv8JG%be0sKBpRnWC%y;PHJ@C%M;*Mv?b|Bf zYuBH9d}{1yrl`>D62bgIjEL1h;TUjf5>p>a=m5w zjqY8<#Xp6*FL}}PP2Xad@CCrV<=4FEtZ~?OZ(h(w_eUY7utHUR}J_+uZ=qE(7K$7S>eLJ6n zqX@YhET64@Xi-J!=pJ*%sfK%lyh@rTV2ml!d|rOf&EIWHKL(JC_cu^W_jgWFTq#S- zcG|Ni11l#%9S5`p;yOoL`)Jv0mrq-#7rRaq6Dbd&AU*Dz&5jotp`5HnNnF^yXY9Qd z?fyTCEVf4Cnc1#xMViRc(czfeQho_!EH1X&k2qy0ZEEjnp9c?SELfN?eVouGq zNOBoC5^8@yEneQ^S;mE^1>_g;37PZlo2P_4ZS2ZZtGY8<-+W@emZV~&+(MJZ_g%}m z#?wC6XE(f|j?PhVQPNt9oPU>5$f1M4j?TPK{6vF3v{^_VS{9s%wK}ex528I}VEfYt zJ58(Q$odI39^LIp=yXj610)b`jNesX$g-iG!lIVN*J_KYZJ|)$mCw8P^+(=Ks`_c}14}q2NBNpyWdT zdnAS^mJG78lpT^K@57#~@2{zvuOfenJ!ar{*)i!}Q3o263)+&7YeL(u~! zrbn;!FjLThncSPwkONzmOq9T|9Noe$LtJDoRi5>`3I zC(XvzB^JY~Y&6zRrPhFntnBVaIqvY=#rN*#)3y+esdC3+^yk63{yT(r+lCym!c<4b;>#A*A9Kt5`A72mh)Al z1AKBCJl|${n%9wz?pY_`)bBFX+7ne|k9o1swnG5bX@r#5-T|`L^w`uZ*7)_K?u;YO zekkR*HcaTl(T86PsCIsBt*hb1I}`K@Y=w>Dm1jlUOb3&MUsE>3A%kDksvg+IKL69e z&0eYe9nCKO6I6XC?M7(SaJ#QEYWkXJ3H5jMW8rlzO1k=EW~S%IR!V8X z#IYdOd)LdYyuw!3N$TVjZH)hEp++%R2QT~i@ku1Kejs)E-V#j)zjbnVHZ<1_;pd^} z$^PH2&a*tXPKiWICarRN3!0{-q+AzBGVq{ffd(ic^{9f*Vds6CI{&MkMSa>?eCZ1* zHxD=K&HqX}Q7whhgeYD4{Q0w{hV9rY!(Tn=E@mYf1kPFV@Z`}D;SJAJ{~LkN`Z!)j zmyU7$|30^j-c{NbTI|Fte7lG+9)}bZG$}u0U`W;AladB*&qb-LC8{lFMn}`;fCj|S zJlVgRc)+kA684#t5C^NPe(UYmgX}~0pq9_J=%pGRJXVjqDw&kp*wlEpsBj6pGJ&Q1 z?+o63mn{8!91>SmbR2$oS++?wOj%hUkbI71iNQ=)X_VvOrNYGSzjsf-#fm7Co_Fy{ zu*)2#awCK-8@R|=4JD(5)_esQ!}8W%J^tT8Tzdz!aGmzcB^{ zf(i)vPGmE+N(&qY;WRXW%0dhuCU`!}(jzxpTF;@o?(lAHS+MLmZf(8tk>e{dE{X__ z4yx>3k1z=IVE^~mwjKL%+d5ghn_h#tbREj2{bsv2=WW)PU*F0iyzXA&aosyEKKZ;E zGhQoxClp-k!7cpSoh0G4NMhDwKG{jcFj%F4Qvm`G1+5Ed`w z#fwpV#ZpUAYYVcNE)xP5>C9}DPyif`SpzLApkpy*>sePHhlX^#D%{Aut*WjYEj(}o zr>o#!JFvT&_EQUwB<~wg`p*17EFrA7`?P~4?G}1i){msyP2Iu|-@?6Z$0K(Yss-DC z;{O)OdRprPeFTjbZA#Oy$Ckc(PXl!eBo07)M`QLK6AAIm!jD>|M6>B9=Ei@(b9gXw zJlTXR+73+WmE7y&^cao}lZ=cIfic(D+pCcDNHggh_gnq@G8oMdOi+}`fJV7TUdQ36 zvwF1;OBErT6#^5(y**Q1@a4x=E(gHo`b$3k`)|GLa)C3!{p|BDP!4WykqJtP10O8u z!e+Xx*}1Ncigi~Z*P)@3xMy#63-XtIY*e}VIov`09Ma4uLyAm(mjE+2O~jef-0E1VWMSfv+!iQHp+4Bm zBwP82H79wrr(wMG-X`oD%WawCV1m7bHcB~JXmCYsZQ{59!vB$W>^jgQtXAKCj{%PTevO0Ovc{XCtB zrQmJA1NB1x(>`nQN*4}v`8|fd!9es8xry)zK~q@NV%7TCxz)tt>gAmII8QJ86=re! z-MT9vHbYI%tF=FJf1ZcLet+_WqUcAn`&>qiA+$L9KtLBpDN>fR=oA z_F;N8E|R(k*^KBo?}Bmwv=H_iB>%`+e2d3d-eH49(&uf=)YDsbRz{C=KejYIbLDVG z%PCG{6mCoC4wXT~qo%&!S@dabj>t&-_|R8L^v6?`ZZ&sOBUa5XjQCB8i0MQ1sx5%b z0kRQgPPqNT7k&M!&WpF>Y+wCoVYAT)+IIu)o91eZ5u$B^)y_&^IjM2Rt;-Ddb$p*O z?u|CN33?taTX$nSa{J8ZPQJt?Gc|Uh?w;idYuYipw$47DfVX#BMCw_XmcU_l6 zxoH^`eF+sXcL0_&!9l+c4^RS+Hj=Y`D9y4C7C)NJ$IAx4uGPYR<5mUPXo;z!IEO#b z{NN}H58ur|Qx5gEiLdOp?fYkjpCri0-0uR$>XoABlPYTxGUb=jEOzFh{2FZJa+8iDco5OjZOHGx9~#$Xel;YAlDuh z`=u7Qm+u}BcQq%0jJ)yLRw*P@KUrkjJs zlR-yS+?2+?Qj{Aykp;p!i11*7i+7yfM)$a8vyrA}FR1Af$~ zq>;J0S~cN<&(a=tjx4WUX`#6?-Qu&?TI-G%*<89TI2Pkw(!ePv^UFq$`s==Tv(zu5 zfXaRd#E4#)6 z;M8-KKE7w^4_>QL9=e&YDk_s(SnHKqc?GN1Mr_RW?RL>LgV+cKC(28FApUTmD!&V^B< zMX-^K!bGP@XG(v`iZ?g;F|VWF0k~GGDdgewM)TxM--sE2I3e z6kj8QJ=yH0#(Sc!;Jy8MF%e;5>q6np{j384T+mKa9)lR8-kGuq5yiUo*R^ra+R|R> zf73`IZHRSkNhHxzv(@5R$(!H55uoe=>tGNn;8F;}WEe8N@KqhweefM=mvQr8Hs`%} z_*p(`Q;Vwy!>~RL!yHw7L#-FBlIyBcGkm#mbTQ#)M%$o&cXn77Z%6s6sVS?ZeeU5k z&HlR;3}MA?BS{!>mO}hAmv77b?=b@q7)R1j_}MSN~H#X;#$R@2Hd=hBHKPQc-g zTw&@xT$rLJ$nmS6rv1356{u5ync&VD-re_?aPCOIr~Xcjem_>?5tp_nDSvMU36&g;CZ8FU#m z9b2NCr$}8>%Dm>9R=5(qiZUW~t$4#cEa4Ub4-~xyv~wLcu8K+JWhwW0&tnj+vFR^E zclMmBUF7WHh-aMZF4VjIrz|4=A6xGo(8Th+59{SBDgr73DosT|dI`PS0O`_8=t$@w zgkDudq>D%mz4u;2Q;;5d4^8PUl!PRN`Y!ig%jf%h_dmk!?9A+$nKRGxoHO(D^R=h@ z?&-i1c24tO6a7-eZc%qyEASW#c%SQvXRV&gVq;;cDYZt0V4zFg-AMj&kaBG#S6gxxOUuwu@?R&1EkAl&)!V_2w!S>vGe(j}IHWyyF^<>g9Uc zBI4cV_T|Yz|BO_?MXKbHEzQ?MZMepJp&y0bL#Z?xK{}U;!>6)6YG~3TiQD2!rMT8DR+(MvoSfpDuIU%CkGwf8mmZ{WhXP32SRPUNRON6}8wDUQK6R`8# zr%TJPsUk$APcHYYEG`eJkZx|$a&U&#)q$Q3i^pJY&GuBYEi16<&kmK9K2yuvpjj7(7A*j3b)>i z);NQ0zoP+{LEvu2sR|-h-IvjhE&4E$i=jLp7g?0-=YNyxWmfcZ^qHxJ-;NF!G5^%P z(9&{0zN~N^1)x}-90Gh=Y|*1S_(-Q+^6$&jSB>b?d@4#l=+G;lmXYj~tj|5Ef43PL zLbA}z-VJqqsh_uWX1DaR|9Fd}{8n?wp#1innxn`fIdfSqQKiwBQzxjTd}P;YOjoln zUYE-myniA}7*FskaWgqveHHawn`VL+fE}qKn`Vqgm4xXx&4?^MtF-dmI~$UEl2Nh5 z0Rfw#2{VH%2&sv{HtA<=sz?q?!b=9gEK?c&b*hpxe0M~6__h!<4B^LR9(dQy?(BlD z01aQ9haDX7zRvM@A6>HSofzs~NSxM(s)H`$>7bg{5w{#E%@~6s^E6^$vD#rS47{Mz zrO33e`c-$i*q%IO*#A3Fh6`WPKKFtMungjVEaQC7`4Vo!slMLNto?=(JH*;PF;zBr z`@IbVTVP^&Byks@5ArMozb}uDBAo7u>u@=k*_m0HM8aahZ8(6dh;E3^qV#EqOo}qV z`l3zEbnTwk!!~~W_)7o!Ei7ml(MOhbX4x128K4Kj<>eSkMTm`A(8fRO?2{*N)rr`( zXcQ5s{Mp)ck<|EE@#srH96~uH-EkoL3~}kk$lPFLCsAl`uFM~g_?kL@z8iS-g~7l6 zeEbA*LL}n=_-5F!KH7mBb_fm1B_Q+@$Wb$)H}&ueB@+|=GgEi>6p*Zl&;SI5+rE4d zC8wmM2uMknCehY-pmP6R7gh8`^DBdUyzq;y_AmR*Pc(G zZkRhdMwUNh7Xz#6JdAvve<=F$=i|V(D>J<;t8m>B(2TQyqBb7EWY3t^^(L}k;Ln%u zKzb#}hwI}oU@HCZ0)QI^6+QbVgX|~t9#8vzLl`{nGDq%ez84K=nEuJe^sAKDU)hC- z`3sD<3;@VESNvx|=WaDPK_69IS)K(F!1#CnYS`A(Fd+ju9m`~T-Ro){`epHN-SG|BCm`i@_B(;G1{ zF=-H+MZCSD2)VkR}So4-)9@4T{< zJo)}*vgglOofJn-UQpE1;^K=G;5+|&eRp);o^70-)<3)JvFYMcc3$J|s6>0OeX0S_ z8k1!VV2Yew><`s=^D;6Rf4_G#Gb`)1f;_S+KFiafqN0LW0Ev}uf%W2^Kd2JPtN@7Ntmy{$ z4PRT<7@e^crUK28v}h*EWQ8-b+o>W%Var4fz+V5oa&vOs0i=#kP_Vp;FS;vqk})fp z2tMsyFM1oWgi3Ez_-kMi`S*Iwmfr;sj#`i=10d7O`$S;O{CBmonBNGJ7wg~xYR~lR z{&W5o-+IsYK3Ffy0_-#PPy6&Fv&52L#gH%>NudEg_GdW&fe5_epWjQ+KYu)Dyw5|- zKYwuhSC0b_py?B7m44cKfMxCU_;n+X^SVeXA)d7KTlp*pfLHwd#}`J`D3R2E=uO-G z-w@<2$)ImNVQYN_?4dkM_aYkJoFzE>`3z8%*-Mr#E+x*uFtYe(T-5$CE=13;!23U9 zfrdr>(J+QHa+2HZXCc6(+Cn=pPjCem4q||~{M9w?53G5JD_u46+{4dC+~S`lpBc|v zf-Asd-o^YXXs45snwmkS=*A`Fnwh_uPp)l@j1Ss0bTs+VIE0ho1F19GNd*KyiLPx#w3p>IK9CR*c$zmf zEY&9aXOG9eXY21G~kU?zN#H ze$~UH#VE0U^VqeHD(IubhA0zR`-iOD*ju9fsSe#nhuhCJ0&2qP6|~CQpUOJdLf3cv z>ax5{7k*g9I`1}QxXB)d1oGK5oOX^ki~qJ@+4Z3;1y9W7%a>>1E)=GWGi6yzF`C`b z5y!If&Iuj1Z&dWXMGgj{vEB;H%fpXq8WD(=k!gemGbgH}IL}OOy3IWcp7L(tGLyYM zZXR`I>bf}xtZr)hxv-bSOlF>iKk4$m(f}VITV~WItl%*UiUYIU#P7QM&9yL$S+g;wU;v?0A$LotUSP9ML zsOMO`_oyu$nIiY*&>4$h`qk!h{w$giAfHsG9L3qup56xp_jJ)HN7g#aXHdLEp4<~J zSd9Oir5tam0n5gR;MWjm}n?$B05(RcW|6Kq{l%lD73!Gm8=wn*@ezoRxT0yi(YS}lm z3HR@%edo57Of=u%CG~F~NF{#1tCfYazaZq6qfgMEx2}bAQgQ=R+pFIL)p$P>Zl=IQ z87cxe8LfXf89xe)$t*8FJ#%4x*Wkyn6fytt>;Jp{EXhX8^DCf))&EU1DPel0uHj?+ zBr<-j2c%x_M9w3K!BNeGAj&n=Gl3DW8iAtV!AMsxROn$)Q09sxi9}rbls0fzs zn<9qS7dkDmA>6$q(*j5a`Q&8aNGhCM3vVdy|ajgUY^ zRdn>E3LTtu3o3jB&9$J!o|orLM3^7I^B42}Yw&AX6|ukIN5bmBA~AiG5naBVm6{b4 zirt?d`Sd3JC~G@VqJ}S|>_jT*ps+x&KzMf)qdxY)($5}^7?>8`nYE!dn-NipA?oKx=Id_f?C9yZ)HM$dj3$mJdl^qFtXzUQM6ro)NWSGLDTM2l1!_ zhlBmBEpyx=E^XI@#&wx0L@nube>1vCkz4{s!-wjp=Sue%&8wHO(msNRDR^-SOJNJP z$6=)6`-ZR9HiUiV2A06Z>#n?;bqr6Yw0B?aue|7s8-GVrauAgKE|aN;+Bdc*4xc%7 z56)fCB*}&`x2_!BiHaa*V z%9qq$?{=#YoXhEAgnBHax3xjrto>n$^E0oPX7y{V+GJsp7Lbr8drtcHse_Kmg?&+5 zT$d6%^HKc~6wj2xPl=DJ0twEJ6jW`8<<6NItrx2!8hN*4rQFKLLX12lJ5}YS7z~6~ zur$%znrq9r60oG*VJwI))_d^DVJ_ygc6Otdo@VUi>h=S_Q@GJM`yIa{>(UzGBwq|0 zh~ap;q0X=+;xt^Ru6Y_BO&g9YO?Rc*zW}rGZD=@M0d|{Kj|q?WWmS?`ovrAcS6cc9 zS-DAv@Nz#jYPZfY0={t)!BzT9&1pP)Zr=sfO;$9+G0vRcDpcy4A+xUWW{IYGGWC_O zz-B$G0W9wNitEA?zm)m3i33&3wvrxrDK zFX<(6!bx6UwmFs0UAwn~0G7(O(>;Xy-MM;!mhqc=&~CV0vmV}rc3}!++_9$n zlAEf3@L*Hwj^^r+Nu?$sJC>1)ir;}3&BX1B)fl1tIZ0paer_KpB+xK@(W~}A0;_ij-^Rh#COC+a(?S#E@}GFp%$^K7?_$ST=^X}!?CmQ zgWi+)er!}Jq&sjB@}@^>Q?E&<6Nqdlsux@nO(j;CDHC`zx_T|2%^d8`fywB_(tk&g z*`3BpeE4RR9l-3ac$}$i@?7 zi4?=HqH;o?;-0#3gB|%;4+dDrL_4Rl9DsNjOP&IQfVS@SqE}wyBvT7^4Muv?v*`#% zxf=DlzudB-c;`-EWhSLyOmj?CvM)9?Ts|#Ww>o}tMq+^k!SaE()CHU z%PWY4)en1PDIPw=dKymq7546<$9 z&6Sw*m-8AwwFNVGVy^^i8)2<*_mH~@AEVqWx`tQJL)aL96aj54jtd{m&8e7Qzz>KQ zgmWGwl%<>+?AB*^UI{NW)iUqSWDIoWqZ-jWn*6Z!*dro@Zc=9NVNHQzWRjiGj`4G1 zu#e9W39>6evv8A{ z;rIYE*aL-C8vo~h7`unccf`xzI@?VOUOi4(Yf}@lYyPHGb)CK!DFOOYEx*B9TStuO zrVQ)%KH1U=z>6`EmlepfpaQw~_fd~5VoD>Y-Z7UxYSDdSD56*OqkIr8Y|~$&Tyi{vJ?#c)!L-cnZ2TQar^y;jW^y z$)5ZX*-&S*(X^G|S8TpK@ZHs=xP~ZdgTdZgKq6YM*N$y+--k@Lw~&(ZGiWSHIX(E` zV3h>X#+`daeU&P4(#c<>8t2f1atSmsEZi|2QT;j4-#-r~1VolZco6aKL|a(Ae`go! z({!9%Q8;dqv8fZ>x6s$u7fL7P7(}SLX}%Psp^vdC5gQJecUldkq2z>k3-rZn20|VU0pcD^g=i;ZE;+-QU|KRqOBGV5;T_-F6DigE}>zV zguAY8u?_o-K=w*wnMJiKxta@_!YF$r39B{HGjl#!C3Ra1ZK1jXuS_Z7r#~(sjty<_ zD}CyL$~b7mbCbu6o+4%S=J0u084y+DfPfxMjKVSArQ_C5c%_w5QyULRlW$;!)uTTG zYVOuvnqXY3QPos~mx|64{*9_yKSBp__$n_{Yl1uQNz-Ol9yz8L$jobCh?RjXjAQ2S9wdD2Z|Ig3{`g+PR&inc9k>Z9s19|U z?{!J@mFq$`$C$t(j9S1yfl@XGfoy<)*K^nD`+iVj(sjR&gV^&p84gSy^KYE?9{M6) zb?tjRNN*CuI_H)^iWlF4Fl6nZ*hnAt#LSkoI!ZH<3u~dfP&fUPV+}#*+Mx|OH+G?$ zB;}M23w7>R@aKoZADmz&Nyi%Soh!6;jvJc$H(G`~-IVGSX~mq5(P0bYgrvdv4~$Ft z@MK-tXZf#$@66O6iX}IenrpZ7jvaJpl{*=j+XXd!DHP?VA9<|K*?f2y!&wlKOh|9b zprQD=IiY+gL|mynTB7H{J~u0Yj4dd7X()E%dMua*$RFu#HEZlH1!^J0M*A_BTKJKS z;N8C?+_cERd@d8;v>{C*BQS&6ljD|BOZ((7^J1VcF=)?vqY~n+hB^^W%qUAC?tz>oarF6INH178MQ6G{PZrz*K-V7%V#opnq zbK|zlw_8W{rW75sn`|yx)2Tk$yF7-ixX{Q(V6OkRY6%Df0vmhd?tw6LgxxnPlE^(d zt)bEyxF95mrTG{?_gs1*LKZhn$LQ^Lnn!U(QoebozwqW*Z9xtEy_bl!4=>63b@5u~ zn5)}+tGT*4>BU#C;Ff(6dNt;!N)^dd-IT9v^1qJ+P>9L*{~#4T^jy0=xH;i4{Go?V zu;^Bq%`CmiaJBTBV>F4l z*FUOYSAYaC?MU_DH$Ry7^atd>io-EpcdA-jI$v<;DUls+fg`QTCT5oqbWxQjJt580cyRcz@oVL@GlYGl_kli za+z((!fmu~#n!G?Z*5I|{cNB^UGNjzH#UACV`$$pq4t&N+iZm-{kHec@og^!Oh&e^ zB!}5(NI{9^6nLT@-s$vd$SHc>rFXM|HWOVb7T+f7(_Kg-SPfaie7L^S-d=tnbFbgj zwfeo0Xn7|=i${pwL1llZ(y?q`5ZXk`xLu>5gdnj$8-Ycan49YPLRg$AApMx!JiS&+KcJ-%{`x~l|B2+ow}f! zII*)3D7$n+ZktKLE3-(a_F;JZzIctb+D4@Wco;4@H6`P18Pu#y9=#K=U1n4Kc`K(M zYLjfyBdO<>jti&WWenY51c`w!s?f$43HWaRx9aaK&I1QU^w%7o<2Ca{hgz|}w@1A! zknL-T>)(_CA{>82KlW-uGI@Azf_p*QJ~!Z!QMy$=_HFFl`NZCi;W=ANMFzszL_OZzZqx6&}Z_hP*SIynn=8g)+T~tGq+96-_JUE($O3rG!pY7F zP|nf45UoR`4H(fnx_XuHb(ILw3Bn^TD5^>-1Fwq7)AA4Bg+?#CNxb^i|r3;2sp`N zWeye`(oXk0#?eW;>_JmwWuCvw#nB9=8qgJ;p*3>~MkkjV1x_eg;l7hwEMC&b#J0r4 zBv76|B4)~dYt&%-67-SV72Q+s!$&c#+ww}`B)|zKfAloy6VHrCVgLZgIwhAmc}V7Y zj5PJ{6f56Upm~4Q8ue;J{vDs&!sN>pWt9lGPipD~)r{{wmJ=nEHO;uTXRTh|O%Zau zQ@L1yhwK9p=8{zh9UnHSwi_m=%BIJ9?6s{&3!(}%l@FK(lSjsY?4pmXiuKPko!!^b@#eiv73u>6-M* zA08eY7}Wq9>87|+NJl`!`Q@K`jdNdi&n|Q6eg1GM zn#O_+aMJ#lF$MG!S`i>kfFHWI0?^n0UAM#$=fi3Z+kgK3A4%o;2TAnt{YrrSrZ`xB z9m4}?AOLFe>*603Yd}LEDb&s_KUa7E`Jy4nM?XGHyE2ZscRI`t!NhmF zfRrt({6T%{s-BvhHN+0Z@~dLEB#-}Ne^1K#X+*?yob4FxjMc%T7RB1}p`w}gVFq_b z#(epHJpk~_X9&BA?b4LZixinG4+@pJkM|6auu-kk4-7K4$Ohg55OeRH(f{+%67Z1Y z=ADV=ejWy;*|h$2AsI5uk3g;(@G+zBt+KKzkpj?&$NyF>!wG|ue1xb3;gDf>#!DuP zl0d*Enzjz@4sDfVDXl}b2n5aXTv#&NNd-&ZI;QM*tb5>)Gw#;h%&)iKVScgD zdwa&}NtC1m!wn?Q7<9iOtQ8g_meFTpBlX7@lq0BSwID9upwz@$(?e%=F_>=ejwZ>b zL6i|Sy&?s&vtiELVsp5ULz}hYlR5qI!itK@%RG(77|xAIxap611$~<4*kz7VDZWM6 z)BKo>apm%eIC{A1eaB6qwUsnnhn6qJl*RG`Tz@V@dPuEZmrT>~u4P+0wU&-gS)uG! z9s<`?EbZN2ugw8=&5MH_w^~fNQ6xKAT#!a2njhi2w86^JJac7GNf%+!{SBfcNjz0` zQ_e=>g`~o^{^!%xbvDxwzx7uycgBec3v4qgRz0Ua+|KMEp|0A}y+eU|P^}qvF9rrK zec5w4YoCy2cY*Ms=6W-EO8l|^gk7bAQM+eP8(bpvd&~ghixA8uioj+6 zCxtV_`{hJ{Kk!g{<+vlv19{XExLqWs%VD>-S1{MiBluvezLd6?M@vZx8MiASuiG=& z^B!(ERc*UV5N|II^=osBbKGmc(O!6f-R1aT;E}I01moSn_2tZZbMI*dRbnRaR1N&g z6NfhG4~ihoi(qHtwbPS2bqoxpm&koJ9) zxN;-;x{vyHPJd!-a=CcD^+W=@{KETt4ow1PEvZoouI5f2_R!YqxgY4^*@IW!YCHWo z&dCfhP~)~1X-EBOkIlpjWcsrvs}nT|=EVmOoPC%ptnt&qm%01v;NPR5PrS@G-$y{` z%x^H*ckKJ><<+43lkQu!?zU+8ifV2^AI16wy=?1%xh5S9z9E&CP!o8qF46$)7ySr7{=@W0U9l+6%ru-!%>TB>dX z+3uM?5ILRe+GO^5TgY0yy)eVE(DEMB61VYoqOsmS`h~tX-%+PD6fY@xL$f0XDHnxH zj1fpnrZXpAu!r%ZaTGXph|-j`jEA<3N%m#bgq_y1PHt8~slym^OY4l6bBv);{j&9S z34JGv(PEO@VR~0VkV1;)x?8$t*4rFnuObD3Cn@amSgMj|-^{r%Yg?tL&fIGIJVzK;UWYvO3Z*6Pv4zp1s;g?#4W8Q_CALZ<~^q=yF1|NHLnTH;ef~ycJULKc`b8cu5GK-M2h_ zTP#aVP=8vA0jw*h3u(9O#prrVFm`yRMb|WqL9bn1kkG?*P#V{!NiPJ%sCST_q3L~>+>}S{ceUeuywZg7|1Y@@ImGKlm&FkD% zc>~1xq^gr~gBeL$xbyVV?zFp!hy9!QM*q)p^82`1B|4quDtAh#ImgOG$voh;8~mu3 zJ96=?eOF*A)#$S;mFIoxIK}nAXUH=%LRV;Iinyt{_dyH))e#VdX%M2fio=US)DBCX5I3bGGF$M zWjFh^^>0q5C2A%KQ`2tHRx9d;hT@8$Xveb7@o9jT_Eij`#eV zKbEzr(${KlQzgaE<)!y(`)KpA05;l#M2btTTTy3ukW|W{(>#lUVD0(cY%p%_Q$@?BK0FbbJ5?k`){K__mYAzI_q7v$d2X5@>gO&&fa2#5#w80qh+@1+No z*lp%>nDRxv-PrJxV51Hj=xtqtfhTnQ!7jB*ivCd6IK$CS&@Vt;>pE*j2hF$8t}KH*m&s>3WT7D0AgaSMHtq zxHez77&L|Gy4~}M(SOK)=bk6pPil_33j)c(YVdNwpK$3p714|#kw_-w?L