feat: управление портфелями с разделением акций и облигаций #7

Merged
ksv741 merged 2 commits from feat/portfolio-phase1 into main 2026-06-14 11:17:20 +03:00
Owner

Что сделано

Виртуальные портфели

  • CRUD для портфелей (название, описание, валюта)
  • Добавление/удаление/редактирование позиций (inline quantity)
  • Автоопределение типа бумаги при добавлении (share/bond) через MOEX description
  • Расчёт доли каждой позиции в портфеле

Две таблицы

  • Акции: Тикер (ссылка → /stocks/:secid), Название, Количество, Цена, Изм. ₽, Стоимость, Доля
  • Облигации: Тикер (ссылка → /bonds/:secid), Название, Тип, Количество, Цена (% номинала), Бид/Оффер, Доходность (YTM), Дюрация, Купон (₽/%), Период, НКД (суммарный), След. купон, Погашение, Оферта, Доля

Обогащение данными (Enrichment)

  • Акции: currentPrice, change, changePercent, shortName
  • Облигации: 13 полей (YTM, duration, coupon, NCD, accruedInt, bid/offer, bondType, offerDate, couponPeriod, matDate) через MOEX ISS

Исправления

  • MOEX bond marketdata: поиск по всем доскам (ОФЗ торгуются на TQOB, не TQCB) — fallback на любую доску с LAST != null
  • Null-safety в компонентах market data

Документация

  • ADR-009: доменная модель портфелей
  • ADR-010: price computation
  • Backend portfolio.md — описание модуля, эндпоинтов, enrichment
  • Обновлён superpowers spec + plan

Технические детали

  • Backend: PortfolioModule (NestJS, service + controller + 6 DTO), кеширование через CacheService
  • Frontend: 4 TanStack Query хука, 7 компонентов, 2 страницы
  • Хранилище: Position.type (share/bond) в Prisma/SQLite
  • Безопасность: все эндпоинты под JwtAuthGuard (глобальный)
## Что сделано ### Виртуальные портфели - CRUD для портфелей (название, описание, валюта) - Добавление/удаление/редактирование позиций (inline quantity) - Автоопределение типа бумаги при добавлении (share/bond) через MOEX description - Расчёт доли каждой позиции в портфеле ### Две таблицы - **Акции**: Тикер (ссылка → /stocks/:secid), Название, Количество, Цена, Изм. ₽, Стоимость, Доля - **Облигации**: Тикер (ссылка → /bonds/:secid), Название, Тип, Количество, Цена (% номинала), Бид/Оффер, Доходность (YTM), Дюрация, Купон (₽/%), Период, НКД (суммарный), След. купон, Погашение, Оферта, Доля ### Обогащение данными (Enrichment) - Акции: currentPrice, change, changePercent, shortName - Облигации: 13 полей (YTM, duration, coupon, NCD, accruedInt, bid/offer, bondType, offerDate, couponPeriod, matDate) через MOEX ISS ### Исправления - MOEX bond marketdata: поиск по всем доскам (ОФЗ торгуются на TQOB, не TQCB) — fallback на любую доску с LAST != null - Null-safety в компонентах market data ### Документация - ADR-009: доменная модель портфелей - ADR-010: price computation - Backend portfolio.md — описание модуля, эндпоинтов, enrichment - Обновлён superpowers spec + plan ## Технические детали - Backend: PortfolioModule (NestJS, service + controller + 6 DTO), кеширование через CacheService - Frontend: 4 TanStack Query хука, 7 компонентов, 2 страницы - Хранилище: Position.type (share/bond) в Prisma/SQLite - Безопасность: все эндпоинты под JwtAuthGuard (глобальный)
ksv741 added 2 commits 2026-06-14 11:16:50 +03:00
fix: null safety for market data components and backend CI
Some checks failed
CI / lint (pull_request) Successful in 1m54s
CI / test (pull_request) Successful in 1m46s
CI / build (pull_request) Failing after 1m50s
ca4a8b35f3
feat: portfolio management with share/bond separation
Some checks failed
CI / lint (pull_request) Successful in 1m59s
CI / test (pull_request) Successful in 1m45s
CI / build (pull_request) Failing after 1m54s
CI / lint (push) Successful in 1m50s
CI / test (push) Successful in 1m47s
CI / build (push) Failing after 2m3s
a980520261
- Add Portfolio + Position models (Prisma + migrations)
- Backend: PortfolioModule with CRUD, enrichment, type detection
- Backend: enrichBondPosition returns 13 financial fields (YTM, duration,
  coupon, NCD, accrued interest, bid/offer, bondType, offerDate, etc.)
- Frontend: portfolio pages, 4 TanStack Query hooks, split share/bond tables
- Fix: MOEX bond marketdata board fallback (TQCB → TQOB for OFZ)
- Frontend: clickable ticker links to /stocks/:secid and /bonds/:secid
- Remove: target allocation, deviation, tags display from Phase 1
- Docs: ADR-009 (domain model), ADR-010 (price computation),
  portfolio backend doc, superpowers spec + plan
ksv741 merged commit a980520261 into main 2026-06-14 11:17:20 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: moex/moex-vibe#7
No description provided.