feat(web): screens from docs/mock — focus flow, today, meds, doctor, profile
- /flow renders the dialog engine's current step as a mock screen (consent,
age, onboarding and scales with progress, mood 0–10, free text, dose
reminder, crisis with hotlines and breathing, safety plan), so every
engine scenario gets the design without duplicating its logic
- today / meds / doctor / profile / messages tabs; navy sidebar and
emergency rail on desktop, emergency block and tab bar on phones
- API: GET /me/{token}/today (today's doses, week marks, next visit, demo
clock time); demo ЕМИАС sign-in seeds the persona's synthetic profile and
prescription from the dashboard fixtures
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+128
-63
@@ -1,100 +1,165 @@
|
||||
/*
|
||||
* All interface texts of the patient app. No user-facing strings inside components (same rule as config/texts/
|
||||
* for the bot). Dialog content (consent, questions, scales) comes from the engine and is NOT duplicated here.
|
||||
* All interface texts of the patient app (copy from docs/mock). Dialog content — consent, questions, scales,
|
||||
* reminders — comes from the engine (config/texts/) and is NOT duplicated here.
|
||||
*/
|
||||
export const ru = {
|
||||
product: {
|
||||
name: "Сопровождение пациента",
|
||||
tagline: "между визитами к врачу",
|
||||
prototype: "Прототип · синтетические данные",
|
||||
},
|
||||
nav: {
|
||||
today: "Сегодня",
|
||||
meds: "Лекарства",
|
||||
doctor: "Врач",
|
||||
profile: "Профиль",
|
||||
messages: "Сообщения",
|
||||
signIn: "Вход",
|
||||
help: "Помощь",
|
||||
},
|
||||
help: {
|
||||
button: "Нужна помощь",
|
||||
title: "Если вам сейчас очень тяжело",
|
||||
lead: "Не ждите ответа врача, если помощь нужна прямо сейчас. Позвоните:",
|
||||
block: "Экстренная помощь",
|
||||
title: "Экстренная помощь",
|
||||
lead: "Если вам нужна срочная помощь, позвоните сразу.",
|
||||
call: "Позвонить",
|
||||
close: "Закрыть",
|
||||
fallbackName: "Экстренные службы",
|
||||
fallbackNote: "если есть угроза жизни прямо сейчас",
|
||||
alwaysNote: "Вы не одни. Помощь доступна круглосуточно.",
|
||||
fallbackName: "Единый номер экстренных служб",
|
||||
fallbackNote: "",
|
||||
},
|
||||
common: {
|
||||
back: "Назад",
|
||||
next: "Далее",
|
||||
skip: "Пропустить",
|
||||
send: "Отправить",
|
||||
retry: "Повторить",
|
||||
toToday: "Вернуться на сегодня",
|
||||
recommended: "Рекомендуем",
|
||||
networkError: "Не удалось подключиться к сервису. Проверьте интернет и повторите.",
|
||||
},
|
||||
welcome: {
|
||||
title: "Лечение продолжается и между приёмами",
|
||||
lead: "Напомним о лекарствах, раз в день спросим о самочувствии и сообщим врачу, если состоянию нужно внимание. На ответы уходит пара минут.",
|
||||
day: {
|
||||
caption: "Обычный день с сервисом",
|
||||
meds: { time: "09:00", track: "Лекарства", text: "Утренний приём", done: "Принято" },
|
||||
mood: { time: "14:00", track: "Самочувствие", text: "Как вы сегодня?", low: "Тяжело", high: "Хорошо" },
|
||||
doctor: { time: "20:00", track: "Врач", text: "Динамика за неделю видна врачу" },
|
||||
},
|
||||
choose: "Как вы хотите войти?",
|
||||
title: "Как вы хотите войти в приложение?",
|
||||
lead: "Выберите удобный способ. Вы всегда можете сменить его позже в профиле.",
|
||||
emias: {
|
||||
title: "Через ЕМИАС",
|
||||
badge: "Рекомендуем",
|
||||
facts: [
|
||||
{ ok: true, text: "Назначения врача подгружаются автоматически" },
|
||||
{ ok: true, text: "Врач видит ваши ответы и получает сигнал при ухудшении" },
|
||||
{ ok: true, text: "История доступна с любого устройства" },
|
||||
],
|
||||
action: "Войти через ЕМИАС",
|
||||
text: "Назначения врача подгружаются сами, врач видит ответы и получает сигнал при ухудшении, история доступна с любого устройства.",
|
||||
},
|
||||
anonymous: {
|
||||
title: "Анонимно",
|
||||
facts: [
|
||||
{ ok: true, text: "Не нужны имя, полис и телефон" },
|
||||
{ ok: true, text: "Опросы самочувствия и помощь в кризисе доступны" },
|
||||
{ ok: false, text: "Врач не видит ваши ответы и не получает сигналов" },
|
||||
{ ok: false, text: "История доступна только на этом устройстве" },
|
||||
],
|
||||
action: "Продолжить анонимно",
|
||||
text: "Не нужны имя, полис и телефон, врач ничего не видит, история только на этом устройстве.",
|
||||
},
|
||||
disclaimer: "Сервис не ставит диагнозы и не назначает лечение. Решения о лечении принимает ваш врач.",
|
||||
},
|
||||
emias: {
|
||||
back: "Способы входа",
|
||||
title: "Вход через ЕМИАС",
|
||||
demoNotice:
|
||||
"Демонстрационный режим. Авторизация в ЕМИАС не выполняется: вход подтверждается одноразовым кодом, который врач выдаёт на приёме.",
|
||||
codeLabel: "Код подключения от врача",
|
||||
codeHint: "Код указан в памятке или под QR-кодом, который вы получили на приёме.",
|
||||
title: "Введите код от врача",
|
||||
lead: "Это одноразовый код. Он нужен, чтобы безопасно подключить ваши назначения и план наблюдения.",
|
||||
demoNotice: "Демонстрационный режим: авторизация в ЕМИАС не выполняется, вход подтверждается кодом от врача.",
|
||||
codeLabel: "Код подключения",
|
||||
codePlaceholder: "Код из памятки",
|
||||
submit: "Войти",
|
||||
submit: "Продолжить",
|
||||
submitting: "Проверяем код…",
|
||||
codeError: "Код не подошёл. Проверьте написание или попросите врача выдать новый код.",
|
||||
networkError: "Сервис временно недоступен. Попробуйте ещё раз через минуту.",
|
||||
codeError: "Код не подошёл — проверьте написание или попросите врача выдать новый.",
|
||||
or: "или",
|
||||
demoTitle: "Демо-пациенты",
|
||||
demoLead: "Нет кода? Войдите под синтетической учётной записью, чтобы посмотреть сценарий.",
|
||||
demoLead: "Нет кода? Войдите под синтетической учётной записью.",
|
||||
demoDay: (day: number) => `${day}-й день терапии`,
|
||||
demoAction: "Войти",
|
||||
demoEmpty: "Демо-пациенты недоступны.",
|
||||
},
|
||||
anonymous: {
|
||||
back: "Способы входа",
|
||||
title: "Анонимный вход",
|
||||
lead: "Мы не спрашиваем имя, полис и телефон. Ваши ответы хранятся под случайным идентификатором, по которому вас нельзя узнать.",
|
||||
points: [
|
||||
"Доступны опросы самочувствия, дневник и помощь в кризисной ситуации.",
|
||||
"Лечащий врач не видит ваши ответы и не получает сигналов об ухудшении.",
|
||||
"Перед началом вы дадите согласие на обработку ответов — без него ничего не сохраняется.",
|
||||
],
|
||||
warning:
|
||||
"История привязана к этому устройству. Если вы выйдете или очистите данные браузера, восстановить её будет нельзя.",
|
||||
submit: "Начать анонимно",
|
||||
submitting: "Создаём анонимный профиль…",
|
||||
lead: "Вы сможете пользоваться основными функциями приложения без входа через ЕМИАС.",
|
||||
yesTitle: "Что будет доступно:",
|
||||
yes: ["Ежедневные отметки", "Напоминания", "Анкеты и помощь в кризисе"],
|
||||
noTitle: "Чего не будет:",
|
||||
no: ["Врач не увидит ответы", "История только на этом устройстве"],
|
||||
warning: "После выхода историю восстановить нельзя.",
|
||||
submit: "Продолжить анонимно",
|
||||
submitting: "Создаём профиль…",
|
||||
},
|
||||
chat: {
|
||||
modeEmias: "ЕМИАС",
|
||||
modeAnonymous: "Анонимно",
|
||||
today: {
|
||||
title: "Сегодня",
|
||||
takeMed: "Принять лекарство",
|
||||
now: "Сейчас",
|
||||
checkin: "Отметка самочувствия",
|
||||
checkinHint: "меньше минуты",
|
||||
done: "Уже выполнено",
|
||||
medTaken: "Лекарство",
|
||||
medTakenAt: (time: string) => `принято, ${time}`,
|
||||
checkinDone: "Самочувствие отмечено",
|
||||
allDoneTitle: "На сегодня всё сделано",
|
||||
allDoneNext: (time: string) => `Следующее напоминание о лекарстве — ${time}`,
|
||||
allDoneNoMeds: "Следующая отметка самочувствия — завтра",
|
||||
viewMeds: "Посмотреть лекарства",
|
||||
visit: "Следующий визит к врачу",
|
||||
medQuestion: "Вопрос о лекарстве",
|
||||
messageDoctor: "Сообщение врачу",
|
||||
noDoctor: "Врач не подключён. Подключите ЕМИАС в профиле, чтобы назначения и визиты появились здесь.",
|
||||
newMessage: "Новое сообщение",
|
||||
open: "Открыть",
|
||||
},
|
||||
meds: {
|
||||
title: "Моя схема приёма",
|
||||
lead: "По назначению врача. Отмечайте приём препаратов, чтобы не пропускать.",
|
||||
byDoctor: "По назначению врача",
|
||||
tablet: "1 приём",
|
||||
week: ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"],
|
||||
onlyDoctor: "Схему меняет только врач. Не изменяйте дозировку самостоятельно.",
|
||||
empty: "Назначения появятся здесь после входа через ЕМИАС.",
|
||||
question: "Вопрос о лекарстве",
|
||||
reminderTitle: "Время принять препарат",
|
||||
reminderLead: "По назначению врача",
|
||||
taken: "Принял(а)",
|
||||
skip: "Пропущу",
|
||||
sideEffects: "Есть побочные эффекты",
|
||||
},
|
||||
doctor: {
|
||||
title: "Врач",
|
||||
visit: "Следующий визит",
|
||||
visitNone: "Дата следующего визита пока не назначена",
|
||||
attending: "Ваш лечащий врач",
|
||||
write: "Написать врачу",
|
||||
writeNote: "Обычно врач отвечает в рабочее время. Если срочно — 112.",
|
||||
earlier: "Записаться к врачу раньше",
|
||||
plan: "Мой план безопасности",
|
||||
noDoctor: "Врач не подключён. Подключите ЕМИАС в профиле, чтобы связаться с лечащим врачом.",
|
||||
},
|
||||
profile: {
|
||||
title: "Профиль",
|
||||
signInMode: "Способ входа",
|
||||
emias: "ЕМИАС",
|
||||
anonymous: "Анонимно",
|
||||
connectEmias: "Подключить ЕМИАС",
|
||||
data: "Мои данные",
|
||||
revoke: "Отозвать согласие",
|
||||
revokeTitle: "Отозвать согласие?",
|
||||
revokeText: "Ваши ответы больше не будут обрабатываться в приложении.",
|
||||
revokeConfirm: "Да, отозвать",
|
||||
cancel: "Отмена",
|
||||
wipe: "Удалить данные с устройства",
|
||||
wipeNote: "Для анонимного режима: история на этом устройстве будет удалена.",
|
||||
logout: "Выйти",
|
||||
logoutConfirm: "Выйти? Анонимную историю восстановить будет нельзя.",
|
||||
messages: "Сообщения",
|
||||
},
|
||||
flow: {
|
||||
question: (n: number, total: number) => `Вопрос ${n} из ${total}`,
|
||||
period: "За последний месяц",
|
||||
textPlaceholder: "Напишите несколько слов",
|
||||
sending: "Отправляем…",
|
||||
doneTitle: "Готово",
|
||||
doneLead: "Врач увидит отметку.",
|
||||
breathe: "Вдох на 4 — выдох на 6",
|
||||
breatheIn: "Вдох",
|
||||
breatheOut: "Выдох",
|
||||
openPlan: "Открыть мой план безопасности",
|
||||
supportTitle: "Вы не одни",
|
||||
exit: "К главной",
|
||||
planTitle: "Мой план безопасности",
|
||||
consentTitle: "Согласие на обработку данных о здоровье",
|
||||
},
|
||||
messages: {
|
||||
title: "Сообщения",
|
||||
inputLabel: "Сообщение",
|
||||
inputPlaceholder: "Напишите сообщение",
|
||||
send: "Отправить",
|
||||
loading: "Подключаемся…",
|
||||
sendError: "Сообщение не отправлено. Проверьте соединение и попробуйте ещё раз.",
|
||||
you: "Вы",
|
||||
assistant: "Помощник",
|
||||
crisisLabel: "Важно",
|
||||
empty: "Здесь будут сообщения помощника.",
|
||||
},
|
||||
footer: {
|
||||
law: "Обработка данных о здоровье — только с вашего согласия (152‑ФЗ).",
|
||||
|
||||
Reference in New Issue
Block a user