Files
specs/openspec/changes/unify-income-payment-cards/qa-analysis.md
T
codex-bot 6c858a8858
Specs security / security (push) Successful in 9s
Specs verify / verify (push) Successful in 12s
spec: unify income payment cards and drop period comparisons (WealthLedger/main#33) (#37)
spec: unify income payment cards and drop period comparisons (WealthLedger/main#33)
2026-10-13 18:16:27 +03:00

100 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 до принятия реализации; внутреннюю стратегию исправления
определяют владельцы реализации.