# Спека — Осмотр портала глазами клиента (Фаза 1 имитации)

## Цель

Пройти локальный портал Лидерры глазами оплаченного клиента на наполненной
имитацией копии (= боевой код) и зафиксировать логические и визуальные
расхождения по восьми экранам клиентского пути. Деньги локальные, внешний
геосервис выключен — регион берётся из тега заявки.

## D1 Наполнение портала {#D1}

Контракт: команда наполнения `imitation:seed --leads=20 --clients=3` создаёт три
профинансированных тенанта (баланс 100000.00 ₽), по пользователю на каждого,
активный проект на Москву, общего B2-поставщика, пересобирает снапшот активной
даты и вливает 20 синтетических заявок через настоящий конвейер маршрутизации
заявок. Ожидаемый эффект в базе: появляются сделки (часть в статусе «новая»),
записи списаний, движения баланса и in-app уведомления.

Edge: заявка на регион вне проектов оседает непроданной (число созданных
сделок = 0); при достаточном балансе все 20 заявок проходят конвейер.

Критерий: после команды у сид-тенанта в базе есть хотя бы одна сделка и хотя бы
одно движение баланса.

## D2 Вход клиента {#D2}

Контракт: вход — email и пароль через сессию (двухфакторная проверка у
сид-пользователей выключена, пароль фабрики — `password`). Email сид-пользователя
генерируется случайно, поэтому команда наполнения обязана вывести готовый логин
первого клиента в консоль, чтобы осмотр был самодостаточным.

Edge: неверный пароль → ответ 422; превышение числа попыток → ответ 429.

Критерий: вход первого сид-клиента проходит, открывается его рабочая область.

## D3 Проекты и лента сделок {#D3}

Контракт: после входа клиент видит список своих проектов и карточку проекта;
лента сделок показывает новые сделки; карточка сделки содержит телефон и поле
«Город» = имя настоящего региона заявки.

Edge: при подмене региона на шаге маршрутизации код субъекта сделки = регион
клиента, а «Город» = имя настоящего региона заявки.

Критерий: лента непуста, поля сделки заполнены, «Город» соответствует региону
заявки.

## D4 Смена статуса сделки {#D4}

Контракт: клиент меняет статус сделки из карточки или ленты; новый статус
сохраняется и отражается в списке.

Edge: переход между допустимыми статусами воронки.

Критерий: после смены статус сделки в интерфейсе изменился и сохранился после
перезагрузки страницы.

## D5 Экспорт CSV и XLSX {#D5}

Контракт: клиент выгружает ленту сделок в CSV и в XLSX; файл скачивается и
содержит выгруженные сделки.

Edge: выгрузка уважает текущие фильтры ленты.

Критерий: оба формата скачиваются без ошибки и непусты.

## D6 Баланс и списания {#D6}

Контракт: экран баланса показывает текущий остаток и историю движений; после
вливания заявок остаток меньше стартовых 100000 ₽ на сумму списаний.

Edge: суммы в рублях без потери копеек.

Критерий: остаток меньше 100000.00 ₽, история списаний непуста и согласована с
суммой списаний.

## D7 Тарифы {#D7}

Контракт: экран тарифов показывает текущую ступень клиента, рассчитанную по числу
доставленных за месяц заявок.

Edge: граница ступени (например, сотый доставленный лид переводит на следующую
ступень).

Критерий: отображается корректная текущая ступень и её цена.

## D8 Колокольчик и уведомления {#D8}

Контракт: индикатор уведомлений показывает in-app уведомление о новой сделке; при
нулевом балансе ожидается письмо о нулевом балансе.

Edge: матрица предпочтений уведомлений (восемь событий на три канала) у
пользователя по умолчанию.

Критерий: в списке уведомлений есть событие о новой сделке.

## D9 Отчёт о находках {#D9}

Контракт: по каждому экрану фиксируется тройка «ожидали / получили / вывод» (OK
либо находка) с приложенным скриншотом; итог собирается в отдельный отчёт-файл.

Edge: визуальные и UX-расхождения, которые не ловят автотесты — пустые поля,
нечитаемые суммы, сломанная вёрстка, неинформативные пустые состояния.

Критерий: отчёт содержит строку по каждому из восьми экранов и сводный вывод.

```verified-context-json
[
  {"id":"vc1","kind":"EXTRACTED","ref":"app/app/Console/Commands/Imitation/ImitationSeedCommand.php","anchor":"imitation:seed is forbidden in production"},
  {"id":"vc2","kind":"EXTRACTED","ref":"docs/superpowers/runbooks/2026-06-03-phase1-imitation-runbook.md","anchor":"Ручной проход глазами клиента"}
]
```
