# Спека — Осмотр портала глазами клиента (Фаза 1, нефинансовый периметр)

## Цель

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

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

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

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

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

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

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

Edge: неверный пароль → отказ во входе.

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

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

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

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

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

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

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

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

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

## D5 Экспорт ленты {#D5}

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

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

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

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

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

Edge: матрица предпочтений уведомлений у пользователя по умолчанию.

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

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

Контракт: по каждому осмотренному экрану фиксируется тройка «ожидали / получили /
вывод» (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":"Ручной проход глазами клиента"}
]
```
