namespace IBKRTrader.Core.Trading;
///
/// Buchführung über offene Positionen und Ausführungen (core_position, core_trade_history).
/// Externer Seam gegenüber der Datenbank: in Tests gemockt.
///
public interface IPortfolioService
{
/// Summe des offenen Nominalwerts eines Moduls.
Task GetModuleExposureAsync(string module, CancellationToken ct = default);
/// Gehaltene Stückzahl eines Moduls für ein Symbol (0, wenn keine Position).
Task GetPositionQuantityAsync(string module, string symbol, CancellationToken ct = default);
/// Verbucht einen Fill: aktualisiert Position, Budget und Trade-Historie.
Task RecordFillAsync(
string module, string symbol, TradeSide side,
int quantity, decimal price, string? orderId, CancellationToken ct = default);
/// Alle offenen Positionen eines Moduls.
Task> GetPositionsAsync(string module, CancellationToken ct = default);
}