# Чекпоинт Контекста (24 февраля 2026)

## Цель документа
Зафиксировать фактический стейт после реализации блока `P28-P32` и подготовить остаток очереди `P33-P37`.

## Подтвержденный текущий стейт
- Добавлена обязательная сущность клиента: новая таблица `clients` и миграция `0015_clients_table_links`.
- В `requests` и `invoices` добавлены ссылки `client_id` + серверная логика автопривязки клиента по телефону.
- В public API добавлены:
  - `GET /api/public/requests/topics` (темы для формы заявки),
  - `GET /api/public/requests/my` (список заявок авторизованного клиента),
  - phone-based VIEW OTP (`/api/public/otp/send|verify` с `client_phone`).
- Доступ к заявке в public-контуре поддерживает оба сценария:
  - legacy по `track_number`,
  - новый по `client_phone` с переключением между заявками.
- Лендинг обновлен:
  - форма создания заявки остается модальной,
  - блок и поле рекомендаций удалены,
  - выбор темы возвращен в форму,
  - добавлена OTP-модалка входа на клиентскую страницу.
- Реализована отдельная страница клиента `client.html` (статус, чат, файлы, счета, таймлайн, переключение между заявками).
- Реализован предпросмотр вложений (`pdf/jpg/mp4`) в клиентском кабинете и в рабочей вкладке заявки юриста/админа.
- Legacy-модалка заявки в админке удалена: работа по заявке ведется через отдельную вкладку `/admin.html?view=request&requestId=...` с breadcrumb-навигацией.
- Зафиксирован Docker-образ для UI E2E: `law-e2e-playwright:1.58.2` (service `e2e` в `docker-compose`), чтобы не скачивать Playwright/браузеры на каждом прогоне.
- Цитаты перенесены в ненавязчивый формат в блок «Первая консультация» (hero panel).
- Удалена кнопка «Админ-панель» с лендинга; вход в админку выполняется через маршрут `/admin` -> `/admin.html`.
- Добавлен bootstrap-login администратора (`admin@example.com` / `admin123`) с автосозданием пользователя при первом входе.

## Проверка реализации P28-P32
1. **Справочники и таблица клиентов**:
   - Таблица `clients` добавлена миграцией.
   - `admin/crud/meta/tables` теперь включает `clients`.
2. **Модалка заявки**:
   - Поле рекомендации удалено.
   - Добавлен выбор темы обращения.
3. **Отдельная страница клиента**:
   - Кабинет вынесен в `client.html` + `client.js` + `client.css`.
4. **OTP вход по телефону и переход на страницу**:
   - На лендинге добавлена модалка phone+OTP.
   - При валидной сессии переход выполняется напрямую.
5. **Переключение между заявками**:
   - На `client.html` реализован селектор заявок по endpoint `/api/public/requests/my`.

## Привязка к следующей итерации
- `P33` — выполнен: чат вынесен в отдельный сервисный слой и отдельные API-контуры (`/api/public/chat`, `/api/admin/chat`).
- `P34` — выполнен: цитаты перенесены в ненавязчивый вид в блок «Первая консультация».
- `P35` — выполнен: добавлен UI preview + backend тест `test_public_attachment_object_preview_returns_inline_response`.
- `P36` — выполнен: удалена админ-кнопка с лендинга, добавлен e2e smoke `admin_entry_flow`, редирект `/admin` валидирован.
- `P37` — выполнен: единый стандарт админ-кредов, реализован bootstrap-login и автотесты `tests/test_admin_auth.py`.
