Files
specs/openspec/changes/archive/2026-08-26-enhance-brokerage-account-list/tasks.md
T

51 lines
8.7 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.
## 1. Точная backend-сводка и контракт списка
- [x] 1.1 [backend] Извлечь backend-owned normalizer `Money[]` из текущего Portfolio flow и применить его как для snapshot деталей, так и для компактной сводки списка: нормализовать ISO-валюты, точно сложить ненулевые стоимости позиций и Cash Balance одной валюты, не выполнять FX-конвертацию и не загружать Instrument metadata для списка.
- **Covers:** `brokerage-accounts` — `Список активных брокерских счетов`
- **Verification:** `npm test -- tbank/portfolio.service.spec.ts --runInBand` в `backend` с cases точных итогов, Cash Balance, нулевых/безвалютных значений и пустого доступного Portfolio.
- [x] 1.2 [backend] Расширить `BrokerageAccountDto` nullable `portfolioSummary` с `totalsByCurrency` и изменить list orchestration за существующей `TbankAccessService`: для каждого поддерживаемого upstream-счёта параллельно получить два Portfolio-входа, сохранить upstream-порядок, локализовать только `TBANK_UNAVAILABLE` как `portfolioSummary: null`, а ошибки connection/token и прочие ошибки списка оставить существующей boundary.
- **Covers:** `brokerage-accounts` — `Список активных брокерских счетов`
- **Verification:** `npm test -- tbank/brokerage-accounts.service.spec.ts --runInBand` в `backend` с cases порядка, успешных нескольких сводок, локальной unavailable-сводки, пустой сводки и неподавленных connection/token ошибок.
- [x] 1.3 [backend] Пройти canonical backend gate после DTO, normalizer и list orchestration.
- **Covers:** `N/A` — canonical gate проверяет реализацию уже покрытого contract и money behavior, не вводя отдельного observable requirement.
- **Verification:** `npm run verify` в `backend` под Node 22.
## 2. Generated frontend contract и доступный список
- [x] 2.1 [frontend] После доступности backend OpenAPI синхронизировать committed OpenAPI snapshot и generated schema через штатный workflow; использовать расширенный generated `BrokerageAccount` type без ручного transport DTO.
- **Covers:** `N/A` — это обязательная реализация решения D3 для already-specified public response, не новое client behavior.
- **Verification:** `npm run openapi:sync` в `frontend`, затем `npm run openapi:check` в `frontend`.
- [x] 2.2 [frontend] Расширить Accounts page VM и её focused tests: сохранить существующие key, `staleTime: 60_000`, отсутствие retry/refetch-on-focus, invalidation и top-level loading/error/empty/cached-snapshot selection; подготовить display model сводки карточки с максимум двумя исходными Money, индикатором остальных валют и раздельными состояниями unavailable/empty.
- **Covers:** `brokerage-accounts` — `Экран списка брокерских счетов`
- **Verification:** `npm run test:run -- src/pages/accounts/ui/AccountsPage.test.tsx` в `frontend` с cases fresh cache, background refresh/error snapshot, limit двух валют, remaining-currency indicator, unavailable и empty summary.
- [x] 2.3 [frontend] Переработать presentation списка в адаптивную одноколоночную последовательность широких ссылок-карточек: отобразить локализованные тип, имя, summary, вторичные метаданные даты и видимое действие открытия; сохранить native link navigation/focus, безопасный local summary state и форматирование каждого переданного Money существующим formatter без агрегации или FX-смысла.
- **Covers:** `brokerage-accounts` — `Экран списка брокерских счетов`
- **Verification:** `npm run test:run -- src/entities/brokerage-account/ui/BrokerageAccountList.test.tsx` в `frontend` с accessible link/action, доступными summary states и responsive single-column class behavior.
- [x] 2.4 [frontend] Сохранить известные list error states и recovery actions в page VM/presentation: connection и invalid-token ведут только к настройкам, temporary unavailable показывает retry и settings, unknown error — только retry; при Client Cached Snapshot warning не скрывает карточки и не запускает retry автоматически.
- **Covers:** `brokerage-accounts` — `Клиентские состояния ошибки списка счетов`
- **Verification:** `npm run test:run -- src/pages/accounts/ui/AccountsPage.test.tsx` в `frontend` с cases всех известных/unknown errors, recovery actions и cached-snapshot warning.
- [x] 2.5 [frontend] Пройти canonical frontend gate после generated contract, VM, presentation и tests.
- **Covers:** `N/A` — canonical gate подтверждает delivered frontend behavior и boundary rules, но не задаёт новый requirement.
- **Verification:** `npm run verify` в `frontend` под Node 22.
## 3. As-built documentation и canonical SDD checks
- [x] 3.1 [docs] Обновить delivered documentation брокерских счетов и system overview после verified implementation: описать additive summary contract, исходные валюты без FX-агрегации, локальную unavailable-сводку, неизменную current-connection boundary и Client Cached Snapshot; не копировать OpenSpec planning artifacts.
- **Covers:** `N/A` — docs фиксирует только поставленное as-built состояние из Design Delivery Map и не создаёт самостоятельного observable behavior.
- **Verification:** Review `docs/features/brokerage-accounts.md` и `docs/architecture/system-overview.md` against delivered backend OpenAPI and frontend behavior.
- [x] 3.2 [docs] Пройти canonical docs gate для as-built documentation.
- **Covers:** `N/A` — Markdown gate подтверждает documentation delivery и не реализует отдельный Delta Requirement.
- **Verification:** `npm run verify` в `docs` под Node 22.
- [x] 3.3 [specs] Проверить canonical change artifacts и strict Delta Specs после создания Tasks, не создавая competing planning source.
- **Covers:** `N/A` — specs area владеет SDD artifact integrity, а не отдельным runtime behavior.
- **Verification:** `bash specs/scripts/verify-openspec-planning.sh enhance-brokerage-account-list`, `openspec validate enhance-brokerage-account-list --type change --strict --store wealth-ledger-specs` и `openspec validate --specs --strict --store wealth-ledger-specs` из `specs`.
## 4. Cross-repository verification before archive
- [x] 4.1 [workspace] Выполнить canonical workspace dispatcher после всех repository-owned tasks, включая required runtime OpenAPI contract gate для backend response и committed frontend snapshot.
- **Covers:** `N/A` — workspace только оркестрирует approved Delivery Map и repository gates; он не владеет implementation behavior.
- **Verification:** `bash specs/scripts/verify-workspace-change.sh enhance-brokerage-account-list` из workspace root под Node 22.
- [x] 4.2 [workspace] Провести semantic verification и independent read-only review implementation против Proposal, всех Delta Requirements/Scenarios, Decisions D1–D4, rollback contract и completed Tasks; устранить Critical и Important findings до archive eligibility.
- **Covers:** `N/A` — terminal review доказывает соответствие уже specified behavior, не вводя нового requirement.
- **Verification:** Сохранить review scope, findings и resolution только после фактической проверки; подтвердить отсутствие Critical и Important findings.