spec: unify income payment cards and drop period comparisons (WealthLedger/main#33)
11 KiB
QA Analysis
Verification Scope
In Scope
Удаление сравнения дохода по brokerage-account-income-analytics и
семантика выплаты на экранах дохода, журнала, истории инструмента,
будущих событий и графиков акций/облигаций по четырём delta capabilities.
Проверяется поведение пользователя и публичного API как системы.
Out of Scope
Пересмотр правил расчёта купонов/дивидендов брокером, налоговая оценка, удаление buckets, новые типы событий, компонентные и внутренние тесты реализации, несуществующий QA репозиторий.
Coverage Matrix
| Requirement / Scenario из Delta Specs | Наблюдаемая системная проверка |
|---|---|
brokerage-account-income-analytics — removed Period comparisons preserve calendar and currency meaning; Analytics summary remains readable per currency / Динамика отсутствует для периода любой длительности |
На коротком/многолетнем периоде нет comparison UI или состояний; 200 ответ обоих income-analytics маршрутов не содержит comparison fields/roles, и чтение не инициирует дополнительные диапазоны ради сравнения. |
User explicitly applies an analytics period represented in the URL / Черновик периода не применён, Применение периода, Восстановление применённого периода из URL, Сброс периода, Недопустимый черновик периода |
Итоги и карточки меняются только после применения; URL/back/reset, неверные даты и доступность ввода сохраняют поведение без блоков сравнений. |
Realized analytics never presents an incomplete result as complete / Все страницы операций успешно получены, Одна из страниц операций недоступна, В периоде нет купонов и дивидендов |
Выбранный период с полной историей показывает итог; отсутствие или ошибка покрытия не выглядит нулём; подтверждённый пустой период отличим. |
Income payments remain traceable to exact Ledger Entries / Каждая выплата показана отдельной карточкой, Отрицательная корректировка и повторяющиеся IDs сохраняются, Валюта видна в сумме каждой выплаты |
Порядок и количество карточек равны серверным entries; повторы и минус в исходной валюте сохранены; нет внешних групп. |
Income page excludes upcoming forecasts / Данные будущих событий недоступны |
Недоступный прогноз не скрывает полный полученный доход и не возвращает прогнозный блок. |
brokerage-account-ledger — Full ledger presents compact rows / Отображение купона, Отображение дивиденда, Подпись типа не дублируется; Account overview includes recent ledger events / Отображение последних событий |
Полный журнал, превью и история инструмента используют одну карточку выплаченного купона/дивиденда, сохраняют signed Money, детали и fallback; другие операции сохраняют ряд. |
brokerage-account-upcoming-events — Account page presents an upcoming events list / Просмотр ближайших событий, Прогнозный дивиденд с неизвестной суммой; Account overview includes upcoming events / Отображение ближайших событий |
Та же карточка для прогноза в списке и превью, «прогноз», дата реестра и отсутствие суммы не превращаются в исполнение/ноль; offer/maturity не становятся выплатой. |
instrument-income-schedules / Будущий купон с известными условиями, Прошедший дивиденд без подтверждённой операции, Неизвестные условия графика |
На страницах бумаг та же карточка, но пометка графика, отдельные сумма на бумагу и оценка; прошлое событие не названо полученным, null не превращён в ноль. |
Cross-system Verification
Сравнить оба 200 ответа income-analytics с
system-analysis/contracts/income-analytics-response.schema.json и
опубликованным OpenAPI; проверить отсутствие comparison ranges в запросах
при чтении и планировании income, не запрещая независимый запрос прошлого
периода пользователем. Проверить неполный/ошибочный selected, недоступный счёт,
новое подключение и поздний ответ старого без утечки дохода. Порядок и
повторение ID проверить на ответе нескольких операций; нулевая сумма и
отсутствующая сумма должны иметь разные значения. Фоновые HTTP ошибки
прогноза и календаря не должны менять исполненную выплату. Отдельных
callback и новых timeout контрактов нет.
Risk-based Priorities
- Точность финансового смысла и граница доступа: исправления с отрицательным знаком, мультивалютность, «прошлый график» против факта, нет ложного нуля.
- Breaking ответ и избыточная загрузка: оба маршрута, отсутствие comparison fields/dependencies, синхронизация только выбранного периода.
- Регрессии соседних экранов: предложенные выплаты, maturity/offer, trades, текущий месяц на обзоре, back/forward и сохранённый snapshot.
Test Data and Environment Needs
Тестовый доступный и недоступный счёт, режим all, завершённый и неполный
периоды; coupon/dividend одной и нескольких валют, отрицательная корректировка,
повтор operation ID, подтверждённо пустой период. Прогноз с известной/нулевой/
неизвестной суммой, dividend с датой реестра; расписание с per-security Money,
отдельной оценкой и отсутствующими датами. Управляемая доступность источника
и возможность наблюдать только показанные запросы/ресурсные metadata.
Manual / Exploratory Scope
Пройти страницу дохода с клавиатуры и узкого viewport, проверить доступные подписи, перенос длинных сумм и отсутствие горизонтальной прокрутки; перейти между income, журналом, личной историей инструмента, будущими событиями и календарём выпуска. Сравнить смысл подписи в трёх режимах при одинаковой дате и тикере. Отдельно проверить empty/loading/error/recovery и preview.
Automation Candidates
Black-box API: сравнение фактического schema обоих маршрутов с target,
успешный/ошибочный/пустой selected и отсутствие запросов к comparison ranges.
Сквозные journeys: переход от аккаунта через income/ledger к событию прогноза
и календарю инструмента с проверкой подписей и денег. Repository automation:
deferred until QA repo exists; текущее подтверждение возможно вручную и
через existing system-level HTTP/browser runners без требования нового repo.
Observability Verification
По metadata ответа различить complete, pending, failed selected; запрос исторического периода не должен сопровождаться comparison-only dependencies. На отказе проверить корреляцию HTTP request ID и безопасного ответа, не ожидая новых событий журналирования или передачи личных данных в лог.
Regression Impact
Полный журнал, недавние операции, страница акции/облигации и их фильтры, превью/полный прогноз, summary текущего месяца, мультивалютность и независимые loading/error states. Затронутые публичные потребители income-analytics требуют обновления контракта как пары backend/frontend.
Gaps / Blockers
Блокирующих semantic gaps после утверждения Specs/System Analysis нет. Если опубликованный backend OpenAPI не удовлетворяет target либо картинка «получено» появляется на графике, маршрутизировать несовпадение в System Analysis/Delta Specs до принятия реализации; внутреннюю стратегию исправления определяют владельцы реализации.