using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using PolyTrader.Core.Configuration; using PolyTrader.Core.Modularity; using PolyTrader.Modules.Accounting.Persistence; using PolyTrader.Modules.Accounting.Services; namespace PolyTrader.Modules.Accounting { /// /// Modul „Accounting": vollständige, von unserer Trading-DB UNABHÄNGIGE, buchhalterisch korrekte /// Erfassung aller Transaktionen der Live-Accounts (direkte Polymarket-/On-Chain-Abrufe → append-only /// Ledger). Reines Ingest-/Reporting-Modul, KEIN Handel. Konzept: docs/konzepte/KONZEPT-Modul-Accounting.md. /// /// A-1 (dieser Slice): Modul + acc_-Persistenz + pure Klassifikation + idempotenter Ingest hinter /// Interfaces (Null-Quellen offline; Live-Abruf im Zielland) + Ledger-/Status-UI. A-2 Abrechnung/BWA/FX, /// A-3 US-Steuerschicht, A-4 CSV/PDF-Export folgen. /// public class AccountingModule : IPolyTraderModule { public string Name => "Accounting"; public string DbPrefix => "acc_"; public void RegisterServices(IServiceCollection services, IConfiguration configuration) { var conn = configuration["Database:MySqlConnectionString"] ?? string.Empty; services.AddDbContextFactory(o => o.UseMySql(conn, DatabaseServerVersion.Value)); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); // A-2: neutrale Periodenabrechnung/BWA + Währungs-View (USDC/USD/EUR). services.AddSingleton(); // Ingest-Quellen: offline Null-Stubs (das Modul läuft ohne Live-Anbindung und bucht korrekt // nichts). Im Zielland werden die echten Quellen (Polymarket /activity, Alchemy-Transfers, // GetUsdcBalanceAsync) + die System-Contract-Whitelist registriert. Muster wie RF. services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(new AccountingSystemContracts()); services.AddSingleton(); services.AddHostedService(sp => sp.GetRequiredService()); } /// /// Aktuell ohne Ansicht: Die WinForms-UI wurde mit der Linux-Portierung entfernt, die /// Avalonia-Ansicht folgt (Stufe L3/L4). Die Fachlogik dieses Moduls laeuft davon /// unabhaengig weiter – die Shell zeigt schlicht kein Fenster fuer das Modul an. /// /// Beim Nachbau zu erhalten (Spezifikation: docs/UI-SPEZIFIKATION-WinForms.md, /// Originalcode: Git-Tag winforms-final): /// /// View-ID accounting.main (stabil – Launcher-Button und Symbol haengen daran) /// Titel Accounting, Gruppe Accounting, Order 400 /// Ein Fenster fuers ganze Modul: AccountingMainForm mit Tabs: Uebersicht+BWA / Ledger / Abruf+Status /// /// public void RegisterUi(IModuleUiHost host, IServiceProvider services) { // Bewusst leer, bis die Avalonia-Ansicht steht (siehe Doku oben). } public Task StartAsync(CancellationToken cancellationToken) => Task.CompletedTask; public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; } }