19 KiB
QA Analysis
Объект проверки: frontend-only изменение группировки строк по Instrument в режиме «Все счета» (журнал, обзор, будущие события, «Выплаты»). Backend и API не меняются; контракт используется как есть.
Risk Assessment
| Risk | Affected requirements | Likelihood | Impact | Verification depth |
|---|---|---|---|---|
| Неверный ключ группы: объединение записей разных типов/дней или не-объединение одинаковых | ledger/upcoming groups same-day… |
Средняя | Высокая | Полный перебор граничных комбинаций ключа (тип, день, Instrument, один счёт) |
Неверный итог: конвертация/округление валют, потеря знака, итог при отсутствии/нулевой сумме, при partial |
ledger/upcoming group shows each entry and … |
Средняя | Высокая | Мультивалютные, знаковые, нулевые и запрещающие сценарии итога; сверка с серверными суммами |
| Нарушен серверный порядок или лимит (5 записей обзора, пагинация журнала) из-за группировки | preserves order and limits |
Средняя | Средняя | Проверка позиций групп, границы страницы, состава «последних 5» |
| Группировка случайно применяется в режиме одного счёта или к записям без Instrument | groups same-day…, MODIFIED «Full ledger…» |
Низкая | Высокая | Регрессионная проверка одиночного режима и записей без Instrument |
| «Выплаты»: группировка нарушает запреты одиночного режима или подменяет аналитические итоги | Income payments remain traceable… |
Средняя | Высокая | Проверка обоих режимов, неизменности серверных аналитических итогов |
| Пропадание записей внутри группы (свернуто, скрыто) или потеря fallback при отсутствии metadata | group shows each entry…, MODIFIED Full ledger…, MODIFIED overview |
Низкая | Высокая | Визуальная проверка разбивки без раскрытия, fallback-представление |
Обзор «Все счета»: режим не открывается / принадлежность счёту потеряна (восстановление режима all) |
MODIFIED User can retrieve an account ledger, MODIFIED overview, MODIFIED upcoming list |
Средняя | Средняя | Проверка доступности и контента режима all, partial-поведение |
Coverage Matrix
| Requirement | Check | Level | Test cases |
|---|---|---|---|
brokerage-account-ledger — User can retrieve an account ledger |
Режим all доступен; принадлежность записей; partial; пустая незагруженная часть |
System / E2E | Scenario: Получение журнала с периодом по умолчанию; Scenario: Общий журнал сохраняет принадлежность записей; Scenario: Общий журнал содержит неполный счёт; Scenario: Пустая загруженная часть не доказывает отсутствие операций |
brokerage-account-ledger — Account overview includes recent ledger events |
Группы в обзоре «Все счета»; лимит 5; fallback без metadata | System / E2E | Scenario: Отображение последних событий; Scenario: Последняя запись не содержит visual metadata инструмента; Scenario: Группировка в последних записях обзора; TC-PAG-002, TC-PAG-003 |
brokerage-account-ledger — Full ledger presents compact rows |
Строка в группе: счёт, сумма, знак, подпись типа; заголовок группы; fallback | System / E2E | Scenario: Запись внутри группы режима «Все счета»; Scenario: Подпись типа не дублируется; Scenario: Отсутствует visual metadata инструмента; TC-GRP-001, TC-TOT-001 |
brokerage-account-ledger — All-accounts ledger groups same-day entries of one instrument |
Ключ группы: два счёта, один счёт, разные типы, покупка/продажа, разные дни, без Instrument, один счёт | System / E2E | Scenario: Купоны одной облигации на двух счетах; Scenario: Две операции одного типа на одном счёте; Scenario: Разные типы по одной бумаге не объединяются; Scenario: Покупка и продажа не объединяются; Scenario: Разные дни не объединяются; Scenario: Запись без Instrument; Scenario: Режим одного счёта не меняется; TC-GRP-001, TC-GRP-002, TC-GRP-003, TC-GRP-004 |
brokerage-account-ledger — All-accounts ledger group shows each entry and an exact total |
Точный итог: мультивалюта, знак, ноль, без изменения, partial; разбивка всегда видна |
System / E2E | Scenario: Итог по нескольким валютам; Scenario: Итог со знаком; Scenario: Нулевой итог; Scenario: Группа с записью без денежного изменения; Scenario: Запись с нулевой суммой скрывает итог; Scenario: Итог скрыт при неполном периоде; TC-TOT-001, TC-TOT-002, TC-TOT-003, TC-TOT-004 |
brokerage-account-ledger — All-accounts ledger grouping preserves order and limits |
Позиция группы; граница страницы; лимит 5 обзора | System / E2E | Scenario: Позиция группы в списке; Scenario: Группа на границе страницы; TC-PAG-001, TC-GRP-002 |
brokerage-account-upcoming-events — Account page presents an upcoming events list |
Страница в all; групповой итог ≠ итог списка; дисклеймер |
System / E2E | Scenario: Просмотр ближайших событий; Scenario: Пустое состояние страницы; Scenario: Прогнозный дивиденд с неизвестной суммой |
brokerage-account-upcoming-events — All-accounts upcoming events group same-day events of one instrument |
Группы событий: два счёта, разные типы/даты, без Instrument, один счёт | System / E2E | Scenario: Прогноз купонов одной облигации на двух счетах; Scenario: Разные типы или даты не объединяются; Scenario: Событие без Instrument; Scenario: Режим одного счёта не меняется; TC-GRP-005 |
brokerage-account-upcoming-events — All-accounts upcoming event group shows each event and a forecast total |
Прогнозный итог: неизвестная сумма, оферта, мультивалюта, неполный прогноз, дата реестра | System / E2E | Scenario: Событие с неизвестной суммой в группе; Scenario: Оферта без сумм; Scenario: Прогнозный итог по нескольким валютам; Scenario: Прогнозный итог скрыт при неполном прогнозе; Scenario: Группа дивидендов по дате реестра; TC-GRP-005, TC-TOT-005 |
brokerage-account-upcoming-events — All-accounts upcoming event grouping preserves order and limits |
Позиция группы событий; ближайшие события обзора | System / E2E | Scenario: Позиция группы событий; Scenario: Группировка в ближайших событиях обзора; TC-PAG-002 (по аналогии для событий обзора) |
brokerage-account-income-analytics — Realized income analytics is account-scoped and period-bound |
Режим all в аналитике; полнота всех счетов; периоды |
System / E2E | Scenario: Общий доход требует полноты всех счетов; Scenario: Открыт ещё не загруженный период (изменение frontend не затрагивает — smoke) |
brokerage-account-income-analytics — Income payments remain traceable to exact Ledger Entries |
«Выплаты»: одиночный режим без групп; группы в all; итог при неполноте; аналитика не пересчитана; корректировки и дубли ID |
System / E2E | Scenario: Каждая выплата показана отдельной карточкой; Scenario: Список воспроизводит точный состав дохода; Scenario: Отрицательная корректировка и повторяющиеся IDs сохраняются; Scenario: Выплаты одной бумаги на двух счетах в режиме «Все счета»; TC-GRP-006, TC-TOT-004 (правило скрытия итога) |
Negative and Boundary Focus
- Ключ группы: разные точные upstream-типы, покупка vs продажа, разные экранные дни, отсутствие identity Instrument, одна запись (нет пары), все записи на одном счёте.
- Итог: мультивалюта без конвертации; копеечные суммы без округления (+150.10 −50.05); нулевой итог без знака; запись без денежного изменения; нулевая сумма;
partial-период; неполный прогноз; событие с неизвестной суммой; оферта без сумм. - Порядок и лимиты: группа из записей первой и следующей страницы журнала; лимит 5 записей обзора (считается по записям, не по группам); позиция группы по первой записи.
- Режимы: один счёт — полное отсутствие группировки; записи без Instrument не сливаются.
Cross-system Verification
system-analysis не выбран, backend и API в рамках change не меняются — отдельная кросс-системная проверка не требуется. Существующие серверные данные проверяются как вход: реальные ответы API ({ data, meta }, принадлежность записей счёту, partial-состояние, серверные аналитические итоги, порядок entries) используются как эталон, с которым сверяется клиентское представление (состав групп, суммы, порядок). Ключевой инвариант: аналитические денежные итоги и receipt count приходят только с сервера и не пересчитываются; единственный клиентский расчёт — итог визуальной группы, который сверяется с суммой серверных записей группы.
Test Data and Environment Needs
Локальный frontend + локальный backend с сохранёнными данными (или stubbed API в браузере через devtools/сервис-воркер-заглушку). Фикстуры:
- Два счёта (брокерский + ИИС) с одной и той же облигацией: исполненные купоны в один день (+200 RUB и +100 RUB) — базовая группа.
- Мультипанель: одна группа с записями в RUB и USD; выплаты одной бумаги в разных валютах.
- Граничные суммы: +150.10 / −50.05 / −150.10; запись с нулевой суммой; запись без денежного изменения; отрицательная корректировка.
- Разнообразие типов: купон + налог в один день, покупка + продажа одной бумаги в один день, две покупки на одном счёте, купоны в разные (экранные) дни.
- Записи без identity Instrument (например, переводы) — два в один день одного типа.
- Записи без presentation metadata инструмента — fallback.
partial: счёт с незагруженным интервалом в запрошенном периоде; пустая сохранённая часть при неполном покрытии.- Граница страницы: настройки пагинации журнала так, чтобы записи одной группы попали на разные страницы; подтверждённо полный период.
- Будущие события: купон на двух счетах в одну дату; дивиденды по дате реестра (известная и неизвестная суммы); оферта на двух счетах; события без суммы; неполный прогноз.
- Обзор: ровно 5 последних записей, среди которых пара с одинаковым ключом.
- Режим одного счёта с теми же данными (два купона одной бумаги в один день).
Источник: подготовленные фикстуры в локальной БД тестового backend; при отсутствии — заглушка API-ответов в браузере с теми же контрактными envelope.
Примечания по окружению (не блокеры): тестовые данные границы страницы строятся вокруг фактического размера страницы, который возвращает сервер (TC-PAG-001 фиксирует конкретное содержимое страниц в момент прогона); состояние partial и неполный прогноз воспроизводятся заглушкой API-ответа в браузере (MSW / Playwright route) с meta partial.
Manual / Exploratory Scope
- Визуальное чтение группы без раскрытия: разбивка всегда видна, заголовок не дублирует подпись типа в строках, знак и семантический цвет не единственные носители направления.
- Устойчивость к обновлению: приход
partial→ подтверждённой полноты — итог появляется/исчезает корректно; фоновая догрузка не меняет состав и порядок показанных записей. - Переходы между режимами «Все счета» ↔ один счёт на одних данных: группировка появляется/исчезает целиком.
- Прокрутка/пагинация журнала в
all: стабильность позиций групп между страницами. - Consent-контент: дивидендные группы с датой реестра, оферта без итога — читаемость при отсутствии сумм.
Automation Candidates
Black-box E2E (Playwright, режим «Все счета»): TC-GRP-001, TC-GRP-002, TC-GRP-005, TC-GRP-006, TC-TOT-001, TC-TOT-002, TC-TOT-003, TC-TOT-004, TC-TOT-005, TC-PAG-001, TC-PAG-002, TC-PAG-003 — стабильные контрактные сценарии групп, итогов и порядка. TC-GRP-003 и TC-GRP-004 — ручные до уточнения Specs. Статус всех: deferred until QA repo exists.
Regression Impact
- Режим одного счёта: журнал, обзор, «Будущие события», «Выплаты» — полное отсутствие группировки (Scenario-блоки требований; ручная регрессия).
- Существующие карточки и строки журнала вне групп: представление выплаты купона/дивиденда, подписи типов, знаки, fallback без metadata — без изменений.
- Состояния загрузки/пустоты/ошибки: первичное ожидание, нейтральная недоступность, сохранение прежнего результата при временном сбое,
partialи пустая-но-неполная выборка — не деградируют из-за группировки. - Восстановленный режим
allв specs журнала и аналитики — поведение не меняется, только smoke доступности (Scenario: Получение журнала с периодом по умолчанию; Scenario: Общий доход требует полноты всех счетов). - Аналитические итоги дохода и receipt count — только серверные, отсутствие клиентского пересчёта (TC-GRP-006).
Gaps / Blockers
Нет. Два вопроса из test design закрыты без изменения specs:
- Identity-ключ: specs требуют одинаковую identity Instrument; design D2 определяет её как первый непустой идентификатор, а записи, равенство которых не доказано, не объединяются (TC-GRP-003).
- День: specs задают «день, как на экране»; oracle — показанная в строке дата (TC-GRP-004).