docs: explain persisted T-Bank reads and synchronization
Conventional commits / commits (pull_request) Successful in 14s
Docs security / security (pull_request) Successful in 8s
Docs verify / verify (pull_request) Successful in 13s
Docs security / security (push) Successful in 8s
Docs verify / verify (push) Successful in 12s
Conventional commits / commits (pull_request) Successful in 14s
Docs security / security (pull_request) Successful in 8s
Docs verify / verify (pull_request) Successful in 13s
Docs security / security (push) Successful in 8s
Docs verify / verify (push) Successful in 12s
Document local data ownership, coverage and freshness, refresh behavior, failure recovery and additive migration rollback. Record ADR 017.
This commit was merged in pull request #22.
This commit is contained in:
@@ -7,30 +7,11 @@
|
||||
только к backend. Счёт не хранится как долговременное локальное владение
|
||||
независимо от брокерского подключения.
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as Пользователь
|
||||
participant F as Frontend
|
||||
participant B as Backend
|
||||
participant D as SQLite
|
||||
participant T as T-Bank gRPC
|
||||
U->>F: Открывает /accounts
|
||||
F->>B: GET /api/v1/brokerage-accounts (Bearer)
|
||||
B->>D: Читает подключение T-Bank
|
||||
alt Подключение отсутствует
|
||||
B-->>F: 409 TBANK_NOT_CONNECTED
|
||||
F-->>U: Переход к настройкам T-Bank
|
||||
else Подключение сохранено
|
||||
B->>T: GetAccounts(OPEN) over TLS
|
||||
T-->>B: Счета или ошибка
|
||||
par Для каждого поддерживаемого счета
|
||||
B->>T: GetPortfolio + GetPositions over TLS
|
||||
T-->>B: Позиции и деньги либо временная ошибка
|
||||
end
|
||||
B-->>F: Счета со сводками либо ошибка
|
||||
F-->>U: Карточки счетов или объяснение ошибки
|
||||
end
|
||||
```
|
||||
Экран читает локальный список и сохранённые сводки. Обычный запрос запускает
|
||||
недостающие или устаревшие зависимости в фоне. Список и сводка каждого счёта
|
||||
имеют независимые timestamps и состояния. Неподтверждённый список показывает
|
||||
загрузку доступа, а не отсутствие счетов. Поток и границы описаны в
|
||||
[модели свежести](../../architecture/cross-cutting/data-freshness.md).
|
||||
|
||||
## Счёт и его сводка
|
||||
|
||||
@@ -69,8 +50,8 @@ sequenceDiagram
|
||||
сводка не подменяется нулями.
|
||||
|
||||
Временная недоступность сводки одного счёта остаётся локальной для него.
|
||||
Ошибка подключения, отклонение токена или невозможность получить исходный
|
||||
список не превращаются в частичный успешный список.
|
||||
Известный отказ доступа скрывает личные данные. Transient failure сохраняет
|
||||
последний список и его время; отсутствие первого списка остаётся missing.
|
||||
|
||||
## Состояния
|
||||
|
||||
@@ -85,16 +66,17 @@ sequenceDiagram
|
||||
- Неизвестная ошибка: экран предлагает только повторить загрузку.
|
||||
- Успешный пустой ответ: штатное состояние отсутствия инвестиционных счетов.
|
||||
|
||||
Карточка ведёт на `/accounts/:accountId` по всей области и доступна с клавиатуры. На широком экране карточки расположены в две колонки, на узком — в одну. Карточка показывает название, локализованный тип, крупный валютный итог и вторую валюту при наличии, число остальных валют, дату открытия без времени и видимое действие открытия. Отдельные цветные блоки «Акции» и «Облигации» показывают количество наименований бумаг. Недоступная или пустая сводка отображается локально; отсутствие сумм не скрывает известные количества бумаг, а недоступная сводка не подменяет их нулями. Наведение и видимый клавиатурный фокус подчёркивают переход; настройка уменьшения движения отключает анимацию.
|
||||
Карточка ведёт на `/accounts/:accountId` по всей области и доступна с клавиатуры. Карточки расположены в одну колонку при любой ширине. Карточка показывает название, локализованный тип, крупный валютный итог и вторую валюту при наличии, число остальных валют, дату открытия без времени и видимое действие открытия. Отдельные цветные блоки «Акции» и «Облигации» показывают количество наименований бумаг. Недоступная или пустая сводка отображается локально; отсутствие сумм не скрывает известные количества бумаг, а недоступная сводка не подменяет их нулями. Наведение и видимый клавиатурный фокус подчёркивают переход; настройка уменьшения движения отключает анимацию.
|
||||
|
||||
## Свежесть и границы
|
||||
|
||||
Список запрашивается при открытии экрана без ручного обновления и без обновления при возврате фокуса. Frontend использует успешный кэш TanStack Query в течение 60 секунд, поэтому повторный вход в этот интервал не выполняет новый GET. Когда уже показанный список обновляется в фоне, он остаётся на экране: индикатор обновления и ошибка с повторной попыткой отображаются рядом с последним успешным ответом, включая пустой список. Это клиентский сохранённый ответ; серверный запасной список не выдаётся. Backend не хранит кэш и не передаёт метку свежести. Список не заменяет полный [портфель](../portfolio/overview.md),
|
||||
[журнал операций](../operations/overview.md) или историю закрытых счетов.
|
||||
Для совокупного результата доступен [режим «Все счета»](../portfolio/all-accounts.md).
|
||||
Обычное открытие использует query owner и локальный server snapshot.
|
||||
«Обновить» запрашивает membership и сводки доступных счетов; активная работа
|
||||
наблюдается без нового импорта. Истечение TTL само не запускает запрос.
|
||||
Membership имеет пятиминутную свежесть, portfolio — минутную. Время списка
|
||||
не подменяет время каждой сводки. Список не заменяет полный
|
||||
[портфель](../portfolio/overview.md), [журнал](../operations/overview.md)
|
||||
или историю закрытых счетов. Для общего результата доступен
|
||||
[режим «Все счета»](../portfolio/all-accounts.md).
|
||||
|
||||
Согласованное поведение описывает [спецификация счетов](https://git.personal.ksv741.ru/WealthLedger/specs/src/commit/9e227a563dda67620f0ad78228aa8a4c18bf35a0/openspec/specs/brokerage-accounts/spec.md).
|
||||
Её раздел об экране пока требует одноколоночного списка и не описывает
|
||||
счётчики акций и облигаций. Текущая реализация и её проверки используют
|
||||
две колонки на широком экране и показывают эти счётчики. Расхождение требует
|
||||
отдельного согласования требований; в этой документации отражён наблюдаемый экран.
|
||||
|
||||
Reference in New Issue
Block a user