# 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 до принятия реализации; внутреннюю стратегию исправления определяют владельцы реализации.