docs: refresh project onboarding entrypoints
This commit is contained in:
@@ -1,3 +1,8 @@
|
||||
# Architecture
|
||||
# Архитектура
|
||||
|
||||
Здесь описывается фактическое устройство системы, общие границы компонентов и интеграций. Диаграммы Mermaid добавляются, когда они проясняют взаимодействие.
|
||||
Здесь описывается фактическое устройство WealthLedger и границы компонентов.
|
||||
|
||||
- [Обзор системы](system-overview.md) — поставленные возможности, локальные
|
||||
границы и основные потоки данных.
|
||||
- [Глоссарий домена](domain-glossary.md) — канонические значения терминов.
|
||||
- [ADR](../adr/README.md) — долгоживущие решения и их последствия.
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
# Глоссарий домена
|
||||
|
||||
## T-Bank connection
|
||||
|
||||
Единственное принадлежащее User подключение к T-Bank Invest, содержащее
|
||||
зашифрованный token для server-side запросов.
|
||||
|
||||
_Не использовать_: аккаунт T-Bank, авторизация T-Bank.
|
||||
|
||||
## Brokerage Account
|
||||
|
||||
Открытый поддерживаемый инвестиционный счёт T-Bank, доступный через T-Bank
|
||||
connection: брокерский счёт, ИИС, Инвесткопилка или фонд денежного рынка.
|
||||
|
||||
_Не использовать_: счёт T-Bank, банковский счёт.
|
||||
|
||||
## Investment Account Type
|
||||
|
||||
Нормализованная категория Brokerage Account, независимая от upstream enum
|
||||
T-Bank.
|
||||
|
||||
_Не использовать_: тип аккаунта T-Bank, protobuf type.
|
||||
|
||||
## Portfolio
|
||||
|
||||
Текущее нормализованное состояние инвестиций одного Brokerage Account,
|
||||
включающее позиции, доступные денежные остатки и итоги по каждой валюте.
|
||||
|
||||
_Не использовать_: общий портфель, баланс счёта.
|
||||
|
||||
## Portfolio Position
|
||||
|
||||
Ненулевой обычный инвестиционный актив в составе Portfolio с количеством и
|
||||
доступными оценочными показателями.
|
||||
|
||||
_Не использовать_: валютная позиция, виртуальная позиция.
|
||||
|
||||
## Instrument
|
||||
|
||||
Ценная бумага или иной торгуемый актив T-Bank, на который ссылается Portfolio
|
||||
Position через FIGI или instrument UID. Metadata Instrument обогащают
|
||||
отображение Position, но не определяют количество или стоимость.
|
||||
|
||||
_Не использовать_: бумага, тикер, актив позиции.
|
||||
|
||||
## Cash Balance
|
||||
|
||||
Ненулевой доступный денежный остаток Portfolio в одной валюте; не является
|
||||
Portfolio Position.
|
||||
|
||||
_Не использовать_: валютная позиция, заблокированные средства.
|
||||
|
||||
## Portfolio Snapshot
|
||||
|
||||
Полный успешно полученный состав Portfolio на определённый момент времени,
|
||||
который может быть свежим или устаревшим fallback-представлением.
|
||||
|
||||
_Не использовать_: история портфеля, snapshot для графика.
|
||||
|
||||
## Client Cached Snapshot
|
||||
|
||||
Последний успешно полученный frontend-ответ React Query, который остаётся
|
||||
видимым во время фонового обновления или после его ошибки. Не является
|
||||
server-side fallback и не использует поле `Portfolio.isStale`.
|
||||
|
||||
_Не использовать_: устаревший Portfolio Snapshot, fallback портфеля.
|
||||
|
||||
## Account Ledger
|
||||
|
||||
Упорядоченная read-only история исполненных операций одного Brokerage Account,
|
||||
отражающая фактические денежные и инструментальные движения без рыночной
|
||||
переоценки или расчёта остатка после операции.
|
||||
|
||||
_Не использовать_: история Portfolio, баланс счёта.
|
||||
|
||||
## Ledger Entry
|
||||
|
||||
Нормализованное представление одной операции T-Bank в Account Ledger; хранит
|
||||
исходные суммы и доступные детали операции, не создавая синтетических записей
|
||||
для комиссии сделки.
|
||||
|
||||
_Не использовать_: проводка, рассчитанная операция.
|
||||
|
||||
## Ledger Page Cache
|
||||
|
||||
Кэш страницы Account Ledger, отделённый от кэша отдельных операций.
|
||||
|
||||
_Не использовать_: operations cache, кэш отдельных операций.
|
||||
|
||||
## Ledger Page Cache Key
|
||||
|
||||
Каноническая идентичность страницы Ledger Page Cache: User, Brokerage Account,
|
||||
нормализованные диапазон и categories, opaque upstream cursor и limit.
|
||||
|
||||
_Не использовать_: сырой URL query, ключ отдельной Ledger Entry.
|
||||
|
||||
## Concurrent Refresh Attempt
|
||||
|
||||
Два или более перекрывающихся запроса с одним ещё действительным refresh token
|
||||
одной Session; один становится Refresh Winner, остальные — Refresh Loser и
|
||||
получают `401`, не отзывая Session победителя.
|
||||
|
||||
_Не использовать_: повторное использование refresh token, последовательный
|
||||
refresh.
|
||||
|
||||
## Superseded Refresh Token
|
||||
|
||||
Refresh token, который перестал быть действительным после успешной ротации
|
||||
Session; его предъявление получает `401`, но само по себе не отзывает Session.
|
||||
|
||||
_Не использовать_: активный refresh token, признак взлома сессии.
|
||||
|
||||
## Future Cash Event
|
||||
|
||||
Прогнозируемое на ближайший период денежное или связанное корпоративное
|
||||
событие одного Brokerage Account, рассчитанное по текущей Portfolio Position;
|
||||
не является исполненной Ledger Entry.
|
||||
|
||||
_Не использовать_: будущая операция, гарантированная выплата.
|
||||
@@ -0,0 +1,72 @@
|
||||
# Обзор системы
|
||||
|
||||
WealthLedger — локальное приложение для просмотра инвестиционных данных через
|
||||
безопасное server-side подключение к T-Bank Invest.
|
||||
|
||||
## Поставленные возможности
|
||||
|
||||
- [Аутентификация](../features/authentication.md): access/refresh-сессии и
|
||||
защищённые маршруты.
|
||||
- [Подключение T-Bank](../features/tbank-connection.md): один зашифрованный
|
||||
token на User.
|
||||
- [Брокерские счета](../features/brokerage-accounts.md),
|
||||
[Portfolio](../features/portfolio-view.md),
|
||||
[Account Ledger](../features/brokerage-account-ledger.md) и
|
||||
[Future Cash Events](../features/brokerage-account-upcoming-events.md).
|
||||
- [Frontend UI resilience](../features/frontend-ui-resilience.md): явные
|
||||
loading, error, empty и cached-snapshot состояния.
|
||||
|
||||
Термины этих возможностей определяет [глоссарий домена](domain-glossary.md), а
|
||||
причины ключевых технических решений — [ADR](../adr/README.md).
|
||||
|
||||
## Локальные границы
|
||||
|
||||
- Frontend — React-клиент; он не вызывает T-Bank напрямую.
|
||||
- Backend — NestJS API `/api/v1`, владеющий auth, SQLite-данными и T-Bank
|
||||
gRPC boundary.
|
||||
- OpenAPI backend — единственный контракт frontend; committed client
|
||||
генерируется штатным workflow.
|
||||
- Поставка остаётся локальной: deployment, Docker, CI/CD и облачные сервисы не
|
||||
входят в текущие границы.
|
||||
- Snapshot Portfolio и кэш Ledger существуют только в runtime-памяти; система
|
||||
не предоставляет историческое хранилище портфеля.
|
||||
|
||||
## Поток auth/session
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as User
|
||||
participant F as Frontend
|
||||
participant B as Backend
|
||||
participant D as SQLite
|
||||
U->>F: Регистрация или вход
|
||||
F->>B: POST /api/v1/auth/*
|
||||
B->>D: Создаёт User и Session
|
||||
B-->>F: Access token + refresh cookie
|
||||
F->>B: Защищённый запрос с Bearer token
|
||||
B-->>F: Данные или Problem Details
|
||||
F->>B: POST /api/v1/auth/refresh при истечении access token
|
||||
B->>D: Ротирует refresh token
|
||||
B-->>F: Новый access token + refresh cookie
|
||||
```
|
||||
|
||||
## Поток инвестиционных данных
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as User
|
||||
participant F as Frontend
|
||||
participant B as Backend
|
||||
participant D as SQLite
|
||||
participant T as T-Bank gRPC
|
||||
U->>F: Открывает счета или Portfolio
|
||||
F->>B: GET /api/v1/brokerage-accounts/* (Bearer)
|
||||
B->>D: Читает T-Bank connection
|
||||
B->>T: Запрос через server-side gRPC boundary
|
||||
T-->>B: Upstream-данные
|
||||
B-->>F: Нормализованные данные или Problem Details
|
||||
F-->>U: Экран с данными или локальным состоянием ошибки
|
||||
```
|
||||
|
||||
Подробный статус локальных gates и deferred Prisma e2e находится в
|
||||
[audit remediation registry](../development/audit-remediation.md).
|
||||
Reference in New Issue
Block a user