docs: document income without comparisons and unified payouts (WealthLedger/main#33) #40
@@ -61,6 +61,17 @@ Envelope несовместим с прежними bare-array ответами:
|
||||
поставляются согласованной парой. Финальный artifact передаётся явно;
|
||||
локальная генерация и CI frontend читают только собственный snapshot.
|
||||
|
||||
## Income analytics
|
||||
|
||||
`GET /api/v1/brokerage-accounts/{accountId}/income-analytics` и общий маршрут
|
||||
`all` возвращают результат только выбранного периода: итоги по исходным
|
||||
валютам, точные записи выплат, разбиение по инструментам и временные
|
||||
интервалы. Данных сравнения с предыдущим периодом или годом ранее в ответе
|
||||
нет — ни в теле, ни среди зависимостей `meta.dependencies`, роль которых
|
||||
ограничена значением `selected`. Публичную машинную схему задаёт
|
||||
backend-generated OpenAPI; frontend получает её обновлённый snapshot отдельно.
|
||||
Точную семантику поведения описывает [доход](../domains/income/overview.md).
|
||||
|
||||
## Validation и identity
|
||||
|
||||
Backend преобразует и проверяет входные данные на общей HTTP-границе.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
купонами и дивидендами за выбранный период». Пользователь открывает
|
||||
`/accounts/:accountId/income` из обзора счёта или
|
||||
[общий доход](../portfolio/all-accounts.md) по доступным счетам.
|
||||
Экран показывает итоги по валютам, сравнение и отдельную карточку каждой
|
||||
Экран показывает итоги по валютам и отдельную карточку каждой
|
||||
включённой выплаты. Источником служат [исполненные операции](../operations/overview.md),
|
||||
а не изменение цены портфеля и не календарь будущих выплат.
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
При первой загрузке или новом периоде без сохранённых данных показан
|
||||
каркас страницы. Пустой результат объясняет отсутствие исполненных купонов и
|
||||
дивидендов, сохраняя фильтры, налоговое пояснение и сравнения. Ошибка запроса
|
||||
дивидендов, сохраняя фильтры и налоговое пояснение. Ошибка запроса
|
||||
или нарушение принадлежности выплат даёт локальное состояние с действием «Повторить».
|
||||
При фоновом обновлении того же периода сохранённый ответ и черновик
|
||||
остаются видимыми: загрузку обозначает индикатор, неуспешное обновление —
|
||||
@@ -51,32 +51,15 @@
|
||||
|
||||
- Backend проверяет доступ локально и читает сохранённые операции. Фоновая загрузка должна завершить все страницы; ошибка страницы или повреждённая цепочка курсоров не подтверждают полноту.
|
||||
- Только точные типы купона и дивиденда источника формируют результат. Суммы остаются точными десятичными строками в исходной валюте; отрицательные корректировки сохраняют знак. Налоги, комиссии, сделки, переводы, погашения и переводы дивидендов не входят в доход.
|
||||
- Итоги, сравнения, временные интервалы и разбиение по инструментам не смешивают валюты и не создают общий конвертированный итог. Страница показывает сравнения с предыдущим периодом и годом ранее, когда календарная дата и история счёта позволяют. Неполное сравнение имеет отдельное сообщение, без нулевой базы.
|
||||
- Итоги, временные интервалы и разбиение по инструментам не смешивают валюты и не создают общий конвертированный итог. Система не загружает другие периоды ради сравнения полученного дохода с выбранным.
|
||||
- Временные интервалы по-прежнему приходят с backend: дни для 1–45 дней, недели для 46–180 и месяцы для более длинного периода, включая пустые интервалы. Страница дохода не строит из них график или текстовую динамику; ответ API не меняется.
|
||||
- Раздел «Выплаты» показывает единый список карточек выплат в исходном порядке `entries`: одна карточка на каждую выплату. Внешних групп по инструментам или валютам, итогов и количества выплат инструмента нет. Описание, дата, доступные идентификаторы инструмента и сумма со знаком видны в каждой карточке; валюты по-прежнему разделены в итогах и сравнениях. Дополнительный запрос за составом не нужен.
|
||||
|
||||
Сравнение с непосредственно предыдущим периодом использует предыдущий полный
|
||||
месяц для полного выбранного месяца, иначе — непосредственно предшествующий
|
||||
интервал той же включительной длительности. Оно не подменяет сравнение годом
|
||||
ранее. Незагруженное сравнение и ошибка его источника отличаются от
|
||||
недоступности годового сравнения по календарю или дате открытия счёта.
|
||||
|
||||
Каждый раздел сравнения показывает цветные панели без общей белой подложки и
|
||||
внутренних отступов у внешнего блока. Точные периоды показаны в заголовках двух панелей с русским форматом диапазона
|
||||
и UTC для календарных дат.
|
||||
Отдельного заголовка с датами и валютного бейджа нет; валюта остаётся у каждой суммы.
|
||||
Панель «Разница» сохраняет серверную абсолютную разницу и дополняет итог, купоны
|
||||
и дивиденды процентом: абсолютная разница / сумма годом ранее × 100.
|
||||
Это округлённый показатель для отображения, а не пересчёт Money или инвестиционная
|
||||
доходность. Форматирование сохраняет знак и не более одного десятичного разряда.
|
||||
При нулевой или отрицательной базе либо непредставимом числовом отношении
|
||||
процентный бейдж не отображается; абсолютная разница остаётся видимой.
|
||||
- Раздел «Выплаты» показывает единый список карточек выплат в исходном порядке `entries`: одна карточка на каждую выплату. Внешних групп по инструментам или валютам, итогов и количества выплат инструмента нет. Описание, дата, доступные идентификаторы инструмента и сумма со знаком видны в каждой карточке; валюты разделены в итогах. Дополнительный запрос за составом не нужен.
|
||||
|
||||
## Полнота и принадлежность выплат
|
||||
|
||||
Доходы читают сохранённые операции и coverage в согласованной транзакции.
|
||||
Selected, previous и yearAgo имеют независимую готовность. Неполный selected
|
||||
не получает окончательных итогов; неполное сравнение не создаёт нулевую базу.
|
||||
Только выбранный период определяет готовность результата. Неполный период
|
||||
не получает окончательных итогов.
|
||||
Подтверждённый пустой период отличается от ещё не загруженного. При смене
|
||||
периода прежний snapshot не показывается под новым названием.
|
||||
|
||||
@@ -103,11 +86,12 @@ Backend обеспечивает принадлежность выплат, ва
|
||||
|
||||
## Будущие события и ограничения
|
||||
|
||||
На странице дохода нет блоков «Динамика» и «Ближайший прогноз». Она не запрашивает
|
||||
На странице дохода нет блоков «Динамика» и «Ближайший прогноз», блоков
|
||||
сравнения периодов и сообщений об их недоступности. Она не запрашивает
|
||||
`/events` и не зависит от его доступности. Самостоятельная страница
|
||||
[«Будущие события»](upcoming-events.md) по-прежнему доступна из обзора
|
||||
выбранного счёта и сохраняет прежнее поведение. Будущие выплаты
|
||||
не включаются в итоги полученного дохода или сравнения.
|
||||
не включаются в итоги полученного дохода.
|
||||
|
||||
Аналитика читает сохранённую историю операций и не рассчитывает налоги, инвестиционную эффективность, доходность, валютную конвертацию или общий мультивалютный итог.
|
||||
|
||||
|
||||
@@ -45,7 +45,12 @@
|
||||
календарных дней. Поля «С» и «По» сохраняют выбранные календарные даты в URL,
|
||||
а «Сбросить» возвращает период по умолчанию.
|
||||
|
||||
События упорядочены по календарной дате. У каждой строки видны тип,
|
||||
События упорядочены по календарной дате. Купоны и дивиденды показываются
|
||||
единым предметным представлением выплаты с явной пометкой прогноза — тем же,
|
||||
что у исполненных выплат в доходе и журнале; неизвестная сумма остаётся
|
||||
«сумма неизвестна» и не превращается в ноль или полученные деньги.
|
||||
Дата дивиденда обозначена как дата реестра. Offer и погашение сохраняют своё
|
||||
значение без суммы выплаты. У каждой строки видны тип,
|
||||
инструмент, дата и доступная сумма в исходной валюте. Список не имеет
|
||||
пагинации и не конвертирует валюты. Пустой результат означает отсутствие
|
||||
известных поддерживаемых событий в выбранном окне, а не доказательство
|
||||
|
||||
@@ -89,7 +89,11 @@ HTML-источник, общий кэш и поведение при измен
|
||||
|
||||
Календарь охватывает пять прошлых лет и следующий год. Будущие купоны
|
||||
сортируются по дате выплаты, прошедшие и недатированные доступны отдельно.
|
||||
Показаны сумма на облигацию, номер, тип, длительность периода и дата реестра,
|
||||
Будущие и прошедшие события купонного графика показываются единым предметным
|
||||
представлением выплаты с пометкой события по графику — тем же, что у
|
||||
исполненных выплат и прогноза; исполнение подтверждает только личная история.
|
||||
Показаны сумма на облигацию, отдельная личная оценка, номер, тип, длительность
|
||||
периода и дата реестра,
|
||||
если они известны. Неопределённый будущий купон не заменяется нулём.
|
||||
|
||||
Личная оценка доступна только при положительных позициях, известной сумме,
|
||||
|
||||
@@ -124,7 +124,11 @@ UID включён в ключ кэша и подпись общего курс
|
||||
|
||||
## Дивиденды и финансовые показатели
|
||||
|
||||
События компании отделены от личных зачислений. Известные будущие выплаты
|
||||
События компании отделены от личных зачислений. Будущие и прошедшие события
|
||||
дивидендного графика показываются единым предметным представлением выплаты
|
||||
с пометкой «событие по графику» — тем же, что у исполненных выплат и прогноза;
|
||||
сумма на акцию, отдельная личная оценка и дата реестра сохраняют свои подписи
|
||||
и не выдаются за личное зачисление. Известные будущие выплаты
|
||||
определяются по `paymentDate`, при её отсутствии — по `recordDate`; прошедшие
|
||||
и недатированные события помещены в отдельную историю компании. Отменённые
|
||||
события исключаются. Личная оценка умножает сумму на акцию на текущее положительное
|
||||
|
||||
@@ -84,8 +84,10 @@ Coverage/status без изменения rowset cursor не ломают. Пе
|
||||
|
||||
Полный журнал и превью используют одинаковую компактную строку: логотип
|
||||
или буквенная заглушка, описание, дата, инструмент и денежное движение.
|
||||
Для купона и дивиденда денежная метка называет точное событие; для прочих
|
||||
операций — категорию. Она показывается один раз, без повтора рядом с датой.
|
||||
Исполненные купоны и дивиденды показываются единым предметным представлением
|
||||
выплаты — тем же, что на странице дохода, в прогнозе и графиках инструментов;
|
||||
денежная метка называет точное исполненное событие. Для прочих
|
||||
операций метка называет категорию. Она показывается один раз, без повтора рядом с датой.
|
||||
Знак и цвет обозначают направление денег; отсутствие движения нейтрально.
|
||||
Если описание отсутствует, показывается локализованный тип операции.
|
||||
|
||||
|
||||
@@ -53,13 +53,10 @@ Backend публикует статические маршруты под `/api/
|
||||
- Журнал объединяет операции по убыванию времени, при равном времени использует
|
||||
порядок идентификаторов счетов и операций. ID
|
||||
операций разных счетов не считаются дублями. Переводы не схлопываются.
|
||||
- Доходы рассчитываются из согласованной локальной выборки операций за общие периоды.
|
||||
Итоги, сравнения, временные интервалы и принадлежность выплат рассчитывает
|
||||
сервис дохода.
|
||||
Для сравнения с годом ранее используется текущий состав счетов; новый счёт
|
||||
добавляет только реально полученные выплаты. При известных датах открытия всех счетов
|
||||
доступность сравнения определяется самым ранним открытием в этом составе.
|
||||
Закрытые счета в историческое сравнение не добавляются.
|
||||
- Доходы собираются из всех страниц операций каждого счёта за выбранный период.
|
||||
Итоги, временные интервалы и принадлежность выплат рассчитывает
|
||||
сервис дохода. Данные сравнения периодов не загружаются и не возвращаются;
|
||||
состав счетов влияет только на фактические выплаты выбранного периода.
|
||||
- Будущие события сортируются по дате и сохраняют отдельную строку каждого счёта.
|
||||
Прогноз не включается в реализованные доходы.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user