- Add buyPrice and buyDate to positions for PnL tracking
- Implement backend analytics service for real-time portfolio performance
- Add server-side security screener with filtering, sorting, and pagination
- Update frontend UI with analytics summaries and sortable screener table
- Optimize MOEX API calls with batch fetching and portfolio-specific caching
- Add unit tests for analytics and screener services
Three optimizations:
1. Merge getBondData + getBondMarketData into single batch call
(same endpoint, parse both tables)
2. Remove redundant getSecurityDescription for shortName
(shortName already in market data responses)
3. Batch by market: 1 call for all shares, 1 call for all bonds
(instead of N individual calls)
Before: 298 API calls for 104 positions -> ~29.8s
After: 2 API calls for 104 positions -> ~0.3s