Направление работ: Mobile Код раздела: 5.2.1 Профиль > Настройки профиля > Редактирование учетных данных Статус: Готов Ответственный: Панкова Л.А. Версия: 0.1 Обновлено: 21.07.26


1. Назначение

Раздел описывает редактирование учетных данных пользователя в мобильном приложении.

Пользовательская цель: обновить личные данные, контактную информацию и дополнительные сведения о себе.

2. Ключевые понятия

Редактирование учетных данных - экран профиля, на котором пользователь изменяет личные данные, контактные данные, социальные сети и дополнительную информацию.

Настройки профиля - раздел мобильного приложения, из которого пользователь переходит к редактированию профиля.

Карточка клиента - сущность, в которой хранятся персональные данные пользователя.

Подтверждение контакта - ввод кода из SMS или письма для подтверждения нового телефона или email.

3. Scope

Входит

S1. Просмотр и редактирование учетных данных профиля.

S2. Смена номера телефона.

S3. Привязка или смена электронной почты.

S4. Ошибка валидации при вводе некорректного email.

Не входит

4. BR

Указаны в пункте 4 раздела Back: 1.3 Клиенты.

5. Функциональные требования (UC + FR)

IDСценарийФункциональное требованиеBRВесСтатус
S1: FR5.2.1-1Пользователь открывает редактирование учетных данных из выпадающего меню профиля «Редактировать профиль»Интерфейс позволяет перейти к редактированию учетных данных из выпадающего меню профиля по пункту «Редактировать профиль».

В блоке «Контактные данные» по нажатию на телефон запускается сценарий смены номера телефона.

В блоке «Контактные данные» по нажатию на почту запускается сценарий привязки или смены электронной почты.
 1Частично \ #OQ5.2.1-1
S2: FR5.2.1-2Пользователь выбирает смену номера телефонаИнтерфейс открывает нижний лист без шапки. В теле нижнего листа отображаются заголовок «Укажите новый номер», текст «Мы отправим на него код подтверждения», поле ввода номера, кнопка «Продолжить» и цифровая клавиатура. 1Реализовано
S2: FR5.2.1-3Пользователь отправляет новый номер телефона на подтверждениеИнтерфейс передает новый номер на подтверждение и переводит пользователя к вводу кода из SMS.

После успешного подтверждения интерфейс возвращает пользователя на экран редактирования профиля и показывает уведомление «Номер телефона обновлен».
 1Частично \ #OQ5.2.1-2
S3: FR5.2.1-4Пользователь выбирает привязку или смену электронной почтыИнтерфейс открывает нижний лист «Укажите новый адрес электронной почты» или «Укажите адрес электронной почты» с текстом «Мы вышлем код подтверждения», полем «Email» и кнопкой «Продолжить».

Если email не введен, кнопка «Продолжить» недоступна.
 1Реализовано
S3: FR5.2.1-5Пользователь отправляет email на подтверждениеИнтерфейс передает email на подтверждение и переводит пользователя к вводу кода из письма.

После успешного ввода и подтверждения почты кнопка «Продолжить» становится активной.

После успешного подтверждения интерфейс возвращает пользователя на экран редактирования профиля и показывает уведомление «Электронная почта подтверждена» при первой привязке или «Электронная почта обновлена» при смене почты.
 1Частично \ #OQ5.2.1-2
S4: FR5.2.1-6Пользователь вводит email некорректного форматаИнтерфейс показывает ошибку валидации «Некорректный email» под полем email и оставляет кнопку «Продолжить» недоступной. 1Реализовано

6. Открытые вопросы

IDИсточникВопросКомуСтатусРекомендацииИтоговое решение
#OQ5.2.1-1Код FR5.2.1-1Требование говорит: вход в редактирование учётных данных — из раздела 5.2 «Настройки профиля». В коде вход — из выпадающего меню шапки профиля («Редактировать профиль»); экран «Настройки» (ProfileSettingsScreen) ссылки на редактирование не содержит (там гео, смена пароля/код-пароля, удаление аккаунта). Клики по телефону/почте на самом экране редактирования сценарии открывают корректно. \ profile_title.dart:219,229-233; profile_settings_screen.dart:81-573; edit_profile_screen.dart:386-411,444-474Бизнес (Герман)ClosedРасхождение в описанном пути. (А, рекоменд.) привести BRD/дизайн к факту — вход через меню шапки профиля, зафиксировать в FR5.2.1-1; (Б) если вход должен быть из «Настроек» — добавить пункт в ProfileSettingsScreen. Пересекается с 5.1/OQ5.1-4 и 5.2/OQ5.2-3 (то же меню «⋯»).привести BRD/дизайн к факту — вход через меню шапки профиля, зафиксировать в FR5.2.1-1

Ок, поменяли формулировку.
#OQ5.2.1-2Код FR5.2.1-3, FR5.2.1-5Требование говорит: после отправки контакта — переход к вводу кода в разделах 1.2 / 1.2.2 (ввод кода вынесен в «Не входит»). В коде ввод кода реализован внутри той же модалки отдельной страницей ConfirmedPinPage (3-я страница PageView), со своими текстами и вызовами approveCodeUpdatePhoneMobile / approveCodeUpdateEmailMobile; переходов на 1.2 / 1.2.2 нет. \ check_email_phone_main.dart:65-88; confirmed_pin_page.dart:141-233; check_contacts_modal_cubit.dart:52-81Бизнес/РазработкаClosedДве независимые реализации ввода кода (регистрация 1.2/1.2.2 и модалка смены контакта). (А, рекоменд.) узаконить in-modal ввод как отдельный сценарий и убрать из FR5.2.1-3/-5 ссылку на 1.2/1.2.2 (оставить её только как «Не входит: backend»); (Б) переиспользовать экраны 1.2/1.2.2 и удалить ConfirmedPinPage (меньше дублирования, но нужно прокидывать контекст «смена контакта»).узаконить in-modal ввод как отдельный сценарий и убрать из FR5.2.1-3/-5 ссылку на 1.2/1.2.2 (оставить её только как «Не входит: backend»)

От бизнеса: хорошо, уточнили БРД.
#OQ5.2.1-3Код FR5.2.1-4, FR5.2.1-5Требование говорит: для почты различаются привязка и смена — заголовок «Укажите новый адрес…» (смена) vs «Укажите адрес…» (привязка); уведомление «обновлена» (смена) vs «подтверждена» (привязка). В коде заголовок один на оба случая («Укажите адрес электронной почты»), уведомление всегда «подтверждена». Признак emailVerified на вызывающей стороне есть, но для текстов не используется. \ check_contacts_texts.dart:8,10; edit_profile_screen.dart:435,456,466-467Бизнес (Герман)OpenПризнак уже доступен (emailVerified). (А, рекоменд.) реализовать два заголовка и два уведомления по BRD, ветвление по emailVerified; (Б) если различие не нужно — упростить FR5.2.1-4/-5 до одной формулировки.Жду решения от бизнеса

От бизнеса: доработать на два заголовка, вариант А, вес 2.
#OQ5.2.1-4Код вне BRDЧто нашли: в экране «Настройки» есть пункт «Изменить пароль аккаунта» (→ PassChangeRoute). В BRD 5.2.1 смена пароля не упоминается ни в Scope, ни в FR. \ profile_settings_screen.dart:262-267Бизнес (Герман)OpenГраницы раздела. (А, рекоменд.) оставить смену пароля в отдельном разделе настроек и явно указать это в Scope «Не входит» 5.2.1; (Б) включить смену пароля в «Редактирование учётных данных» и дописать FR.оставить смену пароля в отдельном разделе настроек и явно указать это в Scope «Не входит»

От бизнеса: ок, вариант А.
#OQ5.2.1-5Код FR5.2.1-6Требование говорит: при некорректном email — ошибка «Некорректный email» под полем + кнопка недоступна. В коде валидация есть (checkEmailPattern) и управляет показом кнопки, но текст ошибки под полем не выводится: поле errorMessage в NewContactEnter объявлено, но нигде не рендерится — пользователь не видит причину. \ new_contact_enter.dart:67,119-122,303; regex.dart:25-67РазработкаЗакрывает PMВалидация работает, не хватает вывода текста. Закрываю сам: выводить «Некорректный email» под полем при непустом невалидном значении (использовать существующий errorMessage) → тикет в Bitrix. Если продукту достаточно скрытой кнопки — тогда убрать требование текста из FR5.2.1-6 (правка BRD).Жду решения от бизнеса

От бизнеса: доработка, вес 2 — выводить «Некорректный email» под полем при непустом невалидном значении.
#OQ5.2.1-6Код FR5.2.1-2, FR5.2.1-4Требование говорит: кнопка «Продолжить» при пустом/невалидном вводе недоступна (показана в неактивном состоянии). В коде кнопка отрисовывается только if (isConfirmed) — при невалидном вводе она полностью скрыта, а не показана disabled. \ new_contact_enter.dart:303-394РазработкаЗакрывает PMРасхождение состояния кнопки, продуктового выбора почти нет. Закрываю сам: показывать «Продолжить» всегда, в disabled-состоянии при невалидном вводе (ближе к BRD) → тикет в Bitrix. Если продукт хочет скрытую кнопку — узаконить в FR5.2.1-2/-4.узаконить скрытую кнопку в FR5.2.1-2/-4.

От бизнеса: недоработка, вес 1. Отсутствие кнопки ведет к тупику клиента, поэтому она должна быть видна и указывать на то, что клиент ввел данные некорректно и должен повторить попытку.
#OQ5.2.1-7Код FR5.2.1-2Требование говорит: открывается экран «Смена номера телефона» с заголовком. В коде открывается нижний лист (buildScrollableModalBottomSheet, высота 0.8) с removeTitle: true и title: ';' — отдельного экрана и заголовка «Смена номера телефона» нет; «Укажите новый номер» — это текст тела листа. \ edit_profile_screen.dart:388-396; new_contact_enter.dart:184-190Бизнес (Герман)Closed(А, рекоменд.) согласовать формулировку BRD с фактом (нижний лист без шапки, заголовок в теле); (Б) если нужен именно экран с заголовком — доработать открытие (полноэкранный роут / шапка листа).огласовать формулировку BRD с фактом (нижний лист без шапки, заголовок в теле)

От бизнеса: уточнили БРД.
#OQ5.2.1-8Код FR5.2.1-3Проблема: после подтверждения показывается «Номер телефона успешно обновлен», в BRD — «Номер телефона обновлен». Мелкое расхождение текста. \ edit_profile_screen.dart:402-403РазработкаЗакрывает PMКосметика, продуктового выбора нет. Закрываю сам: привести к одному варианту («Номер телефона обновлён» по BRD либо зафиксировать «успешно обновлён» в BRD) → тикет в Bitrix.зафиксировать «успешно обновлён» в BRD

От бизнеса: формулировка длинная, «успешно» не вмещается в одну строку (проверили с Денисом), поэтому исправить: доработка, вес 2.

Вопросы по сверке с кодом

BRD 5.2.1 v0.1 · booking.mobile.flutter · commit 1c4ad0e / ветка origin/main (2026-09-08) · дата сверки 2026-09-08 — повторная (дельта) сверка по итогам дейликов, вторая итерация; предыдущие сверки: 2026-07-10 commit dad0c65 (полная), 2026-09-08 commit 2b93d4fa (дельта №1) · якорь lib/src/feature/check_email_phone_modals/ + lib/src/feature/profile_page/edit_profile/ (вход в экран: profile_page/profile/widget/profile_title.dart) · маршрутизация без сверки с гайдбуком (не передан) Досверка №2, 2026-09-08 (commit 1c4ad0e, merge dev→main): дельта 2b93d4fa→1c4ad0e (коммит d8f0a99 «additional information form server») правит ровно 4 из 8 открытых вопросов раздела: (1) OQ5.2.1-3 — заголовок листа и уведомление для email теперь различают привязку/смену через новый параметр isEmailChange (=emailVerified со стороны вызова): CheckContactsTexts.NewContactTitle_Email({required isChange}) → «Укажите новый адрес…» vs «Укажите адрес…», CheckContactsTexts.EmailUpdatedNotification({required isChange}) → «обновлена» vs «подтверждена» — check_contacts_texts.dart:12,18; check_email_phone_main.dart:21,31,79; new_contact_enter.dart:49-56,194; edit_profile_screen.dart:494,511-515. (2) OQ5.2.1-5 — текст «Некорректный email» теперь реально рендерится под полем (errorMessage вычисляется по checkEmailPattern и выводится Text, если поле не пустое и невалидно) — new_contact_enter.dart:69,119-124,305-317. (3) OQ5.2.1-6 — кнопка «Продолжить» больше не скрывается условием if (isConfirmed), а всегда отрисована и переходит в disabled-вид (onTap: null, серые цвета) при невалидном вводе — new_contact_enter.dart:322-341. (4) OQ5.2.1-8 — уведомление после смены телефона убрало слово «успешно»: «Номер телефона обновлён» вместо «Номер телефона успешно обновлен», как и просил бизнес («не вмещается в одну строку») — edit_profile_screen.dart:436-439. Эти четыре пункта переведены в FR-таблице в «Реализовано»/сняты из ссылок (FR5.2.1-2, FR5.2.1-4, FR5.2.1-6 → «Реализовано»; FR5.2.1-3 и FR5.2.1-5 сохраняют «Частично», у них остаётся нерешённый OQ5.2.1-2 — ввод кода реализован in-modal ConfirmedPinPage, а не через экраны 1.2/1.2.2, как всё ещё написано в Scope «Не входит»; этот кусок в дельте не менялся). OQ5.2.1-1, OQ5.2.1-4, OQ5.2.1-7 (точка входа, смена пароля, экран vs нижний лист) вне этой дельты — соответствующие файлы (profile_title.dart) не менялись. Сами строки открытых вопросов не редактирую — детали и таблица «было → стало» в 5.2.1-mobile.changes.md. Дельта-сверка 2026-09-08: между dad0c65 и 2b93d4fa сценарии 5.2.1 функционально не менялись; edit_profile_screen.dart — только dart format. В regex.dart:66-70 (commit d757e9c «search params», помечен «BRD 1.2, bug 07») ужесточена валидация TLD email (было без верхней границы длины — принимало «domdomdomd»; стало 2–9 букв) — усиливает checkEmailPattern, но не закрывает OQ5.2.1-5: тот вопрос про то, что текст «Некорректный email» под полем не рендерится (errorMessage в NewContactEnter объявлен, но нигде не выводится) — это по-прежнему так (new_contact_enter.dart:62,110-113,303 актуально соответствует). Также без изменений: подпись «Изменить пароль аккаунта»→«Изменить пароль» (OQ5.2.1-4, profile_settings_screen.dart:167 вместо старого :262-267 — переехала и сократилась при переработке коммитами dd54f5d/9db8346, но сам факт «смена пароля не входит в scope 5.2.1» не поменялся); кнопка «Продолжить» по-прежнему скрыта, а не disabled (OQ5.2.1-6); тост «Номер телефона успешно обновлен» (OQ5.2.1-8) без изменений. Все 6 FR и все 8 OQ перепроверены — новых расхождений и закрытых вопросов не найдено, статусы без изменений; детали — 5.2.1-mobile.changes.md. Сводка (после досверки 1c4ad0e): вопросов 8 (бизнесовых 4 / программных 4, без изменений — новых OQ не заводили, только закрытия) · подтверждено без вопросов 3 (FR5.2.1-2, FR5.2.1-4, FR5.2.1-6) · отрезано находок обратного прохода 4 (сверка 2b93d4fa) + 0 (сверка 1c4ad0e) Под особым вниманием: FR5.2.1-3/FR5.2.1-5 остаются «Частично» — единственная оставшаяся причина: ввод кода реализован внутри той же модалки (ConfirmedPinPage), а не в разделах 1.2/1.2.2, как написано в Scope (OQ5.2.1-2, вопрос вне этой дельты); FR5.2.1-1 (вход в экран не из «Настройки профиля») вне этой дельты, статус без изменений.

Бизнесовые

№Связано сЧто в BRDЧто в кодеГде в коде
Б1FR5.2.1-1Пользователь открывает редактирование учётных данных из раздела Mobile 5.2 Настройки профиляВход в экран редактирования — из выпадающего меню в шапке профиля («Редактировать профиль»), а не из «Настроек». Экран «Настройки» (ProfileSettingsScreen) ссылки на редактирование учётных данных не содержит (там гео, смена пароля/код-пароля, удаление аккаунта). Клик по телефону/почте на самом экране редактирования сценарии открывает корректно — нужно решение, какой вход каноническийprofile/widget/profile_title.dart:219,229-233; profile_settings/profile_settings_screen.dart:81-573 (нет пункта); клики: edit_profile/edit_profile_screen.dart:386-411, 444-474
Б2FR5.2.1-3, FR5.2.1-5После отправки контакта интерфейс переводит пользователя к вводу кода в разделах Mobile 1.2 Регистрация / Mobile 1.2.2 Подтверждение почты (ввод кода вынесен в «Не входит»)Ввод кода реализован внутри той же модалки отдельной страницей ConfirmedPinPage (3-я страница PageView), с собственными текстами и вызовами approveCodeUpdatePhoneMobile / approveCodeUpdateEmailMobile. Переходов на экраны 1.2 / 1.2.2 нет — нужно решение, переиспользовать экраны регистрации или оставить отдельную реализациюcheck_email_phone_main.dart:65-88; modals/confirmed_pin_page.dart:141-233; cubit/check_contacts_modal_cubit.dart:52-81; identity_repository.dart:13,17
Б3FR5.2.1-4, FR5.2.1-5Для почты различаются привязка и смена: заголовок «Укажите новый адрес электронной почты» (смена) vs «Укажите адрес электронной почты» (привязка); уведомление «Электронная почта обновлена» (смена) vs «подтверждена» (привязка)Заголовок один на оба случая — «Укажите адрес электронной почты»; уведомление всегда «Электронная почта подтверждена». Признак «привязка/смена» на вызывающей стороне есть (emailVerified), но для текстов не используется — нужно решение, различать ли формулировкиcheck/utils/check_contacts_texts.dart:8,10; edit_profile/edit_profile_screen.dart:435,456,466-467
Б4вне BRD (обратный проход)—В экране «Настройки» есть пункт «Изменить пароль аккаунта» (→ PassChangeRoute). В BRD 5.2.1 «Редактирование учётных данных» смена пароля не упоминается ни в Scope, ни в FR — нужно решение, относится ли смена пароля к этому разделу или живёт отдельноprofile_settings/profile_settings_screen.dart:262-267

Рекомендация / варианты решения

  • Точка входа (Б1) — расхождение в описанном пути. Вариант А (рекоменд.): привести BRD/дизайн к факту — вход через меню шапки профиля, зафиксировать это в FR5.2.1-1. Вариант Б: если по продукту вход должен быть из «Настроек» — завести задачу на добавление пункта в ProfileSettingsScreen и скорректировать код.
  • Место ввода кода (Б2) — сейчас две независимые реализации ввода кода (регистрация 1.2/1.2.2 и модалка смены контакта). Вариант А (рекоменд.): узаконить in-modal ввод как отдельный сценарий и убрать из FR5.2.1-3/-5 ссылку на 1.2/1.2.2 (оставив её только как «Не входит: backend-логика»). Вариант Б: если нужна единая точка ввода кода — переиспользовать экраны 1.2/1.2.2 и удалить ConfirmedPinPage (сокращает дублирование, но требует прокидывать контекст «смена контакта»).
  • Привязка vs смена почты (Б3) — признак уже доступен (emailVerified). Вариант А (рекоменд.): реализовать два текста заголовка и два уведомления по BRD, ветвление по emailVerified на вызывающей стороне. Вариант Б: продукт решает, что различие не нужно — тогда упростить FR5.2.1-4/-5 до одной формулировки.
  • Смена пароля (Б4) — определить границы раздела. Вариант А (рекоменд.): оставить смену пароля в отдельном разделе настроек и явно указать это в Scope «Не входит» 5.2.1. Вариант Б: включить смену пароля в «Редактирование учётных данных» и дописать FR.

Программные

№Связано сЧто в BRDЧто в кодеГде в коде
П1FR5.2.1-6При некорректном email интерфейс показывает ошибку «Некорректный email» под полем и оставляет «Продолжить» недоступнойВалидация email есть (checkEmailPattern), но она только управляет показом кнопки; текст ошибки под полем не выводится — поле errorMessage в NewContactEnter объявлено, но нигде не рендерится. Пользователь не видит причину — нужно решение по показу текста ошибкиmodals/new_contact_enter.dart:67,119-122,303; core/utils/regex.dart:25-67
П2FR5.2.1-2, FR5.2.1-4Кнопка «Продолжить» при пустом/невалидном вводе недоступна (показана в неактивном состоянии)Кнопка «Продолжить» отрисовывается только if (isConfirmed) — при невалидном вводе она полностью скрыта, а не показана disabled. Отличается от «недоступна» по BRDmodals/new_contact_enter.dart:303-394
П3FR5.2.1-2Интерфейс открывает экран «Смена номера телефона» с заголовкомОткрывается нижний лист (buildScrollableModalBottomSheet, высота 0.8) с removeTitle: true и title: ';' — отдельного экрана и заголовка «Смена номера телефона» нет; заголовок «Укажите новый номер» — это текст тела листаedit_profile/edit_profile_screen.dart:388-396; check/modals/new_contact_enter.dart:184-190
П4FR5.2.1-3После подтверждения — уведомление «Номер телефона обновлен»Показывается «Номер телефона успешно обновлен» — расхождение в тексте уведомленияedit_profile/edit_profile_screen.dart:402-403

Рекомендация / варианты решения

  • Текст ошибки email (П1) — Вариант А (рекоменд.): выводить «Некорректный email» под полем при непустом невалидном значении (использовать уже существующий errorMessage/добавить Text под полем). Вариант Б: если по продукту достаточно скрытой кнопки — синхронизировать FR5.2.1-6 с фактом (убрать требование текста ошибки).
  • Кнопка «недоступна» vs скрыта (П2) — расхождение в состоянии кнопки. Вариант А (рекоменд.): показывать «Продолжить» всегда, в disabled-состоянии при невалидном вводе (ближе к BRD и привычнее пользователю). Вариант Б: узаконить текущее поведение (скрытая кнопка) в FR5.2.1-2/-4.
  • Экран vs нижний лист и заголовок (П3) — Вариант А (рекоменд.): согласовать формулировку BRD с фактом (нижний лист без шапки, заголовок в теле). Вариант Б: если нужен именно экран с заголовком — доработать открытие (полноэкранный роут / шапка листа).
  • Текст уведомления (П4) — Вариант А (рекоменд.): привести к одному варианту («Номер телефона обновлен» по BRD либо зафиксировать «успешно обновлен» в BRD). Мелкое, но влияет на согласованность формулировок.

0 items under this folder.