Native archive применил 9 added и 12 modified требований без удалений; все 10 сценариев сохранены. Новый canonical spec frontend-user-feedback внесён в AI_INDEX.
12 KiB
MODIFIED Requirements
Requirement: Экран списка брокерских счетов
Клиент SHALL загружать список при открытии защищённого маршрута /accounts
без ручного обновления. Клиент MUST использовать успешный frontend-кэш списка
в течение 60 секунд. После истечения этого срока открытие или возвращение
на экран SHALL инициировать получение актуального списка; имеющийся Client
Cached Snapshot MUST оставаться видимым во время обновления и после временной
ошибки без индикации собственного чтения и действий повтора.
Автоматическое восстановление SHALL соответствовать frontend-data-resilience.
Открытый экран MAY периодически перечитывать backend-результат, сохраняя
видимый snapshot, и MUST NOT создавать импорт T-Bank. Состояние источника из
meta MUST представляться по frontend-data-resilience.
При успешном непустом ответе клиент MUST отобразить адаптивный одноколоночный
список широких интерактивных карточек счетов с локализованными типом и, если
доступна, датой открытия без времени; каждая карточка MUST ясно показывать тип,
имя, финансовую сводку, вторичные метаданные и заметное действие открытия счёта,
вести на /accounts/:accountId по всей области и сохранять доступное
клавиатурное состояние. После успешной замены или удаления T-Bank connection
клиент MUST инвалидировать список счетов.
Для доступной portfolioSummary карточка MUST показывать не более двух
Money-итогов в исходных валютах и обозначать наличие остальных валют, если
они есть; она MUST NOT показывать или подразумевать FX-конвертацию,
межвалютный агрегированный итог либо Cash Balance как отдельный второй итог.
При portfolioSummary: null карточка MUST показывать локальное нейтральное
состояние недоступности сводки, сохраняя метаданные счёта и возможность открыть
его. При доступной пустой сводке карточка MUST не выдавать отсутствие итогов
за временную ошибку.
Scenario: Пользователь открывает счёт из списка
- WHEN клиент успешно загрузил непустой список и User выбирает карточку счёта
- THEN клиент переходит на
/accounts/:accountIdсidвыбранного счёта
Scenario: Список пуст
- WHEN клиент получает успешный полный пустой массив
- THEN клиент показывает штатное сообщение об отсутствии инвестиционных счетов T-Bank
Scenario: Список берётся из свежего frontend-кэша
- WHEN User повторно открывает список в течение 60 секунд после успешной загрузки
- THEN клиент показывает сохранённые счета без нового API-запроса
Scenario: Устаревший список загружается повторно
- WHEN User открывает список после истечения 60 секунд frontend-кэша и уже существует последний успешный список
- THEN клиент оставляет этот список видимым во время нового запроса без индикации фонового обновления
Scenario: Открытый экран перечитывает список
- WHEN экран Accounts остаётся открытым 30 минут после последнего успешного HTTP-чтения
- THEN клиент выполняет фоновое HTTP-перечитывание backend-результата, сохраняет видимый snapshot и не запускает импорт T-Bank
Scenario: Последняя попытка неуспешна после полного списка
- WHEN клиент получает полный
dataсписка иmetaс неуспехом последней часовой попытки - THEN клиент сохраняет список видимым, показывает его исходное время и текстовое либо доступно именованное предупреждение о неуспешной попытке, не предлагая ручной повтор
Scenario: Первая загрузка списка выполняется или неуспешна
- WHEN клиент получает
data: null, аmetaобозначает выполнение первой загрузки либо её неуспех - THEN клиент показывает соответственно доступное состояние загрузки либо локальной недоступности без карточек счетов и без представления частичного списка как полного
Scenario: Ошибка фонового обновления не скрывает snapshot
- WHEN обновление устаревшего списка завершается временной ошибкой при наличии последнего успешного Client Cached Snapshot
- THEN клиент сохраняет snapshot видимым без предупреждения и ручного повтора и восстанавливает получение данных автоматически
Scenario: Карточка ограничивает валютные итоги
- WHEN доступная сводка счёта содержит итоги в трёх или более валютах
- THEN карточка показывает не более двух исходных валютных итогов и обозначает наличие остальных без общего сконвертированного значения
Scenario: Недоступность сводки локальна карточке
- WHEN клиент получает список, в котором
portfolioSummaryодного счёта равнаnull - THEN он показывает нейтральную недоступность только этой сводки, не скрывает остальные карточки и сохраняет переход на детали счёта
Scenario: Пустая сводка не является ошибкой
- WHEN клиент получает доступную
portfolioSummaryс пустымtotalsByCurrency - THEN он показывает нейтральное состояние отсутствия финансовых итогов, а не состояние временной ошибки
Requirement: Клиентские состояния ошибки списка счетов
Клиент SHALL автоматически восстанавливать временно неуспешное чтение списка
по правилам frontend-data-resilience без кнопок обновления и повтора. При
TBANK_NOT_CONNECTED клиент MUST показать необходимость подключения и действие
открытия настроек T-Bank. При INVALID_TBANK_TOKEN клиент MUST показать
необходимость восстановить подключение и то же действие. Эти подтверждённые
состояния MUST скрывать личный список и MUST NOT запускать автоматические повторы.
При временной недоступности, включая TBANK_UNAVAILABLE, клиент MUST сохранять
успешный результат текущей границы доступа без предупреждений. Если результата
нет, после первичного ожидания клиент SHALL показать спокойную локальную
недоступность без технических подробностей. Неизвестная ошибка MUST получать
безопасное локальное представление; отсутствие известного кода MUST NOT
разрешать бесконечные повторы или обход доступа. Временный сбой MUST NOT
предлагать перенастройку действующего подключения как способ повторить загрузку.
Scenario: Подключение требуется
- WHEN клиент получает
TBANK_NOT_CONNECTED - THEN клиент не показывает список и предлагает открыть настройки T-Bank
Scenario: Известная ошибка не повторяется автоматически
- WHEN запрос списка завершается подтверждённой ошибкой подключения или доступа, требующей действия пользователя
- THEN клиент не выполняет автоматических повторов и предлагает соответствующее действие вместо технической повторной загрузки
Scenario: Token требует внимания
- WHEN клиент получает
INVALID_TBANK_TOKEN - THEN клиент скрывает личный список и предлагает восстановить подключение в настройках T-Bank
Scenario: Временная ошибка T-Bank
- WHEN клиент получает
TBANK_UNAVAILABLEбез доступного результата списка - THEN клиент автоматически восстанавливает получение и после первичного ожидания показывает нейтральную недоступность без повторной загрузки и предложения перенастроить подключение
Scenario: Неизвестная ошибка загрузки
- WHEN клиент получает ошибку без известного кода списка счетов и без доступного результата
- THEN клиент показывает безопасное нейтральное состояние без технического сообщения или кнопки повтора, применяя только допустимое ограниченное восстановление
Scenario: Известная ошибка при сохранённом snapshot
- WHEN фоновое обновление списка с последним успешным Client Cached Snapshot получает
TBANK_UNAVAILABLE - THEN клиент сохраняет snapshot видимым без предупреждения, времени получения и ручных действий восстановления