# Приёмка liderra.ru — ПУНКТ №20: Колокольчик + дайджест (push убран)

> **Для исполнителя:** формат PR1 (одобрен 20.06). Каждый шаг = `🔧 Код-факт (file:line)` · `🎬 Действие` · `📋 ОТЧЁТ (было→ожидали→стало + 📸/📝)` · `❌ Если не так`. Техника «под капотом»; владельцу — человеческие карточки.

**Цель:** показать, как клиент узнаёт о новых заявках: на **каждую** новую заявку — значок-колокольчик в кабинете (мгновенно); на почту — не на каждую отдельно (чтобы не спамить), а **сводка-дайджест раз в 30 минут**. Нерабочий push-канал (всплывающие уведомления браузера) — **убран**, чтобы не вводить в заблуждение.

**Что снимаем глазами:** **колокольчик** (уведомления в кабинете), письмо-**дайджест**, настройки уведомлений (push отсутствует). Живые 📸.

**Источник сценария:** свод проверок №20 (BELL/DIGEST/PUSH-DEAD); R3b «онбординг/UI».

---

## 🔧 Код-факты (подтверждено чтением 20.06)

- **Колокольчик на каждый лид** — `notifyNewLead` шлёт in-app уведомление (значок-колокольчик) на **каждую** новую сделку; email-канал события «новый лид» переведён на дайджест — [NotificationService.php:83-98](../../../app/app/Services/NotificationService.php#L83-L98).
- **Дайджест вместо пер-лид письма** — `notifyNewLeadsDigest` шлёт **одно** письмо-сводку о новых сделках за окно — [:105-110](../../../app/app/Services/NotificationService.php#L105-L110); задача `SendNewLeadsDigestJob` — **каждые 30 минут** — [routes/console.php:152-153](../../../app/routes/console.php#L152-L153).
- **Кому дайджест** — активным пользователям с включённым `new_lead.email` — [:107](../../../app/app/Services/NotificationService.php#L107). ✅ **Дайджест ВКЛючён по умолчанию**: канон-схема [db/schema.sql:796](../../../db/schema.sql#L796) = `new_lead {inapp:true, push:true, email:true}` (G2-B 19.06 флипнул дефолт false→true, существующие дотянуты миграцией). Клиент получает дайджест без донастройки. (Комментарий в `NotificationService.php` ранее показывал устаревший `email:false` — исправлен.)
- **Push мёртв** — push-канал Post-MVP, требует ServiceWorker + VAPID, не реализован — [:38](../../../app/app/Services/NotificationService.php#L38); нерабочий push-канал убран из UI (G4, деплой 19.06). В prefs флаг `push` может стоять, но **ничего не доставляет**.

---

## Шаг 20-1 — Новый лид → колокольчик в кабинете (на каждую заявку)

**🔧 Код:** [notifyNewLead :83-98](../../../app/app/Services/NotificationService.php#L83-L98).
**🎬 Действие (лок):** влить клиенту 2-3 заявки; открыть колокольчик в кабинете.

**📋 ОТЧЁТ:**
| Что | Было | Ожидалось | Стало (факт) | Чем подтверждаем |
|---|---|---|---|---|
| Колокольчик | пусто | по уведомлению на **каждую** заявку (счётчик растёт) | _(слот прогона)_ | 📸 колокольчик со счётчиком/списком |
| Текст уведомления | — | «Новый лид — <проект>», контакт/телефон | _(слот)_ | 📸 раскрытый колокольчик |

**💡 Что внутри:** как только приходит новая заявка, в кабинете сразу загорается колокольчик с уведомлением — клиент видит это мгновенно, не отходя от портала. На каждую заявку — своё уведомление.

**❌ Если не так:** колокольчик не загорается / пропускает заявки → дефект уведомлений.

---

## Шаг 20-2 — Письмо-дайджест раз в 30 минут (а не на каждую)

**🔧 Код:** [notifyNewLeadsDigest :105-110](../../../app/app/Services/NotificationService.php#L105-L110); расписание — [routes/console.php:152-153](../../../app/routes/console.php#L152-L153).
**🎬 Действие (лок):** включить email-уведомления о лидах; влить несколько заявок; запустить задачу дайджеста.

**📋 ОТЧЁТ:**
| Что | Было | Ожидалось | Стало (факт) | Чем подтверждаем |
|---|---|---|---|---|
| Письма о лидах | — | **одно письмо-сводка** за окно (не по письму на лид) | _(слот)_ | 📸 письмо-дайджест (список новых сделок) |
| Частота | — | раз в 30 минут | _(слот)_ | 📝 задача `SendNewLeadsDigestJob` everyThirtyMinutes |
| Дефолт | — | дайджест **приходит без донастройки** (вкл по умолчанию) | _(слот)_ | 📸 письмо у клиента, который ничего не включал |

**💡 Что внутри:** чтобы почта клиента не была завалена — портал не шлёт письмо на каждую заявку. Вместо этого раз в полчаса отправляет одну сводку: «вот новые заявки за последние 30 минут». Удобно и без спама. И это **включено сразу** — клиенту не надо ничего настраивать.

**❌ Если не так:** письмо на каждую заявку (спам) / дайджест не приходит → дефект.

---

## Шаг 20-3 — Push-канал убран (нерабочий не показываем)

**🔧 Код:** push Post-MVP — [NotificationService :38](../../../app/app/Services/NotificationService.php#L38); UI-уборка push — G4 (деплой 19.06).
**🎬 Действие (лок):** открыть настройки уведомлений.

**📋 ОТЧЁТ:**
| Что | Было | Ожидалось | Стало (факт) | Чем подтверждаем |
|---|---|---|---|---|
| Push в настройках | раньше был (нерабочий) | **убран** (не предлагается клиенту) | _(слот)_ | 📸 Настройки уведомлений (без push) |
| Доставка push | — | ничего не шлёт (канал не реализован) | _(слот)_ | 📝 push не доставляет |

**💡 Что внутри:** всплывающие уведомления браузера (push) пока не сделаны. Раньше в настройках был переключатель, который ничего не делал — его убрали, чтобы не обманывать клиента «галочкой, которая не работает». Остаются рабочие каналы: колокольчик в кабинете и письмо-дайджест.

**❌ Если не так:** нерабочий push-переключатель снова виден / создаёт ложное ожидание → вернуть уборку (G4).

---

## Verification №20 (выход из пункта)
- [ ] 📸 Колокольчик загорается на каждую новую заявку.
- [ ] 📸 Почта — одно письмо-сводка за окно (раз в 30 мин), не по письму на лид.
- [ ] 📸 В настройках нет нерабочего push-переключателя.
- [ ] 📸 Дайджест приходит клиенту без донастройки (вкл по умолчанию, канон-схема email:true).

## 📸 vs 📝 в этом пункте
- **📸 Скриншот:** колокольчик (со счётчиком), письмо-дайджест, настройки уведомлений (без push).
- **📝 Текст:** расписание задачи (30 мин), дефолт prefs, отсутствие доставки push.

## Грабли
- Дефолт email-дайджеста — **вкл** (канон-схема [db/schema.sql:796](../../../db/schema.sql#L796) `email:true`, G2-B). Прежняя оговорка о `email=false` снята — была из-за устаревшего комментария в коде (исправлен).
- На dev задача дайджеста запускается по расписанию/вручную — для показа дёрнуть `SendNewLeadsDigestJob`.
- Push — намеренно убран (не баг), не путать с «уведомления сломались».
