# Bestands-Befunde /wertstrom — operative Anker (21.07.2026, origin/main 0f29d27)

> Kondensat der 3 Analyse-Agents für Folge-Sessions. Vollkontext: CAPABILITY-MATRIX.md.

## Architektur
- Kern: `value_stream_maps` (jsonb nodes/connections/layout, RLS vsm_own owner-basiert, KEIN Admin-Override — bewusst) + `value_stream_imports` (QAF-Audit, seit 18.07. in Prod, RPC create_value_stream_from_qaf SECURITY DEFINER, idempotent via previewToken)
- Kein Produkt-Master: Produktbezug = Freitext auf projects (product_name/product_line/vehicle_project); Lieferant transitiv projects.supplier_id→supplier_master_data
- `ValueStreamMap`-Typ ohne is_demo (Drift); layout-Spalte tot (nie gelesen/geschrieben)
- Kein Optimistic Locking (last-write-wins, 2 Tabs überschreiben sich)
- vsm.read/write-Permissions geseedet (oee-vsm-permissions-Migration), NIRGENDS enforced (nur getClaims)
- VSM außerhalb der Offline-Architektur (Dexie) — Kernszenario „Berater ohne Netz" nicht abgedeckt
- 3 parallele Prozessschritt-Modelle ohne FK: VsmNode / process_steps+cycle_measurements / qaf_manufacturing_step — Verbindung nur via Namens-Matching (findMeasuredMatch unterdrückt bei >1 Treffer)
- ADR-024 G9: bewusst keine Dokumentversionierung; ADR-019-Modul lib/qaf-value-stream (3042 Z., Barrel-only-Zugriff, MAPPING_VERSION qvs-1)

## UI (vsm-editor.tsx, 1238 Z., tdd-guard:skip)
- Handgebautes Canvas: absolute divs + ein SVG, Welt 8000×4000, Bezier buildPath (vsm-geometry), NODE_W 160
- 7 NodeTypes (vsm-config), Anlage NUR per Palette-Drag, Name initial = Typ-Label
- 1 Kantentyp (VsmConnection: label/transportTimeSec/batchSize — letztere 2 ohne UI); 2-Klick-Port-Geste; Excel-Import baut KEINE Kanten (applyExcelImport ~482-501), LSC (~342-346) + QAF-Mapper (mapper.ts ~343-346) bauen linear
- Kein Undo/Redo/Multi-Select/Copy-Paste/Touch/A11y (0 aria-Attribute)/Fit-View („Zurücksetzen" hart pan{300,150} zoom1 ~604); Snap 20px nur beim Palette-Drop
- Autosave 30s-Debounce (~412-430) + manueller Save (~395-410) → PUT ohne Guard
- Properties-Panel flach 8+ Felder; NUR name/cycleTimeSec/numWorkers/machineType/vaClass editierbar — 9/14 EDITABLE_FIELD_KEYS ohne Input (partsPerCycle, location, currency, scrapRate, scrapCostPerUnit, machineHourRate, laborHourRate, setupCostPerUnit, costPerUnit)
- Zwei VA-UIs parallel (Checkbox alt vs. 4-Wege-Select bei QAF-Nodes); Kundentakt nur read-only aus projects, im Editor keine Eingabe
- i18n: hartkodiert Deutsch (nur Sidebar-Nav übersetzt); CT/VA/NVA-Kürzel unerklärt an prominentester Stelle
- Farben: 6/7 Node-Hexes außerhalb Palette (vsm-config ~10-18), rohe Hexes im Editor (~504/505/632/635/649/654/668), check-hardcoded-colors.mjs prüft style={{}} NICHT; Editor nutzt shared Button nirgends; Toast vs. Inline-Status inkonsistent

## Berechnungen (vsm-metrics.ts, R-05-Refactor, MetricExplain-Ethos)
- findBottleneckId = Max-CT-Heuristik (~5-13); computeTimeline = flache VA/NVA-Summe (~22-31), kein Graph/Pfad (Gap G6); hasCtWarning inline JSX (~682)
- QVS-P4-Metriken (vaClass-Breakdown, Zeit-Summen, Kosten-Rollups je Währung BW/AW getrennt, CapacityContext) berechnet+getestet aber NICHT im Editor angezeigt (nur Copilot-Export; TODO.md:29)
- FEHLT: Takt-Berechnung, Auslastung (capacityPerHour totes Feld), Reichweite (quantity+demand unverrechnet), PCE benannt, OEE-Formel (lib/oee/engine.ts calculateOee existiert, 0 Aufrufe aus Wertstrom!), Scrap-Raten-Aggregat, Rework quantifiziert
- Validierung: KEIN Zod an API (as-Casts, POST ~26-53, PUT ~19-44), keine Plausibilität (Negativ/100%+/verwaiste Kanten), Excel-Import macht fehlend→0 (fabriziert; Kontrast QAF-Mapper „never 0-stuffed")

## Integrationen
- QVS live (qafValueStream true in default+bmw seit PR #341; Kopfkommentar qaf-actions.ts:14-16 VERALTET „false in all 3") — Entry-Points NUR in qaf-differences + project/qaf, nicht auf /wertstrom
- LSC/Stoppuhr: 4 Pfade (Picker-Modal 1:1, LSC-Import mit Ø aus cycle_measurements is_outlier-gefiltert, Inline-Timer OHNE Persistenz, Soll/Ist-Anzeige); keine Verbindung zu lsc_measures/lsc_shifts/Workshop-Analysen (Pareto/Histogramm/before-after)
- Fabrikanalyse + Maßnahmen (workshop_actions, lsc_measures): 0 Verknüpfung, kein „Maßnahme aus Engpass"
- Exporte: NUR DOCX/MD (Copilot, wortgleiche Duplikate wertstrom-docx/md ~170 Z.; Flag copilotExports NUR bmw-Profil true); kein SVG/PNG/PDF/XLSX; export-service (PDF/PPTX Branding) nicht angebunden
- Szenarien: nichts (kein Duplizieren, kein Ist/Soll-Feld); nächstes Konzept = QVS-Reimport-Vergleichs-VSM bzw. lsc before-after (stationsbezogen, unverbunden)

## Tests
- 31 wertstrom-nahe Dateien / ~425 Fälle (Mapper/Preview/Sync/Metriken/Export-Roundtrip stark); vsm-editor.test nur 3 Fälle; vsm-geometry/-excel/-config OHNE Tests trotz „für Testbarkeit extrahiert"; API-Routen 0 Tests; kein /wertstrom-E2E (nur golden-path + multi-qaf Playwright); vitest-Coverage-Whitelist enthält Wertstrom NICHT; 2 RLS-Tests DB-gated außerhalb npm test
- Repo gesamt: 339 Testdateien / ~4284 its; TESTING.md-Zahl (60) veraltet

## Programm-Struktur
P0 Fundament (läuft, Branch wertstrom/p0-foundation) → P1 Engine v2 → P2 Datenmodell+Migration (Kais applied!) → P3 Quick-Start/Auto-Layout/Timeline → P4 Panel+Tabelle → P5 Szenarien-UI → P6 SimVSM-Import → P7 Analyse/Präsentation/Exporte → P8 Integration/Polish. Loop je PR: Agent → adversarialer Review → Fix → CI → Merge → Deploy-Verify.
