Golden-Record
Die Datenbank wird vor jedem automatischen Lauf auf einen definierten Stand zurückgesetzt.
Wie das QS-Gate jede neue realERP-Version prüft, bewertet und zur Freigabe bringt – und wie Sie jede Ansicht des Cockpits bedienen. Für Berater, Freigeber, Entwickler und Fachbereich.
Was das QS-Gate tut, wie ein Lauf abläuft und wie bewertet wird
Das QS-Gate spielt nach jeder Änderung die komplette realERP-Anwendung durch – Schnittstellen, Oberfläche, Datenbank und Geschäftsprozesse –, vergleicht jedes Ergebnis mit dem zuletzt freigegebenen Stand und entscheidet nachvollziehbar über die Freigabe.
Es besteht aus zwei Teilen: dem Prüfstand, der den automatischen Prüflauf ausführt, und dem Cockpit, in dem Sie die Ergebnisse auswerten, Abweichungen freigeben und Prozesse im Prozess-Studio abspielen oder aufnehmen.
API, Oberfläche und Prüfstand laufen getrennt vom Produktivsystem.
Die Datenbank wird vor jedem automatischen Lauf auf einen definierten Stand zurückgesetzt.
Das Datum steht fest (21.10.2026) – Ergebnisse sind reproduzierbar.
Nur echte Änderungen fallen auf; Rauschen (neue IDs, Zeitstempel) wird normalisiert.
Läufe, Freigaben und Referenzwechsel sind über eine SHA-256-Kette gesichert.
| Begriff | Bedeutung | Wo im Cockpit |
|---|---|---|
| Abweichung | Unterschied einer Beobachtung zur Referenz – kann gewollt sein (neue Funktion) oder ungewollt (Seiteneffekt). Wird freigegeben oder abgelehnt. | Abweichungen |
| Befund | Im Lauf fehlgeschlagene Prüfung: Fehler, verletzte fachliche Erwartung oder verletzte Regel – unabhängig von der Referenz. | Befunde, Ursachen |
Teil A erklärt Ablauf, Schnelllauf, Bewertung und Freigabe. Teil B beschreibt jeden Menüpunkt des Cockpits in der Reihenfolge der Navigation – mit Zweck, Bildschirmfoto, Bedienung und Tipps. Teil C enthält Arbeitsanleitungen (Prüfauftrag und Pakete, Prozess-Studio, Prüfbericht), Teil D die Prüfinhalte (Fachprüfung Rechnungswesen, Sonderfälle und Ketten, Prozesskatalog, neue Prüfdimensionen, Prozessvarianten 9v, SAP-Abgleich, Variantenläufe mit Reihenfolge und Zeitmodus), Teil E Schnittstelle, Betrieb und Rollen, Teil F FAQ, Glossar und Änderungsprotokoll.
Zahlenbeispiele und Bildschirmfotos stammen aus der laufenden QS-Gate-Instanz, Lauf vom 29.10.2026 (Version cefd1ba); Bilder des Prozess-Studios aus einem lokal gestarteten Cockpit mit Testdaten. Die Bilder der Ausgabe 2 (Cockpit, Pakete, Zuständigkeit, Vergleich, Prozesse, Schnelllauf, KI-Zweitprüfung) zeigen ein lokal gestartetes Cockpit mit den Daten des Laufs cefd1ba; laufender Lauf, Schnelllauf und KI-Verbrauch sind dort nachgestellt. Ihre aktuellen Werte sehen Sie immer im Cockpit.
In fünf Minuten vom Login zur Antwort auf die Frage „Darf diese Version zum Kunden?“.
/anmelden) mit Kurzüberblick über Leistung, Funktionen und Ablauf.Erscheint auch, wenn das Namensfeld leer ist. Das Handbuch selbst ist ohne Anmeldung unter /handbuch erreichbar.
| Bereich | Inhalt und Bedienung |
|---|---|
| Navigation links | Drei Gruppen: oben Cockpit, Läufe, Prozess-Studio; „Ausgewählter Lauf“ mit allen Reitern eines Laufs (Zahlen = offene Abweichungen bzw. Befunde des letzten Laufs); „Über Läufe“ mit Verlauf, Stabilität, Leistung, Vergleich, Protokollkette und Einstellungen. |
| Fußzeile der Navigation | Status der Protokollkette („Protokollkette intakt“ bzw. „Kette verletzt“), angemeldeter Name, Links zu Handbuch, Klassische Ansicht (/klassisch) und Abmelden. |
| Kopfzeile | Seitentitel, Lauf-Auswahl (Datum · Version · Urteil – wechselt den „ausgewählten Lauf“), Live-Hinweis „Lauf läuft · Phase …“ (bzw. „Schnelllauf läuft …“) und – wenn während des Laufs ein neuer Stand eingetroffen ist – „wartet: <commit>“, Suche/Befehlspalette, Hell-/Dunkel-Umschalter, Schaltflächen Lauf starten und Schnelllauf (beide gesperrt, solange ein Lauf läuft) und Handbuch (springt zum Kapitel der aktuellen Seite). Auf schmalen Bildschirmen bricht die Kopfzeile in zwei Zeilen um, statt Knöpfe abzuschneiden. |
| Schublade (rechts) | Detailansichten öffnen sich als Seitenleiste von rechts – z. B. eine Abweichung, ein Befund, eine Maske. Schließen mit „Schließen“, Klick daneben oder Esc. |
Mit ? zeigt das Cockpit diese Übersicht jederzeit an.
| Taste | Wirkung |
|---|---|
| Strg/⌘ + K oder / | Befehlspalette: Seiten, Bereiche, Szenarien, Tabellen und Volltextsuche in allen Beobachtungen |
| g dann c / a / b / e | Cockpit / Abweichungen / Befunde / Endpunkte des gewählten Laufs |
| g dann s / l / v | Stabilität / Leistung / Befund-Verlauf |
| j / k | nächste / vorige Zeile in Abweichungen und Befunden |
| Enter | markierte Zeile öffnen |
| x | markierte Zeile auswählen (Sammelfreigabe / Sammelbearbeitung) |
| Esc | Seitenleiste oder Palette schließen |
| Leertaste | im Prozess-Studio beim Abspielen: nächsten Schritt ausführen |
Die Palette (Strg+K oder Lupe in der Kopfzeile) findet Seiten, Bereiche, Szenarien und Tabellen des gewählten Laufs. Ab zwei Zeichen bietet sie zusätzlich „„…“ in allen Beobachtungen suchen“ an – das öffnet den Reiter Suche. Navigation mit ↑ ↓, öffnen mit Enter.
Automatisch, reproduzierbar, nachvollziehbar: Jede neue Version startet auf demselben Datenstand mit eingefrorener Uhr – nur echte Änderungen fallen auf.
Manueller Merge main → qsgate.
API startet neu: Golden-Record, Deltas, Ergänzungen, Uhr 21.10.2026; danach Golden-Konsistenz.
Bis zu 26 Phasen, vollautomatisch.
Jede Beobachtung gegen die Referenz.
GO/NO-GO, Vier-Augen, neue Referenz.
POST /api/v2/start mit reihenfolge, zeit, dbZeitzone) – nur Statusvergleich, nicht freigaberelevant, nicht referenzfähig. Siehe Variantenläufe.QSGATE_UEBERHOLT_FRIST_S (900 s) hart beendet.QSGATE_DEPLOY_MODUS=fenster, Auto-Deploy der API aus, Deploy-Hook als QSGATE_RESET_HOOK, GITHUB_TOKEN): Der Prüfstand beobachtet den Zweig (QSGATE_BRANCH, Vorgabe qsgate) und deployt neue Commits erst nach dem laufenden Lauf – kein Lauf wird mehr überholt.qsgate/pruefstand/** neu.Der Lauf vom 29.10.2026 dauerte 4 h 08 min, davon rund 2,5 h für die Szenarien. Hauptbremse ist das Anfragelimit der API. Im QS-Testsystem sind die Limits inzwischen angehoben (API 5.000 Anfragen/min, Anmeldung 500 je 15 min; Prüfstand QSGATE_MAX_RPM=4500, QSGATE_MAX_AUTH_15MIN=450), und die Szenario-Phase läuft parallel – ein voller Lauf dauert damit voraussichtlich rund 2 statt 4 Stunden. Verlässlich ist die Restzeit-Schätzung im Live-Block des Cockpits (aus den Phasendauern des letzten Laufs).
Jede Phase liefert Beobachtungen, die normalisiert und mit der Referenz verglichen werden; fehlschlagende Prüfungen sind Befunde. Zahlen: Lauf vom 29.10.2026 (Prüfungen · Befunde); die mit neu markierten Phasen kamen danach hinzu, die mit v46 markierten mit dem Stand v46 (31.10.2026).
| Phase | Was geprüft wird | Typische Befunde | Beispiel | Dauer |
|---|---|---|---|---|
| Datenbank vorher | Zeilenstand aller Tabellen vor dem Lauf | Start nicht auf frischem Golden-Record | 295.207 Zeilen | 15 s |
| Golden-Konsistenz v46 | alle Konsistenzregeln auf dem frisch zurückgesetzten Golden-Record, bevor irgendeine Phase schreibt; dazu der Golden-Stand (Ledger, Ergänzungen, Dump) | Datenfehler im Golden-Record (Muss-Kriterium „Golden-Record konsistent“) | 65 Regeln | 2–4 s |
| Katalog | Operationen (OpenAPI), MCP-Tools, Rollen, Modul-Schalter, Navigation | entfallene Endpunkte/Tools (kritisch) | 8.602 · 0 | 2 s |
| Schema | Spalten, Typen, NOT NULL je Tabelle | Schemaänderung ohne Installer/Delta | 2.438 | 0 s |
| Schema-Abgleich Code | SQL-Texte im Backend gegen das Schema | Tabelle/Spalte im Code fehlt in der DB | 106 bekannt · 0 neu | 1 s |
| Lesende Endpunkte | jeder lesende Endpunkt mit echten IDs | HTTP 500, geänderte Antwort | 2.381 · 1 | 4,6 min |
| MCP-Lesetools | lesende KI-/MCP-Werkzeuge | Tool-Fehler, geänderte Ausgabe | 346 von 641 | 1,2 min |
| Oberfläche | jede Maske: Text, Konsolen-/Serverfehler, Bildvergleich | Konsolenfehler, Serverfehler in Masken | 863 · 23 | 9,9 min |
| Barrierefreiheit neu | 30 Kernmasken mit axe-core (WCAG 2.1 AA) und in der Mobilansicht 390 px | kritischer Verstoß, waagrechtes Scrollen, abgeschnittene Knöpfe | — | ≈ 6–8 min |
| Klickpfade | Knöpfe der Masken, Leer-Speichern, Kernprozesse per Klick | Formular speichert ohne Prüfung, Absturz | in Oberfläche | 25,4 min |
| Prüfketten | 219 In-App-Prüfketten (FI/CO/SD/MM/WM/PP/HR/CRM) | Kettenschritt rot | 1.039 · 10 | 34 s |
| Szenarien | 1.120 Geschäftsprozesse über die API bis zum Endzustand – parallel nach Plan (siehe unten) | Fehler, fachliche Erwartung verletzt | 42.776 · 139 | 2,5 h |
| KI-Zweitprüfung neu | Stichprobe der Fachprüf-Belege durch eine KI (HGB/UStG/SKR) – nur Hinweise, nicht freigaberelevant; ohne Schlüssel übersprungen | „KI-Hinweis“ (nie ein Befund) | — | — |
| SAP-Abgleich v46 | Customizing des SAP-ECC-Testsystems gegen realERP, optional gebuchte Vergleichsfälle – nicht freigaberelevant; ohne SAPREF_* übersprungen | Hinweise „fehlt in realERP“, „abweichung“ (nie ein Befund) | — | — |
| Dialogfunktionen | erreicht jede Masken-Aktion ein Backend? | toter Knopf (Route fehlt) | 16 · 0 | 1 s |
| Rechte und Mandanten | Rechte-Matrix: Rollen × schreibende Routen, fremder Mandant; begründete Ausnahmen in config/rechte-ausnahmen.json | Schreiben ohne Recht, fremde Daten | 7.446 · 18 | 33,7 min |
| Fehleingaben | leere Eingaben, falsche Datentypen; neu: Datentyp-Fuzzing je Feld mit Seiteneffekt-Prüfung (siehe unten) | HTTP 5xx, Ungültiges angenommen | 3.984 · 46 | 10,3 min |
| Sicherheit neu | Mandanten-/Buchungskreistrennung (auch schreibend), Eingabe-Angriffe, Anmeldung/Token | Durchgriff auf fremde Daten, Injection, Aktion ohne Anmeldung | — | — |
| Nebenläufigkeit | 2–10 gleichzeitige Anfragen auf denselben Beleg | Doppelbuchung, Überzahlung, doppelte Nummer | 21 · 1 | 8,3 min |
| Last neu | 8 virtuelle Benutzer verschiedener Rollen gleichzeitig auf Lese- und Schreibpfaden | Serverfehler unter Last, doppelte Nummer, p95 zu hoch | — | ≈ 1 min |
| Code-Abdeckung | ausgeführte Backend-Funktionen und Verzweigungen | Abdeckung gesunken | 82,8 % | 1 s |
| App-Log v46 | Warnungen und Fehler im Log der App während des Laufs, je Meldungstyp | neuer Meldungstyp („stiller Rückfall“), z. B. Bestand nicht fortgeschrieben | — | < 1 s |
| Datenbank nachher | Zeilenstand nach dem Lauf | — | — | 7 s |
| Datenbank-Delta | jede Tabelle: hinzugefügt / geändert / entfernt | Änderung, wo niemand hinschaut | 1.270 Tabellen | 39 s |
| Kennzahlen | Summen-/Saldenliste, Soll = Haben, OP, Steuern, Bestand | Kennzahl unstimmig (kritisch) | 6 · 0 | 1 s |
| Konsistenz | fachliche Invarianten per SQL über die ganze DB; schnelle Regeln zusätzlich nach jeder Szenario-Datei (Verursacher) | Mengen, Salden, Status, Siegel verletzt | 65 Regeln · 25 | 1 s |
| Isolationsprüfung v46 | optional (QSGATE_ISOLATION): Reset, dann rote Szenarien einzeln | „reihenfolgeabhängig“ | — | Reset + n Szenarien |
Der MCP-Schlüssel des Prüfstands wird mit einem Aufruflimit von 1000 je Minute angelegt (Standard für Kundenschlüssel: 100); bei Überschreitung antwortet die App mit 429 und Retry-After. Alle Klickpfade laufen in einer gemeinsamen Browsersitzung. Prüfketten mit Status „warn“ zählen als Befund – die Go/No-Go- und Guard-Übersichten ermitteln ihren Status aus einer Probe je Guard (Verstoß und gültiger Fall) – ein unwirksamer Guard erscheint als „❌ Fehler“.
Ohne eigene Zeitmessung laufen zusätzlich der Pflichtfeld-Abgleich Oberfläche ↔ Backend (Ebene Oberfläche) und die Abfrage des Absturzschutzes (Ebene Fehleingaben). Die neuen Phasen beschreibt das Kapitel Neue Prüfdimensionen; jede lässt sich per Umgebungsvariable abschalten (z. B. QSGATE_LAST=off).
konsistenz:<regel>:vor-szenarien (Golden-Record) – im Unterschied zu …:nach:<datei> (von einer Szenario-Datei verursacht). Zusammenfassung im Lauf unter goldenKonsistenz; Muss-Kriterium „Golden-Record konsistent“ (siehe Bewertung). Abschalten: QSGATE_GOLDEN_KONSISTENZ=off.db_migrations), den Ergänzungsdateien (sha256 aus den Backend-Quellen) und dem Manifest des Dumps, im Lauf unter goldenStand. Er macht das Kriterium „Start auf frischem Golden-Record“ versionsbewusst: ein neuer Golden-Stand ist kein „ohne Reset“.GET /__qs-aufnahme/log?since=<seq> des QS-Gates (Ringpuffer in qsgate/aufnahme.mjs: stderr vollständig, stdout nur Warn- und Fehlerzeilen; Größe über QSGATE_LOG_PUFFER am QS-API-Dienst, Vorgabe 20.000 Zeilen) oder lokal die Datei aus QSGATE_APP_LOG (gelesen ab der Dateigröße zu Laufbeginn). Ohne Quelle entfällt die Ebene still.status: 4xx (gewollte fachliche Abweisungen) und Stack-Zeilen.applog:<stufe>:<hash> (Ebene applog) mit der Häufigkeit als Klasse (1 · 2–5 · 6–20 · 21–100 · über 100). Ein neuer Typ wird zur Abweichung „neu“, die Fehler-Stufe ist ein Befund. Zusammenfassung unter appLog; Abschalten: QSGATE_APPLOG=off.| Regel | Erfüllt, wenn … | schnell¹ |
|---|---|---|
| fi-nacharbeit-leer | keine FI-relevante Warenbewegung ohne FI-Beleg bzw. mit FI-Status failed/pending, kein offener FI-/GoBD-Supportfall ohne Begründung (escalation_reason oder metadata.begruendung), keine fehlgeschlagene Nachverarbeitung | ja |
| fi-gebucht-ohne-siegel | jeder gebuchte Beleg ein Siegel trägt (GoBD Rz. 58 ff.) – auch Zahlungen, Bankausgleiche, Modul- und Systembelege | ja |
| fi-siegel-kette | die Siegel-Kette je Journal gültig ist: Beleghash nach der Formel der App (v3, sonst v2/v1) mit dem Siegel des Vorgängers – geprüft in der Kettenfolge hash_chain_seq (neue Belege werden ans Kettenende angehängt, GoBD append-only), ersatzweise Datum/ID; eine Zeile je gebrochenem Journal | nein |
| mm-were-ausgeglichen | bei Bestellungen mit gelieferter = gebucht berechneter Menge der Saldo des WE/RE-Kontos (Kontenfindung GR_IR_CLEARING) 0 ist – je Bestellung geprüft, weil die Wareneingangsbelege keinen Positionsbezug tragen; Rechnungsentwürfe zählen nicht | ja |
| fi-steuer-monat | je Monat und deutschem Buchungskreis die Zahllast nach UStVA-Logik (Kz. 83) dem Saldo der Steuerkonten entspricht (ohne Abschluss-/Eröffnungsbelege) | nein |
| cfg-kontenfindung-vollstaendig | jeder Kontenfindungsvorgang der Kontenplan-Vorlagen (SKR03/SKR04) in jedem bebuchbaren Plan jedes Mandanten auflösbar ist (aktive Regel, Konten aktiv) | ja |
| lager-bestand-konto | je Buchungskreis die Bestandsbewertung aller Werke (Menge × Standard-/Durchschnittspreis) dem Saldo der Bestandskonten laut Kontenfindung entspricht (wie SAP MB5L) | ja |
¹ Schnelle Regeln laufen zusätzlich nach jeder Szenario-Datei (rund 0,2 s je Datei). Stand 31.10.2026: alle 65 Regeln auf frischem Golden-Record und nach den Szenarien bei 0. Beim ersten Lauf mit neuen Regeln ist „Keine neuen Konsistenzverletzungen“ rot, solange die neuen Regelschlüssel in der Referenz fehlen und eine Verletzung zeigen.
konsistenz:<regel>:nach:<datei>.zuordnung: beleg; sonst Abschnitts-Schlüssel …:nach:<erste>…<letzte> mit zuordnung: mehrdeutig und den kandidaten. Abschalten: QSGATE_KONSISTENZ_JE_DATEI=off.koerper-array, text-statt-zahl, zahl-statt-text, text-statt-boolean, array-statt-objekt, objekt-statt-array, langer-text (20.000 Zeichen), negative-menge.pg_walinspect): gewertet werden nur festgeschriebene Transaktionen mit Netto-Wirkung auf Fachtabellen (technische Tabellen ausgenommen, anpassbar mit QSGATE_FUZZ_TECHNISCH).zahl-statt-text und langer-text nur Hinweis) und bei 4xx mit Seiteneffekt. Schlüssel robust:<route>:fuzz:<art>:<feld>. Erwartet ist eine fachliche Abweisung: eine Liste als ganzer Inhalt ergibt 400 BODY_OBJECT_EXPECTED, Mengen müssen größer 0 sein.QSGATE_FUZZ_JE_ROUTE (Vorgabe 3), QSGATE_FUZZ_MAX (Vorgabe 2.000 Anfragen; Routen deterministisch gestreut), Notbremse QSGATE_FUZZ_MAX_S (900 s); QSGATE_FUZZ=off schaltet ab. Dauer etwa 7–9 Minuten.QSGATE_PARALLEL (Vorgabe 3, höchstens 8; 1 = nacheinander wie bisher). Grundlage sind das Laufzeitprofil des Referenzlaufs und die Regeln in config/parallel.json (Sammelbereiche, exklusive Bereiche und Dateien, die allein laufen müssen; anderer Pfad über QSGATE_PARALLEL_CONFIG).parallelPlan; node src/cli.js plan zeigt ihn vorab.phases.Szenarien.warten, wie lange auf das Anfrage- bzw. Anmeldelimit gewartet wurde – die eigentliche Bremse.«neu», Zeitstempel zu «ts», Unix-Zeiten zu «epoch», das echte Tagesdatum zu «heute»; Listen werden reihenfolgeunabhängig verglichen.rules.json – Änderung nur per Pull Request mit Begründung.pfad, z. B. /api/…/<uuid>/…) werden ohne konkrete IDs verglichen (:id): welche ID als Beispiel diente, ist kein Ergebnis – Route und Status sind es. Hintergrund: Lauf 2639db2 hatte rund 6.700 Abweichungen nur wegen wechselnder Beispiel-IDs.rules.json (jeweils mit _begruendung): interne IP-Adressen → «ip-intern», Kundenreferenz des Klickpfads QSUI O2C … → «zufall», Kopfzeilen cf-ray und rndr-id flüchtig. Der erste Lauf nach einer neuen Normalisierung zeigt bei den betroffenen Beobachtungen einmalig Abweichungen – diese freigeben.Kopfzeile › Schnelllauf · POST /api/v2/start {"modus":"schnell"} · node src/cli.js run --schnell
Ein schneller Zwischenstand nach einem Commit: Der Prüfstand prüft nur die Bereiche, die der Commit-Diff berührt, und meldet in Minuten, ob dort etwas rot geworden ist. Für die Freigabe bleibt der volle Lauf Pflicht.

GITHUB_TOKEN).POST /api/v2/start mit {"modus":"schnell","dateien":["backend/src/…"],"basis":"<commit>","reset":false} – dateien und basis sind optional. Antwort mit freigaberelevant: false.node src/cli.js run --schnell --dateien=a,b bzw. --seit=<commit/zweig> (git diff, Verzeichnis QSGATE_GIT_DIR) oder Umgebung QSGATE_SCHNELL_DATEIEN / QSGATE_MODUS=schnell. --baseline ist mit --schnell nicht erlaubt./api/<bereich>) über config/route-dateien.json, sonst Namens-Heuristik; daraus die passenden Szenarien, lesenden Endpunkte und Masken. Kernänderungen (z. B. Middleware, Datenbank-Helfer, Anmeldung, Nummernkreise) wirken überall – dann prüft der Schnelllauf eine Stichprobe je Modul und vermerkt, dass das Ergebnis eingeschränkt aussagekräftig ist. Reine Doku-/Prüfstand-Oberflächen-Änderungen werden ignoriert.reset: true) und nur Statusvergleich: verglichen wird je geprüfter Beobachtung ok ↔ Fehler gegenüber der Referenz – Inhalte (Belegnummern, Listen) hängen von nicht gelaufenen Vorgänger-Szenarien ab und sind nicht vergleichbar.…_schnell, steht in der Protokollkette, kann aber keine Referenz werden und kein GO geben.Ein grüner Schnelllauf ist kein GO. Er beschleunigt die Korrekturschleife (Entwickler sieht in Minuten, ob die Korrektur wirkt); freigegeben wird nur nach einem vollen Lauf mit Reset.
Die Bewertung ist regelbasiert: Jedes Kriterium hat ein Gewicht. Muss-Kriterien entscheiden über GO oder NO-GO, alle Kriterien zusammen ergeben 0–100 Qualitätspunkte.
Qualitätspunkte = Summe der Gewichte erfüllter Kriterien ÷ Summe der Gewichte aller bewertbaren Kriterien × 100. Nicht bewertbare Kriterien (z. B. ohne Referenz) zählen nicht mit.
GO – alle Muss-Kriterien erfüllt · NO-GO – mindestens ein Muss-Kriterium verletzt · OFFEN – ein Muss-Kriterium ist noch nicht bewertbar.
| Kriterium | Gewicht | Erfüllt, wenn … |
|---|---|---|
| Gegen eine Referenz verglichen | 10 | eine Referenz gesetzt ist |
| Start auf frischem Golden-Record | 10 | gleicher Golden-Stand (Ledger, Ergänzungen, Dump) wie die Referenz: Startzeilen in Toleranz (0,05 %, mind. 50 Zeilen), sonst rot „gleicher Golden-Stand – nicht zurückgesetzt“; neuer Golden-Stand: bestanden mit Hinweis „neuer Golden-Stand (Ergänzungen neu: …) – Referenz neu setzen“, die Startzeilen dürfen aber höchstens die Toleranz über früheren fertigen Läufen desselben Stands liegen; Läufe ohne Golden-Stand (ältere) wie bisher |
| Golden-Record konsistent | 10 | alle Konsistenzregeln auf dem frisch zurückgesetzten Golden-Record vor allen Phasen erfüllt sind (Phase „Golden-Konsistenz“); begründete Ausnahmen nur über rules.json › gates › goldenKonsistenzAusnahmen [{ "regel", "grund" }] (Vorgabe: keine) |
| Uhr steht auf dem Golden-Tag | 5 | das Datum des QS-Gates dem der Referenz entspricht |
| Keine offenen kritischen Abweichungen | 20 | jede kritische Abweichung freigegeben ist |
| Alle Abweichungen geprüft | 10 | keine Abweichung mehr offen ist |
| Keine neuen Serverfehler (HTTP 500) | 15 | kein HTTP 500 neu gegenüber der Referenz auftritt |
| Keine neuen Befunde gegenüber der Referenz | 10 | kein Befund neu hinzukommt |
| Kein Szenario verschlechtert | 15 | kein Szenario mehr Befund-Schritte hat als in der Referenz |
| Keine neuen Schema-Lücken im Code | 5 | keine neue Tabelle/Spalte im Code fehlt im Schema |
| Keine neuen Konsistenzverletzungen | 10 | keine Konsistenzregel neu verletzt ist (Soll = Haben, Zahlstatus, Bestand …) |
| Kennzahlen stimmig | 10 | alle Kennzahlen ohne Fehler sind (Soll = Haben, Salden, Bestand) |
| Höchstens 5 Aufrufe über 4 s | 5 | und nicht mehr langsame Aufrufe als in der Referenz |
| Schreibende Abdeckung ≥ 60 % | 5 | und gegenüber der Referenz nicht gesunken |
| Lesende Abdeckung ≥ 80 % | 5 | Anteil geprüfter lesender Endpunkte |
| Alle Prozessvarianten des Katalogs geprüft | 5 | keine Lücke und kein „nicht gelaufen“ im Prozesskatalog |
| Dialogfunktionen ≥ 98 % durch Tests geprüft | 5 | Anteil geprüfter Masken-Aktionen |
| Backend-Code-Abdeckung nicht gesunken | 5 | Funktionsabdeckung höchstens 0,3 Punkte unter der Referenz |
| Rechte- und Mandantenmatrix ohne Verstoß | 10 | kein Schreiben ohne Recht, keine fremden Daten – Muss, sobald ein Mandantenleck auftritt |
| Fehleingaben werden fachlich abgewiesen | 5 | kein 5xx, nichts Ungültiges angenommen |
| Gleichzeitige Zugriffe ohne Doppelbuchung | 5 | keine Doppelbuchung, Überzahlung, doppelte Nummer – Muss bei kritischem Befund |
| Protokollkette intakt | 5 | alle Einträge korrekt verkettet |
Schwellen (Abdeckung, langsame Aufrufe, Dialogfunktionen) sind je Projekt über rules.json › gates einstellbar; ohne Eintrag gelten die genannten Standardwerte. Quelle: evaluateGates() im Prüfstand. Zusätzliche Kriterien der neuen Prüfdimensionen stehen deklarativ in rules.json › kriterien – siehe Neue Prüfdimensionen. Schnellläufe, überholte Läufe und Variantenläufe werden nicht bewertet.
100 von 175 Gewichtspunkten erfüllt = 57 Punkte. Zwei Muss-Kriterien verletzt: 56 kritische Abweichungen nicht freigegeben, 2 Szenarien verschlechtert.
| Merkmal | Ausprägungen |
|---|---|
| Art | neu · entfallen · geändert · neuer Fehler · behoben – jeweils gegenüber der Referenz |
| Schweregrad | kritisch Buchungen, Salden, Steuern, Berechtigungen, entfallene Schnittstellen, Fehler in FI · hoch · mittel · niedrig |
| Unangekündigt | Das Modul war im Pull Request nicht angekündigt: hebt den Schweregrad um eine Stufe und verlangt vier Augen. |
| Instabil | Bekannt wechselnde Prüfung (rules.json); standardmäßig ausgeblendet und nicht freigabepflichtig. |
Muss-Kriterien entscheiden, nicht die Punktzahl – z. B. offene kritische Abweichungen oder ein verschlechtertes Szenario.
Mindestens ein Muss-Kriterium ist nicht bewertbar, meist weil noch keine Referenz existiert. Lauf prüfen und als Referenz übernehmen.
Nein, nicht zwingend: Die Regeln sind schon auf dem frisch zurückgesetzten Golden-Record verletzt (Befunde „… — Golden-Record vor den Szenarien“, Schlüssel …:vor-szenarien). Behoben wird das per Golden-Ergänzung bzw. Dump; nur in begründeten Fällen eine Ausnahme in goldenKonsistenzAusnahmen.
Direkt zur Ursache: z. B. „Keine offenen kritischen Abweichungen“ in die Abweichungen, „Keine neuen Serverfehler“ in die Befunde mit Klasse Serverfehler, „Protokollkette intakt“ zur Protokollkette.
Eine neue Referenz entsteht nur, wenn Menschen jede Abweichung einzeln mit Begründung freigeben – kritische und unangekündigte mit zwei Personen. Das System misst und dokumentiert, Menschen entscheiden.

POST /api/v2/runs/:id/eine-freigabe). Stehen nur noch solche Teilfreigaben aus, bietet „Als Referenz übernehmen“ beides in einem Schritt an (Formular in der Seitenleiste: Begründung eintragen, „Anordnen und als Referenz übernehmen“).nur-testaenderung mit Begründung und Nachweis bzw. eine-freigabe mit anordnender Person) und in der Protokollkette festgehalten.Ändert sich der Golden-Record (neue Ergänzung, Delta oder Dump), meldet das Kriterium „Start auf frischem Golden-Record“ „neuer Golden-Stand – Referenz neu setzen“. Wird der Golden-Dump neu erfasst, ändern sich die IDs der Golden-Daten einmalig: der erste Lauf danach zeigt viele Abweichungen, die nur auf neuen IDs beruhen. Diese prüfen und freigeben, dann diesen Lauf als Referenz übernehmen – danach vergleichen die Läufe wieder ruhig. Variantenläufe (gemischte Reihenfolge, Zeitmodus) können nie Referenz werden.
Zuerst nach „kritisch“ filtern – offene kritische Abweichungen blockieren die Freigabe. Gewollte Änderungen (z. B. neue Felder einer Maske) gezielt mit Ticket-Bezug freigeben; Unklares ablehnen und mit der Entwicklung klären.
Nicht alles Rote ist ein App-Fehler. Jeder Befund wird automatisch einer Kategorie (wer ist zuständig?) und einer technischen Klasse (welche Art Fehler?) zugeordnet.
| Kategorie | Woran erkennbar | Wie man es liest / nächster Schritt | Zuständig |
|---|---|---|---|
| App-Fehler | HTTP 5xx, SQL-/Schemafehler, JavaScript-Fehler, verletzte DB-Regel; Rechte-, Robustheits- und Dialogbefunde | Ursachen-Typ und Erste Analyse lesen (z. B. „Schema: Spalte fehlt“) – der Prüfauftrag liefert SQL- und Code-Suchhinweise | Entwicklung |
| Fachliche Erwartung | Meldung „Erwartung nicht erfüllt“: technisch erfolgreich, fachlich falsches Ergebnis (Betrag, Status, Folgebeleg) | Mit dem Fachkonzept abgleichen: rechnet die App falsch – oder ist die Erwartung im Szenario falsch? | Berater + Entwicklung |
| Fachlich abgewiesen | HTTP 4xx ohne Code- oder Schemafehler: die App lehnt den Vorgang ab | Ist die Ablehnung fachlich richtig? Dann Szenario bzw. Testdaten anpassen, sonst als App-Fehler behandeln | Berater |
| Datenkonsistenz | verletzte Konsistenzregel (Soll = Haben, Liefer-/Fakturamengen, Bestand …) mit auslösender Szenario-Datei | Regel und Verursacher-Datei öffnen; meist Buchungs- oder Mengenlogik | Entwicklung |
| Buchungskreis-Kontext | Vorgang findet keinen eindeutigen Buchungskreis (Mandant mit mehreren aktiven Buchungskreisen) | Buchungskreis am Vorgang pflegen oder aktiv wählen – laut Meldung im Befund | Entwicklung / Berater |
| Golden-Daten / Customizing | Nummernkreis, Kontenfindung, „nicht konfiguriert“, kein Geschäftsjahr, Modul deaktiviert | Nicht die App ändern: Golden-Record per Ergänzung vervollständigen. Im Reiter Befunde standardmäßig ausgeblendet. | QS-Team / Berater |
Ist die Prüfung selbst falsch oder zeitabhängig (instabil), wird sie im Prüfstand mit Begründung korrigiert – nie, um einen roten Lauf grün zu machen. Vorher die Stabilität prüfen.
Zusätzlich bekommt jeder Befund genau eine Zuständigkeit mit Begründung – die Antwort auf „wer muss handeln?“. Sie steht als Spalte „Zuständig“ und Filter in Befunde und im Befund-Verlauf, in Ticket-Texten und in jedem Prüfauftrag.
| Klasse | Zuständig | Typische Belege | cefd1ba |
|---|---|---|---|
| App-Fehler | Entwicklung | Code-/Schemafehler, Route fehlt („Cannot GET …“), toter Knopf, Rechte-, Robustheits-, Nebenläufigkeitsbefunde, HTTP 5xx mit fachlicher Meldung | 183 |
| Testdaten/Szenario | Prüfstand-Team | Szenario erwartet etwas Falsches oder nutzt ungeeignete Testdaten, Klickpfad findet ein Feld nicht | 52 |
| Customizing/Golden-Record | Berater | Nummernkreis, Kontenfindung, „nicht konfiguriert“, Geschäftsjahr/Periode, Wechselkurs fehlt | 14 |
| Fehlalarm-Verdacht | Prüfstand | Befund kommt und geht über die letzten Läufe ohne harten Fehler (instabil) – mit „seit wann“ | 7 |
| Infrastruktur | Betrieb | keine Antwort (HTTP 0), Gateway 502/503/504, Verbindungsabbruch, Speichergrenze, fehlende Dateien im Container | 9 |
Regeln in src/report/zustaendig.js in fester Reihenfolge (die erste passende gewinnt) aus HTTP-Status, Fehlercode, Meldung, Ebene und Historie der bis zu 7 vorangehenden Läufe. Harte Code-/Schemafehler schlagen Instabilität. Folgefehler („übersprungen: Schritt … fehlgeschlagen“) erben die Klasse des fehlgeschlagenen Vorgängers.
Die Klasse beschreibt die technische Art des Befunds und steuert Farben und Filter in Befunde und im Cockpit („Befunde nach Klasse“):
Serverfehler Schema Buchungskreis Fachlich abgewiesen MCP-Tool Prüfkette Konsistenz Oberfläche Sonstiges
Jede Beobachtung gehört zu einer Ebene, z. B. Szenarien, API (lesende Endpunkte), MCP, Oberfläche, Prüfketten, Datenbank, Kennzahlen, Konsistenz. Ebenen erscheinen als Filter-Chips und als Spalten der Modul-Matrix.
| Ebene (seit v46) | Schlüssel | Bedeutung |
|---|---|---|
applog (App-Log) | applog:<stufe>:<hash> | Meldungstyp im App-Log mit Häufigkeitsklasse; im Cockpit als „App-Log“ |
| Konsistenz | konsistenz:<regel>:vor-szenarien · …:nach:<datei> | Verletzung schon im Golden-Record · von einer Szenario-Datei verursacht |
| Szenarien | isolation:<id> | Ergebnis der Isolationsprüfung (z. B. „reihenfolgeabhaengig“) |
| Fehleingaben | robust:<route>:fuzz:<art>:<feld> | Datentyp-Fuzzing |
sap-abgleich | — | Hinweise des SAP-Abgleichs, nicht freigabe- und nicht vergleichsrelevant |
Jeder Menüpunkt der Navigation – in der Reihenfolge des Menüs
Adresse #/ · Kürzel g c
Die Startseite: Urteil des letzten Laufs, Freigabe-Entscheidung, Kennzahlen, Trends und die wichtigsten Auswertungen auf einer Seite.
Eine klare, regelbasierte Antwort auf die Frage „Darf diese Version zum Kunden?“ – und der schnellste Einstieg in alle Details.

cefd1ba, ohne gesetzte Referenz – daher 46 Punkte und „ohne Referenz nicht bewertbar“).
| Block | Inhalt und Bedienung |
|---|---|
| Letzter Lauf | Urteil mit Text, Start (vor wie langer Zeit), Dauer, Version und Branch, Uhr des QS-Gates, Referenz (Link) und wer sie gesetzt hat. Knöpfe: Abweichungen prüfen, Befunde, Gesamt-Prüfauftrag (MD). |
| Lauf läuft | Nur während eines Laufs: Fortschritt in %, geschätzte Restzeit, alle Phasen als Balken (erledigt / aktuell / ausstehend), aktuelle Phase. Aktualisiert sich alle 15 Sekunden; nach Abschluss meldet das Cockpit „Lauf abgeschlossen.“ Wartet ein neuer Stand, steht in der Kopfzeile zusätzlich „wartet: <commit>“. |
| Freigabe-Entscheidung | GO / NO-GO / OFFEN, Qualitätspunkte, Kriterienliste – Klick auf ein Kriterium führt zur Ursache. Siehe Bewertung. |
| Kennzahlen | Offene Abweichungen (kritisch/hoch/instabil), Echte App-Fehler, Szenarien fehlerfrei, Schreibende und Lesende Endpunkte geprüft, Masken ohne Fehler – jede Kachel ist ein Link. |
| Abweichungen je Lauf · Befunde je Lauf | Gestapelte Balken je Lauf nach Schweregrad bzw. Kategorie; Klick auf einen Balken öffnet diesen Lauf. |
| Befunde je Lauf nach Ebene · Bearbeitung der Befunde | Trend nach Ebene; Stand der Befund-Bearbeitung nach Status und Verantwortlichen. |
| Modul-Matrix · Befunde nach Klasse | Fehleranteil je Bereich und Ebene (Zahl = Fehler, rote Zahl = Abweichungen); Klick auf eine Zelle filtert Befunde bzw. Abweichungen, Klick auf den Bereich öffnet den Bereichs-Steckbrief. Details in Module. |
| Größte Ursachen · Ursachen-Typen | Die sechs größten Ursachen-Gruppen und die Verteilung nach Typ; „Alle Ursachen →“. |
| Befunde nach Bereich · Abdeckung je Bereich · Lauf im Detail | Top 12 Bereiche, geprüfte Endpunkte je Bereich, Dauer der Phasen und Laufzeitklassen (Tooltip je Segment). |
Dann zeigt das Cockpit „Noch kein abgeschlossener Lauf.“ Der Prüfstand startet automatisch, sobald eine neue Version im QS-Gate läuft – oder oben „Lauf starten“.
Im Kundentermin zuerst die roten Muss-Kriterien zeigen; die Modul-Matrix ist der Einstieg je Fachbereich. Das Cockpit ist für alle Breiten von 1.280 bis 2.560 px und für das Handy ausgelegt – nichts wird rechts abgeschnitten; breite Tabellen scrollen in sich.
Adresse #/laeufe
Die Historie aller Läufe mit Urteil, Abweichungen, Befunden, Umfang und Dauer – und der Einstieg in jeden früheren Lauf.

| Spalte | Bedeutung |
|---|---|
| Auswahl | Häkchen für den Vergleich (nur fertige Läufe) |
| Start | Datum, Uhrzeit, vor wie langer Zeit |
| Urteil | grün / gelb / rot / ohne Referenz bzw. „läuft“, außerdem Schnelllauf (nicht freigaberelevant), Überholt und Abgebrochen; zusätzlich Referenz, ohne Reset? und neuer Golden-Stand. „ohne Reset?“ erscheint, wenn der Lauf denselben Golden-Stand wie seine Referenz hat und die Zeilenzahl zu Beginn mehr als 0,05 % (mind. 50 Zeilen) abweicht – dann wurde vor dem Lauf nicht zurückgesetzt. „neuer Golden-Stand“ erscheint, wenn sich Ledger, Ergänzungen oder Dump gegenüber der Referenz geändert haben – dann nach Prüfung eine neue Referenz setzen. Gleiche Regel wie das Freigabekriterium „Start auf frischem Golden-Record“. Nur fertige volle Läufe lassen sich zum Vergleich ankreuzen. |
| Version | Kurz-Commit und Auslöser (z. B. „manuell (Name) · mit Reset“) |
| Abweichungen | Balken nach Schweregrad, Anzahl, kritische hervorgehoben; „keine“ bei grünem Lauf |
| Befunde · Schritte · Schreibend geprüft · Dauer | Kennzahlen je Lauf; alle Spalten sortierbar per Klick auf die Überschrift |
Darunter: Dauer je Lauf (Minuten) und Abdeckung je Lauf (schreibend, lesend, MCP-Tools in %).
Über allen Reitern von „Ausgewählter Lauf“ steht der Lauf-Kopf: Urteil, ggf. Referenz, Start, Dauer, Version, Auslöser, „Verglichen mit“ (Link zur Referenz) und die Freigabe-Plakette (GO / NO-GO / OFFEN mit Punkten, Link zum Prüfbericht). Knöpfe:
| Knopf | Wirkung |
|---|---|
| Prüfbericht | druckbarer Bericht des Laufs – Prüfbericht |
| Gesamt-Prüfauftrag (MD) | eine Datei mit allen Problemen des Laufs für einen KI-Coding-Agenten |
| Prüfauftrag in Paketen | öffnet die Schublade mit „Alle als ZIP“, Übersicht, Gesamtdatei und Download je Paket – siehe Prüfauftrag |
| Befunde ausführlich (MD) | alle Befunde und offenen Abweichungen, jede Prüfung mit Reproduktion |
| Protokoll PDF · Markdown | Lauf-Protokoll als PDF bzw. Markdown |
| Release Notes | Release Notes des Laufs als Markdown |
| Als Referenz übernehmen | nur für fertige Läufe, die nicht Referenz sind – Referenzwechsel |
Unter den Knöpfen erscheinen bei Bedarf zwei Zeilen:
Die Reiter des Laufs: Abweichungen, Befunde, Ursachen, Module, Szenarien, Prozesse, Dialoge, Abdeckung, Code, Endpunkte, Oberfläche, Datenbank, Prüfketten, Suche. Die Reiter außer Abweichungen brauchen den vollständigen Lauf-Index: Läuft der Lauf noch, steht dort „Der Lauf ist noch nicht abgeschlossen.“; bei Schnelllauf, überholtem oder abgebrochenem Lauf erklärt ein Hinweis, warum es keine Auswertung gibt.
Ein Lauf mit Kennzeichen „ohne Reset?“ ist nicht vergleichbar – prüfen, ob vor dem Lauf zurückgesetzt wurde. Bei „neuer Golden-Stand“ (neue Ergänzung, Delta oder Dump) den ersten fertigen Lauf prüfen und als Referenz übernehmen (siehe Referenzwechsel). Variantenläufe zeigen ihren Modus im Hinweis zum Lauf („Variantenlauf (Zeit …, Reihenfolge shuffle:42) – nicht freigaberelevant …“).
Adresse #/studio · Unterseiten #/studio/spielen, #/studio/aufnahme, #/studio/makro/<id>
Alle Prozesse, Varianten und Dialogfunktionen des Golden-Records als fertige Makros: abspielen (Schritt für Schritt, automatisch, bis zum Haltepunkt), je Schritt die Maske der Oberfläche mit dem Beleg öffnen, verändern und erweitern.

Prozesse werden für Demo, Schulung oder Fehleranalyse Schritt für Schritt nachvollziehbar, und Kundenprozesse werden ohne Programmierung zu dauerhaften Prüfszenarien.
Zähler: Prozesse, fertige Makros, davon exakt wiederholbar, eigene Makros, Adresse der Oberfläche. Knöpfe: Laufende Wiedergabe bzw. Letzte Wiedergabe, Aufnahme an der Oberfläche, Neues Makro.
Abspielen verändert Daten im QS-Gate (wie ein Anwender). Fertige Makros sind auf dem frischen Golden-Record aufgezeichnet und laufen dort exakt; nach anderen Wiedergaben können Abweichungen entstehen. Prüfläufe warten, bis die Wiedergabe beendet ist.
| Reiter | Inhalt | Filter |
|---|---|---|
| Prozesse | Jedes Szenario je Bereich: Titel, ID, Datei, abgedeckte Prozessvarianten, Schritte und Befunde im letzten Lauf, Makro mit Gegenprobe; ▶ abspielen (Schritt für Schritt / automatisch), </> zeigt den Quelltext (nur lesen). | Suche, Bereich, Zustand: wiederholbar · mit Abweichung · ohne Makro · mit Befund im letzten Lauf |
| Prozessvarianten | Kennzahlen (im Katalog, im Studio abspielbar, ohne Makro, fertige Makros) und je Variante Bereich, Prozess, fachliche Erwartung und Makro. | Suche, Bereich, abspielbar · kein Makro · nicht angeboten |
| Dialogfunktionen | Jede Backend-Aktion einer Maske mit Aufruf, Datei und Funktion; Knopf bis Schritt n spielt das passende Makro automatisch bis vor diese Funktion und hält dort an. | Suche, Pfad, abspielbar · kein Makro · dynamisch |
| Makros | Alle Makros mit Bereich, Schritten, Art (fertig eigen angepasst im Prüflauf) und Gegenprobe; ▶ abspielen, Stift = bearbeiten. | Suche, Bereich, fertig (Golden) · eigene · angepasst · wiederholbar · mit Abweichung · im Prüflauf |
Die ausführliche Anleitung mit allen Bildern steht im Kapitel Prozess-Studio: Anleitung.
Prozess-Studio und Makro-Editor zeigen Namen (Partner, Material, Konto …) statt technischer IDs. Ohne Zugriff auf die QS-Datenbank holt das Studio die Bezeichnungen über die App-API; erst wenn beides fehlt, erscheinen IDs.
Adresse #/lauf/<lauf>/abweichungen · Kürzel g a · Zahl im Menü = offene Abweichungen des letzten Laufs
Jede Änderung gegenüber der Referenz – nach Schweregrad, Ebene, Art und Bereich – mit Freigabe direkt in der Liste.

Unbeabsichtigte Seiteneffekte einer Änderung werden gefunden, bevor ein Anwender sie bemerkt. Nichts ändert sich mehr „still“ im System.
| Element | Wirkung |
|---|---|
| Kacheln Kritisch · Hoch · Mittel · Niedrig | Anzahl je Schweregrad, davon freigegeben |
| Suchfeld | „Prüfung, Pfad, Wert …“ – durchsucht Titel, Schlüssel, Modul und geänderte Werte |
| Alle Bereiche | auf einen Bereich einschränken |
| Chips Schweregrad | kritisch, hoch, mittel, niedrig (mehrere wählbar) |
| Chips Freigabe | offen, teilfreigabe, freigegeben, abgelehnt – Voreinstellung: offen + teilfreigabe |
| Chips Ebene · Art | z. B. Szenarien, API, Oberfläche … · neu, geändert, entfallen, neuer Fehler, behoben |
| instabile zeigen | blendet bekannte instabile Prüfungen ein (sonst ausgeblendet) |
| nach Bereich gruppieren | Liste nach Bereich gruppieren (Voreinstellung) oder flach anzeigen |
| CSV | Export aller Abweichungen des Laufs |
| Leiste unten | „alle sichtbaren“, Zähler „n ausgewählt“, Begründung (Pflicht), Freigeben, Ablehnen |
Spalten der Liste: Schweregrad (ggf. unangekündigt), Prüfung mit Ebene · Modul · Art, Änderung (bis zu zwei Felder alt → neu, „+ n weitere“), Freigabe (Status, bei vier Augen „x/2 Personen“).
„Keine Abweichungen gegenüber der Referenz.“ – oder, ohne Referenz: „Dieser Lauf hat keine Referenz.“ Dann Befunde prüfen und den Lauf als Referenz übernehmen.
Der Freigabe-Filter steht anfangs auf „offen“ und „teilfreigabe“, instabile sind ausgeblendet. Chips abwählen bzw. „instabile zeigen“ aktivieren.
Nein – für den Referenzwechsel zählen nur Abweichungen, die nicht „behoben“ und nicht instabil sind.
Adresse #/lauf/<lauf>/befunde · Kürzel g b · Zahl im Menü = Befunde des letzten Laufs
Alle fehlschlagenden Prüfungen des Laufs – nach Kategorie, Klasse, Ebene und Bereich, mit Bearbeitung (Status, Verantwortliche, Ticket) und Exporten.

Unterscheidet echte App-Fehler von fachlichen Ablehnungen und Golden-Daten-Themen – ein gemeinsames Fehlerbild für Fachbereich, Berater und Entwicklung.
| Element | Wirkung |
|---|---|
| Suchfeld | „Pfad, Meldung, Prüfung …“ |
| Alle Bereiche · Alle HTTP-Status | Einschränken auf Bereich bzw. Statuscode |
| Bearbeitung | alle · noch nicht bearbeitet · je Status (mit Anzahl) |
| Chips Kategorie | App-Fehler, Datenkonsistenz, Fachliche Erwartung, Fachlich abgewiesen, Buchungskreis-Kontext, Golden-Daten/Customizing – Golden-Daten/Customizing ist standardmäßig ausgeblendet (Hinweis mit Anzahl) |
| Chips Zuständig | App-Fehler · Entwicklung, Testdaten/Szenario · Prüfstand-Team, Customizing/Golden-Record · Berater, Fehlalarm-Verdacht · Prüfstand, Infrastruktur · Betrieb (je mit Anzahl, mehrere wählbar). Direkt verlinkbar über ?zustaendig=app (mehrere mit Komma, z. B. ?zustaendig=testdaten,customizing). |
| Chips Klasse · Ebene | siehe Befund-Klassen |
| Prüfauftrag (MD) | Befunde der aktuellen Auswahl (Bereich, Klasse, Ebene) als Prüfauftrag |
| CSV | alle Befunde mit Bereich, Ebene, Klasse, Methode, Pfad, Status, Meldung, Prüfung, Schlüssel |
| Leiste unten | „alle sichtbaren“, Status · Verantwortlich · Ticket · Notiz, Bearbeitung setzen, Ticket-Texte kopieren, Prüfauftrag (MD) für die Auswahl |

cefd1ba).Die Spalte Zuständig zeigt Klasse und Team; der Tooltip nennt die Begründung (z. B. „Keine Antwort vom QS-Gate (HTTP 0) – Dienst/Netz prüfen“) und bei instabilen Befunden den Verlauf. Die Suche findet auch Klasse und Team. Ticket-Texte und Prüfaufträge enthalten die Zuständigkeit.

Befunde mit Verantwortlichem und Ticket versehen – das gilt über alle folgenden Läufe. Im Cockpit zeigt „Bearbeitung der Befunde“ den Stand.
Adresse #/lauf/<lauf>/ursachen
Befunde mit derselben normalisierten Fehlermeldung werden zu Ursachen-Gruppen gebündelt: eine Ursache, viele Symptome. Eine Korrektur an der richtigen Stelle beseitigt oft dutzende Befunde auf einmal.

In Ursachen statt Einzelbefunden sprechen: Im Lauf vom 29.10.2026 waren es 265 Befunde in 202 Ursachen-Gruppen.
Adresse #/lauf/<lauf>/module · Bereichs-Steckbrief #/bereich/<Bereich>
Die Modul-Matrix über alle Bereiche und Ebenen sowie eine sortierbare Bereichstabelle – zeigt sofort, wo sich Probleme ballen.

Tabelle mit Prüfungen, Fehlern (Link zu Befunden), Fehleranteil, Abweichungen (Link, kritische hervorgehoben), Szenarien grün, Schritten und geprüften Endpunkten – sortierbar per Klick auf die Spaltenüberschrift.
Alles zu einem Bereich auf einer Seite: Kennzahlen (Prüfungen, Befunde, offene Abweichungen, Szenarien grün, Endpunkte geprüft, Tabellen verändert), Ebenen des Bereichs, Befunde je Lauf, Listen der Szenarien, Befunde, Endpunkte („nur ohne Prüfung“), Abweichungen sowie Tabellen und Prüfketten. Oben: Prüfauftrag (MD) für den Bereich und eine Auswahl, um zu einem anderen Bereich zu wechseln.
Für Fachbereichstermine den Steckbrief des eigenen Bereichs öffnen – er enthält alle Ebenen ohne Ablenkung.
Adresse #/lauf/<lauf>/szenarien · Detail …/szenarien/<id>
Rund 1.120 fachliche Szenarien – echte Abläufe vom Angebot bis zur Zahlung, über die API bis zum Endzustand.

Ein Szenario mit Befund im Prozess-Studio Schritt für Schritt abspielen – gemeinsam mit dem Kunden.
Adresse #/lauf/<lauf>/prozesse
Prozessvarianten je Bereich: Normal, Storno, Retoure, Korrektur, Ablehnung, Abschluss, Wiedereröffnung – und der Prozesskatalog mit fachlicher Erwartung je Variante.


Suchfeld „Prozess, Erwartung, Szenario …“, Bereich, Prozessart und Chips je Zustand: Befund · abgebrochen · nicht gelaufen · teilweise gelaufen · Lücke · grün · nicht angeboten · ausgenommen.
Wie Varianten entstehen und entschieden werden, beschreibt das Kapitel Prozesskatalog.
Gerade Sonderfälle wie Storno oder Retoure verursachen im Betrieb die meisten Fehler. Varianten mit dem Fachbereich durchgehen; fehlende im Prozess-Studio aufnehmen.
Adresse #/lauf/<lauf>/dialoge (Reiter „Dialoge“)
Jeder Knopf, jede Aktion einer Maske, die das Backend aufruft – Speichern, Export, Statuswechsel – und ob ein Test sie erreicht.

Jede Stelle im Frontend, an der eine Maske das Backend aufruft, ist eine Dialogfunktion. Geprüft ist sie, wenn ein Szenario-Schritt oder die Leseprüfung dieselbe Methode und Route aufruft; bei Varianten (feste Werte wie action: 'approve' oder Query-Parameter wie ?format=csv) muss der Aufruf diese Variante tragen. Tote Knöpfe – Aufrufe ohne Backend-Route – meldet die Prüfphase „Dialogfunktionen“ als Befund.
Fehlt das Inventar, erscheint „Kein Inventar der Dialogfunktionen für diesen Lauf“ – es entsteht beim Bau des Prüfstands aus dem Frontend-Quelltext.
Adresse #/lauf/<lauf>/abdeckung · Code-Abdeckung im Reiter „Code“ (…/code)
Was wird geprüft – und was bewusst nicht: Endpunkte, Laufzeitklassen, langsamste Aufrufe, begründete Ausnahmen und die Backend-Code-Abdeckung.

| Block | Inhalt |
|---|---|
| Kennzahlen | Endpunkte gesamt (lesend/schreibend), Lesend geprüft (direkt/in Szenarien), Schreibend durch Szenarien, MCP-Tools aufgerufen (nur lesende) |
| Endpunkte je Bereich | grün = durch eine Prüfung aufgerufen; Klick filtert |
| Laufzeitklassen · Langsamste Aufrufe | Verteilung der Laufzeiten; Aufrufe über 1 s (Klick öffnet die Beobachtung) |
| Begründet ausgenommen | Endpunkte, die bewusst nicht geprüft werden, mit Begründung (rules.json › coverageExclusions) |
| Endpunkte ohne Prüfung | Kandidaten für neue Szenarien; Filter „Pfad filtern …“ und Bereich; CSV-Export. Neue Endpunkte ohne Prüfung meldet der Prüfstand als Abweichung. |

Das QS-Gate misst während des ganzen Prüflaufs mit der V8-Abdeckung, welche Funktionen und Verzweigungen des Backends tatsächlich ausgeführt wurden – über alle Ebenen. Kennzahlen: Funktionen ausgeführt (mit Referenzwert), Verzweigungen, Dateien (ohne jede ausgeführte Funktion), Gegenüber Referenz. Filter: „Datei, Funktion …“, Bereich, „nur Dateien mit Lücken“; schwächste Bereiche stehen oben, Klick filtert.
Ungeprüfte Endpunkte als CSV an das Entwicklungsteam geben; Ausnahmen nur mit Begründung. Dateien, die gegenüber der Referenz nicht mehr erreicht werden, zuerst klären.
Adresse #/lauf/<lauf>/endpunkte · Kürzel g e
Jede Schnittstelle des Katalogs mit aufrufenden Szenarien, Aufrufen, Fehlern, Median-Laufzeit und HTTP-Status.

Vor jeder Schnittstellen-Diskussion den Endpunkt hier nachschlagen – wichtig für Integrationen mit Drittsystemen.
Adresse #/lauf/<lauf>/oberflaeche
Alle Masken aus Navigation und Routing: geöffnet, fotografiert und mit der Referenz verglichen – Text, Konsolen- und Serverfehler, Pixelvergleich.


Abweichende Masken sind oft gewollt – vor der Freigabe Text und Bild vergleichen; gewollte Layoutänderungen gezielt freigeben, unklare mit der Entwicklung klären.
Adresse #/lauf/<lauf>/datenbank
Was ein Prüflauf in der Datenbank verändert – je Bereich und Tabelle – und der Abgleich zwischen Backend-Code und Datenbankschema.

Änderungen in Tabellen, die kein Szenario berührt, deuten auf Seiteneffekte hin. Die Befehlspalette findet Tabellen direkt.
Adresse #/lauf/<lauf>/ketten (Reiter „Prüfketten“)
Fachliche Regeln über die gesamte Datenbank: In-App-Prüfketten, Kennzahlen (Summen-/Saldenliste, Soll = Haben, offene Posten, Steuern, Bestand) und Konsistenzregeln.

Bei verletzter Regel die auslösende Szenario-Datei öffnen – dort liegt der Verursacher. Kennzahlen und neue Konsistenzverletzungen sind Muss-Kriterien.
Adresse #/lauf/<lauf>/suche?q=…
Volltextsuche über alle rund 45.000 Beobachtungen eines Laufs – nach Schlüssel, Titel, Modul oder Fehlermeldung.
Aus jeder Seite erreichbar: Befehlspalette (Strg+K), Begriff tippen, „„…“ in allen Beobachtungen suchen“.
Diese Ansicht ist ohne Bildschirmfoto aus dem Code beschrieben.
Adresse #/verlauf · Kürzel g v
Jeder Befund mit Status und Verlauf über die letzten Läufe: neu, weiterhin offen, behoben.

Für Statusberichte: neu, offen und behoben je Lauf direkt hier ablesen – zeigt, ob Korrekturen wirken.
Adresse #/stabilitaet · Kürzel g s
Prüfungen, deren Ergebnis zwischen Läufen wechselt – mit und ohne neue Version. Wechselt ein Ergebnis ohne neue Version, ist die Prüfung (oder die App) instabil.

rules.json).Instabile Prüfungen nicht als App-Fehler melden – erst Zeit- oder Nebenläufigkeitsursache klären; dann begründet in rules.json aufnehmen oder beheben.
Adresse #/leistung · Kürzel g l
Antwortzeiten über die Läufe: Perzentile, Summen je Ebene, Regressionen, Verbesserungen und die langsamsten Aufrufe. Eine Version kann fachlich korrekt, aber spürbar langsamer sein.

Gemessen wird jeder Aufruf der lesenden Prüfung, der MCP-Tools und jeder Szenario-Schritt. Regression = mindestens doppelt so langsam wie der Median der Vorläufe und ≥ 200 ms.
Die langsamsten Aufrufe als Liste für das Performance-Gespräch nutzen. Langsame Aufrufe über 4 s fließen in die Bewertung ein.
Adresse #/vergleich?a=<vorher>&b=<nachher>
Freier Vergleich ohne Bewertung – beliebige zwei Läufe, z. B. zwei Versionen nebeneinander, unabhängig von der Referenz.

Für die Kundenfrage „Was ist seit letzter Woche anders?“ die beiden Läufe direkt vergleichen. Freigaben entstehen hier nicht.
Adresse #/kette
Jeder Lauf, jede Freigabe und jeder Referenzwechsel – verkettet über SHA-256. Nachträgliche Änderungen an Prüfergebnissen oder Freigaben würden die Kette brechen.

Für Audits den Status „intakt“ zusammen mit dem Prüfbericht vorlegen.
Oberster Block der Einstellungen: optionale Prüfebenen des vollen Laufs. Barrierefreiheit prüfen (axe-core nach WCAG 2.1 AA und Mobilansicht 390 px der wichtigsten Masken, ca. 6–8 Minuten zusätzlich) ist standardmäßig ausgeschaltet. Häkchen setzen und „Prüfumfang speichern“ – gilt ab dem nächsten Lauf; angezeigt wird, wer wann geändert hat. Gespeichert im Prüfstand unter DATA_DIR/pruefumfang.json.
Adresse #/einstellungen
KI-Unterstützung für den Aufnahme-Assistenten im Prozess-Studio und die KI-Zweitprüfung Rechnungswesen im Prüflauf.
Mit einem eigenen API-Schlüssel plant der Assistent Aufnahmen aus einer Beschreibung (Startmaske, Schritte, Testdaten, passende Prozessvarianten) und bereitet aufgenommene Abläufe zu lesbaren, prüfenden Makros auf (Schrittnamen, fachliche Prüfungen). Ohne Schlüssel arbeitet der Assistent regelbasiert aus dem Prozesskatalog.
Der Schlüssel wird verschlüsselt auf dem Prüfstand gespeichert und nie an die Oberfläche zurückgegeben; angezeigt wird nur, dass einer hinterlegt ist, wann und von wem er zuletzt geändert wurde. Alternativ liest der Prüfstand OPENAI_API_KEY bzw. ANTHROPIC_API_KEY aus der Umgebung.
Steuert die Phase KI-Zweitprüfung im Prüflauf. Oben steht, ob sie ausgeführt wird („wird ausgeführt“ bzw. „wird nicht ausgeführt (kein Schlüssel)“).
| Feld | Bedeutung | Vorgabe · Grenzen |
|---|---|---|
| KI-Stichproben | automatisch (an, sobald ein Schlüssel hinterlegt ist) · an · aus | automatisch |
| Umfang | Stichprobe oder vollständige Prüfung (alle Belege des Laufs) | Stichprobe |
| Belege je Lauf (Stichprobe) | Anzahl der bewerteten Belege | 40 · 1–5.000 |
| max. Tokens je Lauf | Budget für alle Anfragen eines Laufs | 200.000 · 1.000–20 Mio. |
| max. Tokens je Anfrage | Antwortlänge je Beleg | 1.500 · 200–32.000 |
| max. Kosten je Lauf (EUR) | optionale Kostengrenze; leer = keine Grenze | keine |
| Preis Eingabe / Ausgabe | EUR je 1 Mio. Tokens, für die Kostenschätzung | 3 / 15 |
„Prüfungseinstellungen speichern“ übernimmt die Werte. Ein leeres Feld bedeutet: Umgebungsvariable bzw. Vorgabe. Einstellungen im Cockpit haben Vorrang vor QSGATE_KI_MAX, QSGATE_KI_MAX_TOKENS_LAUF, QSGATE_KI_MAX_TOKENS_ANFRAGE und QSGATE_KI_MAX_KOSTEN. Ist ein Budget erreicht, endet die Phase sauber mit „Budget erreicht nach n von m Belegen“.
Diese Ansicht ist ohne Bildschirmfoto aus dem Code beschrieben.
Prüfauftrag, Prozess-Studio und Prüfbericht Schritt für Schritt
Ein Export – alle Probleme, priorisiert und reproduzierbar. Ein KI-Coding-Agent oder Entwickler kann die Fehler ohne Rückfragen nachstellen und beheben.

$TOKEN).| Export | Wo | Inhalt |
|---|---|---|
| Gesamt-Prüfauftrag (MD) | Cockpit, Lauf-Kopf, Befehlspalette | alle Probleme des Laufs: Befunde nach Ursache, Abweichungen, Prozesslücken, Konsistenz, Schema-Lücken im Code, Leistung – eine Datei (bleibt verfügbar) |
| Prüfauftrag in Paketen (ZIP / MD) | Lauf-Kopf › „Prüfauftrag in Paketen“ | derselbe Inhalt in handlichen Paketen mit Priorität, Zuständigkeit und empfohlener Reihenfolge – siehe unten |
| Befunde ausführlich (MD) | Lauf-Kopf | alle Befunde und offenen Abweichungen, jede Prüfung mit Reproduktion |
| Prüfauftrag (MD) einer Auswahl | Befunde (Filterzeile bzw. Sammelleiste) | Befunde der aktuellen Auswahl (Bereich, Klasse, Ebene) bzw. der markierten Befunde |
| Prüfauftrag (MD) einer Ursache | Ursachen, je Gruppe | nur die Befunde dieser Ursachen-Gruppe |
| Prüfauftrag (MD) eines Befunds | Schublade eines Befunds / einer Abweichung | genau diese Prüfung |
| Prüfauftrag (MD) eines Bereichs | Bereichs-Steckbrief | Befunde und offene Abweichungen des Bereichs |
| Auftrag (MD) Schema-Abgleich | Datenbank | fehlende Tabellen und Spalten mit Fundstellen im Backend |
Jeder Befund trägt im Prüfauftrag eine Zeile bzw. Spalte Zuständig (Klasse und Team, siehe Befund-Klassen).
Der Gesamt-Prüfauftrag eines großen Laufs ist zu lang für einen Coding-Agenten (cefd1ba: eine Datei mit 149.956 Zeilen). Die Schaltfläche Prüfauftrag in Paketen im Lauf-Kopf teilt ihn in Arbeitspakete – im Beispiel 68 Pakete (74 Dateien inkl. Teile; 17 kritisch, 25 hoch, 26 mittel).

cefd1ba).| Paketart | Bildung |
|---|---|
| Befunde einer Ursache | Ursachen-Gruppen mit mindestens 3 Befunden bekommen ein eigenes Paket |
| Einzelbefunde | kleinere Gruppen gebündelt nach Zuständigkeit und Bereich |
| Abweichungen | je Modul, verdichtet nach Änderungsmuster |
| Prozessvarianten | je Bereich die Varianten mit Befund oder Lücke |
| Schema-Abgleich · Prüflücken | fehlende Tabellen/Spalten im Code; ungeprüfte Endpunkte und Dialogfunktionen |
?max= 400–5.000).try-scenario), Akzeptanzkriterium „Befund verschwindet im nächsten Lauf“ und am Ende die Schlüssel zur Nachprüfung.00-uebersicht.md: alle Pakete in empfohlener Reihenfolge und eine Tabelle nach Zuständigkeit. „Alle als ZIP“ enthält Übersicht und alle Pakete.main (nie direkt in qsgate), mit Test; das Szenario wird lokal grün gespielt.main → qsgate; der Prüfstand bestätigt „behoben“ und meldet neue Befunde.In fünf Läufen vom 27. bis 29.10.2026 sanken die Befunde von 489 auf 265 (−46 %). Bearbeitet wird je Ursache, nicht je Einzelbefund.
Pakete nach Zuständigkeit verteilen: App-Fehler an die Entwicklung (bzw. je Paket an einen Coding-Agenten), Testdaten/Szenario an das Prüfstand-Team, Customizing an die Berater. Ob eine Korrektur wirkt, zeigt vorab ein Schnelllauf; bestätigt wird sie im nächsten vollen Lauf.
Ein Makro ist ein Geschäftsprozess als JSON – keine Programmierung: eine Folge von Schritten, die jeweils einen Aufruf der App abbilden. Zu jedem Prozess des Golden-Records gibt es ein fertiges Makro, aufgezeichnet auf dem frischen Golden-Record und per Gegenprobe auf Wiederholbarkeit geprüft.

| Name · Methode · Pfad | z. B. „Auftrag anlegen“, POST /api/sales |
| Eingaben | wie in der Maske, mit Platzhaltern |
| Werte merken | s5n = body.order.id – später als {{s5n}} verwendbar (im Schritt 5 neu angelegter Beleg) |
| Prüfungen | Pfad (body.…), Vergleich (HTTP-Status =, =, ≠, >, <, vorhanden, enthält), Wert, Bezeichnung |
| Optionen | Erfolg erwartet (aus = fachliche Ablehnung erwartet), Pflichtschritt (Fehler bricht ab), als anderer Benutzer (Tenant, E-Mail) |
| Platzhalter | {{today}}, {{today+7}}, {{ref}}; Passwörter nur als {{password}} |
Fertiges Makro anpassen · abgespielten Prozess „Als Makro speichern“ · an der Oberfläche aufnehmen · aus Dialogfunktionen bauen („Schritt aus einer Maske (Dialogfunktion)“ bzw. „Leerer Schritt“ im Editor).

{{…}}) bleiben verknüpft.

.mjs für das Repository.vk-teillieferung), Titel, Bereich, Beschreibung.Fertige Makros sind schreibgeschützt: Wer speichert, erzeugt eine eigene Kopie. „Kopie verwerfen“ stellt das Original her.

/sales) eintragen; „Oberfläche hier eingebettet zeigen (sofort angemeldet)“ ist voreingestellt. „Neue Aufnahme starten“.

{{s5n}}) und verknüpft, Passwörter zu {{password}}; danach öffnet der Editor.Makro abspielen, dann „Per Aufnahme erweitern“ bzw. auf der Aufnahme-Seite „An „…“ anschließen“: Der abgespielte Ablauf wird vorangestellt, neue Belege werden über beide Teile verknüpft.

Haltepunkte während der laufenden Wiedergabe setzen und „Bis Haltepunkt“ funktionieren ab dem nächsten Stand des QS-Gates (nach dem nächsten Deploy des Prüfstands).
| Tipp / Meldung | Bedeutung und Abhilfe |
|---|---|
| Auf frischem Stand arbeiten | Fertige Makros laufen auf dem frisch zurückgesetzten Golden-Record exakt; nach anderen Wiedergaben können Abweichungen entstehen. |
| Sprechende IDs und Titel | ID nur Kleinbuchstaben, Ziffern, Bindestrich – sie wird Dateiname der Szenario-Datei. |
| Prüfungen fachlich formulieren | Neben dem HTTP-Status mindestens eine fachliche Prüfung je wichtigem Schritt (Status, Betrag, Folgebeleg). |
| Ablehnungen bewusst testen | „Erfolg erwartet“ ausschalten, wenn die App fachlich ablehnen soll (z. B. ohne Recht als qs-lesen). |
| „Platzhalter {{x}} ist nicht belegt“ | Ein früherer Schritt merkt den Wert nicht (mehr) – „Werte merken“ prüfen oder Reihenfolge korrigieren. |
| „Anfrage-Inhalt ist kein gültiges JSON“ | Im Reiter Technik Klammern/Anführungszeichen prüfen – oder im Reiter Dialog ändern. |
| „Ein Prüflauf läuft — bitte danach aufnehmen“ | Aufnahme und Senden sind während eines Laufs gesperrt; Lauf abwarten. |
| „Zum Anschließen zuerst einen Prozess vollständig abspielen“ | Erweitern setzt eine beendete Wiedergabe voraus. |
| „Makro … gibt es schon“ | Überschreiben bestätigen oder eine neue ID wählen. |
| Anmeldung wartet beim Start | Das QS-Gate begrenzt Anmeldungen je 15 Minuten – kurz warten, nicht mehrfach klicken. |
Adresse #/bericht/<lauf> · erreichbar über „Prüfbericht“ im Lauf-Kopf, die GO/NO-GO-Plakette oder die Befehlspalette
Das Ergebnis eines Laufs als Dokument – für Abnahme, Lenkungskreis und Ablage beim Kunden.

„Drucken / als PDF speichern“ öffnet den Druckdialog des Browsers; dort „Als PDF speichern“ wählen. „← zum Lauf“ führt zurück. Zusätzlich im Lauf-Kopf: Protokoll PDF, Markdown und Release Notes.
Nach jeder Freigabe den Bericht als PDF beim Kunden ablegen – zusammen mit dem Status der Protokollkette.
Fachprüfung Rechnungswesen, Sonderfälle und Ketten, Prozesskatalog, neue Prüfdimensionen, Prozessvarianten, SAP-Abgleich, Variantenläufe
Stimmt die Buchhaltung fachlich – nicht nur technisch? Die Fachprüfung prüft jeden Prüfbeleg Zeile für Zeile gegen einen Buchungssatz-Katalog, stimmt den Abschluss ab und lässt optional eine KI als Zweitprüfer drüberschauen.
Szenarien 97f: jeder Geschäftsvorfall gegen den Katalog – Konten, Seiten, Beträge, Steuer.
Szenarien 97g: Saldenliste, Bilanz, GuV, Saldovortrag, Nebenbücher, UStVA, Periodensperre.
9 Buchungsregeln über alle Belege der Datenbank.
Stichprobe der Belege durch eine KI – nur Hinweise, nicht freigaberelevant.
config/buchungssaetze.json: 29 Geschäftsvorfälle mit 86 erwarteten Buchungszeilen und 9 Steuerschlüsseln (je mit UStVA-Kennzahl und Norm). Zeilen können $variablen, Kontoalternativen und optionale Zeilen enthalten.buchungssaetze.json bucht der Vorfall „mahngebuehr“ (Nordlicht, BuKr NL1) die Verzugszinsen auf 7100. Die Vorfälle des Demo-Kunden (SKR03) sind unverändert.fi-gebucht-ohne-siegel und fi-siegel-kette prüfen das (siehe Konsistenzregeln: neu in v46).cefd1ba sind ausdrücklich geprüft: B99s-5 (Stichtagssaldo nach Saldovortrag), B99s-6 (Jahresabschluss bei Ergebnis ≠ 0), B99s-7 (AfA-Lauf / AfA auf Finanzanlage).| Regel | Erfüllt, wenn … |
|---|---|
| fp-rechnung-partnerzeile | die Partnerzeile einer Rechnung auf der richtigen Kontoart (Debitor/Kreditor) steht |
| fp-abstimmkonto-kontenfindung | das Abstimmkonto der Kontenfindung entspricht |
| fp-reverse-charge-spiegel | bei Reverse Charge Vorsteuer und Umsatzsteuer gespiegelt sind und Basis × Satz ergeben |
| fp-skonto-steuerkorrektur | ein Skonto die Steuer anteilig korrigiert (bei Fremdwährung in Belegwährung verglichen) |
| fp-erfolgskonto-nach-abschluss | nach einem Jahresabschluss keine Erfolgsbuchung mehr in das abgeschlossene Jahr fällt – außer einer Korrektur mit anschließend wiederholtem Saldovortrag (Differenz-Abschluss) |
| fp-storno-ohne-rest | ein Storno den Originalbeleg ohne Restbetrag aufhebt |
| fp-ic-verrechnung-seite | Intercompany-Verrechnungen auf der richtigen Seite stehen |
| fp-warenbewegung-eigenkapital | keine Warenbewegung auf ein Eigenkapitalkonto bucht; Erstbestand (Bewegungsart 561/562) gegen das Saldenvortragskonto ist zulässig |
| fp-afa-finanzanlage | keine AfA auf Finanzanlagen gebucht wird |
Die neuen Szenarien und Regeln decken bestehende Fehler auf. Rote fp-Befunde im ersten Lauf nach der Einführung sind erwartet – sie gehören als App-Fehler in den Prüfauftrag, nicht in eine Ausnahme.

Storno, Retoure, Abschluss und modulübergreifende Ketten verursachen im Betrieb die meisten Fehler. Eigene Szenarien prüfen sie mit Abstimmregeln bis ins Hauptbuch.
| Datei | Inhalt | IDs |
|---|---|---|
| 99a–99d | Sonderfälle je Kernprozess: Vertrieb/Einkauf, FI/CO, Branchen, Personal/Projekte (Storno, Korrektur, Retoure, Ablehnung, Abschluss, Wiedereröffnung) | sf-… |
| 99k | Prozessketten: Order-to-Cash komplett, Procure-to-Pay mit Preisabweichung (3-Wege-Match), Intercompany zwischen Buchungskreisen (Header X-Active-Company-Code), Monats-/Jahresabschluss, Bestand ↔ FI | ke-… |
99-Z-zeit-* laufen immer zuletzt; Sonderfälle und Ketten laufen davor mit der eingefrorenen Uhr (21.10.2026). Alle Datumswerte sind trotzdem ausdrücklich gesetzt.sd-menge-geliefert, sd-menge-fakturiert, mm-menge-fakturiert, auftrag-kopf-summe) zählen Storno-Belege, stornierte Materialbelege und Abschlags-/Anzahlungspositionen nicht mit – wie SAP: die Rechnungsmenge einer Bestellung zählt erst mit dem gebuchten FI-Beleg (MIRO), eine Retouren-Gutschrift gehört zum Retourenauftrag. aa-afa-plan rechnet übernommene AfA (Altanlagen) mit ein.finally zurückgesetzt.inventory/sonderfall-matrix.md./api/fi/balance-sheet liest den Stichtag aus year/month.Der Prozesskatalog scenarios/prozesskatalog.json listet jede fachliche Prozessvariante mit Erwartung und den Szenarien, die sie prüfen. Er ist die Messlatte für das Kriterium „Alle Prozessvarianten des Katalogs geprüft“.
| Status | Bedeutung | Stand 30.10. |
|---|---|---|
| abgedeckt | mindestens ein Szenario prüft die Variante; Zustand im Lauf grün, Befund, abgebrochen, nicht gelaufen | 7.921 |
| Lücke | kein Szenario und keine Entscheidung – nach vier Lückenrunden keine mehr offen | 0 |
| nicht angeboten | die App bietet die Variante nicht an: Produktentscheidung offen bzw. Umsetzung geplant (überwiegend offene SAP-Umsetzungspakete aus dem SAP-Abgleich, inventory/sap-abgleich.json, inventory/sap-abgleich-ergaenzung.json, inventory/sap-umsetzungspakete.md; sie werden abgedeckt, sobald die Umsetzung mit ihrem Szenario 96s-sap-* auf dem Prüfstand ist) | 56 |
| ausgenommen | bewusst nicht Gegenstand der Prozessprüfung; Pflichtbegründung ≥ 15 Zeichen (sonst Lücke); zählt nicht in Prüfmenge und Quote | 881 |
| gesamt | Varianten im Katalog | 8.858 |
inventory/kataloge/ (je Bereich Prozesse, Varianten, Erwartungen).scenarios/code-zuordnung/katalog-*.json: katalog-entscheidungen.json (Status, Begründung, ausdrückliche Szenario-Zuordnung – auch für dynamisch erzeugte Szenario-IDs), katalog-sonderfall.json, katalog-sap.json.node scripts/build-process-catalog.mjs --stand <JJJJ-MM-TT> inventory/kataloge/*.md; Optionen --out <datei> (Vorgabe scenarios/prozesskatalog.json) und --ohne-entscheidungen.--vergleich <datei> schreibt das Skript nichts, sondern vergleicht mit dem vorhandenen Katalog – erwartet sind 0 Abweichungen (sonst Exit 1).Die Dateien 98a–98m (IDs lk-… bis lk4-…, Lückenrunden 1–4; Feld runde in katalog-entscheidungen.json) schließen Katalog-Lücken bereichsweise (FI, CRM/Personal/Handel, Plattform, Marktplatz/Treasury, CCM/NGO/Filiale, FI/HR/Einkauf, Abweisungen, Plattform-Module, FSV/Ausgabe, Lohn/GaLaBau/NGO, Rest). 98k prüft die Vorbedingungen der Klasse-c-Ausnahmen (Vier-Augen nur als Plattformvorlage, Zeitablauf ohne Stichtag): wird es rot, ist die Ausnahme neu zu entscheiden. Grundsätze: Vier-Augen nur mit echtem zweitem Benutzer, Zeitablauf nur über Stichtag oder Job der App; Customizing, das ein Szenario vorübergehend umschaltet, wird in finally zurückgesetzt. Entscheidungsarten je Lücke: neues Szenario, Zuordnung korrigiert (ein vorhandenes Szenario erreicht den Zustand nachweislich), Szenario mit Befund (bleibt rot bis zur App-Korrektur), ausgenommen, nicht angeboten. Szenarien mit dynamisch erzeugter ID werden über katalog-entscheidungen.json den Varianten zugeordnet.
Die Szenarien 96s-sap-p0…p7-* (IDs sap-p…) weisen die SAP-Umsetzung je Paket nach; ihre Zuordnung steht in inventory/sap-zuordnung-*.json und wird mit katalog-sap-umsetzung.json in den Katalog übernommen. Umgesetzt und nachgewiesen sind P0, P1, P2, P5 (Branchen, Projekte, Abo, Facility, Handel/Filiale, Service, CRM: u. a. Wartungsfreigabe, Reparatur-Rückgabe, Abo-Gutschrift und Kündigungsrücknahme, Kassentag mit Bestand, Fakturierungsplan, Agentur-Zinslauf, Umlage nach Belegung, CCM-Termin sperren, Chargeback; Szenarien 96s-sap-p5-*), P4 (Personal & Lohn: Rückrechnung, SEPA-Exportlauf, Lohnkonto, Rückrechnungsgrenze, LStB-Korrektur, Reisekosten-Korrektur, SFN-Zuschläge, zweistufige Abwesenheitsgenehmigung, Spesen in Fremdwährung, Zeiterfassung nach CATS, Betriebsrat bei Stellenanforderungen) und P7. Zwei P4-Szenarien schalten Einstellungen vorübergehend um und setzen sie in finally zurück (sap-p4-spesen-fremdwaehrung/-reisekosten-korrektur das Modul DocCap, sap-p4-rueckrechnungsgrenze Rückrechnungsgrenze und Sammelsperre 2025). Mehrere P4-Szenarien melden sich als zweite Person an (Vier-Augen) – das erhöht die Zahl der Anmeldungen je Lauf.
| Datei | Inhalt | IDs |
|---|---|---|
44m-plattform-modulfreigabe | Plattform: Modulfreigabe je Tenant durch den Super-Admin. Katalog und Paketvorlagen lesen, Freigabestand des Tenants Demo-Kunde (Messdienst), Entzug durch den Super-Admin (Schalter des Kunden wird ausgeschaltet, Audit-Eintrag), Tenant-Sicht (Modul als nicht freigegeben, Menü aus, Aktivieren 403 MODULE_NOT_LICENSED, Ausschalten erlaubt, Modulroute wie deaktiviert, Daten bleiben), Abweisungen (Abhängigkeit 409 MODULE_DEPENDENCY, Kernbereich/unbekanntes Modul/Paket 400, Plattform-API mit Mandantensitzung 403), Änderungsverlauf, erneute Freigabe ohne automatische Aktivierung. Setzt Freigabe und Schalter im finally zurück. | m-modulfreigabe |
9v-varianten-o2c, -p2p, -fertigung, -anlagen | generierte Prozessvarianten – siehe Prozessvarianten (9v) | 9v-… |
21d-lgd-einkauf-varianten | angepasst: Mehrlieferung beim Wareneingang ohne gepflegte Toleranz wird abgewiesen (fehlende Toleranz = 0 %, wie SAP); erst danach wird die Toleranz geprüft | — |
Reiter Prozesse: Kachel und Filter „ausgenommen“ mit Begründung; Lücken und nicht gelaufene Varianten stehen im Prüfauftrag (Paket „Prozessvarianten“ je Bereich).
Vier Ebenen erweitern den Lauf über die Fachlichkeit hinaus. Alle arbeiten nur gegen die QS-Instanz, legen eigene Wegwerf-Objekte an (Kürzel ZZ-SI, QSLT …) und verändern keine Golden-Daten.
Alle vier Dimensionen sind eingebaut und laufen im vollen Lauf mit (im Schnelllauf aus). Zusammen verlängern sie den Lauf um etwa 10 Minuten. Die Kriterien aus rules.json › kriterien fließen in die Freigabe-Entscheidung ein; ein Kriterium entfällt, wenn seine Ebene nicht gelaufen ist.
| Phase / Szenario | Position im Lauf | Was geprüft wird | Abschalten / Umfang |
|---|---|---|---|
| Barrierefreiheit | nach Oberfläche | Top-30-Masken mit axe-core (WCAG 2.1 AA); Mobilansicht 390 px: waagrechtes Scrollen, abgeschnittene Bedienelemente, Touch-Ziele < 24 px (Beobachtung). Befunde mit Schlüssel barrierefrei:axe:* / barrierefrei:mobil:*. | Standard aus – einschalten unter Einstellungen › Prüfumfang; QSGATE_A11Y=off schaltet hart ab, QSGATE_A11Y_MASKEN |
| KI-Zweitprüfung | nach Szenarien | siehe Fachprüfung Rechnungswesen; Schlüssel ki-hinweis:* sind flüchtig (nicht freigabe- und nicht vergleichsrelevant). | Einstellungen › KI |
| Sicherheit | nach Fehleingaben | Mandantentrennung lesen/ändern/löschen (eigene ZZ-SI-Objekte, fremder Mandant „Nordlicht“) plus Stichprobe von 30 Objekt-Endpunkten; Buchungskreistrennung; SQL-Injection-Muster, gespeichertes XSS (Ausführung im Browser geprüft), Path Traversal, übergroße Nutzlast, Mass Assignment; manipulierte JWT, Sperre nach Abmeldung, schreibende Routen ohne Token. Schlüssel sicherheit:*. | QSGATE_SICHERHEIT=off, QSGATE_SICHERHEIT_UI=off, QSGATE_SICHERHEIT_STICHPROBE, QSGATE_SICHERHEIT_OHNEAUTH |
| Nebenläufigkeit (erweitert) | wie bisher | neu: gleichzeitige Materialentnahmen über Bestand, doppelter Zahlungsausgleich; Warenausgang über Bestand erwartet jetzt die Negativbestand-Sperre (höchstens ein Ausgang angenommen, Bestand nie negativ). | — |
| Last | nach Nebenläufigkeit | 8 virtuelle Benutzer in 6 Rollen auf typischen Lese-/Schreibpfaden; Befund bei 5xx, doppelten Nummern, unvollständig gebuchten Rechnungen oder p95 über Schwelle (Lesen 2 s, Schreiben 5 s). Perzentile nur als Info, verglichen wird „Schwelle eingehalten“. Schlüssel last:*. | QSGATE_LAST=off, QSGATE_LAST_VU, QSGATE_LAST_ITER, QSGATE_LAST_P95_LESEN_MS, QSGATE_LAST_P95_SCHREIBEN_MS |
| Datenmigration (Szenario 97m, dm-*) | Szenarien | Stammdatenimport, Eröffnungsbilanz mit Abstimmung der Saldenliste, Cutover-Anfangsbestände (nicht doppelt, Storno zurück auf Ausgangsstand), MCP-Import; Fehlerprotokoll bei kaputten Zeilen, Wiederholbarkeit. | — |
| Kriterium | Art | Gewicht |
|---|---|---|
| Keine Mandanten-/Buchungskreis-Durchgriffe | Muss | 10 |
| Keine kritischen Sicherheitsbefunde | Soll | 10 |
| Last: Datenintegrität (keine Dubletten, keine Halbbuchungen, kein 5xx) | Soll | 5 |
| Last: Antwortzeiten unter Schwelle | Soll | 2 |
| Keine kritischen Barrierefreiheitsverstöße | Soll | 5 |
| Mobilansicht ohne Mängel | Soll | 2 |
| Datenmigration (dm-*) fehlerfrei | Soll | 5 |
Im Cockpit erscheinen die Befunde mit den Klassen „Sicherheit“, „Last“ und „Barrierefreiheit“. Erste Ergebnisse (lokal): Sicherheit 219 Prüfungen ohne Befund, Last ohne Befund; Barrierefreiheit u. a. Kontrast des roten Zähler-Badges, Icon-Schaltflächen ohne Beschriftung, Filter-Auswahlfelder ohne Label.
QSGATE_LAST_VU (1–20), QSGATE_LAST_ITER; Schwellen QSGATE_LAST_P95_LESEN_MS, QSGATE_LAST_P95_SCHREIBEN_MS; aus mit QSGATE_LAST=off.QSGATE_SICHERHEIT_STICHPROBE, Vorgabe 30).tenant_id, isAdmin).QSGATE_SICHERHEIT_OHNEAUTH, Vorgabe 150). Aus mit QSGATE_SICHERHEIT=off.QSGATE_A11Y_MASKEN) mit axe-core nach WCAG 2.0/2.1 A+AA bei 1.440 px: Verstöße „critical“/„serious“ sind Befunde, „moderate“/„minor“ nur Information.QSGATE_A11Y=off schaltet unabhängig von der Einstellung ab. Ist die Ebene aus, entfallen auch ihre Kriterien in der Bewertung.Szenarien 97m (IDs dm-…): Stammdaten-Import mit Abgleich von Anzahl und Summen gegen die Datei, Fehlerprotokoll mit richtiger Zeilennummer und idempotenter Wiederholung; Eröffnungsbilanz mit Abstimmung der Saldenliste und Storno; Cutover-Anfangsbestände; Import über den KI-Assistenten (MCP).
rules.json › kriterien)| Kriterium | Gewicht | Quelle |
|---|---|---|
| Keine Mandanten- oder Buchungskreis-Durchgriffe (lesen, ändern, löschen) | 10 | Sicherheit |
| Keine kritischen Sicherheitsbefunde (Injection, XSS-Ausführung, Token, Abmeldung, Aktionen ohne Anmeldung) | 10 | Sicherheit |
| Unter Last kein Serverfehler, keine doppelte Nummer, keine unvollständige Buchung | 5 | Last |
| Antwortzeiten unter Last im Rahmen (p95 Lesen ≤ 2 s, Schreiben ≤ 5 s) | 2 | Last |
| Keine kritischen Barrierefreiheitsverstöße in den Kernmasken | 5 | Barrierefreiheit |
| Kernmasken in der Mobilansicht ohne waagrechtes Scrollen und abgeschnittene Bedienelemente | 2 | Barrierefreiheit |
| Datenmigration plausibel, abgestimmt und wiederholbar | 5 | Szenarien dm-… |
Ist eine Ebene nicht gelaufen oder abgeschaltet, entfällt ihr Kriterium (wie bei Rechten und Nebenläufigkeit).
Statt jede Abfolge von Hand zu schreiben, beschreibt ein Zustandsmodell je Belegkette, welche Schritte wann zulässig sind. Ein Generator erzeugt daraus reproduzierbar Pfade – Teillieferung, Storno, Storno vom Storno, Gutschrift, Retoure … – und prüft jeden Schritt bis ins Hauptbuch.
Der Reiter „Prozessvarianten“ im Prozess-Studio zeigt die Varianten des Prozesskatalogs. Dieses Kapitel beschreibt die generierten Variantenszenarien 9v-….
Modelle liegen in src/varianten/modelle/. Jede Aktion hat pruefe(z) (zulässig, abgewiesen mit erwarteten Fehlercodes und Begründung, oder null = Verhalten nicht festgelegt – solche Übergänge werden nicht erzeugt) und wende(z) (Folgezustand).
| Modell | Kette | Beispiele für erwartete Abweisungen (wie SAP) | Übergänge |
|---|---|---|---|
| O2C | Auftrag 10 St. → Teil-/Restlieferung 601, Überlieferung, WA-Storno 602, Storno vom Storno, Rechnung, Gutschrift, Rechnungs-/Gutschrift-Storno, Retoure, Auftragsstorno | Rechnungsstorno bei gebuchter Gutschrift (409), WA-Storno nach Faktura (VL09), Lieferung über Auftragsmenge, Retoure ohne Ware beim Kunden | 24 |
| P2P | Bestellung → Teil-/Rest-WE 101, Überlieferung, WE-Storno 102, Rücklieferung 122, WE-bezogene Rechnung, Rechnung mit Preis-/Mengenabweichung, RE-Storno, Bestellstorno | Rechnung mit Abweichung wird gesperrt; Mehrlieferung ohne gepflegte Toleranz | 20 |
| Fertigung | FA → Freigabe → Entnahme 261 → Storno 262 → Rückmeldung 101 mit Abschluss → FA-Storno | Entnahme bzw. Rückmeldung vor der Freigabe | 16 |
| Anlagen | Zugang → AfA-Lauf → Abgang durch Verschrottung oder Verkauf | Storno des Zugangs nach dem Abgang | 13 |
scenarios/9v-varianten-o2c.mjs, -p2p, -fertigung, -anlagen (laufen nach 9m und vor den Zeitsprung-Szenarien). Szenario-IDs 9v-<modell>-<hash der Aktionsfolge> bleiben stabil, solange die Aktionsfolge gleich ist; dazu je Modell 9v-<modell>-abdeckung mit den Abdeckungszahlen als Wert.config/buchungssaetze.json bzw. als Spiegel seines Originals, Soll = Haben, Kontosalden über alle Belege des Pfads, Bestand, offene Posten, Status.ZZ-9V-…, eigener Kunde/Lieferant, eigene Anlagenklasse): die Pfade sind voneinander und von der Reihenfolge unabhängig. Hinweis: der AfA-Lauf ist mandantenweit und bucht auch fällige AfA fremder Anlagen (wie 31a/33/99-A).| Variable | Bedeutung |
|---|---|
QSGATE_VARIANTEN_STUFE | voll (Vorgabe: Tiefe 5, 12 Pfade je Modell, alle Übergänge, ≈ 4 min) · woche (Tiefe 7, 150 Pfade je Modell, volle Paarabdeckung, ≈ 23 min – für den Wochenlauf) · aus |
QSGATE_VARIANTEN_TIEFE | Pfadtiefe (1–12), überschreibt die Vorgabe der Stufe |
QSGATE_VARIANTEN_ANZAHL | Pfade je Modell (0–500) |
QSGATE_VARIANTEN_SEED | Seed des Generators (Vorgabe qs); ein anderer Seed ergibt andere, wieder reproduzierbare Pfade |
QSGATE_VARIANTEN_EXPORT | Verzeichnis: jede Variante schreibt ihre Buchungen als <ID>.json und <ID>.csv (Grundlage des SAP-Vergleichs) |
QSGATE_VARIANTEN_EXPORT=<Verzeichnis>. Spalten des CSV: REFKEY, VORGANG, BUKRS, BELNR, GJAHR, BLART, BUDAT, XBLNR, STORNO_ZU, BUZEI, HKONT, SHKZG, DMBTR, MWSKZ, MATNR, MENGE, SGTXT.9V-<hash>-<Schritt> als Referenz (XBLNR) eintragen, alternativ in Zuordnung oder Kopftext.;, , oder Tab und deutsche Zahlen werden erkannt.node src/varianten/sap-abgleich.mjs --variante <ID>.json --sap sap.csv [--konten zuordnung.json] [--schluessel XBLNR] [--toleranz 0.01] [--json ergebnis.json]. Zuordnungsdatei: {"konten":{"1400":"140000",…},"steuer":{"A19":"A1"}}.Automatisch gegen ein SAP-Testsystem: Kapitel SAP-Abgleich. Modell erweitern: neue Aktion mit pruefe/wende/api ergänzen, für nicht festgelegtes SAP-Verhalten null liefern und test/varianten.test.mjs erweitern. Stand 31.10.2026: alle vier Modelle in Stufe „woche“ grün; die mit den Varianten gefundenen App-Fehler (Überlieferung ohne Toleranz, WA-Storno nach Retoure/Faktura, Retoure zu stornierter Lieferung, Fertigung vor Freigabe, 262-Storno, Anlagen-Zugangsstorno nach Abgang) sind behoben. Noch nicht modelliert: Zahlung/OP-Ausgleich, Mahnung.
„Im Zweifel so wie SAP“ – messbar gemacht: Die optionale Phase „SAP-Abgleich“ liest das Customizing eines angebundenen SAP-ECC-Testsystems und vergleicht es mit dem realERP-Customizing des QS-Gates; mit ausdrücklicher Freigabe bucht sie zusätzlich Vergleichsfälle in SAP und stellt sie den realERP-Belegen gegenüber.
Ergebnisse stehen nur in run.sapAbgleich und in DATA_DIR/sap-abgleich.json; Beobachtungen der Ebene sap-abgleich sind Hinweise und fließen weder in den Vergleich mit der Referenz noch ins Urteil. Fehlen die Umgebungsvariablen, endet die Phase sofort mit Status „uebersprungen“ und einem Hinweis – kein Fehler, kein Befund.
Prüfstand → realERP-Backend (realerpdev, Mandant mit der hinterlegten sap_rfc-Verbindung) → Integration-Runtime (/runtime/rfc/*) → SAP. Der Prüfstand spricht nie direkt mit SAP; er meldet sich wie ein Benutzer am realERP-Mandanten an.
/api/cfg/account-determination, movement-types, fi-doc-type-map, /api/accounts/accounts, /api/cfg/tax-codes.config/sap-abgleich-zuordnung.json stellt SAP-Vorgänge (BSX, WRX, PRD, GBB-xxx …) den realERP-Vorgängen mit Soll-/Haben-Seite gegenüber, dazu Belegarten, Steuerkennzeichen und Toleranzen. Kontonummern werden nur verglichen, wenn eine Kontenzuordnung vorliegt – aus der Datei oder aus dem Migrationsprojekt (SAPREF_PROJECT_ID, Wertzuordnung Domäne gl_account).Laufen nur, wenn am Prüfstand SAPREF_SCHREIBEN=1 gesetzt und an der sap_rfc-Verbindung im Integration Hub von realerpdev der Schalter „Schreiben erlaubt“ eingeschaltet ist (Tenant-Admin mit settings:update; Vorgabe aus, jede Änderung wird protokolliert). Gebucht wird nur über eine fest eingebaute Liste freigegebener BAPIs; ohne beides wird nichts geschrieben.
| Fall | Ablauf in SAP | Gegenstück in realERP |
|---|---|---|
| P2P Teil-WE, Rechnung mit Preisabweichung | Bestellung → WE 101 → Eingangsrechnung | Export der Variante p2p mit Aktionsfolge we_teil → re_preis |
| O2C mit Gutschrift | Auftrag → Lieferung → Warenausgang → Faktura → Gutschrift mit Bezug | Export der Variante o2c |
| Inventurdifferenz 701/702 | Inventurbeleg anlegen, zählen, Differenz buchen | noch keins – Hinweis und Mengenprüfung auf SAP-Seite |
| Umbuchung 301 | Warenbewegung 301 | noch keins – Hinweis und Mengenprüfung auf SAP-Seite |
Danach werden BKPF/BSEG, MSEG, EKBE und VBFA gelesen und je Vorgang (WE, RE, WA, Faktura, Gutschrift) mit dem realERP-Belegexport der Prozessvarianten verglichen (Verzeichnis QSGATE_VARIANTEN_EXPORT bzw. SAPREF_REALERP_EXPORT; die passende Variante wird über Modell und Aktionsfolge gewählt). Geprüft: Rollen-Summen je Soll/Haben, Steuer, Preisdifferenz (PRD), Mengen in MSEG/EKBE und Bestand. Fehlt ein Beleg auf einer Seite, ist das eine eigene Abweichung (z. B. „realERP sperrt die Rechnung, SAP bucht sie“).
| Art | Bedeutung |
|---|---|
| fehlt-in-realerp | SAP kennt den Vorgang / die Bewegungsart / Belegart, realERP nicht |
| abweichung | beide kennen ihn, aber mit anderer Kontenrolle, Richtung, Wertfortschreibung, Toleranz oder Steuer |
| nicht-pflegbar | in realERP fest im Code bzw. nicht als Customizing pflegbar |
| hinweis | zur Information, z. B. Vergleichsfall ohne realERP-Gegenstück, kein FI-Beleg in SAP gefunden |
Nur als Umgebungsvariablen des Prüfstand-Dienstes setzen – nie in Dateien, Makros oder dieses Handbuch. Werte (insbesondere Benutzer und Passwort) vergibt der Betrieb.
| Variable | Bedeutung |
|---|---|
SAPREF_API_URL | API-Adresse der realERP-Instanz mit der SAP-Verbindung (Pflicht) |
SAPREF_TENANT | Mandant (Tenant), in dem die sap_rfc-Verbindung hinterlegt ist (Pflicht) |
SAPREF_CLIENT | Mandanten-/Client-Nummer der Anmeldung (optional, sonst Vorgabe des Prüfstands) |
SAPREF_USER · SAPREF_PASSWORD | Benutzer dieses Mandanten mit migration:read, für Vergleichsfälle zusätzlich migration:update (Pflicht) |
SAPREF_CONNECTION_ID | optional: ID der RFC-Verbindung; ohne sie ermittelt der Prüfstand die Verbindung selbst und bevorzugt beim Schreiben eine mit „Schreiben erlaubt“ |
SAPREF_PROJECT_ID | optional: Migrationsprojekt, dessen Kontenzuordnung für den Kontonummernvergleich verwendet wird |
SAPREF_SCHREIBEN | optional: 1 schaltet die schreibenden Vergleichsfälle ein (zusätzlich Schalter an der Verbindung nötig) |
SAPREF_REALERP_EXPORT | optional: Verzeichnis des realERP-Belegexports, falls abweichend von QSGATE_VARIANTEN_EXPORT |
QSGATE_SAP_ABGLEICH | off schaltet die Phase ab |
node scripts/sap-abgleich.mjs [--json] [--ausgabe <Verzeichnis>] – gleiche Umgebungsvariablen; ohne sie „übersprungen“ mit Exit 0.
Phase im Lauf: nach der KI-Zweitprüfung. Was erst mit echtem Zugang feststeht: ob die zustandsbehaftete SOAP-RFC-Sitzung BAPI und Commit in einem Kontext ausführt (sonst meldet der Prüfstand „kein FI-Beleg … Sitzung zustandsbehaftet?“), releaseabhängige Parameter und die Berechtigungen des SAP-RFC-Benutzers. Nach dem ersten Lauf mit gesetzten Variablen das Ergebnis unter run.sapAbgleich prüfen.
Fehler, die nur in einer bestimmten Reihenfolge oder zu einer bestimmten Uhrzeit auftreten, findet ein Lauf auf festem Stand nie. Variantenläufe mischen die Szenario-Reihenfolge oder stellen die Uhr auf kritische Zeitpunkte – und vergleichen nur, ob etwas rot wird.
run.variante (Zeit, Ziel, DB-Zeitzone bzw. Reihenfolge-Modus und Seed); der Lauf-Kopf nennt die Variante im Hinweis.POST /api/v2/runs/:id/baseline sind gesperrt.Wert von QSGATE_SZENARIO_ORDER / reihenfolge | Wirkung |
|---|---|
name (Vorgabe) | feste Reihenfolge nach Dateiname – normaler, freigaberelevanter Lauf |
shuffle:<seed> | Dateien deterministisch gemischt (gleicher Seed = gleiche Reihenfolge); Szenarien innerhalb einer Datei behalten ihre Folge |
umgekehrt | Dateien in umgekehrter Reihenfolge |
Die Zeitsprung-Dateien 99-Z-zeit-* bleiben immer zuletzt (Muster änderbar mit QSGATE_SZENARIO_ORDER_ZULETZT). Modus, Seed und Dateifolge stehen in run.szenarioReihenfolge.
QSGATE_ISOLATION=<max. Anzahl> schaltet ein (Vorgabe aus). Ablauf: ein Reset (QSGATE_RESET_CMD lokal, sonst Deploy-Hook bzw. Neustart wie vor manuellen Läufen), danach laufen die roten Szenarien einzeln. Ohne Reset-Möglichkeit wird sie übersprungen; QSGATE_ISOLATION_OHNE_RESET=1 erzwingt sie auf dem Stand nach dem Lauf (nur Indiz).isolation:<id> mit dem Ergebnis:| Ergebnis | Bedeutung |
|---|---|
| reihenfolgeabhaengig (Befund) | im Verbund rot, einzeln auf frischem Stand grün – das Szenario hängt vom Datenstand anderer ab (oder die App von vorherigen Vorgängen) |
| auch-einzeln-rot | auch einzeln rot – echter Fehler, unabhängig von der Reihenfolge |
| infrastruktur | im Verbund nur HTTP 0 (keine Antwort) – kein fachliches Problem |
| nicht-gelaufen | einzeln kein Ergebnis (Szenario lief in der Einzelwiederholung nicht) |
Die Phase meldet dem Server den gewollten Neustart (resetting), damit der Lauf nicht als „überholt“ gilt. Kosten: ein Reset (2–5 min) plus die Szenarien. Lokal: node scripts/isolationspruefung.mjs --beobachtungen <observations.json.gz|Laufverzeichnis> oder --ids a,b [--je-szenario].
Das QS-Gate läuft unter libfaketime; eine Zeit-Variante stellt die Uhr vor „Datenbank vorher“ auf einen kritischen Zeitpunkt (UTC). Die Uhr läuft danach weiter – „monatsende“ überschreitet nach 30 Minuten den Monatswechsel, gewollt.
Wert von QSGATE_ZEIT / zeit | Zeitpunkt (UTC) | Was es aufdeckt |
|---|---|---|
monatsende | letzter Tag des Golden-Monats 23:30 (= 00:30 Uhr Berlin am Folgetag) | gemischte Datumsquellen UTC/Berlin, Periodenwechsel |
jahreswechsel | 31.12. 23:30 | Preisgültigkeit, Geschäftsjahr; ein WE erhält Buchungsdatum 01.01. des Folgejahres – 409 FISCAL_PERIOD_MISSING ist erwartet, solange im Golden-Record keine Perioden für das Folgejahr angelegt sind (wie SAP bei nicht offener Periode) |
zeitumstellung | letzter Oktober-Sonntag 00:30 (30 min vor der Umstellung) | Sommer-/Winterzeit |
schaltjahr | nächster 29.02. 12:00 | Schalttag |
JJJJ-MM-TT hh:mm | frei | — |
QSGATE_DB_ZEITZONE bzw. dbZeitzone (IANA-Name, z. B. Pacific/Kiritimati, America/Los_Angeles) setzt die Datenbank-Zeitzone für diesen Lauf; ruhende App-Verbindungen werden beendet, damit sie sofort gilt.QSGATE_APP_TZ (Vorgabe UTC) und QSGATE_DB_TZ (Vorgabe Europe/Berlin) in backend/qsgate/start.sh.frozenToday kommt im Variantenlauf von der verstellten Uhr. Am Ende stellt der Prüfstand die DB-Zeitzone zurück und die Uhr auf „Golden-Zeit + Laufdauer“; protokolliert werden App-Uhr, DB-Uhr, DB-Datum und Abstand.POST /api/v2/start mit {"zeit":"monatsende"}, {"dbZeitzone":"Pacific/Kiritimati"} und/oder {"reihenfolge":"shuffle:42"}.QSGATE_SZENARIO_ORDER, QSGATE_ZEIT, QSGATE_DB_ZEITZONE. Für den Normalbetrieb nicht dauerhaft setzen – sonst ist kein Lauf mehr freigaberelevant.node scripts/instabil-analyse.mjs <abweichungen.csv> ordnet wechselnde Abweichungen eines Laufs Ursachen zu: Datenstand (Szenario soll auf eigene Daten filtern), Schrittfolge (bedingte Schritte verschieben die Nummern), Nummernversatz, asynchron, Reihenfolge (Listen ohne Sortierung – App-Befund), Zufallscode, interne IP-Adresse. Die beiden letzten sind in rules.json normalisiert (siehe Normalisierung); die übrigen werden im Szenario oder in der App behoben, nicht weg-normalisiert.
Schnittstelle, Dienste, Golden-Record, Rollen
/api/v2Alles, was das Cockpit zeigt, liefert die JSON-Schnittstelle /api/v2 – für Coding-KI, Automatisierung und eigene Auswertungen.
Authorization: Bearer <Zugangspasswort des Prüfstands>. Das Passwort erhalten Sie vom QS-Team; es gehört nie in Code, Tickets oder Unterlagen.{"error":"nicht angemeldet"}. Über die Schnittstelle gesetzte Freigaben tragen den Namen „API“.| Aufruf | Liefert / bewirkt |
|---|---|
GET /meta | angemeldeter Name, Reset-Methode, Ebenen |
GET /overview | Daten des Cockpits: letzter Lauf, laufender Lauf, Trend, Referenz, Freigabe-Entscheidung |
GET /runs · GET /runs/:id | alle Läufe (mit goldenStand) · ein Lauf mit Index, Abweichungen, Freigabe-Entscheidung |
GET /runs/:id/… | endpoints, area?name=, dialogs, code-coverage, processes, causes, obs?key=, search?q=&layer=&status=, scenario/:sid |
GET /history · /stability · /performance · /key-history?key= | Befund-Verlauf, Stabilität, Leistung, Verlauf einer Prüfung |
GET /compare?a=&b= | freier Vergleich zweier Läufe |
GET /compare/seite?a=&b=&offset=&limit=&kind=&layer=&area=&q= | Vergleich seitenweise mit Filtern über alle Treffer; Ergebnis je Laufpaar zwischengespeichert |
GET /chain | Protokollkette mit Prüfergebnis |
GET/POST /triage | Befund-Bearbeitung lesen / setzen |
POST /runs/:id/approve | Abweichungen freigeben/ablehnen: ids, reason (Pflicht), decision |
POST /runs/:id/baseline | Lauf als Referenz übernehmen (nur ohne offene Abweichungen), reason; für Variantenläufe gesperrt |
POST /runs/:id/nur-testaenderung | reine Testerweiterung festhalten: reason, nachweis – abgelehnt, wenn sich die App-Quellen unterscheiden |
POST /runs/:id/eine-freigabe | Anordnung des Inhabers „eine Freigabe genügt“: reason, angeordnetVon |
POST /start | Lauf starten (mit Reset, sofern eingerichtet; reset: false ohne). Mit {"modus":"schnell", "dateien":[…], "basis":"<commit>"} ein Schnelllauf – Antwort ok, wartet, freigaberelevant: false. Variantenlauf mit zeit (monatsende, jahreswechsel, zeitumstellung, schaltjahr, JJJJ-MM-TT hh:mm), dbZeitzone und/oder reihenfolge (shuffle:<seed>, umgekehrt) – siehe Variantenläufe |
GET /runs/:id/export/pruefauftrag.md | Prüfauftrag; Parameter gesamt=1, key= (mehrfach), bereich=, klasse=, ebene=, befunde=0, abweichungen=0 |
GET /runs/:id/export/pakete | Prüfauftrag in Paketen: Übersicht als JSON (ohne Inhalt) – Kennung, Titel, Priorität mit Grund, Zuständigkeit, Zeilen, Teile |
GET /runs/:id/export/pakete.zip | alle Pakete und 00-uebersicht.md als ZIP |
GET /runs/:id/export/pakete/<datei> | ein Paket als Markdown, z. B. 00-uebersicht.md; Parameter ?max= (Zeilen je Datei, 400–5.000, Vorgabe 1.500) |
GET /runs/:id/export/schema-abgleich.md | Schema-Abgleich Code ↔ Datenbank |
GET /runs/:id/export/befunde.csv · abweichungen.csv · abdeckung.csv | CSV-Exporte |
/studio/… | Prozess-Studio: Prozesse, Makros (lesen, speichern, löschen, export.mjs), Wiedergabe (play, control, session), Aufnahme, Assistent, KI-Einstellungen (/studio/ki, Block pruefung für die KI-Zweitprüfung) |
curl -H "Authorization: Bearer $QS_PASSWORT" https://<prüfstand>/api/v2/overview – das Passwort nur aus einer Umgebungsvariablen lesen.
Außerhalb von /api/v2: /gesund (Erreichbarkeit, ohne Anmeldung; mit laeuft und wartet), /api/status (laufender Lauf, Warteschlange mit wartendem Stand, geplantem Start und Deploy-Modus), /lauf/:id/protokoll.pdf|.md|.json, /lauf/:id/release-notes.md, /klassisch (klassische Ansicht).
qsgate)Docker-Dienst. Beim Start: eigene PostgreSQL im Container, Reset auf den Golden-Record, Uhr eingefroren, dann App-Start.
Static Site – die echte Oberfläche, vom Prüfstand für Masken, Klickpfade und das Prozess-Studio genutzt.
Docker-Dienst mit Disk /data. Erkennt neue Versionen, führt den Lauf in eigenem Thread aus; das Cockpit bleibt bedienbar.
QSGATE_APP_TZ (App, Vorgabe UTC) und QSGATE_DB_TZ (Datenbank, Vorgabe Europe/Berlin). Das Buchungsdatum der App ist der Geschäftstag in Europe/Berlin. Verstellen nur über einen Variantenlauf.QSGATE_MAX_RPM) und 14 Anmeldungen je 15 Minuten (QSGATE_MAX_AUTH_15MIN); im QS-Testsystem sind beide angehoben (4.500 bzw. 450), passend zu den angehobenen Limits der QS-API.| Variable | Wirkung |
|---|---|
QSGATE_PARALLEL · QSGATE_PARALLEL_CONFIG | Grad der parallelen Szenario-Phase (Vorgabe 3, 1 = nacheinander) · anderer Pfad für config/parallel.json |
QSGATE_DEPLOY_MODUS · QSGATE_BRANCH | auto (Vorgabe) oder fenster · beobachteter Zweig im Modus „fenster“ (Vorgabe qsgate) |
QSGATE_UEBERHOLT_FRIST_S | Frist, bis ein überholter Lauf hart beendet wird (900 s) |
QSGATE_MODUS · QSGATE_SCHNELL_DATEIEN · QSGATE_GIT_DIR | Kommandozeile: schnell · geänderte Dateien (Komma) · Verzeichnis für git diff bei --seit |
QSGATE_MAX_RPM · QSGATE_MAX_AUTH_15MIN | Anfragen je Minute (450) · Anmeldungen je 15 Minuten (14) |
QSGATE_RECHTE_AUSNAHMEN | anderer Pfad für config/rechte-ausnahmen.json |
QSGATE_KI_MAX · …_MAX_TOKENS_LAUF · …_MAX_TOKENS_ANFRAGE · …_MAX_KOSTEN | Budget der KI-Zweitprüfung, solange im Cockpit nichts gespeichert ist |
QSGATE_GOLDEN_KONSISTENZ · QSGATE_APPLOG · QSGATE_KONSISTENZ_JE_DATEI | off schaltet Golden-Konsistenz, App-Log bzw. die Konsistenz je Szenario-Datei ab |
QSGATE_APP_LOG | lokale Log-Datei der App als Quelle der Phase App-Log (auf Render liest der Prüfstand die QS-Route) |
QSGATE_VARIANTEN_STUFE · …_TIEFE · …_ANZAHL · …_SEED · QSGATE_VARIANTEN_EXPORT | Prozessvarianten 9v: voll/woche/aus, Pfadtiefe, Pfade je Modell, Seed · Exportverzeichnis – siehe Prozessvarianten |
QSGATE_SZENARIO_ORDER · QSGATE_SZENARIO_ORDER_ZULETZT | name (Vorgabe), shuffle:<seed>, umgekehrt · Muster der Dateien, die zuletzt laufen (Vorgabe 99-Z-zeit-) |
QSGATE_ZEIT · QSGATE_DB_ZEITZONE | Zeit-Variante (monatsende, jahreswechsel, zeitumstellung, schaltjahr, frei) · Zeitzone der Datenbank für den Lauf |
QSGATE_ISOLATION · QSGATE_ISOLATION_OHNE_RESET · QSGATE_RESET_CMD | Isolationsprüfung mit höchstens n Szenarien (Vorgabe aus) · ohne Reset erzwingen · lokaler Reset-Befehl |
QSGATE_FUZZ · …_JE_ROUTE · …_MAX · …_MAX_S · …_TECHNISCH | Datentyp-Fuzzing: aus · Anfragen je Route (3) · Höchstzahl (2.000) · Notbremse in Sekunden (900) · ausgenommene technische Tabellen |
SAPREF_* · QSGATE_SAP_ABGLEICH | SAP-Abgleich (nur Namen, Werte nie in Unterlagen) – siehe SAP-Abgleich · off schaltet die Phase ab |
QSGATE_APP_TZ · QSGATE_DB_TZ · QSGATE_LOG_PUFFER | am QS-API-Dienst (nicht am Prüfstand): Zeitzone der App · Grund-Zeitzone der Datenbank · Größe des Log-Ringpuffers |
QSGATE_LAST · QSGATE_SICHERHEIT · QSGATE_A11Y | off schaltet die jeweilige neue Ebene ab; Barrierefreiheit ist ohnehin standardmäßig aus (Einstellungen › Prüfumfang, QSGATE_A11Y=on nur ohne gespeicherte Einstellung) |
config/)| Datei | Inhalt |
|---|---|
parallel.json | Regeln der parallelen Szenario-Phase: Sammelbereiche, exklusive Bereiche und Dateien |
route-dateien.json | Zuordnung Router-Datei → Bereiche für den Schnelllauf |
rechte-ausnahmen.json | Fehlalarm-Ausnahmen der Rechte-Schicht: muster (regulärer Ausdruck), art „lesend“ (POST, die nur rechnet/prüft/liest) oder „persoenlich“ (eigene Aktion jedes Benutzers), grund ist Pflicht |
buchungssaetze.json | Buchungssatz-Katalog der Fachprüfung Rechnungswesen (auch Soll-Buchungen der Prozessvarianten) |
sap-abgleich-zuordnung.json | SAP-Abgleich: Kontenrollen (SAP-Vorgang ↔ realERP-Vorgang mit Seite), Belegarten, Steuerkennzeichen, Toleranzen, optionale Kontenzuordnung |
node src/cli.js run [--parallel=N] [--schnell --dateien=…|--seit=<ref>] – Lauf bzw. Schnelllauf.node src/cli.js plan [--parallel=N] – Parallel-Plan der Szenario-Phase aus dem Profil der Referenz.node src/cli.js vergleich <laufA> <laufB> [--ebene=szenarien] – Beobachtungen zweier Läufe vergleichen.node scripts/sap-abgleich.mjs [--json] [--ausgabe <dir>] – SAP-Abgleich einzeln; node src/varianten/sap-abgleich.mjs --variante … --sap … – Varianten-Export gegen SAP-CSV.node scripts/isolationspruefung.mjs – rote Szenarien einzeln auf frischem Stand; node scripts/instabil-analyse.mjs <abweichungen.csv> – instabile Abweichungen nach Ursache..github/workflows/pruefstand.yml bei Änderungen unter qsgate/pruefstand/**: npm ci, Syntax aller Quellen und Szenarien, Szenarien laden, Konfiguration prüfen, npm test./data)| Datei | Inhalt |
|---|---|
runs/<lauf>/run.json | Kopf: Version, Zeiten, Zähler, Abdeckung |
runs/<lauf>/observations.json.gz | alle normalisierten Beobachtungen |
runs/<lauf>/deviations.json | Abweichungen gegen die Referenz |
runs/<lauf>/approvals.json | Freigaben je Abweichung |
runs/<lauf>/index-v7.json · sig-v1.json | Lauf-Index und Signatur (Status, Inhalts-Hash, Laufzeit je Beobachtung) – für ältere Läufe im Hintergrund erzeugt |
baseline.json · chain.log | aktuelle Referenz · Protokollkette |
triage.json · macros/ | Befund-Bearbeitung · eigene Makros |
ki.json · ki-fachpruefung-cache.json | KI-Einstellungen (Schlüssel verschlüsselt) · Ergebnis-Cache der KI-Zweitprüfung je Beleg |
sap-abgleich.json | Ergebnis des letzten SAP-Abgleichs (auch im Lauf unter sapAbgleich) |
Nichts wird überschrieben außer Freigaben und Referenz; die Protokollkette wird nur ergänzt. Das QS-Gate verändert keine Kunden- oder Produktivdaten.
Nimmt Kundenprozesse im Prozess-Studio auf und passt Makros an; ordnet Befunde fachlich ein; bereitet die Freigabe-Entscheidung für den Kunden auf. Ansichten: Prozess-Studio, Prozesse, Befunde, Prüfbericht.
Prüft jede Abweichung und gibt sie mit Begründung frei oder lehnt ab; kritische und unangekündigte brauchen zwei Personen. Ansichten: Abweichungen, Freigabe, Protokollkette.
Arbeitet den Prüfauftrag je Ursachen-Gruppe ab, korrigiert in main mit Test und merged nach qsgate. Ansichten: Prüfauftrag, Befund-Detail, Szenarien.
Bestätigt fachliche Erwartungen und Varianten; entscheidet Go-Live auf Basis von GO/NO-GO und Prüfbericht. Ansichten: Cockpit, Prüfbericht, Vergleich.
Die Rechte-Matrix prüft jede schreibende Route gegen jede Rolle: Recht vorhanden → keine Abweisung; Recht fehlt → 401/403; fremder Mandant → 403/404.
| Benutzer | Rolle | Darf schreiben in |
|---|---|---|
| demo-admin | Administrator | allen Bereichen |
| qs-lesen | nur lesen | — (Abweisung erwartet) |
| qs-vertrieb | Vertrieb/CRM | Vertrieb/CRM |
| qs-fi | Finanzbuchhaltung | Finanzen (FI) |
| qs-einkauf | Einkauf | Einkauf |
| qs-lager | Lager | Lager |
| qs-freigeber | Vier-Augen-Freigaben | Freigaben |
Weitere Fachrollen: qs-fertigung, qs-personal, qs-crm, qs-controlling, qs-admin-light. Passwörter stehen nie in Unterlagen oder Makros (dort nur {{password}}).
Das System misst und dokumentiert – Menschen entscheiden: über Abweichungen mit vier Augen, über Go-Live mit dem Kunden.
Häufige Fragen, Begriffe, Änderungen
Nein. Es läuft in einer eigenen Umgebung, deren Datenbank bei jedem Start aus dem Golden-Record neu entsteht.
Der Lauf vom 29.10.2026 dauerte 4 h 08 min. Mit paralleler Szenario-Phase und angehobenen Anfragelimits sind voraussichtlich rund 2 Stunden zu erwarten. Er startet automatisch ca. 3 Minuten nach einer neuen Version; die Restzeit zeigt der Live-Block im Cockpit. Für einen schnellen Zwischenstand gibt es den Schnelllauf.
Während des laufenden Laufs ist ein neuer Stand eingetroffen. Er wird nach dem Lauf automatisch geprüft; kommt ein noch neuerer, ersetzt er den wartenden.
Die API wurde während des Laufs neu deployt (Deploy-Modus „auto“) und hat ihre Datenbank zurückgesetzt – die restlichen Ergebnisse wären falsch. Das Teilergebnis bleibt, der neue Stand wird automatisch geprüft. Abhilfe auf Dauer: Deploy-Modus „fenster“.
Nein. Ein Schnelllauf prüft nur die betroffenen Bereiche, vergleicht nur den Status und ist ausdrücklich nicht freigaberelevant – er kann weder Referenz werden noch ein GO geben.
Muss-Kriterien entscheiden, nicht die Punktzahl – z. B. offene kritische Abweichungen oder ein verschlechtertes Szenario.
Menschen, nicht das System: Jede Abweichung wird begründet freigegeben, kritische und unangekündigte von zwei Personen; dann „Als Referenz übernehmen“.
Abweichung = Unterschied zur Referenz (kann gewollt sein). Befund = im Lauf fehlgeschlagene Prüfung.
Ja. Im Prozess-Studio aufnehmen oder ein fertiges Makro anpassen und „In jeden Prüflauf aufnehmen“ ankreuzen.
Damit Fälligkeiten, Alter und Perioden in jedem Lauf gleich sind – sonst wäre der Vergleich mit der Referenz wertlos.
Läufe, Freigaben und Referenzwechsel stehen in einer per SHA-256 verketteten Protokollkette.
Als Prüfauftrag (Markdown) mit Ursachen-Gruppen und Reproduktion; Korrektur in main, der nächste Lauf bestätigt „behoben“.
Nein. Makros enthalten nur den Platzhalter {{password}}, Prüfaufträge nur $TOKEN; ein KI-Schlüssel wird verschlüsselt gespeichert.
Kategorie lesen: „Fachlich abgewiesen“ oder „Fachliche Erwartung“ prüft der Berater; ist die Ablehnung richtig, wird das Szenario angepasst. Bei „Golden-Daten/Customizing“ wird der Golden-Record ergänzt. Zeitabhängige Prüfungen in Stabilität prüfen.
Es läuft bereits ein Lauf (Hinweis „Lauf läuft“ in der Kopfzeile) – „Lauf starten“ und „Schnelllauf“ sind dann gesperrt. Auch eine laufende Studio-Wiedergabe lässt den Lauf warten.
Die Spalte „Zuständig“ ordnet jeden Befund automatisch ein: App-Fehler → Entwicklung, Testdaten/Szenario → Prüfstand-Team, Customizing/Golden-Record → Berater, Fehlalarm-Verdacht → Prüfstand, Infrastruktur → Betrieb. Den Prüfauftrag gibt es passend dazu in Paketen.
Ein Lauf mit gemischter Szenario-Reihenfolge oder verstellter Uhr/Zeitzone. Belegnummern und Daten verschieben sich dabei gewollt, darum wird nur verglichen, ob Prüfungen rot werden. Er ist nicht freigaberelevant und kann keine Referenz werden – siehe Variantenläufe.
Dann ist es vermutlich reihenfolgeabhängig. Die Isolationsprüfung (QSGATE_ISOLATION) bestätigt das automatisch mit dem Ergebnis „reihenfolgeabhaengig“; das Szenario sollte seine Voraussetzungen selbst anlegen und auf eigene Daten filtern.
Am Prüfstand sind die SAPREF_*-Variablen nicht gesetzt. Die Phase ist optional und nicht freigaberelevant; Einrichtung im Kapitel SAP-Abgleich.
Über die Schaltfläche „Handbuch“ in der Kopfzeile des Cockpits – sie springt zum Kapitel des aktiven Menüpunkts (Sprungmarke #<menü-id>).
9v-…: Pfade durch ein Zustandsmodell einer Belegkette.scenarios/*.mjs), läuft über die API bis zum Endzustand.Jede Änderung, die Anwender sehen oder bedienen, ändert im selben Commit das Handbuch mit (siehe AGENTS.md). Neueste Einträge oben.
| Datum | Änderung |
|---|---|
| 31.10.2026 – v46 | Stand v46 des Prüfstands:
|
| 31.10.2026 | Golden-Ergänzung 052; Hinweis Fehleingaben: Die Phase wiederholt echte Aufrufe mit leerem Inhalt – Routen, die ohne Pflichtauswahl massenhaft ändern (z. B. automatischer Ausgleich), verfälschen sonst spätere Konsistenzbefunde. |
| 31.10.2026 | Letzte Befunde: Szenario 23 enthält die Preisänderung mit Umbewertung (MR21) und prüft Bewertung = Konto; Open-Banking-Szenarien (81, 45e) legen ihr Bankjournal mit Zwischenkonto an und prüfen die Abweisung ohne Zwischenkonto; lk3-fp-vorschlag-rueckgaengig wählt den Vorschlag nach Konfidenz; Golden-Ergänzung 051. |
| 31.10.2026 | Guards wie SAP: neues Szenario 30p-fi-guards-sap (Referenz Pflicht je Belegart wie OBA7, Kontowährung, Storno mit Folgebeleg, Guard-Matrix); Prüfketten GUARD-MATRIX und GO/NO-GO aus Proben; Konsistenzregel fi-offene-posten: Teilausgleich, Lösen und OP-Zuordnung ziehen Kopf-Rest und Status beider Belege aus den Posten. |
| 31.10.2026 | Bewertung und Anlagen: Golden-Ergänzungen 043–046 und 050; Szenarien prüfen Inventurdifferenz mit FI-Beleg, kostenlose Lieferung 511 (Standardpreis/gleitender Durchschnitt), Bewertungswert 0 ohne FI-Beleg, Standardpreis bei Bestand nicht direkt änderbar (409, wie MR21), Wareneingang mit Preisdifferenz; Anlagenübernahme nur mit Übernahme-Verrechnungskonto; Aufräumen nach Storno prüft den bereits erfolgten Ausgleich; MCP-Schlüssel des Prüfstands mit Limit 1000/min. |
| 31.10.2026 | Restpunkte: Golden-Ergänzungen 040/041, Golden 042 Preisdifferenzkonto, neue Start-Zeilenzahl 299.835 (Referenz neu setzen); Fachprüfung Abschluss vergleicht die Bestandsbewertung je Buchungskreis über alle Werke mit 1600 (MB5L); Szenario lk3-pf-einzelzustaende legt seine Rückstellung selbst an. |
| 31.10.2026 | Befund-Runde Läufe ab6e1a7/c17aeff: Golden-Ergänzungen 024 (Konto „Erhaltene Anzahlungen“), 025, 036–039 (Altdaten-Korrekturen, siehe Betrieb); Szenarien legen ihre Voraussetzungen selbst an (Intercompany-Konto 8338, Verrechnungsregel, eigene Kontonummern/GTIN-Präfixe, eigenes Mahnfenster 880 Tage); Kundenanzahlung mit Zahlung vor Verrechnung; Klickpfad Projektabrechnung mit zweiter Person (Einreichen durch abo-freigabe, Genehmigung durch den Vorgesetzten); zweite Browser-Sitzung übernimmt die eingefrorene Uhr; Pflichtfeld-Inventar neu erzeugt (Stand 30.10.). |
| 30.10.2026 | Befund-Runde Lauf c6ca39b: Zeitsprung-Szenarien laufen zuletzt; geänderte Konsistenzregeln (Mengen/Summen ohne Storno und Abschläge, Skonto in Belegwährung, Differenz-Abschluss, Erstbestand gegen Saldenvortrag, übernommene AfA); Klickpfad Storno bucht sofort; Prüfkette Seed-Abdeckung in Produktion übersprungen; Go/No-Go G7–G9 mit Spalte „Reaktion auf Verstoß“; Golden-Ergänzungen 009 (Konto 4200 Feldstatus STOCK) und 023 (Seed-Stornopaare ausgeglichen). |
| 30.10.2026 | Läufe: Kennzeichen „ohne Reset?“ vergleicht die Startzeilen mit der eigenen Referenz (wie das Freigabekriterium) statt mit dem kleinsten Wert aller Läufe – kein Fehlalarm mehr, wenn der Golden-Record durch neue Deltas wächst. |
| 30.10.2026 | Abweichungen: Sammelfreigabe meldet, wie viele kritische bzw. unangekündigte Abweichungen auf die zweite Person warten (Vier Augen); Hinweis unter der Liste; Schaltfläche „Eine Freigabe genügt (n)“ für die Inhaber-Anordnung in der Kopfzeile des Laufs. Begründungen für Referenz und Anordnung werden in einem Formular in der Seitenleiste erfasst (statt Browser-Eingabefenster, das eingebettete Browser unterdrücken); „Als Referenz übernehmen“ setzt bei ausschließlich offenen Teilfreigaben Anordnung und Referenz in einem Schritt. |
| 30.10.2026 | SAP-Pakete P4 (Personal & Lohn, 96s-sap-p4-*) und P5 (Branchen/Service/CRM, 96s-sap-p5-*); Prozesskatalog 7.921 abgedeckt / 0 Lücken / 56 nicht angeboten; Statusautomat Instandhaltungsauftrag mit Stufe „freigegeben“ (confirmed, vor „in Arbeit“); Szenario hcd-hr-abwesenheitsarten genehmigt Sonderurlaub zweistufig. |
| 30.10.2026 | Ausbau: Prüfauftrag-Pakete, Zuständigkeit, Schnelllauf, Warteschlange, Fachprüfung Rechnungswesen, KI-Zweitprüfung, Sonderfälle & Ketten, Prozesslücken, neue Prüfdimensionen. Neue Kapitel Schnelllauf, Fachprüfung Rechnungswesen, Sonderfälle & Ketten, Prozesskatalog, Neue Prüfdimensionen (Teil D); erweitert: Ablauf (Warteschlange, Deploy-Modus, parallele Szenarien, Phasen), Befund-Klassen und Befunde (Zuständig), Läufe (Pakete, Hinweis, KI-Zeile), Prozesse (ausgenommen), Vergleich (seitenweise), Einstellungen (KI-Zweitprüfung), Prüfauftrag (Pakete), Schnittstelle, Betrieb, FAQ, Glossar; neue Bildschirmfotos. Barrierefreiheit ist standardmäßig aus (Einstellungen › Prüfumfang). |
| 30.10.2026 | Erstausgabe – alle 22 Menüpunkte, Grundlagen, Arbeitsabläufe, Schnittstelle, Betrieb, FAQ und Glossar. |