# Портфель Портфель показывает, какими активами и доступными деньгами располагает брокерский счёт по последнему успешному наблюдению T-Bank. Это снимок состава и его текущей оценки, а не локальная история владения или расчёт полной инвестиционной доходности. Пользователь открывает его на `/accounts/:accountId`; [режим «Все счета»](all-accounts.md) объединяет доступные счета текущего подключения. ## Снимок и связанные области Снимок состоит из позиций по инструментам, доступных денежных остатков, валютных итогов и структуры активов. Позиция означает ненулевое количество обычного инструмента в брокерском портфеле. Торгуемая валютная позиция `CURRENCY` и свободные деньги имеют разный смысл и передаются раздельно. Точный смысл сумм и неизвестных значений раскрыт в [справочнике данных](data-reference.md). Доступность счёта определяется [текущим подключением и списком счетов](../accounts/overview.md). Backend получает данные через серверную [интеграцию T-Bank](../../integrations/tbank.md) и постоянно сохраняет последний полный снимок в SQLite. Frontend получает нормализованный результат через HTTP API. [Поток загрузки](flows/portfolio-loading.md) объясняет границы доступа, свежесть снимка и восстановление после временной ошибки. Обзор счёта также показывает пять последних [операций](../operations/overview.md), [полученный доход](../income/overview.md) текущего месяца и до пяти [будущих событий](../income/upcoming-events.md). Каждый блок загружается самостоятельно: его ошибка или отсутствие данных не скрывает основной портфель. Полученные выплаты и прогноз не добавляются к текущей стоимости повторно и не превращают результат открытой позиции в полную доходность. ## Как читать экран Валютная сводка показывает отдельную карточку для каждого полученного итога. Деньги уже включены в итог своей валюты. RUB, USD и EUR обозначены ₽, $ и €; другие валюты сохраняют ISO-код. Вспомогательным технологиям доступны полное значение и название валюты. Суммы сохраняют все исходные цифры, знак и дробные позиции, включая `-0,5`; длинные значения переносятся без обрезания. Карточки не интерактивны и занимают одну колонку на узком экране, две или три на широком. Отсутствующая валюта не получает искусственную нулевую карточку. Пустые итоги не скрывают доступный состав портфеля. Структура после сводки распределяет известную стоимость по акциям, облигациям, другим активам и свободным деньгам. При нескольких валютах пользователь выбирает одну; при одной отдельного переключателя нет. Кольцевая диаграмма дополнена текстовым списком сумм и долей и подсказкой; на узком экране список расположен под ней. Неизвестная оценка, отрицательные составляющие или нулевой итог ограничивают возможность показать доли — [почему кольцо бывает недоступно](data-reference.md#структура-и-доли). Акции и облигации показаны отдельными секциями, по одной карточке в ряду при любой ширине. Внутри сохраняется порядок источника. Слева находятся название, логотип, количество и идентификатор, справа — стоимость и результат. Средняя цена и доля размещены ниже. Логотип размером 40 px при недоступности изображения заменяется первой буквой имени. Акция показывает тикер, а при его отсутствии ISIN; облигация — ISIN. Название и логотип ведут на страницы [акции](../instruments/stocks.md) или [облигации](../instruments/bonds.md), когда доступен точный UID инструмента. Результат открытой позиции имеет явный знак: плюс при положительном, минус при отрицательном, без знака при нуле. Цвет дополняет знак. Иные отображаемые активы используют компактные плитки в адаптивной сетке без логотипа и с подписью результата. Отсутствующие показатели скрываются, а не подменяются нулём или заглушкой. Существует расхождение: [согласованная спецификация представления позиций](https://git.personal.ksv741.ru/WealthLedger/specs/src/commit/9e227a563dda67620f0ad78228aa8a4c18bf35a0/openspec/specs/portfolio-view/spec.md#requirement-представление-карточек-позиций-на-клиенте) требует доступности всех иных типов в отдельной секции, а текущие frontend и его проверка исключают `CURRENCY` только из списка карточек. Такие позиции остаются в ответе, валютных итогах, структуре и знаменателе долей остальных позиций. Это описание фактического ограничения; выбор между изменением интерфейса и согласованием требований остаётся отдельной задачей. ## Свежесть и границы При первом запросе экран показывает каркас заголовка, сводки и разделов. Три формы валютных карточек в каркасе не обещают наличие трёх валют. Загрузка обозначена для вспомогательных технологий; декоративные элементы не содержат данных и не получают фокус. При обычном фоновом обновлении сохраняются предыдущие суммы и время успешного получения в UTC. Серверный `isStale` обозначает возраст снимка старше часа: обновлением владеет часовой обход, а не запрос экрана. Клиентское предупреждение означает неудачную попытку обновить уже показанный ответ. Эти состояния независимы и могут появиться одновременно. Успешный повторный запрос обновляет суммы и время, снимает клиентскую ошибку; серверное предупреждение определяется новым `isStale`. Правила времени и ошибок приведены в [потоке загрузки](flows/portfolio-loading.md). Отдельного чтения истории стоимости нет, но каждый полный снимок сохраняет точку оценки по счёту и валюте для будущих поддерживаемых представлений; публичного графика в текущем решении нет. Нет также валютной конвертации, учёта виртуальных позиций или заблокированных средств. Последний полный снимок сохраняется после перезапуска; обновлением личных данных владеет часовой обход, рассчитанный на один экземпляр backend. Действие «Обновить» выполняет только локальное перечитывание открытого экрана и не запускает работу с T-Bank. Для проверки конкретной суммы используйте [руководство по расхождениям](how-to/investigate-discrepancy.md). Проверяемое поведение отдельного счёта описано в [спецификации портфеля](https://git.personal.ksv741.ru/WealthLedger/specs/src/commit/9e227a563dda67620f0ad78228aa8a4c18bf35a0/openspec/specs/portfolio-view/spec.md); точную форму HTTP-ответа задаёт [OpenAPI backend](../../architecture/http-api.md).