# Sprint 13 Hotfix – geschützte Inclusion-Lineage

Stand: 27.07.2026, read-only Analyse auf Produktionsschema 45 und Code `17ad9ad9eba002b74ef18664fa1a008d926bf5fd`.

| Datensatz/Quelle | Account-Rolle | Betrag CHF | Stichtag | Fachliche Bedeutung | Aktueller Bucket vor Hotfix | Bisher summiert in | Künftige Semantik |
|---|---|---:|---|---|---|---|---|
| `postfinance_snapshots.total_chf` / `account_value_snapshots` | E-Trading-Depot | 321’149.23 | 27.07.2026 09:14:30 | Reconciliation-/Account-Kontrolltotal | PostFinance | Performance/Reconciliation | Nicht additiv; nur Kontrolle/Performance |
| `postfinance_snapshots.securities_chf` | E-Trading-Depot | 293’465.16 | 27.07.2026 09:14:30 | Offizieller Wertschriftensubtotal | Aktien/ETFs | PostFinance-Sondersicht | Depotpositionen genau einmal; Quelle bis neuerem freigegebenem Marktpreis-Lauf |
| 22 `postfinance_snapshot_positions` | E-Trading-Depot | 293’465.15 Zeilensumme, 293’465.16 Kontrollsubtotal | 27.07.2026 09:14:30 | Einzelpositionen; 0.01 Rundung | Aktien/ETFs | Sondersicht und kanonische Projektion | Assetklassenweise deterministisch auf offizielle Subtotale reconciliert, keine Zusatzposition |
| 2 `postfinance_snapshot_cash` Originalbeträge + gerundete FX | E-Trading-Währungscash | 27’684.07 Kontrollsubtotal | 27.07.2026 09:14:30 | Tatsächliche EUR-/USD-Cashkomponenten | Cash | Sondersicht | Pro rata auf offiziellen Cashsubtotal reconciliert, genau einmal Cash |
| falsch als Cash projizierte Währungsexposure-Spalte | E-Trading-Währungscash | 71’623.09 + 249’526.14 = 321’149.23 | 27.07.2026 | Gesamtes Portfolio nach Währungsexposure, **kein Cash** | Cash | `cash_balances` → `_calculated_balance` → `/api/cash/summary` → Overview/KPI | Für bestehende immutable Zeilen read-model-seitig ausgeschlossen; Parser projiziert künftig den Cashsubtotal statt Exposure |
| instrumenttragende Trade-Settlement-Zeilen | E-Trading-Währungscash | vor Hotfix 16 abgeleitete Shadow-Holdings | historisch bis 2026 | Cash-Settlement/Ledger/Cost Basis, nicht Depotbestand | Aktien/ETFs über Ledgerableitung | `calculate_positions` → globale Aktien-/ETF-Sicht und Market Analytics | Für offizielle Instrumente aus Holdings ausgeschlossen; 22 offizielle Depotpositionen sind Mengenautorität |
| letzter Market-Analysis-Lauf | global | PostFinance-Zwischensumme 287’939.77 | 24.07.2026 | Marktpreisbewertung, älter als offizieller Snapshot | Aktien/ETFs | Equity API/Overview | Nur übernehmen, wenn Lauf neuer als der jeweilige offizielle Snapshot ist; Zeitpunkt sichtbar |
| E-Finance | E-Finance | 0.00 aktuell | aktuell | separates Cashkonto | Cash | Cash/Overview | tatsächlicher Saldo genau einmal; interne Transfers neutral |
| TrueWealth | separater Provider | 152’845.00 | aktuell | bestehendes Portfolio | TrueWealth | Overview | unverändert und separat |

## Belegte Einschleusungsstrecke

`_parse_overview()` erkannte die beiden Währungszeilen korrekt bezüglich Originalsaldo und gerundetem FX, verwendete aber `cols[5]` als `source_value_chf`. Diese Spalte ist die Währungsexposure des gesamten Portfolios. `confirm_postfinance_import()` schrieb sie immutable nach `postfinance_snapshot_cash` und `cash_balances.amount_chf`. Das E-Trading-Währungscashkonto besitzt `balance_mode=manual`, aber keinen aktuellen manuellen Snapshot; `cash_service._calculated_balance()` summierte daher die kanonischen `cash_balances`. Damit gelangten exakt CHF 321’149.23 in `/api/cash/summary` und alle davon abhängigen globalen KPI-/Overview-Pfade.

Parallel erzeugten instrumenttragende Kauf-/Settlement-Transaktionen auf der Cash-Rolle zusätzliche transaktionsabgeleitete Holdings. Die globale Equity-Ableitung berücksichtigte ausserdem einen Markt-Analysis-Lauf vom 24.07.2026 trotz des neueren offiziellen Snapshot-Zeitpunkts vom 27.07.2026. Beide Effekte erklärten die nicht reconcilierten 38 globalen Zeilen beziehungsweise die Zwischenbewertung.

`account_value_snapshots` war nicht die direkte Cash-Einschleusungsquelle. Sein identischer Wert ist fachlich korrekt als Account-Kontrolltotal und bleibt unverändert erhalten. In Produktion gab es für die drei Rollen keinen alten manuellen Cash-Snapshot, der CHF 321’149.23 enthielt; das entsprechende Fehlerbild wird dennoch synthetisch regressionsgetestet und read-model-seitig supersediert.
