# Чекпоинт Контекста (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`.