# QAF-Korpus Feld-Capability-Matrix (SupplierPulse)

Generiert: siehe `capability-results.json` (meta.generatedAt). Methode: Header-/Label-Scan
(Zeilen 1–80, Spalten 1–40 je Blatt, ExcelJS) auf einer stratifizierten Stichprobe von
80/374 Dateien (alle 16 Nicht-Standard-Dateien + 64 stratifizierte `standard_summary`
über Sheet-Zahl × matchedProfile-Cluster). Keine Zellwerte/Preise erfasst — nur
Blattnamen, Feld-Label-Texte (Header) und Trefferquote pro Feld-Gruppe.

Status je Feld-Gruppe/Datei: **VORHANDEN** (≥60% der Sub-Felder per Label gefunden),
**TEILWEISE** (>0%, <60%), **FEHLT** (0%).

## Familien-Population (Vollkorpus n=374, aus batch-results.json)

| Familie | Dateien | Anteil |
|---|---|---|
| QAF_LEGACY_DE_SUMMARY | 267 | 71% |
| QAF_V9_SUMMARY | 79 | 21% |
| UNMATCHED_STANDARD (kein Profil-Match) | 12 | 3% |
| MULTI_qaf_8_1_custom_multi | 7 | 2% |
| G60_DETAIL | 2 | <1% |
| AMBIGUOUS_unknown_multi_qaf | 2 | <1% |
| MULTI_m_qaf_1_0 | 2 | <1% |
| LEGACY_XLS_UNSUPPORTED (.xls, nicht ladbar) | 2 | <1% |
| MULTI_m_qaf_2_0 | 1 | <1% |

## Capability-Matrix: Familie × Feld-Gruppe (% VORHANDEN / % irgendein Treffer)

A = Prozess-Parameter · B = Master-Sätze · C = Material · D = Fertigungskosten-Zeilen ·
E = Summen/Kennzahlen · F = Meta

| Familie | Pop. | Sample | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|
| QAF_LEGACY_DE_SUMMARY | 267 | 41/41 | 95% / 95% | 22% / 100% | 95% / 100% | 95% / 100% | 0% / 78% | 100% / 100% |
| QAF_V9_SUMMARY | 79 | 12/12 | 100% / 100% | 17% / 100% | 25% / 100% | 100% / 100% | 0% / 58% | 100% / 100% |
| MULTI_qaf_8_1_custom_multi | 7 | 7/7 | 100% / 100% | 14% / 100% | 71% / 100% | 100% / 100% | 14% / 100% | 100% / 100% |
| MULTI_m_qaf_1_0 | 2 | 2/2 | 100% / 100% | 0% / 100% | 50% / 100% | 100% / 100% | 0% / 100% | 100% / 100% |
| MULTI_m_qaf_2_0 | 1 | 1/1 | 100% / 100% | 0% / 100% | 0% / 100% | 100% / 100% | 0% / 100% | 100% / 100% |
| G60_DETAIL | 2 | 2/2 | 0% / 50% | 50% / 100% | 0% / 100% | 0% / 100% | 0% / 100% | 100% / 100% |
| AMBIGUOUS_unknown_multi_qaf | 2 | 2/2 | 100% / 100% | 100% / 100% | 0% / 100% | 0% / 100% | 0% / 100% | 100% / 100% |
| UNMATCHED_STANDARD | 12 | 11/11 | 0% / 55% | 0% / 55% | 9% / 64% | 0% / 45% | 0% / 9% | 55% / 91% |
| LEGACY_XLS_UNSUPPORTED | 2 | 0/2 | — nicht ladbar (altes Binär-.xls, kein ZIP/OOXML) — |

Wo (typisches Blatt): A/D → **„Fertigungskosten“** (LEGACY) bzw. **„Manufactering/MANUFACTURING
COSTS“** (V9); B/E → **„Zusammenfassung“** (LEGACY) bzw. **„Summary“** (V9), teils
**„Dokumentenlenkung“**/**„Lohnsatz“**-Tab; C → gemischt in Fertigungskosten- oder
Summary-Blatt, bei G70/I20 in **„Prämissenblatt“**; F → immer **„Zusammenfassung“**/
**„Summary“**/**„Übersicht“**.

Sanity-Check gegen die bereits im Batch-Lauf vorhandene `facetCoverage` (Vollkorpus,
n=328–356, aus dem Template-Fingerprint-Modul, unabhängige Methode): summary Ø 0.95,
manufacturing Ø 0.98, material Ø 0.90, **sbm Ø 0.62**, **rmr Ø 0.00** — bestätigt
unabhängig densel­ben Befund: A/C/D/F sind breit abgedeckt, B (SBM-Sätze) ist der
systematische Schwachpunkt, RMR (Rohmaterial-Risiko) existiert im Korpus praktisch nicht.

## Die 3 größten Hebel

**1. Prozess-Parameter (A) aus Fertigungskosten-Blatt statt nur G60-INPUT — ~346 Dateien**
Zykluszeit/Teile-pro-Zyklus/MA/MSS/Ineffizienz-Label sind in 95–100% der Stichprobe
(LEGACY 267 + V9 79 Dateien) bereits im „Fertigungskosten“/„Manufacturing costs“-Blatt
vorhanden — heute zieht die App diese Felder aber nur aus G60-INPUT. Ein Sheet-Locator
für dieses eine, bereits sicher identifizierte Blatt hebt A für den Großteil des
gesamten Korpus, ohne neue Template-Erkennung.

**2. Master-Sätze + Summen (B+E) im „Zusammenfassung“/„Summary“-Blatt — ~346 Dateien**
Blatt zu 100% korrekt lokalisiert (F ist überall VORHANDEN), aber B nur 14–22%, E nur
0% strikt per Label — der Rest ist TEILWEISE (Label vorhanden, aber uneinheitlich:
„Herstellkosten“ statt „Fertigungskosten gesamt“, Werte ohne Extra-Label neben
Positions-Zeile etc.). Das ist derselbe Parser-Fix wie #1: EIN Zusammenfassung/Summary-
Row-Pattern-Parser (positionsbasiert statt reiner Keyword-Suche) hebt B und E gemeinsam
für praktisch den ganzen Korpus. Größter Hebel insgesamt, weil er zwei Feld-Gruppen auf
einmal löst.

**3. Neue Familie „BMW G70/I20 Umlageschema-Kalkulation“ — 4 Dateien, strategisch**
2× G70 (25 Blätter) + 2× I20 (10 Blätter), komplett anderes Muster (Kalkulation +
viele „Umlageschema-SEKOF …“-Verteilungsblätter statt Fertigungskosten/Zusammenfassung).
`matchedProfile: null` — heute 0 Felder extrahiert. Labels für A–D fragmentarisch
vorhanden (Kalkulation: cycle_time/headcount; Lohnsatz-Tab: labour_rate/scrap; Prämissen­
blatt: currency/manufacturing_cost), F zu 100%. E fehlt komplett (kein „Summen“-Blatt
erkennbar — Struktur wahrscheinlich formelbasiert über die Umlage-Blätter statt
Einzelblatt). Datei-Anzahl klein (4/374), aber es sind laufende BMW-G70/I20-Programme —
dedizierter Parser lohnt sich trotz kleiner Menge.

## Überraschungen

- **8 der 12 „unmatched standard“-Dateien sind gar keine QAF-Quote-Formulare**, sondern
  abgeleitete Analyse-Workbooks (Preismatrix, Checkliste, Kaufteile-Analyse, Headwinds/
  Historie-Tracker). Korpus-Rauschen, kein Parser-Gap.
- **C (Material) und D (Fertigungskosten-Zeilen) sind in den beiden großen Familien
  bereits fast vollständig abgedeckt** (95–100%) — entgegen der Erwartung ist hier kaum
  Hebel, der Engpass liegt fast ausschließlich bei B/E (Summary-Blatt-Parsing).
- **RMR-Facette ist im gesamten Korpus praktisch bei 0%** (unabhängig bestätigt) —
  kein Einzelfall, sondern strukturell: Rohmaterial-Risiko wird in diesem Kunden-QAF-
  Format schlicht nicht erfasst.
- Die 2 `.xls`-Dateien sind binäres altes Excel-Format (kein ZIP), ExcelJS kann sie
  gar nicht öffnen — ohne Zusatz-Library (z. B. `xlrd`-Äquivalent) bleiben sie bei 0
  Feldern, aber es sind nur 2 von 374.

## Quellen

- Rohdaten: `capability-results.json` (Feld-Level-Evidence: Blatt/Zeile/Spalte/Label-
  Text, keine Preise/Zellwerte)
- Stichprobenliste & Aggregation: siehe `meta.familyPopulation` und `meta.sampleFailedFiles`
  in `capability-results.json`
- Klassifikation/Familie je Datei: `batch-results.json` (Batch-Lauf, KAR-878-Kontext)
