# Веб-приложение пациента Ещё один канал к тому же движку диалога, что и Telegram-бот (ADR-004): согласие, онбординг, шкалы, чек-ины и кризисный скрипт приходят из `app/dialog` через `/api/v1/dialog/{token}/...`. Бот продолжает работать параллельно. ## Запуск ```bash make up # или: uv run uvicorn app.main:app --port 8000 cd web && npm install npm run dev # http://localhost:5173 — /api проксируется на :8000 ``` Интерфейс открывается на **:5173**; на :8000 работает только API (`/docs`). ## Вход | Способ | Что происходит | API | |---|---|---| | ЕМИАС (демо) | одноразовый код от врача → токен пациента, привязка к врачу; или синтетический демо-пациент | `POST /auth/emias`, `POST /auth/emias/demo` | | Анонимно | случайный токен, в identity-БД ничего не пишется, врач не привязан | `POST /auth/anonymous` | Реальная авторизация ЕМИАС/ЕСИА подключается как `IdentityProvider` (`app/integrations/emias_mock.py`) без изменений во фронтенде. ## Структура (под перенос в мобильное приложение) ``` src/theme/tokens.css цвета, шрифт, отступы — единственный источник; три цвета = три направления сервиса src/content/ru.ts все тексты интерфейса (тексты диалога — в config/texts/, их отдаёт движок) src/api/ типы-зеркала контрактов бэкенда и клиент src/session/store.ts хранение сессии за интерфейсом: localStorage → Capacitor Preferences/Keychain src/screens/ экраны: Welcome, EmiasSignIn, AnonymousSignIn, Chat ``` Мобильная версия: mobile-first вёрстка, safe-area, hash-роутинг и относительные пути сборки — `dist/` оборачивается Capacitor без изменений (`VITE_API_BASE` = абсолютный адрес API). ## Известные ограничения прототипа - Токен пациента используется как учётные данные сессии; в проде — короткоживущие серверные сессии. - Подбор кодов не ограничен по частоте. - В демо нет сида кодов подключения: для показа используйте демо-пациента.