Der Status des Projekts stand verstreut in elf Umsetzungsplaenen, drei Konzepten, der Linux-Analyse und dem Projektstand - teils widersprechend, teils wochenlang veraltet. Ab jetzt gibt es genau eine Statusquelle. docs/ROADMAP.md (neu): - Alle Vorhaben in vier Stufen A bis D, plus technische Schuld und Verlauf. Die Stufen sind eine Reihenfolge, keine Termine: jede schafft die Voraussetzung fuer die naechste. - Statuszeichen: erledigt / offen / blockiert (mit Ursache) / bewusst zurueckgestellt / Idee, nicht beschlossen. Damit ist das, was wir NICHT bauen wollen, sichtbar vorgehalten statt unauffindbar in einem Plan zu schlummern. - Inhaltlich getragen, nicht nur verlinkt: je Vorhaben Ziel, Phasen, Akzeptanzkriterien, offene Entscheidungen und Leitplanken aus den Quelldokumenten. - Sichtbar gemacht, was vorher zwischen den Dokumenten verborgen lag: CopyTrading Phase 1 ist der Engpass der gesamten Roadmap (MarketMaking und BundleArbitrage haben harte Voraussetzungen darauf), und die Sniper-Metriken aus Phase 3.2 sind ein Spezialfall des StrategieDrift-Fingerprints - zusammen bauen statt doppelt. Archiv (docs/archiv/): - 15 Dokumente verschoben (11 Umsetzungsplaene, 3 Konzepte, ANALYSE-Linux-Portierung). Sie bleiben die Bauanleitungen mit Code-Bezuegen, Risikotabellen und Begruendungen - eingefroren ist nur ihr Status. - archiv/README.md ordnet jedes Dokument seinem Roadmap-Punkt zu. Verweise nachgezogen - der eigentliche Aufwand: - 25 Markdown-Links repariert. 15 davon verschiebungsbedingt (eine Ebene tiefer), der Rest war schon vorher falsch: die Ideensammlung verlinkte Quellcode relativ zum Repo-Wurzelverzeichnis statt zu docs/. - 12 Dateien ausserhalb von docs/ verwiesen in Kommentaren auf die Plaene (csproj, props, setup.json, sechs Quelldateien) - alle auf archiv/ umgebogen. - Verweise auf Dateien, die der Fruehjahrsputz geloescht hat (Ui/, Program.cs, WindowMenuBar), zu Klartext entschaerft statt tote Links zu lassen. - Gegenprobe: 85 Links geprueft, 0 kaputt. Build gruen, 476 Tests gruen. PROJEKTSTAND.md entdoppelt: Abschnitt "Offen" verweist jetzt auf die Roadmap. Arbeitsteilung ist damit klar - Projektstand sagt was IST, Roadmap was KOMMT. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
75 lines
3.9 KiB
C#
75 lines
3.9 KiB
C#
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
|
||
{
|
||
/// <summary>
|
||
/// 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/archiv/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.
|
||
/// </summary>
|
||
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<AccountingDbContext>(o => o.UseMySql(conn, DatabaseServerVersion.Value));
|
||
|
||
services.AddSingleton<ILedgerRepository, EfLedgerRepository>();
|
||
services.AddSingleton<IIngestRunRepository, EfIngestRunRepository>();
|
||
services.AddSingleton<IRawSnapshotRepository, EfRawSnapshotRepository>();
|
||
services.AddSingleton<IFxRateRepository, EfFxRateRepository>();
|
||
|
||
// A-2: neutrale Periodenabrechnung/BWA + Währungs-View (USDC/USD/EUR).
|
||
services.AddSingleton<Services.AccountingReportService>();
|
||
|
||
// 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<IActivitySource, NullActivitySource>();
|
||
services.AddSingleton<ITransferSource, NullTransferSource>();
|
||
services.AddSingleton<IBalanceAnchorSource, NullBalanceAnchorSource>();
|
||
services.AddSingleton(new AccountingSystemContracts());
|
||
|
||
services.AddSingleton<AccountingIngestService>();
|
||
services.AddHostedService(sp => sp.GetRequiredService<AccountingIngestService>());
|
||
}
|
||
|
||
/// <summary>
|
||
/// 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.
|
||
///
|
||
/// <para><b>Beim Nachbau zu erhalten</b> (Spezifikation: docs/UI-SPEZIFIKATION-WinForms.md,
|
||
/// Originalcode: Git-Tag <c>winforms-final</c>):</para>
|
||
/// <list type="bullet">
|
||
/// <item>View-ID <c>accounting.main</c> (stabil – Launcher-Button und Symbol haengen daran)</item>
|
||
/// <item>Titel <c>Accounting</c>, Gruppe <c>Accounting</c>, Order <c>400</c></item>
|
||
/// <item>Ein Fenster fuers ganze Modul: AccountingMainForm mit Tabs: Uebersicht+BWA / Ledger / Abruf+Status</item>
|
||
/// </list>
|
||
/// </summary>
|
||
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;
|
||
}
|
||
}
|