using Avalonia.Media; namespace IBKRTrader.App.ViewModels; /// /// Zeilentypen für die DataGrids der Core-Ansichten. /// /// Bewusst benannte Records statt der anonymen Typen, die die WinForms-Fassung an /// DataGridView.DataSource gehängt hat: Avalonias DataGrid bindet über /// kompilierte Bindings gegen einen bekannten Typ. Anonyme Typen sind internal und /// funktionieren dort nur über Reflexion – mit benannten Records bleibt die Spaltendefinition /// im XAML prüfbar. /// public sealed record ModuleRow(string Name, string Prefix, string Status); /// /// Eine Zeile im Live-Log. Die Farbe hängt am Eintrag statt an einer Selektion – WinForms färbte /// über SelectionColor der RichTextBox ein, in Avalonia wird je Element gebunden. /// public sealed record LogRow(string Text, IBrush Color); /// Eine offene Position im Modul-Fenster. public sealed record PositionRow(string Symbol, int Quantity, decimal AvgPrice, decimal Notional); /// /// Eine Zeile der Positionsverwaltung (#485). Zahlen kommen als fertiger Text: Die Formatierung /// gehoert an eine Stelle, und „Broker“ muss zwischen „null Stück“ und „keine Auskunft“ /// unterscheiden koennen - ein Zahlentyp kann das nicht. /// public sealed record ManagedPositionRow( string Book, string Origin, string Instrument, string Quantity, string AvgPrice, string Bound, string Broker, string Restrictions); /// Bestand, den der Broker fuehrt und den kein Buch beansprucht. public sealed record UnknownPositionRow( string Symbol, string SecType, string Currency, string Quantity, string AvgCost, string Note); /// Eine Zeile der Supervisor-Berichtsliste. Tokens als fertiger Text (Prompt / Completion). public sealed record SupervisorReportRow( DateTime CreatedAt, string Profile, string Model, string Question, int ToolCallCount, string Tokens); // ─── Accounting ────────────────────────────────────────────────────────────── // Beträge als bereits formatierter Text: die Umrechnung in die Anzeigewährung passiert beim // Laden, und das Format ist damit an einer Stelle festgelegt statt in jeder Spaltendefinition. /// Eine Monatszeile des Monatsvergleichs (BWA). public sealed record MonthlyRow( string Month, string Opening, string Deposits, string Withdrawals, string Volume, string Fees, string Result, string Closing); /// Eine Buchung im neutralen Ledger. public sealed record LedgerRow( DateTime Time, string AccountId, string EventType, string Side, string Symbol, string Currency, decimal Quantity, decimal Price, decimal Gross, decimal Fee, decimal Net, string TransactionId); /// Ein Ingest-Lauf des Flex-Query-Abrufs. public sealed record IngestRunRow( string AccountId, DateTime Started, DateTime? Finished, bool Backfill, int NewEntries, int DuplicateEntries, bool Success, string Delta, string Message);