Files
PTSRaiAgent/web
Arxip222andClaude Opus 5.5 b8a93ce9d4 feat(web): patient web app with ЕМИАС (demo) and anonymous sign-in
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>
2026-10-04 07:57:00 +03:00
..

Веб-приложение пациента

Ещё один канал к тому же движку диалога, что и Telegram-бот (ADR-004): согласие, онбординг, шкалы, чек-ины и кризисный скрипт приходят из app/dialog через /api/v1/dialog/{token}/.... Бот продолжает работать параллельно.

Запуск

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).

Известные ограничения прототипа

  • Токен пациента используется как учётные данные сессии; в проде — короткоживущие серверные сессии.
  • Подбор кодов не ограничен по частоте.
  • В демо нет сида кодов подключения: для показа используйте демо-пациента.