# KAR-960/P3 — Real-Korpus-Validierung (Hebel A + Hebel B)

Repo: `/home/aria/work/kadi-v2`, Branch `kar-960-field-levers`. Validiert:

- **Hebel A** — `manufacturingStepFieldCandidates` (`lib/qaf-differences/internal/capability/manufacturing-field-candidates.ts`): Prozess-Parameter (Zykluszeit, Teile/Zyklus, MA, Lohnkosten, SGK, MSS, Ausschuss) aus dem Fertigungskosten-Blatt, als `process:<step>`-skalierte FieldCandidate.
- **Hebel B** — `summaryFieldCandidates` (`lib/qaf-differences/internal/capability/summary-field-candidates.ts`): (1) Master-Sätze-Label-Scan (Lohnsatz/SG&A/Gewinn/Scrap) und (2) bereits geparste Summen (Material/Fertigung/Gesamt/Stückpreis/Scrap), beide als `global`-skalierte FieldCandidate.

Werkzeug: `tools/p3-hebel-validation.mjs` (lokal, NICHT committet — gleiche
Disziplin wie `p1-validate.mjs`/`p1-validate-ingest.mjs`). Ausgeführt via
`npx tsx ../qaf-corpus/tools/p3-hebel-validation.mjs` von `kadi-v2` aus.
Aggregierte Zahlen nur — keine Dateinamen, keine Zell-/Preiswerte, per
Vertraulichkeitsdisziplin.

## Stichprobe

Stratifiziert nach `matchedProfile` aus `batch-results.json`, proportional
zur realen Populationsverteilung (capability-matrix.md Familien-Population:
LEGACY 267 / V9 79 ≈ 3,4:1):

- 15× `QAF_LEGACY_DE_SUMMARY`
- 6× `QAF_V9_SUMMARY`
- **21 Dateien gesamt** (≥ 20 gefordert)

Plus separat: Kais' 2 BT-Dateien aus `incoming/` (Top-Level, nicht
`incoming/QAFs/`) — der Abnahmefall aus der Task-Instruktion.

## Ergebnis — stratifizierte Stichprobe (21 Dateien)

| Metrik | Ergebnis |
|---|---|
| Datei ladbar (ExcelJS) | 21/21 |
| **Hebel A** — mind. 1 Prozess-Parameter-Kandidat | **19/21 (90 %)** |
| **Hebel B — Summen** — mind. 1 `sum_*`-Kandidat | **21/21 (100 %)** |
| **Hebel B — Master-Sätze** — mind. 1 `cap_sum_master_*`-Kandidat | **0/21 (0 %)** |
| Hebel B irgendein Kandidat (Summen ODER Master-Satz) | 21/21 (100 %) |

## Ergebnis — Kais' 2 BT-Dateien (Abnahmefall)

| Metrik | Ergebnis |
|---|---|
| Datei ladbar | 2/2 |
| Hebel A — Prozess-Parameter | 2/2 |
| Hebel B — Summen | 2/2 |
| Hebel B — Master-Sätze | 0/2 |
| **Preis-Kalkulator würde jetzt mind. 1 Alt/Neu-Chip anbieten** | **2/2** |

## Einordnung

- **Hebel A bestätigt den Hebel-Business-Case:** 19/21 (90 %) der
  stratifizierten Stichprobe liefern jetzt Prozess-Parameter als
  `process:<step>`-skalierte Capability-Kandidaten — vorher zog die App
  diese Felder für Summary-Vergleiche gar nicht aus dem Fertigungskosten-
  Blatt in die Capability-/FieldCandidate-Struktur. Die 2 Ausreißer sind
  Dateien, bei denen `parseQAFTemplate` selbst degradiert (Header-Erkennung
  unterhalb `HEADER_MATCH_MIN`) — ein bereits vor KAR-960 bekanntes,
  dokumentiertes Parser-Limit (KAR-893/P1.2), kein Regressions-Risiko dieser
  PR.
- **Hebel B — Summen (E-Gruppe) bestätigt zu 100 %:** die bereits
  V11-verifizierte `summary-metrics.ts`-Extraktion wird jetzt vollständig in
  die FieldCandidate-Pipeline gespiegelt (KAR-959/P2s "0 Producer"-Lücke ist
  damit für diese Feldgruppe geschlossen).
- **Hebel B — Master-Sätze (B-Gruppe) liefert 0/21 real — ehrlicher,
  erwarteter Befund, kein Bug:** eine manuelle Stichprobenprüfung (3 Dateien,
  lokal, openpyxl, nur zur Verifikation — keine Werte hier zitiert) zeigt: das
  Zusammenfassungs-/Summary-Blatt selbst enthält in diesem Korpus-Format
  keine eigenständig beschrifteten Zeilen für Lohnsatz/SG&A-Satz/Gewinnsatz/
  Ausschusssatz als Master-Prämisse — nur die bereits von Hebel B/Summen
  abgedeckten Geld-Summen. Ein einziger unspezifischer Treffer ("O/H +
  Profit"-artiger Text) taucht als Spaltenkopf, nicht als eigene
  Label-Wert-Zeile auf — für den konservativen Label→Wert-Scan (Task-
  Instruktion: "nur eindeutige Label-Treffer, Mehrdeutigkeit → INCONSISTENT
  statt Raten") bewusst kein Treffer. Das deckt sich mit
  `capability-matrix.md`s eigenem, unabhängig gemessenem Befund ("B
  (SBM-Sätze) [sic, gemeint: Master-Sätze] ist der systematische
  Schwachpunkt", nur 14–22 % "VORHANDEN" bei einer breiteren
  Label-Ähnlichkeitsmessung als dieser exakte Scan). Beobachtet (nicht Teil
  dieser PR): mehrere Dateien führen ein separates
  "Prämissenblatt"/"Assumptions sheet" — ein plausibler Ort für einen
  zukünftigen, eigenen Hebel, aber außerhalb des in der Task-Instruktion
  benannten Scopes ("fürs Zusammenfassungs-Blatt").
- **Kais-Abnahmefall erfüllt:** beide BT-Dateien liefern jetzt
  Prozess-Parameter UND lösen den neuen Preis-Kalkulator-Chip-Pfad aus (2/2)
  — der konkrete, in der Task-Instruktion genannte Erfolgsmaßstab.
- **Reale Master-Satz-Werte NICHT ausgeschlossen, nur (noch) nicht per
  Label auffindbar:** Fällt eine Master-Sätze-Erweiterung künftig in Scope,
  ist das Prämissenblatt/Assumptions-Sheet der naheliegende nächste Schritt
  — mit eigener Sheet-Rolle statt einer Erweiterung dieses Scans (der bleibt
  bewusst auf das Zusammenfassungs-/Summary-Blatt begrenzt, wie
  spezifiziert).
