docs: состояние после фаз 2–4
AGENTS.md и docs/ai/plan.md — фаза 2 закрыта (линки, брокерские потоки, ручные цены), фазы 3 и 4 закрыты и протестированы на живых отчётах и фикстурах; порядок шагов пересчёта дополнен benchmarks/rebalance/income/tax.
This commit is contained in:
@@ -476,6 +476,26 @@ instruments; экраны: позиции, карточка инструмент
|
||||
неизвестный ISIN → pending, после резолва лоты пересобраны; pdf и xlsx ВТБ за один период
|
||||
дают одинаковые `dedupe_key`; парсеры без зависимости от БД.
|
||||
|
||||
**Статус: закрыта.** Все проверки пройдены на живых отчётах, кроме одной: pdf-выгрузок ВТБ у
|
||||
пользователя нет, и сверить два формата не на чем. Вместо неё сверены два xlsx с
|
||||
перекрывающимися периодами, а контракт, который обязан соблюсти будущий `vtb/pdf.py`, чтобы
|
||||
ключи совпали (брокер, номер соглашения, «№ сделки»), записан в `vtb/common.py`.
|
||||
|
||||
Что выяснилось по ходу и чего в плане не было:
|
||||
|
||||
- CSV-выгрузка Snowball **сводная по всем брокерам и не содержит разбивки по счетам**, а
|
||||
также закрывающих позиций и остатков. Как сверка она годится для потоков, сделок и выплат
|
||||
на уровне портфеля, но не для позиций по счетам. Целевой счёт указывает пользователь, и на
|
||||
счёте с другим `primary_event_source` события лягут `shadow`;
|
||||
- в ней же 4 строки — не операции, а правки остатка самим Snowball (3 среди `CASH_OUT`,
|
||||
1 среди `CASH_IN`), причём одна на −1017,84 ₽, то есть крупнее настоящего вывода. Отличать
|
||||
их можно только по тексту `Note`, порог по сумме ошибается;
|
||||
- два `SPLIT` по `T` — одно корпоративное действие, увиденное на двух счетах; схлопываются в
|
||||
один `dedupe_key`, и это верно: иначе коэффициент 10 применился бы дважды;
|
||||
- `CUSTOM_HOLDING_PRICE` закрывает ручной ценой только `SIBN6P4`;
|
||||
`NDM_TBNK-PP-FIXPRCNT-08.25` в выгрузке отсутствует, его дыра остаётся открытой;
|
||||
- отчёты Сбера не содержат дивидендов, налогов и купонной секции вовсе.
|
||||
|
||||
### Фаза 4 — доходы, ребалансировка, бенчмарки, цели, налоги
|
||||
`sync_events.py` (GetDividends, GetBondCoupons, GetBondEvents), MOEX как второй источник
|
||||
с правилами приоритета, `analytics/income.py`, `rebalance.py` (целевые веса по категориям,
|
||||
@@ -488,6 +508,14 @@ instruments; экраны: позиции, карточка инструмент
|
||||
одной сетке без дыр в праздники; лот > 3 лет помечен `ldv_eligible`, налоговый вид
|
||||
сходится с ручным примером.
|
||||
|
||||
**Статус: код и тесты закрыты (157 backend-тестов), прогон на живом портфеле — нет.**
|
||||
Четыре шага (`income`, `tax`, `benchmarks`, `rebalance`) зарегистрированы в
|
||||
`register_steps`, оба источника выплат (`tinvest_events`, `moex_payouts`) — в реестре
|
||||
источников, но ни разу не выполнялись против боевой БД: `metrics refresh` с ними ещё не
|
||||
запускался. Бенчмарки (IMOEX/MCFTR/RGBITR) — данные, не код: пока в `benchmark` не добавлена
|
||||
ни одна строка, `/analytics/benchmarks` пуст. S&P (вопрос 2) не тронут — по-прежнему только
|
||||
ручной CSV.
|
||||
|
||||
### Фаза 5 — полировка и эксплуатация
|
||||
Адаптивные раскладки, тёмная тема, offline-кэш с баннером «данные на…», release-сборка
|
||||
Android, Linux/Windows в CI, пустые/ошибочные состояния, экран настроек, runbook
|
||||
|
||||
Reference in New Issue
Block a user