A second channel to the same dialog engine as the Telegram bot: consent, onboarding, scales and check-ins come from app/dialog; the bot is unchanged. - API: /auth/emias (doctor's one-time connect code via EmiasMock), /auth/emias/demo (synthetic personas), /auth/anonymous (random token, nothing stored in the identity DB), /crisis/resources from crisis.yaml - web/: React + TS + Vite, mobile-first, safe areas, hash routing, tokens and texts isolated for a Capacitor mobile build Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
44 lines
2.8 KiB
Markdown
44 lines
2.8 KiB
Markdown
# Веб-приложение пациента
|
|
|
|
Ещё один канал к тому же движку диалога, что и 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).
|
|
|
|
## Известные ограничения прототипа
|
|
|
|
- Токен пациента используется как учётные данные сессии; в проде — короткоживущие серверные сессии.
|
|
- Подбор кодов не ограничен по частоте.
|
|
- В демо нет сида кодов подключения: для показа используйте демо-пациента.
|