using System; namespace PolyTrader.Modules.Accounting.Models { /// /// Normalisierte Polymarket-Activity-Position (Eingabe des Klassifikators). Die Live-Quelle /// (IActivitySource) mappt die tatsächliche API-JSON auf dieses Modell — so bleibt die /// pure Buchungslogik von der (im Zielland zu verifizierenden) API-Feldbenennung entkoppelt. /// public sealed class RawActivity { public string Type { get; init; } = string.Empty; // TRADE/REDEEM/REWARD/FEE/SPLIT/MERGE/CONVERSION public string Side { get; init; } = string.Empty; // BUY/SELL (bei TRADE) public DateTime Timestamp { get; init; } public string TxHash { get; init; } = string.Empty; public int LogIndex { get; init; } public string TokenId { get; init; } = string.Empty; public string MarketSlug { get; init; } = string.Empty; public string Outcome { get; init; } = string.Empty; public decimal Size { get; init; } // Shares public decimal Price { get; init; } // USDC je Share public decimal UsdcAmount { get; init; } // Brutto-USDC des Ereignisses public decimal Fee { get; init; } public string RawJson { get; init; } = string.Empty; } /// /// Normalisierter On-Chain-USDC-Transfer des Safe-Wallets (Eingabe des Klassifikators). Die /// Live-Quelle liefert ERC-20-Transfer-Logs; die Klassifikation trennt interne Bewegungen /// (Safe ↔ Polymarket-System-Contracts, bereits in der Activity) von echten externen /// Ein-/Auszahlungen. /// public sealed class RawTransfer { public DateTime Timestamp { get; init; } public string TxHash { get; init; } = string.Empty; public int LogIndex { get; init; } public string FromAddress { get; init; } = string.Empty; public string ToAddress { get; init; } = string.Empty; public decimal UsdcAmount { get; init; } // positiv public bool IsIncoming { get; init; } // Ziel == unser Wallet public string RawJson { get; init; } = string.Empty; } }