spec: unify income payment cards and drop period comparisons (WealthLedger/main#33)
100 lines
11 KiB
Markdown
100 lines
11 KiB
Markdown
# 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
|
||
|
||
1. Точность финансового смысла и граница доступа: исправления с отрицательным
|
||
знаком, мультивалютность, «прошлый график» против факта, нет ложного нуля.
|
||
2. Breaking ответ и избыточная загрузка: оба маршрута, отсутствие comparison
|
||
fields/dependencies, синхронизация только выбранного периода.
|
||
3. Регрессии соседних экранов: предложенные выплаты, 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 до принятия реализации; внутреннюю стратегию исправления
|
||
определяют владельцы реализации.
|