# SupplierPulse QAF Comparator

## Requirements Traceability Matrix v1.0

**Stand:** 03.08.2026

Diese Matrix verbindet die fachlichen Anforderungen, den dokumentierten Ist-Stand, die bestätigte Lücke, das Zielartefakt, den autonomen Loop und das Abnahmekriterium. Der Status ist vorläufig, bis das echte Repository ausgeführt wurde.

| ID | Domäne | Anforderung | Dokumentierter Ist-Stand | Bestätigte Lücke | Ziel | Priorität | Evidenz | Loop | Abnahme |
|---|---|---|---|---|---|---|---|---|---|
| DET-001 | Determinismus | Identische Inputs erzeugen identischen fachlichen Content Hash | Teilweise vorhanden | Repository-Lauf verifizieren | Kanonische Serialisierung mit versioniertem Manifest | P0 | export-canonical.ts | 0/9 | Zwei unabhängige Läufe haben denselben Hash |
| DET-002 | Determinismus | LLM rechnet keine Zahlen | Vorhandene Doktrin | Alle KI-Pfade prüfen | AI-ready nur mit fertigen Facts | P0 | ai-ready.ts | 14 | Mutation mit erfundener Zahl wird abgewiesen |
| DET-003 | Determinismus | Alle Rundungen sind versioniert | Teilweise | Zentrale Rundungspolitik prüfen | Rounding profile im Run Manifest | P0 | format-de.ts, differ.ts | 8 | Golden Werte reproduzierbar |
| DET-004 | Determinismus | Keine Zeitstempel im fachlichen Hash | Vorhanden | Schema angleichen | Volatile Felder explizit ausgeschlossen | P0 | export-canonical.ts | 8 | Hash bleibt bei anderem Run-Zeitpunkt gleich |
| PAR-001 | Parser | QAF 8.8 lesen | Vorhanden | Golden CI verifizieren | Vollständiger Adapter mit Provenienz | P0 | Parsermodule | 2 | HICE-Dateien vollständig geparst |
| PAR-002 | Parser | QAF 9.1 Standard lesen | Vorhandene Grundlagen | Echte Vorlage als Golden Fixture | Adapter mit Capability Coverage | P0 | capability, parser | 2 | Leervorlage und ausgefüllte Datei grün |
| PAR-003 | Parser | QAF 9.1 Zeilen lesen | Teilweise/generisch | Explizite Coverage prüfen | Familienadapter für CALCULATION-Struktur | P0 | sheet resolver | 2 | Semantische Bereiche vollständig erkannt |
| PAR-004 | Parser | Legacy XLS lesen | Vorhanden | Runtime verifizieren | BIFF Shim behalten | P1 | legacy-workbook-shim.ts | 0/2 | XLS-Fixture wird ohne Makroausführung gelesen |
| PAR-005 | Parser | Unbekannte Bereiche nicht verlieren | Teilweise | Unmapped inventory vervollständigen | Raw inventory im kanonischen Export | P0 | workbook-adapter.ts | 8 | Jeder belegte Bereich klassifiziert oder unmapped |
| PAR-006 | Parser | Formeln und gespeicherte Ergebnisse erhalten | Teilweise | Source Artifact nach Rehydrate fehlt | Original plus Parse Snapshot persistieren | P0 | resolveCell, rehydrate | 5 | Formel, raw value und cached value verfügbar |
| PAR-007 | Parser | Versteckte Blätter, Zeilen und Spalten inventarisieren | Teilweise | Export-Coverage prüfen | Workbook structure inventory | P1 | workbook summary | 5/8 | Strukturvergleich zeigt alle Zustände |
| SEC-001 | Security | ZIP-Bomb-Prüfung | Vorhanden | Tests ausführen | Behalten und adversarial testen | P0 | workbook-safety.ts | 0/2 | Grenzfälle sicher abgewiesen |
| SEC-002 | Security | Makros nicht ausführen | Vorhanden | End-to-End verifizieren | Makropräsenz als Befund | P0 | workbook-safety.ts | 0/2 | XLSM wird gelesen, Makro nie ausgeführt |
| SEC-003 | Security | Externe Links nicht automatisch laden | Vorhanden | End-to-End verifizieren | Links inventarisieren und blockieren | P0 | workbook-safety.ts | 0/2 | Keine Netzabfrage beim Parsing |
| MAP-001 | Mapping | Materialmapping deterministisch | Vorhanden | Globalisierung auf A-F | Globale Mappinggruppen | P0 | material-mapping.ts | 3/7 | Gleiche Gruppe über sechs Dokumente stabil |
| MAP-002 | Mapping | Fertigung nach Parametern und Kontext | Vorhanden | Globalisierung auf A-F | Globale Stationsgruppen | P0 | manufacturing-mapping.ts | 3/7 | Umbenennung korrekt, Parameteränderung sichtbar |
| MAP-003 | Mapping | Werkzeugmapping Reihenfolge korrekt | Vorhanden | Globale Gruppen und Tests | Tooling Mappinggruppen | P1 | tooling-analysis.ts | 3/7 | Basisposition nicht als Zweitwerkzeug vertauscht |
| MAP-004 | Mapping | Split und Merge darstellen | Vorhanden | Katalogintegration vollständig | n:m Relations im Contract | P0 | material mapping | 3/8 | Delta reconciled ohne Doppelzählung |
| MAP-005 | Mapping | Unklare Zuordnung nicht erzwingen | Vorhanden | UI Reviewflow vervollständigen | candidate plus review_required | P0 | matcher.ts | 3/10 | Ambiguität bleibt sichtbar |
| MAP-006 | Mapping | Manuelle Overrides auditierbar | Vorhanden | ComparisonSet erweitern | Versionierte Overrides mit Autor und Grund | P1 | field-mapping-override.ts | 7/8 | Override ändert Hash nur über Config Hash |
| DIF-001 | Differenzkatalog | Materialdifferenzen vollständig katalogisieren | Fehlt | Translator fehlt | differences-from-material | P0 | Stand-und-Plan | 3 | Jede Materialaussage hat Difference ID |
| DIF-002 | Differenzkatalog | Fertigungsdifferenzen vollständig katalogisieren | Fehlt | Translator fehlt | differences-from-manufacturing | P0 | Stand-und-Plan | 3 | Jede Fertigungsaussage hat Difference ID |
| DIF-003 | Differenzkatalog | Werkzeugdifferenzen katalogisieren | Vorhanden | Coverage prüfen | Vollständig im zentralen Katalog | P1 | differences-from-tooling.ts | 3 | Alle Tooling-Findings traceable |
| DIF-004 | Differenzkatalog | Stabile IDs | Vorhanden | A-F und neue Bereiche erweitern | Stable key algorithm versionieren | P0 | all-differences.ts | 3 | IDs bleiben bei Wiederholung gleich |
| DIF-005 | Differenzkatalog | scope_removed Status | Fehlt | Taxonomie ergänzen | Struktur- und Kostenstatus trennen | P0 | Stand-und-Plan | 3/4 | Entfernte Position eindeutig klassifiziert |
| FOR-001 | Formeln | Exakt, strukturell gleich und logisch geändert unterscheiden | Teilweise vorhanden | Coverage verifizieren | Normalisierte Formula Classification | P0 | formula-engine.ts | 2/3 | Zeilenverschiebung nicht als Logikänderung |
| FOR-002 | Formeln | Formel zu Hardcode erkennen | Vorhanden | D16/D17 abgleichen | Eigener Befund und Status | P0 | data quality | 4 | Positiv- und Negativtest grün |
| REC-001 | Reconciliation | Summary Preisaufbau schließen | Vorhanden | Alle QAF-Familien prüfen | Coverage je Dokument und Währung | P0 | reconciliation.ts | 2/8 | Additive Zeilen schließen innerhalb Toleranz |
| REC-002 | Reconciliation | Materialdetails gegen Summary | Teilweise | Unabhängigkeit kennzeichnen | Reconciliation provenance | P0 | reconciliation.ts | 2/8 | same_source ist nicht passed_independent |
| REC-003 | Reconciliation | Fertigung gegen Summary | Teilweise | Coverage erweitern | Dokumentweise Matrix | P0 | reconciliation.ts | 2/8 | Status und Toleranz explizit |
| REC-004 | Reconciliation | Tooling gegen Einmalzahlung | Vorhanden | WAF/SBM Varianten prüfen | Vollständige Reconciliation | P1 | tooling analysis | 2/8 | Keine Doppelzählung |
| DQ-015 | Datenqualität | Dateiname-Gate D15 | Fehlt | Implementieren | Deterministischer Befund | P1 | Stand-und-Plan | 4 | Regel mit Gegenprobe |
| DQ-016 | Datenqualität | Stammdatenabgleich D16 | Fehlt | Implementieren | Cross-document identity check | P0 | Stand-und-Plan | 4 | Konflikte blockieren falsche Paarung |
| DQ-017 | Datenqualität | Make-or-Buy D17 | Fehlt | Implementieren | Fertigungstiefenänderung als eigener Befund | P0 | Stand-und-Plan | 4 | HK-Sicht wird korrekt priorisiert |
| CLS-003 | Klassifikation | Vergleichstyp R-03 | Fehlt | Implementieren | evidence-based comparison classification | P0 | Stand-und-Plan | 4 | Jeder Vergleich hat Typ oder Reviewstatus |
| SRC-001 | Provenienz | Originaldatei nach Ingest verfügbar | Lücke | Source Artifact fehlt | Immutable object storage plus hash | P0 | Audit | 5 | Reparse jederzeit möglich |
| SRC-002 | Provenienz | Datei, Blatt, Zelle, Formel, Zustand | Teilweise | Rehydrate verliert Details | Durchgängige SourceRef | P0 | types, rehydrate | 5/8 | Evidence Panel zeigt vollständige Kette |
| JSN-001 | JSON | UI-unabhängiger kanonischer Export | Fehlt/teilweise | ViewModel-Export dominiert | Schema v1.0 implementieren | P0 | v2-export, export.ts | 8 | Schema-validierter Domain Export |
| JSN-002 | JSON | 24 Bereiche konsistent | Widerspruch 19 gegen 24 | Governance klären | Exakt 24 Zielbereiche | P0 | V2_AREAS | 8 | Code, Schema und Doku identisch |
| JSN-003 | JSON | Explizite Section States | Teilweise | Alle Bereiche angleichen | Kein stilles Weglassen | P0 | ai-ready, v2 export | 8 | Jeder Bereich hat state |
| JSN-004 | JSON | AI-ready Export | Vorhandene Grundlage | An Canonical Contract binden | Nur fertige Facts | P1 | ai-ready.ts | 14 | Keine Zahl ohne fact_ref |
| JSN-005 | JSON | Presentation Package | Teilweise | Einheitlichen Vertrag bauen | Slides aus Canonical JSON | P2 | presentation_package | 14 | Keine parallele Berechnung |
| MUL-001 | Multi-QAF | Ein bis sechs separate QAFs | Fehlt | Batch wählt Paar | ComparisonSet A-F | P0 | batch.ts | 7 | Sechs Dokumente werden gemeinsam geladen |
| MUL-002 | Multi-QAF | Globales Mapping | Fehlt | Nur Paar- und Containerlogiken | GlobalEntityGroup | P0 | target architecture | 7 | Paaransichten sind Projektionen |
| MUL-003 | Multi-QAF | Baseline frei wählbar | Teilweise | Auf ComparisonSet erweitern | A-F baseline selector | P1 | baseline.ts | 7/10 | Baselinewechsel ohne Reparse |
| MUL-004 | Multi-QAF | Zeitreihe | Fehlt | Implementieren | Chronologische Deltas | P1 | target architecture | 7/10 | Stand-zu-Stand und seit Baseline |
| MUL-005 | Multi-QAF | Matrix | Benchmark vorhanden | Auf Dokumente generalisieren | 6x6 metric matrix | P2 | supplier benchmark | 7/10 | Zelle öffnet Paar-Detail |
| CAP-001 | Capabilities | Module aus Daten ableiten | Vorhandene Grundlage | Harte Gates restlos migrieren | Capability registry als einzige UI-Gatequelle | P0 | capability modules | 1/9 | Keine leere irrelevante Sektion |
| UI-001 | UI | QAF-nahe Reiter | Teilweise | Aktuelle 14 Sektionen | Semantische QAF-Navigation | P0 | section registry | 9/10 | Nutzer erkennt QAF-Logik |
| UI-002 | UI | Maximal drei sichtbare Headeraktionen | Nicht erfüllt | Header überladen | Primary, Export, More | P1 | current UI | 10 | Desktop und mobile klar |
| UI-003 | UI | Progressive Offenlegung | Teilweise | Lange Seite | Overview, tabs, drawer, evidence | P0 | current UI | 10 | Rohdaten nicht primär offen |
| UI-004 | UI | Nur relevante Änderungen als Standard | Teilweise | Konsistent machen | Default Filter | P1 | tables | 10 | Unveränderte optional |
| UI-005 | UI | Mobile ohne Seiten-Horizontalscroll | Nicht erfüllt | Responsive Lücken | Responsive table/card patterns | P0 | mobile screenshots | 10 | 320px Viewport ohne Seitenoverflow |
| UI-006 | UI | Zoom bleibt aktiviert | Nicht erfüllt in Referenz | Viewport korrigieren | WCAG-konforme Meta | P0 | HTML review | 10 | Pinch Zoom möglich |
| UI-007 | UI | Evidence Sidepanel | Vorhandene Komponenten | Vollständige Provenienz fehlt | Einheitliches Panel | P1 | qaf-v2-evidence-panel | 5/10 | Alle Sources erreichbar |
| UI-008 | UI | Einfach erklärt | Referenzmuster | Standardisieren | Fact-grounded explanation | P2 | V5 reference | 14 | Keine unbelegte Zahl |
| BMW-001 | Design | BMW Teal und unterstützende Skala | Teilweise | Alte Farben prüfen | Token Contract | P1 | Design System | 11 | Visual regression passt |
| BMW-002 | Design | Sentence Case | Nicht konsistent | All-caps Titel entfernen | Design-System-Regel | P1 | Design System | 11 | Nur Eyebrow uppercase |
| BMW-003 | Design | Quadratische Ecken und Hairlines | Nicht konsistent | Komponenten angleichen | Web tokens | P2 | Design System | 11 | Keine Consumer-Tech Cards |
| BMW-004 | Design | Keine dekorativen Schatten/Verläufe | Teilweise | Audit und bereinigen | Minimal flat design | P2 | Design System | 11 | Token lint grün |
| ACC-001 | Accessibility | WCAG 2.2 AA | Unbestätigt | Audit erforderlich | A11y Gate | P0 | target | 10/11 | axe und manuelle Prüfung grün |
| ACC-002 | Accessibility | Tastatur vollständig | Unbestätigt | Implementieren/testen | Keyboard flows | P0 | target | 10 | Alle Funktionen erreichbar |
| ACC-003 | Accessibility | Farbe nicht allein | Teilweise | Charts und Badges prüfen | Labels, Icons, patterns | P0 | target | 11 | Color-blind test grün |
| EXP-001 | Export | Excel Export aus Canonical JSON | Vorhanden getrennt | Konsolidieren | Einheitliche Exportpipeline | P1 | xlsx export | 13 | Werte identisch zum Contract |
| EXP-002 | Export | PDF Export aus Canonical JSON | Vorhanden/teilweise | Pipeline prüfen | Print profile | P2 | current export | 13 | Parität und Pagination |
| EXP-003 | Export | JSON Export für weitere KI | Unvollständig | Canonical Contract fehlt | Voll und AI-ready | P0 | export modules | 8/14 | Schema validiert |
| EXP-004 | Export | PNG/Sektions-Export | Vorhanden | In Exportmenü konsolidieren | Kontextbezogen | P3 | current UI | 10/13 | Keine Buttonflut |
| VSM-001 | Wertstrom | Fertigungsschritte übergeben | Vorhandene Aktion | Contract definieren | Versionierter VSM Adapter | P2 | Adopt as value stream | 15 | Ausgewählte Quelle und Stand dokumentiert |
| AI-001 | KI | safeToSummarize Gate | Vorhanden | Alle Exportpfade anwenden | Blockierende Validation | P0 | ai-ready.ts | 14 | Unsicherer Lauf wird nicht zusammengefasst |
| AI-002 | KI | Jede Aussage referenziert Facts | Teilweise | Prompt und Contract erzwingen | fact_refs | P0 | ai-ready | 14 | Validator findet keine ungrounded claim |
| TST-001 | Tests | Anonymisierte reale Golden Fixtures | Teilweise lokal | In CI überführen | QAF 8.8, 9.1, Zeilen, G60, Multi | P0 | Stand-und-Plan | 2 | Keine env-gated Kernabnahme |
| TST-002 | Tests | Mutationsproben | Dokumentiert teilweise | Systematisieren | Mutation per Regel | P1 | roadmap | alle | Test schlägt bei absichtlichem Defekt fehl |
| TST-003 | Tests | Visuelle Regression | Unbekannt | Einführen | Desktop/tablet/mobile snapshots | P1 | target | 10/11 | Freigegebene Baselines |
| TST-004 | Tests | Determinismus in CI | Teilweise | Vollständige Contract Hashes | Repeat-run test | P0 | canonical export | 2/8 | N Wiederholungen identisch |
| PER-001 | Performance | Große Tabellen virtualisieren | Teilweise | Schwellen vereinheitlichen | 200+ rows virtualization | P1 | UI | 10 | Scroll und filter performant |
| PER-002 | Performance | Bis sechs QAFs messbar | Fehlt | Benchmark etablieren | Runtime/memory budgets | P1 | target | 0/7/16 | Budgets eingehalten |
| ARC-001 | Architektur | Strangler-V2 | Entschieden | Im Repository absichern | ADR und feature flags | P0 | Audit | 0/17 | V1 bleibt bis Parität |
| ARC-002 | Architektur | actions.ts zerlegen | Hotspot | 4.772 Zeilen | Use-case Services | P1 | module inventory | 1/12 | Keine God Action |
| ARC-003 | Architektur | UI-Monolithen zerlegen | Hotspot | 1.744/1.810 Zeilen | Feature modules | P1 | module inventory | 10/12 | Komponenten testbar und kleiner |
| ARC-004 | Architektur | Öffentliche API modularisieren | Großer Barrel | 1.437 Zeilen | Domain Entry Points plus kompatibler Root | P2 | index.ts | 12 | Keine Deep Imports |
| MIG-001 | Migration | V1-Paritätsmatrix | Fehlt/teilweise | Erstellen | Jede Funktion entschieden | P0 | current UI inventory | 17 | Keine stille Funktionsentfernung |
| MIG-002 | Migration | Feature Flags und Rollback | Unbekannt | Implementieren | Reversible Rollout | P0 | target | 17 | V1 sofort reaktivierbar |
| DOC-001 | Dokumentation | Loop-Berichte und ADRs | Teilweise | Repository integrieren | Living documentation | P1 | package | alle | Jeder Loop dokumentiert |

## Statuslegende

- P0: Voraussetzung für eine belastbare V2 oder für fachliche Sicherheit
- P1: hohe Priorität, vor breitem Rollout abzuschließen
- P2: wichtig, kann nach Kernparität folgen
- P3: Komfort oder Konsolidierung

## Pflegeprozess

1. Jede Codeänderung referenziert mindestens eine Requirement ID.
2. Jede Requirement ID erhält Tests und ein Abnahmeartefakt.
3. Ein Statuswechsel benötigt Evidenz, nicht nur eine Selbsteinschätzung.
4. Neue Anforderungen erhalten stabile IDs und werden nicht durch Umnummerieren bestehender IDs eingefügt.
5. Bei fachlichen Konflikten wird ein ADR verlinkt.
6. Vor Abschaltung der V1 müssen alle P0- und P1-Punkte abgeschlossen oder ausdrücklich genehmigt zurückgestellt sein.


## Stand der fixture-gestützten Anforderungen (Nachtrag 05.08.2026)

Die Matrix oben ist eine Baseline-Eingabe und bleibt unverändert. Dieser Nachtrag
hält den gemessenen Stand der Anforderungen fest, die von realen Fixtures
abhängen — damit die Baseline nicht stillschweigend umgeschrieben wird, der
Fortschritt aber auffindbar ist.

| ID | Anforderung | Stand |
|---|---|---|
| PAR-001 | QAF 8.8 lesen | Fixture `real_anonymized` vorhanden, Abnahme läuft in CI (109 Positionen, 16 Kennzahlen, 1699/1557 Formeln) |
| PAR-002 | QAF 9.1 Standard lesen | Fixtures für **EN und DE** vorhanden, beide `real_anonymized`, beide in CI als `QAF_V9_SUMMARY` erkannt |
| PAR-003 | QAF 9.1 Zeilen lesen | Fixture `real_anonymized` vorhanden, in CI erkannt |
| TST-001 | reale anonymisierte Golden Fixtures | **4 von 4 Familien im Scope**, keine Familie mehr ohne Quelle |
| TST-002 | Mutationsnachweis | Regressionssperre des Anonymisierers, 32 Tests in CI, jede Schutzmaßnahme einzeln mutationsgeprüft |
| TST-004 | Wiederholungsläufe | drei Erzeugungsläufe gleicher Fixture-Hash, drei Parserläufe gleicher kanonischer Hash — letzteres als CI-Test |

Belege: `docs/qaf-v2/golden-corpus.md`, `docs/qaf-v2/loop-2-abnahmestand.md`,
`tests/fixtures/qaf-golden/manifest.json`.

**Nicht abgedeckt und benannt:** die Cost-Allocation-Familie wartet auf die
Scope-Einordnung des Product Owners; G60 und Multi-QAF sind
`deferred_by_product_owner`.
