Files
specs/openspec/specs/frontend-platform/frontend-user-feedback/spec.md
T
codex-bot 3821d9ed58
Specs security / security (push) Successful in 7s
Specs verify / verify (push) Successful in 14s
refactor: group canonical specs by domain and archive account-top-positions (#74)
2026-11-02 21:50:49 +03:00

12 KiB

frontend-user-feedback Specification

Purpose

Определяет спокойную и понятную обратную связь во всех разделах WealthLedger: пользователь видит финансовые данные и результат своих действий, а не состояние внутреннего процесса получения данных.

Requirements

Requirement: Чтение данных не требует внимания к техническим состояниям

На экранах счетов, портфеля, операций, доходов, событий, инструментов, поиска, карт и настроек подключения приложение MUST NOT показывать время получения данных, признаки их технического устаревания, ход фонового обновления и сообщения об успехе либо временной ошибке такого обновления. Приложение MUST NOT предоставлять кнопки или иные действия ручного обновления и повторной загрузки, включая их иконные варианты. Эти сведения MUST NOT переноситься в уведомления, подсказки или объявления вспомогательных технологий. Даты операций, выплат, открытия счёта и выбранных периодов MUST сохранять свой предметный смысл.

Запрет технических действий MUST NOT удалять применение фильтров, переходы между страницами, поиск, отправку формы, вход, подключение банка или безопасную навигацию. После неуспешного сохранения пользователь SHALL иметь возможность вновь отправить сохранённый ввод обычным действием формы.

Scenario: Фоновая загрузка завершилась ошибкой

  • WHEN на любом из перечисленных экранов уже есть доступный результат и его фоновое обновление временно не удалось
  • THEN результат остаётся видимым без предупреждения, времени получения, индикатора, уведомления и действия ручного повтора

Scenario: Фоновая загрузка завершилась успешно

  • WHEN приложение получает обновлённые данные без явного действия сохранения со стороны пользователя
  • THEN содержимое обновляется без сообщения об успешной загрузке и без переноса фокуса

Scenario: Просмотр списка карт и операций карты

  • WHEN временная ошибка возникает при обновлении уже показанных карт, сводки или операций выбранной карты
  • THEN соответствующий результат остаётся доступным без технического предупреждения и ручного повтора, а действия работы с картой сохраняются

Scenario: Поиск или новый диапазон инструмента пока недоступен

  • WHEN пользователь изменил поисковый запрос либо диапазон графика, а соответствующий результат ещё не получен
  • THEN экран показывает ожидание или локальную недоступность нового результата без кнопки повтора и не выдаёт результат прежнего запроса или диапазона за новый

Scenario: Предметные даты остаются видимыми

  • WHEN экран показывает дату операции, выплаты или выбранный период
  • THEN эти даты остаются доступны независимо от отсутствия времени технического получения данных

Requirement: Краткое уведомление подтверждает неочевидный результат действия

Приложение SHALL показывать краткое локализованное уведомление об успешном явном действии пользователя, если после завершения на экране отсутствует однозначное подтверждение результата. Если результат уже очевиден по состоянию формы или содержимого, приложение MUST NOT дублировать его уведомлением. Уведомление MUST описывать выполненное действие, а не внутренний процесс. Ожидание действия MUST NOT представляться его успешным завершением.

Scenario: Результат действия иначе легко пропустить

  • WHEN действие успешно завершилось, его форма закрылась, а оставшийся экран не подтверждает результат однозначно
  • THEN пользователь получает одно краткое уведомление о выполненном действии

Scenario: Результат уже очевиден

  • WHEN успешное сохранение оставляет на экране явное подтверждение результата
  • THEN приложение не добавляет дублирующее уведомление

Scenario: Приём действия ещё не означает успех

  • WHEN приложение только начало выполнение действия и окончательный результат неизвестен
  • THEN оно не показывает уведомление об успешном завершении

Requirement: Уведомления не мешают работе и не дублируются

Уведомления MUST быть доступны как текст, не полагаться только на цвет и не перехватывать клавиатурный фокус. Подтверждение успеха SHALL автоматически закрываться и позволять доступное ручное закрытие. Повторная обработка одного результата MUST NOT создавать повторное уведомление. Приложение MUST ограничивать число одновременно видимых уведомлений и MUST NOT создавать каскад сообщений из-за фонового восстановления данных.

Scenario: Один результат обработан повторно

  • WHEN приложение повторно обрабатывает результат того же пользовательского действия
  • THEN пользователь не получает второе уведомление об этом результате

Scenario: Работа с клавиатурой продолжается

  • WHEN уведомление появляется во время ввода или навигации с клавиатуры
  • THEN текущий фокус сохраняется, текст уведомления доступен вспомогательным технологиям, а действие закрытия имеет понятное доступное имя

Scenario: Несколько действий завершились рядом по времени

  • WHEN несколько различных действий успешно завершаются за короткое время
  • THEN уведомления соблюдают конечный предел одновременного показа и не блокируют доступ к содержимому и действиям страницы

Requirement: Ошибки действий и препятствия доступа остаются понятными

Ошибка ввода MUST показываться у соответствующего поля. При неуспешном сохранении приложение MUST сохранять ввод и показывать понятную локальную ошибку в контексте действия, не объявляя его успешным. Если продолжение требует входа, подключения банка или другого действия пользователя, объяснение и применимое действие MUST оставаться доступны в соответствующей области. Исчезающее уведомление MUST NOT быть единственным способом сообщить такое препятствие. Приложение MUST NOT самостоятельно повторять изменение пользовательских данных только потому, что включено автоматическое восстановление чтения.

Scenario: Операция не сохранилась

  • WHEN пользователь отправил форму операции, а сохранение завершилось ошибкой
  • THEN введённые значения остаются в форме вместе с локальной ошибкой, обычное действие сохранения снова доступно и подтверждение успеха отсутствует

Scenario: Поле содержит недопустимое значение

  • WHEN пользователь пытается отправить форму с недопустимым значением
  • THEN ошибка относится к этому полю и не заменяется общим всплывающим уведомлением

Scenario: Требуется восстановить доступ

  • WHEN приложение подтвердило необходимость входа или восстановления подключения
  • THEN соответствующая область предлагает необходимое действие и сохраняет объяснение до устранения препятствия или ухода пользователя

Scenario: Ответ на изменение данных не получен

  • WHEN соединение прервалось после отправки пользовательского изменения и результат неизвестен
  • THEN приложение не объявляет успех и не повторяет изменение автоматически как обычную загрузку данных