diff --git a/.claude/skills/run-experiment/SKILL.md b/.claude/skills/run-experiment/SKILL.md index 710014b0..2110bbff 100644 --- a/.claude/skills/run-experiment/SKILL.md +++ b/.claude/skills/run-experiment/SKILL.md @@ -2,7 +2,7 @@ name: run-experiment description: Führt einen Versuchs-Prompt aus einer Prompt-Datei als messbaren Headless-Lauf aus (claude -p) und schreibt ein Messprotokoll mit Start-/Endzeit, Modell, Tokenverbrauch und weiteren Metriken. Verwenden bei "/run-experiment " oder wenn der User einen Versuch/ein Experiment ausführen und tracken will. argument-hint: -version: 3.10.0 +version: 4.0.0 --- # RunExperiment – Versuchslauf mit Messprotokoll @@ -72,7 +72,22 @@ gilt das Protokoll. für parallele Läufe (siehe „Parallele Läufe") und archiviert nebenbei den exakt gesendeten Prompt je Lauf. `Ergebnisse\` enthält ausschließlich die vom Prompt geforderten Artefakte. -## Ablauf +## Aufbau dieses Skills + +Der Skill ist zweigeteilt: + +- **`## Prozess`** beschreibt werkzeugneutral, **was** je Lauf zu tun und zu erheben ist. Dieser + Teil gilt unabhängig davon, mit welchem LLM oder welcher CLI gearbeitet wird. +- **`## Werkzeugadapter`** beschreibt **wie** das mit einem konkreten Werkzeug umgesetzt wird. + Derzeit ist nur der Adapter für Claude Code ausgearbeitet. + +**Arbeitsteilung mit der Prompt-Datei:** Der Prompt enthält ausschließlich die *Analyseanweisung* +und ist damit von jedem LLM verwendbar. Alles Werkzeug- und Ablaufbezogene – verfügbare +Werkzeuge, Ausgabeverzeichnis, Messgrößen – steuert dieser Skill bei und dokumentiert es im +Protokoll. Die Prompt-Datei wird dabei **nie verändert**; ergänzende Blöcke werden nur an den +per stdin übergebenen Text angehängt (siehe Schritt „Prompt zusammenstellen"). + +## Prozess ### 1. Vorbereitung @@ -177,7 +192,7 @@ Prompt je Lauf. `Ergebnisse\` enthält ausschließlich die vom Prompt geforderte ```powershell # Bedingungen werden Ordnerebenen, nicht Namensbestandteile $zelle = Join-Path (Join-Path $modell $modus) $effort - $skillVer = 'v3.10.0' # entspricht version: im Frontmatter dieses Skills + $skillVer = 'v4.0.0' # entspricht version: im Frontmatter dieses Skills do { $id4 = '{0:x4}' -f (Get-Random -Maximum 65536) $lauf = Join-Path "\$zelle" "_Lauf_$(Get-Date -Format 'yyyy-MM-dd_HHmmss')_${skillVer}-$id4" @@ -232,11 +247,34 @@ committet und im Protokoll dokumentiert. **Das Remote ist entkoppelt.** Im Codebasis-Repo wird niemals gepusht, gefetcht oder ein Remote hinzugefügt. Der Snapshot bleibt eingefroren. -### 2. Ausführung (Headless-Lauf) +### 2. Prompt zusammenstellen -Dem Prompt eine Ausgabe-Anweisung anhängen, damit die Ergebnisse im Laufverzeichnis landen -und nicht im Root. Dazu den Prompttext um einen Abschnitt ergänzen (Prompt-Datei selbst -NICHT verändern – nur den per stdin übergebenen Text): +Dem Prompttext werden **zwei** Blöcke angehängt. Die Prompt-Datei selbst bleibt unverändert – +ergänzt wird nur der per stdin übergebene Text, und dieser wird als `_meta\combined_prompt.md` +archiviert. + +**Block 1 – Werkzeugkontext.** Der Prompt trifft bewusst keine Annahme darüber, welche Werkzeuge +zur Verfügung stehen. Diese Bedingung stellt der Versuchsaufbau bei; sie ist die untersuchte +unabhängige Variable und gehört deshalb hierher, nicht in die Analyseanweisung: + +``` +### Werkzeugkontext (vom Versuchsaufbau vorgegeben) +Für diesen Lauf stehen zur Verfügung: . +Nicht verfügbar sind: . +Triff keine Annahmen über weitere Werkzeuge und versuche nicht, nicht verfügbare +Werkzeuge zu ersetzen. +``` + +Der Inhalt richtet sich nach dem Agentenmodus: + +| Modus | „Zur Verfügung" | „Nicht verfügbar" | +|---|---|---| +| `solo` | Lesen, Suchen und Ausführen von Kommandozeilenbefehlen im Arbeitsverzeichnis | Subagenten, spezialisierte Agentenrollen, externe Werkzeugserver | +| `builtin` | zusätzlich die werkzeugeigenen Subagenten | spezialisierte Agentenrollen aus Konfigurationsdateien, externe Werkzeugserver | +| `custom` | zusätzlich die beigestellten Agentenrollen (namentlich nennen) | externe Werkzeugserver, sofern nicht Teil des Versuchs | + +**Block 2 – Ausgabeverzeichnis.** Damit die Ergebnisse im Laufverzeichnis landen und nicht in +der Codebasis: ``` ### Ausgabeverzeichnis (überschreibt anderslautende Pfadangaben oben) @@ -245,6 +283,8 @@ Schreibe ALLE zu erzeugenden Ergebnisdateien in das Verzeichnis Verändere keine Dateien im Arbeitsverzeichnis (der analysierten Codebasis). ``` +### 3. Ausführung (Headless-Lauf) + Dann den kombinierten Prompt per stdin an `claude -p` übergeben. `--add-dir` gibt dem Headless-Lauf Schreibrecht auf das Laufverzeichnis außerhalb seines Arbeitsverzeichnisses. Versuchsläufe können lange dauern – **immer als Background-Task starten** (`run_in_background`), @@ -347,7 +387,7 @@ Regeln: der Tokenverbrauch. Anhaltspunkt: Der bisher aufwendigste Lauf verbrauchte 55.167.397 Tokens. - Nach Abschluss des Background-Tasks: Endzeit mit `Get-Date -Format o` erfassen. -### 3. Ergebnis auswerten +### 4. Ergebnis auswerten `RawResult.json` im Laufverzeichnis lesen und defensiv parsen (Feldnamen können je nach Claude-Code-Version leicht abweichen). Relevante Felder: @@ -472,6 +512,16 @@ aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` und schreibt `_metanforderung Abrechnung, Berechtigungen brauchen `PRIMÄR` **oder** `[HYPOTHESE]`), Verifizierbarkeit (Prüfidee vorhanden), Traceability (Tracelinks gesetzt) +**Zuordnung zum Evaluationsrahmen (Kap. 4.3).** Die erhobenen Kenngrößen decken die +**maschinell prüfbare** Hälfte der drei Qualitätsdimensionen ab; die Expertenbewertung nach +Likert-Skala bleibt davon unberührt und tritt daneben: + +| Dimension (Kap. 4.3) | Maschinell erhoben | Bleibt der Expertenbewertung | +|---|---|---| +| **Statement-Qualität** | Belegqualität, Primärbelegquote, Anteil mit Prüfidee, Hypothesenanteil, Übernahmewürdigkeit | Eindeutigkeit der Formulierung, sachliche Korrektheit, Verständlichkeit | +| **Set-Qualität** | Verteilung über die Ebenen, Konsolidierungskandidaten, doppelte IDs, Anforderungen ohne Beleg | Vollständigkeit der Prozessabdeckung, Redundanzfreiheit im fachlichen Sinn | +| **Traceability-Qualität** | Anteil mit Tracelinks, Belegklassifikation, Tracelinks auf nicht existierende IDs | Auffindbarkeit des Belegs, Nachvollziehbarkeit der Ableitung | + **Warum das erhoben wird:** Die Anforderungsanzahl allein ist als Qualitätsmaß wertlos – sie streute über Läufe gleicher Bedingung um Faktor 5,9. Belegdichte, Primärbelegquote und Regelverstöße sind dagegen inhaltliche Größen und machen Läufe vergleichbar, deren Mengengerüst @@ -488,7 +538,7 @@ ins Protokoll. Beim Vergleich Zeilenenden normalisieren (`before.txt` entsteht je nach Werkzeug mit CRLF, der Nachher-Stand mit LF), sonst meldet ein naiver `diff` alle Zeilen als geändert. -### 4. Messprotokoll schreiben +### 5. Messprotokoll schreiben Als `Protokoll.md` ins Laufverzeichnis, neben `RawResult.json` und `Stderr.log`. @@ -522,6 +572,10 @@ Vorlage: - **Parallele Läufe:** - **Agentenmodus:** ; bei `custom` zusätzlich Pfad und SHA-256 der Agentendefinitionen +- **Kontextfenster:** +- **Sampling-Parameter:** +- **Nur bei lokalem Modellbetrieb:** Inferenz-Runtime samt Version, Quantisierungsstufe des + Modell-Builds - **Permission-Mode:** - **Toolfreigabe:** `--allowedTools ` / `--disallowedTools ` - **Isolationsmechanismus:** <--safe-mode, --strict-mcp-config, ggf. --setting-sources> @@ -531,6 +585,16 @@ Vorlage: Bei `max_depth` > 1 ausdrücklich vermerken – die Tokens der tieferen Ebenen sind in „Tokens gesamt" enthalten, ihre Prompts jedoch **nicht** in `_meta\subagenten.md` +## Validierungsstichprobe +- **Größe:** +- **Ziehungsverfahren:** +- **Validatoren:** +- **Stand:** | ausgewertet> + +Kapitel 4.3 verlangt, die Stichprobengröße **vor** Versuchsbeginn festzulegen und im +Versuchsprotokoll zu dokumentieren. Ist für den Lauf keine Validierung vorgesehen, hier +`entfällt` eintragen – das Feld darf nicht fehlen. + ## Verbrauch ### Hauptagent (`usage`) @@ -576,12 +640,59 @@ Status, Regelkonformität> - **Anmerkungen/Auffälligkeiten:** ``` -### 5. Abschlussbericht an den User +### 6. Abschlussbericht an den User Kurz zusammenfassen: Status, Dauer, Tokenverbrauch (inkl. Cache), Modell, Pfad des Laufverzeichnisses und welche Dateien der Lauf erzeugt hat. Bei `is_error` oder leerem Ergebnis: `Stderr.log` und `RawResult.json` zitieren, nicht spekulieren. +## Werkzeugadapter + +Der Prozess oben ist werkzeugneutral. Dieser Abschnitt hält fest, wie er mit einem konkreten +Werkzeug umgesetzt wird und welche Messgrößen dieses Werkzeug liefert. + +### Adapter: Claude Code + +Der einzige derzeit ausgearbeitete Adapter. Alle konkreten Aufrufe, Flags und Feldnamen im +Prozessteil beziehen sich auf ihn; er wurde gegen **CLI 2.1.245** entwickelt und verifiziert. + +**Gelieferte Messgrößen** – vollständig aus `RawResult.json`: + +| Messgröße | Feld | +|---|---| +| Abbruchstatus | `is_error`, `subtype`, `stop_reason`, `terminal_reason` | +| Dauer | `duration_ms`, `duration_api_ms` (Wanduhr wird selbst gemessen) | +| Tokens Hauptagent | `usage.*` inkl. `output_tokens_details.thinking_tokens` | +| Tokens gesamt inkl. aller Subagenten-Ebenen | `modelUsage` je Modell-ID | +| Tatsächlich eingesetzte Modelle | Schlüssel von `modelUsage` | +| Verweigerte Werkzeugaufrufe | `permission_denials` | +| Subagenten | `subagent_stats` inkl. `spawned_by_subagents`, `max_depth`, `failed` | +| Sitzungskennung für Transcript-Analyse | `session_id` | + +**Nicht erfasst:** Sampling-Parameter wie Temperatur sind über die CLI nicht steuerbar und +werden nicht ausgewiesen; der Effort steht **nicht** in `RawResult.json` und ist nur über das +Session-Transkript belegbar (siehe Schritt 6 der Vorbereitung). + +### Weitere Adapter (für Versuch 4 nachzurüsten) + +Kapitel 4 der Arbeit sieht einen LLM-Querschnitt über Codex CLI, Qwen Code CLI über LM Studio +und DeepSeek über die Cloud-API vor. Diese Adapter sind noch nicht ausgearbeitet. Damit ein +Lauf als Messpunkt taugt, muss ein Adapter mindestens liefern: + +| Pflichtangabe | Zweck | +|---|---| +| Modell-ID und Kontextfenster | Bedingung dokumentieren | +| Input- und Output-Tokens | Aufwandsvergleich | +| Dauer | Aufwandsvergleich | +| Abbruchstatus | Gültigkeit des Laufs | +| Erzeugte Artefakte | Ertrag | +| Sampling-Parameter, soweit steuerbar | Reproduzierbarkeit (Kap. 4.3) | +| Bei lokalem Betrieb: Runtime samt Version, Quantisierungsstufe | Reproduzierbarkeit (Kap. 4.3) | + +Was ein Adapter nicht liefern kann, wird im Protokoll ausdrücklich als `nicht erfasst` +ausgewiesen – niemals geschätzt. Fehlen mehrere Pflichtangaben, ist der Lauf nur eingeschränkt +mit Claude-Code-Läufen vergleichbar; das gehört in die Anmerkungen des Protokolls. + ## Randbedingungen - Niemals Messwerte schätzen oder erfinden – fehlt ein Feld im JSON, im Protokoll als @@ -638,6 +749,7 @@ der Historie unten – im selben Arbeitsschritt. | **3.8.0** | **Pflichtprüfung der tatsächlich eingesetzten Modelle.** `modelUsage` ist nach jedem Lauf gegen das angeforderte Modell abzugleichen; neue Protokollfelder „Modell (angefordert)", „Modelle (tatsächlich eingesetzt)" und „Kontrolle Modell". | `--model` steuert nur den Hauptagenten. Im Lauf `fable5_builtin_ehigh_v3.7.0-15db` liefen die 13 Subagenten auf `claude-opus-5[1m]` statt auf Fable – 91 % des Verbrauchs entfielen auf ein nicht angefordertes Modell, und der Lauf wurde mit 150,3 Mio. Tokens der teuerste der Reihe. Ohne diese Prüfung bleibt die Bedingungsverletzung unbemerkt. | ab sofort; Gegenprüfung der 23 Vorläufe ergab keine weiteren Fälle | | **3.9.0** | **Pflichtabschnitt „Gefundene Anforderungen" im Protokoll.** Neues Skript `analyse-anforderungen.py` wertet die erzeugten Anforderungen aus: Verteilung, Typen, Belegqualität (`PRIMÄR`/`SEKUNDÄR`/`KONTEXT`), Status, Konsolidierungskandidaten und **Regelkonformität gegen die Vorgaben des Prompts**. | Die Protokolle maßen bis dahin nur den Aufwand, nicht den Ertrag. Die reine Anforderungsanzahl taugt nicht als Qualitätsmaß (Streuung Faktor 5,9 bei gleicher Bedingung); Belegdichte und Regelverstöße sind inhaltliche Größen. Erste Anwendung deckte sofort Verstöße gegen die risikobasierte Priorisierung auf. | rückwirkend auf alle 24 Protokolle angewandt | | **3.10.0** | **Bedingungen als Ordnerstruktur statt im Dateinamen.** Ablage unter `\\\`; der Verzeichnisname lautet wieder `_Lauf__v-`. Neues Protokollfeld „Ablage". | Der Name wuchs mit jeder unabhängigen Variable und war mit fünf Bestandteilen kaum lesbar. Als Ordnerebenen sind die Bedingungen navigierbar, je Zelle unmittelbar abzählbar und um weitere Variablen erweiterbar, ohne bestehende Namen zu brechen. | rückwirkend auf alle 24 Läufe angewandt | +| **4.0.0** | **Ausrichtung auf Kapitel 4 der Arbeit.** Skill zweigeteilt in `## Prozess` (werkzeugneutral) und `## Werkzeugadapter` (konkrete Aufrufe, derzeit nur Claude Code). Der Prompt trägt nur noch die Analyseanweisung; Werkzeugkontext und Ausgabeverzeichnis werden zur Laufzeit angehängt. Versuchszuordnung korrigiert: **V1 = `solo`, V1b = `builtin`**. Neue Protokollfelder: Kontextfenster, Sampling-Parameter, lokale Runtime-Angaben, Abschnitt Validierungsstichprobe. Abschnitt „Gefundene Anforderungen" den drei Qualitätsdimensionen zugeordnet. | Prompt und Skill waren über 24 Läufe organisch gewachsen und stellenweise nicht mehr deckungsgleich mit Kap. 4. Der Prompt enthielt Aussagen zur Werkzeugkonfiguration, die dort nicht hingehören und ihn an Claude Code banden; der Skill verankerte weder den Evaluationsrahmen noch die von Kap. 4.3 geforderten Reproduzierbarkeitsangaben. MAJOR, weil sich die Zuordnung der Versuchsbedingungen ändert. | ab sofort | ## Parallele Läufe @@ -671,13 +783,22 @@ verwenden. ## Zuordnung Versuch ↔ Agentenmodus +Nach Kapitel 4 der Arbeit (Versuchsdesign): + | Versuch | Modus | Bedeutung | |---|---|---| | **V1** – Baseline (Prompt-only) | `solo` | Ein Thread, ein Kontext; keine Subagenten | -| **V1b** – Baseline mit internen Agenten | `builtin` | Eingebaute Subagenten (`Explore`, `general-purpose`) | -| **V2** – Agentengestützt | `custom` | Nur vordefinierte, geprompte Agenten aus `--agents` | +| **V1b** – Baseline mit werkzeugeigenen Agenten | `builtin` | Eingebaute Subagenten des Werkzeugs zugelassen | +| **V2** – Agentengestützt | `custom` | Rollenspezialisierte Agentendateien: Stakeholder, System, Software, ISO-29148-Orchestrator | +| **V3** – Werkzeugzugriff | `custom` + MCP | Wie V2, zusätzlich externe Werkzeugserver | -**Einordnung der bisherigen Läufe:** Die Läufe 1–6 in `Versuche/Versuch_01/` liefen sämtlich mit -eingebauten Subagenten und gehören damit fachlich zu **V1b**, nicht zu V1. Sie belegen weiterhin -die Laufvarianz unter `builtin`, sind aber keine Baseline-Messung im Sinne der neuen Definition. -Bei der Auswertung entsprechend zuordnen. +**Abgrenzung V1 gegen V1b.** Die Arbeit unterscheidet zwischen *Agentendateien* (V2) und den +*werkzeugeigenen* Subagenten, die eine CLI von sich aus mitbringt. Letztere sind keine +Konfigurationsartefakte und damit nach dem Wortlaut von V1 nicht ausgeschlossen – ihr Einsatz +verändert die Ergebnisse jedoch erheblich. V1b trennt beide Fälle, sodass der Effekt der +werkzeugeigenen Delegation getrennt vom Effekt der rollenspezialisierten Agentendateien +messbar wird. + +**Bisherige Läufe.** Die 24 Läufe in `Versuche/Versuch_01/` verteilen sich auf V1 (`solo`) und +V1b (`builtin`). Die Ordnerstruktur macht die Zuordnung unmittelbar sichtbar; die Zellen sind +über `ls // | wc -l` abzählbar. diff --git a/.claude/skills/run-experiment/analyse-anforderungen.py b/.claude/skills/run-experiment/analyse-anforderungen.py index 874570b5..936c029f 100644 --- a/.claude/skills/run-experiment/analyse-anforderungen.py +++ b/.claude/skills/run-experiment/analyse-anforderungen.py @@ -54,6 +54,7 @@ def analysiere(lauf): konsolidierung=feld(b, 'Konsolidierung'), pruefidee=feld(b, 'Prüfidee') or feld(b, 'Pruefidee'), qm=feld(b, 'Qualitätsmerkmal'), + uebernahme=feld(b, 'Übernahmewürdigkeit') or feld(b, 'Uebernahmewuerdigkeit'), )) return anf @@ -88,6 +89,20 @@ def abschnitt(anf): kons = [a for a in anf if a['konsolidierung'] and a['konsolidierung'].lower() != 'nein'] mit_qm = [a for a in anf if a['qm']] + # Uebernahmewuerdigkeit: erst ab Prompt-Fassung 2026-08-26; aeltere Laeufe kennen das Feld nicht + uebern = collections.Counter() + for a in anf: + v = a['uebernahme'].lower() + if not v: + continue + for schl in ('übernehmen', 'workaround', 'sonderfall', 'veraltet'): + if schl in v: + uebern[schl] += 1 + break + else: + uebern['(sonstige Angabe)'] += 1 + mit_uebern = sum(uebern.values()) + risiko = [a for a in anf if RISIKO.search(a['typ'] + ' ' + a['titel'])] risiko_ungedeckt = [a for a in risiko if 'PRIMÄR' not in a['belege'] and not a['hypothese']] @@ -97,6 +112,11 @@ def abschnitt(anf): z = ['## Gefundene Anforderungen', '', 'Maschinell aus `Ergebnisse\\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet ' '(Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`.', '', + 'Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus ' + 'Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, ' + 'Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und ' + 'Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach ' + 'Likert-Skala tritt daneben und wird hier nicht ersetzt.', '', '### Verteilung über die Ebenen', '', '| Ebene | Anzahl | Anteil |', '|---|---:|---:|'] for eb in EBENEN: @@ -122,6 +142,20 @@ def abschnitt(anf): pct(sum(1 for a in anf if 'PRIMÄR' in a['belege']), n)), ''] + z += ['### Übernahmewürdigkeit', ''] + if not mit_uebern: + z += ['**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der ' + 'Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. ' + 'Hinweise auf Workarounds stecken ersatzweise im Feld `Status`.', ''] + else: + z += ['| Einstufung | Anzahl | Anteil |', '|---|---:|---:|'] + for k in ('übernehmen', 'workaround', 'sonderfall', 'veraltet', '(sonstige Angabe)'): + if uebern.get(k): + z.append('| %s | %d | %s |' % (k, uebern[k], pct(uebern[k], n))) + if n - mit_uebern: + z.append('| **ohne Angabe** | %d | %s |' % (n - mit_uebern, pct(n - mit_uebern, n))) + z.append('') + z += ['### Status', '', '| Kategorie | Anzahl | Anteil |', '|---|---:|---:|', '| belegt | %d | %s |' % (n - len(hyp), pct(n - len(hyp), n)), '| als `HYPOTHESE` gekennzeichnet | %d | %s |' % (len(hyp), pct(len(hyp), n)), @@ -145,6 +179,10 @@ def abschnitt(anf): z.append('| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | %s |' % ('**erfüllt**' if not ohne_pruef else '**verletzt** – %d ohne Prüfidee' % len(ohne_pruef))) + z.append('| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | %s |' + % ('*nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26)' if not mit_uebern + else ('**erfüllt** (alle %d Anforderungen eingestuft)' % n if mit_uebern == n + else '**verletzt** – %d von %d ohne Angabe' % (n - mit_uebern, n)))) z.append('| **Traceability** – Verknüpfung zwischen den Ebenen | %d von %d mit Tracelinks (%s) |' % (n - len(ohne_trace), n, pct(n - len(ohne_trace), n))) z.append('') diff --git a/Kapitel/04_konzeption_methodisches_vorgehen/04_02_versuchsdesign.typ b/Kapitel/04_konzeption_methodisches_vorgehen/04_02_versuchsdesign.typ index a9218ce5..07824fbf 100644 --- a/Kapitel/04_konzeption_methodisches_vorgehen/04_02_versuchsdesign.typ +++ b/Kapitel/04_konzeption_methodisches_vorgehen/04_02_versuchsdesign.typ @@ -31,6 +31,8 @@ Der Versuchsaufbau folgt einer schrittweise aufbauenden Vergleichslogik. Versuch / Versuch 1 (Baseline, Prompt-only): Reine Prompt-Steuerung ohne Agentendateien und ohne externe Tools. Die Hypothese lautet, dass eine formal strukturierte Anforderungsmenge bereits ohne Spezialisierung erreichbar ist, allerdings mit begrenzter Discovery-Breite und ohne dynamische Code- oder Datenbeobachtung. +/ Versuch 1b (Baseline mit werkzeugeigenen Agenten): Wie Versuch 1, jedoch mit den Subagenten, die das eingesetzte Werkzeug von sich aus mitbringt. Diese Subagenten sind keine Agentendateien im Sinne von Versuch 2, sondern eine Funktion der CLI. Der Versuch trennt damit den Effekt werkzeugeigener Delegation vom Effekt rollenspezialisierter Agentendateien. Die Hypothese lautet, dass die Delegation die Discovery-Breite erhöht, zugleich aber die Streuung zwischen Läufen deutlich vergrößert, weil das Werkzeug die Zerlegung der Analyse selbst wählt. + / Versuch 2 (Spezialisierung über Agenten): Wie Versuch 1, ergänzt um rollenspezialisierte Agentendateien für Stakeholder-Analyse, System-Requirements, Software-Requirements und einen ISO-29148-Orchestrator. Die Hypothese lautet, dass Spezialisierung die Strukturierungstiefe und die Normkonformität erhöht, ohne die Discovery-Breite signifikant zu verschlechtern. / Versuch 3 (Toolzugriff über MCP-Server): Wie Versuch 2, ergänzt um strukturierten Tool-Zugriff über MCP. Vorgesehen sind drei Server für Symbol-Navigation auf Code-Ebene, für Datenbank-Inspektion auf Schema- und Datensatzebene sowie optional für GUI-Beobachtung. Die Hypothese lautet, dass strukturierter Tool-Zugriff die Discovery-Breite vergrößert und zuvor undokumentierte Use Cases sichtbar macht, allerdings zu Lasten erhöhter Steuerungskomplexität. @@ -53,9 +55,19 @@ Der Versuchsaufbau folgt einer schrittweise aufbauenden Vergleichslogik. Versuch - Formal strukturierte Spezifikation erreichbar - Discovery-Breite begrenzt ], - [V2 Agenten], + [V1b Werkzeug-Agenten], [ - Wie V1 + - werkzeugeigene Subagenten zugelassen + - keine Agentendateien + ], + [ + - Höhere Discovery-Breite + - Deutlich größere Streuung zwischen Läufen + ], + [V2 Agenten], + [ + - Wie V1b - rollenspezialisierte Agentendateien ], [ @@ -172,4 +184,6 @@ Jede Prompt-Version wird im Versuchsordner mit Zeitstempel und kurzer Notiz zum caption: [Zustandsgraph des Versuchsablaufs. Die Versuche bauen schrittweise aufeinander auf, V4 ist optional. Der finale Prompt eines Versuchs wird zu Beginn des Folgeversuchs an die neu hinzukommende Werkzeugkomponente angepasst und dient dann als Startprompt. Innerhalb jedes Versuchs verfeinert ein Iterations-Loop den Prompt: Lauf → Begutachtung durch den Autor → bei „nein" Prompt-Anpassung, bei „ja" Übergang zum nächsten Versuch.], ) +Abweichend von dieser Aufteilung wurde ein Teil des Modellvergleichs bereits innerhalb von Versuch 1 durchgeführt. Nachdem sich in den Wiederholungsläufen eine unerwartet große Streuung zeigte, wurde derselbe Prompt unter sonst identischer Bedingung zusätzlich mit zwei weiteren Modellen ausgeführt, um zu prüfen, ob diese Streuung modellabhängig ist. Diese Läufe liegen deshalb im Versuchsordner von Versuch 1 und nicht in Versuch 4. Sie ersetzen den dort geplanten LLM-Querschnitt nicht, da sie nur die Baseline-Konfiguration abdecken und nicht die in Versuch 1 bis 3 wirksamste Konfiguration. Ihr Zweck ist die Absicherung der Varianzaussage, nicht der Werkzeugvergleich. + Konstanten und Variablen sind in jedem Versuch klar dokumentiert. In Versuch 1 bis 3 umfassen die Konstanten Codebasis, Iterations-Vorgehen, Modellfamilie, Validierungsstichprobe und Bewertungskriterien. Variabel sind die Werkzeugkonfiguration und der Startprompt jedes Versuchs. Versuch 1 startet mit einem zu Versuchsbeginn neu formulierten Prompt. Versuch 2 und Versuch 3 übernehmen jeweils den finalen Prompt des vorhergehenden Versuchs und passen ihn zu Beginn an die neu hinzukommende Werkzeugkomponente an (Agentendateien in Versuch 2, MCP-Server in Versuch 3). Erst dieser angepasste Prompt bildet den Ausgangspunkt für den Iterations-Loop des Folgeversuchs. In Versuch 4 wird die Logik umgekehrt. Die Werkzeugkonfiguration ist die Konstante, das Modell die Variable. Damit lassen sich Unterschiede in Versuch 1 bis 3 ursächlich der Werkzeugvariation und in Versuch 4 ursächlich der Modellwahl zuordnen. diff --git a/Versuche/AblaufProtokoll.md b/Versuche/AblaufProtokoll.md new file mode 100644 index 00000000..7dded13e --- /dev/null +++ b/Versuche/AblaufProtokoll.md @@ -0,0 +1,342 @@ +# Ablaufprotokoll der Versuchsdurchführung + +**Zeitraum:** 25.–26. August 2026 +**Untersuchungsgegenstand:** c-entron ERP-Suite, eingefrorener Snapshot `79c1142` +**Zweck dieses Dokuments:** Grundlage für den Ergebnisteil der Arbeit (Kapitel 5 und 6). + +Festgehalten wird, wie Prompt und Versuchsaufbau schrittweise entstanden sind, welche Läufe +durchgeführt wurden und welche Erkenntnisse sich daraus ergeben haben. Der methodisch +wesentliche Punkt: **Der Versuchsaufbau ist nicht vorab fertig gewesen, sondern an den Läufen +gewachsen.** Jede Änderung geht auf eine konkrete Beobachtung zurück. Diese Kopplung ist hier +dokumentiert, damit im Ergebnisteil nachvollziehbar bleibt, welche Messung unter welchen +Bedingungen entstand. + +--- + +## 1. Ausgangslage + +Zu Beginn lagen vor: + +- ein Initial-Prompt (`Versuche/Versuch_01/01_Prompt.md`) mit der Analyseanweisung nach + ISO/IEC/IEEE 29148, abgestimmt auf die RRE-Methodenkette aus Kapitel 4 +- ein Skill `run-experiment` (Version 1.0.0), der den Prompt als Headless-Lauf ausführt und ein + Messprotokoll schreibt +- die Codebasis als eigenständiges Git-Repository mit aktivem GitHub-Remote + +Nicht vorhanden waren: eine belastbare Isolationsstrategie, eine Definition der zu erhebenden +Messgrößen über Tokens und Dauer hinaus, und jede Vorstellung davon, wie stark Läufe unter +gleichen Bedingungen streuen. + +--- + +## 2. Chronologie in fünf Phasen + +### Phase 1 – Erster Lauf und die Entdeckung der Werkzeugkonfiguration (12:29–13:00) + +Der erste Lauf offenbarte sofort ein Grundproblem: Das Codebasis-Verzeichnis enthielt genau die +Dinge, die die Versuchsbedingung „keine Agentendateien, keine MCP-Server" ausschließt – eine +`CLAUDE.md` mit 201 Zeilen Projektkontext, `AGENTS.md`, drei projektspezifische Subagenten, +34 Skill-Definitionen, sechs Slash-Commands, elf Serena-Memories und einen aktiven MCP-Server. + +Diese Dateien wurden vor dem Lauf gelöscht und danach per `git restore` zurückgesetzt. + +**Ergebnis:** 96 Anforderungen, 13,1 Mio. Tokens, **36 Permission-Denials** (32 × Bash, +4 × PowerShell). Der Lauf war unter `--permission-mode acceptEdits` gestartet – dieser Modus +erlaubt Dateibearbeitungen, aber keine Shell-Ausführung. Der Agent wich auf Read, Grep und Glob +aus; Verzeichnisinventuren und Dateizählungen standen ihm nicht zur Verfügung. Von rund 85 +Business-Logic-Modulen blieben 55 bis 60 unanalysiert. + +**Auslöser für die erste große Skill-Änderung.** + +### Phase 2 – Werkzeugfreigabe, Isolation und der eingefrorene Snapshot (13:49–15:00) + +Zwei Entscheidungen fielen zusammen: + +**Shell-Zugriff wird Standard.** `--allowedTools "Bash" "PowerShell"` mit einer Denylist von 33 +Einträgen für schreibende und bauende Kommandos. Die Read-only-Eigenschaft der Codebasis wird +weiterhin über den Vorher/Nachher-Vergleich per `git status` nachgewiesen; die Denylist senkt das +Risiko, ersetzt die Verifikation aber nicht. + +**Isolation über `--safe-mode` – und die Erkenntnis, dass das nicht reicht.** Ein Kontrolltest +belegte: `--safe-mode` unterdrückt zuverlässig das *Vorladen* von `CLAUDE.md` als +Systemanweisung – ohne das Flag zitiert der Agent deren Inhalt, mit dem Flag antwortet er +„NICHTS VORGELADEN". Es verhindert jedoch **nicht**, dass der Agent diese Dateien mit +Shell-Zugriff selbst *liest*. Im Smoke-Test tat er genau das. + +Konsequenz: Die KI-Konfigurationen wurden **dauerhaft aus der Codebasis entfernt** (Commit +`79c1142`, 92 Dateien), das GitHub-Remote entkoppelt und der Stand als Versuchssnapshot +eingefroren. Damit ist die Bedingung „keine Agentendateien" eine Eigenschaft des Untersuchungs- +gegenstands und muss nicht pro Lauf hergestellt werden. + +**Lauf 2 brach nach 24 Minuten mit einem API-Transportfehler ab** („The response stopped +arriving"), nachdem vier von sieben Artefakten geschrieben waren. Kein Konfigurationsproblem – +`permission_denials` war 0. + +**Lauf 3** lief vollständig durch: 106 Anforderungen, 11,5 Mio. Tokens, **0 Denials**, +23:40 statt 31:31. Schneller, sparsamer und ergiebiger als Lauf 1 – die Werkzeugfreigabe schien +sich in jeder Dimension auszuzahlen. + +### Phase 3 – Der Varianzbefund (15:05–19:31) + +**Lauf 4** unter identischer Konfiguration lieferte **55 Anforderungen** – knapp die Hälfte von +Lauf 3 – bei *höheren* Kosten. Der Agent hatte diesmal **keinen einzigen Subagenten** gestartet +und stattdessen 147 eigene Turns absolviert. + +Das war der Wendepunkt der Reihe. Die naheliegende Erklärung – die Subagentenzahl bestimmt den +Ertrag – hielt der nächsten Messung nicht stand: **Lauf 5** startete 14 Subagenten und lieferte +**325 Anforderungen** bei 52,7 Mio. Tokens; **Lauf 6** startete ebenfalls 7 wie Lauf 3, lieferte +aber **189 statt 106** Anforderungen bei dreifachem Verbrauch. + +Nicht die *Anzahl* der Subagenten erklärt die Streuung, sondern die *Freiheit*, die Analyse +überhaupt selbst zu zerlegen. + +Um das zu prüfen, wurde der Modus `solo` eingeführt: `Task`, `Agent` und `Workflow` gesperrt, +sodass keine Delegation möglich ist. Ein Verifikationstest bestätigte die Sperre (`spawned: 0`, +Antwort „KEINE SUBAGENTEN MOEGLICH") und deckte dabei auf, dass der Agent nach der Sperre von +`Task`/`Agent` auf `Workflow` auswich – dieses Werkzeug orchestriert ebenfalls Subagenten und +musste ergänzt werden. + +**Fünf Solo-Läufe** (42, 82, 60, 73, 67 Anforderungen) gegen **neun Builtin-Läufe** ergaben: + +| | V1 (`solo`) | V1b (`builtin`) | +|---|---|---| +| Anforderungen | 42 – 82 (Faktor 2,0) | 55 – 325 (Faktor 5,9) | +| Tokens | 4,4 – 12,6 Mio. (Faktor 2,9) | 11,5 – 52,7 Mio. (Faktor 4,6) | +| Median Tokens | 5,1 Mio. | 30,1 Mio. | + +**Zentraler Befund der Reihe.** Die selbstgewählte Zerlegung in Subagenten ist die dominierende +Störgröße. Wird sie unterbunden, halbiert sich die Streuung mehr als, und der Verbrauch sinkt um +Faktor 6. + +### Phase 4 – Modellvergleich und die Grenzen der Steuerbarkeit (19:59–23:10) + +Um zu prüfen, ob die Streuung modellabhängig ist, wurde dieselbe Bedingung mit zwei weiteren +Modellen wiederholt. + +**Opus 5, solo, fünf Läufe:** 71 – 182 Anforderungen (Median 114), 13,6 – 24,9 Mio. Tokens +(Median 22,8). Gegenüber Sonnet: 1,7-mal mehr Anforderungen bei 4,5-fachem Verbrauch, also rund +das 2,7-fache an Tokens je Anforderung. **Die Streuung blieb im selben Rahmen** – der +Modellwechsel verschiebt das Niveau, nicht die Stabilität. + +**Fable 5, solo, Effort `max`, zwei Läufe:** 207 und 148 Anforderungen bei 24,2 und 31,1 Mio. +Tokens – der höchste Solo-Verbrauch der Reihe, vom nominell sparsamsten Modell. Die +Thinking-Tokens (35.220 und 39.609) übertreffen jeden der 21 Vorläufe deutlich; der bisherige +Höchstwert lag bei 24.179. Das spricht für den Effort als Treiber, ist aber **nicht beweisbar**, +weil Modell und Effort gleichzeitig gewechselt wurden. + +**Fable 5, builtin – ein Fehlschlag mit Erkenntniswert.** `--model claude-fable-5` steuerte nur +den Hauptagenten. Die 13 Subagenten liefen auf **`claude-opus-5[1m]`**, dem Standardmodell aus +den Sitzungseinstellungen. Auf sie entfielen 136,7 von 150,3 Mio. Tokens – **91 %**. Eine +Gegenprüfung über alle 24 Läufe grenzte den Fall eindeutig ein: Sonnet und Opus werden an +Subagenten durchgereicht, Fable nicht. + +**Konsequenz:** Bei Modus `builtin` ist das Modell nicht allein durch das Flag festgelegt. Der +Abgleich der tatsächlich eingesetzten Modelle wurde zur Pflichtprüfung. + +### Phase 5 – Nachbereitung und Ausrichtung auf die Arbeit (26.08.) + +Nach Abschluss der Läufe wurden Struktur und Dokumentation konsolidiert: Umstellung der +Kostenangabe auf Tokenverbrauch, Ordnerstruktur nach Bedingungen, maschinelle Auswertung der +erzeugten Anforderungen, Sicherung des Untersuchungsgegenstands im Arbeitsrepository sowie die +Trennung von Analyseanweisung (Prompt) und Prozessvorgabe (Skill). + +--- + +## 3. Entwicklung des Prompts + +Der Prompt blieb inhaltlich über alle 24 Läufe **unverändert** – der SHA-256 +`1B0DB06B…3C02FF` ist in jedem Protokoll dokumentiert. Alle 24 Läufe sind damit +Wiederholungsmessungen desselben Prompts, keine Iterationen im Sinne von Kapitel 4. + +Erst nach Abschluss der Läufe wurde er überarbeitet (2026-08-26): + +| Änderung | Grund | +|---|---| +| Metadaten `Werkzeugkonfiguration` und `Modell` entfernt | Beschreiben den Lauf, nicht die Analyse; gehören ins Messprotokoll | +| Satz „Es stehen weder spezialisierte Agenten noch MCP-Server zur Verfügung" entfernt | Bindet den Prompt an eine Werkzeugkonfiguration; wird zur Laufzeit als Werkzeugkontext beigestellt | +| Feld `Übernahmewürdigkeit` ergänzt (`übernehmen`/`Workaround`/`Sonderfall`/`veraltet`) | Der Evaluationsrahmen (Kap. 4.3) bewertet diese Dimension; bislang steckte sie halb im Feld `Status` und war nicht auswertbar | +| Pflichteigenschaft `Redundanzfreiheit` ergänzt | Ergänzt das vorhandene Feld `Konsolidierung` um die ausdrückliche Abgrenzungsprüfung | +| Konsistenzcheck erweitert | Prüft nun auch fehlende Übernahmewürdigkeit und nicht markierte Doubletten | + +**Damit ist der Prompt werkzeug- und modellneutral** und von jedem LLM verwendbar – eine +Voraussetzung für den in Kapitel 4 geplanten LLM-Querschnitt. + +--- + +## 4. Entwicklung des Versuchsaufbaus (Skill) + +17 Versionen in zwei Tagen. Jede geht auf eine konkrete Beobachtung zurück: + +| Version | Änderung | Auslöser | +|---|---|---| +| 1.0.0 | Ausgangsfassung | – | +| 2.0.0 | Shell-Zugriff + Denylist; Isolation über eingefrorenen Snapshot | 36 Denials in Lauf 1; `--safe-mode` allein unzureichend | +| 2.0.1 | `before.txt` leerwertsicher schreiben | Bei sauberem Root schrieb PowerShell die Datei nicht und ließ alten Inhalt stehen – der Vergleich meldete eine Abweichung, die es nicht gab | +| 2.1.0 | Modell wird vor jedem Lauf erfragt | Das Modell wurde bis dahin ad hoc gewählt | +| 2.1.1 | Warnung zur Snapshot-Prüfung | Ein verkürzter Regex sprach auf echte Produktdateien an (`ClaudeCodeChatModelClient.cs`) | +| 3.0.0 | Agentenmodus als Pflichtparameter (`solo`/`builtin`/`custom`) | Subagenten-Einsatz schwankte zwischen 0 und 14 und war die dominierende Störgröße | +| 3.1.0 | Parallelfähigkeit; Steuerdateien nach `_meta` im Laufverzeichnis | Geteilte Scratchpad-Dateien hätten sich zwischen parallelen Läufen überschrieben | +| 3.2.0 | Modell und Version im Verzeichnisnamen; `Workflow` mitgesperrt | Im Verifikationstest wich der Agent auf `Workflow` aus | +| 3.3.0 | Subagenten-Prompts werden protokolliert | Die selbstgewählte Zerlegung war nur als Zahl sichtbar, nicht inhaltlich | +| 3.4.0 | Effort als dritter Pflichtparameter | Der Denkaufwand wurde nur aus der Sitzung geerbt und nirgends dokumentiert | +| 3.5.0 | Berichtete Aufwandsgröße ist der Tokenverbrauch statt USD | USD-Beträge hängen an Preisliste und Modellwahl und veralten | +| 3.6.0 | Verschachtelte Subagenten verifiziert und dokumentiert | Unbelegt, ob tiefere Ebenen in die Tokensumme einfließen – Kontrolltest belegte es | +| 3.7.0 | Effort im Verzeichnisnamen | Erster `max`-Block; gleichnamige Verzeichnisse hätten verschiedene Bedingungen bezeichnet | +| 3.8.0 | Pflichtprüfung der tatsächlich eingesetzten Modelle | Fable-Lauf: 91 % des Verbrauchs auf einem nicht angeforderten Modell | +| 3.9.0 | Pflichtabschnitt „Gefundene Anforderungen" | Protokolle maßen nur Aufwand, nicht Ertrag | +| 3.10.0 | Bedingungen als Ordnerstruktur statt im Dateinamen | Der Name wuchs mit jeder Variable und war kaum noch lesbar | +| 4.0.0 | Zweiteilung Prozess/Werkzeugadapter; V1 = `solo`, V1b = `builtin`; Evaluationsrahmen verankert | Ausrichtung auf Kapitel 4 der Arbeit | + +**Beobachtung für die Diskussion:** Zehn der sechzehn Änderungen gehen auf Messfehler oder +Fehlannahmen zurück, die erst im Betrieb sichtbar wurden – nicht auf Planungslücken im +klassischen Sinn. Ein Versuchsaufbau für agentische LLM-Werkzeuge lässt sich offenbar nicht +vollständig vorab spezifizieren. + +--- + +## 5. Durchgeführte Läufe + +24 Läufe, 745,2 Mio. Tokens, 3.287 erzeugte Anforderungen. Ein Lauf schlug fehl (Nr. 2, +API-Transportfehler). + +| # | Zeit | Modell | Modus | Effort | Subagenten | Denials | Turns | Tokens | Anforderungen | +|---:|---|---|---|---|---:|---:|---:|---:|---:| +| 1 | 12:29 | sonnet-5 | builtin | high | 8 | **36** | 43 | 13.052.010 | 96 | +| 2 | 13:49 | sonnet-5 | builtin | high | 6 | 0 | 8 | 16.655.125 | 89 *(Abbruch)* | +| 3 | 14:29 | sonnet-5 | builtin | high | 7 | 0 | 69 | 11.516.200 | 106 | +| 4 | 15:05 | sonnet-5 | builtin | high | 0 | 0 | 147 | 27.562.244 | 55 | +| 5 | 15:35 | sonnet-5 | builtin | high | 14 | 1 | 31 | 52.713.542 | 325 | +| 6 | 16:35 | sonnet-5 | builtin | high | 7 | 0 | 29 | 32.568.122 | 189 | +| 7 | 17:31 | sonnet-5 | solo | high | 0 | 0 | 68 | 4.357.855 | 42 | +| 8 | 17:31 | sonnet-5 | solo | high | 0 | 0 | 107 | 12.598.503 | 82 | +| 9 | 18:04 | sonnet-5 | solo | high | 0 | 0 | 72 | 5.659.692 | 60 | +| 10 | 18:04 | sonnet-5 | solo | high | 0 | 0 | 77 | 4.591.733 | 73 | +| 11 | 18:04 | sonnet-5 | solo | high | 0 | 0 | 67 | 5.050.595 | 67 | +| 12 | 18:29 | sonnet-5 | builtin | high | 19 *(9 versch.)* | 2 | 94 | 55.167.397 | 246 | +| 13 | 18:29 | sonnet-5 | builtin | high | 8 | 1 | 84 | 42.204.257 | 238 | +| 14 | 18:29 | sonnet-5 | builtin | high | 20 *(6)* | 0 | 23 | 40.787.325 | 113 | +| 15 | 18:29 | sonnet-5 | builtin | high | 21 *(3)* | 0 | 15 | 44.713.674 | 145 | +| 16 | 18:29 | sonnet-5 | builtin | high | 18 *(6)* | 0 | 33 | 65.101.243 | 239 | +| 17 | 19:59 | opus-5 | solo | high | 0 | 0 | 116 | 13.560.381 | 71 | +| 18 | 19:59 | opus-5 | solo | high | 0 | 1 | 195 | 22.759.401 | 119 | +| 19 | 19:59 | opus-5 | solo | high | 0 | 1 | 177 | 24.860.083 | 114 | +| 20 | 20:00 | opus-5 | solo | high | 0 | 0 | 145 | 24.280.282 | 182 | +| 21 | 20:00 | opus-5 | solo | high | 0 | 0 | 131 | 19.751.531 | 109 | +| 22 | 21:09 | fable-5 | solo | **max** | 0 | 1 | 152 | 24.225.555 | 207 | +| 23 | 21:09 | fable-5 | solo | **max** | 0 | 0 | 162 | 31.073.793 | 148 | +| 24 | 22:07 | fable-5 | builtin | high | 13 | 0 | 28 | **150.340.866** | 172 | + +Die Läufe 7–8, 9–11, 12–16, 17–21 und 22–23 liefen jeweils parallel. Wanduhrzeiten dieser Läufe +sind dadurch verzerrt und nicht für Laufzeitvergleiche verwendbar; Tokenverbrauch, +Anforderungsanzahl und Denials bleiben unverzerrt. + +--- + +## 6. Befunde + +### 6.1 Die Anforderungsanzahl ist kein Qualitätsmaß + +Vier Läufe unter identischer Bedingung (Nr. 3, 4, 5, 6) ergaben 106, 55, 325 und 189 +Anforderungen – Faktor 5,9. Der Unterschied zwischen Lauf 1 (ohne Shell, 96) und Lauf 3 (mit +Shell, 106) liegt vollständig innerhalb dieser Streuung. **Jede Aussage der Form „Konfiguration +X liefert mehr Anforderungen" ist ohne Wiederholungsläufe wertlos.** + +### 6.2 Die einzige robuste Wirkung der Werkzeugkonfiguration ist die Denial-Zahl + +36 Denials ohne Shell-Zugriff, 0 mit. Das ist eine direkte Eigenschaft der Konfiguration und +keine Zufallsgröße. Alle anderen Kennzahlen streuen zu stark. + +### 6.3 Die selbstgewählte Zerlegung dominiert alles + +`solo` gegen `builtin`: Streuung Faktor 2,0 gegen 5,9 bei den Anforderungen, Medianverbrauch +5,1 gegen 30,1 Mio. Tokens. Der Effekt gilt modellunabhängig – die Opus-Reihe zeigt dieselbe +Stabilität im Solo-Modus. + +Bemerkenswert ist die Gegenläufigkeit von Turns und Delegation: Lauf 15 delegierte am stärksten +(21 Subagenten) und brauchte die wenigsten eigenen Turns (15); Lauf 4 delegierte gar nicht und +brauchte 147. **`num_turns` zählt nur den Hauptagenten und ist deshalb kein Aufwandsmaß.** + +### 6.4 Verschachtelte Delegation ist der Normalfall, nicht die Ausnahme + +In vier von fünf Läufen des Blocks 12–16 erreichte die Delegation Tiefe 2, mit 3 bis 9 von +Subagenten gestarteten Subagenten. Ein Kontrolltest belegte, dass deren Tokens vollständig in +`modelUsage` einfließen – ihre **Prompts** dagegen liegen in nicht persistierten Transkripten +und sind nicht rekonstruierbar. Die Prompt-Erfassung ist in diesen Läufen systematisch +unvollständig, die Verbrauchsmessung nicht. + +### 6.5 Modellstärke und Ertrag + +| Reihe | Anforderungen (Median) | Tokens (Median) | Tokens je Anforderung | +|---|---:|---:|---:| +| Sonnet 5, solo, high | 67 | 5,1 Mio. | ~76.000 | +| Opus 5, solo, high | 114 | 22,8 Mio. | ~200.000 | +| Fable 5, solo, max | 178 | 27,6 Mio. | ~155.000 | + +Der Mehrertrag stärkerer Modelle wird mit überproportionalem Verbrauch erkauft. Die +Anforderungsanzahl misst allerdings nur Menge; die Belegqualität ist davon unabhängig zu +betrachten. + +### 6.6 Regelkonformität – der Agent verfehlt teilweise die eigenen Vorgaben + +Die maschinelle Auswertung prüft die Artefakte gegen die Vorgaben des Prompts. Zwei Beispiele: + +- **Lauf 11** (Sonnet, solo): 5 von 31 risikorelevanten Anforderungen tragen weder einen + `PRIMÄR`-Beleg noch die Kennzeichnung `[HYPOTHESE]`, obwohl der Prompt das für Sicherheits-, + Abrechnungs- und Berechtigungsthemen ausdrücklich verlangt. Primärbelegquote 62,7 %. +- **Lauf 24** (Fable/Opus, builtin): alle 58 risikorelevanten Anforderungen gedeckt, + Primärbelegquote 100 %, Median 2 Belege je Anforderung. + +Diese Prüfung wäre von Hand nicht leistbar und liefert eine inhaltliche Vergleichsgröße, die +unabhängig vom Mengengerüst ist. + +### 6.7 Werkzeugtechnische Befunde + +| Befund | Beleg | +|---|---| +| `--safe-mode` unterdrückt das *Vorladen* von Projektanweisungen, nicht das *Lesen* | Kontrolltest: ohne Flag zitiert der Agent `CLAUDE.md`, mit Flag „NICHTS VORGELADEN"; mit Shell liest er sie dennoch | +| Gesperrte Werkzeuge erzeugen keine Denials | In allen 12 Solo-Läufen 0 Denials auf `Task`/`Agent`/`Workflow` – das Modell plant von vornherein ohne sie | +| `--model` steuert nur den Hauptagenten | Lauf 24: 91 % des Verbrauchs auf nicht angefordertem Modell | +| Der Effort steht nicht im Ergebnisobjekt | Nur über das Session-Transkript belegbar | +| `duration_ms` ist bei starker Nebenläufigkeit unbrauchbar | Lauf 5: 09:37 gemeldet, 43:01 tatsächlich | +| Ein Lauf schrieb außerhalb von Codebasis und Laufverzeichnis | Lauf 13 legte drei Arbeitsdateien in `C:\DEV\` an; nur weil die Denylist das Aufräumen blockierte, wurde es sichtbar | + +Der letzte Punkt ist methodisch der unangenehmste: Die etablierte Prüfung „Root unverändert" +deckt ausschließlich die Codebasis ab. Schreibvorgänge in andere Verzeichnisse bleiben unbemerkt. + +--- + +## 7. Grenzen und offene Punkte + +**Nicht geklärt:** Ob der Verbrauchssprung im Fable-Block vom Modell oder vom Effort kommt – +beide Variablen wechselten gleichzeitig. Ein Fable-Block auf `high` oder ein Sonnet-Block auf +`max` würde die Frage entscheiden. + +**Nicht durchgeführt:** Die Stakeholder-Validierung nach Kapitel 4.3. Alle Aussagen dieses +Protokolls beruhen auf maschinell erhebbaren Größen. Ob die erzeugten Anforderungen sachlich +korrekt sind, ist damit ausdrücklich **nicht** gezeigt. + +**Nicht abgedeckt:** Versuch 2 (Agentendateien) und Versuch 3 (MCP-Server). Der Skill ist darauf +vorbereitet (Modus `custom`), die Agentendefinitionen existieren aber noch nicht. + +**Offene Aufräumarbeiten:** Drei Streudateien in `C:\DEV\` aus Lauf 13; die Erweiterung der +Nachlaufprüfung um Streudateien außerhalb des Laufverzeichnisses. + +**Einschränkung der Zeitmessung:** 18 der 24 Läufe liefen parallel. Für belastbare +Laufzeitvergleiche wären serielle Wiederholungen nötig. Eine Teilauswertung zeigt bei den +Solo-Läufen einen messbaren Kontentionseffekt: bei zwei gleichzeitigen Läufen 114–176 Sekunden +je Million Tokens, bei drei gleichzeitigen 185–233 – nicht überlappende Bereiche trotz kleiner +Stichprobe. + +--- + +## 8. Verweise + +- Messprotokolle je Lauf: `Versuche/Versuch_01/////Protokoll.md` +- Rohdaten: `RawResult.json` je Lauf, unverändert erhalten +- Exakt gesendeter Prompt je Lauf: `_meta/combined_prompt.md` +- Subagenten-Prompts: `_meta/subagenten.md` +- Maschinelle Anforderungsauswertung: `_meta/anforderungen.md` und `.json` +- Prozessvorgabe: `.claude/skills/run-experiment/SKILL.md` (Version 4.0.0, mit Änderungshistorie) +- Nachweis des Untersuchungsgegenstands: `Versuche/Versuch_01/_Codebasis-Nachweis.md` +- Struktur- und Umbenennungshistorie: `Versuche/Versuch_01/_Umbenennung_*.md`, + `_Umstrukturierung_2026-08-26.md` diff --git a/Versuche/Versuch_01/01_Prompt.md b/Versuche/Versuch_01/01_Prompt.md index 83794957..0400c275 100644 --- a/Versuche/Versuch_01/01_Prompt.md +++ b/Versuche/Versuch_01/01_Prompt.md @@ -3,17 +3,19 @@ ## Metadaten - **Versuch:** V1 Baseline (Prompt-only) - **Iteration:** 01 (Initial-Prompt, zu Versuchsbeginn neu formuliert) -- **Werkzeugkonfiguration:** Claude Code, keine Agentendateien, keine MCP-Server - **Codebasis:** c-entron ERP-Suite (Windows, C#/XAML, MSSQL) -- **Modell:** Claude (Claude Code) - **Zeitstempel:** 2026-08-25 -- **Änderungsgrund:** Initial-Prompt für V1 Baseline (kein Vorgänger). Vor Erstlauf überarbeitet: Abgleich mit Kap. 4 (RRE-Methodenkette, Evaluationsrahmen) und Kap. 2 (Prozesskontrollen); mit der Vorfassung fand kein Lauf statt. +- **Änderungsgrund:** Initial-Prompt für V1 Baseline (kein Vorgänger). Vor Erstlauf überarbeitet: Abgleich mit Kap. 4 (RRE-Methodenkette, Evaluationsrahmen) und Kap. 2 (Prozesskontrollen); mit der Vorfassung fand kein Lauf statt. Am 2026-08-26 werkzeugneutral gefasst: Aussagen zu Werkzeugkonfiguration, Modell und Ausgabeverzeichnis entfernt (sie werden vom Versuchsaufbau zur Laufzeit beigestellt und im Messprotokoll dokumentiert); Feld `Übernahmewürdigkeit` aus dem Evaluationsrahmen (Kap. 4.3) ergänzt. + +> Dieser Prompt enthält ausschließlich die **Analyseanweisung** und ist damit unabhängig von einem +> bestimmten Werkzeug oder Modell einsetzbar. Welche Werkzeuge im jeweiligen Lauf zur Verfügung +> stehen und wohin die Ergebnisse geschrieben werden, stellt der Versuchsaufbau beim Start bei. --- ## Prompt -Du bist ein Requirements Engineer im Reverse Requirements Engineering eines Legacy-ERP-Systems. Erzeuge aus der vorliegenden Codebasis eine Anforderungsspezifikation nach **ISO/IEC/IEEE 29148:2018**. Arbeite ausschließlich auf den im Arbeitsverzeichnis liegenden Artefakten (Quellcode, Konfiguration, UI-Ressourcen, ggf. DB-Skripte). Es stehen weder spezialisierte Agenten noch MCP-Server zur Verfügung; nutze nur, was als Datei lesbar ist. +Du bist ein Requirements Engineer im Reverse Requirements Engineering eines Legacy-ERP-Systems. Erzeuge aus der vorliegenden Codebasis eine Anforderungsspezifikation nach **ISO/IEC/IEEE 29148:2018**. Arbeite ausschließlich auf den im Arbeitsverzeichnis liegenden Artefakten (Quellcode, Konfiguration, UI-Ressourcen, ggf. DB-Skripte). Nutze nur Informationen, die du aus diesen Artefakten gewinnen kannst. ### Auftrag @@ -51,6 +53,8 @@ Bearbeite die Schritte 2-6 der RRE-Methodenkette (Schritt 1 Scope ist oben vorge - **Hypothesenmarkierung:** Aussagen, die sich nicht eindeutig aus Artefakten ableiten lassen, kennzeichnest du explizit mit `[HYPOTHESE]` und einer kurzen Begründung, welche Information zur Bestätigung fehlt. - **Verifizierbarkeit:** Jede Anforderung enthält mindestens eine Prüfidee oder ein Akzeptanzkriterium. - **Eindeutigkeit:** Vermeide vage Begriffe ("schnell", "benutzerfreundlich"); definiere domänenspezifische Begriffe beim ersten Auftreten. +- **Übernahmewürdigkeit:** Beurteile für jede Anforderung, ob ihre Funktion im Zielsystem erhalten bleiben soll. Unterscheide `übernehmen` (fachlich weiterhin erforderlich), `Workaround` (historisch gewachsene Behelfslösung), `Sonderfall` (Ausnahme für einen einzelnen Kunden, Mandanten oder Altbestand) und `veraltet` (durch neuere Logik abgelöst oder fachlich überholt). Begründe die Einstufung in einem Halbsatz. Diese Angabe steuert die spätere fachliche Priorisierung; eine Fehleinschätzung ist unkritisch, eine fehlende Angabe nicht. +- **Redundanzfreiheit:** Formuliere jede Anforderung so, dass sie von den übrigen klar abgegrenzt ist. Beschreiben zwei Anforderungen dieselbe fachliche Funktion aus unterschiedlicher Perspektive, führe sie zusammen oder grenze sie im Titel und in der Aussage ausdrücklich gegeneinander ab. ### Formatvorgabe pro Anforderung @@ -71,6 +75,7 @@ Belege: Prüfidee: Tracelinks: Konsolidierung: > +Übernahmewürdigkeit: <übernehmen | Workaround | Sonderfall | veraltet> - Status: ``` @@ -103,14 +108,14 @@ Ergebnisse/ Analysebericht.md (Modul-/Komponentenübersicht, abgedeckte Bereiche, bekannte Lücken) ``` -Das Ausgabeverzeichnis wird beim Start des Laufs benannt. Die analysierte Codebasis wird ausschließlich gelesen und nicht verändert. +Das Ausgabeverzeichnis wird beim Start des Laufs beigestellt. Die analysierte Codebasis wird ausschließlich gelesen und nicht verändert. ### Randbedingungen - **Keine Halluzinationen.** Wenn ein Artefakt nicht gelesen oder eine Aussage nicht belegt werden kann, ist das offen zu legen, nicht zu erfinden. - **Keine Generierung von Code.** Es sollen ausschließlich Spezifikationsartefakte entstehen. -- **Keine Annahme nicht vorhandener Tools.** Stehen für eine Aussage nur indirekte Belege zur Verfügung, ist die Aussage als `[HYPOTHESE]` zu kennzeichnen. -- **Migrationsperspektive berücksichtigen.** Wenn eine Implementierung erkennbar ein historischer Workaround oder Sonderfall ist, vermerke das im Feld `Status` (`belegt; Workaround`), damit es in der späteren Validierung priorisiert geprüft werden kann. +- **Keine Annahme über nicht beigestellte Hilfsmittel.** Arbeite mit dem, was dir in diesem Lauf zur Verfügung steht. Setze keine zusätzlichen Analysewerkzeuge, Datenbankzugriffe oder laufende Systeme voraus. Stehen für eine Aussage nur indirekte Belege zur Verfügung, ist sie als `[HYPOTHESE]` zu kennzeichnen. +- **Migrationsperspektive berücksichtigen.** Erkennbare Workarounds, Sonderfälle und überholte Logik gehören in das Feld `Übernahmewürdigkeit`, nicht in das Feld `Status`. `Status` beschreibt ausschließlich die Belegsituation (`belegt` oder `HYPOTHESE`), `Übernahmewürdigkeit` die fachliche Zukunft der Anforderung. Beide Angaben sind unabhängig voneinander: Eine gut belegte Anforderung kann ein Workaround sein, eine Hypothese kann übernahmewürdig sein. - **Sprache:** Deutsch für Anforderungsaussagen, technische Bezeichner (Klassen, Methoden, Spalten) bleiben in ihrer Originalsprache. ### Abschluss @@ -118,7 +123,9 @@ Das Ausgabeverzeichnis wird beim Start des Laufs benannt. Die analysierte Codeba Führe vor Abgabe einen **Konsistenzcheck über das gesamte Anforderungs-Set** durch und dokumentiere das Ergebnis im `Analysebericht.md`: - Doppelte oder mehrfach vergebene IDs - Anforderungen ohne Beleg +- Anforderungen ohne Angabe zur `Übernahmewürdigkeit` - Tracelinks auf nicht existierende IDs +- Inhaltlich deckungsgleiche Anforderungen, die nicht als Konsolidierungskandidat markiert sind Beende den Lauf mit einer kurzen Selbstbewertung im `Analysebericht.md`: - Welche Module wurden vollständig analysiert, welche nur stichprobenhaft, welche gar nicht? diff --git a/Versuche/Versuch_01/claude-fable-5/builtin/high/01_Lauf_2026-08-25_220735_v3.7.0-15db/Protokoll.md b/Versuche/Versuch_01/claude-fable-5/builtin/high/01_Lauf_2026-08-25_220735_v3.7.0-15db/Protokoll.md index 77fd32fe..5fedbe05 100644 --- a/Versuche/Versuch_01/claude-fable-5/builtin/high/01_Lauf_2026-08-25_220735_v3.7.0-15db/Protokoll.md +++ b/Versuche/Versuch_01/claude-fable-5/builtin/high/01_Lauf_2026-08-25_220735_v3.7.0-15db/Protokoll.md @@ -102,6 +102,8 @@ Ursache ist ausschließlich das Fremdmodell in den Subagenten. Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -138,6 +140,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 2,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 172 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -155,6 +161,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (58 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 172 von 172 mit Tracelinks (100,0 %) | ## Anmerkungen/Auffälligkeiten diff --git a/Versuche/Versuch_01/claude-fable-5/builtin/high/01_Lauf_2026-08-25_220735_v3.7.0-15db/_meta/anforderungen.json b/Versuche/Versuch_01/claude-fable-5/builtin/high/01_Lauf_2026-08-25_220735_v3.7.0-15db/_meta/anforderungen.json index 7eca8a61..d84a9cf7 100644 --- a/Versuche/Versuch_01/claude-fable-5/builtin/high/01_Lauf_2026-08-25_220735_v3.7.0-15db/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-fable-5/builtin/high/01_Lauf_2026-08-25_220735_v3.7.0-15db/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-001, SyRS-013, SyRS-020, SyRS-025, SyRS-035, SyRS-039", "konsolidierung": "nein", "pruefidee": "Walkthrough: Ein Vorgang Angebot→Auftrag→Lieferschein→Rechnung→FiBu-Export sowie Ticket→Zeit→Abrechnung ist ohne Systemwechsel durchführbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -33,7 +34,8 @@ "tracelinks": "SyRS-006, SyRS-009, SyRS-010, SyRS-028", "konsolidierung": "nein", "pruefidee": "Test: WebAccount-Login gegen eine interne Funktion (z. B. Belegsuche) liefert Ablehnung („Web-Benutzer haben keine Berechtigung Belege einzusehen“) bzw. nur portalzulässige Daten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -51,7 +53,8 @@ "tracelinks": "SyRS-013, SyRS-014, SyRS-015, SyRS-017, SyRS-018, SyRS-038", "konsolidierung": "nein", "pruefidee": "Testfälle: (a) unzulässige Weiterverarbeitung (z. B. Gutschrift→Auftrag) wird abgewiesen; (b) Reduktion einer bereits weiterverarbeiteten Menge wird abgewiesen; (c) vollständige Verarbeitung schließt den Beleg automatisch.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -70,7 +73,8 @@ "tracelinks": "SyRS-027", "konsolidierung": "nein", "pruefidee": "E2E-Test: Angebot versenden → ein Freigeber lehnt ab → kein Kundenversand; alle stimmen zu → Kunde signiert → Auftrag existiert, signiertes PDF „_Signed.pdf\" liegt im Belegverzeichnis, Log-Einträge vorhanden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -88,7 +92,8 @@ "tracelinks": "SyRS-020, SyRS-021, SyRS-022, SyRS-051, SyRS-068", "konsolidierung": "nein", "pruefidee": "Test: Priorität mit 4h-Frist, Büroschluss 17:00 → Ticket um 16:00 erzeugt → Fälligkeit am Folgearbeitstag; Eskalationslauf setzt Stufe 1..3 mit Benachrichtigung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -106,7 +111,8 @@ "tracelinks": "SyRS-023, SyRS-024, SyRS-066", "konsolidierung": "nein", "pruefidee": "Test: Zeit einer fakturierten Position löschen/verschieben → Ablehnung; Timer-Billing derselben Zeit zweimal → zweiter Lauf enthält sie nicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -125,7 +131,8 @@ "tracelinks": "SyRS-025, SyRS-047, SyRS-048", "konsolidierung": "nein", "pruefidee": "Test: Vertrag monatlich, 2 Monate nicht abgerechnet → ein Lauf erzeugt eine Rechnung über 2 Intervalle; RMM-Ausfall → Lauf bricht für diesen Vertrag mit Fehler ab.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -143,7 +150,8 @@ "tracelinks": "SyRS-029, SyRS-030, SyRS-036, SyRS-037", "konsolidierung": "nein", "pruefidee": "Test: Auftrag mit Bestellbedarf → Bestellvorschlag enthält Position mit korrekter Menge; simulierte Distributor-Antwortdatei erzeugt Wareneingangsbeleg genau einmal.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -162,7 +170,8 @@ "tracelinks": "SyRS-031, SyRS-032, SyRS-033, SyRS-034", "konsolidierung": "nein", "pruefidee": "Test: SN in Lieferschein → zweite Zuordnung in anderem Beleg wird abgewiesen; Inventur ohne Scan einer SN → Status „Inventurverlust\"; Umbuchung ohne Recht TRANSFER_STOCK → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -180,7 +189,8 @@ "tracelinks": "SyRS-035", "konsolidierung": "nein", "pruefidee": "Test: Kunden-RMA ohne Lieferschein/Gutschrift schließen → Ablehnung; Fremdware-Position erzeugt neue SN im RMA-Kundenlager; Storno eines Schritts mit Folgeschritt → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -199,7 +209,8 @@ "tracelinks": "SyRS-016, SyRS-019, SyRS-039, SyRS-040, SyRS-041, SyRS-042, SyRS-043", "konsolidierung": "nein", "pruefidee": "Abnahmetest je Teilprozess: DATEV-Datei gegen DATEV-Prüfprogramm; SEPA-Datei gegen Bank-Validator; Zahlungsabgleich mit exaktem/abweichendem Betrag (<0,50 €) und Sammelzahlung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -218,7 +229,8 @@ "tracelinks": "SyRS-026, SyRS-028, SyRS-010", "konsolidierung": "nein", "pruefidee": "Test: WebAccount ohne Sonderpreise sieht leeren Shop; Bestellfreigabe ohne WEBRIGHT_WEBCART2_ORDER_CART → Ablehnung; Ticket eines fremden Kunden per ID abrufen → „nicht gefunden\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -236,7 +248,8 @@ "tracelinks": "SyRS-006, SyRS-007, SyRS-008, SyRS-009, SyRS-010, SyRS-011, SyRS-055", "konsolidierung": "nein", "pruefidee": "Test je restriktivem Recht: Nutzer mit SHOW_HELPDESK_ONLY_OWN erhält per API (nicht nur UI) ausschließlich eigene Tickets.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -254,7 +267,8 @@ "tracelinks": "SyRS-012, SyRS-007", "konsolidierung": "nein", "pruefidee": "Test: Lizenz-Count n, n+1 parallele Logins → letzter abgelehnt; BL-Aufruf eines unlizenzierten Moduls → LicenseNotFound.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-015", @@ -272,7 +286,8 @@ "tracelinks": "SyRS-009, SyRS-014, SyRS-060", "konsolidierung": "nein", "pruefidee": "Test: Benutzer mit „nur eigene Filiale\" legt Beleg für fremde Filiale an → Ablehnung; zwei Filialen ziehen getrennte Rechnungsnummernkreise.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-016", @@ -290,7 +305,8 @@ "tracelinks": "SyRS-011, SyRS-017, SyRS-057", "konsolidierung": "nein", "pruefidee": "Test: festgeschriebene Rechnung ändern → Ablehnung; DSGVO-Lauf entfernt inaktive Kundendaten und hinterlässt Löschmarker.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-017", @@ -309,7 +325,8 @@ "tracelinks": "SyRS-044, SyRS-045, SyRS-046, SyRS-052, SyRS-067, SyRS-004", "konsolidierung": "nein", "pruefidee": "Test: privater Outlook-Termin erscheint im ERP nur als „Privater Termin\"; Ticket-Termin-Zeitänderung in Outlook wird nicht ins ERP übernommen (Nexus source of truth).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-018", @@ -326,7 +343,8 @@ "tracelinks": "SyRS-062, SyRS-061", "konsolidierung": "nein", "pruefidee": "Vergleichsrechnung einer Beispielwoche gegen manuell ermittelte Stundenwerte.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-019", @@ -344,7 +362,8 @@ "tracelinks": "SyRS-063, SyRS-061", "konsolidierung": "nein", "pruefidee": "Test: Pflicht-Zusatzfeld an Kunde definieren → Anlage ohne Wert wird abgewiesen; Reportänderung wirkt ohne Neuinstallation.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-020", @@ -362,7 +381,8 @@ "tracelinks": "SyRS-001, SyRS-049, SyRS-050, SyRS-053, SyRS-054, SyRS-060", "konsolidierung": "nein", "pruefidee": "Betriebstest: Dienststart gegen ältere DB führt Skripte aus und startet erst bei Erfolg; Dienst-Deaktivierung per DB-Flag stoppt Ausführung binnen 60 s.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-021", @@ -380,7 +400,8 @@ "tracelinks": "SyRS-058", "konsolidierung": "nein", "pruefidee": "UI-Durchsicht in EN: keine leeren Texte; Fallback auf Deutsch dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-022", @@ -397,7 +418,8 @@ "tracelinks": "SyRS-059", "konsolidierung": "nein", "pruefidee": "Test: Anbieterwechsel per Einstellung ohne Codeänderung; Aktion „Ticket-Beschreibung verbessern\" liefert Text.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-023", @@ -415,7 +437,8 @@ "tracelinks": "SyRS-065", "konsolidierung": "nein", "pruefidee": "Test: Terminänderung an Aufgabe → Log-Eintrag; Sammelmail an Verantwortliche mit markierten Änderungen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-024", @@ -433,7 +456,8 @@ "tracelinks": "SyRS-064", "konsolidierung": "nein", "pruefidee": "Test: zwei Werker übernehmen denselben Schritt → zweiter erhält Hinweis; Fertigmeldung setzt ProducedAmount.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-025", @@ -451,7 +475,8 @@ "tracelinks": "SyRS-056", "konsolidierung": "nein", "pruefidee": "Netzwerkmitschnitt einer Installation: Upload-Frequenz (15 min) und Payload-Felder verifizieren; Prüfung auf Abschaltbarkeit.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-026", @@ -469,7 +494,8 @@ "tracelinks": "SyRS-070", "konsolidierung": "nein", "pruefidee": "Test: Anzeige eines versiegelten Zugangsdatums erfordert Siegelbruch + erzeugt Logeintrag; DB-Inspektion zeigt nur Chiffretext.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-027", @@ -489,7 +515,8 @@ "tracelinks": "SyRS-069", "konsolidierung": "nein", "pruefidee": "Test: Artikel mit falscher EAN-Prüfziffer → Ablehnung; Kunde mit offener Rechnung löschen → Ablehnung; deaktivierter Mitarbeiter: alte Zeiten bleiben abrechenbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -506,7 +533,8 @@ "tracelinks": "StRS-001, StRS-020; SwRS-001", "konsolidierung": "nein", "pruefidee": "Gleicher Anwendungsfall (z. B. Ticket speichern) über BLLogic und WSLogic liefert identisches Ergebnis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -524,7 +552,8 @@ "tracelinks": "StRS-020; SwRS-002, SwRS-003, SwRS-004", "konsolidierung": "Kandidat: SyRS-003 (Ziel-Neuimplementierung sollte beide API-Stile in einer ressourcenorientierten API konsolidieren)", "pruefidee": "Contract-Test: Aufruf mit alter Client-Bibliothek (Centron.WebServices.Core NuGet) gegen neue Serverversion.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -541,7 +570,8 @@ "tracelinks": "StRS-020; SwRS-005", "konsolidierung": "Kandidat: SyRS-002", "pruefidee": "OpenAPI-Abgleich (Swagger je Version bei ActivateHelpPage) gegen dokumentierte Endpunktliste.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -558,7 +588,8 @@ "tracelinks": "StRS-017; SwRS-003", "konsolidierung": "nein", "pruefidee": "Integrationstest: Ticketkommentar mit @-Erwähnung erzeugt Push beim erwähnten Mitarbeiter.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -575,7 +606,8 @@ "tracelinks": "StRS-020; SwRS-004", "konsolidierung": "nein", "pruefidee": "Test: BL-Exception → HTTP 200 + Status Failed; ungültiges JSON → HTTP 400.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -594,7 +626,8 @@ "tracelinks": "StRS-002, StRS-013; SwRS-006, SwRS-007", "konsolidierung": "nein", "pruefidee": "Testmatrix Systemverfahren × Benutzerverfahren; OIDC-Login eines nicht verknüpften oid → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -612,7 +645,8 @@ "tracelinks": "StRS-013, StRS-014; SwRS-008, SwRS-009", "konsolidierung": "nein", "pruefidee": "Test: Ticket nach Ablauf+6 min → InvalidTicket; Token deaktivieren → nächster Aufruf abgelehnt + ValidationFailed-Log.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -629,7 +663,8 @@ "tracelinks": "StRS-013; SwRS-010", "konsolidierung": "nein", "pruefidee": "Test: aktivierte 2FA → Login ohne Faktor scheitert; erneuter Login gleicher (Gerät, IP) innerhalb Merkdauer ohne Faktor.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -647,7 +682,8 @@ "tracelinks": "StRS-013, StRS-015; SwRS-011", "konsolidierung": "Kandidat: SwRS-032 (dreifache Filter-Implementierung BL/Nexus/WPF vereinheitlichen)", "pruefidee": "API-Test je restriktivem Recht (nicht über UI) auf Datensatzebene.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -664,7 +700,8 @@ "tracelinks": "StRS-002, StRS-012, StRS-013; SwRS-012", "konsolidierung": "nein", "pruefidee": "Test: WebAccount ohne WEBRIGHT_CREATEREQUEST ruft SaveNewSimpleTicketWebAccount → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -681,7 +718,8 @@ "tracelinks": "StRS-013, StRS-016; SwRS-011", "konsolidierung": "nein", "pruefidee": "Recht vergeben/entziehen → zwei Logeinträge mit korrektem Verursacher; Versuch, Gruppe „Administratoren\" zu löschen → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -698,7 +736,8 @@ "tracelinks": "StRS-014; SwRS-013, SwRS-075", "konsolidierung": "nein", "pruefidee": "Lasttest: n+1 Logins bei Count n; abgelaufene Lizenzversion → Serverstart scheitert mit Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -716,7 +755,8 @@ "tracelinks": "StRS-003; SwRS-016, SwRS-017, SwRS-018, SwRS-019, SwRS-020, SwRS-021, SwRS-022", "konsolidierung": "nein", "pruefidee": "Testkatalog: alle Matrixzellen (erlaubt/verboten); paralleles Speichern zweier Versionen → Konfliktfehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -734,7 +774,8 @@ "tracelinks": "StRS-003, StRS-015; SwRS-023", "konsolidierung": "nein", "pruefidee": "Parallel-Test: 100 gleichzeitige Belege → 100 verschiedene, lückenlos geprüfte Nummern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -752,7 +793,8 @@ "tracelinks": "StRS-003, StRS-007; SwRS-024, SwRS-025, SwRS-026, SwRS-030", "konsolidierung": "nein", "pruefidee": "Preisfindungs-Testmatrix (Vertrag/Sonderpreis/Staffel/Preisliste in allen Kombinationen) gegen erwartete Gewinner.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-016", @@ -770,7 +812,8 @@ "tracelinks": "StRS-011; SwRS-026, SwRS-027", "konsolidierung": "nein", "pruefidee": "Testfälle: DE-Kunde ohne UStIdNr. (19 %), EU-B2B mit UStIdNr. (0 %, K), Drittland (0 %, G), §13b (AE); Lieferschein vor / Rechnung nach Steuersatzwechsel.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-017", @@ -787,7 +830,8 @@ "tracelinks": "StRS-011, StRS-016; SwRS-020", "konsolidierung": "nein", "pruefidee": "Test: exportierte Rechnung stornieren → Ablehnung; Storno der vorletzten Vertragsrechnung → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-018", @@ -804,7 +848,8 @@ "tracelinks": "StRS-003; SwRS-028", "konsolidierung": "nein", "pruefidee": "Test: 2 Anzahlungen (eine storniert) → Schlussrechnung enthält genau eine Negativposition.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-019", @@ -821,7 +866,8 @@ "tracelinks": "StRS-011; SwRS-029", "konsolidierung": "nein", "pruefidee": "Test: Kunde Mahnstufe ≥ Schwelle → Auftrag abgelehnt, Rechnung weiterhin möglich; Limitüberschreitung → Dialog.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-020", @@ -839,7 +885,8 @@ "tracelinks": "StRS-005; SwRS-031, SwRS-034, SwRS-038, SwRS-039, SwRS-069", "konsolidierung": "nein", "pruefidee": "Test: Abschluss ohne CLOSE_REQUEST → Fehler; DueDate-Änderung ohne MATURITY_CHANGE → Fehler; Taskmanagement-Konto ohne ADD_NEW_HELPDESK → keine Tickets.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-021", @@ -856,7 +903,8 @@ "tracelinks": "StRS-005; SwRS-033", "konsolidierung": "nein", "pruefidee": "Zeitraffer-Test mit synthetischen Eskalationstypen (1/2/3 h, Sa/So aus) gegen erwartete Stufenzeitpunkte.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-022", @@ -873,7 +921,8 @@ "tracelinks": "StRS-005, StRS-013; SwRS-031, SwRS-032", "konsolidierung": "Kandidat: SwRS-032 (dreifach implementierte Filterlogik)", "pruefidee": "API-Testmatrix je Sichtbarkeitsstufe inkl. internem Ticket via Portal-Token.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-023", @@ -891,7 +940,8 @@ "tracelinks": "StRS-006; SwRS-035, SwRS-036", "konsolidierung": "nein", "pruefidee": "Testkatalog aller Sperrpfade (Save/Delete/Move/Termin) gegen abgerechnete Zeit.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-024", @@ -908,7 +958,8 @@ "tracelinks": "StRS-006; SwRS-037", "konsolidierung": "nein", "pruefidee": "Zwei aufeinanderfolgende Abrechnungsläufe → zweiter leer; Datum ändern ohne CAN_CHANGE_DATE → gesperrt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-025", @@ -926,7 +977,8 @@ "tracelinks": "StRS-007; SwRS-024, SwRS-026 (Rundung), SwRS-027", "konsolidierung": "nein", "pruefidee": "Rechenbeispiele: Vertragsstart 15. bei monatlicher Abrechnung → anteiliger Erstbetrag; RMM-Messung über Höchstmenge → Deckelung + Infozeile.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-026", @@ -943,7 +995,8 @@ "tracelinks": "StRS-012; SwRS-042", "konsolidierung": "nein", "pruefidee": "Zustands-Testmatrix inkl. Übergangsversuch aus falschem Zustand („bereits an einem anderen Schritt\").", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-027", @@ -961,7 +1014,8 @@ "tracelinks": "StRS-004; SwRS-040, SwRS-041", "konsolidierung": "Kandidat: SwRS-040/DsgvoBL (zwei parallele Signaturstrecken shareddocuments vs. contractmanagement zusammenführen)", "pruefidee": "E2E: Ablauf Token → „abgelaufen\"; Zweitnutzung → abgelehnt; Angebot signiert → Auftrag + „_Signed.pdf\" + Logkette vollständig.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-028", @@ -979,7 +1033,8 @@ "tracelinks": "StRS-012, StRS-002; SwRS-043", "konsolidierung": "nein", "pruefidee": "Portal-Token: fremde Kunden-ID in jedem Endpunkt → leer/„nicht gefunden\"; Mitarbeiterroute über Kundenportal-Port → 403.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-029", @@ -996,7 +1051,8 @@ "tracelinks": "StRS-008; SwRS-017, SwRS-019, SwRS-046", "konsolidierung": "nein", "pruefidee": "Test Früh- vs. Spätbuchung: Bestandszeitpunkt; Auftragsposition zeigt EKStkBestellt/EkStkGebucht korrekt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-030", @@ -1012,7 +1068,8 @@ "tracelinks": "StRS-008; SwRS-047", "konsolidierung": "nein", "pruefidee": "Rechenbeispiele mit bekannten Beständen/Zuläufen gegen erwartete Vorschlagsmengen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-031", @@ -1030,7 +1087,8 @@ "tracelinks": "StRS-009; SwRS-044, SwRS-045, SwRS-046", "konsolidierung": "nein", "pruefidee": "Test: SN-Artikel — Mengenzähler manipulieren → angezeigter Bestand unverändert (View); WE bucht EK-Durchschnitt korrekt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-032", @@ -1048,7 +1106,8 @@ "tracelinks": "StRS-009; SwRS-048", "konsolidierung": "nein", "pruefidee": "Testmatrix Belegart × SN-Anzahl (zu wenig/exakt/zu viel); SN-Doppelzuordnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-033", @@ -1065,7 +1124,8 @@ "tracelinks": "StRS-009; SwRS-049", "konsolidierung": "nein", "pruefidee": "Test: Lager abschließen → weitere Erfassung abgewiesen; ungescannte SN → Status LostAtStocktaking.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-034", @@ -1082,7 +1142,8 @@ "tracelinks": "StRS-009; SwRS-050", "konsolidierung": "nein", "pruefidee": "Test: Umbuchung ohne Recht → Ablehnung; Negativbuchung mit Fremdfreigabe ohne Recht des Freigebers → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-035", @@ -1100,7 +1161,8 @@ "tracelinks": "StRS-010; SwRS-051", "konsolidierung": "nein", "pruefidee": "Prozess-Testfälle je RMA-Art inkl. Teilmengen-Split, Storno-LIFO und Abschlussverweigerung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-036", @@ -1118,7 +1180,8 @@ "tracelinks": "StRS-008; SwRS-052", "konsolidierung": "nein", "pruefidee": "Wiederholtes Einspielen derselben Datei → ein Beleg; 4. Fehlversuch → Datei übersprungen + Logeintrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-037", @@ -1136,7 +1199,8 @@ "tracelinks": "StRS-008; SwRS-052", "konsolidierung": "nein", "pruefidee": "Suchtest je Provider (Feature-Schalter an/aus); Übernahme eines Fundes erzeugt genau einen ExternalArticle.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-038", @@ -1153,7 +1217,8 @@ "tracelinks": "StRS-003, StRS-008; SwRS-017", "konsolidierung": "nein", "pruefidee": "Sandbox-Sendung → keine Trackingdaten am Beleg; Produktivsendung → neue Belegversion mit Trackingnummer.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-039", @@ -1171,7 +1236,8 @@ "tracelinks": "StRS-011; SwRS-053, SwRS-054", "konsolidierung": "nein", "pruefidee": "DATEV-Datei einer Testrechnung mit 2 Steuersätzen + Kostenstellen gegen Sollwerte; Rückimport schließt Rechnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-040", @@ -1189,7 +1255,8 @@ "tracelinks": "StRS-011; SwRS-055", "konsolidierung": "nein", "pruefidee": "Validierung erzeugter XML gegen KoSIT-Validator (XRechnung 3.0) und EN-16931-Schematron.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-041", @@ -1206,7 +1273,8 @@ "tracelinks": "StRS-011; SwRS-056", "konsolidierung": "nein", "pruefidee": "Exportlauf mit First-Mandat → Datei SeqTp FRST, danach Mandat=Recurrent; ungültiges Unterschriftsdatum → Lauf blockiert mit Fehlerliste.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-042", @@ -1223,7 +1291,8 @@ "tracelinks": "StRS-011; SwRS-057", "konsolidierung": "nein", "pruefidee": "Testumsätze: exakter Betrag, Sammelzahlung (3 Rechnungen), Chargeback — erwartete Heuristik + Belegstatus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-043", @@ -1240,7 +1309,8 @@ "tracelinks": "StRS-011; SwRS-058", "konsolidierung": "nein", "pruefidee": "Lauf über Rechnung mit Mahnsperre-Fenster → nicht enthalten; dreimaliger Lauf → Stufe 3, vierter ohne Wirkung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-044", @@ -1258,7 +1328,8 @@ "tracelinks": "StRS-017; SwRS-059", "konsolidierung": "nein", "pruefidee": "Versandtest je Transport; 200-MB-Anhang → definierte Auslassung; Debug-Build → Umleitung an test@.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-045", @@ -1275,7 +1346,8 @@ "tracelinks": "StRS-017; SwRS-060", "konsolidierung": "nein", "pruefidee": "Tests: privater Termin → Platzhalter; Serienmaster in Outlook löschen → alle Instanzen im ERP weg; Ticket-Termin in Outlook verschieben → ERP-Zeit unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-046", @@ -1292,7 +1364,8 @@ "tracelinks": "StRS-017; SwRS-003", "konsolidierung": "nein", "pruefidee": "Simulierter IncomingCall → Popup beim richtigen Mitarbeiter mit Kundenzuordnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-047", @@ -1310,7 +1383,8 @@ "tracelinks": "StRS-007, StRS-008, StRS-005; SwRS-052", "konsolidierung": "nein", "pruefidee": "RMM-Aufruf mit falschem Key → abgelehnt; mit Key → Ticket entsteht mit Systembenutzer-Kennzeichnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-048", @@ -1326,7 +1400,8 @@ "tracelinks": "StRS-007; SwRS-052", "konsolidierung": "nein", "pruefidee": "Tokenerneuerung ohne Nutzerinteraktion (Refresh); Zählerimport eines Testgeräts erscheint im richtigen Zählertyp.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-049", @@ -1343,7 +1418,8 @@ "tracelinks": "StRS-020; SwRS-066", "konsolidierung": "nein", "pruefidee": "DB-Flag eines Dienstes auf disabled → keine Läufe binnen 2 min; provozierter Fehler → wachsende Intervalle bis 5 min.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-050", @@ -1361,7 +1437,8 @@ "tracelinks": "StRS-020; SwRS-061, SwRS-062, SwRS-063, SwRS-064", "konsolidierung": "nein", "pruefidee": "Start gegen DB mit fehlendem Skript n → Skript läuft genau einmal, DBUpdate-Eintrag Status 2; Start gegen Level-100-DB → Abbruch mit Meldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-051", @@ -1378,7 +1455,8 @@ "tracelinks": "StRS-005; SwRS-068", "konsolidierung": "nein", "pruefidee": "Neues Ticket → binnen 2 min über Stichwortkombination auffindbar; „Server Ausfall\" findet nur Objekte mit beiden Termen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-052", @@ -1395,7 +1473,8 @@ "tracelinks": "StRS-017; SwRS-003", "konsolidierung": "nein", "pruefidee": "Offline-Nutzer erhält Erwähnung → nach Login Badge inkl. @-Zähler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-053", @@ -1414,7 +1493,8 @@ "tracelinks": "StRS-020; SwRS-004, SwRS-065", "konsolidierung": "nein", "pruefidee": "Lastprofil: 50 parallele Nutzer, Beleg mit 500 Positionen speichern < 5 s; Poolauslastung < MaxPoolSize.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-054", @@ -1432,7 +1512,8 @@ "tracelinks": "StRS-020; SwRS-065, SwRS-066", "konsolidierung": "nein", "pruefidee": "Chaos-Test: DB-Verbindungsabbruch während Betrieb → automatische Wiederaufnahme ohne Neustart.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-055", @@ -1450,7 +1531,8 @@ "tracelinks": "StRS-013; SwRS-006, SwRS-007, SwRS-010, SwRS-014", "konsolidierung": "nein", "pruefidee": "Sicherheits-Regressionstest gegen die Fundstellenliste (Hash-Verfahren, Lockout, CORS, Token-Kanal, Secret-Ablage).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-056", @@ -1467,7 +1549,8 @@ "tracelinks": "StRS-025; SwRS-067", "konsolidierung": "nein", "pruefidee": "Payload-Inspektion; Suche nach Abschalt-Konfiguration (Negativtest dokumentieren).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-057", @@ -1484,7 +1567,8 @@ "tracelinks": "StRS-016; SwRS-064", "konsolidierung": "nein", "pruefidee": "Cleanup-Lauf im Testmandant: Kandidatenliste = Erwartung; Löschmarker vorhanden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-058", @@ -1501,7 +1585,8 @@ "tracelinks": "StRS-021; SwRS-001", "konsolidierung": "Kandidat: Vereinheitlichung der Ressourcen-Konventionen (en vs. en-US) im Zielsystem", "pruefidee": "UI-Scan beider Sprachen auf fehlende Ressourcen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-059", @@ -1517,7 +1602,8 @@ "tracelinks": "StRS-022; SwRS-067", "konsolidierung": "nein", "pruefidee": "Kontrakttest je Provider-Typ mit identischer Aktion.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-060", @@ -1534,7 +1620,8 @@ "tracelinks": "StRS-020, StRS-015; SwRS-066", "konsolidierung": "nein", "pruefidee": "Get-AuthenticodeSignature aller Auslieferungsdateien = Valid; Version ↔ Commit-Rückverfolgung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-061", @@ -1550,7 +1637,8 @@ "tracelinks": "StRS-018, StRS-019; SwRS-064", "konsolidierung": "nein", "pruefidee": "Defekten PDF-Drucker konfigurieren → Beleg druckt dennoch (FastReport-Fallback), Sperre 30 min aktiv.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-062", @@ -1567,7 +1655,8 @@ "tracelinks": "StRS-018; SwRS-011", "konsolidierung": "nein", "pruefidee": "Nutzer mit Branch-Restriktion sieht nur eigene Filiale in jeder Kennzahl (API-seitig geprüft).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-063", @@ -1585,7 +1674,8 @@ "tracelinks": "StRS-019 (keine eigene SwRS-Verfeinerung; Implementierung direkt belegt)", "konsolidierung": "nein", "pruefidee": "Zusatzfeld als Pflicht markieren → Speichern ohne Wert scheitert serverseitig; MassUpdate-Vorlage ändert nur Active-Artikel-Positionen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-064", @@ -1602,7 +1692,8 @@ "tracelinks": "StRS-024; SwRS-070", "konsolidierung": "nein", "pruefidee": "Zwei parallele Übernahmen desselben Schritts → genau eine erfolgreich; API-Direktaufruf mit ungültigem Zustandswechsel (Lückentest fürs Zielsystem).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-065", @@ -1619,7 +1710,8 @@ "tracelinks": "StRS-023; SwRS-069", "konsolidierung": "nein", "pruefidee": "Terminänderung → Logeintrag + Mail an Verantwortlichen mit markierter Zelle; zweiter Versand ohne neue Änderungen bleibt aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-066", @@ -1636,7 +1728,8 @@ "tracelinks": "StRS-006 (keine eigene SwRS-Verfeinerung; Implementierung direkt belegt)", "konsolidierung": "nein", "pruefidee": "Testtag nur mit Urlaub → automatisch abgeschlossen; offener Tag → Mail an Mitarbeiter + Teamleiter genau einmal.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-067", @@ -1652,7 +1745,8 @@ "tracelinks": "StRS-017; SwRS-060", "konsolidierung": "nein", "pruefidee": "Annahmefall/Absagefall gegen Exchange-Testpostfach.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-068", @@ -1668,7 +1762,8 @@ "tracelinks": "StRS-005, StRS-007; SwRS-066", "konsolidierung": "nein", "pruefidee": "Testkonfiguration Mo–Fr 06–08 Uhr, 1 Meldung: keine Mail → Zeitverletzungs-Ereignis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-069", @@ -1686,7 +1781,8 @@ "tracelinks": "StRS-027; SwRS-071, SwRS-072, SwRS-073", "konsolidierung": "Kandidat: Alt-/Neumodell (Kunden/Anschrif vs. Accounts) – Zusammenführung im Zielsystem", "pruefidee": "Siehe StRS-027-Prüfszenarien; zusätzlich: Änderung der Adresssprache ohne Recht → Wert bleibt unverändert (Ist) / Fehler (Soll-Ziel).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-070", @@ -1702,7 +1798,8 @@ "tracelinks": "StRS-026; SwRS-074, SwRS-014", "konsolidierung": "nein", "pruefidee": "Einsicht mit 2FA-Flag → PIN-Pflicht; AccessLog-Eintrag je Entschlüsselung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -1719,7 +1816,8 @@ "tracelinks": "SyRS-001, SyRS-058", "konsolidierung": "nein", "pruefidee": "Architekturtest: für jedes ILogic existieren BL- und WS-Implementierung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-002", @@ -1736,7 +1834,8 @@ "tracelinks": "SyRS-002", "konsolidierung": "nein", "pruefidee": "Doppelte UriTemplate einbauen → Startfehler; Aufruf mit beiden Serializern liefert identische Fachantwort.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-003", @@ -1752,7 +1851,8 @@ "tracelinks": "SyRS-002, SyRS-004, SyRS-005, SyRS-052, SyRS-046", "konsolidierung": "nein", "pruefidee": "Test-Interceptor mit Priority 5 anlegen → wird zwischen TryCatch und Authenticate ausgeführt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-004", @@ -1768,7 +1868,8 @@ "tracelinks": "SyRS-005, SyRS-053", "konsolidierung": "nein", "pruefidee": "BL wirft ResultException(Code X) → Response.MessageCode==X; TrimToOnlyI3D → Ergebnisobjekte enthalten nur I3D.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-005", @@ -1784,7 +1885,8 @@ "tracelinks": "SyRS-003", "konsolidierung": "nein", "pruefidee": "Neuer Controller ohne Attribut → automatisch authentifizierungspflichtig (Integrationstest 401).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-006", @@ -1800,7 +1902,8 @@ "tracelinks": "SyRS-006, SyRS-055", "konsolidierung": "nein", "pruefidee": "Falsches AD-Passwort → genau ein Bind-Fehlversuch (Code 49-Abbruch); Log enthält RequestId.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-007", @@ -1816,7 +1919,8 @@ "tracelinks": "SyRS-055, SyRS-006", "konsolidierung": "nein", "pruefidee": "Bestandsprüfung DB: Hashformat 40-Hex; Login nach Ablaufdatum weiterhin möglich (Ist-Nachweis).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-008", @@ -1832,7 +1936,8 @@ "tracelinks": "SyRS-007", "konsolidierung": "nein", "pruefidee": "Zeitmanipulierter Test: Zugriff 4 min nach Ablauf via Cache noch möglich (Ist), 6 min → InvalidTicket.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-009", @@ -1848,7 +1953,8 @@ "tracelinks": "SyRS-007", "konsolidierung": "nein", "pruefidee": "DB enthält keinen Klartext-Token; falscher Token → Log ValidationFailed mit IP.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-010", @@ -1864,7 +1970,8 @@ "tracelinks": "SyRS-008, SyRS-055", "konsolidierung": "Kandidat: zwei 2FA-Implementierungen (Login vs. TOTP) zusammenführen", "pruefidee": "TOTP-PIN von vor 3 Minuten wird akzeptiert (Ist-Nachweis der Schwäche) → Soll: abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -1880,7 +1987,8 @@ "tracelinks": "SyRS-009, SyRS-011, SyRS-062", "konsolidierung": "Kandidat: drei Prüf-Aufrufmuster", "pruefidee": "Rechteentzug wirkt erst nach Session-Neuaufbau (Ist-Nachweis Cache); AppRightLog-Vollständigkeit je Änderung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -1896,7 +2004,8 @@ "tracelinks": "SyRS-010, SyRS-028", "konsolidierung": "nein", "pruefidee": "Manipulierte Kunden-ID im Request → Scope bleibt eigener Kunde.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-013", @@ -1912,7 +2021,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Manipulierte Lizenzdatei → Startabbruch (Signaturprüfung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-014", @@ -1928,7 +2038,8 @@ "tracelinks": "SyRS-055, SyRS-070", "konsolidierung": "Kandidat: vier Krypto-Klassen auf eine sichere Komponente", "pruefidee": "Zwei gleiche Klartexte → gleicher Ciphertext (Ist-Nachweis deterministischer IV).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-015", @@ -1944,7 +2055,8 @@ "tracelinks": "SyRS-028", "konsolidierung": "nein", "pruefidee": "Seitenscan: jede .razor-Seite außerhalb Setup/Webform trägt Autorisierungsattribute.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-016", @@ -1960,7 +2072,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "nein", "pruefidee": "Golden-Master-E2E (vorhandene 3254 Snapshots) je Belegart.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-017", @@ -1976,7 +2089,8 @@ "tracelinks": "SyRS-013, SyRS-029, SyRS-031, SyRS-038", "konsolidierung": "nein", "pruefidee": "Matrix-Extraktionstest: alle Hook-Rückgaben je Belegart gegen dokumentierte Tabelle.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-018", @@ -1992,7 +2106,8 @@ "tracelinks": "SyRS-013, SyRS-029", "konsolidierung": "nein", "pruefidee": "Bestellung 1, WE 2 → Bestellung Completed.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-019", @@ -2008,7 +2123,8 @@ "tracelinks": "SyRS-013, SyRS-017 (StRS-003), SyRS-029", "konsolidierung": "nein", "pruefidee": "Folgebeleg über Restmenge hinaus → Fehlermeldung mit korrekter Restangabe.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-020", @@ -2024,7 +2140,8 @@ "tracelinks": "SyRS-013, SyRS-017", "konsolidierung": "nein", "pruefidee": "Zwei Sessions speichern denselben Beleg → zweite erhält Konfliktfehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-021", @@ -2041,7 +2158,8 @@ "tracelinks": "SyRS-013, SyRS-050", "konsolidierung": "Kandidat: Lese-/Schreibmodell vereinheitlichen", "pruefidee": "Neues Testfeld nur im Entity → nach Save+Reload leer (Ist-Nachweis).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-022", @@ -2057,7 +2175,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "Kandidat: eine Objektart-Kodierung", "pruefidee": "Herkunftskette Angebot→Auftrag→Rechnung liefert korrekte Vor-/Nachfolgerlisten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-023", @@ -2073,7 +2192,8 @@ "tracelinks": "SyRS-014", "konsolidierung": "nein", "pruefidee": "Konkurrierender Vergabetest (siehe SyRS-014).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-024", @@ -2089,7 +2209,8 @@ "tracelinks": "SyRS-015, SyRS-025", "konsolidierung": "nein", "pruefidee": "Preisfindungs-Testmatrix (siehe SyRS-015) inkl. Vertragswert −10 ⇒ 10 % Rabatt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-025", @@ -2105,7 +2226,8 @@ "tracelinks": "SyRS-015", "konsolidierung": "nein", "pruefidee": "Position hinzufügen → Rabattposition ändert sich automatisch korrekt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-026", @@ -2121,7 +2243,8 @@ "tracelinks": "SyRS-015, SyRS-016, SyRS-025", "konsolidierung": "nein", "pruefidee": "Referenzbeleg-Suite (inkl. CHF, Fremdwährung, Precision 4) gegen Sollbeträge.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-027", @@ -2137,7 +2260,8 @@ "tracelinks": "SyRS-016, SyRS-025", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-016-Testfälle; zusätzlich Gutschrift nach Satzwechsel behält Altsatz.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-028", @@ -2153,7 +2277,8 @@ "tracelinks": "SyRS-018", "konsolidierung": "nein", "pruefidee": "SyRS-018-Test.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-029", @@ -2169,7 +2294,8 @@ "tracelinks": "SyRS-019", "konsolidierung": "nein", "pruefidee": "SyRS-019-Tests.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-030", @@ -2185,7 +2311,8 @@ "tracelinks": "SyRS-015", "konsolidierung": "nein", "pruefidee": "Freigabe durch Benutzer ohne Recht → Ablehnungstext.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-031", @@ -2201,7 +2328,8 @@ "tracelinks": "SyRS-020, SyRS-022", "konsolidierung": "nein", "pruefidee": "REST-Aufruf HelpdeskUpdate mit Closed-Status ohne Recht → Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-032", @@ -2217,7 +2345,8 @@ "tracelinks": "SyRS-022, SyRS-009", "konsolidierung": "Kandidat: drei Implementierungen derselben Regel (Hauptbefund Konsolidierung)", "pruefidee": "Äquivalenztest der drei Filter mit identischen Rechten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-033", @@ -2233,7 +2362,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "nein", "pruefidee": "SyRS-021-Zeitraffer.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-034", @@ -2249,7 +2379,8 @@ "tracelinks": "SyRS-020", "konsolidierung": "nein", "pruefidee": "ChangedDate direkt in DB ändern → Fingerprintprüfung meldet Ticket.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-035", @@ -2265,7 +2396,8 @@ "tracelinks": "SyRS-023", "konsolidierung": "nein", "pruefidee": "SyRS-023-Sperrkatalog.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-036", @@ -2281,7 +2413,8 @@ "tracelinks": "SyRS-023, SyRS-024", "konsolidierung": "nein", "pruefidee": "OWN_TIME_EDIT-Benutzer editiert fremde Zeit im Billing → Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-037", @@ -2297,7 +2430,8 @@ "tracelinks": "SyRS-024", "konsolidierung": "nein", "pruefidee": "Ticket mit einer offenen berechenbaren Zeit → nicht in CloseTicketI3Ds.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-038", @@ -2313,7 +2447,8 @@ "tracelinks": "SyRS-020", "konsolidierung": "nein", "pruefidee": "Editor-fremder Benutzer ändert Caption eines Template-Items → Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-039", @@ -2329,7 +2464,8 @@ "tracelinks": "SyRS-020", "konsolidierung": "nein", "pruefidee": "Dienst 3 Tage aus → ein Nachhollauf erzeugt exakt die versäumten Tickets.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-040", @@ -2345,7 +2481,8 @@ "tracelinks": "SyRS-027", "konsolidierung": "nein", "pruefidee": "SyRS-027-E2E; zusätzlich: Vorlagendatei bleibt nach Signatur unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-041", @@ -2361,7 +2498,8 @@ "tracelinks": "SyRS-027", "konsolidierung": "nein", "pruefidee": "Angebot stornieren → Portalaktionen gesperrt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-042", @@ -2377,7 +2515,8 @@ "tracelinks": "SyRS-026", "konsolidierung": "nein", "pruefidee": "Zwei Prüfer bestätigen parallel → einer erhält Zustandsfehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-043", @@ -2393,7 +2532,8 @@ "tracelinks": "SyRS-028", "konsolidierung": "nein", "pruefidee": "Fuzzing der Portal-Endpunkte mit fremden IDs → 0 Treffer/Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-044", @@ -2409,7 +2549,8 @@ "tracelinks": "SyRS-031", "konsolidierung": "nein", "pruefidee": "Parallelbuchungstest deckt Lost-Update im Ist auf (Erwartung dokumentieren).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-045", @@ -2425,7 +2566,8 @@ "tracelinks": "SyRS-031", "konsolidierung": "nein", "pruefidee": "Wiederholtes Speichern desselben WE → genau eine Buchung; Log je Buchung vorhanden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-046", @@ -2441,7 +2583,8 @@ "tracelinks": "SyRS-031, SyRS-029", "konsolidierung": "nein", "pruefidee": "Rechenbeispiel: Bestand 10@100, Zugang 5@130 → EK 110.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-047", @@ -2457,7 +2600,8 @@ "tracelinks": "SyRS-030", "konsolidierung": "nein", "pruefidee": "SyRS-030-Rechenbeispiele; Intake-Fehlersimulation (Ist: unsichtbar).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-048", @@ -2473,7 +2617,8 @@ "tracelinks": "SyRS-032", "konsolidierung": "nein", "pruefidee": "SyRS-032-Matrix.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-049", @@ -2489,7 +2634,8 @@ "tracelinks": "SyRS-033", "konsolidierung": "nein", "pruefidee": "Abschluss durch Benutzer ohne CLOSE_INVENTORY (Ist: möglich → dokumentieren; Soll: verweigern).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-050", @@ -2505,7 +2651,8 @@ "tracelinks": "SyRS-034", "konsolidierung": "nein", "pruefidee": "Umbuchung → Ziel-Log müsste StockIncrease sein (Ist: Decrease — Defektnachweis).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-051", @@ -2521,7 +2668,8 @@ "tracelinks": "SyRS-035", "konsolidierung": "nein", "pruefidee": "SyRS-035-Prozessfälle inkl. DB-Nachweis der Kompensationen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-052", @@ -2537,7 +2685,8 @@ "tracelinks": "SyRS-036, SyRS-037, SyRS-047, SyRS-048", "konsolidierung": "Kandidat: HTTP-/Secret-Vereinheitlichung", "pruefidee": "Inventar-Abgleich: jede Integration hat dokumentierten Endpunkt-, Auth- und Secret-Status.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-053", @@ -2553,7 +2702,8 @@ "tracelinks": "SyRS-039", "konsolidierung": "nein", "pruefidee": "Beleg mit 1-Cent-Rundungsdifferenz → Steuer geglättet; 2,50-Differenz → Abbruch bzw. Korrekturpaar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-054", @@ -2569,7 +2719,8 @@ "tracelinks": "SyRS-039", "konsolidierung": "nein", "pruefidee": "Golden-File-Vergleich gegen validierte Referenzexporte.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-055", @@ -2586,7 +2737,8 @@ "tracelinks": "SyRS-040", "konsolidierung": "nein", "pruefidee": "KoSIT-/EN-Validatoren; Grenzfall 2,99/3,01 Differenz.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-056", @@ -2602,7 +2754,8 @@ "tracelinks": "SyRS-041", "konsolidierung": "nein", "pruefidee": "SyRS-041-Tests + XSD-Validierung pain.008.001.08.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-057", @@ -2618,7 +2771,8 @@ "tracelinks": "SyRS-042", "konsolidierung": "nein", "pruefidee": "SyRS-042-Fälle inkl. 21-Rechnungen-Grenze (keine Teilsummensuche).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-058", @@ -2634,7 +2788,8 @@ "tracelinks": "SyRS-043", "konsolidierung": "nein", "pruefidee": "Lauf + Reset → Ausgangszustand exakt wiederhergestellt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-059", @@ -2650,7 +2805,8 @@ "tracelinks": "SyRS-044", "konsolidierung": "nein", "pruefidee": "SyRS-044-Tests.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-060", @@ -2666,7 +2822,8 @@ "tracelinks": "SyRS-045, SyRS-067", "konsolidierung": "nein", "pruefidee": "SyRS-045/067-Tests; Abbruch mitten im Paging → kein Delta-Verlust.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-061", @@ -2683,7 +2840,8 @@ "tracelinks": "SyRS-050", "konsolidierung": "nein", "pruefidee": "Schema-Abgleichstest Mapping↔DB (vorhandene SQLite-Mappingtests erweitern).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-062", @@ -2699,7 +2857,8 @@ "tracelinks": "SyRS-050", "konsolidierung": "nein", "pruefidee": "Statischer Scan: keine DirectReplace-Parameter mit Benutzereingaben (Ist-Fundstellen listen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-063", @@ -2716,7 +2875,8 @@ "tracelinks": "SyRS-050", "konsolidierung": "nein", "pruefidee": "Zweifacher Start → Skripte laufen nicht erneut (Journalprüfung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-064", @@ -2732,7 +2892,8 @@ "tracelinks": "SyRS-050, SyRS-057, SyRS-061", "konsolidierung": "Kandidat: generisches vs. fachliches Audit vereinheitlichen", "pruefidee": "Überlanger String → still gekürzt (Ist-Nachweis); Attribut-Suche = 0 Treffer.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-065", @@ -2748,7 +2909,8 @@ "tracelinks": "SyRS-053, SyRS-054", "konsolidierung": "nein", "pruefidee": "Array-Contains-LINQ-Abfrage unter .NET 10 → funktioniert (Rewriter greift).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-066", @@ -2764,7 +2926,8 @@ "tracelinks": "SyRS-049, SyRS-054, SyRS-060, SyRS-068", "konsolidierung": "nein", "pruefidee": "Neuer Testdienst erbt Verhalten (Flag, Backoff) ohne Zusatzcode.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-067", @@ -2780,7 +2943,8 @@ "tracelinks": "SyRS-056, SyRS-059", "konsolidierung": "nein", "pruefidee": "SyRS-056-Payload-Inspektion.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-068", @@ -2796,7 +2960,8 @@ "tracelinks": "SyRS-051", "konsolidierung": "nein", "pruefidee": "Stemming-Test: „Server“/„Servern“ treffen identisch.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-069", @@ -2812,7 +2977,8 @@ "tracelinks": "SyRS-020, SyRS-065", "konsolidierung": "nein", "pruefidee": "Prozess speichern → Referenzen auf alte Shape-IDs ungültig (Ist-Nachweis).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-070", @@ -2828,7 +2994,8 @@ "tracelinks": "SyRS-064", "konsolidierung": "nein", "pruefidee": "API-Direktaufruf Finished→OpenNotStarted (Ist: akzeptiert — Lückennachweis).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-071", @@ -2844,7 +3011,8 @@ "tracelinks": "SyRS-069", "konsolidierung": "Kandidat: Alt-/Neumodell", "pruefidee": "Account-Neuanlage → Kunden-/Anschrif-Sätze konsistent; zwei parallele Alt-Kundenanlagen → Kollisionsrisiko (Ist-Nachweis).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-072", @@ -2860,7 +3028,8 @@ "tracelinks": "SyRS-069", "konsolidierung": "nein", "pruefidee": "StRS-027-Tests + Injection-Testfall auf Herstellercode-Prüfung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-073", @@ -2876,7 +3045,8 @@ "tracelinks": "SyRS-069, SyRS-023", "konsolidierung": "nein", "pruefidee": "Mitarbeiter deaktivieren → alte Zeiten weiterhin abrechenbar, neue Einplanung ohne Artikel unmöglich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-074", @@ -2892,7 +3062,8 @@ "tracelinks": "SyRS-070", "konsolidierung": "Kandidat: PasswordManagementArea entfernen", "pruefidee": "API-Abruf der Property-Werte enthält nie ValueEncryptedString; AccessLog je Entschlüsselung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-075", @@ -2908,6 +3079,7 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Rechte-/Lizenzmatrix-Test je Modulzeile.", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-fable-5/builtin/high/01_Lauf_2026-08-25_220735_v3.7.0-15db/_meta/anforderungen.md b/Versuche/Versuch_01/claude-fable-5/builtin/high/01_Lauf_2026-08-25_220735_v3.7.0-15db/_meta/anforderungen.md index d29a9864..4736a137 100644 --- a/Versuche/Versuch_01/claude-fable-5/builtin/high/01_Lauf_2026-08-25_220735_v3.7.0-15db/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-fable-5/builtin/high/01_Lauf_2026-08-25_220735_v3.7.0-15db/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 2,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 172 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (58 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 172 von 172 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210903_v3.6.0-7adf/Protokoll.md b/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210903_v3.6.0-7adf/Protokoll.md index a23ab2a9..0c15789d 100644 --- a/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210903_v3.6.0-7adf/Protokoll.md +++ b/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210903_v3.6.0-7adf/Protokoll.md @@ -95,6 +95,8 @@ Ohne Subagenten sind Haupt- und Gesamtwerte für `claude-fable-5` identisch. Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -131,6 +133,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 207 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -148,6 +154,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (68 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 207 von 207 mit Tracelinks (100,0 %) | ## Fable-Block (P, Q) diff --git a/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210903_v3.6.0-7adf/_meta/anforderungen.json b/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210903_v3.6.0-7adf/_meta/anforderungen.json index e1d6f013..1c022090 100644 --- a/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210903_v3.6.0-7adf/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210903_v3.6.0-7adf/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-018, SyRS-022, SyRS-023, SyRS-066", "konsolidierung": "Kandidat: Doppelstruktur Adressstamm vs. CRM-Modul (per Einstellung umgeschaltet) sowie Legacy-Tabelle Kunden vs. Accounts-Datenmodell – im Zielsystem zu einem Kundenstamm zusammenführen.", "pruefidee": "Neuanlage eines Kunden mit abweichender Rechnungs-Zahlungskondition; anschließende Rechnungserstellung muss diese Kondition vorbelegen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -33,7 +34,8 @@ "tracelinks": "SyRS-018, SyRS-021", "konsolidierung": "nein", "pruefidee": "Auftrag mit 2 Positionen in Lieferschein überführen; Ursprungsauftrag muss die verarbeitete Menge ausweisen und eine Mengenreduktion unter die gelieferte Menge ablehnen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -50,7 +52,8 @@ "tracelinks": "SyRS-027, SyRS-018", "konsolidierung": "nein", "pruefidee": "Stornoversuch einer bereits an die FIBU exportierten Rechnung muss mit Fehlermeldung abgelehnt werden; Storno einer offenen Rechnung erzeugt neue Version mit Status „storniert\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -68,7 +71,8 @@ "tracelinks": "SyRS-032, SyRS-033, SyRS-034, SyRS-035, SyRS-036", "konsolidierung": "Kandidat: drei Abrechnungswege (Vertragsabrechnung, vereinfachte Ticketabrechnung, Pauschalabrechnung) mit überlappender Funktion – im Zielsystem als eine Abrechnungs-Engine konsolidierbar.", "pruefidee": "Vertrag mit Monatsintervall und Zählerposition anlegen; Abrechnungslauf simulieren und prüfen, dass Freimenge abgezogen, Staffelpreis angewendet und ein Abrechnungsergebnis-Datensatz geschrieben wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -86,7 +90,8 @@ "tracelinks": "SyRS-037, SyRS-038, SyRS-039, SyRS-069", "konsolidierung": "nein", "pruefidee": "Benutzer mit SHOW_HELPDESK_ONLY_OWN darf nur Tickets sehen, in denen er Bearbeiter oder Verantwortlicher ist (Listen- und Detailzugriff testen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -104,7 +109,8 @@ "tracelinks": "SyRS-040, SyRS-041, SyRS-042", "konsolidierung": "nein", "pruefidee": "Zeit mit Signatur erfassen, in Rechnung abrechnen; anschließender Verschiebe-/Löschversuch der Zeit muss abgelehnt werden, Signaturlöschung nur mit Spezialrecht möglich sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -121,7 +127,8 @@ "tracelinks": "SyRS-039", "konsolidierung": "nein", "pruefidee": "Eskalationstyp mit Stufe 1 = 4 h Wartezeit und Arbeitszeit 8–17 Uhr konfigurieren; Testlauf (TestEscalation) muss außerhalb des Zeitfensters keine, innerhalb eine Stufe-1-Eskalation liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -139,7 +146,8 @@ "tracelinks": "SyRS-046, SyRS-019", "konsolidierung": "nein", "pruefidee": "Bestellung anlegen, Wareneingang buchen; Bestand und Bestellstatus müssen fortgeschrieben werden (Intake-Update in SaveReceipt-Pipeline).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -156,7 +164,8 @@ "tracelinks": "SyRS-047, SyRS-048", "konsolidierung": "nein", "pruefidee": "Artikel mit Unterschreitung des Mindestbestands anlegen; Bestellvorschlagsliste muss den Artikel mit Distributorenpreisen anzeigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -173,7 +182,8 @@ "tracelinks": "SyRS-050, SyRS-051, SyRS-052", "konsolidierung": "nein", "pruefidee": "Serialisierten Artikel per Lieferschein ausbuchen; BarCode.State muss auf InDeliveryList/AssignedToDeliveryList wechseln und der Lagerbestand sinken.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -190,7 +200,8 @@ "tracelinks": "SyRS-053", "konsolidierung": "nein", "pruefidee": "Inventur ohne Seriennummern anlegen, Lager abschließen; weitere Zählungen auf dem geschlossenen Lager müssen abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -208,7 +219,8 @@ "tracelinks": "SyRS-054, SyRS-055", "konsolidierung": "nein", "pruefidee": "Teilkommissionierung eines Auftrags durchführen; Lieferschein-Erstellung muss die kommissionierte Menge übernehmen und den Kommissionierauftragsstatus aktualisieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -225,7 +237,8 @@ "tracelinks": "SyRS-056, SyRS-057", "konsolidierung": "nein", "pruefidee": "Kunde mit aktivem, befristetem Mahnstopp: Mahnlauf innerhalb des Zeitraums darf keine Mahnung erzeugen, danach schon.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -243,7 +256,8 @@ "tracelinks": "SyRS-058, SyRS-059, SyRS-060", "konsolidierung": "nein", "pruefidee": "Bankumsatz mit Verwendungszweck = Rechnungsnummer importieren; Auto-Zuordnung muss die Rechnung vorschlagen und Buchung den offenen Posten ausgleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-015", @@ -262,7 +276,8 @@ "tracelinks": "SyRS-061, SyRS-062, SyRS-063", "konsolidierung": "nein", "pruefidee": "Rechnung als XRechnung 3.0.1 exportieren und mit KOSIT-Validator prüfen (Validator-Referenz in docs/guides/development/xrechnung.md).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-016", @@ -279,7 +294,8 @@ "tracelinks": "SyRS-065", "konsolidierung": "nein", "pruefidee": "Schema mit Kundenzuordnung anlegen, Beleg fakturieren, Provisionsauswertung muss den Umsatz dem zugeordneten Mitarbeiter zurechnen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-017", @@ -298,7 +314,8 @@ "tracelinks": "SyRS-006, SyRS-003", "konsolidierung": "nein", "pruefidee": "Benutzer ohne CREATE_CUSTOMER erhält beim Anlegen eines Kunden die Fehlermeldung „Fehlende Rechte…\" (BL-seitig, auch bei API-Aufruf).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-018", @@ -316,7 +333,8 @@ "tracelinks": "SyRS-005, SyRS-011", "konsolidierung": "nein", "pruefidee": "Ohne PasswordManager-Lizenz dürfen die Passwort-Manager-Module nicht in der Modulliste erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-019", @@ -334,7 +352,8 @@ "tracelinks": "SyRS-013, SyRS-019", "konsolidierung": "nein", "pruefidee": "Zwei Filialen mit getrennten Rechnungsnummernkreisen konfigurieren; Rechnungen beider Filialen müssen aus dem jeweils richtigen Kreis nummeriert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-020", @@ -352,7 +371,8 @@ "tracelinks": "SyRS-066, SyRS-004", "konsolidierung": "nein", "pruefidee": "WebAccount-Login darf nur Tickets/Belege des eigenen Kunden listen (Zugriff auf fremde ticketId per URL muss verweigert werden).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-021", @@ -369,7 +389,8 @@ "tracelinks": "SyRS-067", "konsolidierung": "nein", "pruefidee": "WebAccount ohne Sonderpreise sieht leeren Shop; nach Anlage eines Sonderpreises erscheint der Artikel im Shop.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-022", @@ -387,7 +408,8 @@ "tracelinks": "SyRS-068", "konsolidierung": "nein", "pruefidee": "Angebot als WebOffer versenden, im Browser annehmen und signieren; Status muss auf WebOfferSign wechseln und die Signatur am Vorgang gespeichert sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-023", @@ -404,7 +426,8 @@ "tracelinks": "SyRS-071", "konsolidierung": "nein", "pruefidee": "Neuen Auftrag speichern; im Kunden-Auftragsordner muss ein Unterordner „Auftrag \" entstehen und am Beleg (DirectoryI3D) verknüpft sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-024", @@ -421,7 +444,8 @@ "tracelinks": "SyRS-077", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Controlling-Rechte darf Management-Info nicht öffnen; Reportserver erzeugt einen geplanten Report zur konfigurierten Zeit.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-025", @@ -439,7 +463,8 @@ "tracelinks": "SyRS-020, SyRS-072, SyRS-031", "konsolidierung": "nein", "pruefidee": "Beleg zweimal ändern; es müssen zwei Versionsdatensätze existieren und der Ursprungszustand vollständig rekonstruierbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-026", @@ -456,7 +481,8 @@ "tracelinks": "SyRS-080", "konsolidierung": "nein", "pruefidee": "Benutzer ohne ACCESS_DSGVO_MODULE sieht das DSGVO-Modul nicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-027", @@ -474,7 +500,8 @@ "tracelinks": "SyRS-073, SyRS-074, SyRS-075, SyRS-076", "konsolidierung": "nein", "pruefidee": "Eingehender Anruf mit bekannter Rufnummer öffnet/protokolliert den Kundenbezug im Telefonate-Modul.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-028", @@ -491,7 +518,8 @@ "tracelinks": "SyRS-048", "konsolidierung": "nein", "pruefidee": "Test-EDI-Datei (OpenTrans-Rechnung) einspielen; System muss sie der Bestellung zuordnen und einen EDI-Log-Eintrag mit Status erzeugen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-029", @@ -508,7 +536,8 @@ "tracelinks": "SyRS-081", "konsolidierung": "nein", "pruefidee": "Produktionsauftrag anlegen; Positionsstatuswechsel müssen den definierten Enum-Werten folgen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-030", @@ -526,7 +555,8 @@ "tracelinks": "SyRS-082, SyRS-022", "konsolidierung": "Kandidat: zwei Projektwelten (CRM-Projekte vs. Ticket-Projekte) – fachliche Zusammenführung im Zielsystem prüfen.", "pruefidee": "Einstellung „Projektnummer erforderlich\" aktivieren; Belegspeicherung ohne Projektnummer muss eine Rückfrage/Fehlermeldung erzeugen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-031", @@ -543,7 +573,8 @@ "tracelinks": "SyRS-015", "konsolidierung": "nein", "pruefidee": "Umschalten der Oberflächensprache auf Englisch; Nexus-Oberflächentexte müssen aus .en-US.resx geladen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-032", @@ -561,7 +592,8 @@ "tracelinks": "SyRS-064", "konsolidierung": "nein", "pruefidee": "Barrechnung im Altweg erzeugen; Kassenbuch muss die Zahlung ausweisen. Im neuen Speicherweg muss die dokumentierte Ablehnungsmeldung erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-033", @@ -580,7 +612,8 @@ "tracelinks": "SyRS-004, SyRS-007, SyRS-008, SyRS-009", "konsolidierung": "nein", "pruefidee": "Benutzer mit aktivierter 2FA muss nach Passwort eine gültige PIN eingeben; abgelaufenes Passwort (PasswordValidDurationDays) muss zum Wechsel zwingen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-034", @@ -597,7 +630,8 @@ "tracelinks": "SyRS-078, SyRS-069", "konsolidierung": "nein", "pruefidee": "Zeiterfassung anlegen; im MyDay-/Planungsbereich muss der zugehörige Zeitplan-Eintrag erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-035", @@ -615,7 +649,8 @@ "tracelinks": "SyRS-036, SyRS-084", "konsolidierung": "nein", "pruefidee": "MSP-Auswertungsposition erzeugen und in Vertrag überführen; Folgeabrechnung muss die Position fakturieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -632,7 +667,8 @@ "tracelinks": "StRS-017 (Durchsetzung serverseitiger Regeln), StRS-002", "konsolidierung": "Kandidat: Für eine Web-/SaaS-Neuimplementierung entfällt der Direkt-SQL-Modus; alle Logik ist serverseitig zu konsolidieren.", "pruefidee": "Gleiche Fachoperation (z. B. Vertragsliste laden) in beiden Verbindungsarten ausführen; Ergebnisse müssen übereinstimmen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -648,7 +684,8 @@ "tracelinks": "StRS-017, StRS-020", "konsolidierung": "nein", "pruefidee": "Upload > Standard-Bodylimit (z. B. 500 MB Dokument) muss ohne 413-Fehler durchlaufen; HTTPS-Endpunkt mit konfiguriertem Zertifikat antworten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -665,7 +702,8 @@ "tracelinks": "StRS-017, StRS-020, StRS-035", "konsolidierung": "Kandidat: Parallelität von klassischem ICentronRestService (RPC) und REST-v1 – im Zielsystem auf eine API-Technologie konsolidieren.", "pruefidee": "Aufruf POST /v1/helpdesks/{id}/close ohne Token → 401; mit Token und fehlendem Recht → Fehlermeldung der BL.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -683,7 +721,8 @@ "tracelinks": "StRS-033, StRS-020", "konsolidierung": "nein", "pruefidee": "JWT mit falscher Audience → Ablehnung; Ticket nach Ablauf → 401; Nexus-Aufruf ohne SecretKey → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -700,7 +739,8 @@ "tracelinks": "StRS-018, StRS-033", "konsolidierung": "nein", "pruefidee": "Login des Service-Boards mit Benutzer, der RIGHT_DISALLOW_SERVICEBOARD_LOGIN trägt → Ablehnung; Login mit überschrittener Lizenzanzahl → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -717,7 +757,8 @@ "tracelinks": "StRS-017", "konsolidierung": "nein", "pruefidee": "API-Aufruf „Beleg bearbeiten\" mit Benutzer ohne Edit-Recht → Fehlermeldung aus CanUserEditReceipt trotz gültiger Authentifizierung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -734,7 +775,8 @@ "tracelinks": "StRS-033", "konsolidierung": "nein", "pruefidee": "Benutzer mit 2FA: falsche PIN → Ablehnung; korrekte PIN → Zugang; erneuter Login innerhalb TwoFactorValidDurationInDays ohne erneute PIN.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -750,7 +792,8 @@ "tracelinks": "StRS-033", "konsolidierung": "Kandidat: Ablösung der SHA1-Hashes (siehe SwRS-022 und Hypothese H-02) im Zielsystem zwingend.", "pruefidee": "Passwortwechsel mit zu kurzem neuen Passwort (< PasswordMinLength) → Fehlermeldung „Das Passwort ist zu kurz\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -766,7 +809,8 @@ "tracelinks": "StRS-033", "konsolidierung": "nein", "pruefidee": "Konto mit Sperrfenster über heute: Login muss scheitern; nach Fensterende wieder möglich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -782,7 +826,8 @@ "tracelinks": "StRS-027, StRS-034", "konsolidierung": "nein", "pruefidee": "Benachrichtigung an Benutzer erzeugen; verbundener Nexus-Client muss sie ohne Neuladen erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -798,7 +843,8 @@ "tracelinks": "StRS-018", "konsolidierung": "nein", "pruefidee": "Start mit abgelaufener Lizenz → Dienststart bricht mit Lizenzfehler ab, ohne Skriptausführung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -815,7 +861,8 @@ "tracelinks": "StRS-025, StRS-018", "konsolidierung": "nein", "pruefidee": "Leere Altdatenbank starten; alle Skripte müssen fehlerfrei durchlaufen und z. B. neue Rechte (AddRightIfNotExists) vorhanden sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -832,7 +879,8 @@ "tracelinks": "StRS-019", "konsolidierung": "nein", "pruefidee": "Beleg mit BranchOrigin=Adviser2 anlegen; BranchI3D muss der Filiale des Vertriebsbetreuers entsprechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -849,7 +897,8 @@ "tracelinks": "StRS-017, StRS-018", "konsolidierung": "nein", "pruefidee": "Einstellung ändern (z. B. AutomHelpdeskStatus) und Wirkung in der Fachfunktion nachweisen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -866,7 +915,8 @@ "tracelinks": "StRS-031", "konsolidierung": "nein", "pruefidee": "Ressourcenabdeckung: für jeden Basis-String existiert ein en-Eintrag (automatisierter resx-Vergleich).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-016", @@ -883,7 +933,8 @@ "tracelinks": "StRS-025", "konsolidierung": "nein", "pruefidee": "Fehler provozieren; Eintrag muss im c-entron-Logs-Modul erscheinen; Telemetrie-Upload-Dienst muss periodisch senden (Netzwerkmitschnitt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-017", @@ -900,7 +951,8 @@ "tracelinks": "StRS-018 (Betriebsmodell), StRS-020", "konsolidierung": "nein", "pruefidee": "Host im Linux-Container starten; HTTPS-Endpunkt und Skriptlauf müssen funktionieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-018", @@ -918,7 +970,8 @@ "tracelinks": "StRS-002, StRS-003", "konsolidierung": "nein", "pruefidee": "Für jede Belegart: Anlegen, Laden, Statuswechsel offen→abgeschlossen; Verhalten muss dem gemeinsamen Modell entsprechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-019", @@ -936,7 +989,8 @@ "tracelinks": "StRS-002, StRS-019", "konsolidierung": "nein", "pruefidee": "Zwei Filialen mit eigenen Rechnungskreisen: parallel Rechnungen erzeugen; Nummern müssen kreiskonform und kollisionsfrei sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-020", @@ -953,7 +1007,8 @@ "tracelinks": "StRS-025, StRS-002", "konsolidierung": "nein", "pruefidee": "Beleg von Version 2 direkt auf 4 speichern → Ablehnung; regulärer Speichervorgang erzeugt Versionsdatensätze für Kopf und jede Position.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-021", @@ -969,7 +1024,8 @@ "tracelinks": "StRS-002", "konsolidierung": "nein", "pruefidee": "Auftragsposition nach Lieferscheinerstellung löschen → Fehlermeldung; Menge unter gelieferte Menge senken → Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-022", @@ -986,7 +1042,8 @@ "tracelinks": "StRS-001, StRS-002, StRS-030", "konsolidierung": "nein", "pruefidee": "Kunde mit Bestellnummernpflicht: Auftrag ohne Bestellnummer speichern → Rückfrage/Fehler; mit Bestellnummer → Erfolg.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-023", @@ -1002,7 +1059,8 @@ "tracelinks": "StRS-001", "konsolidierung": "nein", "pruefidee": "Kunde mit Limit 1.000 € (brutto), offener Auftrag 900 €: neue Rechnung 200 € → Dialog mit Überschreitung 100 €; Bestätigung speichert, Ablehnung nicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-024", @@ -1018,7 +1076,8 @@ "tracelinks": "StRS-002, StRS-017", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Preisrecht ändert VK einer Position; nach Speichern muss der Ursprungspreis wiederhergestellt sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-025", @@ -1035,7 +1094,8 @@ "tracelinks": "StRS-002, StRS-003", "konsolidierung": "nein", "pruefidee": "Rechnung mit „sofort abschließen\"-Kondition speichern → Status „abgeschlossen\"; Kondition wechseln → Status folgt der Regel.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-026", @@ -1052,7 +1112,8 @@ "tracelinks": "StRS-002, StRS-025", "konsolidierung": "nein", "pruefidee": "Beleg von Benutzer A sperren; Sperrversuch von B → Fehlermeldung mit Sperrinhaber; Speichern mit veralteter GUID → Konflikt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-027", @@ -1068,7 +1129,8 @@ "tracelinks": "StRS-003", "konsolidierung": "nein", "pruefidee": "Jede der fünf Ablehnungsbedingungen einzeln herbeiführen und die dokumentierte Fehlermeldung verifizieren; erfolgreicher Storno muss Vertragszähler zurücksetzen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-028", @@ -1084,7 +1146,8 @@ "tracelinks": "StRS-002, StRS-008", "konsolidierung": "nein", "pruefidee": "Zwei Aufträge desselben Kunden mit identischer Bestellnummer speichern → zweiter Vorgang erhält Duplikatmeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-029", @@ -1100,7 +1163,8 @@ "tracelinks": "StRS-002, StRS-001", "konsolidierung": "nein", "pruefidee": "Kunde mit Rabattkondition: Artikelposition hinzufügen → Rabattposition wird nach der letzten Artikelposition eingefügt und bei Preisänderung neu berechnet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-030", @@ -1116,7 +1180,8 @@ "tracelinks": "StRS-002", "konsolidierung": "nein", "pruefidee": "Vorlage speichern → Nummer negativ, Datum 1970-01-01; Beleg aus Vorlage erzeugen → regulärer Nummernkreis greift.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-031", @@ -1132,7 +1197,8 @@ "tracelinks": "StRS-025, StRS-015", "konsolidierung": "nein", "pruefidee": "Exportierte Rechnung erneut bearbeiten → Dialog erscheint; ohne Bestätigung keine neue Version.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-032", @@ -1149,7 +1215,8 @@ "tracelinks": "StRS-004", "konsolidierung": "nein", "pruefidee": "Vertrag mit Intervall „monatlich, Dauer 3\" anlegen; nächste Abrechnung muss quartalsweise fällig werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-033", @@ -1166,7 +1233,8 @@ "tracelinks": "StRS-004", "konsolidierung": "nein", "pruefidee": "Zwei aufeinanderfolgende Vertragsrechnungen erzeugen; Storno der ersten → Ablehnung mit dokumentierter Meldung; Storno der letzten → Vertrag zurückgesetzt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-034", @@ -1183,7 +1251,8 @@ "tracelinks": "StRS-004", "konsolidierung": "nein", "pruefidee": "Zählerstand unterhalb des letzten Standes eingeben → Historienprüfung muss anschlagen; Abrechnung mit Freimenge 1000 und Stand 1500 → 500 abrechenbare Einheiten mit Staffelpreis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-035", @@ -1200,7 +1269,8 @@ "tracelinks": "StRS-004, StRS-006", "konsolidierung": "nein", "pruefidee": "Kontingent 10 h, Zeiterfassung 4 h abrechnen → ContingentUsedHours = 4; Belegänderung muss Saldo neu berechnen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-036", @@ -1217,7 +1287,8 @@ "tracelinks": "StRS-004, StRS-035", "konsolidierung": "nein", "pruefidee": "Importdatei mit Sonderartikeln einspielen; Vertrag muss die Positionen zeigen und der Abrechnungslauf sie fakturieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-037", @@ -1235,7 +1306,8 @@ "tracelinks": "StRS-005", "konsolidierung": "nein", "pruefidee": "Neuen Status anlegen und einem Ticket zuweisen; Benutzer ohne ADD_NEW_HELPDESK_TYPE darf keine Typen anlegen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-038", @@ -1252,7 +1324,8 @@ "tracelinks": "StRS-005", "konsolidierung": "nein", "pruefidee": "Ticket schließen → Status = konfigurierter Abschlussstatus, ClosedAt gesetzt, ToDos entfernt, Historieneintrag „Close\" vorhanden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-039", @@ -1268,7 +1341,8 @@ "tracelinks": "StRS-007", "konsolidierung": "nein", "pruefidee": "Typ mit Stufe1=2h, Arbeitszeit 8–17, Samstag inaktiv: Vorgang Freitag 16:30 → Eskalation Montag 09:30 (Zeitfensterrechnung nachvollziehen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-040", @@ -1285,7 +1359,8 @@ "tracelinks": "StRS-006", "konsolidierung": "nein", "pruefidee": "Zeit 10:00–12:30 mit 30 min Pause erfassen; Timer-Feld muss 9000 Sekunden minus Pausenregel entsprechen (Berechnungsregel nachrechnen) und ein Log-Eintrag existieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-041", @@ -1302,7 +1377,8 @@ "tracelinks": "StRS-006", "konsolidierung": "nein", "pruefidee": "Abgerechnete Zeit verschieben → Ablehnung; Signatur entfernen ohne DELETE_HELPDESK_SIGNATURE → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-042", @@ -1320,7 +1396,8 @@ "tracelinks": "StRS-006", "konsolidierung": "Kandidat: Überschneidung mit Vertragsabrechnung (Kontingente) und Pauschalabrechnung – einheitliche Abrechnungs-Engine im Zielsystem.", "pruefidee": "Zeiten eines Monats filtern und abrechnen; erzeugte Rechnung muss die Zeiten referenzieren und deren Abrechnungsstatus wechseln.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-043", @@ -1337,7 +1414,8 @@ "tracelinks": "StRS-005", "konsolidierung": "nein", "pruefidee": "Vorlage instanziieren, Punkt abhaken; Statuswechsel muss protokolliert und rechtegebunden sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-044", @@ -1355,7 +1433,8 @@ "tracelinks": "StRS-005, StRS-002", "konsolidierung": "nein", "pruefidee": "Standardvorlage definieren; Auftrag mit 3 Positionen und Modus „Custom\" → Ticketerzeugung entsprechend Auswahl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-045", @@ -1372,7 +1451,8 @@ "tracelinks": "StRS-005, StRS-010", "konsolidierung": "nein", "pruefidee": "RMA zu Seriennummer anlegen; BarCode.State muss InRMA annehmen und der Vorgang eigene Nummern erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-046", @@ -1389,7 +1469,8 @@ "tracelinks": "StRS-008", "konsolidierung": "nein", "pruefidee": "Bestellung → Wareneingang buchen; Lagerbestand steigt, Bestellstatus wird fortgeschrieben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-047", @@ -1405,7 +1486,8 @@ "tracelinks": "StRS-009", "konsolidierung": "nein", "pruefidee": "Artikel mit Bedarf aus Auftrag: Vorschlagsliste muss Position mit Distributorenpreisen (EAN-Matrix) anzeigen; Favorit setzen und Sortierung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-048", @@ -1422,7 +1504,8 @@ "tracelinks": "StRS-028, StRS-008", "konsolidierung": "nein", "pruefidee": "OpenTrans-Testrechnung verarbeiten; Zuordnung zur Bestellung und EDI-Log-Eintrag mit Erfolgsstatus prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-049", @@ -1439,7 +1522,8 @@ "tracelinks": "StRS-008, StRS-015", "konsolidierung": "nein", "pruefidee": "PDF mit passender Scan-Konfiguration importieren; Beleg muss einer Lieferantenbuchung zugeordnet werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-050", @@ -1456,7 +1540,8 @@ "tracelinks": "StRS-010", "konsolidierung": "nein", "pruefidee": "Position mit ChangeStock=false speichern → kein Bestandseffekt; Artikel ohne Lagerzuordnung → dokumentierte Fehlermeldung („…gibt es nicht im Lager…\").", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-051", @@ -1472,7 +1557,8 @@ "tracelinks": "StRS-010, StRS-017", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Recht bucht 3 Stück bei Bestand 1 → Freigabedialog; Freigabe durch berechtigten Kollegen ermöglicht Speichern; Warnfall „Bestand -10 → -7\" darf keine Meldung erzeugen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-052", @@ -1489,7 +1575,8 @@ "tracelinks": "StRS-010", "konsolidierung": "nein", "pruefidee": "Lieferschein mit Menge 2 und nur 1 Seriennummer speichern → Fehlermeldung der Mengenprüfung; nach Buchung Statuswechsel der Seriennummern prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-053", @@ -1505,7 +1592,8 @@ "tracelinks": "StRS-011", "konsolidierung": "nein", "pruefidee": "Lager abschließen und weitere Zählung versuchen → Ablehnung; Seriennummer nicht gezählt → als Verlust markierbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-054", @@ -1521,7 +1609,8 @@ "tracelinks": "StRS-012", "konsolidierung": "nein", "pruefidee": "Teilkommissionierung 5 von 10; Auftragsmenge auf 4 senken → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-055", @@ -1538,7 +1627,8 @@ "tracelinks": "StRS-012", "konsolidierung": "nein", "pruefidee": "Paketvorlage anlegen und Versandauftrag erzeugen; API-Anfrage muss Vorlagenmaße übernehmen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-056", @@ -1555,7 +1645,8 @@ "tracelinks": "StRS-013", "konsolidierung": "nein", "pruefidee": "Rechnung teilweise ausgleichen; OPOS-Liste muss Restbetrag zeigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-057", @@ -1572,7 +1663,8 @@ "tracelinks": "StRS-013", "konsolidierung": "nein", "pruefidee": "Beleg mit Mahnstopp bis übermorgen: Lauf heute überspringt ihn, Lauf nach Ablauf mahnt Stufe 1; Kundenstatistik muss den Fall ausweisen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-058", @@ -1589,7 +1681,8 @@ "tracelinks": "StRS-014, StRS-032", "konsolidierung": "nein", "pruefidee": "Zahlung auf Rechnung erfassen; Rechnungs-Zahlbetrag und ggf. Kassenbucheintrag prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-059", @@ -1606,7 +1699,8 @@ "tracelinks": "StRS-014", "konsolidierung": "nein", "pruefidee": "Rechnung mit Lastschriftkondition ohne Mandat speichern → Rückfrage/Fehler; mit Mandat → Aufnahme in SEPA-Lauf.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-060", @@ -1623,7 +1717,8 @@ "tracelinks": "StRS-014", "konsolidierung": "nein", "pruefidee": "Umsatz mit Rechnungsnummer im Verwendungszweck importieren → Auto-Zuordnung; Buchung rückgängig machen → Zustand vor Buchung wiederhergestellt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-061", @@ -1640,7 +1735,8 @@ "tracelinks": "StRS-015", "konsolidierung": "nein", "pruefidee": "Beleg exportieren; IsReceiptExported=true muss Änderungswarnung (SyRS-031) auslösen; DATEV-Übertragung im Testsystem prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-062", @@ -1657,7 +1753,8 @@ "tracelinks": "StRS-015", "konsolidierung": "nein", "pruefidee": "XRechnung 3.0.1 erzeugen und gegen KOSIT-Validator prüfen; Gutschrift muss TypeCode 381 tragen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-063", @@ -1673,7 +1770,8 @@ "tracelinks": "StRS-015, StRS-008", "konsolidierung": "nein", "pruefidee": "ZUGFeRD-Beispieldatei importieren; erkannte Kopf-/Positionsdaten müssen dem XML entsprechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-064", @@ -1690,7 +1788,8 @@ "tracelinks": "StRS-032", "konsolidierung": "nein", "pruefidee": "Beleg mit Barkondition bezahlen; Kassenbucheintrag entsteht; Beleglöschung entfernt die Buchung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-065", @@ -1707,7 +1806,8 @@ "tracelinks": "StRS-016", "konsolidierung": "nein", "pruefidee": "Schema mit 5 % auf Warengruppe X, Kunde zugeordnet; Rechnung über X → Auswertung weist 5 % dem Betreuer zu.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-066", @@ -1724,7 +1824,8 @@ "tracelinks": "StRS-020", "konsolidierung": "nein", "pruefidee": "Mit WebAccount von Kunde A die Ticket-URL eines Tickets von Kunde B aufrufen → Zugriff verweigert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-067", @@ -1741,7 +1842,8 @@ "tracelinks": "StRS-021", "konsolidierung": "nein", "pruefidee": "Sonderpreis für Kunde anlegen → Artikel erscheint im Shop mit diesem Preis; Bestellung erzeugt Beleg im ERP.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-068", @@ -1758,7 +1860,8 @@ "tracelinks": "StRS-022", "konsolidierung": "nein", "pruefidee": "WebOffer öffnen (FirstLoaded), Menge ändern und annehmen → Zustand AcceptWebReceiptWithChangeRequests; Signatur durchführen → WebOfferSign.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-069", @@ -1775,7 +1878,8 @@ "tracelinks": "StRS-005, StRS-034", "konsolidierung": "Kandidat: Funktionsdopplung WPF-Ticketliste vs. ServiceBoard – Zielsystem: eine Web-Oberfläche.", "pruefidee": "Ticket im ServiceBoard öffnen, Zeit per Stoppuhr erfassen, schließen; Ergebnis muss dem WPF-Client entsprechen (gleiche BL).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-070", @@ -1791,7 +1895,8 @@ "tracelinks": "StRS-027", "konsolidierung": "nein", "pruefidee": "Manifest erzeugen, Add-In laden, Anmeldung durchführen; Vorgangbezug aus einer Mail herstellen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-071", @@ -1807,7 +1912,8 @@ "tracelinks": "StRS-023", "konsolidierung": "nein", "pruefidee": "Beleg speichern, Ordnerpfad prüfen; Elternordner löschen und Beleg speichern → dokumentierte Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-072", @@ -1824,7 +1930,8 @@ "tracelinks": "StRS-025", "konsolidierung": "nein", "pruefidee": "Kundenfeld ändern; ChangeLog-Eintrag mit Alt-/Neuwert und Benutzer muss entstehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-073", @@ -1841,7 +1948,8 @@ "tracelinks": "StRS-027, StRS-013", "konsolidierung": "nein", "pruefidee": "Mahnmail-Vorschau erzeugen; alle Variablen müssen durch Vorgangswerte ersetzt sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-074", @@ -1858,7 +1966,8 @@ "tracelinks": "StRS-027, StRS-005", "konsolidierung": "nein", "pruefidee": "Mail an konfiguriertes Postfach senden; Ticket mit Mailinhalt muss entstehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-075", @@ -1875,7 +1984,8 @@ "tracelinks": "StRS-027", "konsolidierung": "nein", "pruefidee": "Termin im ERP anlegen; er muss im Exchange-Postfach erscheinen (und umgekehrt je Konfiguration).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-076", @@ -1892,7 +2002,8 @@ "tracelinks": "StRS-027", "konsolidierung": "nein", "pruefidee": "Simulierter TAPI-Anruf; verbundene Clients erhalten das Ereignis, Anruf erscheint im CallLog.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-077", @@ -1910,7 +2021,8 @@ "tracelinks": "StRS-024", "konsolidierung": "nein", "pruefidee": "Benutzer mit Filialbeschränkung öffnet Auslastungsübersicht → nur eigene Filiale sichtbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-078", @@ -1926,7 +2038,8 @@ "tracelinks": "StRS-034", "konsolidierung": "nein", "pruefidee": "Event „täglicher Import\" konfigurieren, Import aussetzen → Auswertung meldet Ausbleiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-079", @@ -1943,7 +2056,8 @@ "tracelinks": "StRS-034, StRS-005", "konsolidierung": "nein", "pruefidee": "Zeiterfassung mit aktivierter Bewertung speichern; Timer erhält asynchron AiTextRatingJson; bei KI-Ausfall bleibt die Zeit gespeichert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-080", @@ -1959,7 +2073,8 @@ "tracelinks": "StRS-026", "konsolidierung": "nein", "pruefidee": "Zugriffsversuch ohne Recht → Modul unsichtbar; AV-Vertrag mit Statuswechsel anlegen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-081", @@ -1975,7 +2090,8 @@ "tracelinks": "StRS-029", "konsolidierung": "nein", "pruefidee": "Produktionsauftrag anlegen, Positionsstatus durchlaufen; Webübersicht muss den Stand zeigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-082", @@ -1991,7 +2107,8 @@ "tracelinks": "StRS-030", "konsolidierung": "Kandidat: CRM-Projekte vs. Ticket-Projekte (siehe StRS-030).", "pruefidee": "Projekt anlegen, Beleg zuordnen; Projektauswertung muss den Beleg enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-083", @@ -2008,7 +2125,8 @@ "tracelinks": "StRS-025", "konsolidierung": "nein", "pruefidee": "Zeitdatensatz ohne CreatedBy erzeugen (Altbestand simulieren); Lauf muss die Werte ergänzen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-084", @@ -2025,7 +2143,8 @@ "tracelinks": "StRS-035", "konsolidierung": "nein", "pruefidee": "Collector-Daten für Kunde erfassen; Comparer muss Abweichung zum Vertrag zeigen; Übergabe erzeugt Vertragsposition.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -2042,7 +2161,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Statische Analyse: keine NHibernate-Session-Verwendung außerhalb Centron.BL/Centron.DAO.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-002", @@ -2058,7 +2178,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Neues Modul nach Konvention anlegen; beide Verbindungsarten müssen ohne zusätzliche Registrierung funktionieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-003", @@ -2074,7 +2195,8 @@ "tracelinks": "SyRS-001, SyRS-003", "konsolidierung": "nein", "pruefidee": "Fachfehler (fehlendes Recht) erzeugen; Rückgabe muss ResultStatus.Error mit Meldung sein, keine Exception.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-004", @@ -2090,7 +2212,8 @@ "tracelinks": "SyRS-002, SyRS-011", "konsolidierung": "nein", "pruefidee": "Start ohne Lizenz → kein DB-Connect (Log prüfen); Start auf Linux → Kestrel mit HTTPS-Zertifikat.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-005", @@ -2106,7 +2229,8 @@ "tracelinks": "SyRS-004", "konsolidierung": "nein", "pruefidee": "Token mit gültiger Signatur, aber fremder Audience → 401.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-006", @@ -2122,7 +2246,8 @@ "tracelinks": "SyRS-004", "konsolidierung": "nein", "pruefidee": "Ticket ablaufen lassen; Folgeaufruf muss 401 liefern und das Ticket aus der Liste verschwinden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-007", @@ -2138,7 +2263,8 @@ "tracelinks": "SyRS-004", "konsolidierung": "nein", "pruefidee": "Aufruf mit falschem SecretKey → 403.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-008", @@ -2154,7 +2280,8 @@ "tracelinks": "SyRS-003", "konsolidierung": "nein", "pruefidee": "Controllername „HelpdeskTimers\" muss unter /v1/helpdesk-timers erreichbar sein; Swagger-Route ohne ActivateHelpPage → 404.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-009", @@ -2170,7 +2297,8 @@ "tracelinks": "SyRS-010", "konsolidierung": "nein", "pruefidee": "Verbindungsaufbau je Hub; Nachricht in einem Hub darf andere Hubs nicht erreichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-010", @@ -2186,7 +2314,8 @@ "tracelinks": "SyRS-018, SyRS-020", "konsolidierung": "Kandidat: Doppelstruktur (Views + Legacy-Tabellen + temporäre Entitäten) im Zielsystem durch ein einziges Schema ablösen.", "pruefidee": "Neues Kopffeld nur in Entität+View ergänzen: Laden zeigt Wert, Speichern verliert ihn (Negativtest der Regel).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -2202,7 +2331,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Schemaprüfung einer neuen Tabelle gegen die Konventionsliste.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -2218,7 +2348,8 @@ "tracelinks": "SyRS-012, SyRS-006", "konsolidierung": "nein", "pruefidee": "Doppelte Ausführung eines Skripts (Neustart) darf keine Fehler/Duplikate erzeugen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-013", @@ -2234,7 +2365,8 @@ "tracelinks": "SyRS-014", "konsolidierung": "nein", "pruefidee": "Zugriff auf eine Einstellung ohne Definition → Definitionspflicht schlägt an (Code-Review-Regel).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-014", @@ -2250,7 +2382,8 @@ "tracelinks": "SyRS-015", "konsolidierung": "nein", "pruefidee": "resx-Diff Basis vs. en: fehlende Übersetzungen auflisten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-015", @@ -2266,7 +2399,8 @@ "tracelinks": "SyRS-016", "konsolidierung": "nein", "pruefidee": "DEBUG-Build: Mail an extern@kunde.de versenden → Empfänger test@nexoware.com.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-016", @@ -2282,7 +2416,8 @@ "tracelinks": "SyRS-018, SyRS-072", "konsolidierung": "nein", "pruefidee": "Log-Eintrag zu Ticket und zu Rechnung: gleiche Tabelle, unterschiedliche ObjectKind-Werte.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-017", @@ -2298,7 +2433,8 @@ "tracelinks": "SyRS-006", "konsolidierung": "Kandidat: Ablage der Rechtekonstanten in Centron.WebServices.Core („EntitiesWrongPlace\") – im Zielsystem in ein Kernmodul verschieben.", "pruefidee": "Statische Prüfung: keine doppelten Rechte-IDs; neue IDs ≥ 20800000.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-018", @@ -2314,7 +2450,8 @@ "tracelinks": "SyRS-006", "konsolidierung": "nein", "pruefidee": "BL-Methode ohne Benutzerrecht aufrufen (Unit-Test) → Result.Error, kein Datenzugriff.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-019", @@ -2330,7 +2467,8 @@ "tracelinks": "SyRS-005, SyRS-011, SyRS-014", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Sales.AUTOMATED_BILLING: Vertragsabrechnungsmodul fehlt in der Modulliste.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-020", @@ -2346,7 +2484,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "nein", "pruefidee": "GetLicenseCount für Zähllizenz: Error ohne Lizenz, Zahl bei begrenzter, null bei unbegrenzter Lizenz.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-021", @@ -2362,7 +2501,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "nein", "pruefidee": "Login je ExpirationKind prüfen (OneDay-Ticket läuft nach einem Tag ab; FromSettings folgt Einstellung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-022", @@ -2378,7 +2518,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "Kandidat: Ablösung im Zielsystem zwingend (Sicherheitsniveau).", "pruefidee": "Persistierte Passwortwerte zweier Konten mit gleichem Passwort vergleichen: identische Hashes belegen fehlendes Salt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-023", @@ -2394,7 +2535,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Wechsel mit falschem Altpasswort → Fehler; mit identischem Neupasswort → Warnung, LastPasswordChangedDate unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-024", @@ -2410,7 +2552,8 @@ "tracelinks": "SyRS-007", "konsolidierung": "nein", "pruefidee": "ValidateAuthenticationPin mit falscher PIN → Fehler-Result.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-025", @@ -2426,7 +2569,8 @@ "tracelinks": "SyRS-004", "konsolidierung": "nein", "pruefidee": "Login mit unbekannter Application-GUID → „Application not found\"; Logeintrag vorhanden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-026", @@ -2442,7 +2586,8 @@ "tracelinks": "SyRS-004, SyRS-009", "konsolidierung": "nein", "pruefidee": "Nach Anmeldung müssen die Metadaten der Sitzung entsprechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-027", @@ -2458,7 +2603,8 @@ "tracelinks": "SyRS-018", "konsolidierung": "nein", "pruefidee": "Serialisierung je Belegart enthält alle Kopffelder; Version/State-Defaults bei Neuanlage prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-028", @@ -2474,7 +2620,8 @@ "tracelinks": "SyRS-018", "konsolidierung": "nein", "pruefidee": "GetReceiptStateString mit undefiniertem Wert → ArgumentOutOfRangeException.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-029", @@ -2490,7 +2637,8 @@ "tracelinks": "SyRS-022, SyRS-019, SyRS-029", "konsolidierung": "nein", "pruefidee": "Fehler in später Phase (z. B. Barcode-Buchung) → gesamter Speichervorgang rollt zurück (keine Teilpersistenz).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-030", @@ -2506,7 +2654,8 @@ "tracelinks": "SyRS-022", "konsolidierung": "nein", "pruefidee": "Beleg mit DateTime.MinValue speichern → dokumentierte Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-031", @@ -2522,7 +2671,8 @@ "tracelinks": "SyRS-020", "konsolidierung": "nein", "pruefidee": "Version n+2 senden → Ablehnung; parallele Speicherung mit gleicher Basisversion → einer erhält Konflikt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-032", @@ -2538,7 +2688,8 @@ "tracelinks": "SyRS-020", "konsolidierung": "nein", "pruefidee": "Spalte nur in Originaltabelle ergänzen → Versionierung schlägt fehl (Negativtest); danach Versionstabelle ergänzen → Erfolg.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-033", @@ -2554,7 +2705,8 @@ "tracelinks": "SyRS-006", "konsolidierung": "nein", "pruefidee": "Benutzer mit Anlagerecht nur für Filiale A: Beleg in Filiale B anlegen → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-034", @@ -2570,7 +2722,8 @@ "tracelinks": "SyRS-019", "konsolidierung": "nein", "pruefidee": "Manuell Nummer n+1 in Tabelle einfügen; nächste automatische Vergabe muss n+2 liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-035", @@ -2587,7 +2740,8 @@ "tracelinks": "SyRS-019", "konsolidierung": "nein", "pruefidee": "Rechnung nur mit Dienstleistungsartikeln zum Preis 0 erzeugen → Nummer aus InternalInvoice-Kreis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-036", @@ -2603,7 +2757,8 @@ "tracelinks": "SyRS-030", "konsolidierung": "nein", "pruefidee": "Vorlage speichern; Nummer<0, Datum=1970-01-01, kein Kreditlimit-Dialog trotz Überschreitung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-037", @@ -2619,7 +2774,8 @@ "tracelinks": "SyRS-022", "konsolidierung": "Kandidat: Einzelne Prüfungen existieren zusätzlich maskenspezifisch im WPF-Client (nicht erhoben) – bei Migration in die Server-Pipeline konsolidieren.", "pruefidee": "Je Prüfung ein Testfall (Regel verletzt → erwartete Meldung); Katalogabdeckung als Testmatrix.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-038", @@ -2635,7 +2791,8 @@ "tracelinks": "SyRS-023", "konsolidierung": "nein", "pruefidee": "Bestehenden Beleg erhöhen: Limitrechnung darf nur die Differenz zusätzlich belasten (Vorversion abgezogen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-039", @@ -2651,7 +2808,8 @@ "tracelinks": "SyRS-024", "konsolidierung": "nein", "pruefidee": "Ohne Preisrecht VK ändern und speichern; gespeicherte Position trägt den alten VK.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-040", @@ -2667,7 +2825,8 @@ "tracelinks": "SyRS-029", "konsolidierung": "nein", "pruefidee": "Artikelposition anhängen → Rabattposition rückt dahinter; Preisänderung → Rabattbetrag neu.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-041", @@ -2683,7 +2842,8 @@ "tracelinks": "SyRS-025", "konsolidierung": "nein", "pruefidee": "Status manuell auf „offen\" zurücksetzen und speichern → Automatik darf den manuellen Wechsel situationsgerecht behandeln (nicht sofort wieder schließen, gemäß Situationstyp).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-042", @@ -2699,7 +2859,8 @@ "tracelinks": "SyRS-071", "konsolidierung": "nein", "pruefidee": "Beleg Nummer 4711 (Auftrag) speichern → Ordner „Auftrag 4711\" unter Kundenauftragsordner.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-043", @@ -2715,7 +2876,8 @@ "tracelinks": "SyRS-031", "konsolidierung": "nein", "pruefidee": "Exportierten Beleg per API mit gesetztem Bestätigungsflag ändern → keine Rückfrage, neue Version entsteht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-044", @@ -2731,7 +2893,8 @@ "tracelinks": "SyRS-026", "konsolidierung": "nein", "pruefidee": "Sperren durch A, Entsperrversuch durch B mit onlyIfLockedByCurrentUser=true → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-045", @@ -2747,7 +2910,8 @@ "tracelinks": "SyRS-026", "konsolidierung": "nein", "pruefidee": "Zwei Clients laden denselben Beleg; beide speichern → zweiter erhält Konkurrenzfehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-046", @@ -2763,7 +2927,8 @@ "tracelinks": "SyRS-027", "konsolidierung": "nein", "pruefidee": "Storno einer Vertragsrechnung: Vertrag und Zeiten müssen in derselben Transaktion zurückgesetzt sein (Fehlersimulation → alles rollt zurück).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-047", @@ -2779,7 +2944,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "nein", "pruefidee": "Je Prüfung ein Verletzungsszenario mit erwarteter Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-048", @@ -2795,7 +2961,8 @@ "tracelinks": "SyRS-064", "konsolidierung": "Kandidat: Zusammenführung Barbeleg-Sonderweg mit generischem Speicherweg.", "pruefidee": "Barrechnung über generischen SaveReceipt speichern → dokumentierte Meldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-049", @@ -2811,7 +2978,8 @@ "tracelinks": "SyRS-072", "konsolidierung": "nein", "pruefidee": "Storno ausführen → AnlageLog-Eintrag mit AnlageArt=4 und Storno-Text.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-050", @@ -2827,7 +2995,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "nein", "pruefidee": "BranchOrigin=Adviser2 ohne Vertriebsbetreuer → Verhalten dokumentieren (null-Filiale/Fehler) und testen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-051", @@ -2843,7 +3012,8 @@ "tracelinks": "SyRS-022, SyRS-018", "konsolidierung": "nein", "pruefidee": "Kunde mit Firmengruppen-Flag: Belegkonditionen müssen von der Gruppe stammen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-052", @@ -2859,7 +3029,8 @@ "tracelinks": "SyRS-025, SyRS-057, SyRS-059", "konsolidierung": "nein", "pruefidee": "Kondition mit DueKind=+Monate, DueAtDay: Fälligkeitsdatum einer Rechnung nachrechnen (UpdatePaymentDueDate).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-053", @@ -2875,7 +3046,8 @@ "tracelinks": "SyRS-022, SyRS-023, SyRS-057", "konsolidierung": "Kandidat: WebPassword am Kunden vs. WebAccount-System – doppelte Web-Zugangsverwaltung zusammenführen.", "pruefidee": "Kondition je Belegart unterschiedlich pflegen; jede Belegart übernimmt ihre eigene Kondition.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-054", @@ -2891,7 +3063,8 @@ "tracelinks": "SyRS-057", "konsolidierung": "nein", "pruefidee": "Stopp mit Bis-Datum gestern → Mahnung wird erzeugt; Bis-Datum morgen → unterdrückt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-055", @@ -2907,7 +3080,8 @@ "tracelinks": "SyRS-057", "konsolidierung": "nein", "pruefidee": "Kunde mit abweichender Mahnadresse: Mahnschreiben trägt diese Adresse.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-056", @@ -2923,7 +3097,8 @@ "tracelinks": "SyRS-060", "konsolidierung": "nein", "pruefidee": "Buchung + Undo: Beleg- und Transaktionsstatus müssen exakt den Ausgangszustand erreichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-057", @@ -2939,7 +3114,8 @@ "tracelinks": "SyRS-061", "konsolidierung": "nein", "pruefidee": "Beleg exportieren; IsReceiptExported=true; Storno → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-058", @@ -2956,7 +3132,8 @@ "tracelinks": "SyRS-062", "konsolidierung": "nein", "pruefidee": "Je Profil ein Dokument erzeugen und Formatkennungs-/TypeCode-Knoten prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-059", @@ -2972,7 +3149,8 @@ "tracelinks": "SyRS-059", "konsolidierung": "nein", "pruefidee": "Schweizer Beleg speichern; ESR-Felder müssen dem Referenzschema entsprechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-060", @@ -2988,7 +3166,8 @@ "tracelinks": "SyRS-032", "konsolidierung": "nein", "pruefidee": "Vertrag mit Intervall Monat×3 anlegen; Fälligkeitsberechnung des Abrechnungslaufs prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-061", @@ -3004,7 +3183,8 @@ "tracelinks": "SyRS-033", "konsolidierung": "nein", "pruefidee": "Lauf mit einem fehlschlagenden Vertrag: Ergebnisliste zeigt Fehlerstatus mit Kommentar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-062", @@ -3020,7 +3200,8 @@ "tracelinks": "SyRS-034", "konsolidierung": "nein", "pruefidee": "Staffelpreis mitten im Zeitraum ändern; Abrechnung muss die zum Zeitpunkt gültige Staffel verwenden (Removed-Varianten).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-063", @@ -3037,7 +3218,8 @@ "tracelinks": "SyRS-035", "konsolidierung": "nein", "pruefidee": "Abgerechneten Kontingentbeleg mengenreduzieren; Vertragssaldo muss entsprechend steigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-064", @@ -3053,7 +3235,8 @@ "tracelinks": "SyRS-036", "konsolidierung": "nein", "pruefidee": "Import mit fehlerhafter Position: ResultDTO muss Fehler ausweisen, gültige Positionen dennoch verarbeitbar (Verhalten dokumentieren).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-065", @@ -3069,7 +3252,8 @@ "tracelinks": "SyRS-037", "konsolidierung": "Kandidat: Denormalisierte Kundenfelder vs. referenzielle Integrität – im Zielsystem als bewusste Snapshot-Strategie neu entscheiden.", "pruefidee": "Kundenadresse nach Ticketanlage ändern; Ticket-Schnappschuss bleibt unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-066", @@ -3085,7 +3269,8 @@ "tracelinks": "SyRS-037, SyRS-038", "konsolidierung": "nein", "pruefidee": "Abschlussstatus in Einstellungen wechseln; CloseHelpdesk muss den neuen Status setzen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-067", @@ -3101,7 +3286,8 @@ "tracelinks": "SyRS-038", "konsolidierung": "nein", "pruefidee": "Abschluss mit Pflichtfeldfehler und ignoreMandatoryFieldsOnClose=true → Abschluss gelingt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-068", @@ -3117,7 +3303,8 @@ "tracelinks": "SyRS-039", "konsolidierung": "nein", "pruefidee": "Grenzfall Wochenende: Stufe fällig Samstag bei inaktivem Samstag → Verschiebung auf Montag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-069", @@ -3133,7 +3320,8 @@ "tracelinks": "SyRS-040", "konsolidierung": "nein", "pruefidee": "Log-Schreibfehler simulieren; Zeit muss dennoch gespeichert sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-070", @@ -3149,7 +3337,8 @@ "tracelinks": "SyRS-041", "konsolidierung": "nein", "pruefidee": "Zeit in Rechnung übernehmen → InvoiceAssetItemI3D gesetzt, IsAssignedToInvoice=true.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-071", @@ -3165,7 +3354,8 @@ "tracelinks": "SyRS-040, SyRS-042", "konsolidierung": "nein", "pruefidee": "Zeit 17–19 Uhr bei Zuschlag ab 18 Uhr → genau eine Überlappung 18–19.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-072", @@ -3181,7 +3371,8 @@ "tracelinks": "SyRS-042, SyRS-006", "konsolidierung": "nein", "pruefidee": "Benutzer ohne EDIT_TIME ändert Zeit im Abrechnungsmodul → Exception/Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-073", @@ -3198,7 +3389,8 @@ "tracelinks": "SyRS-044", "konsolidierung": "nein", "pruefidee": "Zweite Vorlage als Standard markieren → erste verliert Standardkennzeichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-074", @@ -3214,7 +3406,8 @@ "tracelinks": "SyRS-050", "konsolidierung": "nein", "pruefidee": "Auftrag (bucht) → Lieferschein (gleiche Richtung): zweite Buchung muss unterbleiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-075", @@ -3230,7 +3423,8 @@ "tracelinks": "SyRS-051", "konsolidierung": "nein", "pruefidee": "Kollegen-Credentials ohne Recht → Ablehnung; mit Recht → Buchung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-076", @@ -3246,7 +3440,8 @@ "tracelinks": "SyRS-052", "konsolidierung": "nein", "pruefidee": "Zustandsübergänge je Belegprozess nachstellen und gegen Statusmodell abgleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-077", @@ -3262,7 +3457,8 @@ "tracelinks": "SyRS-052", "konsolidierung": "nein", "pruefidee": "Vorversion mit gebuchtem Barcode, neue Version ohne ihn → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-078", @@ -3278,7 +3474,8 @@ "tracelinks": "SyRS-053", "konsolidierung": "nein", "pruefidee": "AddArticle auf geschlossenem Lager → Ablehnung (IsStockClosed).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-079", @@ -3294,7 +3491,8 @@ "tracelinks": "SyRS-054", "konsolidierung": "nein", "pruefidee": "Fehler in der Fortschreibung simulieren → gesamter Belegspeichervorgang schlägt fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-080", @@ -3310,7 +3508,8 @@ "tracelinks": "SyRS-068", "konsolidierung": "nein", "pruefidee": "Jede Kundenaktion im WebOffer muss genau einen dieser Zustände erzeugen (Zustandsübergangstest).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-081", @@ -3326,7 +3525,8 @@ "tracelinks": "SyRS-066, SyRS-069", "konsolidierung": "nein", "pruefidee": "Interner Login darf /customerportal nicht erreichen und umgekehrt (Autorisierungsmatrix).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-082", @@ -3342,7 +3542,8 @@ "tracelinks": "SyRS-066, SyRS-008", "konsolidierung": "Kandidat: gemeinsame Passwortlogik AppUser/WebAccount modernisieren (siehe SwRS-022).", "pruefidee": "Passwortwechsel eines WebAccounts ändert nur dessen Datensatz; interne Konten unberührt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-083", @@ -3358,7 +3559,8 @@ "tracelinks": "SyRS-073", "konsolidierung": "nein", "pruefidee": "Neue Variable registrieren; Vorschau muss sie ersetzen, unbekannte Platzhalter bleiben sichtbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-084", @@ -3374,7 +3576,8 @@ "tracelinks": "SyRS-079", "konsolidierung": "nein", "pruefidee": "KI-Dienst abschalten; Zeit speichern → AiTextRatingJson enthält Fehlermeldung, Zeit gespeichert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-085", @@ -3390,7 +3593,8 @@ "tracelinks": "SyRS-072", "konsolidierung": "nein", "pruefidee": "Änderung eines decimal-Felds: Alt-/Neuwert müssen formatiert nachvollziehbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-086", @@ -3406,7 +3610,8 @@ "tracelinks": "SyRS-003, SyRS-038", "konsolidierung": "nein", "pruefidee": "Close per API vs. Client vergleichen (gleicher Statuswechsel, gleiche Historie).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-087", @@ -3422,7 +3627,8 @@ "tracelinks": "SyRS-072, SyRS-018", "konsolidierung": "nein", "pruefidee": "Beleg anlegen und weitergeben → zwei Aktivitätseinträge am Konto.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-088", @@ -3438,6 +3644,7 @@ "tracelinks": "SyRS-003", "konsolidierung": "nein", "pruefidee": "Routenliste generieren und gegen Controllerliste abgleichen.", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210903_v3.6.0-7adf/_meta/anforderungen.md b/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210903_v3.6.0-7adf/_meta/anforderungen.md index ba97c553..5164bfb8 100644 --- a/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210903_v3.6.0-7adf/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210903_v3.6.0-7adf/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 207 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (68 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 207 von 207 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210904_v3.6.0-58d2/Protokoll.md b/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210904_v3.6.0-58d2/Protokoll.md index b3a1269a..fdc3db82 100644 --- a/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210904_v3.6.0-58d2/Protokoll.md +++ b/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210904_v3.6.0-58d2/Protokoll.md @@ -95,6 +95,8 @@ Ohne Subagenten sind Haupt- und Gesamtwerte für `claude-fable-5` identisch. Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -131,6 +133,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 2,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 148 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -148,6 +154,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (42 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 148 von 148 mit Tracelinks (100,0 %) | ## Fable-Block (P, Q) diff --git a/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210904_v3.6.0-58d2/_meta/anforderungen.json b/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210904_v3.6.0-58d2/_meta/anforderungen.json index 3145c560..15a629eb 100644 --- a/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210904_v3.6.0-58d2/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210904_v3.6.0-58d2/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-001, SyRS-002, SyRS-003, SyRS-005, SyRS-006, SyRS-007, SyRS-010, SyRS-011, SyRS-012, SyRS-013, SyRS-014, SyRS-015, SyRS-053", "konsolidierung": "nein", "pruefidee": "Ein Angebot mit 3 Positionen in einen Auftrag weiterverarbeiten; erwartet: Auftrag enthält die Positionen mit Referenz auf das Angebot (OriginReceiptI3D).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -33,7 +34,8 @@ "tracelinks": "SyRS-016, SyRS-017, SyRS-019", "konsolidierung": "Kandidat: Abrechnungswege Vertragsabrechnung, TimerBilling (StRS-004), Pauschalabrechnung (FlatRateProject) und „Automatische Faktura\" überschneiden sich fachlich (Erzeugung von Rechnungen aus Quellobjekten) und sollten im Zielsystem vereinheitlicht werden.", "pruefidee": "Vertrag mit Monatsintervall und 1 Position abrechnen; erwartet: Rechnung mit Position, Leistungszeitraum = Abrechnungsperiode, Vertragszuordnung gespeichert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -51,7 +53,8 @@ "tracelinks": "SyRS-034, SyRS-035", "konsolidierung": "nein", "pruefidee": "Ticket mit Priorität und Fälligkeit in der Vergangenheit anlegen; erwartet: Eskalationsdienst erhöht EscalationLevel und versendet Mail an konfigurierte Empfänger.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -69,7 +72,8 @@ "tracelinks": "SyRS-036, SyRS-037", "konsolidierung": "Kandidat: siehe StRS-002 (mehrere Abrechnungswege).", "pruefidee": "Zwei abrechenbare Timer zu einem Ticket erfassen und über TimerBilling fakturieren; erwartet: Rechnung mit Zeitpositionen, Timer erhalten InvoiceAssetItemI3D.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -87,7 +91,8 @@ "tracelinks": "SyRS-010, SyRS-020, SyRS-023, SyRS-024", "konsolidierung": "nein", "pruefidee": "Überfällige Rechnung mahnen; erwartet: DunningLevel 1 mit Datum/Bearbeiter, Mahnlauf-Nummer vergeben, Mahnschreiben erzeugt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -105,7 +110,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "nein", "pruefidee": "Rechnung exportieren und anschließend neue Version anlegen; erwartet: Dialog „Dieser Beleg wurde bereits an die Buchhaltung übergeben…\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -123,7 +129,8 @@ "tracelinks": "SyRS-022", "konsolidierung": "nein", "pruefidee": "Rechnung mit aktivierter ZUGFeRD-Einstellung versenden; erwartet: Mailanhang mit ZUGFeRD-Datei (Name gemäß GetZugferdFileName).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -141,7 +148,8 @@ "tracelinks": "SyRS-038, SyRS-039, SyRS-040, SyRS-041, SyRS-055", "konsolidierung": "nein", "pruefidee": "Artikel mit Mindestbestand 5 und Bestand 2 anlegen; erwartet: Artikel erscheint im Bestellvorschlag mit Bedarf ≥ 3.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -159,7 +167,8 @@ "tracelinks": "SyRS-004", "konsolidierung": "nein", "pruefidee": "Zwei Eingangsrechnungen mit identischer externer Rechnungsnummer erfassen; erwartet: Warnung/Hinweis auf vorhandenen Beleg.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -177,7 +186,8 @@ "tracelinks": "SyRS-010, SyRS-042", "konsolidierung": "nein", "pruefidee": "Kunde mit Zahlungskondition „30 Tage\" für Rechnungen anlegen und Rechnung erstellen; erwartet: Fälligkeitsdatum = Rechnungsdatum + 30 Tage.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -195,7 +205,8 @@ "tracelinks": "SyRS-009, SyRS-046, SyRS-056", "konsolidierung": "Kandidat: Sonderpreise existieren mehrfach (AccountSpecialPrice am Konto, AddressSpecialArticle an der Adresse, SpecialAgreement, Vertragspreise) – im Zielsystem zu einem Preisregelwerk zusammenführen.", "pruefidee": "Kunde mit Preisliste 2 und Artikel mit abweichendem Price2 anlegen; erwartet: Belegposition übernimmt Price2 als Basispreis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -212,7 +223,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Kunde mit Limit 1.000 € (brutto) und offenem Auftrag über 900 €; neuen Auftrag über 200 € speichern; erwartet: Warndialog mit Differenz 100 €.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -230,7 +242,8 @@ "tracelinks": "SyRS-029", "konsolidierung": "nein", "pruefidee": "Benutzer mit SHOW_HELPDESK + SHOW_HELPDESK_ONLY_OWN meldet sich an; erwartet: Ticketliste enthält nur Tickets, in denen er Bearbeiter oder Verantwortlicher ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -248,7 +261,8 @@ "tracelinks": "SyRS-006, SyRS-048", "konsolidierung": "nein", "pruefidee": "Beleg zweimal ändern; erwartet: zwei Einträge in der Versionstabelle mit OriginalI3D-Referenz; ReceiptLog enthält die Aktionen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-015", @@ -265,7 +279,8 @@ "tracelinks": "SyRS-042", "konsolidierung": "nein", "pruefidee": "WebAccount mit SHOWONLYOWNREQUESTS meldet sich im Portal an; erwartet: nur selbst gemeldete Tickets sichtbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-016", @@ -283,7 +298,8 @@ "tracelinks": "SyRS-044", "konsolidierung": "nein", "pruefidee": "Angebot per Token öffnen und mit Unterschrift annehmen; erwartet: Status AcceptFullWebReceipt, signiertes PDF archiviert, Bearbeiter benachrichtigt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-017", @@ -301,7 +317,8 @@ "tracelinks": "SyRS-043", "konsolidierung": "nein", "pruefidee": "Kunde mit 2 Sonderpreisen meldet sich im Shop an; erwartet: genau diese Artikel mit Sonderpreisen sichtbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-018", @@ -319,7 +336,8 @@ "tracelinks": "SyRS-045", "konsolidierung": "nein", "pruefidee": "EDI-Testdatei eines unterstützten Lieferanten bereitstellen; erwartet: Beleg wird importiert, EDI-Log-Eintrag entsteht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-019", @@ -337,7 +355,8 @@ "tracelinks": "SyRS-028", "konsolidierung": "nein", "pruefidee": "Anmeldeversuch, wenn Lizenz-Count erschöpft ist; erwartet: Fehlermeldung, kein Sitzungs-Ticket.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-020", @@ -355,7 +374,8 @@ "tracelinks": "SyRS-005, SyRS-029", "konsolidierung": "nein", "pruefidee": "Zwei Filialen mit getrennten Rechnungs-Nummernkreisen; je eine Rechnung erstellen; erwartet: Nummern aus dem jeweiligen Filialkreis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-021", @@ -372,7 +392,8 @@ "tracelinks": "SyRS-047", "konsolidierung": "nein", "pruefidee": "AVV-Dokument online bestätigen; erwartet: Signatur, Ort und Datum gespeichert; Dokument dem Kundenkonto zugeordnet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-022", @@ -389,7 +410,8 @@ "tracelinks": "SyRS-053, SyRS-054", "konsolidierung": "nein", "pruefidee": "Provisionsschema einem Kunden zuordnen und Rechnung fakturieren; erwartet: Provisionsauswertung weist die Rechnung dem Mitarbeiter mit Schema-Satz zu.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-023", @@ -407,7 +429,8 @@ "tracelinks": "SyRS-012, SyRS-013, SyRS-014, SyRS-049", "konsolidierung": "nein", "pruefidee": "Beleg mit aktivierter CH-Rundung: Bruttosumme 100,02 CHF; erwartet: Rundung auf 100,00 CHF (5-Rappen-Schritt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-024", @@ -425,7 +448,8 @@ "tracelinks": "SyRS-050, SyRS-051, SyRS-032, SyRS-033, SyRS-052", "konsolidierung": "nein", "pruefidee": "Installation per Setup, Konfiguration per ConnectionManager, Start des Dienstes; erwartet: Webservice erreichbar, Clients können sich anmelden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-025", @@ -442,7 +466,8 @@ "tracelinks": "SyRS-018", "konsolidierung": "nein", "pruefidee": "Vertragsabrechnung bei abgeschaltetem RMM-Service starten; erwartet: Abbruch mit Meldung „…RMM-Service nicht erreichbar\", keine Rechnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-026", @@ -460,7 +485,8 @@ "tracelinks": "SyRS-025, SyRS-026, SyRS-027, SyRS-030, SyRS-031, SyRS-032", "konsolidierung": "nein", "pruefidee": "Benutzer mit aktivierter 2FA meldet sich nach Ablauf der Gültigkeitsdauer an; erwartet: zweiter Faktor wird erneut verlangt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -478,7 +504,8 @@ "tracelinks": "StRS-001; SwRS-005, SwRS-007, SwRS-024, SwRS-025", "konsolidierung": "nein", "pruefidee": "Beleg mit Artikel-, Freitext-, Zwischensummen- und Gesamtsummenposition speichern und laden; erwartet: Reihenfolge und Typen bleiben erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -495,7 +522,8 @@ "tracelinks": "StRS-001; SwRS-008", "konsolidierung": "nein", "pruefidee": "Rechnung stornieren; erwartet: Status „storniert\" (3) und ReceiptLog-Eintrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -512,7 +540,8 @@ "tracelinks": "StRS-001; SwRS-009, SwRS-010", "konsolidierung": "nein", "pruefidee": "Versuch, eine Gutschrift weiterzuverarbeiten; erwartet: Fehlermeldung, kein Zielbeleg.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -529,7 +558,8 @@ "tracelinks": "StRS-009; SwRS-009, SwRS-023", "konsolidierung": "nein", "pruefidee": "Eingangsrechnung mit externem Rechnungsdatum 01.03. und Kondition „+14 Tage\"; erwartet: Fälligkeit 15.03.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -545,7 +575,8 @@ "tracelinks": "StRS-001, StRS-020; SwRS-011", "konsolidierung": "nein", "pruefidee": "Zwei Rechnungen in Filiale A und eine in Filiale B anlegen; erwartet: A zählt fortlaufend, B nutzt eigenen Kreis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -562,7 +593,8 @@ "tracelinks": "StRS-001, StRS-014; SwRS-006, SwRS-013", "konsolidierung": "nein", "pruefidee": "Beleg ändern; erwartet: Version 2, Vorzustand vollständig in Versionstabelle mit OriginalI3D.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -579,7 +611,8 @@ "tracelinks": "StRS-001; SwRS-012", "konsolidierung": "nein", "pruefidee": "Benutzer A öffnet Beleg zur Bearbeitung, Benutzer B versucht dasselbe; erwartet: Hinweis auf Sperre durch A.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -595,7 +628,8 @@ "tracelinks": "StRS-012; SwRS-014", "konsolidierung": "nein", "pruefidee": "Siehe StRS-012; zusätzlich: Berechnungsart 2 setzen; erwartet: keine Prüfung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -611,7 +645,8 @@ "tracelinks": "StRS-011; SwRS-015", "konsolidierung": "nein", "pruefidee": "Position unter Mindestpreis speichern, Freigabe durch zweiten Benutzer ohne Recht; erwartet: Ablehnung mit entsprechender Meldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -627,7 +662,8 @@ "tracelinks": "StRS-001, StRS-005, StRS-010; SwRS-016", "konsolidierung": "nein", "pruefidee": "Kondition DueKind 3, DuePlusMonths 1, DueAtDay 15; Rechnung vom 20.02.; erwartet: Fälligkeit 15.03.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -643,7 +679,8 @@ "tracelinks": "StRS-001; SwRS-017", "konsolidierung": "nein", "pruefidee": "Neue Rechnung mit Barzahlungs-Kondition speichern; erwartet: Status „abgeschlossen\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -659,7 +696,8 @@ "tracelinks": "StRS-001, StRS-023; SwRS-018", "konsolidierung": "nein", "pruefidee": "USD-Beleg mit Position 300 $ anlegen, Kurs ändern, Beleg erneut speichern; erwartet: weiterhin 300 $, angepasster Basispreis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -676,7 +714,8 @@ "tracelinks": "StRS-001, StRS-023; SwRS-019", "konsolidierung": "nein", "pruefidee": "Positionen mit Ergebnisbrutto 100,02 und aktiver CH-Rundung; erwartet: Brutto 100,00, Differenz in Steuerbetrag verrechnet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -694,7 +733,8 @@ "tracelinks": "StRS-001, StRS-023; SwRS-020", "konsolidierung": "nein", "pruefidee": "MwSt-Satzwechsel zum 01.01. konfigurieren; Beleg vom 31.12. und vom 01.01. anlegen; erwartet: unterschiedliche Sätze.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -710,7 +750,8 @@ "tracelinks": "StRS-001; SwRS-021", "konsolidierung": "Kandidat: Pflichtfeldprüfungen existieren zusätzlich im Helpdesk (DoValidateMandatoryFields) und in Nexus (`/settings/required-fields`) – im Zielsystem als einheitlicher Pflichtfeld-Mechanismus zusammenführen.", "pruefidee": "Belegart mit Pflicht-Bereitstellungsdatum ohne Datum speichern; erwartet: Meldung „Bitte tragen Sie ein Bereitstellungsdatum ein.\"", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-016", @@ -727,7 +768,8 @@ "tracelinks": "StRS-002; SwRS-026, SwRS-027", "konsolidierung": "nein", "pruefidee": "Zwei Verträge desselben Kunden als Sammelrechnung abrechnen; erwartet: eine Rechnung mit Positionen beider Verträge und zwei Vertragszuordnungen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-017", @@ -744,7 +786,8 @@ "tracelinks": "StRS-002; SwRS-028", "konsolidierung": "nein", "pruefidee": "Gerät mit Startzähler 1000, Endzähler 1500, 200 Freikopien; erwartet: 300 abgerechnete Klicks zum Staffelpreis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-018", @@ -761,7 +804,8 @@ "tracelinks": "StRS-025; SwRS-029", "konsolidierung": "nein", "pruefidee": "Siehe StRS-025.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-019", @@ -777,7 +821,8 @@ "tracelinks": "StRS-002; SwRS-030", "konsolidierung": "nein", "pruefidee": "Import mit falscher Kundennummer; erwartet: Zeilenfehler mit genannter Meldung, keine Teilübernahme.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-020", @@ -794,7 +839,8 @@ "tracelinks": "StRS-005; SwRS-031", "konsolidierung": "nein", "pruefidee": "Rechnung dreimal mahnen; erwartet: Stufen 1→2→3 mit Datum/Bearbeiter; vierter Versuch schlägt fehl (ArgumentOutOfRange abgesichert).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-021", @@ -811,7 +857,8 @@ "tracelinks": "StRS-006; SwRS-032", "konsolidierung": "nein", "pruefidee": "Buchungsexport ausführen und denselben Zeitraum erneut exportieren; erwartet: bereits übertragene Belege nur auf explizite Anforderung („transferred\"-Filter).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-022", @@ -830,7 +877,8 @@ "tracelinks": "StRS-007; SwRS-033", "konsolidierung": "nein", "pruefidee": "Rechnung an Kunden mit Leitweg-ID als XRechnung erzeugen und mit KOSIT-Validator prüfen; erwartet: valide Datei mit Leitweg-ID.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-023", @@ -846,7 +894,8 @@ "tracelinks": "StRS-005; SwRS-034", "konsolidierung": "nein", "pruefidee": "Export zweier Rechnungen mit „nach Export schließen\"; erwartet: PAIN-Datei, beide Rechnungen bezahlt/abgeschlossen, Logeinträge; danach Rücknahme einer Rechnung; erwartet: wieder offen mit Beleg-Log.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-024", @@ -864,7 +913,8 @@ "tracelinks": "StRS-005; SwRS-031, SwRS-034", "konsolidierung": "nein", "pruefidee": "Rechnung teilweise bezahlt markieren; erwartet: PaidFC gesetzt, Beleg-Log-Eintrag mit auslösendem Modul.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-025", @@ -882,7 +932,8 @@ "tracelinks": "StRS-026; SwRS-035", "konsolidierung": "nein", "pruefidee": "Login mit WebAccount eines gesperrten Kunden; erwartet: Ablehnung trotz korrekter Zugangsdaten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-026", @@ -899,7 +950,8 @@ "tracelinks": "StRS-026; SwRS-036", "konsolidierung": "nein", "pruefidee": "2FA-Gültigkeit 1 Tag; Anmeldung Montag 10:00, erneute Anmeldung Dienstag 02:00; erwartet: zweiter Faktor wird wieder verlangt (Tageswechsel-Regel).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-027", @@ -915,7 +967,8 @@ "tracelinks": "StRS-026; SwRS-037", "konsolidierung": "nein", "pruefidee": "31 Minuten nach letzter Nutzung API-Aufruf mit altem Ticket; erwartet: Ablehnung/Re-Login.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-028", @@ -932,7 +985,8 @@ "tracelinks": "StRS-019; SwRS-038", "konsolidierung": "nein", "pruefidee": "Lizenz mit Count 1; zweite parallele Anmeldung anderer Maschine; erwartet: Ablehnung wegen erschöpfter Lizenz.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-029", @@ -951,7 +1005,8 @@ "tracelinks": "StRS-013, StRS-020; SwRS-022, SwRS-039", "konsolidierung": "nein", "pruefidee": "API-Aufruf SaveReceipt mit geändertem EK durch Benutzer ohne EK-Recht; erwartet: gespeicherter EK = Vorwert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-030", @@ -967,7 +1022,8 @@ "tracelinks": "StRS-026; SwRS-040", "konsolidierung": "nein", "pruefidee": "Konto mit „deaktiviert ab gestern\" anlegen; erwartet: Login abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-031", @@ -983,7 +1039,8 @@ "tracelinks": "StRS-026; SwRS-041", "konsolidierung": "nein", "pruefidee": "Token deaktivieren und API-Aufruf wiederholen; erwartet: Ablehnung; Log enthält IP und Methode.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-032", @@ -1001,7 +1058,8 @@ "tracelinks": "StRS-024, StRS-026; SwRS-001, SwRS-002, SwRS-003, SwRS-042", "konsolidierung": "Kandidat: Doppelpfad Direkt-DB vs. Webservice (BLLogic/WSLogic) ist migrationsrelevant – im Zielsystem nur noch ein Zugriffsweg.", "pruefidee": "API-Aufruf ohne bzw. mit abgelaufenem Ticket; erwartet: keine Datenlieferung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-033", @@ -1019,7 +1077,8 @@ "tracelinks": "StRS-024; SwRS-043", "konsolidierung": "nein", "pruefidee": "Dienstliste im Log nach Start prüfen; erwartet: Dienste starten gemäß Konfiguration und loggen Ausführungen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-034", @@ -1037,7 +1096,8 @@ "tracelinks": "StRS-003; SwRS-044", "konsolidierung": "nein", "pruefidee": "Neuen Ticketstatus anlegen und einem Ticket zuweisen; erwartet: Status ohne Codeänderung nutzbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-035", @@ -1054,7 +1114,8 @@ "tracelinks": "StRS-003; SwRS-045", "konsolidierung": "nein", "pruefidee": "Ticket mit Priorität und überschrittener Frist außerhalb der Arbeitszeit; erwartet: Eskalation erst am nächsten Arbeitstag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-036", @@ -1071,7 +1132,8 @@ "tracelinks": "StRS-004; SwRS-046", "konsolidierung": "nein", "pruefidee": "Timer mit 30 min Pause erfassen; erwartet: Nettozeit = Stop−Start−Pause in Auswertung/Abrechnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-037", @@ -1088,7 +1150,8 @@ "tracelinks": "StRS-004; SwRS-046", "konsolidierung": "Kandidat: siehe StRS-002 (mehrere Abrechnungswege).", "pruefidee": "Zwei Timer abrechnen; erneuter Abrechnungsversuch derselben Timer; erwartet: nicht erneut abrechenbar (Referenz gesetzt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-038", @@ -1105,7 +1168,8 @@ "tracelinks": "StRS-008; SwRS-047", "konsolidierung": "nein", "pruefidee": "Lieferschein über 2 Stück buchen; erwartet: Bestand −2 im gewählten Lager.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-039", @@ -1121,7 +1185,8 @@ "tracelinks": "StRS-008; SwRS-048", "konsolidierung": "nein", "pruefidee": "Artikel: Bestand 10 à 100 €, Zugang 10 à 200 € (gleitend); erwartet: neuer EK 150 € (± Rundung/Faktor).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-040", @@ -1139,7 +1204,8 @@ "tracelinks": "StRS-008; SwRS-049", "konsolidierung": "nein", "pruefidee": "SN-pflichtigen Artikel in Vertrag einfügen; erwartet: Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-041", @@ -1155,7 +1221,8 @@ "tracelinks": "StRS-008; SwRS-050", "konsolidierung": "nein", "pruefidee": "Siehe StRS-008-Prüfidee; zusätzlich offene Bestellung über 3 anlegen; erwartet: Bedarf sinkt entsprechend.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-042", @@ -1172,7 +1239,8 @@ "tracelinks": "StRS-015, StRS-010; SwRS-051", "konsolidierung": "Kandidat: Ticketfunktionen existieren doppelt (WPF-Helpdesk und Nexus-ServiceBoard) – Zielsystem: eine Ticketoberfläche.", "pruefidee": "Datei > 25 MB im Kundenportal hochladen; erwartet: Ablehnung; im ServiceBoard bis 100 MB möglich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-043", @@ -1190,7 +1258,8 @@ "tracelinks": "StRS-017; SwRS-052", "konsolidierung": "nein", "pruefidee": "Bestellung im Shop auslösen; erwartet: Beleg im Backend mit WebCart-Herkunft.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-044", @@ -1208,7 +1277,8 @@ "tracelinks": "StRS-016; SwRS-053", "konsolidierung": "nein", "pruefidee": "Beleg per Token ablehnen; erwartet: Status Rejected, Bearbeiter-Mail versendet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-045", @@ -1227,7 +1297,8 @@ "tracelinks": "StRS-018; SwRS-054", "konsolidierung": "nein", "pruefidee": "EDI-Auftragsbestätigung mit geänderter Menge einspielen; erwartet: Bestellung aktualisiert + Beleg-Log-Eintrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-046", @@ -1245,7 +1316,8 @@ "tracelinks": "StRS-011; SwRS-055", "konsolidierung": "nein", "pruefidee": "Aktionspreis mit Gültigkeit gestern–morgen anlegen; erwartet: sichtbar in Matrix; nach Ablauf nicht mehr.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-047", @@ -1261,7 +1333,8 @@ "tracelinks": "StRS-021; SwRS-056", "konsolidierung": "nein", "pruefidee": "SEPA-Mandat online mit IBAN bestätigen; erwartet: signiertes Dokument mit Bankdaten am Kunden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-048", @@ -1279,7 +1352,8 @@ "tracelinks": "StRS-014; SwRS-057", "konsolidierung": "Kandidat: mehrere Protokollmechanismen (AnlageLog, ChangeLog-Infrastruktur, Modul-Logs) – Zielsystem: einheitliches Audit-Konzept.", "pruefidee": "Beleg drucken und mailen; erwartet: zwei ReceiptLog-Einträge mit Aktion, Benutzer, Zeit.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-049", @@ -1297,7 +1371,8 @@ "tracelinks": "StRS-023; SwRS-058", "konsolidierung": "nein", "pruefidee": "Sprache auf Englisch umstellen; erwartet: UI-Texte aus .en-Ressourcen; Standard bleibt Deutsch.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-050", @@ -1315,7 +1390,8 @@ "tracelinks": "StRS-024; SwRS-059, SwRS-066", "konsolidierung": "nein", "pruefidee": "Installation mit TLS-Zertifikat konfigurieren; erwartet: HTTPS-Endpunkt aktiv; DB-Passwort liegt nicht im Klartext in der Konfigurationsdatei.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-051", @@ -1333,7 +1409,8 @@ "tracelinks": "StRS-024; SwRS-004, SwRS-060", "konsolidierung": "nein", "pruefidee": "Datenbank älteren Stands mit neuer Version starten; erwartet: fehlende Skripte laufen einmalig, Protokoll in Konsole/Log.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-052", @@ -1351,7 +1428,8 @@ "tracelinks": "StRS-024; SwRS-061", "konsolidierung": "nein", "pruefidee": "Transport auf Graph umstellen und Belegmail senden; erwartet: Versand über Graph, Variablen ersetzt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-053", @@ -1368,7 +1446,8 @@ "tracelinks": "StRS-001, StRS-022; SwRS-062", "konsolidierung": "nein", "pruefidee": "Rechnung drucken; erwartet: PDF in Belegdokumenten, ReceiptLog-Eintrag mit Reportname.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-054", @@ -1386,7 +1465,8 @@ "tracelinks": "StRS-022; SwRS-063", "konsolidierung": "nein", "pruefidee": "Schema mit 5 % auf Kundengruppe anlegen, Rechnung fakturieren; erwartet: Provisionsauswertung weist 5 % des Umsatzes aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-055", @@ -1404,7 +1484,8 @@ "tracelinks": "StRS-008; SwRS-064", "konsolidierung": "nein", "pruefidee": "Produktionsauftrag anlegen; erwartet: sichtbar in WPF-Modul und Nexus-Übersicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-056", @@ -1420,7 +1501,8 @@ "tracelinks": "StRS-011; SwRS-065", "konsolidierung": "Kandidat: Preisquellen (Sonderabsprache, AccountSpecialPrice, AddressSpecialArticle, Vertragspreise, Preislisten, Staffeln) – Zielsystem: ein deklaratives Preisregelwerk mit definierter Priorität.", "pruefidee": "Artikel mit Sonderabsprache und abweichender Preisliste einfügen; erwartet: Preis der Sonderabsprache gewinnt; ohne Absprache greift die Kundenpreisliste.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -1437,7 +1519,8 @@ "tracelinks": "SyRS-032", "konsolidierung": "nein", "pruefidee": "Statische Analyse: keine NHibernate-Referenzen in UI-Projekten (Centron.WPF.UI, CentronNexus).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-002", @@ -1454,7 +1537,8 @@ "tracelinks": "SyRS-032", "konsolidierung": "Kandidat: Doppelimplementierung ist Migrationsaufwandstreiber; im Zielsystem ein einziger Zugriffsweg (API) vorgesehen.", "pruefidee": "Modul im SqlServer- und im WebService-Modus starten; erwartet: identisches Fachverhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-003", @@ -1471,7 +1555,8 @@ "tracelinks": "SyRS-032", "konsolidierung": "nein", "pruefidee": "Login mit falschem Passwort; erwartet: Response mit MessageCode LoginFailed und deutscher Meldung, kein HTTP-500.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-004", @@ -1488,7 +1573,8 @@ "tracelinks": "SyRS-051", "konsolidierung": "nein", "pruefidee": "Schema-Review einer neuen Tabelle aus jüngerer Skriptmethode; erwartet: alle Konventionsspalten vorhanden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-005", @@ -1505,7 +1591,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "Kandidat: Doppelpfad ist zentraler Alt-Workaround; Zielsystem: ein einziges konsistentes Schema.", "pruefidee": "Neues Kopffeld nur in View/Entity ergänzen und Beleg speichern; erwartet (Ist-Verhalten): Wert geht verloren → bestätigt die Regel; Ziel-Test: Feld an allen Stellen ergänzt → Wert persistiert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-006", @@ -1522,7 +1609,8 @@ "tracelinks": "SyRS-006", "konsolidierung": "nein", "pruefidee": "Spalte nur in Haupttabelle ergänzen und Version speichern; erwartet (Ist): Laufzeitfehler → bestätigt 1:1-Pflicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-007", @@ -1539,7 +1627,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Statische Prüfung: ReceiptBL enthält keine belegartspezifischen switch-Anweisungen für die in IReceiptSpecificLogic definierten Aspekte.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-008", @@ -1555,7 +1644,8 @@ "tracelinks": "SyRS-002", "konsolidierung": "nein", "pruefidee": "DB-Abfrage: Status-Spalte enthält nur Werte 1–3.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-009", @@ -1571,7 +1661,8 @@ "tracelinks": "SyRS-003, SyRS-004", "konsolidierung": "nein", "pruefidee": "Unit-Test je Belegart gegen die dokumentierte Matrix.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-010", @@ -1587,7 +1678,8 @@ "tracelinks": "SyRS-003", "konsolidierung": "nein", "pruefidee": "Zwei Aufträge mit unterschiedlichen Zahlungskonditionen in eine Rechnung weiterverarbeiten; erwartet: Auswahl-Dialogdaten mit beiden Konditionen und Kundenstandard-Markierung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -1603,7 +1695,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "nein", "pruefidee": "Beleg für Vorlagen-Kunden speichern; erwartet: Nummer aus Vorlagen-Zähler, Echt-Nummernkreis unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -1620,7 +1713,8 @@ "tracelinks": "SyRS-007", "konsolidierung": "nein", "pruefidee": "Doppel-Lock desselben Belegs durch zwei Sessions; erwartet: zweiter Lock schlägt mit ReceiptIsLockedFromOtherUser fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-013", @@ -1636,7 +1730,8 @@ "tracelinks": "SyRS-006", "konsolidierung": "nein", "pruefidee": "Version auf Basis älterer Version bei existierendem Folgebeleg anfordern; erwartet: Meldung „…bereits weiterverarbeitet\", keine Version.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-014", @@ -1652,7 +1747,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Auftrag 1000 € in Rechnung 1000 € weiterverarbeiten; erwartet: Limitverbrauch insgesamt 1000 €, nicht 2000 €.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-015", @@ -1668,7 +1764,8 @@ "tracelinks": "SyRS-009", "konsolidierung": "nein", "pruefidee": "Freigabe mit Entra-ID-Konto versuchen; erwartet (Ist): schlägt fehl → bestätigt dokumentierte Einschränkung (Migrationspunkt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-016", @@ -1684,7 +1781,8 @@ "tracelinks": "SyRS-010", "konsolidierung": "nein", "pruefidee": "Tabellengetriebener Unit-Test der drei DueKinds inkl. Monatsendfälle.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-017", @@ -1700,7 +1798,8 @@ "tracelinks": "SyRS-011", "konsolidierung": "nein", "pruefidee": "Bestehenden Beleg auf Barzahlungs-Kondition ändern; erwartet: kein automatischer Abschluss (nur Neubelege).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-018", @@ -1716,7 +1815,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-012.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-019", @@ -1733,7 +1833,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "nein", "pruefidee": "Referenzrechnungssatz (Menge 3 × 9,999 € bei Precision 3, Rabatt 10 %, MwSt 19 %) gegen manuell gerechnete Erwartungswerte.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-020", @@ -1750,7 +1851,8 @@ "tracelinks": "SyRS-014", "konsolidierung": "nein", "pruefidee": "Artikel mit Lifetime-Offset 12 Monate; Beleg heute; erwartet: Steuersatz gültig zum Datum in 12 Monaten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-021", @@ -1766,7 +1868,8 @@ "tracelinks": "SyRS-015", "konsolidierung": "nein", "pruefidee": "Denselben regelverletzenden Beleg über WPF-Pfad und REST-Pfad speichern; erwartet: identische Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-022", @@ -1782,7 +1885,8 @@ "tracelinks": "SyRS-029", "konsolidierung": "nein", "pruefidee": "Bestehenden Beleg per API mit geändertem VK ohne Recht speichern; erwartet: VK unverändert; Neubeleg-Fall als bekannter Befund dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-023", @@ -1798,7 +1902,8 @@ "tracelinks": "SyRS-004", "konsolidierung": "nein", "pruefidee": "Siehe StRS-009.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-024", @@ -1814,7 +1919,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Fracht-Einstellung aktivieren und Beleg speichern; erwartet: genau eine Frachtposition, aktualisiert statt dupliziert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-025", @@ -1830,7 +1936,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Neuen Beleg speichern; erwartet: Ordner „Rechnung \" existiert und ist am Beleg referenziert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-026", @@ -1847,7 +1954,8 @@ "tracelinks": "SyRS-016", "konsolidierung": "nein", "pruefidee": "Vertrag mit Quartalsintervall (Monthly×3) speichern und laden; erwartet: Felder unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-027", @@ -1863,7 +1971,8 @@ "tracelinks": "SyRS-016", "konsolidierung": "nein", "pruefidee": "Preview eines Vertrags ausführen; erwartet: keine Rechnung in DB, aber vollständige Vorschau; anschließend Echtlauf erzeugt identische Rechnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-028", @@ -1880,7 +1989,8 @@ "tracelinks": "SyRS-017", "konsolidierung": "nein", "pruefidee": "Zähler mit Staffelpreis über zwei Stufen abrechnen; erwartet: Mengen je Stufe korrekt aufgeteilt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-029", @@ -1897,7 +2007,8 @@ "tracelinks": "SyRS-018", "konsolidierung": "nein", "pruefidee": "Vorlage mit @@RMMArtikel@@ in Position 3; erwartet: RMM-Positionen ab Position 3, Platzhalter entfernt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-030", @@ -1913,7 +2024,8 @@ "tracelinks": "SyRS-019", "konsolidierung": "nein", "pruefidee": "Import zweimal mit derselben ExternalID; erwartet: zweiter Lauf abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-031", @@ -1929,7 +2041,8 @@ "tracelinks": "SyRS-020, SyRS-024", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-020; zusätzlich Lauf-Rücknahme: erwartet Stufen und Laufstatus zurückgesetzt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-032", @@ -1945,7 +2058,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "nein", "pruefidee": "Export in DATEV-ASCII und XML-Online für denselben Zeitraum; erwartet: gleiche Belegmenge, formatspezifische Dateien.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-033", @@ -1962,7 +2076,8 @@ "tracelinks": "SyRS-022", "konsolidierung": "Kandidat: Eigenimplementierung vs. Standardbibliothek – im Zielsystem Bibliotheksnutzung prüfen (interner Doku-Hinweis).", "pruefidee": "Erzeugte Datei gegen KOSIT-Validator prüfen (dokumentiertes Werkzeug).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-034", @@ -1978,7 +2093,8 @@ "tracelinks": "SyRS-023, SyRS-024", "konsolidierung": "nein", "pruefidee": "Rücknahme zweimal für dieselbe Rechnung ausführen; erwartet: zweiter Lauf ohne Wirkung (PaymentTransactionReturnedEmployeeI3D gesetzt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-035", @@ -1996,7 +2112,8 @@ "tracelinks": "SyRS-025", "konsolidierung": "nein", "pruefidee": "DB-Inspektion: Password-Spalte enthält 40-stellige Hex-SHA1-Werte ohne Salt-Spalte; Migrationstest: Alt-Hash-Login nach Umstellung weiterhin möglich (Rehash bei Login).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-036", @@ -2012,7 +2129,8 @@ "tracelinks": "SyRS-026", "konsolidierung": "nein", "pruefidee": "Bestätigung von Gerät A; Login von Gerät B; erwartet: erneute 2FA-Pflicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-037", @@ -2029,7 +2147,8 @@ "tracelinks": "SyRS-027", "konsolidierung": "nein", "pruefidee": "Aufruf nach 4 min und nach 28 min (Default-Ablauf); erwartet: zweiter Aufruf ggf. Re-Login (dokumentierte Optimierung) – Test dokumentiert das Verhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-038", @@ -2046,7 +2165,8 @@ "tracelinks": "SyRS-028", "konsolidierung": "nein", "pruefidee": "Login mit unbekannter Application-GUID; erwartet: Fehler „ApplicationID unbekannt\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-039", @@ -2063,7 +2183,8 @@ "tracelinks": "SyRS-029", "konsolidierung": "nein", "pruefidee": "REST-Aufruf einer geschützten Methode ohne Recht; erwartet: Result-Fehler trotz beliebiger UI.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-040", @@ -2079,7 +2200,8 @@ "tracelinks": "SyRS-030", "konsolidierung": "nein", "pruefidee": "Drei Konten mit je einem Deaktivierungsgrund; erwartet: identische Außenmeldung, unterschiedliche Logeinträge.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-041", @@ -2095,7 +2217,8 @@ "tracelinks": "SyRS-031", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-031.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-042", @@ -2111,7 +2234,8 @@ "tracelinks": "SyRS-032", "konsolidierung": "Kandidat: WCF-Bridge ist Altlast; Zielsystem ohne WCF.", "pruefidee": "Swagger-Endpunkt aufrufen; erwartet: vollständige Methodenliste mit Versionsangabe.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-043", @@ -2127,7 +2251,8 @@ "tracelinks": "SyRS-033", "konsolidierung": "nein", "pruefidee": "Neuen Dienst ohne Intervall-Override registrieren; erwartet: Kompilierfehler/Contract verlangt Intervall (statische Prüfung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-044", @@ -2144,7 +2269,8 @@ "tracelinks": "SyRS-034", "konsolidierung": "Kandidat: redundante Kundenanzeige-Felder im Ticket vs. Kundenstamm – Zielsystem: referenzielle Auflösung.", "pruefidee": "Mapping-Review Entity↔Tabelle; erwartet: alle Felder gemappt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-045", @@ -2160,7 +2286,8 @@ "tracelinks": "SyRS-035", "konsolidierung": "nein", "pruefidee": "Eskalationstyp mit 2 Stufen und Stufenempfängern konfigurieren; erwartet: Stufe 1 an Empfängergruppe 1, Stufe 2 an Gruppe 2.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-046", @@ -2177,7 +2304,8 @@ "tracelinks": "SyRS-036, SyRS-037", "konsolidierung": "nein", "pruefidee": "Timer in Beleg überführen; erwartet: InvoiceAssetItemI3D gesetzt, IsAssignedToAsset=true.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-047", @@ -2193,7 +2321,8 @@ "tracelinks": "SyRS-038", "konsolidierung": "nein", "pruefidee": "Bestand in Nebenlager buchen; erwartet: Hauptlager unverändert, Vorschau zeigt beide.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-048", @@ -2210,7 +2339,8 @@ "tracelinks": "SyRS-039", "konsolidierung": "nein", "pruefidee": "Rechenbeispiel aus SyRS-039 als Unit-Test inkl. Fracht 10 € und Faktor 1,0.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-049", @@ -2226,7 +2356,8 @@ "tracelinks": "SyRS-040", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-040.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-050", @@ -2242,7 +2373,8 @@ "tracelinks": "SyRS-041", "konsolidierung": "nein", "pruefidee": "Testdatensatz mit bekanntem Bedarf 3 (siehe StRS-008) inkl. offener Bestellung 3; erwartet: Artikel verschwindet aus der Liste.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-051", @@ -2259,7 +2391,8 @@ "tracelinks": "SyRS-042", "konsolidierung": "nein", "pruefidee": "Branding-Logo ändern und neu starten; erwartet: neues Logo ohne Deployment.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-052", @@ -2276,7 +2409,8 @@ "tracelinks": "SyRS-043", "konsolidierung": "nein", "pruefidee": "Sonderpreis löschen; erwartet: Artikel verschwindet aus dem Shop.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-053", @@ -2293,7 +2427,8 @@ "tracelinks": "SyRS-044", "konsolidierung": "nein", "pruefidee": "Angebot nach Online-Annahme weiterverarbeiten; erwartet: WebOffer-Link deaktiviert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-054", @@ -2310,7 +2445,8 @@ "tracelinks": "SyRS-045", "konsolidierung": "nein", "pruefidee": "Statische Prüfung: neues Format als eigene Partialklasse ohne Änderung an SupplierEdiBL-Kern möglich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-055", @@ -2327,7 +2463,8 @@ "tracelinks": "SyRS-046", "konsolidierung": "nein", "pruefidee": "Aktionspreis ohne Distributor speichern; erwartet: Validierungsfehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-056", @@ -2343,7 +2480,8 @@ "tracelinks": "SyRS-047", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-047.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-057", @@ -2360,7 +2498,8 @@ "tracelinks": "SyRS-048", "konsolidierung": "Kandidat: AnlageLog vs. ChangeLog vs. Modul-Logs – ein Audit-Konzept im Zielsystem.", "pruefidee": "Repositorysuche nach Attribut-Verwendern (erneut ausführbar); erwartet: 0 Entity-Treffer → bestätigt Befund.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-058", @@ -2377,7 +2516,8 @@ "tracelinks": "SyRS-049", "konsolidierung": "nein", "pruefidee": "Fehlende en-Übersetzung eines neuen Strings; erwartet: Fallback auf deutschen Basistext.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-059", @@ -2394,7 +2534,8 @@ "tracelinks": "SyRS-050", "konsolidierung": "nein", "pruefidee": "Konfigurationsdatei prüfen: DB-Passwort nicht im Klartext, wenn verschlüsselte Variante aktiv.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-060", @@ -2411,7 +2552,8 @@ "tracelinks": "SyRS-051", "konsolidierung": "nein", "pruefidee": "Skript doppelt ausführen; erwartet: zweiter Lauf ohne Wirkung (idempotent).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-061", @@ -2428,7 +2570,8 @@ "tracelinks": "SyRS-052", "konsolidierung": "nein", "pruefidee": "DEBUG-Build: Mail an externe Adresse senden; erwartet: Zustellung an test@nexoware.com.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-062", @@ -2444,7 +2587,8 @@ "tracelinks": "SyRS-053", "konsolidierung": "nein", "pruefidee": "Kunde mit abweichendem Rechnungsreport; erwartet: dessen Report wird gewählt, PDF archiviert, Log geschrieben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-063", @@ -2460,7 +2604,8 @@ "tracelinks": "SyRS-054", "konsolidierung": "nein", "pruefidee": "Schema mit Ablaufdatum gestern; erwartet: Dienst deaktiviert/ersetzt es beim nächsten Lauf.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-064", @@ -2476,7 +2621,8 @@ "tracelinks": "SyRS-055", "konsolidierung": "nein", "pruefidee": "Stücklistenartikel in Auftrag einfügen; erwartet: Kopfposition + Komponenten gemäß Stückliste.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-065", @@ -2492,7 +2638,8 @@ "tracelinks": "SyRS-056", "konsolidierung": "nein", "pruefidee": "Testmatrix über die Stufen (nur Preisliste / +Staffel / +Absprache / +Adress-Festpreis); erwartet: jeweils dokumentierte Priorität gewinnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-066", @@ -2509,6 +2656,7 @@ "tracelinks": "SyRS-050", "konsolidierung": "nein", "pruefidee": "Abgleich der Paketversionen bei Migrationsstart (Inventarliste aktualisieren).", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210904_v3.6.0-58d2/_meta/anforderungen.md b/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210904_v3.6.0-58d2/_meta/anforderungen.md index e1ca69d4..c263657a 100644 --- a/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210904_v3.6.0-58d2/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-fable-5/solo/max/01_Lauf_2026-08-25_210904_v3.6.0-58d2/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 2,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 148 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (42 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 148 von 148 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195913_v3.6.0-2603/Protokoll.md b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195913_v3.6.0-2603/Protokoll.md index b54422ae..2a9923b3 100644 --- a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195913_v3.6.0-2603/Protokoll.md +++ b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195913_v3.6.0-2603/Protokoll.md @@ -95,6 +95,8 @@ Ohne Subagenten sind Haupt- und Gesamtwerte für `claude-opus-5` identisch. Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -131,6 +133,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 4 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 71 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -148,6 +154,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (35 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 71 von 71 mit Tracelinks (100,0 %) | ## Opus-Solo-Block (K–O), fünf Messpunkte diff --git a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195913_v3.6.0-2603/_meta/anforderungen.json b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195913_v3.6.0-2603/_meta/anforderungen.json index e8631ae8..28510e84 100644 --- a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195913_v3.6.0-2603/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195913_v3.6.0-2603/_meta/anforderungen.json @@ -16,7 +16,8 @@ "tracelinks": "SyRS-001, SyRS-002, SyRS-003", "konsolidierung": "nein", "pruefidee": "Für jede der sieben Kundenbelegarten kann ein Beleg angelegt werden; eine Rechnung lässt sich", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -35,7 +36,8 @@ "tracelinks": "SyRS-004, SyRS-005", "konsolidierung": "nein", "pruefidee": "Nach Anlage einer zweiten Filiale existieren für diese eigene Nummernkreiseinträge; ein Beleg", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -54,7 +56,8 @@ "tracelinks": "SyRS-006, SyRS-007, SyRS-008", "konsolidierung": "nein", "pruefidee": "Ein Benutzer ohne Gruppenzugehörigkeit erhält aus `CheckRightsFromUser` eine leere Rechteliste;", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -73,7 +76,8 @@ "tracelinks": "SyRS-014, SyRS-015", "konsolidierung": "nein", "pruefidee": "Eine Anmeldung mit einer Anwendung, deren Lizenz-GUID nicht in der Lizenzdatei enthalten ist,", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -92,7 +96,8 @@ "tracelinks": "SyRS-017", "konsolidierung": "nein", "pruefidee": "Ein Ticket kann angelegt, einem Bearbeiter zugewiesen, kategorisiert und abgeschlossen werden;", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -111,7 +116,8 @@ "tracelinks": "SyRS-018", "konsolidierung": "nein", "pruefidee": "Eine Zeit, die einer Rechnungsposition zugeordnet ist, kann nicht gelöscht werden; der Versuch,", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -130,7 +136,8 @@ "tracelinks": "SyRS-019", "konsolidierung": "nein", "pruefidee": "Ein Vertrag mit `BillingIntervalKind = Quarterly` und `BillingIntervalDuration = 1` erzeugt", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -149,7 +156,8 @@ "tracelinks": "SyRS-020", "konsolidierung": "nein", "pruefidee": "Eine Rechnung in Stufe 3 wird durch einen weiteren Mahnlauf nicht weiter erhöht; nach", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -168,7 +176,8 @@ "tracelinks": "SyRS-021, SyRS-022", "konsolidierung": "nein", "pruefidee": "Für einen konfigurierten Lieferanten wird ein OpenTrans-2.1-Auftragsbestätigungsdokument", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -187,7 +196,8 @@ "tracelinks": "SyRS-023", "konsolidierung": "nein", "pruefidee": "Ein Web-Account kann sich anmelden, ein freigegebenes Angebot einsehen und annehmen; der", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -206,7 +216,8 @@ "tracelinks": "SyRS-024", "konsolidierung": "nein", "pruefidee": "Bei aktivierter Einstellung enthält das erzeugte Rechnungs-PDF ein eingebettetes XML, das die", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -225,7 +236,8 @@ "tracelinks": "SyRS-025", "konsolidierung": "nein", "pruefidee": "Ein Benutzer ohne `ACCESS_CLEANUP_DATABASE` erhält bei Aufruf der Bereinigung die Meldung", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -244,7 +256,8 @@ "tracelinks": "SyRS-008, SyRS-026, SyRS-030", "konsolidierung": "nein", "pruefidee": "Nach Änderung eines Belegs sind `ChangedByI3D`, `ChangedAt` und", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -263,7 +276,8 @@ "tracelinks": "SyRS-028", "konsolidierung": "Kandidat: Die Lokalisierung ist auf vier voneinander unabhängige Ressourcensätze verteilt", "pruefidee": "Für jeden Schlüssel in `LocalizedStrings.resx` existiert ein Eintrag in", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-015", @@ -282,7 +296,8 @@ "tracelinks": "SyRS-031, SyRS-032", "konsolidierung": "nein", "pruefidee": "Der Nexus-Host startet aus dem Container-Image und beantwortet Anfragen unter der in", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -301,7 +316,8 @@ "tracelinks": "StRS-001 | SwRS-008", "konsolidierung": "nein", "pruefidee": "Die numerischen Werte bestehender Enum-Einträge ändern sich zwischen zwei Releases nicht;", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -321,7 +337,8 @@ "tracelinks": "StRS-001, StRS-013 | SwRS-015, SwRS-016", "konsolidierung": "Kandidat: Die Übergänge nach `Completed` sind an mindestens vier verschiedenen Stellen in", "pruefidee": "Ein neu angelegter Beleg hat `State = Active` und `Version = 1`; ein stornierter Beleg lässt", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -340,7 +357,8 @@ "tracelinks": "StRS-001 | SwRS-015", "konsolidierung": "nein", "pruefidee": "Der Versuch, eine Rechnung in einen Auftrag weiterzuführen, wird abgelehnt; eine Barrechnung", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -359,7 +377,8 @@ "tracelinks": "StRS-001, StRS-002 | SwRS-014", "konsolidierung": "nein", "pruefidee": "Zwei parallele Anlagevorgänge im selben Nummernkreis erhalten unterschiedliche Nummern; eine", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -378,7 +397,8 @@ "tracelinks": "StRS-002, StRS-003 | SwRS-016", "konsolidierung": "Kandidat: Die Filialprüfung ist getrennt für Anlage (`CanUserCreateReceiptsInBranch`, eigene", "pruefidee": "Ein Benutzer der Filiale A mit dem Recht \"Rechnungen anzeigen - nur eigene Filiale\" kann eine", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -397,7 +417,8 @@ "tracelinks": "StRS-003 | SwRS-016, SwRS-017, SwRS-023", "konsolidierung": "Kandidat: Es existieren mindestens vier parallele Prüfwege - `AppUser.HasUserRight(...)`", "pruefidee": "Ein direkter API-Aufruf (unter Umgehung der Oberfläche) einer rechtegeschützten Methode ohne", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -416,7 +437,8 @@ "tracelinks": "StRS-003 | SwRS-016", "konsolidierung": "nein", "pruefidee": "Der Löschversuch der Gruppe \"Administratoren\" wird abgelehnt; das Anlegen einer zweiten Gruppe", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -434,7 +456,8 @@ "tracelinks": "StRS-003, StRS-013 | SwRS-007", "konsolidierung": "nein", "pruefidee": "Nach Zuweisung eines Rechts an eine Gruppe existiert genau ein `AppRightLog` vom Typ", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -453,7 +476,8 @@ "tracelinks": "StRS-003, StRS-004 | SwRS-023, SwRS-010", "konsolidierung": "nein", "pruefidee": "Ein Aufruf ohne `Ticket` liefert Status `InvalidTicket`; ein Aufruf mit einem Ticket einer", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -472,7 +496,8 @@ "tracelinks": "StRS-003, StRS-004 | SwRS-009", "konsolidierung": "nein", "pruefidee": "Bei `SystemAuthenticationMethod.ActiveDirectory` und deaktivierter AD-Konfiguration liefert", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -491,7 +516,8 @@ "tracelinks": "StRS-003 | SwRS-009", "konsolidierung": "nein", "pruefidee": "Bei aktiviertem 2FA und `TwoFactorValidDurationInDays = 0` wird bei jeder Anmeldung ein", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -510,7 +536,8 @@ "tracelinks": "StRS-003 | SwRS-009", "konsolidierung": "nein", "pruefidee": "Ein Benutzer mit `AccountDisabledFromDate` = gestern und leerem `AccountDisabledToDate` kann", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -529,7 +556,8 @@ "tracelinks": "StRS-003, StRS-004, StRS-013 | SwRS-011, SwRS-023", "konsolidierung": "nein", "pruefidee": "Ein deaktiviertes Token liefert \"Token ist deaktiviert.\" und erzeugt einen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -548,7 +576,8 @@ "tracelinks": "StRS-004 | SwRS-010", "konsolidierung": "nein", "pruefidee": "Eine Anmeldung mit einer unbekannten Lizenz-GUID liefert den Fehlercode", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -567,7 +596,8 @@ "tracelinks": "StRS-004 | SwRS-010", "konsolidierung": "nein", "pruefidee": "Bei einer Lizenz mit Anzahl 1 kann sich ein zweiter Benutzer nicht anmelden; derselbe Benutzer", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-016", @@ -586,7 +616,8 @@ "tracelinks": "StRS-004 | SwRS-010", "konsolidierung": "nein", "pruefidee": "Ein Ticket der Standardart ist 30 Minuten nach dem letzten Aufruf ungültig; die Einstellung", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-017", @@ -606,7 +637,8 @@ "tracelinks": "StRS-005 | SwRS-015", "konsolidierung": "Kandidat: `UpdateHelpdeskBL.CanHelpdeskClose`, `HelpdeskWebServiceBL.CanHelpdeskClose` und", "pruefidee": "Ein Ticket mit einer aktiven Checkliste, deren Kennzeichen `CanCloseHelpdesk` = 0 ist und die", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-018", @@ -625,7 +657,8 @@ "tracelinks": "StRS-006, StRS-013 | SwRS-016", "konsolidierung": "nein", "pruefidee": "Eine einem Beleg zugeordnete Zeit kann auch mit dem Löschrecht nicht gelöscht werden; nach", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-019", @@ -644,7 +677,8 @@ "tracelinks": "StRS-007 | SwRS-022, SwRS-012", "konsolidierung": "Kandidat: Die Umrechnung Intervallart → Monate ist dreifach implementiert", "pruefidee": "Ein Vertrag mit Quartalsintervall und Faktor 1, dessen Abrechnung am 15. eines Monats", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-020", @@ -663,7 +697,8 @@ "tracelinks": "StRS-008, StRS-013 | SwRS-015", "konsolidierung": "nein", "pruefidee": "Ein Mahnlauf über eine Rechnung in Stufe 1 setzt diese auf Stufe 2 mit aktuellem Datum;", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-021", @@ -682,7 +717,8 @@ "tracelinks": "StRS-009 | SwRS-015", "konsolidierung": "nein", "pruefidee": "Für einen Lieferanten mit `EdiDataType.OpenTrans21` und", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-022", @@ -701,7 +737,8 @@ "tracelinks": "StRS-009, StRS-013 | SwRS-002", "konsolidierung": "nein", "pruefidee": "Ein fehlgeschlagener Produktivlauf erzeugt einen Protokolleintrag mit Zustand `Exception`,", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-023", @@ -720,7 +757,8 @@ "tracelinks": "StRS-010, StRS-003 | SwRS-009, SwRS-017", "konsolidierung": "Kandidat: Es existieren zwei vollständig getrennte Rechtemodelle (`Sichtrus`/`Sichmemb` für", "pruefidee": "Ein Web-Account, dessen Kunde gesperrt ist, kann sich nicht anmelden; ein angemeldetes", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-024", @@ -739,7 +777,8 @@ "tracelinks": "StRS-011 | SwRS-013", "konsolidierung": "Kandidat: Die Aktivierung ist doppelt steuerbar (global über `IsZugferdEnabled()`,", "pruefidee": "Eine gespeicherte, nicht stornierte Rechnung erzeugt bei aktivierter Einstellung ein PDF mit", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-025", @@ -758,7 +797,8 @@ "tracelinks": "StRS-012 | SwRS-016", "konsolidierung": "nein", "pruefidee": "Ein Benutzer ohne `ACCESS_CLEANUP_DATABASE` erhält \"Insufficient rights!\"; ein berechtigter", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-026", @@ -777,7 +817,8 @@ "tracelinks": "StRS-013, StRS-001 | SwRS-005, SwRS-003", "konsolidierung": "nein", "pruefidee": "Nach einer Belegänderung existiert in der zugehörigen Versionstabelle ein Datensatz mit", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-027", @@ -796,7 +837,8 @@ "tracelinks": "StRS-013 | SwRS-024", "konsolidierung": "nein", "pruefidee": "Client A und Client B laden denselben Beleg; nach dem Speichern durch A erhält B beim", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-028", @@ -815,7 +857,8 @@ "tracelinks": "StRS-014 | SwRS-021", "konsolidierung": "Kandidat: vier voneinander unabhängige Ressourcensätze mit teils redundanten Schlüsseln.", "pruefidee": "Bei Umschaltung auf Englisch erscheinen in einer Stichprobe von Masken und Fehlermeldungen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-029", @@ -834,7 +877,8 @@ "tracelinks": "StRS-015, StRS-004 | SwRS-020", "konsolidierung": "nein", "pruefidee": "Nach Installation einer neueren Version enthält `DBUpdate` Einträge für alle Skripte, deren", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-030", @@ -853,7 +897,8 @@ "tracelinks": "StRS-013, StRS-015 | SwRS-002", "konsolidierung": "Kandidat: Vier getrennte NLog-Konfigurationen (WPF-Client, Konsolen-Host, Windows-Dienst,", "pruefidee": "Ein fehlgeschlagener Anmeldeversuch erzeugt einen `WARN`-Eintrag mit Benutzernamen,", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-031", @@ -872,7 +917,8 @@ "tracelinks": "StRS-015 | SwRS-020", "konsolidierung": "nein", "pruefidee": "Ein aus `main` gebautes Artefakt trägt die aus `version.json` abgeleitete Version und im", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-032", @@ -890,7 +936,8 @@ "tracelinks": "StRS-015 | SwRS-001", "konsolidierung": "Kandidat: Die doppelte Implementierung jeder Modulschnittstelle verdoppelt den", "pruefidee": "Ein Modul, das nur `CentronConnectionType.CentronWebServices` deklariert, wird bei", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -909,7 +956,8 @@ "tracelinks": "SyRS-032 | StRS-015", "konsolidierung": "Kandidat: Die durchgängige Doppelimplementierung ist die größte strukturelle Redundanz der", "pruefidee": "Für eine Stichprobe von `I*Logic`-Schnittstellen existieren jeweils eine `BL*Logic`- und eine", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-002", @@ -928,7 +976,8 @@ "tracelinks": "SyRS-006, SyRS-022, SyRS-030 | StRS-013", "konsolidierung": "Kandidat: Neben `Result`/`Result` existiert im Web-Service-Host ein zweites Modell", "pruefidee": "Ein Aufruf ohne erforderliches Recht liefert `Status = Error` und `MessageCode = 10000`;", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-003", @@ -947,7 +996,8 @@ "tracelinks": "SyRS-026, SyRS-001 | StRS-001", "konsolidierung": "Kandidat: Modernes Entitäts-/View-Mapping und Legacy-Save-Repository bilden dasselbe", "pruefidee": "Ein neu eingeführtes Belegfeld wird gespeichert und nach erneutem Laden unverändert", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-004", @@ -966,7 +1016,8 @@ "tracelinks": "SyRS-001, SyRS-026 | StRS-001", "konsolidierung": "nein", "pruefidee": "Für jede Belegart existieren Tabelle und View; eine Abfrage über die View liefert dieselben", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-005", @@ -984,7 +1035,8 @@ "tracelinks": "SyRS-026 | StRS-013", "konsolidierung": "nein", "pruefidee": "Ein Vergleich der Spaltenlisten von `RechKopf` und `RechKopfVersions` ergibt bis auf `I3D`", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-006", @@ -1003,7 +1055,8 @@ "tracelinks": "SyRS-001 | StRS-001", "konsolidierung": "Kandidat: Es existieren zwei Namensvarianten für Fremdschlüssel (`…I3D` und historisch", "pruefidee": "Eine Schemaprüfung ergibt für alle Tabellen einen Primärschlüssel `I3D` vom Typ", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-007", @@ -1022,7 +1075,8 @@ "tracelinks": "SyRS-008, SyRS-026 | StRS-013", "konsolidierung": "nein", "pruefidee": "Nach Anlage eines Datensatzes sind `CreatedByI3D` und `CreatedDate` gesetzt; nach einer", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-008", @@ -1039,7 +1093,8 @@ "tracelinks": "SyRS-001, SyRS-021 | StRS-001", "konsolidierung": "nein", "pruefidee": "Ein Vergleich der Enum-Werte zweier aufeinanderfolgender Releases ergibt keine geänderten", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-009", @@ -1058,7 +1113,8 @@ "tracelinks": "SyRS-010, SyRS-011, SyRS-012, SyRS-023 | StRS-003", "konsolidierung": "Kandidat: Drei verschiedene Hashverfahren im selben System (ungesalzenes SHA-1 für", "pruefidee": "Zwei Benutzer mit identischem Kennwort besitzen in der Datenbank denselben Hashwert", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-010", @@ -1077,7 +1133,8 @@ "tracelinks": "SyRS-009, SyRS-015, SyRS-016 | StRS-004", "konsolidierung": "nein", "pruefidee": "Zwei aufeinanderfolgende Ticketerzeugungen für dasselbe Gerät liefern unterschiedliche", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -1095,7 +1152,8 @@ "tracelinks": "SyRS-013 | StRS-003, StRS-013", "konsolidierung": "nein", "pruefidee": "In der Tabelle `AccessToken` steht ausschließlich ein 64 Zeichen langer Hexwert; ein", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -1114,7 +1172,8 @@ "tracelinks": "SyRS-019, SyRS-024 | StRS-007, StRS-011", "konsolidierung": "Kandidat: `double`- und `decimal`-Überladungen derselben Formeln existieren parallel und", "pruefidee": "Für Basispreis 10,005, Währungsfaktor 1, Rabatt 0, Genauigkeit 2 liefert `CalculateNetPrice`", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-013", @@ -1133,7 +1192,8 @@ "tracelinks": "SyRS-024, SyRS-003 | StRS-011, StRS-001", "konsolidierung": "nein", "pruefidee": "Für einen Nettobetrag von 100,00 und einen Steuersatz von 19 % liefert", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-014", @@ -1151,7 +1211,8 @@ "tracelinks": "SyRS-004 | StRS-001", "konsolidierung": "nein", "pruefidee": "Bei zwei gleichzeitigen Aufrufen mit `updateDatabase = true` liefert genau ein Aufruf die", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-015", @@ -1170,7 +1231,8 @@ "tracelinks": "SyRS-002, SyRS-003, SyRS-017, SyRS-020, SyRS-021 | StRS-001", "konsolidierung": "Kandidat: Die Schnittstelle umfasst ca. 100 Methoden, von denen jede Implementierung", "pruefidee": "Für jede Belegart existiert genau eine `IReceiptSpecificLogic`-Implementierung mit", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-016", @@ -1189,7 +1251,8 @@ "tracelinks": "SyRS-005, SyRS-006, SyRS-007, SyRS-018, SyRS-025 | StRS-003", "konsolidierung": "Kandidat: vier Prüfmechanismen für dieselbe fachliche Funktion (siehe SyRS-006).", "pruefidee": "Alle vier Prüfwege liefern für denselben Benutzer und dasselbe Recht dasselbe Ergebnis;", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-017", @@ -1207,7 +1270,8 @@ "tracelinks": "SyRS-006, SyRS-023 | StRS-003", "konsolidierung": "nein", "pruefidee": "Zehn aufeinanderfolgende `HasUserRight`-Aufrufe innerhalb einer Sitzung erzeugen genau eine", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-018", @@ -1226,7 +1290,8 @@ "tracelinks": "SyRS-006, SyRS-014, SyRS-032 | StRS-003, StRS-004", "konsolidierung": "nein", "pruefidee": "Ein Benutzer ohne das Modulrecht sieht das Modul nicht im Menü; bei fehlender Modullizenz", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-019", @@ -1245,7 +1310,8 @@ "tracelinks": "SyRS-024, SyRS-016, SyRS-002 | StRS-011", "konsolidierung": "Kandidat: zwei Einstellungstabellen mit zwei Schlüsselenums für dieselbe Aufgabe; im", "pruefidee": "Zu jedem Wert in `ApplicationSettingID` existiert ein `case` in", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-020", @@ -1264,7 +1330,8 @@ "tracelinks": "SyRS-029, SyRS-031 | StRS-015", "konsolidierung": "Kandidat: zwei Migrationsmechanismen (C#-Skriptklassen und XAML-Skriptsammlungen)", "pruefidee": "Ein zweiter Start nach erfolgreicher Migration führt kein Skript erneut aus; ein Skript, das", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-021", @@ -1283,7 +1350,8 @@ "tracelinks": "SyRS-028 | StRS-014", "konsolidierung": "Kandidat: siehe SyRS-028 - vier getrennte Ressourcensätze.", "pruefidee": "Eine Codeanalyse findet in anwendersichtbaren Pfaden keine hartkodierten deutschen Literale;", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-022", @@ -1302,7 +1370,8 @@ "tracelinks": "SyRS-019 | StRS-007", "konsolidierung": "Kandidat: drei Implementierungen derselben fachlichen Umrechnung mit abweichender", "pruefidee": "Für einen Vertrag mit `BillingIntervalKind = Daily` und Faktor 30 liefern Abrechnung und", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-023", @@ -1321,7 +1390,8 @@ "tracelinks": "SyRS-009, SyRS-013, SyRS-006 | StRS-003", "konsolidierung": "Kandidat: Zwei parallele Schnittstellenstile (WCF-Bridge mit Interceptoren und", "pruefidee": "Eine neu hinzugefügte, mit `[Authenticate]` markierte Dienstmethode ist ohne weitere", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-024", @@ -1339,6 +1409,7 @@ "tracelinks": "SyRS-027 | StRS-013", "konsolidierung": "Kandidat: Pessimistische Sperre (`AssetLockBL`) und optimistische Sperre", "pruefidee": "Benutzer A öffnet einen Beleg; Benutzer B erhält beim Öffnen eine Sperrmeldung und kann die", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195913_v3.6.0-2603/_meta/anforderungen.md b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195913_v3.6.0-2603/_meta/anforderungen.md index 0f80483c..b8b215b9 100644 --- a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195913_v3.6.0-2603/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195913_v3.6.0-2603/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 4 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 71 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (35 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 71 von 71 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195915_v3.6.0-6bfe/Protokoll.md b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195915_v3.6.0-6bfe/Protokoll.md index 19fc5093..1072d696 100644 --- a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195915_v3.6.0-6bfe/Protokoll.md +++ b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195915_v3.6.0-6bfe/Protokoll.md @@ -95,6 +95,8 @@ Ohne Subagenten sind Haupt- und Gesamtwerte für `claude-opus-5` identisch. Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -131,6 +133,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 3 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 119 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -148,6 +154,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (54 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 119 von 119 mit Tracelinks (100,0 %) | ## Opus-Solo-Block (K–O), fünf Messpunkte diff --git a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195915_v3.6.0-6bfe/_meta/anforderungen.json b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195915_v3.6.0-6bfe/_meta/anforderungen.json index df868c7b..e185d992 100644 --- a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195915_v3.6.0-6bfe/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195915_v3.6.0-6bfe/_meta/anforderungen.json @@ -16,7 +16,8 @@ "tracelinks": "SyRS-015, SyRS-012", "konsolidierung": "nein", "pruefidee": "Zwei Filialen anlegen, in jeder Filiale je eine Rechnung erzeugen und prüfen, dass die Nummernvergabe aus getrennten `NumberGroup`-Datensätzen erfolgt (unterschiedliche `Current`-Werte).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -35,7 +36,8 @@ "tracelinks": "SyRS-011, SyRS-012, SwRS-016, SwRS-017, SwRS-018", "konsolidierung": "Kandidat: StRS-003 (Web-Account-Rechte bilden ein zweites, strukturell paralleles Rechtesystem)", "pruefidee": "Benutzer aus allen Gruppen entfernen; anschließend muss `AppRightsBL.HasUserRight(userI3D, beliebigesRecht)` durchgängig `false` liefern und jeder rechtebewehrte Aufruf mit `DefaultMessageCodes.RightCheckFailed` scheitern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -54,7 +56,8 @@ "tracelinks": "SyRS-013, SwRS-041", "konsolidierung": "Kandidat: StRS-002 (zwei parallele Rechtemodelle mit gleicher fachlicher Absicht; Zusammenführung im Zielsystem prüfen)", "pruefidee": "Mit einem Web-Account anmelden und `GetReceiptByI3D` aufrufen; der Aufruf muss mit `RightCheckFailed` und der Meldung „Web-Benutzer haben keine Berechtigung Belege einzusehen.\" abgewiesen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -74,7 +77,8 @@ "tracelinks": "SyRS-007, SwRS-020, SwRS-021, SwRS-025", "konsolidierung": "nein", "pruefidee": "Lizenzdatei ohne `LicenseGuids.PasswordManager` einspielen; das Passwortmanager-Modul darf im Client nicht registriert werden und der zugehörige Web-Service-Aufruf muss eine Lizenzfehlermeldung liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -93,7 +97,8 @@ "tracelinks": "SyRS-014, SyRS-018, SwRS-004, SwRS-009", "konsolidierung": "nein", "pruefidee": "Angebot anlegen, in Auftrag weiterführen, Auftrag in Lieferschein, Lieferschein in Rechnung; nach jedem Schritt muss der Ursprungsbeleg die verarbeitete Menge (`QuantityProcessed`) erhöht haben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -111,7 +116,8 @@ "tracelinks": "SyRS-015, SyRS-019, SyRS-024", "konsolidierung": "Kandidat: StRS-005 (Kunden- und Lieferantenbelege teilen sich `ReceiptBase`, unterscheiden sich aber in Persistenz und Nummernkreisen)", "pruefidee": "Bestellung anlegen und in einen Wareneingang überführen; die Bestellnummer muss aus dem Nummernkreis `PurchaseOrder` (Tabelle `BestKopf2`, Feld `Nummer`) stammen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -130,7 +136,8 @@ "tracelinks": "SyRS-022, SwRS-032", "konsolidierung": "nein", "pruefidee": "Vertrag mit `BillingIntervalKind = Monthly`, `BillingIntervalDuration = 1`, `AutomatedBilling = true` und `FirstPaidDate` in der Vergangenheit anlegen; `SearchBillingContracts` mit `IsActiveOnly = false` muss den Vertrag genau einmal je fälliger Periode liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -149,7 +156,8 @@ "tracelinks": "SyRS-035, SyRS-036, SwRS-043, SwRS-044", "konsolidierung": "nein", "pruefidee": "Benutzer ohne `CLOSE_REQUEST` versucht, ein Ticket auf den in den Einstellungen als „geschlossen\" markierten Status zu setzen; der Speichervorgang muss mit „Sie haben nicht das Recht \\\"Helpdesk abschließen\\\".\" scheitern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -168,7 +176,8 @@ "tracelinks": "SyRS-035, StRS-008", "konsolidierung": "nein", "pruefidee": "Eine Zeit fakturieren und anschließend versuchen, sie auf ein anderes Ticket zu verschieben; der Vorgang muss abgewiesen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -187,7 +196,8 @@ "tracelinks": "SyRS-019, SwRS-030, SwRS-031", "konsolidierung": "nein", "pruefidee": "Lieferschein mit Artikel im Nebenlager erzeugen, bei dem der Artikel dort nicht geführt wird; das Speichern muss mit der genannten Fehlermeldung scheitern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -207,7 +217,8 @@ "tracelinks": "SyRS-023, SwRS-045", "konsolidierung": "nein", "pruefidee": "Rechnung mit aktivem Profil `ZUGFeRD_XInvoice_3_0_1` exportieren und die eingebettete `factur-x.xml` mit dem KoSIT-Validator gegen XRechnung 3.0 prüfen; das Ergebnis muss fehlerfrei sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -224,7 +235,8 @@ "tracelinks": "SyRS-023", "konsolidierung": "nein", "pruefidee": "Buchhaltungsexport für einen Monat mit mindestens einer Rechnung ausführen; die erzeugte Datei muss je Rechnung genau einen Buchungssatz enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -242,7 +254,8 @@ "tracelinks": "SyRS-037, SwRS-033", "konsolidierung": "nein", "pruefidee": "Rechnung mit Mahnstopp im aktuellen Zeitraum versehen; sie darf im Mahnlauf nicht selektiert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -261,7 +274,8 @@ "tracelinks": "SyRS-024, SwRS-046", "konsolidierung": "nein", "pruefidee": "EDI-Testdatei im OpenTrans-2.1-Format für eine bestehende Bestellung einspielen; die bestätigten Mengen und Liefertermine müssen an der Bestellposition erscheinen und ein Logeintrag mit Status `DownloadOK` entstehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-015", @@ -280,7 +294,8 @@ "tracelinks": "SyRS-016, SyRS-031, SwRS-007, SwRS-013", "konsolidierung": "nein", "pruefidee": "Beleg zweimal mit unterschiedlichen Positionswerten speichern; in `AngKopfVersions`/`AngPosVersions` (bzw. der jeweiligen Belegart) muss der Vorzustand vollständig vorliegen und `Version` inkrementiert sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-016", @@ -299,7 +314,8 @@ "tracelinks": "SyRS-038, SwRS-047", "konsolidierung": "nein", "pruefidee": "DSGVO-Löschung für einen Ansprechpartner ausführen; Name und Kommunikationsdaten müssen anschließend den Anonymisierungstext tragen und `Status` auf 0 stehen. Für einen Kunden muss der Aufruf reproduzierbar mit `NotImplementedException` fehlschlagen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-017", @@ -318,7 +334,8 @@ "tracelinks": "SyRS-003, SyRS-006, SwRS-023", "konsolidierung": "nein", "pruefidee": "`TwoFactorAuthEnabled = true` mit RADIUS setzen; eine Anmeldung mit korrektem Kennwort, aber ohne gültigen zweiten Faktor muss mit `DefaultMessageCodes.TwoFactorAuthFailed` und der Meldung „Die Zwei-Faktor-Authentifizierung ist fehlgeschlagen.\" abgewiesen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-018", @@ -337,7 +354,8 @@ "tracelinks": "SyRS-025, SyRS-026, SwRS-034, SwRS-035", "konsolidierung": "nein", "pruefidee": "Einen Dienst über `BackgroundServiceBL` deaktivieren; im Log darf innerhalb von 60 Sekunden nach Cachablauf nur noch „… is disabled, skipping execution.\" erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-019", @@ -356,7 +374,8 @@ "tracelinks": "SyRS-028, SwRS-051", "konsolidierung": "nein", "pruefidee": "Client mit englischer Systemsprache starten; nicht in `LocalizedStrings.en.resx` übersetzte Texte müssen als deutscher Basistext erscheinen (kein Platzhalter, kein Fehler).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-020", @@ -375,7 +394,8 @@ "tracelinks": "SyRS-014, SyRS-037", "konsolidierung": "nein", "pruefidee": "Kontoumsatz mit dem Bruttobetrag einer offenen Rechnung zuordnen; die Rechnung muss anschließend `PaidFC` = Bruttobetrag und `State = Completed` aufweisen, und `ReceiptLog` muss einen `SetAsPaid`-Eintrag enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-021", @@ -393,7 +413,8 @@ "tracelinks": "SyRS-039", "konsolidierung": "nein", "pruefidee": "Denselben Beleg in derselben Version zweimal als PDF exportieren; im Belegordner darf nur ein Dokument entstehen und beide Aufrufe müssen dieselbe Dokument-I3D liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-022", @@ -412,7 +433,8 @@ "tracelinks": "SyRS-018", "konsolidierung": "nein", "pruefidee": "Beleg mit einem Artikel speichern, für den ein Provisionsschema greift; `ReceiptProvisionItemEntity` muss genau einen Datensatz je provisionsrelevanter Position enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-023", @@ -431,7 +453,8 @@ "tracelinks": "SyRS-014", "konsolidierung": "nein", "pruefidee": "Lieferschein mit einer RMA-verknüpften Position speichern und die Abschlussfrage bejahen; der Beleg muss `State = Completed` und `ClosedThroughRMA = true` aufweisen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-024", @@ -450,7 +473,8 @@ "tracelinks": "SyRS-040, SwRS-048", "konsolidierung": "nein", "pruefidee": "`docker compose up` ausführen; Web-Service (Port 4321) und Nexus (Port 8050) müssen erreichbar sein und Nexus muss sich am Web-Service anmelden können.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-025", @@ -469,7 +493,8 @@ "tracelinks": "SyRS-021, SwRS-029", "konsolidierung": "Kandidat: SwRS-029 (mehrere Preisquellen mit gleicher fachlicher Funktion „Sonderkondition\"; Vereinheitlichung im Zielsystem prüfen)", "pruefidee": "Für einen Artikel gleichzeitig Vertragssonderpreis (fest 100 €), Kundensonderpreis (fest 120 €) und Staffelpreis (90 € ab 10 Stück) hinterlegen; eine Position über 10 Stück im Vertragskontext muss 100 € ergeben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -487,7 +512,8 @@ "tracelinks": "StRS-002, SwRS-022, SwRS-026, SwRS-027", "konsolidierung": "Kandidat: SwRS-026/SwRS-027 (zwei parallele Ticketprüfpfade – WCF-Bridge und ASP.NET-Core-Handler – mit gleicher fachlicher Funktion)", "pruefidee": "Web-Service-Methode ohne Ticket aufrufen; Antwort muss `Status = InvalidTicket` und die Meldung „You need to provide a ticket for the method ''.\" enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -505,7 +531,8 @@ "tracelinks": "StRS-002, SwRS-022", "konsolidierung": "nein", "pruefidee": "Ticket ausstellen, 31 Minuten ohne Aufruf warten, danach einen Aufruf absetzen; er muss mit `InvalidTicket` abgewiesen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -523,7 +550,8 @@ "tracelinks": "StRS-017, SwRS-023", "konsolidierung": "nein", "pruefidee": "Benutzer mit `AuthentificationKind = WindowsAuth` bei deaktiviertem Active Directory anmelden; die Anmeldung muss mit der Fehlkonfigurationsmeldung scheitern und nicht per Basic-Anmeldung gelingen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -542,7 +570,8 @@ "tracelinks": "StRS-017, SwRS-024", "konsolidierung": "Kandidat: SwRS-024 (zwei unterschiedliche Hashverfahren für dieselbe fachliche Funktion „Geheimnis prüfen\"; Vereinheitlichung auf ein modernes Verfahren erforderlich)", "pruefidee": "Zwei Benutzer mit identischem Kennwort anlegen; in der Tabelle `Sichbenu` müssen beide denselben `Password`-Wert tragen. Genau dieses Verhalten muss im Zielsystem ausgeschlossen sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -560,7 +589,8 @@ "tracelinks": "StRS-002, StRS-017", "konsolidierung": "nein", "pruefidee": "Mitarbeiter mit Austrittstermin in der Vergangenheit anlegen; die Anmeldung muss mit `EmployeeAccountDeactivated` scheitern, obwohl das Konto nicht manuell deaktiviert wurde.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -578,7 +608,8 @@ "tracelinks": "StRS-017, SyRS-003", "konsolidierung": "nein", "pruefidee": "Mail-2FA aktivieren und den Einmalcode 121 Sekunden nach Anforderung eingeben; die Anmeldung muss wegen Zeitablaufs scheitern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -596,7 +627,8 @@ "tracelinks": "StRS-004, SwRS-020, SwRS-021", "konsolidierung": "nein", "pruefidee": "Lizenz mit `count = 1` einspielen und von zwei verschiedenen Geräten anmelden; die zweite Anmeldung muss `LicenseMaximumReached` liefern, die Wiederanmeldung vom ersten Gerät hingegen gelingen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -613,7 +645,8 @@ "tracelinks": "StRS-002, StRS-004, SwRS-020", "konsolidierung": "Kandidat: SwRS-018 (Rechte-IDs sind in `ApplicationKind.cs` dupliziert statt aus `UserRightsConst` referenziert)", "pruefidee": "Benutzer das Recht 20800073 zuweisen und Anmeldung am Service-Board versuchen; die Anmeldung muss mit `RightCheckFailed` scheitern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -632,7 +665,8 @@ "tracelinks": "StRS-004, SwRS-024, SwRS-025", "konsolidierung": "nein", "pruefidee": "Token erzeugen, Klartext notieren, Detailansicht erneut öffnen; der Klartext darf nicht erneut abrufbar sein. Token deaktivieren und einen API-Aufruf absetzen; er muss abgewiesen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -649,7 +683,8 @@ "tracelinks": "SyRS-001, StRS-003, SwRS-027", "konsolidierung": "nein", "pruefidee": "Methode mit `AuthenticateAttribute(Applications = [ApplicationKind.Centron])` mit einem Service-Board-Ticket aufrufen; der Aufruf muss abgewiesen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -667,7 +702,8 @@ "tracelinks": "StRS-002, SwRS-016, SwRS-017", "konsolidierung": "Kandidat: SyRS-013 (identische fachliche Funktion für Web-Accounts über `WebAccountsRights`)", "pruefidee": "Innerhalb einer laufenden Sitzung ein Recht entziehen; die Prüfung muss bis zum Sitzungsende weiterhin `true` liefern und erst nach Neuanmeldung `false`. Dieses Verhalten ist im Zielsystem bewusst zu bestätigen oder zu ändern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -687,7 +723,8 @@ "tracelinks": "StRS-001, StRS-002, SwRS-015", "konsolidierung": "Kandidat: Das Muster „Basisrecht + ONLY_OWN + ONLY_OWN_BRANCH\" ist für sieben Belegarten, Tickets, Kalender, CRM-Projekte und Projektverwaltung nahezu identisch dupliziert; im Zielsystem als generisches Sichtbarkeitskonzept zusammenführbar.", "pruefidee": "Benutzer aus Filiale A mit `EDIT_OFFER` und `EDIT_OFFER_ONLY_OWN_BRANCH` versucht, ein Angebot der Filiale B zu speichern; die Aktion muss mit „Der Benutzer hat nicht das Recht Belege vom Typ \\\"Angebot\\\" einer anderen Filiale zu bearbeiten.\" scheitern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -705,7 +742,8 @@ "tracelinks": "StRS-003, SyRS-011, SwRS-041", "konsolidierung": "Kandidat: SyRS-011 (zwei strukturell gleiche Rechtemodelle; Zusammenführung zu einem Rollen-/Berechtigungsmodell im Zielsystem prüfen)", "pruefidee": "Web-Account ohne `WEBRIGHT_CREATEREQUEST` versucht, ein Ticket anzulegen; die Aktion muss mit „Der User hat nicht das Recht, Helpdesks anzulegen.\" scheitern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -724,7 +762,8 @@ "tracelinks": "StRS-005, StRS-020, StRS-023, SwRS-012", "konsolidierung": "nein", "pruefidee": "Rechnung stornieren und anschließend als bezahlt markieren; der Aufruf muss mit „Der Beleg … wurde stoniert und kann daher nicht als bezahlt oder nicht bezahlt eingestellt werden.\" scheitern (Schreibfehler im Original beachten).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -742,7 +781,8 @@ "tracelinks": "StRS-001, StRS-005, StRS-006, SwRS-010, SwRS-011", "konsolidierung": "nein", "pruefidee": "In `RechKopf` manuell eine Rechnung mit der nächsten erwarteten Nummer anlegen und anschließend eine Rechnung im System erzeugen; die vergebene Nummer muss die manuell belegte überspringen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-016", @@ -760,7 +800,8 @@ "tracelinks": "StRS-015, SwRS-007, SwRS-013", "konsolidierung": "nein", "pruefidee": "Beleg mit `Version = previous.Version + 2` speichern; der Aufruf muss mit „Der Beleg hat keine gültige Versionsnummer.\" scheitern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-017", @@ -778,7 +819,8 @@ "tracelinks": "StRS-015, SwRS-004", "konsolidierung": "Kandidat: Die identische GUID-Prüfung ist an sieben Stellen kopiert statt zentral gekapselt.", "pruefidee": "Beleg in zwei Sitzungen laden, in Sitzung 1 speichern, danach in Sitzung 2 speichern; der zweite Speichervorgang muss `ChangedByOtherInstance` liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-018", @@ -796,7 +838,8 @@ "tracelinks": "StRS-002, StRS-005, SyRS-012, SwRS-015", "konsolidierung": "nein", "pruefidee": "Benutzer ohne `CREATE_NEW_INVOICE` legt eine Rechnung an; nach dem Fehlschlag darf in `RechKopf` kein neuer Datensatz und in der Nummernkreistabelle keine erhöhte `Current`-Nummer stehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-019", @@ -814,7 +857,8 @@ "tracelinks": "StRS-010, SwRS-030, SwRS-031", "konsolidierung": "nein", "pruefidee": "Position eines gespeicherten Lieferscheins vom Hauptlager auf ein Nebenlager umstellen; das Hauptlager muss die volle Menge zurückerhalten und das Nebenlager die volle Menge abgeben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-020", @@ -833,7 +877,8 @@ "tracelinks": "StRS-005, StRS-011, SwRS-028", "konsolidierung": "nein", "pruefidee": "Steuersatz 16 % mit Ablaufdatum 31.12.2020 und Folgesatz 19 % anlegen; eine Rechnung mit Datum 01.12.2020 muss 16 %, eine mit Datum 01.02.2021 muss 19 % verwenden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-021", @@ -850,7 +895,8 @@ "tracelinks": "StRS-025, SwRS-029", "konsolidierung": "Kandidat: SwRS-029", "pruefidee": "Siehe StRS-025.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-022", @@ -868,7 +914,8 @@ "tracelinks": "StRS-007, SwRS-032", "konsolidierung": "nein", "pruefidee": "Vertrag ohne abrechenbare Positionen und ohne Sonderartikel anlegen; er darf im Abrechnungslauf nicht erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-023", @@ -886,7 +933,8 @@ "tracelinks": "StRS-011, StRS-012, SwRS-045", "konsolidierung": "Kandidat: Drei Einstellungsschalter (`ActiveZugferdInterface`, `IsZugferdXRechnungActive`, `IsXRechung2Active`) bilden dieselbe fachliche Entscheidung ab; im Zielsystem auf einen Schalter zu reduzieren.", "pruefidee": "`ActiveZugferdInterface` leeren und nur `IsZugferdXRechnungActive = true`, `IsXRechung2Active = false` setzen; die Einstellungsabfrage muss `ZUGFeRD_XInvoice_1_2` liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-024", @@ -905,7 +953,8 @@ "tracelinks": "StRS-014, StRS-006, SwRS-046", "konsolidierung": "nein", "pruefidee": "Fehlerhafte EDI-Datei bereitstellen; nach dem nächsten Lauf muss ein Logeintrag mit `DownloadError` existieren und die Datei erhalten bleiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-025", @@ -922,7 +971,8 @@ "tracelinks": "StRS-018, SwRS-034", "konsolidierung": "nein", "pruefidee": "Log über eine Stunde auswerten; `DataQualityService` darf genau einen und `EdiDownloadService` genau zwei Läufe aufweisen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-026", @@ -939,7 +989,8 @@ "tracelinks": "StRS-018, SwRS-034", "konsolidierung": "nein", "pruefidee": "Datenbank während des Betriebs abschalten; die Logabstände eines Minutendienstes müssen sich schrittweise bis auf maximal fünf Minuten verlängern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-027", @@ -959,7 +1010,8 @@ "tracelinks": "StRS-004, StRS-024, SwRS-036, SwRS-037", "konsolidierung": "nein", "pruefidee": "Datenbank mit einem `DBUpdate`-Eintrag für Skript 11803 versehen und den Dienst starten; das Skript darf nicht erneut ausgeführt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-028", @@ -977,7 +1029,8 @@ "tracelinks": "StRS-019, SwRS-051", "konsolidierung": "nein", "pruefidee": "Neuen Schlüssel nur in der deutschen Basisdatei anlegen und die Oberfläche auf Englisch stellen; der deutsche Text muss ohne Fehler erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-029", @@ -996,7 +1049,8 @@ "tracelinks": "StRS-017, SyRS-004, SyRS-009", "konsolidierung": "nein", "pruefidee": "Anmeldung mit falschem Kennwort durchführen; das Protokoll muss einen `Warn`-Eintrag mit Benutzername, Anwendung und IP, aber ohne Kennwort enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-030", @@ -1014,7 +1068,8 @@ "tracelinks": "StRS-002, StRS-015, SwRS-019", "konsolidierung": "nein", "pruefidee": "Recht einer Gruppe zuweisen; in `AppRightLog` muss ein Eintrag mit Kind `AddRightToGroup` und dem ausführenden Mitarbeiter entstehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-031", @@ -1032,7 +1087,8 @@ "tracelinks": "StRS-015, SyRS-016", "konsolidierung": "Kandidat: `ReceiptLogBL` (74 KB) enthält eine eigene Methode je Feld; im Zielsystem durch ein generisches, metadatengetriebenes Änderungsprotokoll ersetzbar.", "pruefidee": "Kontingentwert eines Vertrags ändern und speichern; im Belegprotokoll muss genau ein Eintrag mit altem und neuem Wert entstehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-032", @@ -1051,7 +1107,8 @@ "tracelinks": "StRS-024, SwRS-039", "konsolidierung": "nein", "pruefidee": "Produktivkonfiguration prüfen: `DatabaseConnectionStringPlain` muss leer sein und `DatabaseConnectionString` einen Chiffretext enthalten; der `SecretKey` darf nicht dem Auslieferungsbeispiel entsprechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-033", @@ -1069,7 +1126,8 @@ "tracelinks": "StRS-024, SyRS-032", "konsolidierung": "nein", "pruefidee": "Zertifikat hinterlegen und den Dienst neu starten; der Endpunkt muss über `https://` erreichbar sein und `http://` abgewiesen bzw. umgeleitet werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-034", @@ -1087,7 +1145,8 @@ "tracelinks": "StRS-003, StRS-024, SwRS-041", "konsolidierung": "nein", "pruefidee": "`CustomerPortal.Port` auf 8060 setzen; ein Aufruf einer `AuthorizeHostPort`-Seite über Port 8060 muss abgewiesen und im Protokoll als „Port 8060 is not allowed\" vermerkt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-035", @@ -1105,7 +1164,8 @@ "tracelinks": "StRS-008, SyRS-013, SwRS-043", "konsolidierung": "nein", "pruefidee": "Ticket ohne `MATURITY_CHANGE` mit geändertem Fälligkeitsdatum speichern; der Vorgang muss mit „Kein Recht für Fälligkeitsdatum ändern vorhanden.\" scheitern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-036", @@ -1123,7 +1183,8 @@ "tracelinks": "StRS-008, SyRS-035", "konsolidierung": "nein", "pruefidee": "Zusätzlichen Ticketstatus anlegen und einem Ticket zuweisen; das Ticket darf dabei nicht als abgeschlossen gelten und `ClosedAt` muss leer bleiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-037", @@ -1141,7 +1202,8 @@ "tracelinks": "StRS-013, SwRS-033", "konsolidierung": "nein", "pruefidee": "Rechnung über 100 € mit Gutschrift über 40 € und Zahlung über 20 €; der ausgewiesene offene Betrag muss 40 € betragen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-038", @@ -1159,7 +1221,8 @@ "tracelinks": "StRS-016, SwRS-047", "konsolidierung": "nein", "pruefidee": "DSGVO-Löschung für einen Ansprechpartner ausführen und das zurückgegebene Protokoll prüfen; es muss den anonymisierten Datensatz benennen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-039", @@ -1176,7 +1239,8 @@ "tracelinks": "StRS-021", "konsolidierung": "nein", "pruefidee": "Denselben Beleg fünfmal exportieren; im Belegordner darf nur ein Dokument entstehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-040", @@ -1195,7 +1259,8 @@ "tracelinks": "StRS-024, SwRS-048", "konsolidierung": "nein", "pruefidee": "Web-Service-Container stoppen; Nexus muss weiterlaufen, aber jede fachliche Aktion mit einem Verbindungsfehler quittieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-041", @@ -1213,7 +1278,8 @@ "tracelinks": "StRS-024, SwRS-001, SwRS-002", "konsolidierung": "Kandidat: SwRS-002 – jede Fachfunktion existiert doppelt (BL- und WS-Variante); im Zielsystem als reine Web-/SaaS-Architektur auf einen Pfad zu reduzieren.", "pruefidee": "Client mit Verbindungsart `CentronWebServices` starten; ein Modul, das nur `SqlServer` deklariert, darf nicht im Menü erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-042", @@ -1231,7 +1297,8 @@ "tracelinks": "StRS-007, SwRS-028", "konsolidierung": "nein", "pruefidee": "Steuersatzumstellung für 5 000 Artikel auslösen; die Operation muss ohne Parameterlimit-Fehler durchlaufen und in drei Blöcken erfolgen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-043", @@ -1249,7 +1316,8 @@ "tracelinks": "StRS-018, StRS-024", "konsolidierung": "nein", "pruefidee": "Netzwerkverkehr des Web-Service beobachten; innerhalb von 15 Minuten muss genau eine Telemetrieübertragung erfolgen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -1268,7 +1336,8 @@ "tracelinks": "SyRS-041", "konsolidierung": "nein", "pruefidee": "Statische Abhängigkeitsprüfung: `Centron.WPF.UI` darf keine direkte Projektreferenz auf `Centron.Entities` besitzen. Abweichungen sind als technische Schuld zu erfassen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-002", @@ -1285,7 +1354,8 @@ "tracelinks": "SyRS-041, SwRS-001", "konsolidierung": "Kandidat: Bei einer Web-/SaaS-Neuimplementierung entfällt der direkte Datenbankpfad; die Doppelimplementierung ist ersatzlos zusammenzuführen. Betroffen sind ca. 688 Clientdateien.", "pruefidee": "Für eine Stichprobe von zehn `I*Logic`-Schnittstellen prüfen, ob jeweils genau eine `BL*Logic`- und eine `WS*Logic`-Klasse existiert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-003", @@ -1303,7 +1373,8 @@ "tracelinks": "SyRS-041, SyRS-018, SwRS-001", "konsolidierung": "nein", "pruefidee": "Rechteverletzung auslösen und prüfen, dass `MessageCode == DefaultMessageCodes.RightCheckFailed` gesetzt ist, unabhängig vom Meldungstext.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-004", @@ -1321,7 +1392,8 @@ "tracelinks": "StRS-005, SyRS-014, SyRS-016", "konsolidierung": "nein", "pruefidee": "Neue Belegart von `ReceiptBase` ableiten und `ReceiptKind` implementieren; `ReceiptBL.SaveReceipt(IReceiptBase, …)` muss ohne Anpassung aufrufbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-005", @@ -1340,7 +1412,8 @@ "tracelinks": "StRS-005, SyRS-031", "konsolidierung": "nein", "pruefidee": "Wert einer bestehenden Konstante ändern; alle Datensätze mit dem alten Wert müssen dadurch nachweislich falsch interpretiert werden. Dieser Test dient der Begründung der Unveränderlichkeitsregel.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-006", @@ -1359,7 +1432,8 @@ "tracelinks": "SyRS-027, StRS-024, SwRS-007, SwRS-008", "konsolidierung": "Kandidat: Zwei Schemarepräsentationen derselben Daten; im Zielsystem auf ein Schema zu konsolidieren.", "pruefidee": "In `LiefKopf` ein `ErstelltDatum` von 1900-01-01 setzen; die Sicht `DeliveryLists` muss für `CreatedAt` NULL liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-007", @@ -1376,7 +1450,8 @@ "tracelinks": "SyRS-016, StRS-015, SwRS-036", "konsolidierung": "nein", "pruefidee": "Spalte nur in `AngKopf` ergänzen und einen Angebotsbeleg zweimal speichern; die Versionierung muss reproduzierbar mit einem SQL-Fehler abbrechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-008", @@ -1394,7 +1469,8 @@ "tracelinks": "SyRS-016, SwRS-006, SwRS-004", "konsolidierung": "Kandidat: Zwei Persistenzpfade für dieselben Daten (NHibernate-Entität und Legacy-Repository) – im Zielsystem zwingend auf einen Pfad zu reduzieren.", "pruefidee": "Neues Kopffeld nur in Entität, Mapping und Sicht ergänzen, nicht in `SynchronizeReceiptData`; nach Speichern und Neuladen muss der Wert verloren sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-009", @@ -1412,7 +1488,8 @@ "tracelinks": "SwRS-004, SyRS-015, SyRS-018", "konsolidierung": "nein", "pruefidee": "Neue Belegart mit eigener `*SpecificLogic` registrieren; `ReceiptBL.SaveReceipt` muss die neuen Rechte- und Nummernkreisangaben verwenden, ohne dass `ReceiptBL` verändert wurde.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-010", @@ -1430,7 +1507,8 @@ "tracelinks": "SyRS-015, StRS-001", "konsolidierung": "nein", "pruefidee": "Neue Filiale anlegen und `RefreshAllNumberGroups()` ausführen; für die Filiale müssen alle Nummernarten außer `Contract` und `ClickContract` neu angelegt sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -1447,7 +1525,8 @@ "tracelinks": "SyRS-015, SwRS-010", "konsolidierung": "nein", "pruefidee": "Zwei parallele Threads fordern gleichzeitig 1 000 Nummern desselben Kreises an; die Vereinigung der Ergebnisse muss 2 000 paarweise verschiedene Werte enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -1463,7 +1542,8 @@ "tracelinks": "SyRS-014", "konsolidierung": "Kandidat: Zwei Quellen für denselben Anzeigetext (`[Description]` und `GetReceiptStateString`); zudem sind beide nicht lokalisiert.", "pruefidee": "Anzeigetext über `Description`-Attribut und über `GetReceiptStateString` ermitteln; beide müssen für alle drei Werte übereinstimmen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-013", @@ -1479,7 +1559,8 @@ "tracelinks": "SyRS-016, SwRS-014", "konsolidierung": "nein", "pruefidee": "Belegvorlage speichern; das gespeicherte Datum muss exakt 01.01.1970 sein, unabhängig vom übergebenen Wert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-014", @@ -1496,7 +1577,8 @@ "tracelinks": "SwRS-013, SyRS-015", "konsolidierung": "nein", "pruefidee": "Beleg für den konfigurierten Vorlagenkunden anlegen; die vergebene Nummer muss negativ sein und der Zählerstand des regulären Nummernkreises unverändert bleiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-015", @@ -1513,7 +1595,8 @@ "tracelinks": "SyRS-012, SyRS-018", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Filiale (`BranchI3D = null`) bearbeitet einen Beleg mit `BranchI3D = 0`; die Prüfung muss erfolgreich sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-016", @@ -1530,7 +1613,8 @@ "tracelinks": "SyRS-011", "konsolidierung": "Kandidat: SwRS-017 – `CheckRightsFromUser` und `HasUserRight` beantworten dieselbe Frage mit unterschiedlichem Cache-Verhalten.", "pruefidee": "Rechteprüfung zweimal in derselben Sitzung ausführen und die abgesetzten SQL-Anweisungen zählen; die zweite Prüfung darf keine Abfrage erzeugen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-017", @@ -1548,7 +1632,8 @@ "tracelinks": "SyRS-011, SwRS-006", "konsolidierung": "nein", "pruefidee": "Gruppe direkt per SQL aus `Sichgrup` löschen und Rechteprüfung ausführen; verwaiste Einträge in `Sichtrus` dürfen keine Rechte mehr gewähren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-018", @@ -1567,7 +1652,8 @@ "tracelinks": "SyRS-008, SyRS-011", "konsolidierung": "Kandidat: Rechte-IDs in `ApplicationKind.cs`, `WebAccountRightsConst.cs` und `AppRightsBL.GetAssignableAdminRightI3Ds()` (34 kommentierte Zahlliterale) sind Duplikate desselben Katalogs.", "pruefidee": "Repository nach numerischen Literalen im Bereich 20400000–20899999 außerhalb von `UserRightsConst.cs` durchsuchen; jeder Treffer ist eine Regelverletzung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-019", @@ -1585,7 +1671,8 @@ "tracelinks": "SyRS-030", "konsolidierung": "nein", "pruefidee": "Löschung der Gruppe „Administratoren\" versuchen; der Aufruf muss mit der genannten Meldung scheitern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-020", @@ -1602,7 +1689,8 @@ "tracelinks": "SyRS-007, SyRS-008, StRS-004", "konsolidierung": "nein", "pruefidee": "Anmeldung mit einer nicht in `ApplicationKind` registrierten GUID versuchen; die Ticketausstellung muss mit `ApplicationIDUnknown` scheitern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-021", @@ -1620,7 +1708,8 @@ "tracelinks": "SyRS-007, StRS-004", "konsolidierung": "nein", "pruefidee": "Repository nach GUID-Literalen in Lizenzprüfungen außerhalb von `LicenseGuids.cs` durchsuchen; Treffer sind Regelverletzungen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-022", @@ -1638,7 +1727,8 @@ "tracelinks": "SyRS-001, SyRS-002, SyRS-007", "konsolidierung": "nein", "pruefidee": "Zweimal mit denselben Anmeldedaten vom selben Gerät anmelden; beide Aufrufe müssen dieselbe `TicketId` liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-023", @@ -1656,7 +1746,8 @@ "tracelinks": "SyRS-003, StRS-017", "konsolidierung": "nein", "pruefidee": "Neue `Authenticator`-Unterklasse hinzufügen und in der Factory registrieren; Ticketvergabe und Lizenzprüfung müssen ohne Codeänderung funktionieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-024", @@ -1675,7 +1766,8 @@ "tracelinks": "SyRS-004, SyRS-009, SyRS-032", "konsolidierung": "Kandidat: Drei Verfahren für dieselbe fachliche Funktion; im Zielsystem auf ein modernes, gesalzenes Verfahren (z. B. PBKDF2/Argon2) zu vereinheitlichen.", "pruefidee": "Zwei Benutzer mit identischem Kennwort anlegen und die Spalte `Password` in `Sichbenu` vergleichen; sie dürfen im Zielsystem nicht übereinstimmen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-025", @@ -1691,7 +1783,8 @@ "tracelinks": "SyRS-009, StRS-004", "konsolidierung": "nein", "pruefidee": "Lizenzanzahl 1 setzen, einen aktiven Token anlegen und einen zweiten versuchen; der zweite Versuch muss mit der genannten Meldung scheitern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-026", @@ -1709,7 +1802,8 @@ "tracelinks": "SyRS-001, SyRS-009", "konsolidierung": "Kandidat: SwRS-027 – die Ticketvalidierung existiert doppelt (Handler und Interceptor).", "pruefidee": "Aufruf mit Ticket im Query-Parameter und mit Ticket im Header; beide müssen erfolgreich authentifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-027", @@ -1727,7 +1821,8 @@ "tracelinks": "SyRS-001, SyRS-010, SyRS-043", "konsolidierung": "Kandidat: SwRS-026", "pruefidee": "Dienstmethode ohne `AuthenticateAttribute` anlegen und ohne Ticket aufrufen; sie muss ausgeführt werden. Dieser Test belegt, dass die Absicherung Opt-in ist – im Zielsystem ist Opt-out (sicher per Voreinstellung) vorzuziehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-028", @@ -1746,7 +1841,8 @@ "tracelinks": "SyRS-020, SyRS-042", "konsolidierung": "nein", "pruefidee": "Steuersatz mit Ablaufdatum gestern und Folgesatz anlegen; nach dem nächsten stündlichen Lauf müssen alle Artikel mit dem alten Satz den Folgesatz tragen und je Artikel ein Logeintrag existieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-029", @@ -1764,7 +1860,8 @@ "tracelinks": "SyRS-021, StRS-025", "konsolidierung": "Kandidat: Drei Strukturen für dieselbe fachliche Funktion „Sonderkondition\"; im Zielsystem als einheitliches Konditionsmodell mit Gültigkeitszeitraum, Basisbezug und Vorrangregel zu entwerfen.", "pruefidee": "`ContractSpecialPrice` mit einer nicht abgedeckten Kombination aus `Kind` und `ChangeKind` erzeugen; die Preisermittlung muss mit `InvalidOperationException` und benannten Werten abbrechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-030", @@ -1781,7 +1878,8 @@ "tracelinks": "SyRS-019, StRS-010", "konsolidierung": "nein", "pruefidee": "Position von 5 auf 8 Stück erhöhen; es darf genau eine Buchung über 3 Stück entstehen, nicht über 8.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-031", @@ -1798,7 +1896,8 @@ "tracelinks": "SyRS-019, SwRS-030", "konsolidierung": "nein", "pruefidee": "`IsBooked` einer Position direkt per SQL abweichend vom Speicherstand setzen und den Beleg speichern; die Buchung muss mit einem Fehler abbrechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-032", @@ -1816,7 +1915,8 @@ "tracelinks": "SyRS-022, StRS-007", "konsolidierung": "nein", "pruefidee": "Abrechnungslauf ausführen und anschließend `LoadBillingResult` für den Zeitraum aufrufen; für jeden verarbeiteten Vertrag muss genau ein Ergebnisdatensatz vorliegen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-033", @@ -1833,7 +1933,8 @@ "tracelinks": "SyRS-037, StRS-013", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-037.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-034", @@ -1850,7 +1951,8 @@ "tracelinks": "SyRS-025, SyRS-026, StRS-018", "konsolidierung": "nein", "pruefidee": "Neuen Dienst ableiten, nur `ServiceName` und `GetExecutionInterval` implementieren; er muss über `BackgroundServiceBL` abschaltbar sein, ohne dass dafür Code geschrieben wurde.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-035", @@ -1867,7 +1969,8 @@ "tracelinks": "SyRS-025, SyRS-026", "konsolidierung": "nein", "pruefidee": "Eine Aufgabe gezielt zum Scheitern bringen; das Protokoll muss den Fehler mit Aufgabenbezeichnung enthalten und die Folgeaufgaben müssen dennoch ausgeführt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-036", @@ -1886,7 +1989,8 @@ "tracelinks": "SyRS-027, StRS-024, SwRS-007", "konsolidierung": "Kandidat: Zwei Skriptformen (C#-Klassen und XML-Sammlungen) für dieselbe Funktion; die XML-Form ist laut Dokumentation ausdrücklich veraltet.", "pruefidee": "Skript mit `ApplicationVersion` höher als die laufende Programmversion hinzufügen; es darf beim Start nicht ausgeführt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-037", @@ -1903,7 +2007,8 @@ "tracelinks": "SyRS-027, SwRS-036", "konsolidierung": "nein", "pruefidee": "Skript zweimal ausführen (Eintrag in `DBUpdate` zwischenzeitlich entfernen); der zweite Lauf muss fehlerfrei durchlaufen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-038", @@ -1922,7 +2027,8 @@ "tracelinks": "SyRS-023, SyRS-036, StRS-018", "konsolidierung": "Kandidat: Zwei Einstellungssysteme für dieselbe Funktion; im Zielsystem auf eines zu reduzieren.", "pruefidee": "Neue Einstellung anlegen und prüfen, dass sie in `ApplicationSettings` und nicht in `Stammdat` gespeichert wird und `ApplicationSettingDefinitions` eine Beschreibung liefert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-039", @@ -1940,7 +2046,8 @@ "tracelinks": "SyRS-032, SyRS-033", "konsolidierung": "nein", "pruefidee": "Konfiguration mit gesetztem Zertifikatspasswort speichern und die Datei öffnen; das Passwort steht im Klartext. Dieses Verhalten ist im Zielsystem zu beseitigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-040", @@ -1959,7 +2066,8 @@ "tracelinks": "SyRS-011, StRS-002, StRS-004", "konsolidierung": "nein", "pruefidee": "Benutzer das Recht für den Passwortmanager entziehen; das Modul darf nach Neuanmeldung nicht im Menü erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-041", @@ -1977,7 +2085,8 @@ "tracelinks": "SyRS-013, SyRS-034, StRS-003", "konsolidierung": "nein", "pruefidee": "Seite mit `AuthorizeRight` für ein Recht markieren, das der angemeldete Benutzer nicht besitzt; der Aufruf muss auf die Seite „nicht autorisiert\" führen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-042", @@ -1995,7 +2104,8 @@ "tracelinks": "SyRS-003, StRS-003, SwRS-026", "konsolidierung": "nein", "pruefidee": "Mit unbekanntem Benutzernamen anmelden; die Fehlermeldung muss identisch zu der bei falschem Mitarbeiterkennwort sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-043", @@ -2012,7 +2122,8 @@ "tracelinks": "SyRS-035, StRS-008", "konsolidierung": "nein", "pruefidee": "Ticket mit 3 000 Zeichen Kurzbeschreibung und Zeilenumbrüchen speichern; der gespeicherte Wert muss 1 000 Zeichen lang und einzeilig sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-044", @@ -2029,7 +2140,8 @@ "tracelinks": "SyRS-035, SyRS-036", "konsolidierung": "nein", "pruefidee": "Präfixmuster `@@Typ@@ - @@Hauptkategorie@@` konfigurieren und ein Ticket ohne Typ und Hauptkategorie anlegen; die Kurzbeschreibung darf unverändert bleiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-045", @@ -2047,7 +2159,8 @@ "tracelinks": "SyRS-023, StRS-011", "konsolidierung": "nein", "pruefidee": "Rechnung je Profil erzeugen und die Guideline-ID in der eingebetteten XML gegen die Tabelle prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-046", @@ -2065,7 +2178,8 @@ "tracelinks": "SyRS-024, StRS-014", "konsolidierung": "Kandidat: Sechs strukturell ähnliche Leseimplementierungen; im Zielsystem als Plug-in-Schnittstelle mit einheitlichem Zwischenformat zu entwerfen.", "pruefidee": "Neue Partial-Datei mit einer `ReadNewSupplierResponse`-Methode hinzufügen; bestehende Formatverarbeitungen müssen unverändert funktionieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-047", @@ -2083,7 +2197,8 @@ "tracelinks": "SyRS-038, StRS-016", "konsolidierung": "nein", "pruefidee": "DSGVO-Löschung für einen Kundenstammsatz auslösen; der Aufruf muss reproduzierbar mit `NotImplementedException` abbrechen. Dieser Befund ist mit dem Datenschutzbeauftragten zu klären.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-048", @@ -2103,7 +2218,8 @@ "tracelinks": "StRS-024, SyRS-040", "konsolidierung": "nein", "pruefidee": "Projektmappe mit dem in `global.json` festgelegten SDK bauen; alle 44 Projekte müssen ohne Warnung als Fehler durchlaufen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-049", @@ -2122,7 +2238,8 @@ "tracelinks": "SyRS-027, StRS-024, SwRS-048", "konsolidierung": "nein", "pruefidee": "Assembly-Metadaten einer Releasebinärdatei auslesen; `InformationalVersion` muss die Commit-ID enthalten und darf nicht mit „Dev-Build\" beginnen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-050", @@ -2141,7 +2258,8 @@ "tracelinks": "SyRS-027, StRS-024, SwRS-049", "konsolidierung": "Kandidat: Zwei parallele CI-Systeme (GitHub Actions und Azure DevOps) mit teilweise gleichen Aufgaben.", "pruefidee": "Pull Request mit einem fehlschlagenden Test einreichen; die Pipeline muss den Build als fehlgeschlagen melden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-051", @@ -2160,6 +2278,7 @@ "tracelinks": "SyRS-028, StRS-019", "konsolidierung": "Kandidat: Zwei parallele Textquellen (Ressourcendateien und Quelltextliterale) für dieselbe fachliche Funktion.", "pruefidee": "Repository nach deutschen Stringliteralen in `Result.AsError(...)`-Aufrufen durchsuchen; jeder Treffer ist ein nicht lokalisierter Text und im Zielsystem zu überführen.", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195915_v3.6.0-6bfe/_meta/anforderungen.md b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195915_v3.6.0-6bfe/_meta/anforderungen.md index a3affcd0..f2fd763a 100644 --- a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195915_v3.6.0-6bfe/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195915_v3.6.0-6bfe/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 3 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 119 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (54 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 119 von 119 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195916_v3.6.0-5070/Protokoll.md b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195916_v3.6.0-5070/Protokoll.md index 78e32bad..a91497b9 100644 --- a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195916_v3.6.0-5070/Protokoll.md +++ b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195916_v3.6.0-5070/Protokoll.md @@ -95,6 +95,8 @@ Ohne Subagenten sind Haupt- und Gesamtwerte für `claude-opus-5` identisch. Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -131,6 +133,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 4,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 114 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -148,6 +154,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (50 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 114 von 114 mit Tracelinks (100,0 %) | ## Opus-Solo-Block (K–O), fünf Messpunkte diff --git a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195916_v3.6.0-5070/_meta/anforderungen.json b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195916_v3.6.0-5070/_meta/anforderungen.json index 61a04875..baee73ad 100644 --- a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195916_v3.6.0-5070/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195916_v3.6.0-5070/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-015, SyRS-031, SyRS-032, SyRS-033; SwRS-001, SwRS-036, SwRS-039", "konsolidierung": "nein", "pruefidee": "Für jede der 15 Modulgruppen ist mindestens ein registrierter Modul-Controller nachweisbar und über die Oberfläche erreichbar, sofern Recht und Lizenz vorliegen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -34,7 +35,8 @@ "tracelinks": "SyRS-009, SyRS-012, SyRS-013, SyRS-014, SyRS-047; SwRS-002, SwRS-003, SwRS-040", "konsolidierung": "nein", "pruefidee": "Wird einem Benutzer eine Gruppe entzogen, sind alle ausschließlich über diese Gruppe vermittelten Rechte unmittelbar nach Cache-Ablauf nicht mehr wirksam.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -54,7 +56,8 @@ "tracelinks": "SyRS-013, SyRS-018; SwRS-002, SwRS-004", "konsolidierung": "Kandidat: Die Filialprüfung ist je Belegart über eigene Recht-IDs und über `IReceiptSpecificLogic.HasRightToEditReceiptOnlyOwnBranch` dupliziert; im Zielsystem als ein generischer Scope-Filter zusammenführbar (vgl. SyRS-006).", "pruefidee": "Ein Benutzer der Filiale A mit Recht `SHOW_INVOICES_ONLY_OWN_BRANCH` erhält beim Öffnen einer Rechnung der Filiale B eine Rechtefehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -74,7 +77,8 @@ "tracelinks": "SyRS-006, SyRS-007, SyRS-008, SyRS-015; SwRS-005", "konsolidierung": "nein", "pruefidee": "Entzieht man die Lizenz `LicenseGuids.PasswordManager`, ist das Modul „Passwort Manager\" nach Neustart des Clients nicht mehr in der Modulliste enthalten, obwohl die Rechte unverändert sind.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -94,7 +98,8 @@ "tracelinks": "SyRS-016, SyRS-017, SyRS-018, SyRS-019, SyRS-020, SyRS-022, SyRS-023; SwRS-006, SwRS-007, SwRS-009, SwRS-013", "konsolidierung": "nein", "pruefidee": "Wird aus einem Auftrag ein Lieferschein erzeugt, liefert `GetReceiptForwardedInto` für den Auftrag den Lieferschein; die Lieferscheinposition trägt `OriginKind = OrderClass`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -115,7 +120,8 @@ "tracelinks": "SyRS-023, SyRS-029; SwRS-009, SwRS-014", "konsolidierung": "nein", "pruefidee": "Ein Vertrag mit `BillingIntervalKind = Monthly`, `BillingIntervalDuration = 3`, `BillingKind = Billingadvance` erzeugt zu Quartalsbeginn genau eine Rechnung über den kommenden Dreimonatszeitraum.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -135,7 +141,8 @@ "tracelinks": "SyRS-013, SyRS-026, SyRS-027; SwRS-011, SwRS-012, SwRS-013", "konsolidierung": "nein", "pruefidee": "Eine Ticketzeit, die in einer Rechnung abgerechnet wurde, lässt sich auch mit Recht `MOVE_HELPDESK_TIMER` nicht mehr auf ein anderes Ticket verschieben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -154,7 +161,8 @@ "tracelinks": "SyRS-017, SyRS-020, SyRS-025; SwRS-013", "konsolidierung": "nein", "pruefidee": "Ein Lieferschein mit einer Position über 3 Stück eines Artikels mit `NeedsBarcodes = true` und nur 2 erfassten Barcodes lässt sich nicht speichern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -174,7 +182,8 @@ "tracelinks": "SyRS-034, SyRS-035; SwRS-024", "konsolidierung": "Kandidat: Die Verarbeitungspfade je Distributor duplizieren Kopf-/Positions-Mapping; im Zielsystem als ein Mapping-Framework mit formatspezifischen Adaptern zusammenführbar.", "pruefidee": "Für jeden in `EdiDataType` gelisteten Formattyp existiert eine Leseroutine, die eine Beispieldatei in c-entron-Belegdaten überführt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -195,7 +204,8 @@ "tracelinks": "SyRS-024, SyRS-034; SwRS-013, SwRS-021", "konsolidierung": "nein", "pruefidee": "Für einen Kunden mit überfälliger Rechnung nach Mahnlauf ist `DunningLevel` ≥ 1 und im Modul „Mahnwesen\" sichtbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -215,7 +225,8 @@ "tracelinks": "SyRS-006, SyRS-026, SyRS-037, SyRS-038; SwRS-040", "konsolidierung": "nein", "pruefidee": "Ein Web-Account, dessen zugeordneter Kunde gesperrt wird, kann sich nicht mehr am Portal anmelden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -236,7 +247,8 @@ "tracelinks": "SyRS-030; SwRS-015", "konsolidierung": "nein", "pruefidee": "Eine mit Leitweg-ID erzeugte Rechnung besteht die Validierung des KOSIT-XRechnung-Prüftools; ohne Leitweg-ID entsteht ein EN16931-konformes ZUGFeRD-PDF.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -255,7 +267,8 @@ "tracelinks": "SyRS-028; SwRS-016", "konsolidierung": "Kandidat: Die Anonymisierungslogik ist in `DataSecurityBL` für mindestens drei Datenmodelle (Kunden-Ansprechpartner, Accounts-Ansprechpartner, Kreditoren-Ansprechpartner) getrennt implementiert; im Zielsystem zu einer generischen, deklarativ konfigurierten Anonymisierung zusammenführbar.", "pruefidee": "Nach DSGVO-Löschung eines Ansprechpartners enthält der Datensatz in allen personenbezogenen Feldern `NULL` oder den Standardtext; das Löschprotokoll listet jeden zuvor belegten Feldwert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -275,7 +288,8 @@ "tracelinks": "SyRS-016, SyRS-017, SyRS-036, SyRS-046, SyRS-047; SwRS-008, SwRS-017, SwRS-018", "konsolidierung": "nein", "pruefidee": "Nach dreimaliger Änderung eines Angebots existieren in `AngKopfVersions` zwei Vorgängerversionen mit fortlaufenden Versionsnummern und der aktuelle Beleg trägt `Version = 3`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-015", @@ -294,7 +308,8 @@ "tracelinks": "SyRS-017, SyRS-021; SwRS-013, SwRS-019", "konsolidierung": "nein", "pruefidee": "Ein Auftrag, der das Restlimit eines Kunden um 100 EUR überschreitet, führt zu einer Rückfrage, deren Text den Betrag 100,00 und den Verbrauch je Belegart ausweist; ohne Bestätigung wird nicht gespeichert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-016", @@ -313,7 +328,8 @@ "tracelinks": "SyRS-013; SwRS-020", "konsolidierung": "nein", "pruefidee": "Ein Benutzer mit `PROVISION_EVALUATION_ONLY_OWN` sieht in der Provisionsauswertung ausschließlich Belege, bei denen er als Betreuer eingetragen ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-017", @@ -331,7 +347,8 @@ "tracelinks": "SyRS-009, SyRS-013; SwRS-021", "konsolidierung": "nein", "pruefidee": "Ein Benutzer ohne `TICKET_STATISTIC` erhält beim Aufruf der Ticketstatistik über die REST-Schnittstelle HTTP 403.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-018", @@ -350,7 +367,8 @@ "tracelinks": "SyRS-048; SwRS-022, SwRS-036", "konsolidierung": "nein", "pruefidee": "Für jeden Schlüssel in `LocalizedStrings.en.resx` existiert ein Schlüssel in `LocalizedStrings.resx`; Stichprobe von 20 Oberflächentexten ist deutschsprachig.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-019", @@ -369,7 +387,8 @@ "tracelinks": "SyRS-039, SyRS-040, SyRS-041, SyRS-043; SwRS-023, SwRS-033, SwRS-034, SwRS-035", "konsolidierung": "nein", "pruefidee": "`docker compose up` startet Datenbank, Web-Service und Portal; der Web-Service antwortet auf Port 4321, das Portal auf Port 8050.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-020", @@ -388,7 +407,8 @@ "tracelinks": "SyRS-034; SwRS-024", "konsolidierung": "Kandidat: Sieben Preisquellen mit je eigener Abruf-, Parsing- und Anzeigelogik; im Zielsystem als ein Provider-Interface mit einheitlichem Ergebnismodell zusammenführbar.", "pruefidee": "Für einen Artikel mit Herstellernummer, für den in zwei externen Quellen Preise existieren, enthält der Preisspiegel mindestens zwei Zeilen mit unterschiedlichem Quellenkennzeichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-021", @@ -407,7 +427,8 @@ "tracelinks": "SyRS-029, SyRS-034; SwRS-009, SwRS-014", "konsolidierung": "nein", "pruefidee": "Bei simulierter Nichterreichbarkeit des RMM-Dienstes und mindestens einer konfigurierten RMM-Artikelreferenz entsteht keine Rechnung; im Protokoll steht die RMM-Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-022", @@ -428,7 +449,8 @@ "tracelinks": "SyRS-001, SyRS-002, SyRS-003, SyRS-004; SwRS-025, SwRS-026", "konsolidierung": "nein", "pruefidee": "Bei `TwoFactorValidDurationInDays = 0` und aktivem 2FA wird bei jeder Anmeldung ein zweiter Faktor angefordert; bei Wert 1 nur einmal je Kalendertag je Kombination aus Benutzer, Anwendung, Maschine und IP-Adresse.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-023", @@ -448,7 +470,8 @@ "tracelinks": "SyRS-010, SyRS-011; SwRS-027", "konsolidierung": "nein", "pruefidee": "Ein gültiger Dokumententoken erlaubt Aufruf und Signatur ohne Anmeldung; nach Signatur ist der Vorgang am zugehörigen Beleg dokumentiert und der Token nicht erneut zur Signatur verwendbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-024", @@ -468,7 +491,8 @@ "tracelinks": "SyRS-049; SwRS-028, SwRS-034", "konsolidierung": "Kandidat: Zwei parallele Einstellungsspeicher (`Stammdat` / `ApplicationSettings`) bilden dieselbe fachliche Funktion ab; im Zielsystem zwingend zusammenzuführen.", "pruefidee": "Das Umschalten von `IsZugferdInvoiceActive` verändert ohne Neustart des Clients das Ergebnis von `IsZugferdEnabled()` und damit die Rechnungsausgabe.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-025", @@ -487,7 +511,8 @@ "tracelinks": "SyRS-035, SyRS-045; SwRS-029, SwRS-033, SwRS-037", "konsolidierung": "nein", "pruefidee": "Wird ein Dienst über `BackgroundServiceBL` deaktiviert, protokolliert der Host innerhalb von 60 Sekunden „… is disabled, skipping execution.\" und führt keine fachliche Aktion aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -505,7 +530,8 @@ "tracelinks": "StRS-022; SwRS-025", "konsolidierung": "nein", "pruefidee": "Mit `SystemAuthenticationMethod = ActiveDirectory` und `ActiveDirectoryAuthEnabled = false` schlägt jede Anmeldung mit „Active Directory authentication is not enabled\" fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -523,7 +549,8 @@ "tracelinks": "StRS-022; SwRS-025", "konsolidierung": "nein", "pruefidee": "Bei systemweitem OpenID Connect meldet sich ein Benutzer mit `AuthentificationKind = CentronLogin` erfolgreich per Benutzername/Passwort an; ein Benutzer mit `AuthentificationKind = OpenIdConnectAuth` erhält bei deaktiviertem JWT die Fehlanmeldemeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -540,7 +567,8 @@ "tracelinks": "StRS-002, StRS-022; SwRS-026", "konsolidierung": "nein", "pruefidee": "Ein Benutzer mit `AccountDisabledFromDate = gestern` und leerem `AccountDisabledToDate` erhält den Fehlercode `EmployeeAccountDeactivated`; ein Benutzer mit falschem Passwort erhält `LoginFailed`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -560,7 +588,8 @@ "tracelinks": "StRS-022; SwRS-026", "konsolidierung": "nein", "pruefidee": "Ein Ticket der Anwendung `ServiceBoard` (ExpirationKind `OneDay`) bleibt 24 Stunden gültig; ein Ticket der Anwendung `GFIMax` (`MonitoringConnector`) verfällt nach 5 Minuten ohne Aufruf.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -578,7 +607,8 @@ "tracelinks": "StRS-004, StRS-022; SwRS-005", "konsolidierung": "nein", "pruefidee": "Zwei aufeinanderfolgende Anmeldungen desselben Benutzers vom selben Gerät liefern dieselbe Ticket-Kennung; die Anzahl belegter Lizenzen bleibt 1.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -596,7 +626,8 @@ "tracelinks": "StRS-002, StRS-004; SwRS-005", "konsolidierung": "nein", "pruefidee": "Ein Benutzer mit Recht 20800073 kann sich am WPF-Client anmelden, am ServiceBoard aber nicht; die Fehlermeldung nennt „NEXOWARE ServiceBoard\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -615,7 +646,8 @@ "tracelinks": "StRS-004; SwRS-005", "konsolidierung": "nein", "pruefidee": "Bei einer Lizenz mit `count = 1` kann sich ein zweiter Benutzer von einem zweiten Gerät nicht anmelden; die Fehlermeldung lautet „Die maximale Anzahl an Lizenzen wurde erreicht.\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -634,7 +666,8 @@ "tracelinks": "StRS-004, StRS-019; SwRS-005", "konsolidierung": "nein", "pruefidee": "Nach erfolgreichem Lizenzbezug und anschließender Trennung der Internetverbindung bleibt ein Neustart des Web-Service möglich, solange die zwischengespeicherte Lizenz gültig ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -652,7 +685,8 @@ "tracelinks": "StRS-002, StRS-017; SwRS-002", "konsolidierung": "Kandidat: Rechteprüfungen existieren parallel als Controller-Attribut, als `Result`-basierte Prüfung in `*WebServiceBL` und als `HasUserRight`-Aufruf in `*BL`; im Zielsystem als ein Autorisierungs-Querschnitt zusammenführbar.", "pruefidee": "Ein Aufruf einer mit `[AuthorizeUserRight]` versehenen Aktion ohne gültige Authentifizierung liefert 401; mit gültiger Authentifizierung aber ohne Recht liefert er 403.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -670,7 +704,8 @@ "tracelinks": "StRS-002, StRS-023; SwRS-030", "konsolidierung": "Kandidat: Zwei parallele REST-Schnittstellen (2 599 Legacy-Methoden mit `[Authenticate]`-Attribut, 160 moderne Endpunkte mit ASP.NET-Core-Autorisierung) bilden teilweise dieselben Fachfunktionen ab; im Zielsystem auf eine Schnittstelle mit einheitlichem Autorisierungsmodell zusammenzuführen.", "pruefidee": "Ein Aufruf von `GetReceiptByI3D` ohne Ticket wird abgewiesen. Für jede der 221 Methoden ohne `[Authenticate]` ist zu belegen, ob ein Token-/GUID-Schutz greift.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -688,7 +723,8 @@ "tracelinks": "StRS-002; SyRS-010; SwRS-030", "konsolidierung": "nein", "pruefidee": "Aufruf von `DeleteLogo` gegen eine Testinstanz ohne Ticket. Erfolgt eine Ausführung, ist die Anforderung als Sicherheitsmangel bestätigt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -705,7 +741,8 @@ "tracelinks": "StRS-002; SwRS-003", "konsolidierung": "nein", "pruefidee": "Bei 100 aufeinanderfolgenden `HasUserRight`-Aufrufen innerhalb einer `BLSession` wird das Rechte-SQL genau einmal ausgeführt (NHibernate-Statistik / SQL-Trace).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -723,7 +760,8 @@ "tracelinks": "StRS-002, StRS-003, StRS-007, StRS-016, StRS-017; SwRS-003", "konsolidierung": "Kandidat: Die Auflösung einschränkender Rechte ist je Domäne (Helpdesk, Belege, Kunden, Provision, Statistik) eigenständig implementiert; im Zielsystem als ein generischer Scope-Resolver zusammenführbar.", "pruefidee": "Ein Benutzer mit `SHOW_HELPDESK`, `SHOW_HELPDESK_ONLY_OWN` und `SHOW_HELPDESK_ONLY_OWN_BRANCH` sieht ausschließlich Tickets, in denen er Bearbeiter oder Verantwortlicher ist – nicht alle Tickets seiner Filiale.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -742,7 +780,8 @@ "tracelinks": "StRS-002; SwRS-002", "konsolidierung": "nein", "pruefidee": "Der Versuch, der Gruppe „Administratoren\" das Recht `UserRightsConst.Administration.SETTINGS` zu entziehen, ändert die Zuordnung nicht; der Löschversuch der Gruppe liefert die genannte Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -760,7 +799,8 @@ "tracelinks": "StRS-001, StRS-004; SwRS-005", "konsolidierung": "nein", "pruefidee": "Ein Benutzer mit Recht `SHOW_HOURLYSURCHARGERATES`, aber ohne Lizenz `SurchargeHourlyRates` und ohne `Centron`-Lizenz sieht das Modul „Aufschläge Stundensätze\" nicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-016", @@ -777,7 +817,8 @@ "tracelinks": "StRS-005, StRS-014; SwRS-006", "konsolidierung": "nein", "pruefidee": "Ein Beleg mit einem Zustandswert außerhalb 1..3 in der Datenbank führt beim Laden und Anzeigen zu einer Ausnahme statt zu einer stillen Fehlanzeige.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-017", @@ -796,7 +837,8 @@ "tracelinks": "StRS-005, StRS-014; SwRS-006, SwRS-007", "konsolidierung": "Kandidat: 46 Einzelprüfungen sind als eigenständige private Methoden in einer 609 KB großen Klasse implementiert; im Zielsystem als konfigurierbare Regelmenge (Regelkatalog je Belegart) zusammenführbar.", "pruefidee": "Ein Beleg mit ungültigem Datum wird abgelehnt; nach dem Fehlversuch existiert kein neuer Datensatz in der Kopftabelle und der Nummernkreis wurde nicht erhöht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-018", @@ -815,7 +857,8 @@ "tracelinks": "StRS-003, StRS-005; SwRS-007", "konsolidierung": "nein", "pruefidee": "Bei 20 parallelen Speichervorgängen desselben Belegtyps entstehen 20 verschiedene, lückenlos aufsteigende Nummern im konfigurierten Intervall.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-019", @@ -833,7 +876,8 @@ "tracelinks": "StRS-005, StRS-014; SwRS-006", "konsolidierung": "nein", "pruefidee": "Benutzer A erzeugt eine neue Version; Benutzer B erhält bei gleichem Beleg `ReceiptIsLockedFromOtherUser = true` und eine Meldung mit dem Namen von A.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-020", @@ -849,7 +893,8 @@ "tracelinks": "StRS-005, StRS-008, StRS-014; SwRS-006", "konsolidierung": "nein", "pruefidee": "Ein Auftrag mit erzeugtem Lieferschein lässt sich nicht auf Version 1 zurücksetzen; die Meldung nennt die bereits erfolgte Weiterverarbeitung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-021", @@ -867,7 +912,8 @@ "tracelinks": "StRS-002, StRS-005; SwRS-019", "konsolidierung": "Kandidat: Dasselbe Muster „Zweitanmeldung zur Rechteübersteuerung\" existiert auch für negative Lagerbuchungen (SyRS-025); im Zielsystem als ein Freigabemechanismus zusammenführbar.", "pruefidee": "Eine Position 10 % unter Mindestpreis führt ohne Recht zur Rückfrage; nach Eingabe der Anmeldedaten eines berechtigten Benutzers wird gespeichert und der Vorgang protokolliert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-022", @@ -886,7 +932,8 @@ "tracelinks": "StRS-005; SwRS-006", "konsolidierung": "nein", "pruefidee": "Ein gespeichertes Belegmuster trägt eine negative Nummer und das Datum 01.01.1970; ohne Bezeichnung wird es abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-023", @@ -905,7 +952,8 @@ "tracelinks": "StRS-005, StRS-006; SwRS-006", "konsolidierung": "nein", "pruefidee": "Ein Auftrag, dessen sämtliche Positionen vollständig geliefert wurden, erhält beim nächsten Speichern automatisch den Zustand „abgeschlossen\"; ein zuvor manuell auf „offen\" gesetzter Auftrag bleibt offen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-024", @@ -922,7 +970,8 @@ "tracelinks": "StRS-005, StRS-010; SwRS-006", "konsolidierung": "nein", "pruefidee": "Das zweimalige Erfassen derselben Lieferantenrechnungsnummer führt beim zweiten Beleg zu einem Hinweis; ohne Bestätigung wird nicht gespeichert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-025", @@ -940,7 +989,8 @@ "tracelinks": "StRS-002, StRS-008; SwRS-011", "konsolidierung": "Kandidat: Siehe SyRS-021 – identisches Freigabemuster über Zweitanmeldung.", "pruefidee": "Ein Lieferschein über 5 Stück eines Artikels mit Bestand 2 lässt sich ohne Recht nicht speichern; mit Recht erscheint die Warnmeldung und der Bestand wird −3.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-026", @@ -958,7 +1008,8 @@ "tracelinks": "StRS-002, StRS-007, StRS-011; SwRS-010", "konsolidierung": "nein", "pruefidee": "Ein Benutzer ohne `MATURITY_CHANGE` erhält beim Ändern des Fälligkeitsdatums die Meldung „Kein Recht für Fälligkeitsdatum ändern vorhanden.\"; alle anderen Änderungen am Ticket bleiben möglich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-027", @@ -974,7 +1025,8 @@ "tracelinks": "StRS-007; SwRS-010", "konsolidierung": "nein", "pruefidee": "Ein per Schnittstelle übergebenes Ticket mit überlangen Feldern wird ohne Fehler gespeichert; die persistierten Werte entsprechen exakt den genannten Höchstlängen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-028", @@ -992,7 +1044,8 @@ "tracelinks": "StRS-013; SwRS-016", "konsolidierung": "nein", "pruefidee": "Nach der DSGVO-Löschung eines Ansprechpartners mit vorhandenem Web-Account ist eine Portalanmeldung mit den bisherigen Zugangsdaten nicht mehr möglich und alle personenbezogenen Felder sind leer bzw. tragen den Standardtext.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-029", @@ -1011,7 +1064,8 @@ "tracelinks": "StRS-006, StRS-021; SwRS-009", "konsolidierung": "nein", "pruefidee": "Bei nicht erreichbarem RMM-Dienst und konfigurierten Referenzen entsteht keine Rechnung; ohne Referenzen und ohne Platzhalter läuft die Abrechnung normal durch.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-030", @@ -1030,7 +1084,8 @@ "tracelinks": "StRS-012; SwRS-015", "konsolidierung": "nein", "pruefidee": "Bei `ActiveZugferdInterface = ZUGFeRD_XInvoice_3_0_1` und gesetzter Leitweg-ID entsteht ein PDF mit Konformitätsstufe `XRechnung` und dem Anhang `factur-x.xml`, dessen erstes Byte kein BOM ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-031", @@ -1049,7 +1104,8 @@ "tracelinks": "StRS-001; SyRS-010; SwRS-030", "konsolidierung": "Kandidat: SyRS-010 (Autorisierung), SwRS-030 (Schnittstellenschichtung). Die parallele Bereitstellung ist der größte Einzelposten für die Neuimplementierung.", "pruefidee": "Für eine fachlich identische Funktion (z. B. Ticketabruf) ist zu prüfen, ob sie sowohl über `ICentronRestService.Helpdesk` als auch über `HelpdesksController` erreichbar ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-032", @@ -1067,7 +1123,8 @@ "tracelinks": "StRS-001, StRS-019; SwRS-001, SwRS-031", "konsolidierung": "nein", "pruefidee": "Für jede `I*Logic`-Schnittstelle existieren eine `BL*Logic`- und eine `WS*Logic`-Implementierung mit identischer Methodensignatur.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-033", @@ -1086,7 +1143,8 @@ "tracelinks": "StRS-001; SwRS-031", "konsolidierung": "nein", "pruefidee": "Stichprobe von 20 öffentlichen `*BL`-Methoden: alle liefern `Result`/`Result`; jede Fehlermeldung trägt einen Meldungscode aus `DefaultMessageCodes`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-034", @@ -1106,7 +1164,8 @@ "tracelinks": "StRS-009, StRS-020, StRS-021; SwRS-015, SwRS-024", "konsolidierung": "nein", "pruefidee": "Bei Nichterreichbarkeit von ITscope bleibt die Belegerfassung nutzbar; nur die externe Artikelsuche meldet einen Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-035", @@ -1124,7 +1183,8 @@ "tracelinks": "StRS-025; SwRS-029", "konsolidierung": "nein", "pruefidee": "Bei simuliertem Datenbankausfall protokolliert der Host wachsende Wartezeiten bis maximal 300 Sekunden und beendet sich nicht; nach Wiederherstellung läuft der Dienst im Grundintervall weiter.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-036", @@ -1143,7 +1203,8 @@ "tracelinks": "StRS-014, StRS-019; SwRS-032", "konsolidierung": "nein", "pruefidee": "Ein fehlgeschlagener Anmeldeversuch erzeugt einen `Warn`-Eintrag mit Benutzername, Anwendungsname, Maschinenname und IP-Adresse; die Datei des Vortags bleibt separat erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-037", @@ -1160,7 +1221,8 @@ "tracelinks": "StRS-011, StRS-024; SwRS-034", "konsolidierung": "nein", "pruefidee": "Ein 26-MB-Upload über den Kundenportalbereich wird mit einer Größenmeldung abgelehnt; nach Erhöhung des Konfigurationswerts auf 50 gelingt derselbe Upload.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-038", @@ -1178,7 +1240,8 @@ "tracelinks": "StRS-011, StRS-019; SwRS-038", "konsolidierung": "nein", "pruefidee": "Bei einem Bestand von 500 000 abgeschlossenen Tickets enthält der Portal-Zwischenspeicher höchstens 300 000 Einträge und keine älter als 24 Monate.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-039", @@ -1197,7 +1260,8 @@ "tracelinks": "StRS-019, StRS-004; SwRS-033", "konsolidierung": "nein", "pruefidee": "Zweimaliges Starten des Web-Service gegen dieselbe Datenbank erzeugt beim zweiten Lauf keine Strukturänderung; ein Start ohne gültige Lizenz bricht ab, bevor eine DDL-Anweisung ausgeführt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-040", @@ -1215,7 +1279,8 @@ "tracelinks": "StRS-019; SwRS-034", "konsolidierung": "nein", "pruefidee": "Eine über den Connection Manager erzeugte Konfiguration enthält `` mit nicht lesbarem Wert und einen leeren ``-Knoten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-041", @@ -1233,7 +1298,8 @@ "tracelinks": "StRS-019; SwRS-034", "konsolidierung": "nein", "pruefidee": "Prüfung der Auslieferungs- und Kundeninstallationen auf HTTPS-Konfiguration.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-042", @@ -1251,7 +1317,8 @@ "tracelinks": "StRS-019; SwRS-035", "konsolidierung": "nein", "pruefidee": "Ein DEBUG-Build sendet an eine externe Adresse; die Nachricht landet bei `test@nexoware.com` bzw. im Mailcatcher.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-043", @@ -1269,7 +1336,8 @@ "tracelinks": "StRS-019; SwRS-035", "konsolidierung": "nein", "pruefidee": "Eine eingefügte, nicht ausgenommene Compilerwarnung lässt den Build fehlschlagen; eine `NU1903`-Warnung nicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-044", @@ -1288,7 +1356,8 @@ "tracelinks": "StRS-005, StRS-014; SwRS-035", "konsolidierung": "nein", "pruefidee": "`dotnet test Centron.sln` führt alle Testprojekte aus; die Belegtests decken mindestens Speichern, Neuladen und Versionierung ab.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-045", @@ -1306,7 +1375,8 @@ "tracelinks": "StRS-001, StRS-025; SwRS-029", "konsolidierung": "nein", "pruefidee": "Ein neu angelegtes Ticket ist spätestens 60 Sekunden nach dem Speichern über die Volltextsuche auffindbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-046", @@ -1323,7 +1393,8 @@ "tracelinks": "StRS-014; SwRS-017", "konsolidierung": "nein", "pruefidee": "Die Änderung eines protokollpflichtigen Feldes über den WPF-Client und über die REST-Schnittstelle erzeugt jeweils einen inhaltlich gleichartigen `ChangeLog`-Eintrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-047", @@ -1341,7 +1412,8 @@ "tracelinks": "StRS-002, StRS-014; SwRS-002, SwRS-003", "konsolidierung": "nein", "pruefidee": "Nach Zuweisung und anschließendem Entzug eines Rechts existieren zwei `AppRightLog`-Einträge mit den Arten `AddRightToGroup` und `RemoveRightFromGroup`, jeweils mit dem handelnden Benutzer.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-048", @@ -1359,7 +1431,8 @@ "tracelinks": "StRS-018; SwRS-022, SwRS-036", "konsolidierung": "nein", "pruefidee": "Bei englischer Spracheinstellung sind alle Menü- und Feldbeschriftungen englisch; die genannten Backend-Meldungen erscheinen weiterhin deutsch.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-049", @@ -1379,7 +1452,8 @@ "tracelinks": "StRS-024; SwRS-028, SwRS-034", "konsolidierung": "Kandidat: `ApplicationSettings` und `Stammdat` bilden dieselbe fachliche Funktion ab; Zusammenführung im Zielsystem zwingend.", "pruefidee": "Für jeden Wert in `ApplicationSettingID` existiert ein Eintrag in `ApplicationSettingDefinitions`; das Löschen eines Einstellungsdatensatzes führt beim Lesen zum Standardwert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -1398,7 +1472,8 @@ "tracelinks": "SyRS-032, SyRS-033; StRS-001", "konsolidierung": "nein", "pruefidee": "Kein `CentronRestService`-Rückgabetyp verweist auf einen Typ aus dem Namensraum `Centron.Data.Entities`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-002", @@ -1418,7 +1493,8 @@ "tracelinks": "SyRS-009, SyRS-014; StRS-002", "konsolidierung": "nein", "pruefidee": "Nach Zuweisung eines Blattrechts an eine leere Gruppe enthält `Sichtrus` auch die Einträge aller übergeordneten Rechte des Pfads.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-003", @@ -1435,7 +1511,8 @@ "tracelinks": "SyRS-012, SyRS-013, SyRS-014; StRS-002", "konsolidierung": "nein", "pruefidee": "Nach dem Zurücksetzen entspricht die Rechtezuordnung jeder Standardgruppe zeichengenau der Ressourcendatei; eine zuvor angelegte eigene Gruppe existiert unverändert weiter.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-004", @@ -1454,7 +1531,8 @@ "tracelinks": "SyRS-016; StRS-003, StRS-014", "konsolidierung": "nein", "pruefidee": "Für jede Objektart, auf die ein `ChangeLog`-Eintrag verweisen kann, existiert genau ein Wert in `CentronObjectKindNumeric`; kein bestehender Wert wurde zwischen zwei Releases geändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-005", @@ -1473,7 +1551,8 @@ "tracelinks": "SyRS-007, SyRS-008, SyRS-015; StRS-004", "konsolidierung": "nein", "pruefidee": "Ein zweiter `Initialize`-Aufruf im selben Prozess führt zur genannten Ausnahme; ein Test mit `SettingsForTests` läuft ohne Netzwerkzugriff.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-006", @@ -1491,7 +1570,8 @@ "tracelinks": "SyRS-016, SyRS-017, SyRS-019, SyRS-020, SyRS-022, SyRS-023, SyRS-024; StRS-005", "konsolidierung": "nein", "pruefidee": "Alle sieben Kundenbeleg- und fünf Lieferantenbelegentitäten erben von `ReceiptBase` und implementieren `ReceiptKind` mit dem passenden Wert aus `CentronObjectKindNumeric`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-007", @@ -1510,7 +1590,8 @@ "tracelinks": "SyRS-017, SyRS-018; StRS-005, StRS-014", "konsolidierung": "Kandidat: Legacy-Tabelle, moderne Sicht, temporäre Legacy-Entität und Repository bilden dieselbe fachliche Struktur viermal ab; im Zielsystem zwingend auf ein Modell zu reduzieren.", "pruefidee": "Ein Ende-zu-Ende-Test, der ein neues Belegfeld setzt, speichert, neu lädt und zusätzlich den Rohwert in der Legacy-Tabelle prüft, schlägt fehl, wenn nur die moderne Zuordnung ergänzt wurde.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-008", @@ -1528,7 +1609,8 @@ "tracelinks": "SyRS-017; StRS-014", "konsolidierung": "nein", "pruefidee": "Ein Vergleich der Spaltenmengen von `AngKopf` und `AngKopfVersions` ergibt Gleichheit bis auf `I3D`/`OriginalI3D`; dasselbe gilt für alle sieben Belegarten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-009", @@ -1547,7 +1629,8 @@ "tracelinks": "SyRS-017, SyRS-018, SyRS-021, SyRS-023, SyRS-025, SyRS-029; StRS-005, StRS-006, StRS-021", "konsolidierung": "nein", "pruefidee": "Eine Textsuche nach `switch (receipt.ReceiptKind)` in `ReceiptBL.cs` liefert keine fachlichen Fallunterscheidungen; alle Verzweigungen laufen über `_specificLogics`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-010", @@ -1564,7 +1647,8 @@ "tracelinks": "SyRS-017; StRS-005", "konsolidierung": "nein", "pruefidee": "Ein Aufruf von `SaveReceipt` mit einem Belegtyp ohne passende Positionsklasse führt zu einer Laufzeitausnahme statt zu einem Übersetzungsfehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -1582,7 +1666,8 @@ "tracelinks": "SyRS-026, SyRS-027; StRS-007", "konsolidierung": "nein", "pruefidee": "Die Ticketzustände sind ausschließlich über `HelpdeskSettingsBL` erreichbar; `HelpdeskBL` enthält keine hartcodierten Zustands-IDs.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -1601,7 +1686,8 @@ "tracelinks": "SyRS-026; StRS-007, StRS-024", "konsolidierung": "Kandidat: Zwei Zustandsmodelle nebeneinander (konfigurierbare Ticketzustände, feste `RequestStateEnum` für Web-Anfragen); im Zielsystem zu vereinheitlichen.", "pruefidee": "Nach Anlage eines neuen Ticketzustands und dessen Festlegung als Abschlusszustand greift die Rechteprüfung `CLOSE_REQUEST` auf den neuen Zustand.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-013", @@ -1620,7 +1706,8 @@ "tracelinks": "SyRS-017, SyRS-021, SyRS-025; StRS-005, StRS-008, StRS-015, StRS-016", "konsolidierung": "nein", "pruefidee": "`ReceiptBL.cs` enthält keine eigene Preisformel; alle Preisberechnungen laufen über `ReceiptPriceHelperBL` bzw. `ReceiptItemPriceBL`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-014", @@ -1640,7 +1727,8 @@ "tracelinks": "SyRS-018, SyRS-029; StRS-006, StRS-021", "konsolidierung": "nein", "pruefidee": "Eine per Vertragsabrechnung erzeugte Rechnung erhält eine Nummer aus dem Rechnungsnummernkreis und durchläuft die Kreditlimitprüfung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-015", @@ -1659,7 +1747,8 @@ "tracelinks": "SyRS-030; StRS-012", "konsolidierung": "nein", "pruefidee": "Ein Import einer ZUGFeRD-Rechnung über `ZugferdImportController` erzeugt einen Lieferantenbeleg; die Erzeugung einer Ausgangsrechnung nutzt ausschließlich `InvoiceZugferdBL`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-016", @@ -1677,7 +1766,8 @@ "tracelinks": "SyRS-028; StRS-013", "konsolidierung": "Kandidat: Drei parallele Anonymisierungsroutinen für strukturell gleichartige Kontaktdaten; im Zielsystem als deklarative, feldattributgesteuerte Anonymisierung zusammenführbar.", "pruefidee": "Das Löschprotokoll eines anonymisierten Ansprechpartners enthält für jedes zuvor belegte Feld genau eine Zeile mit Feldbezeichnung und Altwert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-017", @@ -1696,7 +1786,8 @@ "tracelinks": "SyRS-046; StRS-014", "konsolidierung": "nein", "pruefidee": "Die Änderung eines `[TrackChanges]`-Feldes ohne gesetzten `LoggedInUserManager.AppUserI3D` erzeugt eine Warnung im Anwendungsprotokoll, aber keinen `ChangeLog`-Eintrag; die Änderung selbst wird gespeichert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-018", @@ -1715,7 +1806,8 @@ "tracelinks": "SyRS-039; StRS-014", "konsolidierung": "nein", "pruefidee": "Eine Stichprobe von 20 in den letzten 50 Skripten angelegten Tabellen erfüllt alle genannten Konventionen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-019", @@ -1732,7 +1824,8 @@ "tracelinks": "SyRS-017, SyRS-021; StRS-002, StRS-005, StRS-015", "konsolidierung": "Kandidat: Sieben belegartspezifische Rechtepaare bilden dieselbe fachliche Regel ab; im Zielsystem als ein Recht mit Belegart-Geltungsbereich zusammenführbar.", "pruefidee": "Ein Benutzer ohne `Order.CHANGE_PRICE` ändert einen Auftragspositionspreis und speichert; nach dem Neuladen steht der ursprüngliche Preis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-020", @@ -1750,7 +1843,8 @@ "tracelinks": "SyRS-013; StRS-016", "konsolidierung": "nein", "pruefidee": "Nach Belegerfassung existiert je provisionsrelevanter Position ein `ReceiptProvisionItemEntity`-Datensatz mit Verweis auf das angewandte Schema.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-021", @@ -1768,7 +1862,8 @@ "tracelinks": "SyRS-013; StRS-017", "konsolidierung": "nein", "pruefidee": "Ein Bericht kann ohne Änderung an `ContractEvaluationBL` neu gestaltet werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-022", @@ -1787,7 +1882,8 @@ "tracelinks": "SyRS-048; StRS-018", "konsolidierung": "Kandidat: Sieben getrennte Ressourcenbestände mit teilweise gleichlautenden Texten; im Zielsystem als ein Übersetzungsbestand zusammenführbar.", "pruefidee": "Ein Wechsel der Spracheinstellung auf Englisch ändert die Beschriftungen im WPF-Client; für Schlüssel ohne englische Entsprechung bleibt der deutsche Text stehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-023", @@ -1806,7 +1902,8 @@ "tracelinks": "SyRS-035, SyRS-040; StRS-019", "konsolidierung": "nein", "pruefidee": "Ein Portal mit falschem `Notifications.SecretKey` erhält keine Echtzeitbenachrichtigungen; die übrige Funktionalität bleibt nutzbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-024", @@ -1824,7 +1921,8 @@ "tracelinks": "SyRS-034; StRS-020", "konsolidierung": "Kandidat: Siehe StRS-020 – im Zielsystem als ein Anbietervertrag mit einheitlichem Ergebnismodell.", "pruefidee": "Alle drei Anbieterklassen implementieren dieselbe Schnittstelle und liefern strukturgleiche Ergebnisobjekte an `ArticleSearchBL`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-025", @@ -1842,7 +1940,8 @@ "tracelinks": "SyRS-001, SyRS-002, SyRS-003, SyRS-006; StRS-022", "konsolidierung": "nein", "pruefidee": "Für jede Authentifikator-Implementierung wird bei erfolgreicher Anmeldung genau ein Ticket erzeugt und die Lizenzprüfung durchlaufen; die `RequestId` erscheint in allen Protokolleinträgen desselben Anmeldeversuchs.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-026", @@ -1861,7 +1960,8 @@ "tracelinks": "SyRS-003; StRS-002, StRS-011, StRS-022", "konsolidierung": "Kandidat: Zwei getrennte Kennwortprüfungen (`BasicAuthenticator` für Mitarbeiter, `WebAccountBL` für Portalkonten) mit identischem Verfahren; im Zielsystem als ein Identitätsdienst zusammenzuführen.", "pruefidee": "Zwei Benutzer mit identischem Kennwort besitzen in der Datenbank denselben Kennwortwert – der Nachweis bestätigt das Fehlen eines Salts. Zielzustand: unterschiedliche Werte bei identischem Kennwort.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-027", @@ -1880,7 +1980,8 @@ "tracelinks": "SyRS-010; StRS-023", "konsolidierung": "nein", "pruefidee": "Eine im Portal erfasste Unterschrift ist nach dem Speichern am Beleg sichtbar; ein Benutzer ohne `DELETE_HELPDESK_SIGNATURE` kann sie nicht entfernen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-028", @@ -1899,7 +2000,8 @@ "tracelinks": "SyRS-049; StRS-024", "konsolidierung": "Kandidat: `AppSettingsConst` (728 Einträge, Tabelle `Stammdat`) und `ApplicationSettingID` (492 Einträge, Tabelle `ApplicationSettings`) bilden dieselbe fachliche Funktion ab; die Zusammenführung ist im Zielsystem zwingend.", "pruefidee": "Das Löschen eines Einstellungsdatensatzes führt beim nächsten Lesen zum im Code angegebenen Standardwert und nicht zu einem Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-029", @@ -1918,7 +2020,8 @@ "tracelinks": "SyRS-035, SyRS-045; StRS-025", "konsolidierung": "nein", "pruefidee": "Jede Klasse in `HostedServices/` außer `ManagedBackgroundService` erbt von dieser und überschreibt `ServiceName` und `GetExecutionInterval`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-030", @@ -1938,7 +2041,8 @@ "tracelinks": "SyRS-010, SyRS-011, SyRS-031; StRS-001", "konsolidierung": "Kandidat: Siehe SyRS-031 – Ablösung durch die moderne Schnittstelle.", "pruefidee": "Ein Aufruf von `GetWebServiceMethodList` liefert 2 599 Einträge; jeder Eintrag ist per POST unter `UriTemplate` erreichbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-031", @@ -1957,7 +2061,8 @@ "tracelinks": "SyRS-012, SyRS-017, SyRS-033; StRS-001", "konsolidierung": "nein", "pruefidee": "Keine Fachkomponente öffnet eine eigene `SqlConnection`; alle SQL-Ausführungen laufen über `Session.Advanced.RawSqlAccess` mit benannten Parametern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-032", @@ -1975,7 +2080,8 @@ "tracelinks": "SyRS-018; StRS-005", "konsolidierung": "nein", "pruefidee": "Eine statische Codeanalyse auf interpolierte SQL-Zeichenketten meldet die drei Stellen in `NumberGroupBL`; nach Umstellung auf Parameter meldet sie keine.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-033", @@ -1994,7 +2100,8 @@ "tracelinks": "SyRS-039; StRS-019", "konsolidierung": "nein", "pruefidee": "Alle 764 Skriptdateien enthalten ausschließlich bedingte DDL-Anweisungen bzw. `ScriptHelpers`-Aufrufe; eine zweite Ausführung erzeugt keine Änderung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-034", @@ -2013,7 +2120,8 @@ "tracelinks": "SyRS-040, SyRS-041, SyRS-049; StRS-019, StRS-024", "konsolidierung": "nein", "pruefidee": "Eine Änderung an `TwoFactorAuthEnabled` wirkt erst nach Neustart; eine Änderung an `IsZugferdInvoiceActive` wirkt sofort.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-035", @@ -2033,7 +2141,8 @@ "tracelinks": "SyRS-043, SyRS-044; StRS-019", "konsolidierung": "nein", "pruefidee": "Eine lokal erzeugte Assembly trägt in `InformationalVersion` das Präfix „Dev-Build\"; eine Build-Server-Assembly trägt stattdessen die Commit-Kennung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-036", @@ -2052,7 +2161,8 @@ "tracelinks": "SyRS-032; StRS-001, StRS-018", "konsolidierung": "nein", "pruefidee": "Stichprobe von 10 Ansichten: keine enthält Datenbank- oder Fachlogikzugriffe im Code-Behind; alle Aktionen laufen über `DelegateCommand`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-037", @@ -2070,7 +2180,8 @@ "tracelinks": "SyRS-035; StRS-013, StRS-025", "konsolidierung": "nein", "pruefidee": "Auswertung des Datenumfangs von `TelemetryUploadService` und Abgleich mit der Datenschutzerklärung gegenüber dem Anwenderunternehmen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-038", @@ -2089,7 +2200,8 @@ "tracelinks": "SyRS-012, SyRS-038; StRS-002", "konsolidierung": "nein", "pruefidee": "Nach Entzug eines Rechts wirkt die Änderung im Client spätestens nach Neuanmeldung; serverseitig spätestens nach Ablauf der Sitzung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-039", @@ -2108,7 +2220,8 @@ "tracelinks": "SyRS-039; StRS-001, StRS-014", "konsolidierung": "nein", "pruefidee": "Für eine Stichprobe von 20 Entitäten existiert im entsprechenden Unterordner von `Mappings/` eine Zuordnungsklasse `{Entität}Maps`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-040", @@ -2128,6 +2241,7 @@ "tracelinks": "SyRS-006, SyRS-026; StRS-002, StRS-011", "konsolidierung": "Kandidat: Zwei getrennte Rechtemodelle (gruppenbasiert für Mitarbeiter, direkt für Portalkonten) und zwei getrennte Kennwortprüfungen (SwRS-026); im Zielsystem als ein Identitäts- und Autorisierungsdienst mit Mandantentrennung zusammenführbar.", "pruefidee": "Ein Portalkonto kann über keine Konfiguration ein Recht aus `UserRightsConst` erhalten; der Versuch, über die Portalanmeldung einen Beleg abzurufen, wird abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195916_v3.6.0-5070/_meta/anforderungen.md b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195916_v3.6.0-5070/_meta/anforderungen.md index f67bcb04..cae1f909 100644 --- a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195916_v3.6.0-5070/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195916_v3.6.0-5070/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 4,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 114 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (50 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 114 von 114 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195917_v3.6.0-26d8/Protokoll.md b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195917_v3.6.0-26d8/Protokoll.md index d26d4c1e..9dd87585 100644 --- a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195917_v3.6.0-26d8/Protokoll.md +++ b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195917_v3.6.0-26d8/Protokoll.md @@ -95,6 +95,8 @@ Ohne Subagenten sind Haupt- und Gesamtwerte für `claude-opus-5` identisch. Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -131,6 +133,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 3,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 182 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -148,6 +154,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (51 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 182 von 182 mit Tracelinks (100,0 %) | ## Opus-Solo-Block (K–O), fünf Messpunkte diff --git a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195917_v3.6.0-26d8/_meta/anforderungen.json b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195917_v3.6.0-26d8/_meta/anforderungen.json index 337d271a..6e55ac5c 100644 --- a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195917_v3.6.0-26d8/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195917_v3.6.0-26d8/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-001, SyRS-002, SyRS-010, SwRS-020", "konsolidierung": "Kandidat: StRS-018 (Kundenportal) — die Sichtbarkeit von Belegen für Web-Accounts ist an zwei Stellen unterschiedlich geregelt (`ReceiptBL.CanUserViewReceipt` vs. `WebAccountRightsConst.WEBRIGHT_SHOWALLINVOICES`).", "pruefidee": "Ein Web-Account-Login darf keinen Zugriff auf interne Mitarbeiterfunktionen erhalten; ein Mitarbeiter-Login darf nicht über Web-Account-Rechte autorisiert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -34,7 +35,8 @@ "tracelinks": "SyRS-005, SyRS-006, SwRS-021, SwRS-022", "konsolidierung": "Kandidat: StRS-003 — Modulverfügbarkeit wird an derselben Stelle zusätzlich durch Lizenzen bestimmt; im Zielsystem sollten \"Berechtigung\" und \"Produktumfang\" als getrennte Konzepte modelliert werden.", "pruefidee": "Für jedes Modul: Benutzer ohne das registrierte Recht anlegen → Modul darf nicht erscheinen und der zugehörige API-Aufruf muss 403 liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -52,7 +54,8 @@ "tracelinks": "SyRS-004, SwRS-023", "konsolidierung": "Kandidat: StRS-002 — Lizenz- und Rechteprüfung sind im Bestand in einer Ausdrucksliste vermischt.", "pruefidee": "Lizenz X entziehen → das zugehörige Modul verschwindet; Anmeldung mit einer Anwendung ohne gültige `ApplicationKind`-Lizenz muss scheitern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -71,7 +74,8 @@ "tracelinks": "SyRS-014, SyRS-015, SwRS-024", "konsolidierung": "nein", "pruefidee": "Benutzer mit Filiale A und dem Recht \"nur eigene Filiale\" darf keinen Beleg für Filiale B anlegen oder bearbeiten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -90,7 +94,8 @@ "tracelinks": "SyRS-001, SyRS-002, SyRS-003, SwRS-025, SwRS-026", "konsolidierung": "nein", "pruefidee": "Bei aktivierter 2FA und `TwoFactorValidDurationInDays = 0` muss jede Anmeldung erneut eine zweite Faktorstufe verlangen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -109,7 +114,8 @@ "tracelinks": "SyRS-020, SyRS-021, SwRS-001, SwRS-002", "konsolidierung": "nein", "pruefidee": "Für jede der sieben Belegarten lässt sich ein Beleg anlegen, speichern, erneut laden und mit einer Belegnummer ausgeben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -128,7 +134,8 @@ "tracelinks": "SyRS-022, SwRS-005", "konsolidierung": "nein", "pruefidee": "Versuch, einen Abholschein weiterzuverarbeiten, muss abgelehnt werden; Angebot → Gutschrift darf nicht angeboten werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -146,7 +153,8 @@ "tracelinks": "SyRS-023, SwRS-003, SwRS-004", "konsolidierung": "nein", "pruefidee": "Beleg zweimal ändern → drei Versionen abrufbar, Version 1 und 2 inhaltlich unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -163,7 +171,8 @@ "tracelinks": "SyRS-024, SyRS-039, SwRS-006", "konsolidierung": "nein", "pruefidee": "Rechnung exportieren → Storno muss mit der Exportmeldung abgelehnt werden. Zweitälteste Vertragsrechnung stornieren → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -180,7 +189,8 @@ "tracelinks": "SyRS-025, SwRS-007", "konsolidierung": "nein", "pruefidee": "Kunde mit Limit 1.000 EUR, offener Auftrag über 900 EUR → neue Rechnung über 200 EUR muss die Limitmeldung auslösen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -197,7 +207,8 @@ "tracelinks": "SyRS-026, SwRS-008", "konsolidierung": "nein", "pruefidee": "Position unter Mindestpreis erfassen → Speichern muss ohne Sonderrecht abgewiesen oder mit Preiskorrektur beantwortet werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -214,7 +225,8 @@ "tracelinks": "SyRS-021, SwRS-009", "konsolidierung": "nein", "pruefidee": "Auftrag vollständig in Lieferschein überführen → Auftrag wechselt nach \"abgeschlossen\"; Lieferschein löschen/mindern → Auftrag wechselt zurück nach \"offen\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -233,7 +245,8 @@ "tracelinks": "SyRS-027, SyRS-028, SwRS-010", "konsolidierung": "nein", "pruefidee": "Vertrag mit Intervall \"Monat(e)\", Dauer 3, nachschüssig → Rechnungslauf erzeugt quartalsweise eine Rechnung mit Leistungszeitraum in der Vergangenheit.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -251,7 +264,8 @@ "tracelinks": "SyRS-029, SwRS-011", "konsolidierung": "nein", "pruefidee": "Vertrag mit 10 h Kontingent, 12 h erfasste Zeit → 2 h müssen über den Ausgleichsartikel fakturiert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-015", @@ -269,7 +283,8 @@ "tracelinks": "SyRS-030, SwRS-012", "konsolidierung": "nein", "pruefidee": "Bestellung anlegen → Wareneingang buchen → WE-Kalkulation erzeugen; Lagerbestand und Einstandspreis müssen sich entsprechend ändern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-016", @@ -288,7 +303,8 @@ "tracelinks": "SyRS-031, SwRS-013", "konsolidierung": "nein", "pruefidee": "EDI-Testdatei je Distributor einspielen → zugehörige Bestellung erhält Auftragsbestätigungsdaten; Verarbeitungsprotokoll enthält einen Eintrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-017", @@ -305,7 +321,8 @@ "tracelinks": "SyRS-032, SwRS-014", "konsolidierung": "nein", "pruefidee": "Lieferschein über 5 Stück speichern → Bestand −5; Menge auf 3 reduzieren → Bestand −3 (Nettoeffekt +2).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-018", @@ -322,7 +339,8 @@ "tracelinks": "SyRS-033, SwRS-015", "konsolidierung": "nein", "pruefidee": "Position mit Menge 3 und nur 2 erfassten Seriennummern speichern → Ablehnung mit Hinweis auf fehlende Barcodes.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-019", @@ -340,7 +358,8 @@ "tracelinks": "SyRS-034, SyRS-035, SwRS-016", "konsolidierung": "nein", "pruefidee": "Einstellung \"Priorität ist Pflichtfeld\" aktivieren → Ticket ohne Priorität muss mit \"Keine Priorität ausgewählt.\" abgewiesen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-020", @@ -357,7 +376,8 @@ "tracelinks": "SyRS-036, SwRS-017", "konsolidierung": "Kandidat: StRS-002 — das Konzept \"einschränkendes Recht\" existiert nur implizit; im Zielsystem als eigener Rechtetyp modellieren.", "pruefidee": "Benutzer mit `SHOW_HELPDESK_ONLY_OWN` darf ein Ticket eines Kollegen weder in Listen sehen noch direkt öffnen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-021", @@ -376,7 +396,8 @@ "tracelinks": "SyRS-037, SwRS-018", "konsolidierung": "nein", "pruefidee": "Zeit auf fakturiertem Ticket verschieben → Ablehnung; Rechnung stornieren → Zeit wieder abrechenbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-022", @@ -393,7 +414,8 @@ "tracelinks": "SyRS-028, SyRS-038, SwRS-019", "konsolidierung": "Kandidat: StRS-013 — drei getrennte Module erzeugen Rechnungen aus Leistungsdaten; im Zielsystem als ein Abrechnungsdienst mit Strategien zusammenführbar.", "pruefidee": "Je Modell einen abrechenbaren Vorgang durchspielen und prüfen, dass genau eine Rechnung mit den erwarteten Positionen entsteht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-023", @@ -412,7 +434,8 @@ "tracelinks": "SyRS-010, SyRS-040, SyRS-041, SwRS-020", "konsolidierung": "nein", "pruefidee": "Web-Account ohne `WEBRIGHT_SHOWALLINVOICES` darf im Portal keine Rechnungen sehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-024", @@ -430,7 +453,8 @@ "tracelinks": "SyRS-041, SwRS-020", "konsolidierung": "nein", "pruefidee": "Warenkorb ohne `WEBRIGHT_WEBCART2_ORDER_CART` freigeben → Ablehnung; mit Recht → genau ein Auftrag entsteht, Warenkorb ist abgeschlossen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-025", @@ -449,7 +473,8 @@ "tracelinks": "SyRS-042, SwRS-020", "konsolidierung": "nein", "pruefidee": "Angebot versenden → Kunde nimmt mit Änderungswunsch an → Status `AcceptWebReceiptWithChangeRequests` und mindestens ein `WebReceiptItemChangeRequest` sind im ERP sichtbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-026", @@ -467,7 +492,8 @@ "tracelinks": "SyRS-039, SwRS-027", "konsolidierung": "nein", "pruefidee": "Rechnung exportieren → `IsReceiptExported` liefert `true` und der Storno wird abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-027", @@ -487,7 +513,8 @@ "tracelinks": "SyRS-043, SwRS-028", "konsolidierung": "nein", "pruefidee": "Rechnung mit aktivierter XRechnung erzeugen und mit dem KOSIT-Validator prüfen — die Prüfung muss fehlerfrei durchlaufen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-028", @@ -505,7 +532,8 @@ "tracelinks": "SyRS-044, SwRS-029", "konsolidierung": "nein", "pruefidee": "Kunde auf Mahnstufe oberhalb der Schwelle setzen → Anlage eines neuen Auftrags muss abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-029", @@ -524,7 +552,8 @@ "tracelinks": "SyRS-045, SwRS-030", "konsolidierung": "nein", "pruefidee": "Kontoumsatz zur offenen Rechnung einspielen → Rechnung wird als bezahlt abgeschlossen; Storno der Buchung setzt sie wieder auf offen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-030", @@ -542,7 +571,8 @@ "tracelinks": "SyRS-046, SwRS-031", "konsolidierung": "nein", "pruefidee": "Beleg mit provisionsrelevanten Positionen speichern → Provisionsdatensätze entsprechen dem zugeordneten Schema.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-031", @@ -560,7 +590,8 @@ "tracelinks": "SyRS-026, SyRS-047, SwRS-032", "konsolidierung": "Kandidat: StRS-011 — Preisfindung und Mindestpreisschutz sind auf mehrere BL-Klassen verteilt; im Zielsystem als ein Preisfindungsdienst zusammenführen.", "pruefidee": "Artikel mit Grundpreis, Staffelpreis und aktivem Aktionspreis in einen Beleg einfügen → es gilt der fachlich vorgesehene Vorrang und der Mindestpreis wird nicht unterschritten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-032", @@ -578,7 +609,8 @@ "tracelinks": "SyRS-048, SwRS-033", "konsolidierung": "nein", "pruefidee": "Artikel mit Herstellernummer anlegen → Katalogabruf liefert Beschreibung und Bilder.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-033", @@ -596,7 +628,8 @@ "tracelinks": "SyRS-049, SwRS-034", "konsolidierung": "Kandidat: StRS-033 selbst — GLS und Shipcloud sind getrennt implementiert; im Zielsystem über eine gemeinsame Versanddienst-Abstraktion zusammenführen.", "pruefidee": "Lieferschein an GLS übergeben → Label wird erzeugt und ein Trackinglink am Lieferschein gespeichert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-034", @@ -614,7 +647,8 @@ "tracelinks": "SyRS-050, SwRS-035", "konsolidierung": "nein", "pruefidee": "RMA-Vorgang anlegen → drei getrennte Nummern werden vergeben; der zugehörige Lieferschein wird nicht automatisch abgeschlossen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-035", @@ -632,7 +666,8 @@ "tracelinks": "SyRS-051, SwRS-036", "konsolidierung": "Kandidat: StRS-035 selbst — CRM-Projekt, Ticketprojekt und Taskmanagement bilden überlappende Vorhaben-Konzepte ab; Vereinheitlichung im Zielsystem prüfen.", "pruefidee": "Beleg einem CRM-Projekt zuordnen → Projektauswertung weist Umsatz und Aufwand aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-036", @@ -650,7 +685,8 @@ "tracelinks": "SyRS-052, SwRS-037", "konsolidierung": "nein", "pruefidee": "Benutzer ohne DSGVO-Recht darf das Modul nicht sehen; Auftragsverarbeitungsvertrag lässt sich als PDF erzeugen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-037", @@ -669,7 +705,8 @@ "tracelinks": "SyRS-053, SwRS-038", "konsolidierung": "nein", "pruefidee": "Rechnung als PDF erzeugen → das Dokument entspricht dem hinterlegten Layout und der konfigurierten PDF-Konformitätsstufe.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-038", @@ -687,7 +724,8 @@ "tracelinks": "SyRS-054, SwRS-039", "konsolidierung": "nein", "pruefidee": "Eingehender Anruf einer erfassten Rufnummer → Anrufprotokolleintrag mit korrekter Kundenzuordnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-039", @@ -706,7 +744,8 @@ "tracelinks": "SyRS-055, SwRS-040", "konsolidierung": "Kandidat: SwRS-040 — ein Teil der Meldungen ist hart im Code kodiert statt über Ressourcen geführt.", "pruefidee": "Stichprobe von 20 Benutzermeldungen: alle liegen deutsch und mit englischer Entsprechung vor.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-040", @@ -725,7 +764,8 @@ "tracelinks": "SyRS-056, SwRS-041", "konsolidierung": "Kandidat: SwRS-041 — Protokollierung ist über `AnlageLog`, `ReceiptLog`, `*History`- und `*Log`-Tabellen verteilt; im Zielsystem als ein Auditmodell zusammenführen.", "pruefidee": "Beleg über den Web-Service ändern → `ChangedThroughApplication` weist den Web-Service als Kanal aus, `ChangedByI3D` den handelnden Mitarbeiter.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-041", @@ -743,7 +783,8 @@ "tracelinks": "SyRS-057, SyRS-058, SwRS-042", "konsolidierung": "nein", "pruefidee": "Identische Version in beiden Betriebsarten starten → gleicher Funktionsumfang, gleiche Datenbankkompatibilität.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-042", @@ -761,7 +802,8 @@ "tracelinks": "SyRS-059, SwRS-043", "konsolidierung": "nein", "pruefidee": "Migration zweimal hintereinander ausführen → beim zweiten Lauf wird kein Skript erneut ausgeführt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -779,7 +821,8 @@ "tracelinks": "StRS-005, SwRS-025", "konsolidierung": "nein", "pruefidee": "Anmeldung mit korrektem Benutzernamen und falschem Passwort sowie mit unbekanntem Benutzernamen müssen dieselbe Fehlermeldung und denselben Meldungscode liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -795,7 +838,8 @@ "tracelinks": "StRS-005, SyRS-001", "konsolidierung": "nein", "pruefidee": "Mitarbeiter mit Austrittstermin in der Vergangenheit → Anmeldung wird abgewiesen, Protokolleintrag nennt \"Einstellungstermin und Austrittstermin\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -813,7 +857,8 @@ "tracelinks": "StRS-005, SwRS-026", "konsolidierung": "nein", "pruefidee": "Dauer = 1 Tag, Anmeldung Montag 10:00 → Dienstag 02:00 muss die zweite Stufe erneut verlangt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -830,7 +875,8 @@ "tracelinks": "StRS-003, SwRS-023", "konsolidierung": "nein", "pruefidee": "Lizenzanzahl 1, zwei verschiedene Geräte → die zweite Anmeldung muss mit einer Lizenzmeldung scheitern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -847,7 +893,8 @@ "tracelinks": "StRS-002, SwRS-022", "konsolidierung": "Kandidat: SyRS-006 — dieselbe Rechteprüfung wird im Legacy-REST-Dienst anders realisiert.", "pruefidee": "Endpunkt ohne Token → 401; Endpunkt mit gültigem Token ohne Recht → 403; mit Recht → 200.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -865,7 +912,8 @@ "tracelinks": "StRS-002, StRS-009, SwRS-021", "konsolidierung": "Kandidat: SyRS-005 — Rechteprüfung existiert parallel als Attribut (API) und als BL-Aufruf; im Zielsystem als eine Autorisierungsschicht führen.", "pruefidee": "Denselben Vorgang über Desktop-Client und REST-API ohne das erforderliche Recht anstoßen → beide Male dieselbe Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -883,7 +931,8 @@ "tracelinks": "StRS-002, SwRS-045", "konsolidierung": "nein", "pruefidee": "Token ausstellen, Ablaufdatum in die Vergangenheit setzen → API-Aufruf mit diesem Token wird abgewiesen und protokolliert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -902,7 +951,8 @@ "tracelinks": "StRS-005, SwRS-025", "konsolidierung": "nein", "pruefidee": "Gültiges JWT ohne verknüpftes Konto → `login` scheitert; nach `connect_accounts` gelingt `login`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -918,7 +968,8 @@ "tracelinks": "SyRS-004, SwRS-046", "konsolidierung": "nein", "pruefidee": "Zweimal von demselben Gerät anmelden → identische Ticketkennung, Lizenzzähler unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -935,7 +986,8 @@ "tracelinks": "StRS-001, StRS-023, SwRS-020", "konsolidierung": "Kandidat: SyRS-005 — Portal und Web-Service verwenden unterschiedliche Autorisierungsmechanismen für dasselbe Rechtemodell.", "pruefidee": "Seite mit `AuthorizeCustomerPortalPort` über den Mitarbeiterport aufrufen → Zugriff wird verweigert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -952,7 +1004,8 @@ "tracelinks": "StRS-005, SyRS-009, SwRS-046", "konsolidierung": "nein", "pruefidee": "Ticket erzeugen, 4 Minuten später und erneut nach 28 Minuten aufrufen → der zweite Aufruf muss laut Kommentar mit einem abgelaufenen Ticket rechnen; der Client meldet sich automatisch neu an.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-020", @@ -969,7 +1022,8 @@ "tracelinks": "StRS-006, SwRS-002", "konsolidierung": "Kandidat: SyRS-042 — für Web-Angebote existiert mit `WebReceiptState` ein zweiter, davon unabhängiger Zustandsraum.", "pruefidee": "Beleg mit Status 4 in der Datenbank → Anzeige muss mit definierter Ausnahme fehlschlagen statt einen falschen Zustand zu zeigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-021", @@ -986,7 +1040,8 @@ "tracelinks": "StRS-012, SyRS-020, SwRS-009", "konsolidierung": "nein", "pruefidee": "Auftrag mit einer Artikelposition und einer Frachtposition vollständig liefern → Auftrag wird geschlossen, obwohl die Frachtposition nicht weiterverarbeitet wurde.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-022", @@ -1004,7 +1059,8 @@ "tracelinks": "StRS-007, SwRS-005", "konsolidierung": "nein", "pruefidee": "Auftragsposition mit Menge 0 in einen Lieferschein übernehmen → Ablehnung; dieselbe Aktion aus einem Angebot → zulässig.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-023", @@ -1020,7 +1076,8 @@ "tracelinks": "StRS-008, SwRS-003", "konsolidierung": "nein", "pruefidee": "Beleg mit Version = aktuelle Version + 2 speichern → Ablehnung mit der Versionsmeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-024", @@ -1038,7 +1095,8 @@ "tracelinks": "StRS-008, SwRS-047", "konsolidierung": "Kandidat: SwRS-047 — pessimistische Sperre und optimistisches `ConcurrencyControlGuid` bestehen parallel.", "pruefidee": "Beleg mit Benutzer A öffnen, mit Benutzer B speichern → B erhält die Sperrmeldung; B mit Entsperrrecht kann übernehmen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-025", @@ -1055,7 +1113,8 @@ "tracelinks": "StRS-010, SwRS-007", "konsolidierung": "nein", "pruefidee": "Kunde mit Limit brutto; offener Auftrag und offene Rechnung → die Meldung weist beide Belegarten getrennt aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-026", @@ -1073,7 +1132,8 @@ "tracelinks": "StRS-011, StRS-031, SwRS-008", "konsolidierung": "Kandidat: SyRS-026 selbst — die Prüfungen liegen als über 40 Einzelmethoden in einer Klasse mit über 11.000 Zeilen; im Zielsystem als konfigurierbare Regelmenge modellieren.", "pruefidee": "Artikelposition ohne Steuersatz speichern → Ablehnung; Verkaufspreis ohne Änderungsrecht ändern → gespeicherter Preis entspricht dem Ausgangswert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-027", @@ -1092,7 +1152,8 @@ "tracelinks": "StRS-013, SwRS-010", "konsolidierung": "nein", "pruefidee": "Vertrag mit monatlichem Intervall, nachschüssig, zweimal abrechnen → zwei Rechnungen mit aufeinanderfolgenden Leistungszeiträumen ohne Überschneidung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-028", @@ -1110,7 +1171,8 @@ "tracelinks": "StRS-009, StRS-013, SwRS-010", "konsolidierung": "nein", "pruefidee": "Zwei Vertragsrechnungen erzeugen, die erste stornieren → Ablehnung; die zweite stornieren → Vertragsabrechnungsstand geht um eine Periode zurück.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-029", @@ -1127,7 +1189,8 @@ "tracelinks": "StRS-014, SyRS-015, SwRS-011", "konsolidierung": "nein", "pruefidee": "Beleg gegen ein erschöpftes Kontingent buchen → eine Ausgleichsposition entsteht und die Belegnummer stammt aus dem für diese Summe zuständigen Nummernkreis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-030", @@ -1144,7 +1207,8 @@ "tracelinks": "StRS-015, StRS-018, SwRS-012", "konsolidierung": "nein", "pruefidee": "Lieferantenrechnung im Status \"offen\" speichern → keine Barcodebuchung; nach Abschluss → Buchung erfolgt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-031", @@ -1163,7 +1227,8 @@ "tracelinks": "StRS-016, SwRS-013", "konsolidierung": "nein", "pruefidee": "Fehlerhafte EDI-Datei einspielen → Datei bleibt erhalten, Protokolleintrag mit Fehler entsteht, keine Belegänderung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-032", @@ -1180,7 +1245,8 @@ "tracelinks": "StRS-017, SwRS-014", "konsolidierung": "nein", "pruefidee": "Lieferscheinposition von Lager A nach Lager B umstellen → Bestand A wird zurückgebucht, Bestand B belastet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-033", @@ -1198,7 +1264,8 @@ "tracelinks": "StRS-018, SwRS-015", "konsolidierung": "nein", "pruefidee": "Bereits gebuchte Seriennummer aus einer neuen Belegversion entfernen, ohne sie in `RemoveBarcodeI3Ds` anzugeben → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-034", @@ -1215,7 +1282,8 @@ "tracelinks": "StRS-019, SwRS-016", "konsolidierung": "nein", "pruefidee": "Alle drei Einstellungen aktivieren und ein leeres Ticket speichern → die Meldung enthält vier Zeilen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-035", @@ -1233,7 +1301,8 @@ "tracelinks": "StRS-019, SwRS-016", "konsolidierung": "nein", "pruefidee": "Ticket mit offener Aufgabe abschließen → Aufgabe ist entfernt, Historieneintrag \"Close\" vorhanden, `ClosedAt` gesetzt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-036", @@ -1251,7 +1320,8 @@ "tracelinks": "StRS-020, SwRS-017", "konsolidierung": "Kandidat: SyRS-036 selbst — Filterung ist auf Suchlogik, Listenlogik und Portalrichtlinien verteilt.", "pruefidee": "Ticket eines Kollegen per Direktlink aufrufen → Zugriff wird verweigert, nicht nur in der Liste ausgeblendet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-037", @@ -1269,7 +1339,8 @@ "tracelinks": "StRS-021, StRS-022, SwRS-018", "konsolidierung": "nein", "pruefidee": "Ticketzeit fakturieren → Zeit trägt eine Positionsreferenz; Rechnung stornieren → Referenz ist entfernt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-038", @@ -1287,7 +1358,8 @@ "tracelinks": "StRS-022, SwRS-019", "konsolidierung": "nein", "pruefidee": "Zeiteintrag, der zwei sich überschneidende Aufschlagszeiträume berührt → das Abrechnungsergebnis ist eindeutig und reproduzierbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -1304,7 +1376,8 @@ "tracelinks": "StRS-004, SwRS-024", "konsolidierung": "nein", "pruefidee": "Nummernkreis mit Intervall 10 und bereits vergebener Nummer 1020 → die nächste Nummer ist 1030, nicht 1020.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -1321,7 +1394,8 @@ "tracelinks": "SyRS-014, SwRS-024", "konsolidierung": "nein", "pruefidee": "50 parallele Nummernanforderungen desselben Kreises → 50 unterschiedliche Nummern, keine Zeitüberschreitung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-039", @@ -1338,7 +1412,8 @@ "tracelinks": "StRS-009, StRS-026, SwRS-027", "konsolidierung": "Kandidat: SyRS-039 selbst — die Sperre ist bislang nur für Rechnungen implementiert; für andere Belegarten prüfen.", "pruefidee": "Rechnung exportieren, danach Storno versuchen → Ablehnung mit Exportmeldung; Gutschrift bleibt möglich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-043", @@ -1357,7 +1432,8 @@ "tracelinks": "StRS-027, SwRS-028", "konsolidierung": "Kandidat: SwRS-028 — die Implementierung ist eigenentwickelt; die Entwicklerdokumentation nennt eine bestehende Open-Source-Bibliothek als Alternative.", "pruefidee": "Erzeugte Datei mit dem KOSIT-Prüfwerkzeug validieren → keine Verstöße; Summenprobe stimmt bei Rechnungen mit Rabattpositionen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-044", @@ -1375,7 +1451,8 @@ "tracelinks": "StRS-028, SwRS-029", "konsolidierung": "nein", "pruefidee": "Kunde auf gesperrte Mahnstufe setzen → neuer Auftrag wird abgelehnt, eine Gutschrift bleibt möglich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-045", @@ -1393,7 +1470,8 @@ "tracelinks": "StRS-029, SwRS-030", "konsolidierung": "nein", "pruefidee": "Zahlungseingang zu einer stornierten Rechnung einspielen → der Status bleibt \"storniert\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-046", @@ -1410,7 +1488,8 @@ "tracelinks": "StRS-030, SwRS-031", "konsolidierung": "nein", "pruefidee": "Belegsumme nachträglich ändern → die gespeicherten Provisionsanteile ändern sich entsprechend.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-047", @@ -1429,7 +1508,8 @@ "tracelinks": "StRS-031, SwRS-032", "konsolidierung": "nein", "pruefidee": "Aktionspreis mit gestrigem Enddatum → er darf in der Preismatrix nicht mehr als gültig erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-060", @@ -1446,7 +1526,8 @@ "tracelinks": "StRS-006, SwRS-048", "konsolidierung": "nein", "pruefidee": "Test in der Zielarchitektur nachbilden; Grenzwert 5 s bei mindestens gleichem Datenumfang.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-061", @@ -1464,7 +1545,8 @@ "tracelinks": "StRS-023, SwRS-049", "konsolidierung": "nein", "pruefidee": "Datenbestand mit mehr als 300.000 abgeschlossenen Tickets → der Zwischenspeicher überschreitet die Grenze nicht; Tickets älter als 24 Monate erscheinen nicht im Schnellzugriff.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-062", @@ -1481,7 +1563,8 @@ "tracelinks": "StRS-023, SwRS-049", "konsolidierung": "nein", "pruefidee": "Web-Account lädt eine 30-MB-Datei hoch → Ablehnung; Mitarbeiter mit derselben Datei → Annahme.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-063", @@ -1498,7 +1581,8 @@ "tracelinks": "StRS-040, SwRS-050", "konsolidierung": "Kandidat: SwRS-050 — die drei Hosts pflegen getrennte Protokollkonfigurationen mit abweichenden Aufbewahrungswerten (15 vs. 14).", "pruefidee": "Fehler auslösen → Eintrag in der Tagesdatei; nach 16 Tagen Betrieb existieren höchstens 15 Archivdateien.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-064", @@ -1515,7 +1599,8 @@ "tracelinks": "StRS-042, SwRS-051", "konsolidierung": "nein", "pruefidee": "Eine Wartungsaufgabe künstlich zum Fehlschlagen bringen → die übrigen Aufgaben laufen weiter, im Protokoll steht der Aufgabenname.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-065", @@ -1531,7 +1616,8 @@ "tracelinks": "StRS-041, SwRS-052", "konsolidierung": "nein", "pruefidee": "Poolgröße auf 5 setzen und 20 gleichzeitige Anfragen stellen → das System wartet, statt Verbindungen zu verlieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-066", @@ -1548,7 +1634,8 @@ "tracelinks": "StRS-041, SwRS-052", "konsolidierung": "nein", "pruefidee": "Konfigurationsdatei auf einem Zielsystem prüfen: Dateirechte müssen auf das Dienstkonto beschränkt sein; im Zielsystem ist ein Geheimnisspeicher vorzusehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-067", @@ -1566,7 +1653,8 @@ "tracelinks": "SwRS-053", "konsolidierung": "nein", "pruefidee": "DEBUG-Build: Mail an eine externe Adresse senden → Empfänger ist die Testadresse.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-068", @@ -1585,7 +1673,8 @@ "tracelinks": "SwRS-054, SwRS-055", "konsolidierung": "Kandidat: SyRS-068 selbst — im Zielsystem ist genau eine Schnittstellengeneration zu führen; die Migration der 2.618 Altoperationen ist der größte Einzelposten.", "pruefidee": "Für eine fachliche Operation prüfen, ob sie in beiden Schnittstellen existiert und dieselben Regeln durchsetzt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-069", @@ -1604,7 +1693,8 @@ "tracelinks": "SwRS-056", "konsolidierung": "nein", "pruefidee": "Anmeldung ohne Passwort → `Status = Error` und `MessageCode = NoUsernameOrPassword`, unabhängig von der Anzeigesprache.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-070", @@ -1622,7 +1712,8 @@ "tracelinks": "StRS-041, SwRS-042", "konsolidierung": "nein", "pruefidee": "PDF im Container und unter Windows erzeugen → identische Schriftdarstellung und identische Datumsformatierung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-071", @@ -1639,7 +1730,8 @@ "tracelinks": "StRS-023, SyRS-010, SwRS-020", "konsolidierung": "nein", "pruefidee": "Mitarbeiterseite über den Kundenport aufrufen → Zugriff verweigert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-072", @@ -1658,7 +1750,8 @@ "tracelinks": "SwRS-057", "konsolidierung": "nein", "pruefidee": "Änderung mit einer Compilerwarnung einreichen → der Bau schlägt fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-073", @@ -1675,7 +1768,8 @@ "tracelinks": "SwRS-057", "konsolidierung": "nein", "pruefidee": "Abhängigkeit mit bekannter Schwachstelle einbinden → der Bau läuft durch; in der Zielarchitektur muss er scheitern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-055", @@ -1693,7 +1787,8 @@ "tracelinks": "StRS-039, SwRS-040", "konsolidierung": "Kandidat: SwRS-040 — Meldungsausgabe ist auf Ressourcen und Codeliterale verteilt.", "pruefidee": "Anwendung auf Englisch stellen und einen Beleg ohne Datum speichern → die Meldung erscheint derzeit deutsch.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-056", @@ -1710,7 +1805,8 @@ "tracelinks": "StRS-040, SwRS-041", "konsolidierung": "nein", "pruefidee": "Beleg über den Warenkorb speichern → `ChangedThroughApplication = WebServices`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-059", @@ -1727,7 +1823,8 @@ "tracelinks": "StRS-042, SwRS-043", "konsolidierung": "nein", "pruefidee": "Anwendung gegen eine Datenbank zwei Versionen zurück starten → alle Zwischenskripte werden in Versionsreihenfolge ausgeführt; ein zweiter Start führt keines erneut aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-057", @@ -1744,7 +1841,8 @@ "tracelinks": "StRS-041, SwRS-042", "konsolidierung": "nein", "pruefidee": "Zweite Instanz mit `ExecuteServices = false` starten → Hintergrunddienste laufen nur in der ersten Instanz.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-058", @@ -1762,7 +1860,8 @@ "tracelinks": "StRS-041, SwRS-058", "konsolidierung": "Kandidat: SwRS-058 — die doppelte Implementierung verdoppelt den Pflegeaufwand; in einer Web-/SaaS-Zielarchitektur entfällt der Direktzugriffspfad.", "pruefidee": "Dasselbe Modul in beiden Verbindungsarten öffnen → gleiches fachliches Verhalten und gleiche Fehlermeldungen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-040", @@ -1780,7 +1879,8 @@ "tracelinks": "StRS-019, StRS-023, SwRS-020", "konsolidierung": "Kandidat: SyRS-040 selbst — es existieren mit `Notifications` und `NexusNotifications` zwei Benachrichtigungsmodelle.", "pruefidee": "Ticket schließen → der meldende Web-Account sieht im Portal eine Benachrichtigung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-041", @@ -1798,7 +1898,8 @@ "tracelinks": "StRS-024, SwRS-020", "konsolidierung": "nein", "pruefidee": "Benutzer mit nur `CHECK_CART` versucht zu bestellen → Ablehnung; nach Freigabe durch einen Benutzer mit `ORDER_CART` entsteht der Auftrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-042", @@ -1816,7 +1917,8 @@ "tracelinks": "StRS-025, SyRS-020, SwRS-020", "konsolidierung": "Kandidat: SyRS-020 — zwei unabhängige Zustandsräume je Beleg (`ReceiptState` und `WebReceiptState`); im Zielsystem als ein Belegzustandsmodell mit Teilaspekten führen.", "pruefidee": "Angebot versenden, vom Kunden öffnen lassen → Zustandsfolge `SendToCustomer` → `FirstLoaded` ist im ERP sichtbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-048", @@ -1834,7 +1936,8 @@ "tracelinks": "StRS-032, SwRS-033", "konsolidierung": "nein", "pruefidee": "Katalogdienst nicht erreichbar → Artikelpflege bleibt möglich, die Anreicherung meldet einen eigenen Fehlertyp.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-049", @@ -1852,7 +1955,8 @@ "tracelinks": "StRS-033, SwRS-034", "konsolidierung": "Kandidat: SwRS-034 — die beiden Anbindungen teilen keine gemeinsame Abstraktion.", "pruefidee": "Lieferschein an den Versanddienst übergeben → Label wird erzeugt und ein Trackinglink am Lieferschein gespeichert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-050", @@ -1869,7 +1973,8 @@ "tracelinks": "StRS-034, SyRS-021, SwRS-035", "konsolidierung": "nein", "pruefidee": "Lieferschein über einen RMA-Vorgang schließen → die Abschlussautomatik verändert seinen Status nicht mehr.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-051", @@ -1886,7 +1991,8 @@ "tracelinks": "StRS-035, SwRS-036", "konsolidierung": "nein", "pruefidee": "Beleg oberhalb des Schwellenwerts ohne Projekt speichern → Rückfrage bzw. Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-052", @@ -1903,7 +2009,8 @@ "tracelinks": "StRS-036, SwRS-037", "konsolidierung": "nein", "pruefidee": "Auftragsverarbeitungsvertrag online abrufen → PDF wird ausgeliefert und die Ablage referenziert dieselbe Datei.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-053", @@ -1920,7 +2027,8 @@ "tracelinks": "StRS-037, SwRS-038", "konsolidierung": "nein", "pruefidee": "Bericht für eine Belegart aufrufen, für die `CanCreateReport` einen Fehler liefert → keine Dokumenterzeugung; Dateiname eines gültigen Berichts entspricht der Vorlage.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-054", @@ -1938,7 +2046,8 @@ "tracelinks": "StRS-038, SwRS-039", "konsolidierung": "nein", "pruefidee": "Anruf von einer gepflegten Rufnummer → Anrufobjekt mit korrekter Partnerzuordnung entsteht und erscheint in beiden Oberflächen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-080", @@ -1955,7 +2064,8 @@ "tracelinks": "StRS-036, SyRS-064", "konsolidierung": "nein", "pruefidee": "Aufgabenliste des `DataQualityService` vollständig erfassen und je Aufgabe die zugrunde liegende Frist dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-081", @@ -1972,7 +2082,8 @@ "tracelinks": "StRS-041, SyRS-066, SyRS-070", "konsolidierung": "nein", "pruefidee": "Dienst ohne Zertifikat starten und eine unverschlüsselte Verbindung aufbauen → gelingt sie, ist die Verschlüsselung nicht erzwungen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -1989,7 +2100,8 @@ "tracelinks": "SyRS-020, StRS-006", "konsolidierung": "nein", "pruefidee": "Neue Belegart ableiten → Compiler erzwingt die Implementierung aller fünf abstrakten Mitglieder.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-002", @@ -2006,7 +2118,8 @@ "tracelinks": "SyRS-020, StRS-006", "konsolidierung": "Kandidat: SwRS-002 selbst — drei historische Nummernräume in einem Enum; im Zielsystem als typisierte Objektreferenz modellieren.", "pruefidee": "Bestehenden Enum-Wert ändern → Fremdschlüsselbeziehungen in `AnlageLog` zeigen auf falsche Objekte; der Wert muss stabil bleiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-003", @@ -2023,7 +2136,8 @@ "tracelinks": "SyRS-023, StRS-008", "konsolidierung": "Kandidat: SwRS-004 — Tabelle, Versionstabelle, Sicht, Versionssicht, Entität, Mapping, temporäre Entität, temporäres Mapping und Repository müssen je Feld synchron gehalten werden.", "pruefidee": "Neues Kopffeld nur im Sichtmodell ergänzen → Wert wird gelesen, aber nicht gespeichert; der Fehler muss durch einen End-to-End-Test auffallen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-004", @@ -2040,7 +2154,8 @@ "tracelinks": "SyRS-023, StRS-008", "konsolidierung": "Kandidat: SwRS-003", "pruefidee": "Feld ergänzen und die Versionstabelle auslassen → Versionierung schlägt zur Laufzeit fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-005", @@ -2058,7 +2173,8 @@ "tracelinks": "SyRS-022, StRS-007", "konsolidierung": "nein", "pruefidee": "In `ReceiptBL` nach `switch`-Ausdrücken über `ReceiptKind` suchen → es dürfen keine belegartabhängigen Verzweigungen außerhalb der Strategie bestehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-006", @@ -2074,7 +2190,8 @@ "tracelinks": "SyRS-024, SyRS-028, StRS-009", "konsolidierung": "nein", "pruefidee": "Rechnung stornieren → Version n bleibt unverändert, Version n+1 trägt Status \"storniert\" mit Mengen 0.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-007", @@ -2091,7 +2208,8 @@ "tracelinks": "SyRS-025, StRS-010", "konsolidierung": "nein", "pruefidee": "Neue limitrelevante Belegstrategie registrieren → sie erscheint ohne weitere Änderung in der Limitaufschlüsselung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-008", @@ -2108,7 +2226,8 @@ "tracelinks": "SyRS-026, SyRS-029", "konsolidierung": "Kandidat: SyRS-026 — die Prüfkette gehört im Zielsystem in eine konfigurierbare, einzeln testbare Regelmenge.", "pruefidee": "Prüfmethode aus Region 2 nach Region 1 verschieben → Belegnummer und Positionssumme werden inkonsistent; der Reihenfolgevertrag muss dokumentiert bleiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-009", @@ -2124,7 +2243,8 @@ "tracelinks": "SyRS-021, StRS-012", "konsolidierung": "nein", "pruefidee": "Komponente isoliert mit einem Beleg-Attrappenobjekt aufrufen → alle drei Ergebnisse sind ohne Datenbank erreichbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-010", @@ -2142,7 +2262,8 @@ "tracelinks": "SyRS-027, SyRS-028, StRS-013", "konsolidierung": "Kandidat: SwRS-010 selbst — vier Komponenten mit teilweise überlappender Zuständigkeit (z. B. Statuswechsel in `ContractBL` und `ContractSpecificLogic`).", "pruefidee": "Abrechnungsintervalllogik ändern → keine Änderung an `ContractSpecificLogic` erforderlich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -2160,7 +2281,8 @@ "tracelinks": "SyRS-029, StRS-014", "konsolidierung": "nein", "pruefidee": "Beleg mit Rundungsausgleichsposition speichern → keine Mindestpreismeldung, Beleg wird trotz Restmenge der Sonderposition abgeschlossen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -2177,7 +2299,8 @@ "tracelinks": "SyRS-030, StRS-015", "konsolidierung": "nein", "pruefidee": "Änderung an der Abschlussautomatik → sie wirkt auf Kunden- und Lieferantenbelege ohne getrennte Implementierung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-013", @@ -2195,7 +2318,8 @@ "tracelinks": "SyRS-031, StRS-016", "konsolidierung": "Kandidat: SwRS-013 selbst — eine partielle Klasse über sechs Distributoren erzeugt eine sehr große Einzelklasse; im Zielsystem als Strategie je Format modellieren.", "pruefidee": "Neuen Distributor ergänzen → keine Änderung an bestehenden Teildateien erforderlich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-014", @@ -2211,7 +2335,8 @@ "tracelinks": "SyRS-032, SyRS-060, StRS-017", "konsolidierung": "nein", "pruefidee": "Beleg mit 500 Positionen desselben Artikels speichern → Artikelstammdaten werden nicht 500-mal geladen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-015", @@ -2228,7 +2353,8 @@ "tracelinks": "SyRS-033, StRS-018", "konsolidierung": "Kandidat: SwRS-015 selbst — der Entitätsname `BarCode2` deutet auf eine parallel bestehende Vorgängerimplementierung hin (siehe `Hypothesen.md`).", "pruefidee": "Seriennummer über Wareneingang, Auftrag und Lieferschein führen → die Historie nennt alle drei Belege in Reihenfolge.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-016", @@ -2245,7 +2371,8 @@ "tracelinks": "SyRS-034, SyRS-035, StRS-019", "konsolidierung": "nein", "pruefidee": "Statusliste erweitern → nur `HelpdeskStatusBL` und die zugehörige Einstellungsseite sind betroffen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-017", @@ -2262,7 +2389,8 @@ "tracelinks": "SyRS-036, StRS-020", "konsolidierung": "nein", "pruefidee": "Neue Rechtekonstante in `UserRightsConst` ergänzen → die zugehörige Portalrichtlinie ist ohne weitere Änderung verfügbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-018", @@ -2280,7 +2408,8 @@ "tracelinks": "SyRS-037, StRS-021", "konsolidierung": "nein", "pruefidee": "Position mit gebundener Zeit aus dem Beleg entfernen → die Zeitbindung wird gelöst, nicht verwaist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-019", @@ -2297,7 +2426,8 @@ "tracelinks": "SyRS-038, StRS-022", "konsolidierung": "Kandidat: StRS-022", "pruefidee": "Nur die Lizenz für Vertragsabrechnung vergeben → die beiden anderen Module erscheinen nicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-020", @@ -2314,7 +2444,8 @@ "tracelinks": "SyRS-010, SyRS-041, SyRS-042, StRS-023", "konsolidierung": "nein", "pruefidee": "Neuen Fachbereich ergänzen → er nutzt Autorisierung, Dialoge und Datengitter aus `Shared`, ohne eigene Varianten zu erzeugen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-021", @@ -2332,7 +2463,8 @@ "tracelinks": "SyRS-005, SyRS-006, StRS-002", "konsolidierung": "Kandidat: SwRS-021 selbst — das Rechteregister liegt in einer Web-Service-Assembly mit dem Verzeichnisnamen `EntitiesWrongPlace`, obwohl es von Backend, Client und Portal genutzt wird.", "pruefidee": "Recht ohne Migrationsskript nur als Konstante ergänzen → die Rechteverwaltung zeigt es nicht an.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-022", @@ -2349,7 +2481,8 @@ "tracelinks": "SyRS-005, StRS-002", "konsolidierung": "nein", "pruefidee": "Alle Endpunkte auflisten und prüfen, dass jeder schutzbedürftige Endpunkt ein Autorisierungsattribut trägt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-023", @@ -2367,7 +2500,8 @@ "tracelinks": "SyRS-004, StRS-003", "konsolidierung": "nein", "pruefidee": "Neue Lizenz in `LicenseGuids` ergänzen → die zugehörige Portalrichtlinie steht ohne weitere Änderung bereit.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-024", @@ -2385,7 +2519,8 @@ "tracelinks": "SyRS-014, SyRS-015, StRS-004", "konsolidierung": "nein", "pruefidee": "Neue Nummernkreisart ergänzen → die Eindeutigkeitsprüfung funktioniert ohne Änderung an `FindNextNumber`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-060", @@ -2402,7 +2537,8 @@ "tracelinks": "SyRS-014, SyRS-015", "konsolidierung": "nein", "pruefidee": "Statische Analyse auf interpolierte SQL-Zeichenfolgen im gesamten Backend ausführen; jede Fundstelle bewerten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-061", @@ -2421,7 +2557,8 @@ "tracelinks": "SyRS-034, SyRS-043", "konsolidierung": "Kandidat: SwRS-061 selbst — 1.219 Einstellungswerte in zwei Registern sind bei der Migration zusammenzuführen und zu entrümpeln.", "pruefidee": "Für eine fachliche Einstellung prüfen, in welchem Register sie liegt; im Zielsystem darf es nur ein Register geben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-062", @@ -2438,7 +2575,8 @@ "tracelinks": "SyRS-043, SwRS-061", "konsolidierung": "nein", "pruefidee": "Einstellung aus der Datenbank löschen → die Anwendung verwendet den Vorgabewert ohne Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-025", @@ -2456,7 +2594,8 @@ "tracelinks": "SyRS-001, SyRS-008, StRS-005", "konsolidierung": "nein", "pruefidee": "Neues Anmeldeverfahren ergänzen → Lizenzprüfung und Ticketvergabe funktionieren ohne Änderung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-026", @@ -2474,7 +2613,8 @@ "tracelinks": "SyRS-003, StRS-005", "konsolidierung": "nein", "pruefidee": "Verfahren in der Konfiguration umstellen und Dienst neu starten → das andere Verfahren wird verwendet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-044", @@ -2491,7 +2631,8 @@ "tracelinks": "SyRS-001, StRS-005", "konsolidierung": "nein", "pruefidee": "Zwei Benutzer mit identischem Kennwort anlegen → die gespeicherten Werte sind identisch, was das Fehlen eines Salzes nachweist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-045", @@ -2508,7 +2649,8 @@ "tracelinks": "SyRS-007, StRS-002", "konsolidierung": "nein", "pruefidee": "Token in der Datenbank suchen → nur der Hashwert ist gespeichert; nach `Deactivate` schlägt `ValidateToken` fehl und der Vorgang steht im Protokoll.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-046", @@ -2524,7 +2666,8 @@ "tracelinks": "SyRS-004, SyRS-009", "konsolidierung": "Kandidat: SwRS-046 selbst — eine prozessweite Sperre wirkt nur je Instanz; bei mehreren Web-Service-Instanzen ist eine übergreifende Absicherung erforderlich (siehe `Hypothesen.md`).", "pruefidee": "Bei Lizenzanzahl 1 zwei Anmeldungen exakt gleichzeitig auslösen → genau eine erhält ein Ticket.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-047", @@ -2541,7 +2684,8 @@ "tracelinks": "SyRS-024, StRS-008", "konsolidierung": "Kandidat: SyRS-024", "pruefidee": "Denselben Beleg parallel über die Sperre und über eine direkte Speicheroperation ändern → prüfen, welches Verfahren den Konflikt tatsächlich abfängt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-058", @@ -2558,7 +2702,8 @@ "tracelinks": "SyRS-058, StRS-041", "konsolidierung": "Kandidat: SyRS-058 — in einer Web-/SaaS-Zielarchitektur entfällt der Direktzugriffspfad; die Doppelimplementierung ist der größte strukturelle Vereinfachungshebel im Client.", "pruefidee": "Modul mit nur einer Implementierung anlegen → der Datenzugriff schlägt in der jeweils anderen Verbindungsart fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-063", @@ -2577,7 +2722,8 @@ "tracelinks": "SyRS-068, SyRS-069", "konsolidierung": "Kandidat: SwRS-063 selbst — die Schichtregel ist laut eigener Dokumentation nicht durchgängig eingehalten; Abweichungen sind vor der Migration zu erfassen.", "pruefidee": "Stichprobe von Web-Service-Signaturen prüfen: keine gibt eine NHibernate-Entität zurück.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-054", @@ -2595,7 +2741,8 @@ "tracelinks": "SyRS-068", "konsolidierung": "Kandidat: SwRS-055", "pruefidee": "Anzahl der Operationen je Teildatei ermitteln und gegen die Migrationsplanung stellen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-055", @@ -2613,7 +2760,8 @@ "tracelinks": "SyRS-068, SyRS-069", "konsolidierung": "Kandidat: SyRS-068 — Ziel ist die vollständige Ablösung der Altschnittstelle.", "pruefidee": "Neuen Endpunkt anlegen → Route in Kebab-Schreibweise, Antwort im Ressourcenformat, Fehler über den globalen Filter.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-056", @@ -2631,7 +2779,8 @@ "tracelinks": "SyRS-069, SyRS-025", "konsolidierung": "nein", "pruefidee": "Beleg über dem Kreditlimit speichern → das Ergebnis enthält die gesetzte Flagge, unabhängig von der Meldungssprache.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-027", @@ -2648,7 +2797,8 @@ "tracelinks": "SyRS-039, StRS-026", "konsolidierung": "nein", "pruefidee": "Benutzerdefinierte Schnittstelle mit veränderter Spaltenreihenfolge anlegen → die Exportdatei folgt der Konfiguration ohne Codeänderung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-028", @@ -2666,7 +2816,8 @@ "tracelinks": "SyRS-043, StRS-027", "konsolidierung": "Kandidat: SyRS-043", "pruefidee": "Aufwand für die Unterstützung einer neuen Standardversion abschätzen: Anzahl der zu ändernden Stellen in der Eigenimplementierung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-029", @@ -2683,7 +2834,8 @@ "tracelinks": "SyRS-044, StRS-028", "konsolidierung": "nein", "pruefidee": "Mahnlauf ohne Einzelmahnungserzeugung starten (Vorschau) → Einzelmahnungslogik wird nicht ausgeführt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-030", @@ -2701,7 +2853,8 @@ "tracelinks": "SyRS-045, StRS-029", "konsolidierung": "nein", "pruefidee": "`IFinApiClient` durch eine Attrappe ersetzen → die Fachlogik ist ohne Netzzugriff testbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-031", @@ -2719,7 +2872,8 @@ "tracelinks": "SyRS-046, StRS-030", "konsolidierung": "nein", "pruefidee": "Schema mit abgelaufener Gültigkeit → neue Belege verwenden es nicht mehr.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-032", @@ -2737,7 +2891,8 @@ "tracelinks": "SyRS-026, SyRS-047, StRS-031", "konsolidierung": "Kandidat: StRS-031 — der Vorrang der Preisquellen ist nicht an einer Stelle deklariert.", "pruefidee": "Für einen Artikel alle Preisquellen belegen und die resultierende Positionspreisermittlung gegen die erwartete Vorrangregel prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-033", @@ -2754,7 +2909,8 @@ "tracelinks": "SyRS-048, StRS-032", "konsolidierung": "nein", "pruefidee": "Katalogdienst liefert ungültige Daten → es wird der jeweilige Ausnahmetyp geworfen, nicht eine allgemeine Ausnahme.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-034", @@ -2771,7 +2927,8 @@ "tracelinks": "SyRS-049, StRS-033", "konsolidierung": "Kandidat: SyRS-049", "pruefidee": "Dritten Versanddienstleister ergänzen und den Änderungsumfang in der Fachlogik messen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-035", @@ -2788,7 +2945,8 @@ "tracelinks": "SyRS-050, StRS-034", "konsolidierung": "nein", "pruefidee": "RMA-Ablauf ändern → keine Änderung an `AutomaticallyCloseReceiptHelperBL` erforderlich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-036", @@ -2806,7 +2964,8 @@ "tracelinks": "SyRS-051, StRS-035", "konsolidierung": "Kandidat: StRS-035", "pruefidee": "Auswertung \"Aufwand je Vorhaben\" erstellen → sie muss derzeit über mehrere Modelle vereinigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-037", @@ -2824,7 +2983,8 @@ "tracelinks": "SyRS-052, StRS-036", "konsolidierung": "nein", "pruefidee": "Neuen Beleg speichern → das Verzeichnis trägt die endgültige Belegnummer im Namen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-038", @@ -2842,7 +3002,8 @@ "tracelinks": "SyRS-053, StRS-037", "konsolidierung": "nein", "pruefidee": "Neuen PDF-Erzeuger registrieren → bestehende Berichtsdefinitionen bleiben unverändert nutzbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-039", @@ -2859,7 +3020,8 @@ "tracelinks": "SyRS-054, StRS-038", "konsolidierung": "Kandidat: SwRS-039 selbst — `TapiBL` liegt unter `Accounts/`, `PhoneCallBL` unter `Tapi/`; die Ablage folgt keiner einheitlichen Domänenzuordnung.", "pruefidee": "Rufnummernformat ändern → nur die Zuordnungskomponente ist betroffen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-040", @@ -2878,7 +3040,8 @@ "tracelinks": "SyRS-055, StRS-039", "konsolidierung": "Kandidat: SyRS-055", "pruefidee": "Alle Zeichenfolgenliterale in `Centron.BL` erfassen, die als Benutzermeldung dienen; ihre Anzahl ist das Migrationsvolumen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-041", @@ -2896,7 +3059,8 @@ "tracelinks": "SyRS-056, StRS-040", "konsolidierung": "Kandidat: StRS-040", "pruefidee": "Abfrage \"alle Änderungen an Objekt X\" erstellen → sie muss derzeit mehrere Tabellen vereinigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-042", @@ -2914,7 +3078,8 @@ "tracelinks": "SyRS-057, SyRS-070, StRS-041", "konsolidierung": "nein", "pruefidee": "Fachliche Änderung im Kern → alle drei Betriebsformen zeigen sie ohne weitere Anpassung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-043", @@ -2932,7 +3097,8 @@ "tracelinks": "SyRS-059, StRS-042", "konsolidierung": "nein", "pruefidee": "Neue Skriptmethode ohne Eintrag in `ScriptMethodsCollection` anlegen → sie wird nicht ausgeführt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-048", @@ -2949,7 +3115,8 @@ "tracelinks": "SyRS-060, SyRS-072", "konsolidierung": "nein", "pruefidee": "Vorbereitungsschritt künstlich verlangsamen → der Test bleibt grün, da nur `Measure()` gemessen wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-049", @@ -2966,7 +3133,8 @@ "tracelinks": "SyRS-061, SyRS-062, SyRS-071", "konsolidierung": "Kandidat: SwRS-052 — Portal und Web-Service verwenden getrennte Konfigurationsmodelle (`appsettings.json` bzw. `WebServiceConfig`).", "pruefidee": "Erscheinungsbild und Uploadgrenzen ändern und Portal neu starten → die Änderungen wirken ohne neuen Bau.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-050", @@ -2984,7 +3152,8 @@ "tracelinks": "SyRS-063", "konsolidierung": "Kandidat: SyRS-063", "pruefidee": "Protokolle aller Hosts zusammenführen → die Spaltenstruktur muss vereinheitlicht werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-051", @@ -3002,7 +3171,8 @@ "tracelinks": "SyRS-064, SyRS-057", "konsolidierung": "nein", "pruefidee": "Aufgabe wirft eine Ausnahme → nachfolgende Aufgaben laufen mit eigener Sitzung weiter.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-052", @@ -3020,7 +3190,8 @@ "tracelinks": "SyRS-065, SyRS-066", "konsolidierung": "Kandidat: SwRS-049", "pruefidee": "Netzendpunkt ändern → prüfen, an wie vielen Orten die Änderung nachzuziehen ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-053", @@ -3037,7 +3208,8 @@ "tracelinks": "SyRS-067", "konsolidierung": "nein", "pruefidee": "Erzeugten Stand prüfen → die Versionsangabe eines Entwicklungsstands beginnt mit \"Dev-Build\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-057", @@ -3056,7 +3228,8 @@ "tracelinks": "SyRS-072, SyRS-060", "konsolidierung": "nein", "pruefidee": "Anteil der Geschäftslogikklassen mit Komponententests ermitteln; in der Zielarchitektur soll er deutlich steigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-064", @@ -3074,7 +3247,8 @@ "tracelinks": "SyRS-072", "konsolidierung": "nein", "pruefidee": "Datei ohne Byte-Reihenfolge-Markierung einreichen → der Kodierungstest schlägt fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-065", @@ -3093,7 +3267,8 @@ "tracelinks": "SyRS-023, SwRS-003", "konsolidierung": "Kandidat: SwRS-060 — direkter SQL-Zugriff ist ein Umgehungsweg, der einzeln zu bewerten ist.", "pruefidee": "Abbildungsprüfung ausführen → jede Entität besitzt eine gültige, gegen das Schema auflösbare Abbildung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-066", @@ -3110,7 +3285,8 @@ "tracelinks": "SyRS-004, SyRS-005, StRS-002, StRS-003", "konsolidierung": "nein", "pruefidee": "Typ registrieren, der die Schnittstelle nicht implementiert → beim Start erscheint die Registrierungsfehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-067", @@ -3127,7 +3303,8 @@ "tracelinks": "StRS-002, StRS-003", "konsolidierung": "nein", "pruefidee": "Für jeden gekennzeichneten Bereich eine Übernahmeentscheidung dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-070", @@ -3144,7 +3321,8 @@ "tracelinks": "SyRS-033, SwRS-015", "konsolidierung": "Kandidat: SwRS-015", "pruefidee": "Alle Schreibzugriffe auf `BarCode`/`BarcodeToPosition` ermitteln; sind sie leer, ist die Ablösung bestätigt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-071", @@ -3161,7 +3339,8 @@ "tracelinks": "SyRS-032, StRS-017", "konsolidierung": "Kandidat: SwRS-014", "pruefidee": "Aufrufer beider Klassen erfassen; wird `InventoryBL` nur noch für Hilfsfunktionen genutzt, ist die Hypothese bestätigt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-072", @@ -3178,7 +3357,8 @@ "tracelinks": "SyRS-014, StRS-004", "konsolidierung": "nein", "pruefidee": "Tabellen mit einer Spalte `MandantI3D` zählen und prüfen, ob Leseabfragen durchgängig danach filtern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-073", @@ -3195,7 +3375,8 @@ "tracelinks": "SyRS-004, SyRS-009, SwRS-046", "konsolidierung": "nein", "pruefidee": "Zwei Instanzen gegen eine Datenbank starten, Lizenzanzahl 1, gleichzeitig anmelden → wird die Grenze überschritten, ist die Lücke bestätigt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-074", @@ -3212,6 +3393,7 @@ "tracelinks": "SyRS-066", "konsolidierung": "nein", "pruefidee": "Konfigurationsdatei einer Testinstallation prüfen: Welches der beiden Felder ist gefüllt, und mit welchem Verfahren wurde es erzeugt?", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195917_v3.6.0-26d8/_meta/anforderungen.md b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195917_v3.6.0-26d8/_meta/anforderungen.md index 28e36c58..c8a3f5ff 100644 --- a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195917_v3.6.0-26d8/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195917_v3.6.0-26d8/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 3,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 182 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (51 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 182 von 182 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195918_v3.6.0-f63e/Protokoll.md b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195918_v3.6.0-f63e/Protokoll.md index 168c8ba7..54238c0d 100644 --- a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195918_v3.6.0-f63e/Protokoll.md +++ b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195918_v3.6.0-f63e/Protokoll.md @@ -95,6 +95,8 @@ Ohne Subagenten sind Haupt- und Gesamtwerte für `claude-opus-5` identisch. Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -131,6 +133,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 4 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 108 (99,1 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -148,6 +154,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (46 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 109 von 109 mit Tracelinks (100,0 %) | ## Opus-Solo-Block (K–O), fünf Messpunkte diff --git a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195918_v3.6.0-f63e/_meta/anforderungen.json b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195918_v3.6.0-f63e/_meta/anforderungen.json index 6fdfa7da..9e7ab43e 100644 --- a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195918_v3.6.0-f63e/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195918_v3.6.0-f63e/_meta/anforderungen.json @@ -16,7 +16,8 @@ "tracelinks": "SyRS-14, SyRS-21, SwRS-14", "konsolidierung": "Kandidat: StRS-02 (Filialbeschränkung ist zugleich ein Berechtigungskonzept; im Zielsystem sollte", "pruefidee": "Zwei Filialen anlegen, in jeder eine Rechnung erzeugen; die vergebenen Rechnungsnummern müssen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-02", @@ -35,7 +36,8 @@ "tracelinks": "SyRS-09, SyRS-10, SyRS-20, SwRS-09", "konsolidierung": "Kandidat: StRS-03 (Rechte und Lizenzen wirken in `ModuleRegistration.cs` als UND-Verknüpfung auf", "pruefidee": "Einem Benutzer das Recht `ADD_NEW_HELPDESK` entziehen; ein Anlageversuch über UI *und* über die", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-03", @@ -54,7 +56,8 @@ "tracelinks": "SyRS-07, SyRS-09, SwRS-11", "konsolidierung": "Kandidat: StRS-02 (siehe dort).", "pruefidee": "Lizenzanzahl für `ServiceBoard` auf 1 setzen; ein zweiter gleichzeitiger Login eines anderen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-04", @@ -73,7 +76,8 @@ "tracelinks": "SyRS-11, SyRS-15, SyRS-16, SwRS-16, SwRS-17", "konsolidierung": "nein", "pruefidee": "Angebot anlegen → in Auftrag überführen → Lieferschein → Rechnung; anschließend am Auftrag die", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-05", @@ -91,7 +95,8 @@ "tracelinks": "SyRS-12, SwRS-16", "konsolidierung": "nein", "pruefidee": "Rechnung stornieren, anschließend \"als bezahlt markieren\" aufrufen; der Aufruf muss mit der oben", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-06", @@ -110,7 +115,8 @@ "tracelinks": "SyRS-32, SyRS-33, SwRS-21", "konsolidierung": "Kandidat: StRS-10 (Vertragsabrechnung, Pauschalabrechnung und vereinfachte Ticketabrechnung erzeugen", "pruefidee": "Vertrag mit Intervall \"Quartal(e)\", Dauer 1, vorschüssig anlegen; die automatische Abrechnung muss", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-07", @@ -129,7 +135,8 @@ "tracelinks": "SyRS-32, SwRS-21", "konsolidierung": "nein", "pruefidee": "Vertrag mit Monatskontingent 10 Stunden, `RestTake = true`, Verbrauch 6 Stunden in Periode 1:", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-08", @@ -148,7 +155,8 @@ "tracelinks": "SyRS-27, SyRS-28, SyRS-29, SyRS-30, SwRS-19", "konsolidierung": "nein", "pruefidee": "Ticket anlegen, Status ändern, weiterleiten, schließen; die Ticket-Historie muss für jede dieser", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-09", @@ -167,7 +175,8 @@ "tracelinks": "SyRS-31, SwRS-20", "konsolidierung": "Kandidat: StRS-10", "pruefidee": "Zeit erfassen, in eine Rechnung überführen, anschließend die Zeit löschen wollen — der Löschversuch", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-10", @@ -185,7 +194,8 @@ "tracelinks": "SyRS-32, SyRS-33, SwRS-21", "konsolidierung": "Kandidat: StRS-06, StRS-09 — die fünf Abrechnungsmodule bilden dieselbe fachliche Grundfunktion", "pruefidee": "Denselben Kunden über Vertragsabrechnung und über vereinfachte Ticketabrechnung abrechnen; beide", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-11", @@ -204,7 +214,8 @@ "tracelinks": "SyRS-01, SyRS-20, SyRS-35, SwRS-10, SwRS-24", "konsolidierung": "Kandidat: StRS-02 — es existieren zwei getrennte Rechtekataloge (`UserRightsConst` für Mitarbeiter,", "pruefidee": "Mit einem Web-Account anmelden, der nur `WEBRIGHT_EDITONLYOWNREQUESTS` besitzt: Der Zugriff auf ein", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-12", @@ -223,7 +234,8 @@ "tracelinks": "SyRS-34, SwRS-18", "konsolidierung": "nein", "pruefidee": "Warenkorb im Zustand `Created` direkt freigeben wollen (ohne `ReadyForCheck`): Der Aufruf muss mit", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-13", @@ -242,7 +254,8 @@ "tracelinks": "SyRS-26, SwRS-22", "konsolidierung": "nein", "pruefidee": "Kunde mit `ExportZUGFeRDDocument = true` und gepflegter Leitweg-ID: Der Rechnungsversand muss ein", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-14", @@ -261,7 +274,8 @@ "tracelinks": "SyRS-26, SwRS-22", "konsolidierung": "nein", "pruefidee": "Rechnung exportieren, Export wiederholen: Der zweite Lauf darf die Rechnung nicht erneut in die", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-15", @@ -280,7 +294,8 @@ "tracelinks": "SyRS-22, SwRS-15", "konsolidierung": "nein", "pruefidee": "Kunde auf Mahnstufe 3 setzen, Sperrschwelle auf 2 konfigurieren; ein neuer Auftrag für diesen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-16", @@ -299,7 +314,8 @@ "tracelinks": "SyRS-11, SwRS-05", "konsolidierung": "nein", "pruefidee": "Lieferschein mit Menge 5 buchen; der Lagerbestand des Artikels muss anschließend um genau 5", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-17", @@ -318,7 +334,8 @@ "tracelinks": "SyRS-11, SyRS-20, SwRS-17", "konsolidierung": "Kandidat: StRS-04 — Kunden- und Lieferantenbelege teilen die Basisklasse `ReceiptBase`, sind aber in", "pruefidee": "Zwei Lieferantenrechnungen mit identischer externer Rechnungsnummer desselben Lieferanten erfassen;", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-18", @@ -336,7 +353,8 @@ "tracelinks": "SyRS-20, SwRS-15", "konsolidierung": "nein", "pruefidee": "`InvoiceAutoProvisionIsActive = true`, Prozentsatz 3, Mitarbeiter X; eine neue Rechnung über 1.000 €", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-19", @@ -355,7 +373,8 @@ "tracelinks": "SyRS-10, SwRS-09", "konsolidierung": "nein", "pruefidee": "Benutzer mit `RIGHT_MITARBEITERAUSLASTUNGNUREIGENEFILIALE` öffnet die Mitarbeiterauslastung; es", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-20", @@ -374,7 +393,8 @@ "tracelinks": "SyRS-45, SwRS-07", "konsolidierung": "nein", "pruefidee": "Löschanfrage für einen Ansprechpartner ausführen; danach müssen Name und Kontaktdaten durch den", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-21", @@ -393,7 +413,8 @@ "tracelinks": "SyRS-29, SyRS-37, SwRS-07", "konsolidierung": "Kandidat: die vier parallelen Historienmechanismen (`ChangeLog`, `ReceiptLog`,", "pruefidee": "Fälligkeitsdatum eines Tickets ändern; die Ticket-Historie muss einen Eintrag \"Fälligkeitsdatum", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-22", @@ -412,7 +433,8 @@ "tracelinks": "SyRS-46, SwRS-24", "konsolidierung": "nein", "pruefidee": "Angebot per C-Sign versenden; nach kundenseitiger Unterzeichnung muss der Web-Beleg-Status auf", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-23", @@ -431,7 +453,8 @@ "tracelinks": "SyRS-47, SwRS-27", "konsolidierung": "nein", "pruefidee": "ITscope-API-Key hinterlegen und `IsITscopeArticleSearchActive` aktivieren; die Artikelsuche im", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-24", @@ -450,7 +473,8 @@ "tracelinks": "SyRS-01, SyRS-02, SyRS-04, SwRS-12, SwRS-13", "konsolidierung": "nein", "pruefidee": "`SystemAuthenticationMethod = OpenIdConnect` setzen und für einen Benutzer keine verknüpfte", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-25", @@ -469,7 +493,8 @@ "tracelinks": "SyRS-38, SwRS-29", "konsolidierung": "Kandidat: Es existieren mindestens zwei getrennte Ressourcenkataloge (WPF-Client und Nexus) mit", "pruefidee": "Anwendung mit englischer Kultur starten; alle in `LocalizedStrings.en.resx` gepflegten Texte müssen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-26", @@ -488,7 +513,8 @@ "tracelinks": "SyRS-13, SyRS-15, SwRS-14", "konsolidierung": "nein", "pruefidee": "RMA-Vorgang anlegen: Es müssen drei getrennte Nummern (Reparatureingang, RMA, Rückversand) aus den", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-01", @@ -506,7 +532,8 @@ "tracelinks": "StRS-24 → SyRS-01 → SwRS-12, SwRS-13", "konsolidierung": "nein", "pruefidee": "Anmeldung mit korrektem Benutzernamen und falschem Passwort sowie mit unbekanntem Benutzernamen:", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-02", @@ -525,7 +552,8 @@ "tracelinks": "StRS-24 → SyRS-02 → SwRS-12", "konsolidierung": "nein", "pruefidee": "`SystemAuthenticationMethod = ActiveDirectory` setzen, AD in der Web-Service-Konfiguration", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-03", @@ -543,7 +571,8 @@ "tracelinks": "StRS-24 → SyRS-03 → SwRS-13", "konsolidierung": "nein", "pruefidee": "Für ein Konto `AccountDisabledFromDate = gestern` ohne `ToDate` setzen; die Anmeldung muss mit", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-04", @@ -561,7 +590,8 @@ "tracelinks": "StRS-24 → SyRS-04 → SwRS-12", "konsolidierung": "nein", "pruefidee": "Benutzer mit aktivem E-Mail-Zweitfaktor anmelden und den Code nicht bestätigen: Es darf kein", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-05", @@ -579,7 +609,8 @@ "tracelinks": "StRS-24 → SyRS-05 → SwRS-13", "konsolidierung": "nein", "pruefidee": "Ticket einer `Default`-Anwendung erzeugen, Systemzeit um 31 Minuten vorstellen, geschützte Methode", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-06", @@ -596,7 +627,8 @@ "tracelinks": "StRS-24 → SyRS-06 → SwRS-13", "konsolidierung": "nein", "pruefidee": "Zwei Aufrufe im Abstand von 4 Minuten absetzen; das gespeicherte `ExpiryDate` darf sich nach dem", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-07", @@ -615,7 +647,8 @@ "tracelinks": "StRS-03 → SyRS-07 → SwRS-11", "konsolidierung": "nein", "pruefidee": "Lizenzanzahl auf 1 setzen und von zwei verschiedenen Maschinen mit demselben Benutzer anmelden:", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-08", @@ -632,7 +665,8 @@ "tracelinks": "StRS-02, StRS-03 → SyRS-08 → SwRS-11", "konsolidierung": "nein", "pruefidee": "Benutzer mit `RIGHT_DISALLOW_SERVICEBOARD_LOGIN` versucht die Anmeldung am ServiceBoard: Sie muss", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-09", @@ -651,7 +685,8 @@ "tracelinks": "StRS-02, StRS-03 → SyRS-09 → SwRS-30, SwRS-31", "konsolidierung": "nein", "pruefidee": "Recht für \"Rechteverwaltung\" entziehen: Das Modul darf nach Neustart nicht mehr registriert sein;", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-10", @@ -670,7 +705,8 @@ "tracelinks": "StRS-01, StRS-02, StRS-19 → SyRS-10 → SwRS-09", "konsolidierung": "Kandidat: SyRS-21 — Filialbeschränkung ist in Helpdesk, Belegwesen und Auswertungen jeweils", "pruefidee": "Benutzer mit `SHOW_HELPDESK_ONLY_OWN_BRANCH` ruft ein Ticket einer fremden Filiale direkt über die", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-11", @@ -689,7 +725,8 @@ "tracelinks": "StRS-04, StRS-16, StRS-17 → SyRS-11 → SwRS-17", "konsolidierung": "nein", "pruefidee": "Ein Dokument an ein Ticket und an eine Rechnung hängen; beide Zuordnungen müssen in derselben", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-12", @@ -707,7 +744,8 @@ "tracelinks": "StRS-05 → SyRS-12 → SwRS-16", "konsolidierung": "nein", "pruefidee": "Wie StRS-05.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-13", @@ -725,7 +763,8 @@ "tracelinks": "StRS-04, StRS-26 → SyRS-13 → SwRS-14", "konsolidierung": "nein", "pruefidee": "Zwei parallele Anlagen desselben Belegtyps auslösen; beide müssen unterschiedliche, aufeinander", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-14", @@ -743,7 +782,8 @@ "tracelinks": "StRS-01 → SyRS-14 → SwRS-14", "konsolidierung": "nein", "pruefidee": "Zwei Filialen mit disjunkten Nummernbereichen konfigurieren; je ein Ticket pro Filiale anlegen und", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-15", @@ -761,7 +801,8 @@ "tracelinks": "StRS-04, StRS-26 → SyRS-15 → SwRS-17", "konsolidierung": "nein", "pruefidee": "Auftrag mit 10 Stück in zwei Teillieferscheine à 5 Stück überführen; ein dritter Lieferschein darf", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-16", @@ -779,7 +820,8 @@ "tracelinks": "StRS-04 → SyRS-16 → SwRS-17", "konsolidierung": "nein", "pruefidee": "Anzahlungsrechnung zu einem Auftrag erzeugen und anschließend die Belegprogression des Auftrags", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-17", @@ -796,7 +838,8 @@ "tracelinks": "StRS-04, StRS-21 → SyRS-17 → SwRS-16", "konsolidierung": "nein", "pruefidee": "Angebot in Version 3 bringen, in einen Auftrag überführen, anschließend eine neue Version aus", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-18", @@ -814,7 +857,8 @@ "tracelinks": "StRS-04, StRS-21 → SyRS-18 → SwRS-16", "konsolidierung": "nein", "pruefidee": "Beleg in zwei Sitzungen laden, in Sitzung A speichern, danach in Sitzung B speichern: Der zweite", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-19", @@ -832,7 +876,8 @@ "tracelinks": "StRS-04 → SyRS-19 → SwRS-16", "konsolidierung": "Kandidat: SyRS-18 — es existieren zwei parallele Nebenläufigkeitsmechanismen (Sperre und", "pruefidee": "Beleg in Sitzung A zur Bearbeitung öffnen; Sitzung B muss beim Öffnen die Sperrmeldung erhalten und", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-20", @@ -851,7 +896,8 @@ "tracelinks": "StRS-02, StRS-11, StRS-17, StRS-18 → SyRS-20 → SwRS-15", "konsolidierung": "nein", "pruefidee": "Benutzer mit `SHOW_INVOICES`, aber ohne `EDIT_INVOICE`: Anzeige muss gelingen, jede Änderung mit", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-21", @@ -869,7 +915,8 @@ "tracelinks": "StRS-01, StRS-02 → SyRS-21 → SwRS-15", "konsolidierung": "Kandidat: SyRS-10", "pruefidee": "Benutzer der Filiale 2 mit `EDIT_INVOICE_ONLY_OWN_BRANCH` bearbeitet eine Rechnung der Filiale 1:", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-22", @@ -887,7 +934,8 @@ "tracelinks": "StRS-15 → SyRS-22 → SwRS-15", "konsolidierung": "nein", "pruefidee": "Sperrschwelle für \"Auftrag\" auf 2 setzen, Kunde auf Mahnstufe 2: Auftragsanlage muss scheitern,", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-23", @@ -905,7 +953,8 @@ "tracelinks": "StRS-04 → SyRS-23 → SwRS-08, SwRS-15", "konsolidierung": "nein", "pruefidee": "`ReceiptUserStateRequiredInInvoices = true` setzen und eine Rechnung ohne Belegstatus speichern:", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-24", @@ -923,7 +972,8 @@ "tracelinks": "StRS-04, StRS-13 → SyRS-24 → SwRS-15", "konsolidierung": "nein", "pruefidee": "Kunde ohne Steuernummer und ohne USt-IdNr.; die Erstellung eines Belegs der prüfpflichtigen Art", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-25", @@ -941,7 +991,8 @@ "tracelinks": "StRS-04, StRS-13 → SyRS-25 → SwRS-22", "konsolidierung": "nein", "pruefidee": "Standardreport der Reportgruppe \"Rechnung\" entfernen und eine Rechnung drucken wollen: Der Aufruf", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-26", @@ -960,7 +1011,8 @@ "tracelinks": "StRS-13, StRS-14 → SyRS-26 → SwRS-22", "konsolidierung": "nein", "pruefidee": "Kunde einer Firmengruppe zuordnen, Leitweg-ID nur an der Firmengruppe pflegen: Die Rechnung muss", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-27", @@ -979,7 +1031,8 @@ "tracelinks": "StRS-08 → SyRS-27 → SwRS-19", "konsolidierung": "nein", "pruefidee": "Neuen Ticketstatus anlegen und als \"geschlossen\"-Status konfigurieren; das Schließen eines Tickets", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-28", @@ -998,7 +1051,8 @@ "tracelinks": "StRS-08, StRS-21 → SyRS-28 → SwRS-19", "konsolidierung": "nein", "pruefidee": "Benutzer ohne `CLOSE_REQUEST` setzt den Abschlussstatus: Der Speichervorgang muss mit", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-29", @@ -1015,7 +1069,8 @@ "tracelinks": "StRS-08, StRS-21 → SyRS-29 → SwRS-19", "konsolidierung": "Kandidat: SyRS-37 — die Ticket-Historie ist ein eigener Mechanismus neben `ChangeLog`.", "pruefidee": "Ticketstatus ändern und speichern; anschließend muss genau ein neuer Historieneintrag mit altem und", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-30", @@ -1034,7 +1089,8 @@ "tracelinks": "StRS-08 → SyRS-30 → SwRS-19", "konsolidierung": "nein", "pruefidee": "Ticket auf Eskalationsstufe 2 bringen, Fälligkeitsdatum um eine Woche verschieben: `EscalationLevel`", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-31", @@ -1052,7 +1108,8 @@ "tracelinks": "StRS-09 → SyRS-31 → SwRS-20", "konsolidierung": "nein", "pruefidee": "Zeit erfassen, in einen Auftrag übernehmen, Zeit löschen wollen: Der Versuch muss mit der", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-32", @@ -1071,7 +1128,8 @@ "tracelinks": "StRS-06, StRS-07, StRS-10 → SyRS-32 → SwRS-21", "konsolidierung": "nein", "pruefidee": "Vertrag mit Jahresintervall (Dauer 1) und Monatskontingent (`DifferContingentIntervalDuration = 1`):", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-33", @@ -1088,7 +1146,8 @@ "tracelinks": "StRS-06, StRS-10 → SyRS-33 → SwRS-21", "konsolidierung": "nein", "pruefidee": "Zwei sonst identische Verträge, einer vorschüssig, einer nachschüssig: Die am selben Stichtag", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-34", @@ -1107,7 +1166,8 @@ "tracelinks": "StRS-12 → SyRS-34 → SwRS-18", "konsolidierung": "nein", "pruefidee": "Warenkorb `ReadyForCheck` durch einen Web-Account ohne `WEBRIGHT_WEBCART2_CHECK_CART` freigeben", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-35", @@ -1126,7 +1186,8 @@ "tracelinks": "StRS-11, StRS-24 → SyRS-35 → SwRS-24", "konsolidierung": "nein", "pruefidee": "Kundenportal auf Port 8443 konfigurieren; eine interne ServiceBoard-Seite über Port 8443 aufrufen:", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-36", @@ -1144,7 +1205,8 @@ "tracelinks": "StRS-11 → SyRS-36 → SwRS-24", "konsolidierung": "nein", "pruefidee": "Datei mit 30 MB über das Kundenportal hochladen: Der Upload muss abgewiesen werden; dieselbe Datei", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-37", @@ -1162,7 +1224,8 @@ "tracelinks": "StRS-21 → SyRS-37 → SwRS-07", "konsolidierung": "Kandidat: SyRS-29 und die Mechanismen `ReceiptLog` / `ReceiptHistoryEntry` bilden dieselbe", "pruefidee": "Ein protokolliertes Feld auf einen Wert mit mehr als 255 Zeichen setzen: Das Protokoll darf keinen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-38", @@ -1181,7 +1244,8 @@ "tracelinks": "StRS-25 → SyRS-38 → SwRS-29", "konsolidierung": "Kandidat: getrennte Ressourcenbestände in WPF-Client und Nexus.", "pruefidee": "Anwendung mit `en-US` starten; Stichprobe von 20 Dialogtexten muss vollständig englisch sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-39", @@ -1200,7 +1264,8 @@ "tracelinks": "StRS-02 → SyRS-39 → SwRS-23", "konsolidierung": "nein", "pruefidee": "Update zweimal hintereinander auf derselben Datenbank ausführen: Der zweite Lauf darf keine", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-40", @@ -1218,7 +1283,8 @@ "tracelinks": "StRS-21 → SyRS-40 → SwRS-26", "konsolidierung": "nein", "pruefidee": "Eine Einzelaufgabe des Dienstes künstlich fehlschlagen lassen: Der Dienst muss den Fehler mit", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-41", @@ -1236,7 +1302,8 @@ "tracelinks": "StRS-21 → SyRS-41 → SwRS-26", "konsolidierung": "Kandidat: zwei getrennte Protokollkonfigurationen mit abweichenden Stufen und Aufbewahrungsfristen.", "pruefidee": "Über 15 Tage hinweg täglich Warnungen erzeugen: Es dürfen nie mehr als 15 Archivdateien im", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-42", @@ -1255,7 +1322,8 @@ "tracelinks": "StRS-11, StRS-25 → SyRS-42 → SwRS-28", "konsolidierung": "nein", "pruefidee": "Container starten und einen Beleg-PDF-Report erzeugen: Umlaute und deutsche Datumsformate müssen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-43", @@ -1274,7 +1342,8 @@ "tracelinks": "StRS-02 → SyRS-43 → SwRS-33", "konsolidierung": "nein", "pruefidee": "Einen Test absichtlich fehlschlagen lassen: Die Build-Pipeline muss abbrechen und keine Artefakte", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-44", @@ -1292,7 +1361,8 @@ "tracelinks": "StRS-24 → SyRS-44 → SwRS-13", "konsolidierung": "nein", "pruefidee": "Zwei Benutzer mit identischem Passwort anlegen; die gespeicherten Werte in `Sichbenu.Password`", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-45", @@ -1311,7 +1381,8 @@ "tracelinks": "StRS-20 → SyRS-45 → SwRS-07", "konsolidierung": "Kandidat: Der Code enthält mehrere auskommentierte Löschpfade (`DoDeleteCustomer`,", "pruefidee": "Löschanfrage für einen Ansprechpartner ausführen, der auf einem Ticket und einer Rechnung", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-46", @@ -1331,7 +1402,8 @@ "tracelinks": "StRS-22 → SyRS-46 → SwRS-24", "konsolidierung": "nein", "pruefidee": "Angebot per C-Sign versenden, kundenseitig \"mit Änderungswunsch annehmen\": Der Belegzustand muss", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-47", @@ -1349,7 +1421,8 @@ "tracelinks": "StRS-23 → SyRS-47 → SwRS-27", "konsolidierung": "nein", "pruefidee": "Lizenz für eine Anbindung entfernen: Die zugehörige Einstellungsseite darf nach Neustart nicht", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-01", @@ -1368,7 +1441,8 @@ "tracelinks": "SyRS-11 → SwRS-01", "konsolidierung": "nein", "pruefidee": "Statische Prüfung: Kein Typ aus `Centron.Data.Entities.*` darf in `Centron.WPF.UI` oder", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-02", @@ -1387,7 +1461,8 @@ "tracelinks": "SyRS-09 → SwRS-02", "konsolidierung": "Kandidat: Für ein Web-/SaaS-Zielsystem entfällt der Zweck der Dualität; die BL-Variante ist dann", "pruefidee": "Zu jeder `I*Logic`-Schnittstelle in `Services/Logics` muss je genau eine `BL*Logic`- und eine", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-03", @@ -1406,7 +1481,8 @@ "tracelinks": "SyRS-20, SyRS-23 → SwRS-03", "konsolidierung": "nein", "pruefidee": "Jede öffentliche Methode einer `*BL`-Klasse, die fehlschlagen kann, muss `Result` bzw. `Result`", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-04", @@ -1424,7 +1500,8 @@ "tracelinks": "SyRS-20, SyRS-23 → SwRS-04", "konsolidierung": "nein", "pruefidee": "Eine hypothetische neue Belegart hinzufügen: Es darf keine Änderung an `ReceiptBL` erforderlich", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-05", @@ -1442,7 +1519,8 @@ "tracelinks": "SyRS-11, SyRS-37 → SwRS-05", "konsolidierung": "nein", "pruefidee": "Zu jeder Klasse unter `Centron.Entities/Entities` muss genau eine Mappingklasse unter", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-06", @@ -1461,7 +1539,8 @@ "tracelinks": "SyRS-11 → SwRS-06", "konsolidierung": "nein", "pruefidee": "Schemaprüfung: Jede Tabelle in `dbo` besitzt genau einen gruppierten Primärschlüssel auf `I3D`;", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-07", @@ -1480,7 +1559,8 @@ "tracelinks": "SyRS-37 → SwRS-07", "konsolidierung": "Kandidat: `DBEntity.State` (nullable int) und `IsDeleted` (bit) kodieren beide Aktiv-/Inaktiv-", "pruefidee": "Datensatz löschen und anschließend über die Datenbank prüfen: Die Zeile muss noch existieren und", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-08", @@ -1499,7 +1579,8 @@ "tracelinks": "SyRS-23 → SwRS-08", "konsolidierung": "Kandidat: `Stammdat` (`AppSettingsConst`) und `ApplicationSettings` (`ApplicationSettingID`)", "pruefidee": "Zu jedem Wert von `ApplicationSettingID` muss `GetApplicationSettingDescription` einen von `null`", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-09", @@ -1518,7 +1599,8 @@ "tracelinks": "SyRS-10, SyRS-20 → SwRS-09", "konsolidierung": "Kandidat: SwRS-10 — zwei getrennte Rechtekataloge für Mitarbeiter und Web-Accounts.", "pruefidee": "Statische Prüfung: In `Centron.BL`, `Centron.WPF.UI` und `CentronNexus` darf kein Rechtevergleich", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-10", @@ -1536,7 +1618,8 @@ "tracelinks": "SyRS-20, SyRS-34, SyRS-35 → SwRS-10", "konsolidierung": "Kandidat: SwRS-09 — im Zielsystem als ein Rechtemodell mit Nutzerklassen abzubilden.", "pruefidee": "Web-Account mit `WEBRIGHT_EDITALLREQUESTS` versucht eine Belegbearbeitung: Der Zugriff muss über", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-11", @@ -1554,7 +1637,8 @@ "tracelinks": "SyRS-07, SyRS-08 → SwRS-11", "konsolidierung": "nein", "pruefidee": "Neue Anwendung in `ApplicationKind` ergänzen und ohne weitere Änderung anmelden: Die Anmeldung muss", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-12", @@ -1573,7 +1657,8 @@ "tracelinks": "SyRS-01, SyRS-02, SyRS-04 → SwRS-12", "konsolidierung": "nein", "pruefidee": "Für jeden `AuthObject`-Untertyp muss `AuthenticatorFactory.GetMainAuthenticator` einen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-13", @@ -1592,7 +1677,8 @@ "tracelinks": "SyRS-05, SyRS-44 → SwRS-13", "konsolidierung": "nein", "pruefidee": "Zwei Tickets für dasselbe Gerät und denselben Benutzer nacheinander erzeugen (nach Löschen des", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-14", @@ -1610,7 +1696,8 @@ "tracelinks": "SyRS-13, SyRS-14 → SwRS-14", "konsolidierung": "nein", "pruefidee": "Für jeden Wert von `NumberGroupEnum` müssen `GetTableName()` und `GetFieldName()` nichtleere Werte", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-15", @@ -1628,7 +1715,8 @@ "tracelinks": "SyRS-20, SyRS-21, SyRS-22, SyRS-23, SyRS-24 → SwRS-15", "konsolidierung": "nein", "pruefidee": "Beleg mit zwei fehlenden Pflichtfeldern speichern: Das Ergebnis muss beide Felder benennen, nicht", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-16", @@ -1647,7 +1735,8 @@ "tracelinks": "SyRS-12, SyRS-17, SyRS-18, SyRS-19 → SwRS-16", "konsolidierung": "Kandidat: Die Kodierung von Vorlagen über negative Nummern ist eine implizite Konvention; im", "pruefidee": "Beleg mit `Number = -1` anlegen: `IsTemplate` muss `true` liefern und der Beleg darf nicht in", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-17", @@ -1666,7 +1755,8 @@ "tracelinks": "SyRS-11, SyRS-15, SyRS-16 → SwRS-17", "konsolidierung": "nein", "pruefidee": "Belegprogression für jede unterstützte Objektart aufrufen: Es darf in keinem Fall ein", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-18", @@ -1685,7 +1775,8 @@ "tracelinks": "SyRS-34 → SwRS-18", "konsolidierung": "nein", "pruefidee": "Für jeden der sechs Übergänge prüfen, dass bei fehlendem Recht weder `AngKopf.CartState` geändert", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-19", @@ -1704,7 +1795,8 @@ "tracelinks": "SyRS-27, SyRS-28, SyRS-29, SyRS-30 → SwRS-19", "konsolidierung": "nein", "pruefidee": "Ticket über das Kundenportal bei aktivierter Kundenfreigabe anlegen: Der Status muss `null`", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-20", @@ -1723,7 +1815,8 @@ "tracelinks": "SyRS-31 → SwRS-20", "konsolidierung": "nein", "pruefidee": "Zeit einem Auftrag zuordnen: `IsAssignedToOrder` und `IsAssignedToAsset` müssen `true` liefern,", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-21", @@ -1742,7 +1835,8 @@ "tracelinks": "SyRS-32, SyRS-33 → SwRS-21", "konsolidierung": "nein", "pruefidee": "Für jede Kombination aus `BillingIntervalKinds` und `DifferContingentInterval` einen Testfall", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-22", @@ -1762,7 +1856,8 @@ "tracelinks": "SyRS-25, SyRS-26 → SwRS-22", "konsolidierung": "nein", "pruefidee": "Erzeugte XML-Datei mit dem KOSIT-Validierungswerkzeug gegen das XRechnung-Schema prüfen: Es dürfen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-23", @@ -1781,7 +1876,8 @@ "tracelinks": "SyRS-39 → SwRS-23", "konsolidierung": "nein", "pruefidee": "Alle Skriptklassen laden und prüfen, dass jede Nummer genau einmal vorkommt und die", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-24", @@ -1800,7 +1896,8 @@ "tracelinks": "SyRS-35, SyRS-36 → SwRS-24", "konsolidierung": "nein", "pruefidee": "Neues Recht in `UserRightsConst` ergänzen und im Portal per `AuthorizeCombinedAttribute`", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-25", @@ -1819,7 +1916,8 @@ "tracelinks": "SyRS-05, SyRS-08 → SwRS-25", "konsolidierung": "Kandidat: Die 1279 Altmethoden und die v1-Controller decken teils dieselbe Fachfunktion ab", "pruefidee": "Jede Methode in `ICentronRestService` muss `[Authenticate]` tragen; Methoden ohne dieses Attribut", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-26", @@ -1838,7 +1936,8 @@ "tracelinks": "SyRS-40, SyRS-41 → SwRS-26", "konsolidierung": "Kandidat: NLog (Backend/WPF) und `Microsoft.Extensions.Logging` (Controller) bestehen parallel.", "pruefidee": "Stichprobe von 20 `*BL`-Klassen: Jede muss einen klassenbezogenen Logger deklarieren; keine", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-27", @@ -1856,7 +1955,8 @@ "tracelinks": "SyRS-26 → SwRS-27", "konsolidierung": "Kandidat: Konnektoren liegen teils unter `src/apis/`, teils in `Centron.BL/DataExchange`; im", "pruefidee": "Abhängigkeitsprüfung: Kein Projekt unter `src/apis/` darf `Centron.BL` referenzieren (nur die", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-28", @@ -1876,7 +1976,8 @@ "tracelinks": "SyRS-42, SyRS-43 → SwRS-28", "konsolidierung": "nein", "pruefidee": "`dotnet build Centron.sln` mit dem in `global.json` fixierten SDK muss ohne Warnungen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-29", @@ -1895,7 +1996,8 @@ "tracelinks": "SyRS-38 → SwRS-29", "konsolidierung": "Kandidat: getrennte Ressourcenbestände in Backend, WPF-Client und Nexus.", "pruefidee": "Statische Prüfung: Deutschsprachige Zeichenkettenliterale in `Centron.BL` sind zu listen; sie", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-30", @@ -1914,7 +2016,8 @@ "tracelinks": "SyRS-09 → SwRS-30", "konsolidierung": "nein", "pruefidee": "`GetRightsForModule` für jedes registrierte Modul aufrufen: Die zurückgegebene Rechteliste muss", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-31", @@ -1932,7 +2035,8 @@ "tracelinks": "SyRS-09 → SwRS-31", "konsolidierung": "nein", "pruefidee": "Für jeden Moduleintrag `GetRights()` aufrufen und mit einer manuellen Auswertung des", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-32", @@ -1951,7 +2055,8 @@ "tracelinks": "SyRS-11 → SwRS-32", "konsolidierung": "nein", "pruefidee": "Mapperkonfiguration validieren (`AssertConfigurationIsValid`-Äquivalent): Alle Zielfelder müssen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-33", @@ -1971,7 +2076,8 @@ "tracelinks": "SyRS-43 → SwRS-33", "konsolidierung": "nein", "pruefidee": "`dotnet test Centron.sln` gegen das Referenzdatenbankabbild ausführen: Alle Tests müssen ohne", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-34", @@ -1988,7 +2094,8 @@ "tracelinks": "SyRS-28, SyRS-43 → SwRS-34", "konsolidierung": "nein", "pruefidee": "DEBUG-Build starten und eine Ticketabschlussmail an eine externe Adresse auslösen: Der tatsächliche", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-35", @@ -2007,7 +2114,8 @@ "tracelinks": "SyRS-38 → SwRS-35", "konsolidierung": "nein", "pruefidee": "Alle `.cs`- und `.xaml`-Dateien auf BOM prüfen; Abweichungen sind zu listen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-36", @@ -2026,6 +2134,7 @@ "tracelinks": "SyRS-13, SyRS-15 → SwRS-36", "konsolidierung": "Kandidat: Vier parallele Datenzugriffswege (LINQ, generische DAO, benannte Abfragen, Rohzugriff)", "pruefidee": "Statische Prüfung: In `ExecuteQuery`/`ExecuteScalar…`-Aufrufen dürfen keine benutzergesteuerten", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195918_v3.6.0-f63e/_meta/anforderungen.md b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195918_v3.6.0-f63e/_meta/anforderungen.md index 895ab9d8..05f09810 100644 --- a/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195918_v3.6.0-f63e/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-opus-5/solo/high/01_Lauf_2026-08-25_195918_v3.6.0-f63e/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 4 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 108 (99,1 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (46 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 109 von 109 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_122905_v1.0.0-23e8/Protokoll.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_122905_v1.0.0-23e8/Protokoll.md index b03d083d..c5ccf750 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_122905_v1.0.0-23e8/Protokoll.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_122905_v1.0.0-23e8/Protokoll.md @@ -101,6 +101,8 @@ zurückgenommen; zum weiteren Weg der Codebasis siehe Anmerkung 9. Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -131,6 +133,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 96 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -148,6 +154,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (49 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 96 von 96 mit Tracelinks (100,0 %) | ## Anmerkungen/Auffälligkeiten diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_122905_v1.0.0-23e8/_meta/anforderungen.json b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_122905_v1.0.0-23e8/_meta/anforderungen.json index f79f99c6..d18422a4 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_122905_v1.0.0-23e8/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_122905_v1.0.0-23e8/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-001, SyRS-002", "konsolidierung": "nein", "pruefidee": "Ein Angebot mit n Positionen wird zu einem Auftrag weitergeführt; Kunde und Positionsdaten müssen identisch übernommen werden (Stichprobe über UI oder Integrationstest).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -33,7 +34,8 @@ "tracelinks": "SyRS-003, SyRS-004", "konsolidierung": "nein", "pruefidee": "Signaturprozess mit gültigem Token durchlaufen; danach Prüfen, dass `WebReceiptState` gesetzt ist und ein erneuter Aufruf desselben Tokens als \"bereits signiert\" abgelehnt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -51,7 +53,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "nein", "pruefidee": "Rechnung festschreiben, danach Änderungsversuch an Position/Kopf durchführen → muss abgelehnt werden; erneutes Festschreiben → muss abgelehnt werden (\"Die Rechnung ist festgeschrieben...\").", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -68,7 +71,8 @@ "tracelinks": "SyRS-006", "konsolidierung": "nein", "pruefidee": "Für Netto=100, Steuersatz=19 → Steuerbetrag=19.00, Brutto=119.00 (kaufmännisch gerundet); Test mit Rabatt und Fremdwährungsfaktor.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -85,7 +89,8 @@ "tracelinks": "SyRS-001, SyRS-002", "konsolidierung": "Kandidat: StRS-001 (Teil derselben Belegketten-Logik)", "pruefidee": "Beleg mit 2 Positionen anlegen, eine Position vollständig weiterverarbeiten (Beleg bleibt Active), zweite Position vollständig weiterverarbeiten (Beleg wechselt zu Completed).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -102,7 +107,8 @@ "tracelinks": "SyRS-007, SyRS-008", "konsolidierung": "nein", "pruefidee": "Ticket ohne Pflichtfeld anlegen → muss abgelehnt werden; Ticket mit allen Pflichtfeldern anlegen → muss erfolgreich sein und Historieneintrag erzeugen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -119,7 +125,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "Kandidat: StRS-018 (allgemeines Rechtesystem, hier domänenspezifische Ausprägung)", "pruefidee": "Benutzer mit `SHOW_HELPDESK_ONLY_OWN_BRANCH` darf Ticket anderer Filiale nicht in der Liste sehen (Integrationstest mit zwei Filialen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -135,7 +142,8 @@ "tracelinks": "SyRS-009", "konsolidierung": "nein", "pruefidee": "RMA ohne HelpdeskI3D anlegen → muss mit DependencyCheckFailed-Fehler abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -152,7 +160,8 @@ "tracelinks": "SyRS-007, SyRS-010", "konsolidierung": "nein", "pruefidee": "Zwei parallele Ausführungsversuche derselben fälligen Aufgabe → nur ein Ticket darf entstehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -168,7 +177,8 @@ "tracelinks": "SyRS-011", "konsolidierung": "nein", "pruefidee": "Benutzer ohne `CHANGE_ARTICLE_PRICE` versucht Preisänderung zu speichern → Preis bleibt auf altem DB-Wert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -185,7 +195,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Inventurposition mit abweichender Zählmenge anlegen → `CloseState` muss \"Risk\" oder \"problem\" ergeben, nicht \"Ok\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -202,7 +213,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "nein", "pruefidee": "Benutzer ohne `CREATE_PARTIAL_COMMISSION_FOR_ORDER` versucht Teilkommission anzulegen → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -218,7 +230,8 @@ "tracelinks": "SyRS-014", "konsolidierung": "nein", "pruefidee": "Artikel mit Mindestbestand 10, aktuellem Bestand 3, offenem Auftragsbedarf 5 → Vorschlagsmenge muss ≥ 12 ergeben (rechnerische Nachvollziehung, exakte Formel im Quellcode zu verifizieren).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -235,7 +248,8 @@ "tracelinks": "SyRS-015", "konsolidierung": "nein", "pruefidee": "EDI-Konfiguration mit Distributor \"EGIS\" → erzeugtes Dokument muss dem EGIS-spezifischen Format entsprechen (Format-Validierung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-015", @@ -251,7 +265,8 @@ "tracelinks": "SyRS-016, SyRS-017", "konsolidierung": "nein", "pruefidee": "Zwei identische Transaktionsimporte (gleiche IBAN/Datum/Betrag/Beschreibung) → zweiter Import muss als Duplikat markiert werden, nicht doppelt verbucht werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-016", @@ -267,7 +282,8 @@ "tracelinks": "SyRS-016", "konsolidierung": "Kandidat: StRS-015 (beide betreffen Zahlungsbuchung auf Rechnungen)", "pruefidee": "Benutzer ohne Recht versucht Zahlung zu löschen → Ablehnung mit definierter Fehlermeldung; Rechnungsbetrag bleibt unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-017", @@ -284,7 +300,8 @@ "tracelinks": "SyRS-018", "konsolidierung": "nein", "pruefidee": "Benutzer ohne `CAN_CHANGE_DATE`-Recht öffnet Timer-Billing-Einstellungen → Datumsfeld ist deaktiviert; direkter Web-Service-Aufruf mit geänderten Datum ohne Recht muss serverseitig abgelehnt werden (nicht nur UI-Test!).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-018", @@ -301,7 +318,8 @@ "tracelinks": "SyRS-019, SyRS-020", "konsolidierung": "nein", "pruefidee": "Für eine Stichprobe von 10 unterschiedlichen Modulaktionen: Benutzer ohne jeweiliges Recht → serverseitige Ablehnung (nicht nur UI-Ausblendung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-019", @@ -318,7 +336,8 @@ "tracelinks": "SyRS-021, SyRS-022", "konsolidierung": "nein", "pruefidee": "Anmeldung über jedes der vier Verfahren mit gültigen Testdaten → gültiges Ticket wird ausgestellt; ungültige Zugangsdaten → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-020", @@ -334,7 +353,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "nein", "pruefidee": "Anmeldung mit korrektem ersten Faktor, aber ohne/mit falschem zweiten Faktor → Anmeldung muss abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-021", @@ -350,7 +370,8 @@ "tracelinks": "SyRS-023", "konsolidierung": "nein", "pruefidee": "Gespeichertes Passwort einsehen → Protokolleintrag mit ActionType \"Zugriff\" muss entstehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-022", @@ -367,7 +388,8 @@ "tracelinks": "SyRS-024, SyRS-021", "konsolidierung": "nein", "pruefidee": "Kunde A meldet sich an und darf keine Tickets von Kunde B sehen (Mandanten-/Kundentrennungstest).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-023", @@ -384,7 +406,8 @@ "tracelinks": "SyRS-024, SyRS-025", "konsolidierung": "nein", "pruefidee": "Web-Account ohne WebCart2-Lizenz ruft `/webcart/shop` auf → Zugriff muss verweigert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-024", @@ -401,7 +424,8 @@ "tracelinks": "SyRS-026, SyRS-027", "konsolidierung": "nein", "pruefidee": "CI-Pipeline-Lauf erzeugt alle drei signierten Artefakte (MSI ×2, Container-Image) ohne manuellen Eingriff.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-025", @@ -418,7 +442,8 @@ "tracelinks": "SyRS-028", "konsolidierung": "Kandidat: strukturell ähnliches Client-Pattern wie StRS-026 (Versanddienstleister)", "pruefidee": "Ein Dienst liefert HTTP 401 → nur dieser Dienst wird als fehlgeschlagen markiert, übrige Anreicherungsquellen bleiben nutzbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-026", @@ -435,7 +460,8 @@ "tracelinks": "SyRS-028", "konsolidierung": "Kandidat: GLS und Shipcloud bilden dieselbe fachliche Funktion \"Versandauftrag erstellen\" redundant ab.", "pruefidee": "Versandauftrag mit gültigen Empfängerdaten auslösen → Tracking-ID und Label müssen im System hinterlegt sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-027", @@ -452,7 +478,8 @@ "tracelinks": "SyRS-028", "konsolidierung": "nein", "pruefidee": "ebInterface-Export einer Testrechnung gegen offizielles XSD-Schema validieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-028", @@ -469,7 +496,8 @@ "tracelinks": "SyRS-028", "konsolidierung": "nein", "pruefidee": "Abruf von `GetDeviceCounters` für ein Testgerät liefert plausible Zählerwerte zurück.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -486,7 +514,8 @@ "tracelinks": "StRS-001; SwRS-001, SwRS-002", "konsolidierung": "nein", "pruefidee": "Code-Review: Suche nach belegartspezifischer if/else- oder switch-Verzweigung innerhalb `ReceiptBL` außerhalb der `IReceiptSpecificLogic`-Aufrufe (sollte nicht signifikant vorkommen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -503,7 +532,8 @@ "tracelinks": "StRS-001, StRS-005; SwRS-003", "konsolidierung": "nein", "pruefidee": "Datenbankabfrage über alle Belegtabellen mit `ReceiptState`-Spalte liefert konsistente Wertemenge {1,2,3}.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -519,7 +549,8 @@ "tracelinks": "StRS-002; SwRS-004", "konsolidierung": "nein", "pruefidee": "Zweiten Signiervorgang für denselben Beleg anstoßen, während erster aktiv ist → Ablehnung mit definierter Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -535,7 +566,8 @@ "tracelinks": "StRS-002; SwRS-005, SwRS-006", "konsolidierung": "nein", "pruefidee": "Abgelaufenen Token direkt per HTTP-Request aufrufen (ohne UI) → Server muss ablehnen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -551,7 +583,8 @@ "tracelinks": "StRS-003; SwRS-007, SwRS-008", "konsolidierung": "nein", "pruefidee": "Direkter INSERT ohne Angabe von `IsFixed` gegen Testdatenbank → DB muss Default 0 setzen, NULL darf nicht möglich sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -567,7 +600,8 @@ "tracelinks": "StRS-004; SwRS-009, SwRS-010", "konsolidierung": "nein", "pruefidee": "Gleiche Testwerte über WPF-Client und Nexus-Web-Client eingeben → identisches Ergebnis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -583,7 +617,8 @@ "tracelinks": "StRS-006, StRS-009; SwRS-011, SwRS-012", "konsolidierung": "nein", "pruefidee": "Direkter API-Aufruf zum Schließen eines Tickets ohne `CLOSE_REQUEST`-Recht → serverseitige Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -599,7 +634,8 @@ "tracelinks": "StRS-006, StRS-007; SwRS-013", "konsolidierung": "nein", "pruefidee": "Netzwerk-Mitschnitt einer Listenabfrage eines eingeschränkten Benutzers → Antwortdaten dürfen keine unzulässigen Datensätze enthalten (nicht nur UI-Ausblendung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -615,7 +651,8 @@ "tracelinks": "StRS-008; SwRS-014, SwRS-015", "konsolidierung": "nein", "pruefidee": "Speicherversuch eines RMA mit `HelpdeskI3D = 0` → `ResultException` mit Code `DependencyCheckFailed`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -631,7 +668,8 @@ "tracelinks": "StRS-009; SwRS-016, SwRS-017", "konsolidierung": "nein", "pruefidee": "Simultane Ausführung derselben Aufgabe aus zwei Prozessen → nur eine Ausführung erfolgreich, zweite erhält Lock-Timeout.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -647,7 +685,8 @@ "tracelinks": "StRS-010; SwRS-018", "konsolidierung": "nein", "pruefidee": "Benutzer mit Recht \"Artikel bearbeiten\", aber ohne `CHANGE_ARTICLE_PRICE`, ändert Preis und Beschreibung gleichzeitig → Beschreibung wird gespeichert, Preis bleibt unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -664,7 +703,8 @@ "tracelinks": "StRS-011; SwRS-019, SwRS-020", "konsolidierung": "nein", "pruefidee": "Position mit Zählmenge ≠ Sollmenge und ohne Barcode-Konflikt → `CloseState = Risk`, keine Freigabe als \"Ok\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -680,7 +720,8 @@ "tracelinks": "StRS-012; SwRS-021", "konsolidierung": "nein", "pruefidee": "Benutzer mit nur Anlage-Recht versucht Löschung → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -696,7 +737,8 @@ "tracelinks": "StRS-013; SwRS-022", "konsolidierung": "nein", "pruefidee": "Lasttest: Bestellvorschlagsberechnung während gleichzeitiger Bestandsbuchung → Ergebnis muss nachvollziehbar einem Zeitpunkt zuordenbar sein (Konsistenzprüfung, ggf. [HYPOTHESE] bzgl. Transaktionsisolationsstufe, siehe Hypothesen.md).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -712,7 +754,8 @@ "tracelinks": "StRS-014; SwRS-023", "konsolidierung": "nein", "pruefidee": "Konfiguration auf \"ITScope\" umstellen → erzeugtes Dokument muss ITScope-spezifisches Format aufweisen, ohne Codeänderung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-016", @@ -729,7 +772,8 @@ "tracelinks": "StRS-015, StRS-016; SwRS-024, SwRS-025, SwRS-026", "konsolidierung": "Kandidat: SyRS-017 (beide betreffen Zahlungsverbuchung)", "pruefidee": "Duplikat-Importtest sowie Lösch-Test ohne Recht (siehe StRS-015/016 für Details).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-017", @@ -745,7 +789,8 @@ "tracelinks": "StRS-015; SwRS-025", "konsolidierung": "Kandidat: SyRS-016", "pruefidee": "Zahlung mit Differenz 0,05 zur Forderung → Rechnung wird als bezahlt markiert; Differenz 0,20 → nicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-018", @@ -761,7 +806,8 @@ "tracelinks": "StRS-017; SwRS-027", "konsolidierung": "nein", "pruefidee": "Direkter Web-Service-Aufruf zur Datumsänderung ohne Recht (unter Umgehung der UI) → muss serverseitig abgelehnt werden. [HYPOTHESE]: Ob der eigentliche Schreibpfad (nicht nur die Anzeige-Flags) diese Prüfung ebenfalls erzwingt, wurde im Rahmen dieser Iteration nicht bis zur konkreten Save-Methode zurückverfolgt — siehe Hypothesen.md.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-019", @@ -778,7 +824,8 @@ "tracelinks": "StRS-018; SwRS-028", "konsolidierung": "nein", "pruefidee": "Rechteprüfung während simuliertem DB-Verbindungsfehler auslösen → Ergebnis muss `false` (verweigert) sein, nicht Exception nach oben durchreichen oder `true` liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-020", @@ -794,7 +841,8 @@ "tracelinks": "StRS-018; SwRS-029", "konsolidierung": "nein", "pruefidee": "Code-Review-Test: zwei parallele Branches fügen ein neues Recht mit dem \"nächsten\" ID-Wert hinzu → Merge-Konflikt wird nicht automatisch, sondern nur durch Textgleichheit des Kommentars erkannt (Risiko einer stillen ID-Kollision, falls nicht rechtzeitig bemerkt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-021", @@ -810,7 +858,8 @@ "tracelinks": "StRS-019, StRS-020, StRS-022; SwRS-030, SwRS-031, SwRS-032, SwRS-033", "konsolidierung": "nein", "pruefidee": "Anmeldung über Basic-Auth und über OIDC vergleichen → resultierendes Ticket hat identische Struktur/Felder.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-022", @@ -826,7 +875,8 @@ "tracelinks": "StRS-019; SwRS-032", "konsolidierung": "nein", "pruefidee": "Ticket erzeugen, künstlich Systemzeit über Ablaufgrenze vorstellen (Testsystem) → Ticket wird abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-023", @@ -842,7 +892,8 @@ "tracelinks": "StRS-021; SwRS-034", "konsolidierung": "nein", "pruefidee": "Zugriff auf gespeichertes Passwort → Protokolleintrag muss unmittelbar entstehen, unabhängig vom Ergebnis des Zugriffs.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-024", @@ -859,7 +910,8 @@ "tracelinks": "StRS-022, StRS-023; SwRS-035", "konsolidierung": "nein", "pruefidee": "Als Web-Account-Kunde angemeldet, direkten API-Aufruf auf einen internen/administrativen Endpunkt oder auf Daten eines anderen Kunden versuchen → muss abgelehnt werden. [HYPOTHESE]: Die konkrete serverseitige Scoping-Prüfung pro Kundenportal-Endpunkt wurde nicht für jeden einzelnen Controller einzeln verifiziert — siehe Hypothesen.md.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-025", @@ -875,7 +927,8 @@ "tracelinks": "StRS-023; SwRS-036", "konsolidierung": "nein", "pruefidee": "Web-Account ohne Lizenz ruft `/webcart/shop` direkt per URL auf → Zugriff wird verweigert. [HYPOTHESE]: Das genaue Verhalten des `AuthorizeLicense`-Attributs (Redirect vs. Fehlerseite vs. Exception) wurde nicht im Detail nachvollzogen — siehe Hypothesen.md.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-026", @@ -891,7 +944,8 @@ "tracelinks": "StRS-024; SwRS-038", "konsolidierung": "nein", "pruefidee": "CI-Lauf beobachten: alle drei Artefakte müssen mit gültiger Authenticode-Signatur vorliegen, Pipeline darf bei Signaturfehler nicht grün werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-027", @@ -908,7 +962,8 @@ "tracelinks": "StRS-024; SwRS-038", "konsolidierung": "Kandidat: SyRS-026 (beide betreffen Auslieferung/Deployment)", "pruefidee": "Dasselbe Image mit zwei unterschiedlichen `appsettings`-Overrides starten → unterschiedliches Zielsystem wird angesprochen, ohne Image-Neubau.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-028", @@ -925,7 +980,8 @@ "tracelinks": "StRS-025, StRS-026, StRS-027, StRS-028; SwRS-039, SwRS-040", "konsolidierung": "nein", "pruefidee": "Simulierter Ausfall eines externen Dienstes (z. B. Timeout) → übrige Integrationen und Kernfunktionen bleiben funktionsfähig; Antwortzeitverhalten bei Ausfall ist [HYPOTHESE] (kein Timeout-Override gefunden, Default-`HttpClient`-Timeout vermutlich wirksam — siehe Hypothesen.md).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -942,7 +998,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Statische Codeanalyse: keine belegartspezifische Fallunterscheidung außerhalb der `*SpecificLogic`-Klassen in `ReceiptBL`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-002", @@ -959,7 +1016,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Reflection-Test: alle Belegart-Entitäten erben von derselben Basisklasse.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-003", @@ -975,7 +1033,8 @@ "tracelinks": "SyRS-002", "konsolidierung": "nein", "pruefidee": "Letzte offene Position eines Belegs vollständig verarbeiten → `ReceiptState` wechselt automatisch zu `Completed`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-004", @@ -991,7 +1050,8 @@ "tracelinks": "SyRS-003", "konsolidierung": "nein", "pruefidee": "Zweiten `GenerateTokenForDocument`-Aufruf für denselben `receiptI3D` bei aktivem Vorgang → `Result.AsError`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-005", @@ -1007,7 +1067,8 @@ "tracelinks": "SyRS-004", "konsolidierung": "nein", "pruefidee": "Abgelaufenen Token per direktem Methodenaufruf/HTTP-Request verwenden → definierter Fehlercode, keine Nutzdaten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-006", @@ -1024,7 +1085,8 @@ "tracelinks": "SyRS-004", "konsolidierung": "nein", "pruefidee": "Annahme mit Signatur → `WebOfferSign`; Annahme ohne Signatur → `WebOfferSignedWithoutSignature`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-007", @@ -1040,7 +1102,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "nein", "pruefidee": "Bereits fixierte Rechnung erneut festschreiben → Ablehnung mit definierter Meldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-008", @@ -1057,7 +1120,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "nein", "pruefidee": "INSERT ohne explizite Angabe von `IsFixed` → DB setzt automatisch 0, NULL wird von der DB abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-009", @@ -1073,7 +1137,8 @@ "tracelinks": "SyRS-006", "konsolidierung": "nein", "pruefidee": "Netto=100,005, Steuersatz=19 → erwarteter, kaufmännisch gerundeter Wert (Unit-Test mit Grenzwerten wie x,xx5).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-010", @@ -1089,7 +1154,8 @@ "tracelinks": "SyRS-006", "konsolidierung": "nein", "pruefidee": "Auftrag mit Steuersatz X zu Rechnung mit späterem Datum (nach Steuersatzänderung) weiterführen → Ergebnis muss mit `TakeoverVatMode.Yes`-Regel übereinstimmen (Übernahme statt Neuberechnung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -1105,7 +1171,8 @@ "tracelinks": "SyRS-007", "konsolidierung": "nein", "pruefidee": "Ticket ohne Pflichtfeld \"Kunde\" speichern → Ablehnung vor Persistierung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -1121,7 +1188,8 @@ "tracelinks": "SyRS-007", "konsolidierung": "nein", "pruefidee": "Benutzer mit `EDIT_HELPDESK` ohne `CLOSE_REQUEST` versucht `ClosedAt` zu setzen → Feld wird serverseitig zurückgesetzt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-013", @@ -1138,7 +1206,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "SQL-Profiling der Abfrage eines eingeschränkten Benutzers → WHERE-Klausel enthält bereits die Scope-Bedingung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-014", @@ -1154,7 +1223,8 @@ "tracelinks": "SyRS-009", "konsolidierung": "nein", "pruefidee": "RMA mit `HelpdeskI3D = 0` speichern → `ResultException` vor jeder Nebenwirkung, keine Teilverarbeitung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-015", @@ -1170,7 +1240,8 @@ "tracelinks": "SyRS-009", "konsolidierung": "nein", "pruefidee": "Artikel von `SendForth` zu `Invoice` überführen → Historieneintrag mit korrektem Alt-/Neu-Zustand entsteht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-016", @@ -1186,7 +1257,8 @@ "tracelinks": "SyRS-010", "konsolidierung": "nein", "pruefidee": "Zwei parallele Prozessaufrufe für dieselbe Aufgaben-ID → nur ein Prozess erhält das Lock (LockTimeout=0 lässt zweiten sofort fehlschlagen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-017", @@ -1202,7 +1274,8 @@ "tracelinks": "SyRS-010", "konsolidierung": "Kandidat: SwRS-012 (gleiche zugrundeliegende Rechteklasse ADD_NEW_HELPDESK)", "pruefidee": "Aufgabe mit Ausführungskontext ohne `ADD_NEW_HELPDESK`-Recht fällig werden lassen → Ticketerstellung schlägt fehl statt das Recht zu ignorieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-018", @@ -1218,7 +1291,8 @@ "tracelinks": "SyRS-011", "konsolidierung": "nein", "pruefidee": "Speichervorgang mit geänderter Warengruppe (ohne Recht) und geändertem Namen (mit Recht) → Name wird gespeichert, Warengruppe bleibt auf DB-Wert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-019", @@ -1234,7 +1308,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Zählmenge = Sollmenge, kein Barcode-Konflikt → `CloseState = Ok`; Zählmenge ≠ Sollmenge → `Risk`/`problem`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-020", @@ -1250,7 +1325,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Recht versucht gelöschte Inventur wiederherzustellen → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-021", @@ -1266,7 +1342,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "nein", "pruefidee": "Benutzer mit nur Anlage-Recht versucht Löschung → Ablehnung; umgekehrter Test analog.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-022", @@ -1282,7 +1359,8 @@ "tracelinks": "SyRS-014", "konsolidierung": "nein", "pruefidee": "Vergleich der berechneten Vorschlagsmenge gegen manuell nachgerechneten Erwartungswert für einen Testartikel.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-023", @@ -1298,7 +1376,8 @@ "tracelinks": "SyRS-015", "konsolidierung": "nein", "pruefidee": "Konfigurationswechsel auf anderen Distributor → anderer Dokumentersteller wird aufgerufen (Unit-Test mit Mock).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-024", @@ -1314,7 +1393,8 @@ "tracelinks": "SyRS-016", "konsolidierung": "nein", "pruefidee": "Identischen Transaktionsdatensatz zweimal importieren → zweiter Import löst Warnung aus; [HYPOTHESE]: ob der Anwender den Doppelimport trotzdem bestätigen kann, wurde nicht bis zur UI-Ebene zurückverfolgt — siehe Hypothesen.md.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-025", @@ -1330,7 +1410,8 @@ "tracelinks": "SyRS-016, SyRS-017", "konsolidierung": "nein", "pruefidee": "Verbuchungsversuch auf eine bereits `Canceled`-Rechnung mit positivem Betrag → muss abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-026", @@ -1346,7 +1427,8 @@ "tracelinks": "SyRS-016", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Recht versucht Löschung → Rechnung/`PaidFC` bleibt exakt unverändert (nicht nur Fehlermeldung prüfen, sondern Datenzustand).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-027", @@ -1362,7 +1444,8 @@ "tracelinks": "SyRS-018", "konsolidierung": "nein", "pruefidee": "Vergleich der von zwei unterschiedlich berechtigten Testbenutzern gelieferten Flag-Werte.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-028", @@ -1379,7 +1462,8 @@ "tracelinks": "SyRS-019", "konsolidierung": "nein", "pruefidee": "Rechteprüfung mit simuliertem DB-Fehler → Rückgabewert `false`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-029", @@ -1395,7 +1479,8 @@ "tracelinks": "SyRS-020", "konsolidierung": "nein", "pruefidee": "Code-Review-Historie prüfen: gab es je einen ID-Kollisionsfall bei parallelen Pull-Requests? (retrospektive Prüfidee)", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-030", @@ -1411,7 +1496,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "nein", "pruefidee": "Konfigurationswechsel AD → OIDC → Verhalten der Factory ändert sich entsprechend (Unit-Test).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-031", @@ -1429,7 +1515,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "nein", "pruefidee": "Sicherheitsreview/Penetrationstest: identische Testpasswörter zweier Benutzer erzeugen identischen gespeicherten Hash (Nachweis fehlenden Salts).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-032", @@ -1445,7 +1532,8 @@ "tracelinks": "SyRS-021, SyRS-022", "konsolidierung": "nein", "pruefidee": "Ticket auf simuliertem Fremdgerät verwenden → Ablehnung; Ticket nach Ablaufzeit verwenden → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-033", @@ -1461,7 +1549,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "Kandidat: Verhältnis zu separatem Modul `TwoFactorAuthenticator\\TwoFactorAuthenticationBL.cs` ungeklärt — siehe Hypothesen.md.", "pruefidee": "2FA aktiv, korrekter erster Faktor, falscher zweiter Faktor → Anmeldung wird verweigert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-034", @@ -1477,7 +1566,8 @@ "tracelinks": "SyRS-023", "konsolidierung": "nein", "pruefidee": "Zugriff auf Testpasswort → Protokolleintrag mit korrektem `EmployeeI3D` und aktuellem Zeitstempel.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-035", @@ -1494,7 +1584,8 @@ "tracelinks": "SyRS-024", "konsolidierung": "nein", "pruefidee": "Versuch, sich als Kunde über den internen Login-Pfad anzumelden → muss fehlschlagen bzw. ist technisch nicht vorgesehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-036", @@ -1510,7 +1601,8 @@ "tracelinks": "SyRS-025", "konsolidierung": "nein", "pruefidee": "Direkter URL-Aufruf `/webcart/shop` ohne Lizenz → keine Artikel-/Preisdaten werden übertragen (Netzwerk-Mitschnitt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-037", @@ -1526,7 +1618,8 @@ "tracelinks": "SyRS-025", "konsolidierung": "nein", "pruefidee": "Erster Aufruf ohne bestehenden Warenkorb → neuer Warenkorb wird automatisch angelegt und zurückgegeben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-038", @@ -1543,7 +1636,8 @@ "tracelinks": "SyRS-026, SyRS-027", "konsolidierung": "nein", "pruefidee": "Pipeline-Lauf beobachten: Signaturverifikation muss für alle drei Artefakte grün sein, sonst Pipeline-Abbruch.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-039", @@ -1559,7 +1653,8 @@ "tracelinks": "SyRS-028", "konsolidierung": "nein", "pruefidee": "Simulierter 401-Response → `ITscopeException` mit definierter Meldung; simulierter 404 → leere Liste statt Exception.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-040", @@ -1575,6 +1670,7 @@ "tracelinks": "SyRS-028", "konsolidierung": "nein", "pruefidee": "Abruf mit abgelaufenem Token → automatische Erneuerung vor erneutem Versuch (bzw. [HYPOTHESE], falls kein automatischer Retry gefunden — siehe Hypothesen.md).", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_122905_v1.0.0-23e8/_meta/anforderungen.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_122905_v1.0.0-23e8/_meta/anforderungen.md index 4f90fb24..4ed47a88 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_122905_v1.0.0-23e8/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_122905_v1.0.0-23e8/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -32,6 +34,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 96 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -49,5 +55,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (49 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 96 von 96 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_134905_v2.0.0-8b0a/Protokoll.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_134905_v2.0.0-8b0a/Protokoll.md index 601997cd..0c7502c4 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_134905_v2.0.0-8b0a/Protokoll.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_134905_v2.0.0-8b0a/Protokoll.md @@ -101,6 +101,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -137,6 +139,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 89 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -154,6 +160,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (34 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 89 von 89 mit Tracelinks (100,0 %) | ## Anmerkungen/Auffälligkeiten diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_134905_v2.0.0-8b0a/_meta/anforderungen.json b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_134905_v2.0.0-8b0a/_meta/anforderungen.json index ea1de3c7..2a242267 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_134905_v2.0.0-8b0a/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_134905_v2.0.0-8b0a/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-001, SyRS-002", "konsolidierung": "nein", "pruefidee": "Für jeden der sieben Belegtypen erzeugen, in jeden der drei Zustände überführen und prüfen, dass kein vierter Zustand erreichbar ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -33,7 +34,8 @@ "tracelinks": "SyRS-003", "konsolidierung": "Kandidat: Zwei parallele Implementierungen (Legacy \"Asset\"-System `Sales/CustomerAssets/*` und modernes \"Receipt\"-System `Sales/Receipts/*`) bilden denselben Belegzyklus und dieselbe Weiterleitungslogik redundant ab (siehe SwRS-Abschnitt \"Datenmodell\").", "pruefidee": "Versuch, einen Lieferschein direkt in ein Angebot umzuwandeln, muss vom System zurückgewiesen werden; Angebot→Auftrag muss gelingen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -51,7 +53,8 @@ "tracelinks": "SyRS-004, SyRS-005", "konsolidierung": "nein", "pruefidee": "Rechnung stornieren und prüfen, dass eine neue Version erzeugt wird und die ursprünglichen Werte in der Versionstabelle erhalten bleiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -69,7 +72,8 @@ "tracelinks": "SyRS-006", "konsolidierung": "Kandidat: Zwei redundante Mechanismen (pessimistische Sperre + optimistisches Concurrency-Guid) lösen dieselbe fachliche Anforderung; im Zielsystem auf einen Mechanismus konsolidieren.", "pruefidee": "Beleg durch Benutzer A öffnen (sperren), Speicherversuch durch Benutzer B muss abgelehnt bzw. mit Hinweis versehen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -87,7 +91,8 @@ "tracelinks": "SyRS-007, SyRS-008", "konsolidierung": "nein", "pruefidee": "Vertrag mit monatlichem Intervall und fälligem Abrechnungsdatum anlegen, Abrechnungslauf ausführen, Rechnung sowie fortgeschriebenes `LastSubsequentBillingDate` prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -104,7 +109,8 @@ "tracelinks": "SyRS-009", "konsolidierung": "nein", "pruefidee": "Rechnungslauf für einen RMM-Vertrag bei simuliert nicht erreichbarem RMM-Dienst ausführen; erwartetes Ergebnis: Abbruch mit definierter Fehlermeldung, keine Rechnung erzeugt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -121,7 +127,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Vertrag mit Stundenkontingent anlegen, Verbrauch über das Kontingent hinaus buchen, Monitoring-Warnung/Restbestand prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -139,7 +146,8 @@ "tracelinks": "SyRS-010, SyRS-011", "konsolidierung": "nein", "pruefidee": "Angebot über den Web-Kanal versenden, interne Freigabe erteilen, Kundenannahme simulieren, resultierenden Auftrag und Statuskette prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -155,7 +163,8 @@ "tracelinks": "SyRS-011", "konsolidierung": "nein", "pruefidee": "Dokument mit gültigem Zertifikat signieren und die Signatur mit einem PDF-Prüfwerkzeug verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -172,7 +181,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Kunde mit Kreditlimit 1.000 € anlegen, offene Aufträge über 1.000 € erfassen, weiteren Auftrag anlegen und Bestätigungsdialog verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -190,7 +200,8 @@ "tracelinks": "SyRS-013, SyRS-014", "konsolidierung": "Kandidat: `ProductMatrix`-Mechanismus (kundenindividuelle Katalogkategorien/Produkte) deckt fachlich ähnliches Ziel ab (Steuerung der für einen Kunden sichtbaren Artikel) — Verhältnis zu Sonderpreisen ungeklärt, siehe Hypothesen.md.", "pruefidee": "Kunde mit Sonderpreisen für Artikel X anlegen, per Web-Account im WebCart einloggen, Sichtbarkeit von Artikel X prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -206,7 +217,8 @@ "tracelinks": "SwRS (siehe SwRS-Abschnitt Datenmodell)", "konsolidierung": "Kandidat: Es existiert daneben ein neuerer Begriff \"Account\" (`Centron.BL/Accounts/*`) als mögliche Nachfolgeabstraktion zu `Customer` — Verhältnis ungeklärt, [HYPOTHESE] siehe Hypothesen.md H-02.", "pruefidee": "Adressobjekt für einen Lieferanten anlegen und prüfen, dass dieselbe Tabellenstruktur wie bei Kundenadressen verwendet wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -223,7 +235,8 @@ "tracelinks": "SyRS-015", "konsolidierung": "nein", "pruefidee": "Vorlage anlegen, als Standard markieren, neues Ticket-Erstellungsformular öffnen und automatisches Vorbefüllen mit Standardvorlage prüfen; Löschversuch der Standardvorlage muss abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -239,7 +252,8 @@ "tracelinks": "SyRS-015", "konsolidierung": "nein", "pruefidee": "Ticket mit offenem RMA-Vorgang schließen und prüfen, ob (aktuell) keine Blockade erfolgt — Regressionsbasis für spätere Vervollständigung der Prüfung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-015", @@ -257,7 +271,8 @@ "tracelinks": "SyRS-016, SyRS-017", "konsolidierung": "nein", "pruefidee": "Benutzer aus allen Rechtegruppen entfernen und prüfen, dass sämtliche geschützten Funktionen gesperrt sind; nach Gruppenzuordnung Freischaltung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-016", @@ -276,7 +291,8 @@ "tracelinks": "SyRS-017", "konsolidierung": "Kandidat: identisches Muster ist in mind. 4 Fachmodulen (Helpdesk, Kalender, Mitarbeiterauslastung, Rechteverwaltung) separat implementiert statt zentral wiederverwendet.", "pruefidee": "Benutzer mit Grundrecht + \"nur eigene Filiale\" anlegen, Datensätze anderer Filialen anlegen, Sichtbarkeit/Zugriff verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-017", @@ -293,7 +309,8 @@ "tracelinks": "SyRS-016", "konsolidierung": "nein", "pruefidee": "Web-Account-Recht vergeben/entziehen und prüfen, dass dies keine Auswirkung auf interne `UserRightsConst`-Prüfungen hat.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-018", @@ -309,7 +326,8 @@ "tracelinks": "SyRS-017", "konsolidierung": "nein", "pruefidee": "Recht einer Gruppe hinzufügen und Vorhandensein eines Protokolleintrags mit Benutzer/Zeitstempel prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-019", @@ -326,7 +344,8 @@ "tracelinks": "SyRS-018, SyRS-019", "konsolidierung": "nein", "pruefidee": "Anmeldung über jede der drei Methoden in einer Testumgebung durchführen und erfolgreichen Login sowie Ticket-Erstellung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-020", @@ -343,7 +362,8 @@ "tracelinks": "SyRS-020", "konsolidierung": "nein", "pruefidee": "Ticket erzeugen, 31 Minuten warten (bzw. Ablaufzeit simulieren), nachfolgenden API-Aufruf auf Ablehnung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-021", @@ -360,7 +380,8 @@ "tracelinks": "SyRS-018", "konsolidierung": "nein", "pruefidee": "2FA für einen Benutzer aktivieren, Login ohne bzw. mit korrektem/falschem TOTP-Code testen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-022", @@ -377,7 +398,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "nein", "pruefidee": "Feature ohne zugehörige Lizenz aufrufen und Sperrung/Ausblendung prüfen; Mengenlizenz mit `count=3` testen (4. Nutzung muss abgelehnt werden).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-023", @@ -394,7 +416,8 @@ "tracelinks": "SyRS-022", "konsolidierung": "nein", "pruefidee": "Zwei gleichzeitige Rechnungserstellungen (parallelisiert) simulieren und prüfen, dass keine doppelte Nummer vergeben wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-024", @@ -410,7 +433,8 @@ "tracelinks": "SyRS-023", "konsolidierung": "nein", "pruefidee": "Rechnung festschreiben, Änderungsversuch durchführen und Ablehnung mit definierter Fehlermeldung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-025", @@ -426,7 +450,8 @@ "tracelinks": "SyRS-023", "konsolidierung": "nein", "pruefidee": "Stornierung einer bereits exportierten Rechnung versuchen (muss abgelehnt werden); Stornierung einer offenen, nicht exportierten Rechnung durchführen (muss gelingen und neue Version erzeugen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-026", @@ -442,7 +467,8 @@ "tracelinks": "SyRS-023", "konsolidierung": "nein", "pruefidee": "Zahlung erfassen (Beleg wird \"bezahlt\"), Zahlung löschen und Rückkehr des Belegs in den unbezahlten Zustand inkl. korrekten Betrags prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-027", @@ -458,7 +484,8 @@ "tracelinks": "SyRS-023", "konsolidierung": "nein", "pruefidee": "Bankverbindung löschen, die von einem aktiven Vertrag mit SEPA-Mandat referenziert wird; Ablehnung mit Belegliste prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-028", @@ -476,7 +503,8 @@ "tracelinks": "SyRS-024", "konsolidierung": "nein", "pruefidee": "Rechnung mit aktivierter ZUGFeRD-Einstellung erzeugen und die PDF-eingebettete XML mit einem Validator (z. B. KOSIT-Tool) prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-029", @@ -494,7 +522,8 @@ "tracelinks": "SyRS-025, SyRS-026", "konsolidierung": "nein", "pruefidee": "Testbestellung an einen konfigurierten EDI-Distributor senden und Empfang/Verarbeitung einer simulierten Auftragsbestätigung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-030", @@ -510,7 +539,8 @@ "tracelinks": "SyRS-027", "konsolidierung": "nein", "pruefidee": "Artikel unter Mindestbestand setzen und Erscheinen in der Bestellvorschlagsliste mit korrekter Menge prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-031", @@ -526,7 +556,8 @@ "tracelinks": "SyRS-028", "konsolidierung": "nein", "pruefidee": "Bestellung mit 100 Stück anlegen, zwei Teillieferungen von je 40 und 60 Stück buchen, kumulierten Status nach jeder Teillieferung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-032", @@ -543,7 +574,8 @@ "tracelinks": "SyRS-029", "konsolidierung": "nein", "pruefidee": "Warenausgang ohne Negativbuchungsrecht über den verfügbaren Bestand hinaus buchen; Ablehnung und Kollegen-Anmeldedialog prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-033", @@ -560,7 +592,8 @@ "tracelinks": "SyRS-029", "konsolidierung": "nein", "pruefidee": "Bestandsänderung durchführen und Vorhandensein eines zugehörigen Protokolleintrags mit Benutzer/Zeitstempel/Mengenänderung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-034", @@ -578,7 +611,8 @@ "tracelinks": "SyRS-030", "konsolidierung": "nein", "pruefidee": "Artikel mit hinterlegtem Aktionspreis und aktivierten externen Quellen öffnen; alle Quellen müssen parallel mit Anbieterkennzeichnung angezeigt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-035", @@ -595,7 +629,8 @@ "tracelinks": "SyRS-013, SyRS-031", "konsolidierung": "nein", "pruefidee": "Als Web-Account anmelden, Artikel im Shop auswählen, Bestellung auslösen, im Belegverlauf wiederfinden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-036", @@ -612,7 +647,8 @@ "tracelinks": "SyRS-032", "konsolidierung": "nein", "pruefidee": "TradePool-Zugang für einen Testkunden einrichten, Artikelsuche über mehrere importierte Distributoren durchführen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-037", @@ -630,7 +666,8 @@ "tracelinks": "SyRS-033, SyRS-034", "konsolidierung": "nein", "pruefidee": "Web-Service-Container unter Linux gemäß Dokumentation starten und Basisfunktionalität (Login, einfacher API-Aufruf) verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-038", @@ -646,7 +683,8 @@ "tracelinks": "SyRS-035", "konsolidierung": "nein", "pruefidee": "Pull Request mit \"Ticket 12345\" im Titel mergen und automatischen Eintrag der Versionsnummer im Ticketsystem prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-039", @@ -662,7 +700,8 @@ "tracelinks": "SyRS-041", "konsolidierung": "nein", "pruefidee": "Denselben Anwendungsfall (z. B. Kundenanlage) einmal über Direktverbindung und einmal über Web-Service ausführen; identisches fachliches Ergebnis prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-040", @@ -679,7 +718,8 @@ "tracelinks": "SyRS-042", "konsolidierung": "nein", "pruefidee": "Anzeigesprache auf Englisch umstellen und Vorhandensein englischer Übersetzung für eine Stichprobe von UI-Elementen prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-041", @@ -695,7 +735,8 @@ "tracelinks": "SyRS-036", "konsolidierung": "nein", "pruefidee": "Bekannte Dateninkonsistenz (z. B. fehlende AccountI3D in einem Todo) erzeugen und nach einem Ausführungszyklus die automatische Korrektur prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-042", @@ -713,7 +754,8 @@ "tracelinks": "SyRS-037, SyRS-038", "konsolidierung": "nein", "pruefidee": "API-Aufruf ohne gültiges Recht (403), ohne gültige Authentifizierung (401) und mit beidem (Erfolg) gegen einen v1-Endpunkt prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-043", @@ -729,7 +771,8 @@ "tracelinks": "SyRS-039", "konsolidierung": "nein", "pruefidee": "API-Aufruf durchführen und Vorhandensein eines entsprechenden Telemetrie-Eintrags nach dem nächsten Bucket-Zyklus prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-044", @@ -746,7 +789,8 @@ "tracelinks": "SyRS-040", "konsolidierung": "nein", "pruefidee": "Zwei Filialen unter einem Mandanten anlegen, Auftrag je Filiale erfassen und filialbezogene Auswertung/Berechtigungsfilterung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-045", @@ -762,7 +806,8 @@ "tracelinks": "SyRS-044", "konsolidierung": "nein", "pruefidee": "Zwei Benutzer mit identischem Passwort anlegen und prüfen, ob die gespeicherten Hash-Werte identisch sind (Indiz für fehlendes Salt); Ergebnis mit Sicherheitsverantwortlichen bewerten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -778,7 +823,8 @@ "tracelinks": "StRS-001; SwRS-001", "konsolidierung": "nein", "pruefidee": "Versuch, einen ungültigen Integer-Wert außerhalb {1,2,3} in `State` zu schreiben, muss durch Typsystem/DB verhindert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -795,7 +841,8 @@ "tracelinks": "StRS-001; SwRS-002", "konsolidierung": "nein", "pruefidee": "Struktur eines neu hinzugefügten Belegtyps (z. B. anhand der Dokumentation) gegen die Basisklassen validieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -811,7 +858,8 @@ "tracelinks": "StRS-002; SwRS-003", "konsolidierung": "nein", "pruefidee": "Direkter API-/BL-Aufruf zur Weiterleitung eines nicht erlaubten Übergangs muss mit definiertem Fehler abgelehnt werden (nicht nur UI-seitig ausgeblendet).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -827,7 +875,8 @@ "tracelinks": "StRS-003; SwRS-004", "konsolidierung": "nein", "pruefidee": "Neue Spalte nur an der Basistabelle ergänzen (Versionstabelle bewusst auslassen) und Auftreten des dokumentierten Laufzeitfehlers bei Versionierung verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -843,7 +892,8 @@ "tracelinks": "StRS-003; SwRS-004", "konsolidierung": "nein", "pruefidee": "Ereignis für zwei unterschiedliche Belegtypen auslösen und Vorhandensein je eines `AnlageLog`-Eintrags mit korrektem `AnlageArt` prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -860,7 +910,8 @@ "tracelinks": "StRS-004; SwRS-005", "konsolidierung": "Kandidat: siehe StRS-004 (zwei parallele Mechanismen).", "pruefidee": "Siehe StRS-004.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -876,7 +927,8 @@ "tracelinks": "StRS-005; SwRS-006", "konsolidierung": "nein", "pruefidee": "Vertrag mit Quartalsintervall (Monthly×3) anlegen und Fälligkeitsberechnung über mehrere Zyklen prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -892,7 +944,8 @@ "tracelinks": "StRS-005, StRS-007; SwRS-006", "konsolidierung": "nein", "pruefidee": "Kontingent bis knapp unter, dann über die Überwachungsschwelle buchen und Statusänderung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -908,7 +961,8 @@ "tracelinks": "StRS-006; SwRS-007", "konsolidierung": "nein", "pruefidee": "RMM-Dienst-Endpunkt für einen Testlauf deaktivieren und Abbruch der Rechnungserstellung mit definierter Fehlermeldung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -925,7 +979,8 @@ "tracelinks": "StRS-008; SwRS-008", "konsolidierung": "nein", "pruefidee": "Web-Angebot durch alle Hauptpfade (Annahme ohne Signatur / mit Signatur / Ablehnung / Änderungswunsch) führen und Zustandsfolge protokollieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -942,7 +997,8 @@ "tracelinks": "StRS-008, StRS-009; SwRS-008", "konsolidierung": "nein", "pruefidee": "Dokument ohne interne Freigabe darf nicht an den Kunden-Signaturlink gelangen; nach Freigabe muss der Versand erfolgen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -958,7 +1014,8 @@ "tracelinks": "StRS-010; SwRS-009", "konsolidierung": "nein", "pruefidee": "Siehe StRS-010.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -974,7 +1031,8 @@ "tracelinks": "StRS-011, StRS-035; SwRS-010", "konsolidierung": "nein", "pruefidee": "Endpunkt für einen Testkunden mit Sonderpreisen aufrufen und korrekte Artikelliste inkl. Preis prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -990,7 +1048,8 @@ "tracelinks": "StRS-011; SwRS-010", "konsolidierung": "Kandidat: Verhältnis zu Sonderpreis-Mechanismus (SyRS-013) ungeklärt — möglicherweise zwei Mechanismen für dasselbe fachliche Ziel \"Artikelsichtbarkeit je Kunde steuern\" (siehe Hypothesen.md).", "pruefidee": "Kundenindividuelle Produktmatrix konfigurieren und Filterwirkung im Katalog/WebCart prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -1006,7 +1065,8 @@ "tracelinks": "StRS-013, StRS-014; SwRS-011", "konsolidierung": "nein", "pruefidee": "Zweite Vorlage als Standard setzen und Aberkennung des Standard-Flags der ersten Vorlage prüfen; Löschversuch der aktuellen Standardvorlage muss scheitern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-016", @@ -1022,7 +1082,8 @@ "tracelinks": "StRS-015, StRS-017; SwRS-012", "konsolidierung": "nein", "pruefidee": "Mehrere Rechteprüfungen innerhalb derselben Sitzung ausführen und (via Profiling) genau einen SQL-Zugriff für die Rechteliste nachweisen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-017", @@ -1038,7 +1099,8 @@ "tracelinks": "StRS-015, StRS-016, StRS-018; SwRS-012, SwRS-013", "konsolidierung": "nein", "pruefidee": "Versuch, einem Benutzer ohne Gruppenzuordnung ein Einzelrecht zuzuweisen — es muss kein entsprechender Mechanismus im System existieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-018", @@ -1054,7 +1116,8 @@ "tracelinks": "StRS-019, StRS-021; SwRS-014", "konsolidierung": "nein", "pruefidee": "Systemeinstellung zwischen den drei Methoden umschalten und erfolgreichen Login je Methode prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-019", @@ -1071,7 +1134,8 @@ "tracelinks": "StRS-019; SwRS-014", "konsolidierung": "nein", "pruefidee": "Manipuliertes/abgelaufenes Token gegen `jwt/login` senden und Ablehnung (401) prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-020", @@ -1088,7 +1152,8 @@ "tracelinks": "StRS-020; SwRS-015", "konsolidierung": "nein", "pruefidee": "Ticket serverseitig invalidieren und Zeit bis zur client-seitigen Erkennung (Abmeldung/Hinweis) messen; muss innerhalb des konfigurierten Revalidierungsintervalls liegen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-021", @@ -1104,7 +1169,8 @@ "tracelinks": "StRS-022, StRS-042; SwRS-016", "konsolidierung": "nein", "pruefidee": "Lizenz `CentronInternal` deaktivieren und Zugriff auf entsprechend geschützten Endpunkt trotz gültiger Benutzerrechte prüfen (muss abgelehnt werden).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-022", @@ -1120,7 +1186,8 @@ "tracelinks": "StRS-023; SwRS-017", "konsolidierung": "nein", "pruefidee": "Lasttest mit ≥10 parallelen Rechnungserstellungen gegen denselben Nummernkreis; Eindeutigkeit aller vergebenen Nummern prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-023", @@ -1138,7 +1205,8 @@ "tracelinks": "StRS-024, StRS-025, StRS-026, StRS-027; SwRS-018", "konsolidierung": "nein", "pruefidee": "Je Guard einen gezielten Verletzungsversuch durchführen und Ablehnung mit spezifischer Fehlermeldung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-024", @@ -1155,7 +1223,8 @@ "tracelinks": "StRS-028; SwRS-019", "konsolidierung": "nein", "pruefidee": "Einstellung aktivieren, Rechnung finalisieren, PDF auf eingebettete ZUGFeRD-XML prüfen (z. B. mit KOSIT-Validator).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-025", @@ -1171,7 +1240,8 @@ "tracelinks": "StRS-029; SwRS-020", "konsolidierung": "nein", "pruefidee": "Bestellung an einen nicht speziell konfigurierten Distributor auslösen und Erzeugung eines validen openTRANS-2.1-Dokuments prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-026", @@ -1188,7 +1258,8 @@ "tracelinks": "StRS-029; SwRS-020", "konsolidierung": "nein", "pruefidee": "Testdatei je unterstütztem Format einspielen und korrekte Delegation an die jeweilige Partial-Class (per Log/Trace) prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-027", @@ -1204,7 +1275,8 @@ "tracelinks": "StRS-030; SwRS-021", "konsolidierung": "nein", "pruefidee": "Artikel mit offenem Zulauf und Unterschreitung des Mindestbestands prüfen; Bestellvorschlagsmenge muss den Zulauf berücksichtigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-028", @@ -1220,7 +1292,8 @@ "tracelinks": "StRS-031; SwRS-022", "konsolidierung": "nein", "pruefidee": "Siehe StRS-031.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-029", @@ -1237,7 +1310,8 @@ "tracelinks": "StRS-032, StRS-033; SwRS-023", "konsolidierung": "nein", "pruefidee": "Siehe StRS-032/033.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-030", @@ -1253,7 +1327,8 @@ "tracelinks": "StRS-034; SwRS-024", "konsolidierung": "nein", "pruefidee": "Aktionspreis außerhalb des Gültigkeitszeitraums anlegen und Nichterscheinen in der Preismatrix prüfen; Preismatrix-Ladezeit mit und ohne Cache messen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-031", @@ -1269,7 +1344,8 @@ "tracelinks": "StRS-035; SwRS-025", "konsolidierung": "nein", "pruefidee": "Login über Nexus durchführen, Cookie-Setzung prüfen, Ticket serverseitig invalidieren und erzwungene Abmeldung gemäß SyRS-020 prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-032", @@ -1285,7 +1361,8 @@ "tracelinks": "StRS-036; SwRS-025", "konsolidierung": "Kandidat: dritter, unabhängiger Authentifizierungsmechanismus neben Haupt-Auth (SyRS-018) und Web-Account-Rechten (StRS-017) — Konsolidierungspotenzial für Zielsystem.", "pruefidee": "TradePool-Login mit korrektem/falschem Passwort testen; Nichtverfügbarkeit einer TradePool-Sitzung für reguläre c-entron-Endpunkte prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-033", @@ -1302,7 +1379,8 @@ "tracelinks": "StRS-037; SwRS-026", "konsolidierung": "nein", "pruefidee": "`docker compose up` gemäß Konfiguration ausführen und Erreichbarkeit aller vier Dienste prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-034", @@ -1318,7 +1396,8 @@ "tracelinks": "StRS-037; SwRS-026", "konsolidierung": "nein", "pruefidee": "Linux-Installation gemäß Dokumentation aufsetzen und Nichtverfügbarkeit der Sub-Web-Services sowie Klartext-Zertifikatspasswort in der Konfigurationsdatei verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-035", @@ -1334,7 +1413,8 @@ "tracelinks": "StRS-038; SwRS-026", "konsolidierung": "nein", "pruefidee": "Test-Pull-Request mit Ticketreferenz mergen, Build auslösen und automatischen Ticket-Eintrag verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-036", @@ -1350,7 +1430,8 @@ "tracelinks": "StRS-041; SwRS-027", "konsolidierung": "nein", "pruefidee": "Eine Wartungsaufgabe gezielt zum Fehlschlagen bringen (z. B. durch inkonsistente Testdaten) und Fortsetzung der übrigen Aufgaben im selben Zyklus prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-037", @@ -1367,7 +1448,8 @@ "tracelinks": "StRS-042; SwRS-028", "konsolidierung": "nein", "pruefidee": "Neuen Controller im Namensraum `Controllers.v2.*` anlegen und automatische Zuordnung zur API-Version 2 ohne weitere Konfiguration prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-038", @@ -1383,7 +1465,8 @@ "tracelinks": "StRS-042; SwRS-028", "konsolidierung": "nein", "pruefidee": "Cross-Origin-Testanfrage von einer nicht autorisierten Domain senden und erfolgreiche CORS-Freigabe (statt Ablehnung) verifizieren; im Rahmen der Validierung mit Sicherheitsverantwortlichen klären, ob dies beabsichtigt ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-039", @@ -1399,7 +1482,8 @@ "tracelinks": "StRS-043; SwRS-029", "konsolidierung": "nein", "pruefidee": "Parallele API-Aufrufe (≥20 gleichzeitig) simulieren und korrekte, verlustfreie Bucket-Aggregation prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-040", @@ -1416,7 +1500,8 @@ "tracelinks": "StRS-044; SwRS-030", "konsolidierung": "nein", "pruefidee": "Siehe StRS-044.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-041", @@ -1432,7 +1517,8 @@ "tracelinks": "StRS-039; SwRS-031", "konsolidierung": "nein", "pruefidee": "Neues Modul ohne eine der beiden Implementierungen registrieren und Fehlverhalten/Registrierungsfehler beim Start prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-042", @@ -1448,7 +1534,8 @@ "tracelinks": "StRS-040; SwRS-032", "konsolidierung": "nein", "pruefidee": "Web-Service-Aufruf mit `Accept-Language: en-US` senden und englische statt deutsche Fehlermeldung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-043", @@ -1465,7 +1552,8 @@ "tracelinks": "StRS-042; SwRS-033", "konsolidierung": "nein", "pruefidee": "Lasttest mit sehr vielen parallelen/wiederholten Anfragen eines einzelnen Clients durchführen und Verhalten (Drosselung ja/nein) beobachten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-044", @@ -1481,6 +1569,7 @@ "tracelinks": "StRS-045; SwRS-034", "konsolidierung": "nein", "pruefidee": "Siehe StRS-045.", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_134905_v2.0.0-8b0a/_meta/anforderungen.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_134905_v2.0.0-8b0a/_meta/anforderungen.md index 40ce54c5..573b1e3b 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_134905_v2.0.0-8b0a/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_134905_v2.0.0-8b0a/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 89 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (34 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 89 von 89 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_142932_v2.0.1-5dc4/Protokoll.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_142932_v2.0.1-5dc4/Protokoll.md index 92f2d48a..fad1618a 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_142932_v2.0.1-5dc4/Protokoll.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_142932_v2.0.1-5dc4/Protokoll.md @@ -97,6 +97,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -133,6 +135,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 89 (84,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -150,6 +156,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **verletzt** – 1 von 43 ungedeckt: SyRS-035 | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 97 von 106 mit Tracelinks (91,5 %) | ## Vergleich der drei Läufe (identischer Prompt) diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_142932_v2.0.1-5dc4/_meta/anforderungen.json b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_142932_v2.0.1-5dc4/_meta/anforderungen.json index cbe2c36d..6293d389 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_142932_v2.0.1-5dc4/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_142932_v2.0.1-5dc4/_meta/anforderungen.json @@ -14,7 +14,8 @@ "tracelinks": "SyRS-013, SyRS-014, SwRS-001, SwRS-002, SwRS-003, SwRS-004", "konsolidierung": "nein", "pruefidee": "End-to-End-Test: Angebot anlegen → in Auftrag wandeln → in Rechnung wandeln; prüfen, dass Kundendaten, Positionen und Preise unverändert übernommen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -31,7 +32,8 @@ "tracelinks": "SyRS-001, SyRS-003", "konsolidierung": "Kandidat: CRM-Kundendaten (`Kunden`-Tabelle) und Webaccount-Kundenportalzugang (StRS-018) könnten im Zielsystem als ein Identitätsmodell konsolidiert werden.", "pruefidee": "Neuen Kunden anlegen, Adresse/Kontaktperson hinzufügen, anschließend in einem Angebot referenzieren und Übernahme der Stammdaten prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -48,7 +50,8 @@ "tracelinks": "SyRS-013, SwRS-001, SwRS-009", "konsolidierung": "nein", "pruefidee": "Vertrag mit monatlichem Abrechnungsintervall anlegen, automatisierte Abrechnung aktivieren, Fälligkeitsdatum erreichen lassen (Testlauf) und Rechnungserzeugung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -64,7 +67,8 @@ "tracelinks": "SyRS-013, SwRS-009, SwRS-010, SwRS-011", "konsolidierung": "nein", "pruefidee": "RMM-Dienst simuliert nicht erreichbar → Rechnungserstellung für RMM-Vertrag muss mit Fehlermeldung abbrechen, keine Teil-Rechnung darf erzeugt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -81,7 +85,8 @@ "tracelinks": "SyRS-013, SyRS-014, SwRS-002", "konsolidierung": "nein", "pruefidee": "Bestellvorschlag erzeugen, in Lieferantenbestellung wandeln, Lieferschein und Lieferantenrechnung erfassen; Mengen-/Preisübernahme prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -98,7 +103,8 @@ "tracelinks": "SyRS-021, SyRS-022, SyRS-026, SwRS-026, SwRS-027, SwRS-028", "konsolidierung": "nein", "pruefidee": "EDI-Testdatei eines unterstützten Lieferantenformats bereitstellen, Download-Zyklus abwarten, Übernahme in c-entron-Beleg prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -115,7 +121,8 @@ "tracelinks": "SyRS-013, SwRS-001", "konsolidierung": "nein", "pruefidee": "Artikel anlegen, Lieferschein mit diesem Artikel buchen, Bestandsfortschreibung im Lagerbestand prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -132,7 +139,8 @@ "tracelinks": "SyRS-013, SwRS-007", "konsolidierung": "nein", "pruefidee": "Artikel mit gültigem Aktionspreis und externem API-Preis öffnen; Preismatrix muss beide Quellen gleichzeitig mit korrekter Kennzeichnung anzeigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -149,7 +157,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "nein", "pruefidee": "RMA-Fall für retournierten Artikel anlegen, Status bis Abschluss verfolgen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -167,7 +176,8 @@ "tracelinks": "SyRS-003, SyRS-037, SwRS-034", "konsolidierung": "Kandidat: WPF-Helpdesk-Modul und Nexus-ServiceBoard bilden zwei parallele UI-Implementierungen derselben fachlichen Funktion – im Zielsystem konsolidierungsbedürftig.", "pruefidee": "Ticket im WPF-Client anlegen, im Webportal auffindbar und bearbeitbar prüfen, Status bis \"geschlossen\" verfolgen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -183,7 +193,8 @@ "tracelinks": "SyRS-013, SwRS-034", "konsolidierung": "nein", "pruefidee": "Vorlage mit Modus \"Group\" anlegen, als Standard setzen, aus Auftrag Tickets erzeugen lassen; genau ein Sammelticket mit Vorlagenwerten muss entstehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -200,7 +211,8 @@ "tracelinks": "SyRS-011, SwRS-014", "konsolidierung": "nein", "pruefidee": "Benutzer ohne das entsprechende Recht öffnet Timer-Billing-Einstellungen; Datumseingabe für Rechnungs-/Lieferscheindatum muss gesperrt sein und ein Hinweisfeld anzeigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -217,7 +229,8 @@ "tracelinks": "SyRS-011, SwRS-012, SwRS-013, SwRS-014", "konsolidierung": "nein", "pruefidee": "Mahnlauf mit Benutzer ohne Mahnungsrecht auslösen → Abbruch mit Fehlermeldung; mit berechtigtem Benutzer → korrekte Mahnstufenzuordnung je Kunde.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -233,7 +246,8 @@ "tracelinks": "SyRS-011, SwRS-013, SwRS-014", "konsolidierung": "Kandidat: OPOS und Mahnwesen (StRS-013) teilen dieselbe Rechteschutz-Idiom (`ThrowIfUserHasInsufficentRights`) und denselben fachlichen Kontext (Zahlungsüberwachung) – ggf. im Zielsystem als ein \"Forderungsmanagement\"-Baustein konsolidierbar.", "pruefidee": "OPOS-Lauf durch nicht berechtigten Benutzer auslösen → Abbruch; Saldenkontrolle einer Testrechnung mit Teilzahlung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-015", @@ -250,7 +264,8 @@ "tracelinks": "SyRS-023, SyRS-024, SwRS-029, SwRS-030", "konsolidierung": "nein", "pruefidee": "Rechnung mit mehreren Steuersätzen erzeugen, ZUGFeRD-Export prüfen (KOSIT-Validator), Summenabgleich innerhalb der Toleranz verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-016", @@ -267,7 +282,8 @@ "tracelinks": "SyRS-011, SyRS-012, SwRS-014, SwRS-015, SwRS-016", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Recht \"Kunde anlegen\" versucht, einen Kunden anzulegen → UI-Funktion ist deaktiviert und BL-Aufruf liefert Fehlermeldung \"Fehlende Rechte...\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-017", @@ -284,7 +300,8 @@ "tracelinks": "SyRS-018, SwRS-021", "konsolidierung": "nein", "pruefidee": "Kunde ohne Lizenz für Modul X öffnet c-entron → Modul ist nicht im Modul-Menü sichtbar (`ModuleRegistration.IsModuleAvailable`).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-018", @@ -301,7 +318,8 @@ "tracelinks": "SyRS-003, SyRS-037, SwRS-001", "konsolidierung": "nein", "pruefidee": "Als Webaccount-Nutzer Artikel in Warenkorb legen, Freigabe anfordern, als Freigebender genehmigen, Status \"bestellbereit\" prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-019", @@ -317,7 +335,8 @@ "tracelinks": "SyRS-011, SyRS-012", "konsolidierung": "nein", "pruefidee": "Zwei Webaccount-Nutzer desselben Kunden mit unterschiedlicher Ticket-Sichtbarkeitskonfiguration anlegen; prüfen, dass jeder nur die für ihn freigegebenen Tickets sieht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-020", @@ -333,7 +352,8 @@ "tracelinks": "SyRS-038", "konsolidierung": "nein", "pruefidee": "E-Mail in Outlook öffnen, Add-in nutzen, um ein neues Ticket zu erstellen; Ticket muss im c-entron-System mit E-Mail-Bezug erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-021", @@ -349,7 +369,8 @@ "tracelinks": "SyRS-027, SwRS-031, SwRS-032", "konsolidierung": "nein", "pruefidee": "Helpdesk-Zeit in c-entron anlegen (Datum X), Sync abwarten, Termin in Outlook manuell auf Datum Y ändern, erneut synchronisieren → c-entron-Datensatz muss weiterhin Datum X zeigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-022", @@ -366,7 +387,8 @@ "tracelinks": "SyRS-003", "konsolidierung": "Kandidat: GLS-Direktanbindung und Shipcloud-Aggregator decken teils überlappende Funktionalität ab – im Zielsystem auf einen Versand-Abstraktionsdienst konsolidierbar.", "pruefidee": "Lieferschein abschließen, Versandlabel über GLS/Shipcloud erzeugen, Tracking-Nummer im Beleg prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-023", @@ -382,7 +404,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "nein", "pruefidee": "Artikel mit bekanntem Herstellercode über Icecat-Abgleich anreichern lassen, Ergebnis (Beschreibung/Bild) im Artikelstamm prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-024", @@ -399,7 +422,8 @@ "tracelinks": "SyRS-013, StRS-014", "konsolidierung": "nein", "pruefidee": "Testkonto über finAPI-Sandbox verbinden, Transaktionsimport auslösen, Zuordnung zu offener Rechnung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-025", @@ -415,7 +439,8 @@ "tracelinks": "SyRS-013, StRS-004", "konsolidierung": "nein", "pruefidee": "Gerät mit docuFORM verknüpfen, Zählerstand-Abfrage auslösen, Übernahme in Vertragskontingent-Verbrauch (StRS-004) prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-026", @@ -431,7 +456,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "nein", "pruefidee": "Verkaufsstatistik für definierten Zeitraum abrufen und Summenkontrolle gegen manuell aggregierte Belegdaten durchführen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-027", @@ -448,7 +474,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Benutzer mit \"nur eigene Filiale\"-Recht sucht Belege → nur Belege der eigenen Filiale werden zurückgegeben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-028", @@ -464,7 +491,8 @@ "tracelinks": "-", "konsolidierung": "nein", "pruefidee": "Modul öffnen und konkrete Funktionen (Auskunft/Löschung/Anonymisierung) inventarisieren; mit Datenschutzbeauftragtem abgleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-029", @@ -481,7 +509,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "nein", "pruefidee": "Chat-Assistenten mit Testanfrage aufrufen, Antwortverhalten und Rechteschutz (Mandanten-/Filial-/Mitarbeiterebene) prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-030", @@ -497,7 +526,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Gleiche fachliche Aktion (z. B. Kunde anlegen) einmal über Direktverbindung, einmal über Webservice-Verbindung ausführen; Ergebnis muss identisch sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -513,7 +543,8 @@ "tracelinks": "StRS-030", "konsolidierung": "nein", "pruefidee": "Statische Codeprüfung: Für ein Stichprobenmodul existieren `I*Logic`, `BL*Logic`, `WS*Logic` mit identischer Methodensignatur.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -529,7 +560,8 @@ "tracelinks": "StRS-030", "konsolidierung": "nein", "pruefidee": "BL-Methode mit provoziertem Fehler aufrufen; Response muss `StatusCode.Failed` mit aussagekräftiger `Message` liefern, kein unbehandelter Exception-Durchschlag zum Client.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -545,7 +577,8 @@ "tracelinks": "StRS-002, StRS-010, StRS-018, StRS-022", "konsolidierung": "nein", "pruefidee": "Gleichen Endpunkt von WPF-Client und einer unabhängigen HTTP-Anfrage (z. B. curl) mit gültigem Ticket aufrufen; identisches Ergebnis erwarten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -561,7 +594,8 @@ "tracelinks": "SyRS-003", "konsolidierung": "Kandidat: Legacy-WCF-Bridge (SyRS-004) und moderne v1-Controller (SyRS-005) bilden zwei parallele API-Generationen für teils gleiche fachliche Funktionen (z. B. Kunden/Aufträge existieren in beiden) – zentraler Konsolidierungskandidat für die Web-/SaaS-Neuimplementierung.", "pruefidee": "Bestandsmethode aus `ICentronRestService` über `/REST/` aufrufen und Antwortformat/-inhalt gegen Erwartung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -577,7 +611,8 @@ "tracelinks": "SyRS-004", "konsolidierung": "nein", "pruefidee": "`GET v1/customers/{id}` mit gültigem Token aufrufen und Response-Schema gegen DTO-Definition prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -593,7 +628,8 @@ "tracelinks": "StRS-010", "konsolidierung": "nein", "pruefidee": "Zwei Clients verbinden, Chat-Nachricht von Client A senden, Zustellzeit/-inhalt bei Client B prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -610,7 +646,8 @@ "tracelinks": "StRS-016", "konsolidierung": "nein", "pruefidee": "Mit abgelaufenem Ticket einen geschützten Endpunkt aufrufen → Antwort 401.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -626,7 +663,8 @@ "tracelinks": "StRS-016", "konsolidierung": "nein", "pruefidee": "Anmeldung mit verknüpftem Microsoft-Testkonto durchführen, gültiges Ticket erhalten; Anmeldung mit nicht verknüpftem Konto → Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -642,7 +680,8 @@ "tracelinks": "StRS-016", "konsolidierung": "nein", "pruefidee": "Access Token erstellen, damit Aufruf durchführen (Erfolg), Token deaktivieren, gleichen Aufruf wiederholen (Ablehnung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -659,7 +698,8 @@ "tracelinks": "StRS-016", "konsolidierung": "nein", "pruefidee": "2FA aktivieren, Anmeldung ohne zweiten Faktor → Ablehnung; mit korrektem RADIUS-Code → Erfolg.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -676,7 +716,8 @@ "tracelinks": "StRS-016, StRS-013, StRS-014", "konsolidierung": "nein", "pruefidee": "Endpunkt mit `[AuthorizeUserRight(X)]` durch Benutzer ohne Recht X aufrufen → 401/403; mit Recht X → Erfolg.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -692,7 +733,8 @@ "tracelinks": "StRS-027, SyRS-011", "konsolidierung": "nein", "pruefidee": "Filialbeschränkter Benutzer sucht Belege anderer Filialen über direkten API-Aufruf (nicht UI) → Ergebnis darf keine fremden Filialbelege enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -709,7 +751,8 @@ "tracelinks": "StRS-001, StRS-003, StRS-005, StRS-007, StRS-008, StRS-010, StRS-011, StRS-018, StRS-023, StRS-024, StRS-025, StRS-026, StRS-029, SwRS-004", "konsolidierung": "Kandidat: Die Legacy-Spiegeltabellen (`Entities/DbEntities/AufKopf.cs` u. a.) führen ein rein numerisches `Status`-Feld (kein Enum) parallel zum modernen `ReceiptState`-Enum – im Zielsystem auf ein einziges Statusmodell konsolidierungsbedürftig.", "pruefidee": "Beleg stornieren, danach Versuch, ihn in einen Folgebeleg zu wandeln → muss vom System verhindert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -725,7 +768,8 @@ "tracelinks": "StRS-001, StRS-005, SwRS-002, SwRS-003", "konsolidierung": "nein", "pruefidee": "Testweise inkonsistente `CanBeForwardedFrom`/`CanBeForwardedInto`-Konfiguration einspielen → Systemstart muss mit `ApplicationException` fehlschlagen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -741,7 +785,8 @@ "tracelinks": "StRS-001, SwRS-005", "konsolidierung": "nein", "pruefidee": "Beleg mehrfach ändern und speichern; Anzahl und Inhalt der Einträge in `KopfVersions` gegen die Änderungshistorie prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-016", @@ -758,7 +803,8 @@ "tracelinks": "-", "konsolidierung": "nein", "pruefidee": "Stichprobenprüfung mehrerer neuerer Tabellen (z. B. `HelpdeskCreationTemplate`) auf Einhaltung aller Konventionspunkte.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-017", @@ -775,7 +821,8 @@ "tracelinks": "-", "konsolidierung": "nein", "pruefidee": "Anwendung mit älterer DB-Version starten und Ausführung aller ausstehenden Skripte in der Konsolenausgabe verifizieren (vgl. Testvorgehen in `docs/guides/database/create-scripts.md`).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-018", @@ -791,7 +838,8 @@ "tracelinks": "StRS-017", "konsolidierung": "nein", "pruefidee": "Lizenz mit `count=0` bzw. abgelaufenem Datum simulieren → betroffene Funktion muss verweigert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-019", @@ -807,7 +855,8 @@ "tracelinks": "-", "konsolidierung": "nein", "pruefidee": "UI-Kultur auf Englisch umstellen, Stichprobe von Dialogen auf vollständige Übersetzung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-020", @@ -823,7 +872,8 @@ "tracelinks": "-", "konsolidierung": "nein", "pruefidee": "Stichprobenprüfung der Byte-Order-Mark in neu committeten `.cs`-Dateien.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-021", @@ -839,7 +889,8 @@ "tracelinks": "StRS-006", "konsolidierung": "nein", "pruefidee": "Testdatei auf konfiguriertem SFTP-Server ablegen, 30-Minuten-Zyklus abwarten, Verarbeitung im `EDIManagementLog` prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-022", @@ -855,7 +906,8 @@ "tracelinks": "StRS-006, SyRS-021", "konsolidierung": "nein", "pruefidee": "Datei erzeugen, die 4-mal hintereinander einen Parsing-Fehler auslöst; fünfter Verarbeitungsversuch darf nicht mehr erfolgen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-023", @@ -871,7 +923,8 @@ "tracelinks": "StRS-015", "konsolidierung": "nein", "pruefidee": "Rechnung mit Reverse-Charge-Position erzeugen; generierte XML muss Tax-Category \"AE\" und den vorgeschriebenen Befreiungstext enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-024", @@ -887,7 +940,8 @@ "tracelinks": "StRS-015, SyRS-023", "konsolidierung": "nein", "pruefidee": "Testrechnung mit künstlicher Summenabweichung von 5,00 erzeugen → ZUGFeRD-Export muss mit Fehler abbrechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-025", @@ -903,7 +957,8 @@ "tracelinks": "-", "konsolidierung": "nein", "pruefidee": "Eine Wartungsaufgabe künstlich zum Fehlschlagen bringen; nachfolgende Aufgaben im selben Zyklus müssen dennoch ausgeführt werden (Log-Analyse).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-026", @@ -919,7 +974,8 @@ "tracelinks": "StRS-006, SyRS-021", "konsolidierung": "nein", "pruefidee": "Webservice ohne verbundenen WPF-Client betreiben; EDI-Abruf muss dennoch planmäßig laufen (Log-Zeitstempel prüfen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-027", @@ -935,7 +991,8 @@ "tracelinks": "StRS-021", "konsolidierung": "nein", "pruefidee": "Termin in Outlook (Exchange Online) ändern, 60s abwarten, Änderung in Nexus/c-entron prüfen; gleichen Test für On-Premise-Exchange wiederholen und Einschränkungen verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-028", @@ -951,7 +1008,8 @@ "tracelinks": "-", "konsolidierung": "nein", "pruefidee": "In DEBUG-Build Mailversand an externe Testadresse auslösen → tatsächlicher Empfänger muss `test@nexoware.com` sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-029", @@ -968,7 +1026,8 @@ "tracelinks": "SyRS-003", "konsolidierung": "nein", "pruefidee": "Lasttest mit hoher Anfragefrequenz gegen einen ungeschützten Webservice-Endpunkt durchführen und Systemverhalten (Verfügbarkeit, Ressourcenverbrauch) beobachten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-030", @@ -984,7 +1043,8 @@ "tracelinks": "SyRS-003", "konsolidierung": "nein", "pruefidee": "Cross-Origin-Testanfrage von einer Fremd-Domain mit gültigem Ticket absetzen und Antwortverhalten (CORS-Header) prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-031", @@ -1002,7 +1062,8 @@ "tracelinks": "SyRS-033", "konsolidierung": "nein", "pruefidee": "Repository-Historie auf enthaltene Zugangsdaten scannen (z. B. mit Secret-Scanning-Tool); Empfehlung: Rotation aller im Repository sichtbaren Geheimnisse.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-032", @@ -1018,7 +1079,8 @@ "tracelinks": "-", "konsolidierung": "nein", "pruefidee": "Vollständige Neuinstallation aller drei Komponenten in einer sauberen Testumgebung durchführen und Aufwand/Abhängigkeiten dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-033", @@ -1035,7 +1097,8 @@ "tracelinks": "SyRS-031, SyRS-032", "konsolidierung": "nein", "pruefidee": "Web-Service unter Ubuntu/Debian gemäß Anleitung installieren und Funktionsumfang gegen Windows-Betrieb vergleichen (insbesondere Sub-Web-Services).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-034", @@ -1052,7 +1115,8 @@ "tracelinks": "-", "konsolidierung": "Kandidat: Parallel gepflegte Azure-DevOps-Pipelines (`azure/*`, `azure-blazor/*`) und neuere GitHub-Actions-Workflows decken teils dieselben Build-/Test-Schritte ab – Konsolidierungskandidat.", "pruefidee": "Pull Request mit Ticketreferenz mergen; Build-Version muss automatisch im referenzierten Ticket hinterlegt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-035", @@ -1068,7 +1132,8 @@ "tracelinks": "SyRS-034", "konsolidierung": "nein", "pruefidee": "Bekannte, absichtlich eingefügte Testschwachstelle in einem Feature-Branch committen und CodeQL-Erkennung im nächsten Lauf prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-036", @@ -1085,7 +1150,8 @@ "tracelinks": "SyRS-034", "konsolidierung": "nein", "pruefidee": "Denselben EndToEnd-Test zweimal hintereinander ausführen und Ergebnisidentität prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-037", @@ -1102,7 +1168,8 @@ "tracelinks": "StRS-010, StRS-018, StRS-019, StRS-020, StRS-021", "konsolidierung": "nein", "pruefidee": "Nexus ohne installierten WPF-Client betreiben und vollständigen Kundenportal-Workflow (StRS-018) end-to-end durchführen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-038", @@ -1118,7 +1185,8 @@ "tracelinks": "StRS-020", "konsolidierung": "nein", "pruefidee": "Add-in gemäß Manifest in Outlook (Desktop und Web) installieren und Grundfunktion (Ticket aus E-Mail erstellen) prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -1134,7 +1202,8 @@ "tracelinks": "SyRS-013, SyRS-015", "konsolidierung": "nein", "pruefidee": "Neues gemeinsames Kopf-Feld in `ReceiptBase` hinzufügen und Sichtbarkeit in allen sieben abgeleiteten Belegtypen ohne Zusatzaufwand prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-002", @@ -1150,7 +1219,8 @@ "tracelinks": "SyRS-013, SyRS-014, SwRS-001", "konsolidierung": "nein", "pruefidee": "Für Belegtyp \"Rechnung\" prüfen, dass `CanBeForwardedInto` ausschließlich `CreditVoucherClass` erlaubt; Versuch, eine Rechnung in einen Auftrag zu wandeln, muss abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-003", @@ -1166,7 +1236,8 @@ "tracelinks": "SyRS-014, SwRS-002", "konsolidierung": "nein", "pruefidee": "Unit-Test: `ValidateConsistency()` mit absichtlich asymmetrischer Testkonfiguration aufrufen → `ApplicationException` erwarten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-004", @@ -1183,7 +1254,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "Kandidat: Konsolidierung von `ReceiptState`-Enum und Legacy-`Status`/`FreigabeStatus`-Feldern zu einem einzigen Statusmodell im Zielsystem.", "pruefidee": "Beleg-Statuswechsel auslösen und beide Felder (`ReceiptState` auf modernem Entity, `Status` in Legacy-Tabelle `AufKopf`) per SQL-Abfrage vergleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-005", @@ -1199,7 +1271,8 @@ "tracelinks": "SyRS-015, SyRS-016", "konsolidierung": "nein", "pruefidee": "Neue Spalte nur in Basistabelle und modernem Entity hinzufügen (bewusst unvollständig) → Speichern über `SaveReceipt*Repository` muss den Wert NICHT persistieren (Nachweis des dokumentierten Fehlerbilds).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-006", @@ -1215,7 +1288,8 @@ "tracelinks": "SyRS-015, SwRS-005", "konsolidierung": "nein", "pruefidee": "End-to-End-Test gemäß Empfehlung der Dokumentation: Feld setzen, speichern, Beleg neu laden, Rohwert in Legacy-Tabelle per SQL prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-007", @@ -1231,7 +1305,8 @@ "tracelinks": "StRS-008, SyRS-013", "konsolidierung": "nein", "pruefidee": "Beleg mit gemischten Steuersätzen (7 %/19 %) anlegen; Summenberechnung je Steuersatzgruppe manuell nachrechnen und mit Systemergebnis vergleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-008", @@ -1247,7 +1322,8 @@ "tracelinks": "StRS-008, SyRS-013, SwRS-007", "konsolidierung": "nein", "pruefidee": "Steuersatzänderung zu einem Stichtag anlegen; Beleg mit Datum vor und nach dem Stichtag erzeugen und jeweils angewandten Steuersatz prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-009", @@ -1263,7 +1339,8 @@ "tracelinks": "StRS-003, StRS-004", "konsolidierung": "nein", "pruefidee": "Vertrag mit Kontingent 10h anlegen, 4h verbrauchen, Position nachträglich auf 6h Verbrauch ändern; Kontingentsaldo muss korrekt auf 4h Rest aktualisiert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-010", @@ -1279,7 +1356,8 @@ "tracelinks": "StRS-004, SwRS-011", "konsolidierung": "nein", "pruefidee": "Rechnung für RMM-Vertrag mit Platzhalter `@@RMMArtikel@@` im Textbaustein erzeugen; RMM-Position muss exakt an der Platzhalterstelle erscheinen und der Platzhaltertext entfernt sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -1295,7 +1373,8 @@ "tracelinks": "StRS-004, SwRS-010", "konsolidierung": "nein", "pruefidee": "RMM-Dienst in Testumgebung deaktivieren, Rechnungserstellung für Vertrag mit RMM-Artikelreferenz auslösen → Erstellung muss mit definierter Fehlermeldung abbrechen, keine Rechnung darf im System entstehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -1311,7 +1390,8 @@ "tracelinks": "StRS-013, SwRS-014", "konsolidierung": "nein", "pruefidee": "Kunde mit Rechnungen unterschiedlicher Überfälligkeit anlegen, Mahnlauf ausführen, korrekte Mahnstufenzuordnung und Textvariablen prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-013", @@ -1327,7 +1407,8 @@ "tracelinks": "StRS-013, StRS-014, SyRS-011", "konsolidierung": "Kandidat: identisches Rechteschutz-Idiom in Dunning und Opos – im Zielsystem als gemeinsamer Decorator/Cross-Cutting-Concern (z. B. Attribut) statt Code-Duplikation umsetzbar.", "pruefidee": "BL-Methode `RunDunning`/`RunOpos` direkt (unter Umgehung der UI) mit einem Benutzer ohne Recht aufrufen → Exception muss geworfen werden, kein Lauf darf erzeugt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-014", @@ -1344,7 +1425,8 @@ "tracelinks": "StRS-016, SyRS-011", "konsolidierung": "nein", "pruefidee": "Statische Codeprüfung: Keine direkte numerische Rechte-ID (Literal) in einem `HasUserRight`-Aufruf ohne `UserRightsConst`-Referenz.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-015", @@ -1360,7 +1442,8 @@ "tracelinks": "StRS-016, SwRS-014, SwRS-016", "konsolidierung": "nein", "pruefidee": "Benutzer zwei Gruppen mit unterschiedlichen Rechten zuordnen; `GetRightsFromCurrentUser` muss die Vereinigungsmenge beider Gruppenrechte liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-016", @@ -1376,7 +1459,8 @@ "tracelinks": "StRS-016, SwRS-015, SyRS-017", "konsolidierung": "nein", "pruefidee": "Neues Recht per `AddRightIfNotExists` unterhalb eines bestehenden Elternrechts anlegen; `NumChildren` des Elternrechts muss automatisch um 1 erhöht sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-017", @@ -1392,7 +1476,8 @@ "tracelinks": "SyRS-007", "konsolidierung": "nein", "pruefidee": "Anfrage mit manipuliertem/gefälschtem Ticket senden → 401; erfolgreiche Anfrage im Audit-Log mit korrekter IP/Methode wiederfinden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-018", @@ -1408,7 +1493,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "E-Mail-Adresse des verknüpften Microsoft-Kontos ändern; Anmeldung muss weiterhin denselben c-entron-Benutzer zuordnen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-019", @@ -1424,7 +1510,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Manipuliertes JWT (falsche Signatur, abgelaufen, wiederverwendet) gegen `POST /jwt/login` senden → Ablehnung in allen drei Fällen, mit Log-Eintrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-020", @@ -1440,7 +1527,8 @@ "tracelinks": "SyRS-009", "konsolidierung": "nein", "pruefidee": "Access Token erstellen, erfolgreichen API-Aufruf durchführen, Token per `PUT {id}/deactivate` deaktivieren, identischen Aufruf wiederholen → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-021", @@ -1456,7 +1544,8 @@ "tracelinks": "StRS-017, SyRS-018", "konsolidierung": "nein", "pruefidee": "Lizenz-GUID, die nur in `LicenseGuids.cs`, nicht aber in `ApplicationKind.cs` gelistet ist, für einen Login-Versuch verwenden → Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-022", @@ -1472,7 +1561,8 @@ "tracelinks": "SyRS-016", "konsolidierung": "Kandidat: Doppelte Konfigurationsablage (`Stammdat` vs. `ApplicationSettings`) ist ein expliziter Migrationskandidat für das Zielsystem.", "pruefidee": "Neue Einstellung mit nächster freier ID gemäß Kommentar in `ApplicationSettingID.cs` anlegen, Lese-/Schreibzugriff über `AppSettingsBL` prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-023", @@ -1488,7 +1578,8 @@ "tracelinks": "SyRS-017", "konsolidierung": "nein", "pruefidee": "Anwendung zweimal hintereinander gegen dieselbe (bereits migrierte) Datenbank starten; zweiter Start darf keine SQL-Fehler und keine erneuten Schemaänderungen erzeugen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-024", @@ -1505,7 +1596,8 @@ "tracelinks": "SyRS-016", "konsolidierung": "nein", "pruefidee": "Neue Entität ohne explizite Längenangabe in einem Mapping anlegen und Abweichung vom tatsächlichen DB-Schema als Codereview-Fehler identifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-025", @@ -1522,7 +1614,8 @@ "tracelinks": "SyRS-016", "konsolidierung": "nein", "pruefidee": "Alle Verwendungsstellen von `RawSqlAccessDAO`/`GenericStoredProcedureDAO` auf konsequente Parametrisierung prüfen (keine Stringverkettung von Benutzereingaben).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-026", @@ -1538,7 +1631,8 @@ "tracelinks": "StRS-006, SyRS-021", "konsolidierung": "nein", "pruefidee": "EDI-Datei im ALSO-CH-Format mit Swiss-ESR-Code verarbeiten und prüfen, dass andere Lieferantenformate (z. B. Herweck) unverändert funktionieren (Regressionstest).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-027", @@ -1554,7 +1648,8 @@ "tracelinks": "SwRS-026", "konsolidierung": "nein", "pruefidee": "Lieferantenkonfiguration mit zwei unterschiedlichen `EdiDataType`/`ObjectKind`-Kombinationen anlegen und getrennte, korrekte Verarbeitung beider Dokumentarten prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-028", @@ -1570,7 +1665,8 @@ "tracelinks": "SyRS-022", "konsolidierung": "nein", "pruefidee": "Testdatei erzeugen, die 4-mal hintereinander eine Exception auslöst; Datei darf beim 5. Downloadzyklus nicht mehr verarbeitet werden, bleibt aber im Log sichtbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-029", @@ -1586,7 +1682,8 @@ "tracelinks": "StRS-015, SyRS-023, SyRS-024", "konsolidierung": "nein", "pruefidee": "Rechnung mit Skonto-Zahlungsbedingung erzeugen; generierte XML muss BR-DE-18-konforme Skonto-Beschreibung inkl. korrekter Zeilenumbrüche (` `) enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-030", @@ -1602,7 +1699,8 @@ "tracelinks": "StRS-015", "konsolidierung": "Kandidat: ZUGFeRD- (SwRS-029) und ebInterface-Export (SwRS-030) bilden zwei unabhängige Implementierungen für die fachlich verwandte Aufgabe \"elektronische Rechnung erzeugen\" – im Zielsystem auf eine gemeinsame E-Invoicing-Abstraktion mit länderspezifischen Profilen konsolidierbar.", "pruefidee": "Rechnung exportieren und resultierende XML gegen das ebInterface-4.3-XSD-Schema validieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-031", @@ -1618,7 +1716,8 @@ "tracelinks": "StRS-021, SyRS-027", "konsolidierung": "nein", "pruefidee": "Einzelnen Termin in Outlook ändern und Netzwerkverkehr/Log des nächsten Sync-Zyklus prüfen: nur der geänderte Termin darf übertragen werden, nicht der gesamte Kalender.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-032", @@ -1634,7 +1733,8 @@ "tracelinks": "StRS-021, SwRS-031", "konsolidierung": "nein", "pruefidee": "Helpdesk-Zeittermin in c-entron anlegen, Sync abwarten, Termin in Outlook manuell auf anderes Datum ändern, erneut synchronisieren → c-entron-Datensatz muss unverändert bleiben (siehe StRS-021 Prüfidee).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-033", @@ -1650,7 +1750,8 @@ "tracelinks": "SyRS-025", "konsolidierung": "nein", "pruefidee": "Fehlende `AccountI3D`-Zuordnung in einem Todo-Eintrag künstlich erzeugen; nach einem Ausführungszyklus muss `ToDoBL.DataQualityFillAccountI3D()` den Wert korrigiert haben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-034", @@ -1666,7 +1767,8 @@ "tracelinks": "StRS-016, StRS-017, SyRS-011, SwRS-021", "konsolidierung": "nein", "pruefidee": "Modul mit Recht X und Lizenz Y konfigurieren; Benutzer mit Recht, aber ohne Lizenz → Modul nicht sichtbar; Benutzer mit Lizenz, aber ohne Recht → Modul nicht sichtbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-035", @@ -1682,7 +1784,8 @@ "tracelinks": "SyRS-028", "konsolidierung": "nein", "pruefidee": "In DEBUG-Konfiguration Mailversand an fiktive externe Adresse `kunde@fremdefirma.de` auslösen; tatsächlicher SMTP-Empfänger muss `test@nexoware.com` sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-036", @@ -1698,7 +1801,8 @@ "tracelinks": "SyRS-004", "konsolidierung": "nein", "pruefidee": "Neue Testmethode mit `[WebInvoke(UriTemplate=\"TestPing\")]` hinzufügen, Neustart des Hosts, Aufruf von `/REST/TestPing` ohne weitere Codeänderung muss funktionieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-037", @@ -1714,7 +1818,8 @@ "tracelinks": "SyRS-002", "konsolidierung": "nein", "pruefidee": "Endpunkt mit provozierter NullReferenceException aufrufen (Produktionsmodus) → Antwort darf keinen Stacktrace enthalten, Fehler muss im Log erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-038", @@ -1730,6 +1835,7 @@ "tracelinks": "SyRS-016", "konsolidierung": "Kandidat: Doppelte Soft-Delete-Modellierung – generisches `DBEntity.State` (StateEnum, ältere Entitäten) versus das in `docs/guides/database/database-conventions.md` beschriebene, neuere `IsDeleted`/`DeletedByI3D`/`DeletedDate`-Spaltenmuster (neue Tabellen). Im Zielsystem auf ein einheitliches Muster konsolidierbar.", "pruefidee": "Entität löschen (Soft Delete), per SQL prüfen, dass der Datensatz weiterhin existiert mit `State=1`; reguläre fachliche Abfrage darf den Datensatz nicht mehr zurückliefern.", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_142932_v2.0.1-5dc4/_meta/anforderungen.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_142932_v2.0.1-5dc4/_meta/anforderungen.md index 6af7c7ff..4c148079 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_142932_v2.0.1-5dc4/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_142932_v2.0.1-5dc4/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 89 (84,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **verletzt** – 1 von 43 ungedeckt: SyRS-035 | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 97 von 106 mit Tracelinks (91,5 %) | diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_150517_v2.1.0-acab/Protokoll.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_150517_v2.1.0-acab/Protokoll.md index 44598446..a3567c67 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_150517_v2.1.0-acab/Protokoll.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_150517_v2.1.0-acab/Protokoll.md @@ -94,6 +94,8 @@ in allen Vorläufen klafften sie deutlich auseinander. Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -126,6 +128,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 54 (98,2 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -143,6 +149,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (37 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 55 von 55 mit Tracelinks (100,0 %) | ## Vergleich aller Läufe (identischer Prompt) diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_150517_v2.1.0-acab/_meta/anforderungen.json b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_150517_v2.1.0-acab/_meta/anforderungen.json index 708f7ba9..aab38a09 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_150517_v2.1.0-acab/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_150517_v2.1.0-acab/_meta/anforderungen.json @@ -14,7 +14,8 @@ "tracelinks": "SyRS-1, SyRS-4, SwRS-1, SwRS-2", "konsolidierung": "nein", "pruefidee": "Einem Benutzer wird ein Recht ausschließlich über Gruppenmitgliedschaft zugewiesen; Entfernen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-2", @@ -30,7 +31,8 @@ "tracelinks": "SyRS-1, SwRS-3", "konsolidierung": "nein", "pruefidee": "Benutzer mit MANAGE_RIGHTS_ONLY_OWN_BRANCH versucht Gruppe einer fremden Filiale zu löschen;", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-3", @@ -46,7 +48,8 @@ "tracelinks": "SyRS-4, SwRS-3", "konsolidierung": "nein", "pruefidee": "Nach AddRightToRightGroup existiert ein neuer AppRightLog-Eintrag mit Kind=AddRightToGroup.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-4", @@ -62,7 +65,8 @@ "tracelinks": "SyRS-2, SwRS-6", "konsolidierung": "nein", "pruefidee": "Kunde ohne Lizenz für Modul X: LicenseManager.HasLicense(X) liefert false, UI blendet Modul X aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-5", @@ -79,7 +83,8 @@ "tracelinks": "SyRS-7, SyRS-8, SwRS-8", "konsolidierung": "nein", "pruefidee": "Für jeden der sieben Belegtypen existiert eine Entity-Klasse, die von ReceiptBase erbt und", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-6", @@ -96,7 +101,8 @@ "tracelinks": "SyRS-10, SwRS-11, SwRS-12", "konsolidierung": "nein", "pruefidee": "Beleg wird zweimal gespeichert (Version 1 → 2); GetReceiptVersionByI3D(..., version:1) liefert", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-7", @@ -112,7 +118,8 @@ "tracelinks": "SyRS-8, SwRS-9", "konsolidierung": "nein", "pruefidee": "Benutzer A lädt Beleg (Guid=X), Benutzer B speichert denselben Beleg zuerst (Guid ändert", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-8", @@ -128,7 +135,8 @@ "tracelinks": "SyRS-9, SyRS-11, SwRS-8, SwRS-10", "konsolidierung": "nein", "pruefidee": "Setzen von isPaid=true auf einem aktiven Beleg ändert dessen State auf Completed; erneutes", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-9", @@ -145,7 +153,8 @@ "tracelinks": "SyRS-12, SyRS-13, SwRS-13, SwRS-14", "konsolidierung": "nein", "pruefidee": "Vertrag mit CalculationKind=Auto, State=aktiv, fälligem Intervall und mind. einer abrechenbaren", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-10", @@ -161,7 +170,8 @@ "tracelinks": "SyRS-12, SwRS-13", "konsolidierung": "nein", "pruefidee": "Zwei sonst identische Verträge mit CalculationKind=Auto bzw. =Need: nur der Auto-Vertrag wird", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-11", @@ -177,7 +187,8 @@ "tracelinks": "SyRS-14, SwRS-15", "konsolidierung": "nein", "pruefidee": "Rechnung mit DunningLevel=Level1 und Restbetrag > 0 erscheint in", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-12", @@ -193,7 +204,8 @@ "tracelinks": "SyRS-15, SwRS-16", "konsolidierung": "nein", "pruefidee": "Belegposition mit Belegdatum vor einer historischen Steuersatzänderung liefert den alten", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-13", @@ -209,7 +221,8 @@ "tracelinks": "SyRS-16, SwRS-17", "konsolidierung": "nein", "pruefidee": "Ein Account-Datensatz mit gesetzter CustomerNumber UND SupplierNumber lässt sich anlegen und", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-14", @@ -226,7 +239,8 @@ "tracelinks": "SyRS-17, SwRS-18", "konsolidierung": "Kandidat: StRS-1 (gleiches zugrundeliegendes Rechtesystem, hier auf ein einzelnes Feld", "pruefidee": "Benutzer ohne CAN_CHANGE_DATE-Recht öffnet Timer-Billing-Einstellungen: Datumsfeld ist", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-15", @@ -242,7 +256,8 @@ "tracelinks": "SyRS-18, SwRS-19", "konsolidierung": "nein", "pruefidee": "Anlegen eines neuen HelpdeskState-Datensatzes mit IsInternalCompanyBillingActive=false; Tickets", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-16", @@ -258,7 +273,8 @@ "tracelinks": "SyRS-19, SwRS-20", "konsolidierung": "nein", "pruefidee": "`docker compose up` im Verzeichnis docker/compose startet alle vier Dienste; der Webservice", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-1", @@ -275,7 +291,8 @@ "tracelinks": "StRS-1, SwRS-1, SwRS-2", "konsolidierung": "nein", "pruefidee": "Direkter (simulierter) Aufruf einer BL-Methode ohne vorherige UI-Prüfung mit einem Benutzer", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-2", @@ -291,7 +308,8 @@ "tracelinks": "StRS-1, SwRS-1", "konsolidierung": "nein", "pruefidee": "Web-Account mit Recht X, aber ohne entsprechendes internes Sichtrus-Recht, wird bei HasWebAccountRight(X)", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-3", @@ -307,7 +325,8 @@ "tracelinks": "StRS-2, SwRS-3", "konsolidierung": "nein", "pruefidee": "Löschversuch der Gruppe I3D=6 liefert Result.Error \"Die Adminstratoren Gruppe darf nicht", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-4", @@ -323,7 +342,8 @@ "tracelinks": "StRS-3, SwRS-3", "konsolidierung": "nein", "pruefidee": "Für jede der acht Schreibmethoden existiert im Code ein zugehöriger, unbedingter WriteXxxLog-Aufruf", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-5", @@ -339,7 +359,8 @@ "tracelinks": "StRS-4, SwRS-6", "konsolidierung": "nein", "pruefidee": "Login mit abgelaufener Lizenzversion liefert Result.Error; Login, der die maximale", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-6", @@ -356,7 +377,8 @@ "tracelinks": "StRS-4, SwRS-6", "konsolidierung": "nein", "pruefidee": "Webservice-Start ohne gültige Centron-Lizenz: Startvorgang bricht ab, bevor Migrationsskripte", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-7", @@ -372,7 +394,8 @@ "tracelinks": "StRS-5, StRS-7, SwRS-9", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Bearbeitungsrecht für Rechnungen versucht, eine Rechnung zu speichern; Result", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-8", @@ -388,7 +411,8 @@ "tracelinks": "StRS-7, SwRS-9", "konsolidierung": "Kandidat: SyRS-9 (verwandter Zustands-Schutzmechanismus)", "pruefidee": "Zwei parallele Ladevorgänge desselben Belegs, sequentielle Speicherversuche: der zweite", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-9", @@ -404,7 +428,8 @@ "tracelinks": "StRS-5, SwRS-8, SwRS-10", "konsolidierung": "nein", "pruefidee": "UpdateReceiptIsPaid auf einem Beleg mit State=Canceled liefert Result.Error unabhängig vom", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-10", @@ -420,7 +445,8 @@ "tracelinks": "StRS-6, SwRS-11, SwRS-12", "konsolidierung": "nein", "pruefidee": "Für jeden der sieben Belegtypen: Speichern einer Änderung erzeugt einen neuen Versionsdatensatz", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-11", @@ -436,7 +462,8 @@ "tracelinks": "StRS-8", "konsolidierung": "nein", "pruefidee": "Benutzer mit ausschließlich INCOMING_PAYMENT_TRANSACTIONS (kein allgemeines Bearbeitungsrecht):", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-12", @@ -452,7 +479,8 @@ "tracelinks": "StRS-9, SwRS-13, SwRS-14", "konsolidierung": "nein", "pruefidee": "Aktiver Vertrag ohne Vertragspositionen wird trotz fälligem Intervall NICHT in die finale", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-13", @@ -468,7 +496,8 @@ "tracelinks": "StRS-9, StRS-10", "konsolidierung": "nein", "pruefidee": "Dynamischer Bedarfsvertrag ohne Sonderartikel-Stichtag im Abrechnungszeitraum wird aus der", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-14", @@ -484,7 +513,8 @@ "tracelinks": "StRS-11, SwRS-15", "konsolidierung": "nein", "pruefidee": "Setzen einer Mahnsperre mit dunningStopEnd in der Zukunft: das Objekt wird im nächsten", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-15", @@ -500,7 +530,8 @@ "tracelinks": "StRS-12, SwRS-16", "konsolidierung": "nein", "pruefidee": "Kette mit Steuersatz A (gültig bis 30.06.), Nachfolger B (ab 01.07.): receiptDate=15.06.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-16", @@ -517,7 +548,8 @@ "tracelinks": "StRS-13, SwRS-17", "konsolidierung": "Kandidat: SyRS-1 (gleiches zugrundeliegendes Rechteprüfungsmuster CheckRightsFromUser,", "pruefidee": "Benutzer mit ausschließlich EDIT_CUSTOMER: Bearbeiten eines bestehenden Kunden gelingt,", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-17", @@ -533,7 +565,8 @@ "tracelinks": "StRS-14, SwRS-18", "konsolidierung": "nein", "pruefidee": "Benutzer mit DeliveryList.CAN_CHANGE_DATE, aber ohne Invoice.CAN_CHANGE_DATE:", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-18", @@ -549,7 +582,8 @@ "tracelinks": "StRS-15, SwRS-19", "konsolidierung": "Kandidat: SwRS-8 (gegensätzliches Muster: Belegstatus fest vs. Ticketstatus konfigurierbar –", "pruefidee": "Ein neuer HelpdeskState-Datensatz ist über die Rechteverwaltungs-/Admin-UI anlegbar und", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-19", @@ -566,7 +600,8 @@ "tracelinks": "StRS-16, SwRS-20", "konsolidierung": "nein", "pruefidee": "Webservice-Container basierend auf einem Linux-Basisimage startet erfolgreich und beantwortet", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-1", @@ -582,7 +617,8 @@ "tracelinks": "SyRS-1", "konsolidierung": "Kandidat: SwRS-2 (ähnlicher Cache-Mechanismus für Web-Account-Rechte, HasWebAccountRight)", "pruefidee": "Zwei aufeinanderfolgende HasUserRight-Aufrufe für denselben Benutzer in derselben Session:", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-2", @@ -599,7 +635,8 @@ "tracelinks": "SyRS-1", "konsolidierung": "Kandidat: SwRS-1", "pruefidee": "Aufruf mit 5 Recht-IDs, von denen der Benutzer 3 besitzt, liefert eine Liste mit genau", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-3", @@ -615,7 +652,8 @@ "tracelinks": "SyRS-3, SyRS-4", "konsolidierung": "nein", "pruefidee": "Zuweisungsversuch eines Rechts mit I3D, das nicht in der Liste enthalten ist, an die", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-4", @@ -632,7 +670,8 @@ "tracelinks": "SyRS-1", "konsolidierung": "nein", "pruefidee": "Ausführen eines Migrationsskripts mit AddRightIfNotExists erzeugt einen neuen Sichrech-Datensatz", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-5", @@ -648,7 +687,8 @@ "tracelinks": "(kein direkter StRS/SyRS-Bezug – reine Entwicklungssicherheitsmaßnahme, kein Fachprozess)", "konsolidierung": "nein", "pruefidee": "Debug-Build, Versand an \"kunde@fremdefirma.de\": tatsächlicher SMTP-Empfänger ist", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-6", @@ -664,7 +704,8 @@ "tracelinks": "SyRS-5, SyRS-6", "konsolidierung": "nein", "pruefidee": "Zweiter Aufruf von Initialize() in derselben Prozessinstanz löst eine Exception aus;", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-7", @@ -680,7 +721,8 @@ "tracelinks": "SyRS-5", "konsolidierung": "nein", "pruefidee": "Login mit Version \"9.3.40.2\" und Centron-Lizenz-GUID wird nicht wegen Versionsüberschreitung", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-8", @@ -696,7 +738,8 @@ "tracelinks": "StRS-5, SyRS-9", "konsolidierung": "nein", "pruefidee": "Kompilierzeitprüfung/Reflection: ReceiptState besitzt genau die drei genannten Werte.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-9", @@ -712,7 +755,8 @@ "tracelinks": "SyRS-7, StRS-7", "konsolidierung": "nein", "pruefidee": "Für zwei verschiedene Belegtypen mit unterschiedlichen HasRightToEditReceipt-Implementierungen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-10", @@ -728,7 +772,8 @@ "tracelinks": "StRS-8, SyRS-9", "konsolidierung": "nein", "pruefidee": "isPaid=true auf einem Active-Beleg: State wird Completed; isPaid=false auf einem", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-11", @@ -744,7 +789,8 @@ "tracelinks": "StRS-6, SyRS-10", "konsolidierung": "nein", "pruefidee": "Versuch, aus einer historischen Version mit aktiven Barcodes eine neue Version zu erzeugen,", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-12", @@ -761,7 +807,8 @@ "tracelinks": "StRS-6, SyRS-10", "konsolidierung": "nein", "pruefidee": "Neues Feld wird nur der modernen Entity/Mapping hinzugefügt, nicht dem Repository: Wert wird", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-13", @@ -777,7 +824,8 @@ "tracelinks": "SyRS-12, StRS-10", "konsolidierung": "nein", "pruefidee": "Vertrag mit LastPaidDate >= ContractEnd und CalculationKind=Auto wird NICHT selektiert", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-14", @@ -793,7 +841,8 @@ "tracelinks": "SyRS-12", "konsolidierung": "nein", "pruefidee": "Abrechnungslauf mit > 2000 abrechnungsfähigen Verträgen schlägt nicht mit einem", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-15", @@ -809,7 +858,8 @@ "tracelinks": "StRS-11, SyRS-14", "konsolidierung": "nein", "pruefidee": "Rechnung mit GrossPriceComplete=1000, PayedGrossAmount=300, CreditVoucherGrossAmount=100:", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-16", @@ -825,7 +875,8 @@ "tracelinks": "StRS-12, SyRS-15", "konsolidierung": "nein", "pruefidee": "Aufruf mit einer nicht existierenden taxRateI3D liefert nicht null, sondern den", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-17", @@ -841,7 +892,8 @@ "tracelinks": "StRS-13, SyRS-16", "konsolidierung": "nein", "pruefidee": "Mit aktivierter Einstellung: neu angelegter Kunde mit Nummer 4711 erhält BookKeepingNumber", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-18", @@ -857,7 +909,8 @@ "tracelinks": "StRS-14, SyRS-17", "konsolidierung": "nein", "pruefidee": "ReceiptKind=InvoiceClass, CanChangeDateInInvoices=false: BillingDateIsEnabled=false,", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-19", @@ -873,7 +926,8 @@ "tracelinks": "StRS-15, SyRS-18", "konsolidierung": "nein", "pruefidee": "Zwei HelpdeskState-Datensätze mit unterschiedlichem ServiceBoardWebColor erscheinen im", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-20", @@ -889,6 +943,7 @@ "tracelinks": "StRS-16, SyRS-19", "konsolidierung": "nein", "pruefidee": "Manuelles Beenden des webservice-Containers: Compose startet ihn automatisch neu, ohne dass", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_150517_v2.1.0-acab/_meta/anforderungen.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_150517_v2.1.0-acab/_meta/anforderungen.md index 072fcc07..8a26e8e1 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_150517_v2.1.0-acab/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_150517_v2.1.0-acab/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -34,6 +36,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 54 (98,2 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -51,5 +57,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (37 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 55 von 55 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_153529_v2.1.1-db12/Protokoll.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_153529_v2.1.1-db12/Protokoll.md index c1ccdfd7..7bc0ad6a 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_153529_v2.1.1-db12/Protokoll.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_153529_v2.1.1-db12/Protokoll.md @@ -102,6 +102,8 @@ Faktor 21,6 die größte aller Läufe – nahezu die gesamte Arbeit fand in den Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -138,6 +140,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 311 (95,7 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -155,6 +161,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (100 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 325 von 325 mit Tracelinks (100,0 %) | ## Vergleich aller Läufe (identischer Prompt, SHA-256 unverändert) diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_153529_v2.1.1-db12/_meta/anforderungen.json b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_153529_v2.1.1-db12/_meta/anforderungen.json index 7b2b6467..244ec990 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_153529_v2.1.1-db12/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_153529_v2.1.1-db12/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-ARCH-02, SyRS-ARCH-13, SyRS-ARCH-15", "konsolidierung": "nein", "pruefidee": "Klären, ob Lizenzprüfung offline (Dongle/Cache) funktionsfähig bleibt und wie oft synchronisiert wird (`FileLicenseCache`, `UpdateLicenseInterval`).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-ARCH-02", @@ -33,7 +34,8 @@ "tracelinks": "SyRS-ARCH-08, SyRS-ARCH-11, SyRS-ARCH-14, SyRS-ARCH-17", "konsolidierung": "nein", "pruefidee": "Abgleich mit Kunden-Systemvoraussetzungsdokument (falls vorhanden) auf weitere Hardware-/Software-Voraussetzungen (z.B. Terminalserver-Freigabe).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-ARCH-03", @@ -51,7 +53,8 @@ "tracelinks": "SyRS-ARCH-09", "konsolidierung": "nein", "pruefidee": "Produktentscheidung/Product Owner befragen, ob Englisch-Support als Geschäftsziel für die Web-Neuimplementierung gilt (aktuell nur \"verstecktes\" Dev-Feature).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-ARCH-04", @@ -69,7 +72,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Klären, ob \"Mandant\" hier = rechtlich eigenständige Gesellschaft (mit eigener Buchhaltung) oder nur Organisationseinheit ist; Datenmodell (MandantI3D-Spalten) verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-ARCH-05", @@ -86,7 +90,8 @@ "tracelinks": "SyRS-ARCH-16", "konsolidierung": "nein", "pruefidee": "Architektur von \"c-entron Nexus\" (separates Blazor-Projekt laut README-Kontext \"azure-blazor\") im Detail untersuchen — ggf. eigener Cluster/Repository-Bereich außerhalb des hier untersuchten Scopes.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-ARCH-06", @@ -102,7 +107,8 @@ "tracelinks": "SyRS-ARCH-01", "konsolidierung": "nein", "pruefidee": "Mit Produktmanagement klären, welche dieser Anwendungen im Rahmen der SaaS-Neuimplementierung migriert/integriert werden müssen vs. weiterhin als separate Legacy-Clients bestehen bleiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SEC-01", @@ -119,7 +125,8 @@ "tracelinks": "SyRS-SEC-01, SyRS-SEC-02, SyRS-SEC-03, SyRS-SEC-04, SyRS-SEC-13, SyRS-SEC-14", "konsolidierung": "nein", "pruefidee": "Prüfen, ob im Zielsystem beide Identitätsklassen (Mitarbeiter, Kunde) weiterhin getrennt modelliert werden müssen oder ob ein einheitliches Identity-Modell mit Rollenattribut ausreicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SEC-02", @@ -136,7 +143,8 @@ "tracelinks": "SyRS-SEC-04, SwRS-SEC-01, SwRS-SEC-02", "konsolidierung": "nein", "pruefidee": "Klären, ob im SaaS-Zielsystem weiterhin Gruppen als einzige Rechteträger dienen sollen oder zusätzlich direkte Nutzer-Overrides (Allow/Deny) benötigt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SEC-03", @@ -153,7 +161,8 @@ "tracelinks": "SwRS-SEC-01, SwRS-SEC-02", "konsolidierung": "nein", "pruefidee": "Ermitteln, wie viele \"nur eigene\"/\"nur eigene Filiale\"-Rechte insgesamt existieren (Sichrech-Auswertung) und ob dieses Muster generisch (z. B. Row-Level-Security/Policy Engine) statt Recht-für-Recht abgebildet werden kann.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SEC-04", @@ -170,7 +179,8 @@ "tracelinks": "SwRS-SEC-01, SwRS-SEC-02", "konsolidierung": "nein", "pruefidee": "Verifizieren, ob Namensvergleich (\"Administratoren\") als Sicherheitskriterium zuverlässig ist (Umbenennungsrisiko) oder nur der I3D-Vergleich sicherheitsrelevant sein sollte.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SEC-05", @@ -186,7 +196,8 @@ "tracelinks": "SyRS-SEC-07, SyRS-SEC-08, SyRS-SEC-09, SwRS-SEC-05", "konsolidierung": "nein", "pruefidee": "Klären, ob im Zielsystem TOTP/App-basierte 2FA (wie im separaten Passwort-Manager-Verfahren, siehe SwRS-SEC-05) als drittes gleichwertiges Verfahren für den Login ergänzt werden soll.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SEC-06", @@ -203,7 +214,8 @@ "tracelinks": "SyRS-SEC-10", "konsolidierung": "nein", "pruefidee": "Prüfen, ob Redirect-/Consent-Flow und Token-Validierung 1:1 in eine Web-/SaaS-Neuimplementierung (z. B. mit Standard-OIDC-Middleware) übernommen werden können.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SEC-07", @@ -220,7 +232,8 @@ "tracelinks": "SyRS-SEC-11, SyRS-SEC-12", "konsolidierung": "nein", "pruefidee": "Klären, ob Lizenzprüfung im SaaS-Modell durch Tenant-/Subscription-Feature-Flags ersetzt wird und ob die doppelte Prüfung (Lizenz UND Recht) beibehalten werden soll.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-CRM-01", @@ -237,7 +250,8 @@ "tracelinks": "SyRS-CRM-03", "konsolidierung": "nein", "pruefidee": "Klärung mit Fachbereich, ob Lieferanten je gesperrt werden können und wie das aktuell (ohne `Locked`-Feld) gehandhabt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-CRM-02", @@ -254,7 +268,8 @@ "tracelinks": "SwRS-CRM-08 (kein SyRS-Zwischenschritt im Cluster vorhanden – Lücke auf SyRS-Ebene)", "konsolidierung": "Kandidat: SwRS-CRM-08, StRS-CRM-03 (gemeinsames Thema DSGVO-Datenlöschung/-bereinigung)", "pruefidee": "DSGVO-Löschung einer Testkontaktperson auslösen; prüfen, dass alle genannten Felder geleert sind, `IsDsgvoDeleted=true` gesetzt ist und ein lesbares Protokoll erzeugt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-CRM-03", @@ -271,7 +286,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: StRS-CRM-02, SwRS-CRM-08 (gemeinsames Thema DSGVO-Datenlöschung/-bereinigung)", "pruefidee": "Statistikabruf mit und ohne Recht `ACCESS_CLEANUP_DATABASE` testen; Feature-Flag deaktivieren und Verhalten prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-CRM-04", @@ -288,7 +304,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein (explizit abgegrenzt von SyRS-CRM-05: dort nur technische Login-Namen-Eindeutigkeit, keine fachliche Geschäftspartner-Dublette)", "pruefidee": "Fachbereich befragen, ob Dublettenbereinigung ggf. über ein separates, hier nicht durchsuchtes Modul (z. B. externes Datenqualitäts-Tool) erfolgt, das nicht Teil von `Centron.BL` ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SALES-01", @@ -305,7 +322,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke) - keine eigenständige SyRS-/SwRS-Anforderung in diesem Cluster elaboriert die technische Umsetzung separat.", "konsolidierung": "nein", "pruefidee": "Angebot ohne Klassifizierung speichern → Fehler zu fehlenden Feldern ProjectEnd/ProductGroupClassification/ProbabilityClassification.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SALES-02", @@ -323,7 +341,8 @@ "tracelinks": "SyRS-SALES-12 - Begründung: SyRS-SALES-12 (Rückspiegelung Liefertermin bei Direktlieferung) konkretisiert den Direktlieferungs-Sonderfall, den die BVL filtert/bearbeitet.", "konsolidierung": "nein", "pruefidee": "BVL für Artikel mit offenem Bedarf aus mehreren Aufträgen aufrufen, Direktlieferungs-Flag einer Position entfernen und Persistenz prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-BILL-01", @@ -340,7 +359,8 @@ "tracelinks": "SyRS-BILL-06, SyRS-BILL-07, SyRS-BILL-08, SyRS-BILL-09, SyRS-BILL-10, SyRS-BILL-11, SyRS-BILL-12, SyRS-BILL-17, SyRS-BILL-19", "konsolidierung": "nein", "pruefidee": "Export einer Rechnung ohne und mit Leitweg-ID durchführen, resultierendes Dateiformat/-schema prüfen (KOSIT-Validator)", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-BILL-02", @@ -357,7 +377,8 @@ "tracelinks": "SyRS-BILL-13, SyRS-BILL-14, SyRS-BILL-15", "konsolidierung": "nein", "pruefidee": "Testvertrag mit monatlichem Intervall anlegen, automatische Abrechnung anstoßen, Rechnungsperiode/-betrag verifizieren", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-BILL-03", @@ -374,7 +395,8 @@ "tracelinks": "SyRS-BILL-16, SwRS-BILL-01", "konsolidierung": "nein", "pruefidee": "Kunde mit LockOrderAfterDunningLevel=2 und aktueller Mahnstufe 2 anlegen, Versuch neuen Auftrag zu erstellen -> erwartete Fehlermeldung", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-BILL-04", @@ -390,7 +412,8 @@ "tracelinks": "SyRS-BILL-01, SyRS-BILL-02, SyRS-BILL-03, SyRS-BILL-04, SyRS-BILL-05, SyRS-BILL-18, SyRS-BILL-20, SwRS-BILL-02, SwRS-BILL-05", "konsolidierung": "nein", "pruefidee": "Testrechnung exportieren (BookKeepingExportBL) und danach Stornoversuch -> Fehlermeldung \"...bereits exportiert wurde.\" erwarten", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-TIME-01", @@ -407,7 +430,8 @@ "tracelinks": "SyRS-TIME-03, SyRS-TIME-04, SyRS-TIME-05, SyRS-TIME-06, SyRS-TIME-09", "konsolidierung": "nein", "pruefidee": "Einstellung GroupTimersByType aktivieren -> Zeiten werden mit Titel-Trennzeile je Zeittyp gruppiert (Text aus AppSetting-Vorlage mit Platzhalter @@Typ@@).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-TIME-02", @@ -424,7 +448,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Kunde akzeptiert einen von drei Terminvorschlägen -> akzeptierter Termin bleibt mit Zusatz \"(Akzeptiert)\" bestehen, die anderen zwei werden entfernt, Status wechselt auf AppointmentProposalAccepted.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-TIME-03", @@ -441,7 +466,8 @@ "tracelinks": "SwRS-TIME-13", "konsolidierung": "nein", "pruefidee": "Mitarbeiter ohne RIGHT_CRMPROJEKTONLYOWN-Ausnahme ruft Projektliste ab -> nur Projekte mit ihm als Berater/Verantwortlichem/Ersteller werden geliefert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-LOG-01", @@ -457,7 +483,8 @@ "tracelinks": "SyRS-LOG-08", "konsolidierung": "nein", "pruefidee": "Auftrag mit aktivem Teil-Kommissionierungssatz direkt in Lieferschein umwandeln und auf Warnhinweis prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-LOG-02", @@ -474,7 +501,8 @@ "tracelinks": "SyRS-LOG-11, SwRS-LOG-09, SwRS-LOG-10", "konsolidierung": "nein", "pruefidee": "Produktionsfunktionen ohne gültige ProductionManagement-Lizenz aufrufen und Verhalten (Exception vs. leeres Ergebnis) je Methode dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-LOG-03", @@ -490,7 +518,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Artikel mit Mindestbestand 10 auf Bestand 5 senken, Bestellvorschlagsliste generieren und Aufnahme des Artikels prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-ADM-01", @@ -507,7 +536,8 @@ "tracelinks": "SyRS-ADM-01; SwRS-ADM-01, SwRS-ADM-02, SwRS-ADM-03, SwRS-ADM-04", "konsolidierung": "nein", "pruefidee": "Architekturreview: Prüfen, ob WPF-Client tatsächlich nur über WebService-DTOs auf Settings zugreift (keine direkten SQL/DAO-Aufrufe aus UI-Schicht).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-ADM-02", @@ -524,7 +554,8 @@ "tracelinks": "SwRS-ADM-05, SwRS-ADM-06 (Modul-/Kategoriesynchronisation als technische Grundlage); SyRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "UI-/API-Test: Favorit setzen, Session neu laden, prüfen ob Favorit weiterhin gruppiert nach Kategorie erscheint; Fehlerfall (DB nicht erreichbar) prüfen auf Fehlermeldungstext.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-ADM-03", @@ -541,7 +572,8 @@ "tracelinks": "SyRS-ADM-03; SwRS-ADM-09, SwRS-ADM-10, SwRS-ADM-11, SwRS-ADM-12, SwRS-ADM-17, SwRS-ADM-18", "konsolidierung": "nein", "pruefidee": "Konfigurationstest: CentronWebserviceMailType nacheinander auf 0/Exchange/Graph setzen und prüfen, dass jeweils die korrekte Implementierungsklasse instanziiert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-ADM-04", @@ -558,7 +590,8 @@ "tracelinks": "StRS-ADM-03 (gemeinsamer Kommunikations-/Mail-Kontext); SyRS/SwRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Für Web-/SaaS-Migration klären: Outlook-Signaturquelle ist im Web-/SaaS-Kontext (kein lokales Windows-Client-Profil) nicht sinnvoll übertragbar - Anforderung an Nachfolgesystem prüfen (nur noch zentrale Signaturverwaltung?).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-ADM-05", @@ -576,7 +609,8 @@ "tracelinks": "SyRS/SwRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Datenmodelltest: Mehrere Mandanten mit Default=1 in Testdaten anlegen und prüfen, welches Verhalten GetDefaultMandator zeigt (GetEntity liefert vermutlich undefiniertes Verhalten bei Mehrfachtreffern - Eindeutigkeit als Datenintegritätsregel prüfen/erzwingen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-DOC-01", @@ -593,7 +627,8 @@ "tracelinks": "SyRS-DOC-01, SyRS-DOC-02, SyRS-DOC-03, SyRS-DOC-04", "konsolidierung": "nein", "pruefidee": "UI-Test: Datei in Kundenordner hochladen, prüfen ob Icon nach Dateityp korrekt vergeben wird und `NumDocuments` im Elternordner steigt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-DOC-02", @@ -610,7 +645,8 @@ "tracelinks": "keine direkte SyRS-Verknüpfung (Lücke - im Kandidatenset wurde keine SyRS-Ebene zur Dokumentations-Sichtbarkeit erhoben); fachlich direkt umgesetzt durch SwRS-DOC-05", "konsolidierung": "nein", "pruefidee": "Dokumentation mit beiden Feldern anlegen, mit Benutzer ohne READ_INTERNAL_DOCUMENTATION abrufen → InternalDocumentation muss `null` sein, nicht nur UI-verborgen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-INT-01", @@ -627,7 +663,8 @@ "tracelinks": "SyRS-INT-01, SyRS-INT-02, SyRS-INT-03, SyRS-INT-04, SyRS-INT-09", "konsolidierung": "nein", "pruefidee": "Prüfen, ob für jeden aktiven Lieferanten-EDI-Vertrag ein vollständiger Order→Response→Delivery→Invoice-Zyklus im System nachvollziehbar ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-INT-02", @@ -643,7 +680,8 @@ "tracelinks": "SyRS-INT-01, SyRS-INT-04", "konsolidierung": "nein", "pruefidee": "Prüfen, ob in einer SaaS-Neuimplementierung ein äquivalentes Feature-Flag-/Tarifmodell für Integrationen vorgesehen werden soll.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-INT-03", @@ -659,7 +697,8 @@ "tracelinks": "SyRS-INT-08", "konsolidierung": "nein", "pruefidee": "Prüfen, welche Authentifizierungsmechanismen (Ticket-Lebensdauer, Rotation) hinter `GetLoggedInUserByTicket` stehen und ob dies für eine SaaS-Neuimplementierung durch OAuth2/OIDC ersetzt werden soll.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-NEX-01", @@ -676,7 +715,8 @@ "tracelinks": "SyRS-NEX-01", "konsolidierung": "nein (clusterübergreifender Hinweis: konkreter Freigabe-Workflow-Schritt evtl. Teil des CRM/Sales-Clusters, dort Rechercheergebnis abgleichen)", "pruefidee": "Kundenkonto mit aktivem Freigabewesen ein Ticket anlegen lassen und prüfen, dass es nicht im Standard-Ticket-Board erscheint, bis ein interner Nutzer es freigibt (Statuszuweisung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-NEX-02", @@ -693,7 +733,8 @@ "tracelinks": "SyRS-NEX-02, SyRS-NEX-05, SyRS-NEX-06, SyRS-NEX-07, SyRS-NEX-11", "konsolidierung": "Kandidat: SwRS-NEX-02 (Editor-Zuweisung), SyRS-NEX-02 (Notification), SyRS-NEX-01 und SwRS-NEX-01 (Statuswechsel) - kombiniert in einem UI-Workflow.", "pruefidee": "Ticket an favorisierten Mitarbeiter weiterleiten und prüfen, dass (a) Editorenliste den neuen Mitarbeiter enthält (siehe SwRS-NEX-02/SyRS-NEX-02), (b) Status gemäß konfiguriertem `HelpdeskAfterForwardDefaultStateI3D` gesetzt wird, (c) Outlook-Mail-Entwurf mit Ticketinhalt vorbereitet wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-NEX-03", @@ -709,7 +750,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Neues Ticket im ServiceBoard öffnen, \"Annehmen\"/\"Ablehnen\"-Aktion ausführen und Auswirkung auf Status/Editorenliste dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-NEX-04", @@ -725,7 +767,8 @@ "tracelinks": "SyRS-NEX-06", "konsolidierung": "nein (clusterübergreifender Hinweis: ggf. mit Web-Konfigurations-Cluster/WebAccountConfig/HostConfig konsolidieren)", "pruefidee": "`UseNexusForPublicWebForms` umschalten und prüfen, dass öffentliche Formulare (z.B. Kontaktformular) danach tatsächlich CentronNexus statt Altsystem ansprechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-01", @@ -743,7 +786,8 @@ "tracelinks": "StRS-ARCH-06", "konsolidierung": "nein", "pruefidee": "Stichprobenartig prüfen, ob alle 84 registrierten Module tatsächlich beide ConnectionTypes deklarieren; Abweichungen dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-02", @@ -761,7 +805,8 @@ "tracelinks": "StRS-ARCH-01", "konsolidierung": "Kandidat: SwRS-ARCH-01, SyRS-ARCH-03", "pruefidee": "End-to-End-Test aller vier Login-Pfade inkl. Fallback bei Fehlkonfiguration (z.B. AD nicht erreichbar).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-03", @@ -779,7 +824,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Prüfen, ob 2FA erzwingbar (Pflicht) konfiguriert werden kann oder rein optional ist; wie Wiederherstellung bei Verlust des Geräts erfolgt (nicht recherchiert).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-04", @@ -795,7 +841,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Verifizieren, dass die Regel tatsächlich in `DeveloperSecurity.cs` so implementiert ist (Doku nicht Code gelesen) und ob ein äquivalenter Schutz für RELEASE-Testinstanzen fehlt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-05", @@ -814,7 +861,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Kategorien gegen die tatsächlich in den Fachclustern untersuchten Module abgleichen (Vollständigkeitscheck der Systemübersicht).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-06", @@ -832,7 +880,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SyRS-ARCH-05", "pruefidee": "Prüfen, ob Rechte pro Mandant/Filiale unterschiedlich vergeben werden können (Hinweis \"nur eigene Filiale\" in CentronRights.md).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-07", @@ -850,7 +899,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Prüfen, wie viele produktive Extensions aktuell existieren und ob die Schnittstelle stabil versioniert ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-08", @@ -868,7 +918,8 @@ "tracelinks": "StRS-ARCH-02", "konsolidierung": "nein", "pruefidee": "Testen des Verhaltens bei mehreren parallel angemeldeten Terminal-Server-Sitzungen (RDP/Citrix) desselben Benutzers.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-09", @@ -885,7 +936,8 @@ "tracelinks": "StRS-ARCH-03", "konsolidierung": "Kandidat: StRS-ARCH-03", "pruefidee": "Vollständigkeitsprüfung, ob wirklich alle Layer (auch Webservice-Fehlermeldungen) konsistent lokalisiert sind (laut Doku-Beispiel nur \"einige\" Codepfade).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-10", @@ -902,7 +954,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Prüfen, ob äquivalentes zentrales Error-Handling auch auf Web-Service-Seite existiert (nicht recherchiert in diesem Cluster).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-11", @@ -919,7 +972,8 @@ "tracelinks": "StRS-ARCH-02", "konsolidierung": "nein", "pruefidee": "Startzeit messen und mit Zielwert (falls vorhanden) vergleichen; klären ob preload (DAOFactory/ObjectMapper) bei Web-Service-Verbindung übersprungen wird (Code zeigt: ja, abhängig von `IsDefaultConnectionAWebServiceConnection`/`RememberLogin`).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-12", @@ -936,7 +990,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Nutzungshäufigkeit/Bedeutung beim Kunden erfragen (aus Code allein nicht ableitbar, ob zentrales oder Nischenfeature).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-13", @@ -952,7 +1007,8 @@ "tracelinks": "StRS-ARCH-01", "konsolidierung": "nein", "pruefidee": "Prüfen, ob eine Einwilligung/Opt-out für Telemetrie existiert und wie/wo die Daten gespeichert werden (nicht im gelesenen Ausschnitt ersichtlich).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-14", @@ -969,7 +1025,8 @@ "tracelinks": "StRS-ARCH-02", "konsolidierung": "nein", "pruefidee": "Umfang der TAPI-Nutzung beim Kunden erheben (Pflichtfeature oder Nischenfunktion) für Entscheidung über Migrationsstrategie.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-15", @@ -986,7 +1043,8 @@ "tracelinks": "StRS-ARCH-01", "konsolidierung": "Kandidat: SyRS-ARCH-02, SwRS-ARCH-01", "pruefidee": "Prüfen, ob Entkopplung (Verknüpfung aufheben) ebenfalls möglich ist und wie der Fall \"Entra-Konto bereits mit anderem c-entron-User verknüpft\" behandelt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-16", @@ -1003,7 +1061,8 @@ "tracelinks": "StRS-ARCH-05", "konsolidierung": "Kandidat: StRS-ARCH-05", "pruefidee": "Rechte-/Rollenmodell für WebAccount-Benutzer im Detail prüfen (vermutlich stark eingeschränkt ggü. Mitarbeitern).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-17", @@ -1020,7 +1079,8 @@ "tracelinks": "StRS-ARCH-02", "konsolidierung": "nein", "pruefidee": "Klären, ob der Workaround dauerhaft entfernt bleibt oder nur testweise; Terminalserver-Nutzung beim Kunden quantitativ erheben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ARCH-18", @@ -1036,7 +1096,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SyRS-ARCH-02", "pruefidee": "End-to-End-Test: Benutzer mit AuthentificationKind=WindowsAuth bei deaktiviertem AD anmelden lassen, erwartete Fehlermeldung verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-01", @@ -1052,7 +1113,8 @@ "tracelinks": "StRS-SEC-01", "konsolidierung": "nein", "pruefidee": "Manuellen Login-Test mit falschem Passwort/falschem Benutzernamen durchführen und Antwortzeiten/Fehlermeldungen vergleichen (User-Enumeration-Schutz prüfen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-02", @@ -1068,7 +1130,8 @@ "tracelinks": "StRS-SEC-01", "konsolidierung": "nein", "pruefidee": "Mit Test-AD verifizieren, dass bei falschem Passwort tatsächlich nur ein LDAP-Bind-Versuch stattfindet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-03", @@ -1085,7 +1148,8 @@ "tracelinks": "StRS-SEC-01", "konsolidierung": "nein", "pruefidee": "Testfälle: nur \"von\"-Datum in Zukunft/Vergangenheit, nur \"bis\"-Datum, beide Daten, um Randfallverhalten zu bestätigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-04", @@ -1102,7 +1166,8 @@ "tracelinks": "StRS-SEC-01, StRS-SEC-02", "konsolidierung": "nein", "pruefidee": "Liste aller `ApplicationKind`-Einträge mit gesetztem `RequiredRight`/`DisallowingRight` erheben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-05", @@ -1118,7 +1183,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Prüfen, ob 30 Minuten als Session-Timeout für die SaaS-Neuimplementierung übernommen werden soll oder ein Standard-Refresh-Token-Modell sinnvoller ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-06", @@ -1134,7 +1200,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Klären, ob dieses Optimierungsverhalten im Zielsystem funktional relevant ist oder rein technische Implementierungsdetail bleibt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-07", @@ -1150,7 +1217,8 @@ "tracelinks": "StRS-SEC-05", "konsolidierung": "nein", "pruefidee": "Testen: Login von neuem Gerät vs. bekanntem Gerät, Wechsel der IP-Adresse, Grenzfall \"Gültigkeitsdauer = 0\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-08", @@ -1166,7 +1234,8 @@ "tracelinks": "StRS-SEC-05", "konsolidierung": "nein", "pruefidee": "Prüfen, ob der Code serverseitig persistent (DB) oder nur In-Memory (`ConcurrentDictionary`) gehalten wird - Auswirkung auf Skalierbarkeit/Mehrinstanzbetrieb im SaaS-Zielsystem.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-09", @@ -1183,7 +1252,8 @@ "tracelinks": "StRS-SEC-05", "konsolidierung": "nein", "pruefidee": "Klären, ob dieses Verhalten (stiller Bypass bei Web-Account+RADIUS) beabsichtigt ist oder eine Lücke darstellt, falls ein Admin RADIUS für Kunden aktiviert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-10", @@ -1200,7 +1270,8 @@ "tracelinks": "StRS-SEC-06", "konsolidierung": "nein", "pruefidee": "`OpenIdConnectAuthenticator.cs` und `CentronHost.cs` direkt einsehen, um die Middleware-Konfiguration (Clock-Skew, erlaubte Algorithmen) zu verifizieren (in dieser Recherche nicht mehr geöffnet).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-11", @@ -1216,7 +1287,8 @@ "tracelinks": "StRS-SEC-02, StRS-SEC-07", "konsolidierung": "nein", "pruefidee": "Prüfen, ob Export-Aktionen zusätzlich protokolliert werden (aktuell kein Log-Aufruf in diesen Methoden ersichtlich) - relevant für Audit-Anforderung im Zielsystem.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-12", @@ -1233,7 +1305,8 @@ "tracelinks": "StRS-SEC-07", "konsolidierung": "nein", "pruefidee": "Abgleichen, ob das aktuell genutzte Passwort-Manager-Modul (`PasswordManagerBL`, Hotline-basiert) eine äquivalente Zugriffsprotokollierung besitzt oder nur das Legacy-Modul (siehe SwRS-SEC-06).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-13", @@ -1249,7 +1322,8 @@ "tracelinks": "StRS-SEC-01", "konsolidierung": "nein", "pruefidee": "Prüfen, ob weitere Komplexitätsregeln (Groß-/Kleinschreibung, Sonderzeichen) an anderer Stelle (Client/UI) zusätzlich erzwungen werden - im gesichteten Code nicht gefunden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-14", @@ -1265,7 +1339,8 @@ "tracelinks": "StRS-SEC-01", "konsolidierung": "nein", "pruefidee": "Datenbankabfrage im Referenzsystem: Verteilung der Werte `Sichbenu.PasswordMinLength` (wie viele Konten haben 0/NULL?). Ergänzend prüfen, ob Passwort-Richtlinien (Sonderzeichen, Historie, Ablaufdatum) irgendwo anders im Code (z. B. Windows-Domänenrichtlinie bei AD-Login) durchgesetzt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-15", @@ -1281,7 +1356,8 @@ "tracelinks": "StRS-SEC-01", "konsolidierung": "nein", "pruefidee": "Prüfen, ob bei falscher Passworteingabe hier ebenfalls eine Rate-Limitierung/Lockout existiert (im gesichteten Code nicht gefunden, siehe SyRS-SEC-16).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-16", @@ -1297,7 +1373,8 @@ "tracelinks": "StRS-SEC-01", "konsolidierung": "nein", "pruefidee": "Gezielt prüfen, ob Rate-Limiting auf Infrastrukturebene (Reverse Proxy/WAF/API-Gateway) statt im Anwendungscode umgesetzt ist, sowie ob Active-Directory-eigene Kontosperrrichtlinien dies für AD-Logins abdecken.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-CRM-01", @@ -1313,7 +1390,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SyRS-CRM-02, SwRS-CRM-03 (gemeinsame Kernregelgruppe der Adressverwaltung)", "pruefidee": "Zweite Adresse eines Kunden als Standard markieren und speichern; prüfen, dass die erste Adresse automatisch entmarkiert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-CRM-02", @@ -1329,7 +1407,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SyRS-CRM-01", "pruefidee": "Zwei Ansprechpartner derselben Adresse abwechselnd als Standard markieren, DB-Zustand prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-CRM-03", @@ -1346,7 +1425,8 @@ "tracelinks": "StRS-CRM-01", "konsolidierung": "nein", "pruefidee": "Kunden mit `State=1, Locked=true` und `State=0, Locked=false` anlegen und prüfen, dass beide in Standard-Kundensuchen nicht erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-CRM-04", @@ -1362,7 +1442,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SyRS-CRM-05, SyRS-CRM-07 (analoge Rechte-gesteuerte Schreib-/Lesezugriffe auf Stammdaten)", "pruefidee": "Benutzer ohne `ADMINISTRATE_ALL_EMPLOYEES` versuchen lassen, einen Mitarbeiter zu speichern; Fehlermeldung/-code prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-CRM-05", @@ -1378,7 +1459,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein (cross-cluster Relevanz für \"Benutzer-/Rechteverwaltung\" und \"Web-Portal\"; siehe Abgrenzungshinweis in StRS-CRM-04)", "pruefidee": "Zwei AppUser mit gleichem (Groß-/Kleinschreibung abweichendem) Login anlegen; AppUser-Login identisch zu bestehendem WebAccount-Username anlegen; Fehlermeldungen prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-CRM-06", @@ -1394,7 +1476,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SwRS-CRM-06 (konkurrierendes \"Mitarbeiter/Benutzer aktiv\"-Kriterium: `Employee.IsActive` hier vs. berechneter Ausdruck dort – mögliche Dateninkonsistenz)", "pruefidee": "AppUser mit `AccountDisabledFromDate` in der Zukunft anlegen und prüfen, ob er aktuell noch als aktiv gilt (erwartet: ja, da Sperre erst ab Datum wirkt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-CRM-07", @@ -1411,7 +1494,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Benutzer mit nur einem der beiden Rechte gegen beide Endpunkte testen, um Inkonsistenz zu bestätigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-CRM-08", @@ -1427,7 +1511,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SwRS-CRM-07 (gemeinsames Thema: redundante/unvalidierte Finanz-Stammdatenfelder)", "pruefidee": "Fachbereich befragen, ob mehr als zwei Bankverbindungen je Kunde jemals benötigt wurden (z. B. bei Konzernkunden/Sammelkonten).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-CRM-09", @@ -1445,7 +1530,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SwRS-CRM-07, SyRS-CRM-08 (gemeinsames Thema: fehlende serverseitige Validierung/Redundanz von Finanz-Stammdatenfeldern)", "pruefidee": "IBAN mit falscher Prüfsumme über eine Web-Service-/API-Schnittstelle (unter Umgehung der WPF-Oberfläche) speichern und prüfen, ob das Backend dies zulässt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-CRM-10", @@ -1461,7 +1547,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SyRS-CRM-12 (analoges Prinzip \"Geschäftspartner per E-Mail identifizieren\", dort für Lieferanten)", "pruefidee": "Test-Mail von bekannter Domain mit und ohne aktivierte Domain-Erkennung senden; Blacklist-Domain (z. B. gmail.com) testen und prüfen, dass keine Domain-Zuordnung erfolgt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-CRM-11", @@ -1478,7 +1565,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Benutzer einer Niederlassung mit abweichendem Land eine neue Kundenadresse anlegen lassen und beobachten, welches Land vorbelegt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-CRM-12", @@ -1494,7 +1582,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SyRS-CRM-10 (analoges Prinzip \"Geschäftspartner per E-Mail identifizieren\", dort für Kunden)", "pruefidee": "Lieferant ohne eigene E-Mail, aber mit Standard-Ansprechpartner-E-Mail anlegen; Suche nach dieser E-Mail testen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-01", @@ -1510,7 +1599,8 @@ "tracelinks": "SwRS-SALES-01, SwRS-SALES-02, SwRS-SALES-05, SwRS-SALES-10, SwRS-SALES-13 - Begründung: alle fünf SwRS-Anforderungen implementieren konkrete Zustandsübergänge bzw. daran gekoppelte Nebenwirkungen dieses Zustandsautomaten.", "konsolidierung": "nein", "pruefidee": "Zustandsübergänge (offen→abgeschlossen, offen→storniert, Reaktivierung) je Belegart in UI/DB nachvollziehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-02", @@ -1528,7 +1618,8 @@ "tracelinks": "SwRS-SALES-04, SwRS-SALES-12 - Begründung: SwRS-SALES-04 (Anzahlungsrechnung aus Auftrag) und SwRS-SALES-12 (Positionsarten-Mapping bei Weiterleitung) konkretisieren Teile dieser Belegkette.", "konsolidierung": "Kandidat: SyRS-SALES-03 (analoge Weiterleitungsregel für die Einkaufsseite/Bestellungen)", "pruefidee": "Versuch, einen Auftrag direkt (ohne Angebot) oder ein Angebot aus einer Rechnung zu erzeugen, muss von der UI verhindert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-03", @@ -1545,7 +1636,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke) - keine SwRS-Anforderung in diesem Cluster elaboriert die Bestell-Weiterleitung im Detail separat.", "konsolidierung": "Kandidat: SyRS-SALES-02 (Gegenstück auf Vertriebsseite)", "pruefidee": "Prüfen, ob UI das Anlegen neuer Artikel in der Bestellmaske tatsächlich unterbindet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-04", @@ -1562,7 +1654,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SyRS-SALES-05 (Dubletten-Check, fachlich zusammengehörig)", "pruefidee": "Kunde ohne PurchaseOrderNumberRequiered-Flag: Auftrag ohne Bestellnummer speicherbar; mit Flag: Fehler erzwungen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-05", @@ -1578,7 +1671,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SyRS-SALES-04", "pruefidee": "Zwei Aufträge desselben Kunden mit identischer Bestellnummer anlegen → Warnmeldung erwartet; Weiterleitung Angebot→Auftrag mit gleicher Nummer darf nicht warnen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-06", @@ -1595,7 +1689,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Kunde mit Limit 1000, Auftrag über 1500 anlegen → Dialog erscheint; nach Bestätigung speicherbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-07", @@ -1611,7 +1706,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Position mit Preis < MinPrice ohne Recht speichern → Blockade/Dialog; mit zweitem autorisierten Login → Speichern erlaubt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-08", @@ -1629,7 +1725,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "WEEE-pflichtigen Artikel in Angebot ohne WEEE-Nummer speichern (ok) vs. in Auftrag weiterleiten ohne Nummer (Fehler).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-09", @@ -1646,7 +1743,8 @@ "tracelinks": "SwRS-SALES-03 - Begründung: SwRS-SALES-03 konkretisiert die Pflichtfeldprüfung, die unmittelbar vor dem letzten Übergang dieses Workflows (OrdererApproveCart) greift.", "konsolidierung": "Kandidat: SyRS-SALES-10 (Abschluss des Warenkorb-Workflows, gleiche fachliche Funktion \"Warenkorb-Freigabe/-Abschluss\")", "pruefidee": "Kompletten Workflow von Ersteller über Prüfer bis Besteller durchspielen inkl. Ablehnungs-/Nachbesserungspfad.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-10", @@ -1662,7 +1760,8 @@ "tracelinks": "SwRS-SALES-03 - Begründung: dieselbe Pflichtfeldprüfung aus SwRS-SALES-03 ist Vorbedingung für diesen automatischen Abschluss.", "konsolidierung": "Kandidat: SyRS-SALES-09 (bildet gemeinsam mit diesem den vollständigen Warenkorb-Freigabe-und-Abschluss-Workflow)", "pruefidee": "Nach Bestellauslösung prüfen, dass Warenkorb-Angebot im Status \"abgeschlossen\" ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-11", @@ -1679,7 +1778,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "EDI-Bestätigung mit abweichendem Preis/Termin einspielen, neue Bestellversion und Log-Eintrag prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-12", @@ -1695,7 +1795,8 @@ "tracelinks": "StRS-SALES-02 - Begründung: unmittelbarer Baustein der von StRS-SALES-02 geforderten Bestellvorschlagsliste/Disposition inkl. Direktlieferungs-Sonderfall.", "konsolidierung": "nein", "pruefidee": "Direktlieferungs-Bestellung mit neuem Liefertermin speichern, prüfen ob Ursprungsauftrag automatisch aktualisiert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-13", @@ -1711,7 +1812,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "XML-Importdatei mit neuen Handelsware-Artikeln einspielen, Sichtbarkeit/Filterung in der Trefferliste prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-14", @@ -1727,7 +1829,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Anmeldung mit falschem Passwort muss fehlschlagen; Datenbank darf kein Klartextpasswort enthalten (Review).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-15", @@ -1745,7 +1848,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Benutzer mit \"nur eigene Filiale\"-Recht darf keine Angebote anderer Filialen sehen/bearbeiten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-16", @@ -1762,7 +1866,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Kunde mit Mahnstufe über Schwellwert setzen, neuen Auftrag anlegen → Fehlermeldung erwartet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-17", @@ -1779,7 +1884,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Angebot mit Standard-MwSt. nach Steuersatzänderung in Auftrag weiterleiten → neuer Satz greift; Angebot mit individuell überschriebenem Steuersatz → Satz bleibt erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-01", @@ -1796,7 +1902,8 @@ "tracelinks": "StRS-BILL-04", "konsolidierung": "nein", "pruefidee": "Alle Belegtypen (Angebot, Auftrag, Rechnung, Vertrag, Gutschrift) auf konsistente State-Werte in DB prüfen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-02", @@ -1812,7 +1919,8 @@ "tracelinks": "StRS-BILL-04", "konsolidierung": "nein", "pruefidee": "Stornierung einer Barrechnung (IsCashAsset=true) versuchen -> Fehlermeldung \"...da es sich um eine Barrechnung handelt.\" erwarten", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-03", @@ -1829,7 +1937,8 @@ "tracelinks": "StRS-BILL-04", "konsolidierung": "nein", "pruefidee": "Rechnung festschreiben, danach Änderungsversuch an Positionen -> erwartete Blockade/Warnung", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-04", @@ -1845,7 +1954,8 @@ "tracelinks": "StRS-BILL-04, SwRS-BILL-02", "konsolidierung": "nein", "pruefidee": "Stornierte Rechnung als \"bezahlt\" markieren -> erwartete Fehlermeldung", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-05", @@ -1861,7 +1971,8 @@ "tracelinks": "StRS-BILL-04", "konsolidierung": "nein", "pruefidee": "Lasttest mit parallelen Rechnungsanlagen; auf doppelte Nummern in RechKopf prüfen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-06", @@ -1877,7 +1988,8 @@ "tracelinks": "StRS-BILL-01", "konsolidierung": "nein", "pruefidee": "Export mit und ohne Leitweg-ID vergleichen (Dateikennung/Namespace im XML)", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-07", @@ -1893,7 +2005,8 @@ "tracelinks": "StRS-BILL-01", "konsolidierung": "nein", "pruefidee": "Testfälle für alle vier Kombinationen (Reverse Charge, Inland 0%, EU 0%, Export 0%, Standard) durchspielen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-08", @@ -1909,7 +2022,8 @@ "tracelinks": "StRS-BILL-01", "konsolidierung": "nein", "pruefidee": "Reverse-Charge-Rechnung exportieren, XML auf ExemptionReason-Text prüfen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-09", @@ -1925,7 +2039,8 @@ "tracelinks": "StRS-BILL-01", "konsolidierung": "nein", "pruefidee": "Rechnung mit manuell verändertem Kopfbetrag (Abweichung > 3€) exportieren -> Export muss fehlschlagen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-10", @@ -1942,7 +2057,8 @@ "tracelinks": "StRS-BILL-01", "konsolidierung": "nein", "pruefidee": "Gutschriftposition mit negativem Preis exportieren, XML auf positiven ChargeAmount und negierte BilledQuantity prüfen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-11", @@ -1958,7 +2074,8 @@ "tracelinks": "StRS-BILL-01", "konsolidierung": "nein", "pruefidee": "Titelposition mit Kindpositionen zu 19% und 7% MwSt. exportieren -> erwarteter Abbruch mit obiger Meldung", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-12", @@ -1974,7 +2091,8 @@ "tracelinks": "StRS-BILL-01", "konsolidierung": "nein", "pruefidee": "Sammelgutschrift zu zwei Rechnungen exportieren -> InvoiceReferencedDocument darf nicht gesetzt sein", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-13", @@ -1991,7 +2109,8 @@ "tracelinks": "StRS-BILL-02", "konsolidierung": "nein", "pruefidee": "RMM-Service (Riverbird) für Testzeitraum offline simulieren, automatische Vertragsabrechnung anstoßen -> Abbruch mit Exception erwarten", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-14", @@ -2007,7 +2126,8 @@ "tracelinks": "StRS-BILL-02", "konsolidierung": "nein", "pruefidee": "Testfälle mit ConsiderOverbooking/Underbooking-Kombinationen und Ist-Mengen über/unter ContractAmount durchspielen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-15", @@ -2023,7 +2143,8 @@ "tracelinks": "StRS-BILL-02", "konsolidierung": "nein", "pruefidee": "Vertragsrechnung buchen, danach zugehörige Gutschrift buchen, Kontingentsaldo vor/nach vergleichen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-16", @@ -2040,7 +2161,8 @@ "tracelinks": "StRS-BILL-03, SwRS-BILL-01", "konsolidierung": "nein", "pruefidee": "Drei Mahnstufen mit unterschiedlichen Gebühren konfigurieren, Mahnlauf für überfälligen Kunden ausführen, erzeugte Mahngebühr prüfen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-17", @@ -2056,7 +2178,8 @@ "tracelinks": "StRS-BILL-01", "konsolidierung": "nein", "pruefidee": "Kunde mit abweichender MandatorBank-Einstellung anlegen, Rechnung exportieren, verwendete IBAN/BIC im XML mit Erwartungswert vergleichen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-18", @@ -2073,7 +2196,8 @@ "tracelinks": "StRS-BILL-04, SwRS-BILL-05", "konsolidierung": "nein", "pruefidee": "Vertrag mehrfach ändern, VertragKopfVersions auf lückenlose OriginalI3D-Kette prüfen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-19", @@ -2089,7 +2213,8 @@ "tracelinks": "StRS-BILL-01", "konsolidierung": "nein", "pruefidee": "Leere Titelposition (keine Kindpositionen) in Rechnung anlegen und exportieren, resultierenden Steuersatz im XML prüfen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BILL-20", @@ -2105,7 +2230,8 @@ "tracelinks": "StRS-BILL-04", "konsolidierung": "nein", "pruefidee": "Vertrag mit zwei Abrechnungsperioden abrechnen, Storno der ersten (nicht letzten) Rechnung versuchen -> erwartete Fehlermeldung", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-01", @@ -2121,7 +2247,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Mitarbeiter A (nur OWN_TIME_EDIT) versucht Zeit von Mitarbeiter B zu bearbeiten -> ResultException \"Nutzer hat keine Rechte um Zeiten anderer Mitarbeiter zu bearbeiten\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-02", @@ -2137,7 +2264,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SwRS-TIME-03 (beide setzen dieselbe Grundregel \"Zeit mit Belegzuordnung ist geschützt\" für Löschen bzw. Bearbeiten um; bei Konsolidierung ggf. zu einer gemeinsamen Regel \"Schreibschutz zugeordneter Zeiten\" zusammenführen)", "pruefidee": "Zeit ohne Belegzuordnung löschen -> erfolgreich, Historieneintrag und Kalendertermin-Löschung geschehen; Zeit mit Belegzuordnung löschen -> Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-03", @@ -2155,7 +2283,8 @@ "tracelinks": "StRS-TIME-01", "konsolidierung": "nein", "pruefidee": "Benutzer ohne CAN_CHANGE_DATE-Recht öffnet Timer-Abrechnungseinstellungen mit ReceiptKind=Invoice -> Datumsfeld deaktiviert, Info-Icon sichtbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-04", @@ -2172,7 +2301,8 @@ "tracelinks": "StRS-TIME-01", "konsolidierung": "nein", "pruefidee": "Nicht abrechenbare Zeit mit Einstellung NoBilling abrechnen -> keine Position; mit BillingWithPriceZero -> Position mit Preis 0.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-05", @@ -2188,7 +2318,8 @@ "tracelinks": "StRS-TIME-01", "konsolidierung": "nein", "pruefidee": "Ticketzeit an einem Sonntag mit vertragsspezifischer Rate abrechnen -> `SundayPercent` des Vertrags wird angewandt, nicht der globale Wert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-06", @@ -2205,7 +2336,8 @@ "tracelinks": "StRS-TIME-01", "konsolidierung": "nein", "pruefidee": "Letzte offene berechenbare Zeit eines Tickets abrechnen, Einstellung=CloseAlways -> Ticket wird automatisch geschlossen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-07", @@ -2221,7 +2353,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Zeit mit Notiztext bei aktivierter Einstellung speichern -> AiTextRatingJson wird nachträglich befüllt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-08", @@ -2237,7 +2370,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "DocBee-Zeitbuchung ohne ArticleI3D bei DistanceInKm>0 senden -> Fehler \"ArticleI3D is required for travel entries.\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-09", @@ -2253,7 +2387,8 @@ "tracelinks": "StRS-TIME-01", "konsolidierung": "nein", "pruefidee": "Zweites Material auf dasselbe Ticket buchen, während der erste Lieferschein noch offen ist -> neue Version desselben Lieferscheins statt neuer Beleg.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-10", @@ -2270,7 +2405,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Start einer Ticketzeit mit verknüpftem MyDay-Workitem ändern -> Workitem übernimmt neue Start-/Endzeit.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-11", @@ -2287,7 +2423,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Einstellung \"Planned\" wählen, ungeplante Zeit speichern -> kein Kalendertermin erzeugt; geplante Zeit speichern -> Termin wird erzeugt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-12", @@ -2303,7 +2440,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Mitarbeiter ohne RIGHT_KALENDERANZEIGENALLE fragt Kalender eines Kollegen ab -> Fehler \"...fremde Kalender...\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-13", @@ -2320,7 +2458,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "AppSetting HelpdeskClosedState auf einen bestimmten HelpdeskState-Datensatz setzen -> Tickets mit diesem Zustand werden aus \"aktiv\"-Filtern ausgeschlossen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-14", @@ -2336,7 +2475,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein (ergänzt SyRS-TIME-06 als Auslöser/Sonderfall, keine Funktionsdopplung)", "pruefidee": "Ticket mit offenen ToDos schließen -> ToDos werden gelöscht, Historieneintrag \"Status wurde geändert\" sowie \"Ticket abgeschlossen\" werden erzeugt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-15", @@ -2353,7 +2493,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Task mit Status=Paused manuell ausführen lassen -> prüfen, ob trotz der Pause-Meldung tatsächlich (fälschlicherweise) weiterexekutiert wird, da im Code nach der Meldung kein `return` folgt (Verdacht auf funktionalen Fehler, für Neuimplementierung zu klären, nicht blind zu übernehmen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-16", @@ -2370,7 +2511,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Systembenutzer ohne ADD_NEW_HELPDESK-Recht als ausführender Kontext -> `ResultException` beim automatischen Ausführen des Tasks.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-TIME-17", @@ -2386,7 +2528,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Mitarbeiter ohne finalisierten Vortag und ausschließlich Urlaubseinträgen -> Tag wird automatisch abgeschlossen, keine Mail versendet; Mitarbeiter mit gemischten/keinen Einträgen -> Mail an Mitarbeiter und Teamleiter.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-LOG-01", @@ -2403,7 +2546,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "RMA-Lager konfigurieren, Lock-Flag umschalten und prüfen ob Lager in Inventur-Auswahl erscheint/verschwindet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-LOG-02", @@ -2421,7 +2565,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Inventur zweimal schließen versuchen; erwartete Fehlermeldung \"wurde schon abgeschlossen\" prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-LOG-03", @@ -2437,7 +2582,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Benutzer ohne CREATE_INVENTORY-Recht versuchen lassen, eine Inventur anzulegen → erwartete Fehlermeldung \"Sie haben nicht die benötigten Rechte.\"", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-LOG-04", @@ -2453,7 +2599,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "SN-pflichtigen Artikel ohne Barcode in offener Inventur erfassen → Fehlermeldung erwarten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-LOG-05", @@ -2469,7 +2616,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SyRS-LOG-02 (ergänzt die dortige Zustandsautomatik der Inventur um den konkreten Abschlussprozess)", "pruefidee": "Teilinventur eines Nebenlagers abschließen und Bestandsänderung, Barcode-Status sowie Log-Eintrag im UI/DB verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-LOG-06", @@ -2486,7 +2634,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Benutzer ohne BOOK_ARTICLE_STOCK_INTO_NEGATIVE-Recht versuchen lassen, Bestand negativ zu buchen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-LOG-07", @@ -2502,7 +2651,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SyRS-LOG-04 (beide Kandidaten betreffen die Seriennummern-/Barcode-Zustandslogik als gemeinsame fachliche Basis)", "pruefidee": "Zustandsübergangsdiagramm aus Code-Nutzungsstellen (BarcodeBL, InventoryBL, ReceiptBarcodeBL) rekonstruieren und mit Fachanwendern validieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-LOG-08", @@ -2519,7 +2669,8 @@ "tracelinks": "StRS-LOG-01", "konsolidierung": "nein", "pruefidee": "Teil-Kommissionierung mit 2 Positionen anlegen, eine davon vollständig kommissionieren/liefern, Status prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-LOG-09", @@ -2535,7 +2686,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Verschiedene Settings-Kombinationen (Direktlieferung ja/nein, Vollständig ja/nein) durchspielen und E-Mail-Erzeugung/-Unterdrückung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-LOG-10", @@ -2552,7 +2704,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Kommissionierungs-Recht am Modul anmelden lassen und Fehlermeldung/Zugriffsverweigerung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-LOG-11", @@ -2568,7 +2721,8 @@ "tracelinks": "StRS-LOG-02", "konsolidierung": "nein", "pruefidee": "Mitarbeiter an Schritt A anmelden, danach ohne Abmeldung an Schritt B anmelden → prüfen, ob Zeit an Schritt A automatisch mit Endzeit versehen wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-LOG-12", @@ -2584,7 +2738,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Gerät löschen, danach prüfen ob Datensatz weiterhin in DB vorhanden ist (nur `IsDeleted=true`) und ob Log-Eintrag erzeugt wurde.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-LOG-13", @@ -2600,7 +2755,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Gerät zwei Tickets zuordnen, per TicketI3D-Filter suchen und Ergebnis verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-LOG-14", @@ -2616,7 +2772,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Filiale mit zwei Lagern verknüpfen (eines als Default) und prüfen, ob genau das Default-Lager zurückgegeben wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-LOG-15", @@ -2633,7 +2790,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Detailanalyse der beiden API-Projekte (Statusmapping, Label-Erzeugung, Fehlerbehandlung) durch den zuständigen Speditions-/Schnittstellen-Agenten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ADM-01", @@ -2649,7 +2807,8 @@ "tracelinks": "StRS-ADM-01; SwRS-ADM-01, SwRS-ADM-02, SwRS-ADM-03, SwRS-ADM-04", "konsolidierung": "nein", "pruefidee": "Stichprobenprüfung der ICentronRestService.Administration.cs Interface-Definitionen auf WebInvoke-Method-Attribute.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ADM-02", @@ -2666,7 +2825,8 @@ "tracelinks": "StRS: keine direkte Verknüpfung (Lücke); SwRS-ADM-07, SwRS-ADM-08", "konsolidierung": "nein", "pruefidee": "Integrationstest: DeleteAutomatically=true, DeleteAfterDays=5 setzen, Notification mit CreatedDate vor 6 Tagen anlegen, Cleanup ausführen, prüfen dass Eintrag gelöscht wird und neuere Einträge erhalten bleiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ADM-03", @@ -2683,7 +2843,8 @@ "tracelinks": "StRS-ADM-03; SwRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Testinfrastruktur-Review: Prüfen, in welchen automatisierten Testsuiten `TestMails.Start` verwendet wird und ob Staging-Umgebungen dies standardmäßig aktivieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ADM-04", @@ -2701,7 +2862,8 @@ "tracelinks": "StRS: keine direkte Verknüpfung (Lücke); SwRS-ADM-10 (verwandtes Muster inkonsistenter Zugangsdaten-Verschlüsselung), SwRS-ADM-19", "konsolidierung": "nein", "pruefidee": "Test: Masterkey aus Konfiguration entfernen, SaveProfile mit gesetztem Password aufrufen, erwarteter Fehler statt Speicherung im Klartext.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ADM-05", @@ -2717,7 +2879,8 @@ "tracelinks": "SyRS-ADM-04 (gemeinsamer Masterkey-Mechanismus); StRS/SwRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Konfigurationstest: MasterPasswordSaveLocation zwischen beiden Werten umschalten und prüfen, dass GetHotlineMasterKey konsistent aus dem jeweils aktiven Speicherort liest.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ADM-06", @@ -2735,7 +2898,8 @@ "tracelinks": "StRS: keine direkte Verknüpfung (Lücke); SwRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Architekturklärung mit Fachbereich: Wie soll Lizenzierung/Feature-Gating in einer Multi-Tenant-SaaS-Architektur erfolgen (aktuelles Modell ist On-Premise/Einzelinstallation-zentriert)?", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-DOC-01", @@ -2752,7 +2916,8 @@ "tracelinks": "StRS-DOC-01", "konsolidierung": "nein", "pruefidee": "Zwei parallele Sessions: Benutzer A checkt aus, Benutzer B versucht Update → erwartete Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-DOC-02", @@ -2768,7 +2933,8 @@ "tracelinks": "StRS-DOC-01", "konsolidierung": "nein (Hinweis: mögliche fachliche Überschneidung mit Cluster „C-Sign/Signierprozesse\" (SharedDocument) — dort ggf. tiefergehend behandelt; clusterübergreifende Prüfung erfolgt zentral)", "pruefidee": "Dokument, das als Signatur-Einstellung für Rechnungen hinterlegt ist, löschen → erwartete Fehlermeldung \"...als Signatur für den Signierungs-Prozess für Rechnungen eingestellt\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-DOC-03", @@ -2785,7 +2951,8 @@ "tracelinks": "StRS-DOC-01", "konsolidierung": "nein", "pruefidee": "Ohne Lizenz ein Dokument hochladen und Volltextsuche versuchen → erwartete Fehlermeldung; mit Lizenz PDF-Inhalt suchen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-DOC-04", @@ -2801,7 +2968,8 @@ "tracelinks": "StRS-DOC-01", "konsolidierung": "nein", "pruefidee": "Suche ohne Recht `RIGHT_DOCUMENTFILEREAD` ausführen → erwartete Fehlermeldung \"Sie haben kein Recht, Dokumente zu lesen\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-DOC-05", @@ -2819,7 +2987,8 @@ "tracelinks": "keine direkte StRS-Verknüpfung (Lücke - im Kandidatenset wurde kein StRS-Geschäftsziel zu Reporting erhoben)", "konsolidierung": "nein (Hinweis: Sonderbehandlung Rechnung/Gutschrift ggf. eigenständig geregelt, vgl. SyRS-DOC-06 ZUGFeRD/GoBD-Pflichtarchivierung)", "pruefidee": "Angebot mit aktivierter PDF-Archivierung und benutzerdefiniertem Dateinamensschema drucken; prüfen ob Datei mit erwartetem Muster im Kundendokumentenordner abgelegt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-DOC-06", @@ -2837,7 +3006,8 @@ "tracelinks": "keine direkte StRS-Verknüpfung (Lücke - im Kandidatenset wurde kein StRS-Geschäftsziel zu Reporting/Rechnungswesen erhoben)", "konsolidierung": "nein (Hinweis: mögliche Überschneidung mit Cluster „Rechnungswesen/EDI\" (ZugferdExportItem, InvoiceZugferdBL) — dort vermutlich tiefer behandelt; clusterübergreifende Prüfung erfolgt zentral)", "pruefidee": "Rechnung mit aktivierter ZUGFeRD-Einstellung drucken, PDF/A-3b-Konformität des Ergebnisses technisch validieren (z. B. veraPDF).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-DOC-07", @@ -2853,7 +3023,8 @@ "tracelinks": "keine direkte StRS-Verknüpfung (Lücke - im Kandidatenset wurde kein StRS-Geschäftsziel zu Textbausteinen erhoben)", "konsolidierung": "nein", "pruefidee": "Für denselben TextModuleType je einen kunden-, benutzer- und globalen Textbaustein anlegen, prüfen ob der kundenspezifische priorisiert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-DOC-08", @@ -2871,7 +3042,8 @@ "tracelinks": "keine direkte StRS-Verknüpfung (Lücke - kein Aufrufer/Geschäftsziel im untersuchten Bereich identifiziert)", "konsolidierung": "nein", "pruefidee": "Mit Fachbereich klären, wofür Gerätezählerstände in c-entron verwendet werden (Leasingabrechnung? Verbrauchsmaterial-Controlling?) — im BL-Code dieses Clusters kein Aufrufer dieser Schnittstelle gefunden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-DOC-09", @@ -2888,7 +3060,8 @@ "tracelinks": "keine direkte StRS-Verknüpfung (Lücke - im Kandidatenset wurde kein StRS-Geschäftsziel zu Reporting erhoben)", "konsolidierung": "nein", "pruefidee": "Letzten aktiven Report einer Gruppe deaktivieren, prüfen ob zugehörige AccountPrintOption-Einträge sowie ReportDataDefault-Einträge entfernt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-INT-01", @@ -2904,7 +3077,8 @@ "tracelinks": "StRS-INT-01, StRS-INT-02", "konsolidierung": "nein", "pruefidee": "Prüfen, ob Intervall konfigurierbar sein soll (aktuell hartkodiert) und wie mit lang laufenden Zyklen (>30 Min.) umgegangen wird (Überlappung?).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-INT-02", @@ -2921,7 +3095,8 @@ "tracelinks": "StRS-INT-01", "konsolidierung": "nein", "pruefidee": "Prüfen, ob es eine UI/Funktion gibt, blacklistete Dateien manuell zurückzusetzen (Reprocessing).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-INT-03", @@ -2938,7 +3113,8 @@ "tracelinks": "StRS-INT-01", "konsolidierung": "nein", "pruefidee": "Prüfen, ob alle Lieferanten-Handler `NeedsUserValidation` konsistent setzen oder ob es Ausnahmen (Vollautomatik) gibt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-INT-04", @@ -2954,7 +3130,8 @@ "tracelinks": "StRS-INT-01, StRS-INT-02", "konsolidierung": "nein (strukturell ähnlich zu SyRS-INT-02, keine Funktionsdopplung)", "pruefidee": "Prüfen, ob 12h/4-Versuche konfigurierbar sein sollen oder als fixer Wert übernommen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-INT-05", @@ -2970,7 +3147,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Prüfen, welche SEPA-Version für Neukunden Standard sein soll und ob Formate wie PAIN.001 (Überweisung) getrennt abgedeckt sind.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-INT-06", @@ -2986,7 +3164,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Prüfen, ob Rücknahme nach bereits verbuchtem Zahlungseingang zulässig sein soll (Code bricht dies über `PaymentTransactionReturnedEmployeeI3D > 0` ab).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-INT-07", @@ -3002,7 +3181,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Klären, ob Refresh-Token-Handling existiert oder der Nutzer bei Ablauf erneut den WebForm-Flow durchlaufen muss (im gesichteten Code kein Refresh-Mechanismus erkennbar).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-INT-08", @@ -3018,7 +3198,8 @@ "tracelinks": "StRS-INT-03", "konsolidierung": "nein", "pruefidee": "Prüfen, ob es einen äquivalenten Health-Check/Watchdog unter Windows gibt (dokumentiert nur für Linux/systemd).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-INT-09", @@ -3035,7 +3216,8 @@ "tracelinks": "StRS-INT-01", "konsolidierung": "nein", "pruefidee": "Prüfen, ob es eine Eskalation/Benachrichtigung (z.B. E-Mail) an Administratoren bei wiederholten Fehlern gibt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-NEX-01", @@ -3053,7 +3235,8 @@ "tracelinks": "StRS-NEX-01", "konsolidierung": "Kandidat: SwRS-NEX-01 (Statuswechsel-Historie), StRS-NEX-01 (Kundenfreigabe-Sonderstatus NULL) - beide beschreiben denselben fachlichen Bereich \"Ticketstatus-Lebenszyklus inkl. Sonderstatus\".", "pruefidee": "Testen, ob beim Ändern der \"geschlossen\"-Status-Zuordnung in den Einstellungen alle abhängigen Module (Rechteprüfung, Statistik, Eskalation) konsistent reagieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-NEX-02", @@ -3071,7 +3254,8 @@ "tracelinks": "StRS-NEX-02", "konsolidierung": "Kandidat: SwRS-NEX-03, SwRS-NEX-04, SyRS-NEX-03 - bilden zusammen eine generische \"Notification-Engine\"-Anforderung.", "pruefidee": "Bearbeiter zu Ticket hinzufügen/entfernen, prüfen ob betroffene Mitarbeiter (nicht aber der Verursacher) eine TicketAssigned/TicketUnassigned-Notification erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-NEX-03", @@ -3087,7 +3271,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SyRS-NEX-02 (Notification-Engine-Gruppe), SyRS-NEX-07 (Outlook E-Mail-Anhang).", "pruefidee": "E-Mail per Outlook-Add-In an Ticket anhängen (siehe SyRS-NEX-07) und prüfen, dass Notification auch beim ausführenden Mitarbeiter selbst erscheint (informAll=true).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-NEX-04", @@ -3106,7 +3291,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein (clusterübergreifender Hinweis: Eskalationsmechanismus ist generisch, auch für Angebote/Aufträge/Rechnungen nutzbar - für RRE-Zwecke auf Ticket-Pfad `CentronObjectKindNumeric.HelpdeskClass` fokussiert; ggf. mit übergreifendem Eskalations-Cluster konsolidieren)", "pruefidee": "Ticket mit Priorität und Eskalationstyp anlegen, Fälligkeitsdatum in Vergangenheit setzen, Eskalationslauf simulieren (`TestEscalation`) und prüfen, ob Stufe 1 korrekt berechnet und E-Mail an konfigurierte Empfänger versendet wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-NEX-05", @@ -3123,7 +3309,8 @@ "tracelinks": "StRS-NEX-02", "konsolidierung": "Kandidat: SyRS-NEX-06 (Live-Update-Kanal), SyRS-NEX-07 (E-Mail-Anhang an Ticket).", "pruefidee": "E-Mail mit Betreff \"Re: Ticket 4711 - Anfrage\" öffnen und prüfen, dass automatisch Ticket 4711 geladen wird; Betreff ohne erkennbares Schlüsselwort aber mit Zahl testen (Fallback-Pfad).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-NEX-06", @@ -3139,7 +3326,8 @@ "tracelinks": "StRS-NEX-02, StRS-NEX-04", "konsolidierung": "nein (siehe HYPOTHESEN-Abschnitt: Transportmechanismus nicht verifiziert)", "pruefidee": "Ticket im ServiceBoard-Web-Client bearbeiten (z.B. Status ändern), während dasselbe Ticket im Outlook-Add-In angezeigt wird, und prüfen, dass Statusanzeige ohne Neuladen aktualisiert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-NEX-07", @@ -3155,7 +3343,8 @@ "tracelinks": "StRS-NEX-02", "konsolidierung": "Kandidat: SyRS-NEX-03 (DocumentReceivedOnTicket-Notification wird vermutlich dadurch ausgelöst, in diesem Lauf nicht bis zum Aufrufer zurückverfolgt).", "pruefidee": "E-Mail im Outlook-Add-In auswählen, \"Anhängen\"-Aktion ausführen und im ServiceBoard prüfen, dass Dokument im Ticket-Wurzelverzeichnis erscheint.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-NEX-08", @@ -3172,7 +3361,8 @@ "tracelinks": "StRS-NEX-01", "konsolidierung": "nein (clusterübergreifender Hinweis: grundlegend für StRS-Sicherheitsanforderung \"Mandantentrennung\", ggf. mit Security-Cluster/WebAccount-Rechte konsolidieren)", "pruefidee": "Als Web-Account mit Recht \"nur eigene Anfragen\" versuchen, ein fremdes Ticket per direkter I3D-URL abzurufen, erwartete Fehlermeldung \"Kein Recht für diese Operation\" bzw. \"Ticket nicht gefunden\" bei IsOnlyInternalVisible=true.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-NEX-09", @@ -3190,7 +3380,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein (siehe HYPOTHESEN-Abschnitt)", "pruefidee": "Konfiguration für einen Kunden mit `AllowCloseHelpdesks=false` anlegen und über die (nicht in diesem Cluster lokalisierte) externe Schnittstelle versuchen, ein Ticket zu schließen - erwartete Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-NEX-10", @@ -3207,7 +3398,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein (Hinweis: eigenständiges Feature, ggf. mit ServiceBoard/Kanban-Bereich CachedTicketList intern abgleichen, kein weiterer NEX-Kandidat in diesem Lauf identifiziert)", "pruefidee": "Globale Ansicht umbenennen und prüfen, dass alle privaten Referenzen (GlobalViewI3D-Verweise) automatisch den neuen Namen zeigen; Standardansicht wechseln und prüfen, dass exakt eine Ansicht `IsDefault=true` hat.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-NEX-11", @@ -3223,7 +3415,8 @@ "tracelinks": "StRS-NEX-02", "konsolidierung": "Kandidat: SyRS-NEX-05 (Betreff-Parsing), StRS-NEX-01 (Ticket-Erstellungslogik allgemein). Die `CreateNewTicket`-Komponente selbst wurde in diesem Lauf nicht gelesen (liegt vermutlich in CentronNexus.Shared, außerhalb Startpunkte).", "pruefidee": "E-Mail mit Betreff öffnen, \"Neues Ticket\" im Add-In anlegen, prüfen dass Betreff korrekt vorbelegt und Kunde aus E-Mail-Kontext korrekt zugeordnet wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ARCH-01", @@ -3241,7 +3434,8 @@ "tracelinks": "SyRS-ARCH-02, StRS-ARCH-01", "konsolidierung": "Kandidat: SyRS-ARCH-02", "pruefidee": "Verifizieren der Ticket-Lebensdauer und ob ein Refresh-Mechanismus existiert (nicht in Doku beschrieben).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ARCH-02", @@ -3257,7 +3451,8 @@ "tracelinks": "SyRS-ARCH-01, StRS-ARCH-06", "konsolidierung": "nein", "pruefidee": "Stichprobe an realen Entity/DTO-Paaren (z.B. Helpdesk/Ticket) auf Einhaltung der Regeln (List, DateTime?, kein ObjectMapper bei DTO→Entity).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ARCH-03", @@ -3274,7 +3469,8 @@ "tracelinks": "SyRS-ARCH-01, SyRS-ARCH-10, StRS-ARCH-06", "konsolidierung": "Kandidat: SwRS-ARCH-02", "pruefidee": "Prüfen, ob alle Webservice-Endpunkte konsequent `Response`/`Response` statt roher Exceptions zurückgeben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ARCH-04", @@ -3291,7 +3487,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Prüfen, wo (Registry/DB/Datei) das Layout gespeichert wird und ob es geräteübergreifend synchronisiert wird (nicht recherchiert).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ARCH-05", @@ -3310,7 +3507,8 @@ "tracelinks": "SyRS-ARCH-05", "konsolidierung": "nein", "pruefidee": "`CentronBindableBase.cs` und mind. 2-3 reale ViewModel-Klassen lesen, um das Muster über Doku-Rekonstruktion hinaus zu verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ARCH-06", @@ -3326,7 +3524,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Klären, ob die referenzierte PDF beschafft werden kann, um die Web-Service-API (`ICentronRestService`) vollständiger zu dokumentieren, ggf. stattdessen `ICentronRestService`-Interface direkt im Code als Quelle nutzen (in anderen Clustern ggf. bereits geschehen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SEC-01", @@ -3343,7 +3542,8 @@ "tracelinks": "StRS-SEC-02, StRS-SEC-03, StRS-SEC-04, SyRS-SEC-04", "konsolidierung": "nein", "pruefidee": "Für die Neuimplementierung: Machbarkeit eines zentralen Policy-/Authorization-Middleware-Ansatzes (z. B. Attribut-/Decorator-basiert) statt manueller Einzelprüfungen bewerten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SEC-02", @@ -3360,7 +3560,8 @@ "tracelinks": "StRS-SEC-02, StRS-SEC-04", "konsolidierung": "nein", "pruefidee": "Für Zielsystem: Bewertung, ob GUID-basierte oder feature-flag-basierte Rechte-IDs (statt inkrementeller Integer aus Legacy-DB) sinnvoller sind.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SEC-03", @@ -3378,7 +3579,8 @@ "tracelinks": "StRS-SEC-01, SyRS-SEC-01, SyRS-SEC-13, SyRS-SEC-14", "konsolidierung": "nein", "pruefidee": "Mit Entwicklung/Produktverantwortlichen klären, ob eine Migration auf gesalzene, langsame Hash-Verfahren (bcrypt/Argon2id) für die Zielarchitektur zwingend vorausgesetzt wird (Sicherheitsanforderung, nicht nur funktional).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SEC-04", @@ -3395,7 +3597,8 @@ "tracelinks": "StRS-SEC-01, SyRS-SEC-13", "konsolidierung": "nein", "pruefidee": "Klären, ob dies bewusste Produktentscheidung (Kundenservice-Anforderung) oder unbeabsichtigte Sicherheitslücke ist; Alternative (Reset-Link) für Zielsystem vorschlagen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SEC-05", @@ -3412,7 +3615,8 @@ "tracelinks": "StRS-SEC-05, SyRS-SEC-07", "konsolidierung": "nein", "pruefidee": "Klären, wo/wann `TwoFactorAuthenticationBL.ValidateAuthenticationPin` tatsächlich im Produktivbetrieb aufgerufen wird (z. B. beim Öffnen einzelner Passwort-Manager-Einträge) - in dieser Recherche wurde nur die Definition, nicht der Aufrufkontext geprüft.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SEC-06", @@ -3429,7 +3633,8 @@ "tracelinks": "StRS-SEC-07, SyRS-SEC-12", "konsolidierung": "nein", "pruefidee": "Prüfen, ob `PasswordManagementArea`-Modul überhaupt noch von der WPF-UI referenziert wird oder bereits vollständig durch das Hotline-basierte Passwort-Manager-Modul (`PasswordManagerBL`) ersetzt wurde; ggf. als \"nicht migrieren\" einstufen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SEC-07", @@ -3446,7 +3651,8 @@ "tracelinks": "SyRS-SEC-05", "konsolidierung": "nein", "pruefidee": "Prüfen, ob Ticket-IDs zusätzlich an Transport-Sicherheit (TLS) gebunden sind, da sie als Bearer-ähnliches Sitzungsmerkmal fungieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-CRM-01", @@ -3462,7 +3668,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SwRS-CRM-07, SyRS-CRM-09 (gemeinsames Thema: fehlende serverseitige Formatvalidierung von Stammdatenfeldern)", "pruefidee": "Kunde ohne Namen über Backend-API/BL anlegen und Fehlermeldungstext/-code prüfen; Kunde mit Namen aber ohne Adresse/USt-IdNr. anlegen und beobachten, dass kein Fehler auftritt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-CRM-02", @@ -3480,7 +3687,8 @@ "tracelinks": "SyRS-CRM-03, StRS-CRM-01", "konsolidierung": "Kandidat: SwRS-CRM-04", "pruefidee": "Neuen Kunden über UI/BL anlegen, DB-Werte für `Status`/`Sperre` und Adress-Flag `DefaultCustomer` prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-CRM-03", @@ -3496,7 +3704,8 @@ "tracelinks": "SyRS-CRM-01", "konsolidierung": "Kandidat: SyRS-CRM-01, SyRS-CRM-02", "pruefidee": "Adresse ohne `CustomerI3D`/`SupplierI3D` speichern und Fehlermeldung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-CRM-04", @@ -3512,7 +3721,8 @@ "tracelinks": "SyRS-CRM-01, SyRS-CRM-02", "konsolidierung": "Kandidat: SwRS-CRM-02", "pruefidee": "Kunde ohne Adressliste anlegen; DB-Zustand nach Speichern prüfen (Adresse + Ansprechpartner vorhanden, `DefaultCustomer=true`, `Default=true`).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-CRM-05", @@ -3528,7 +3738,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein (thematisch mit Cluster „Dokumentenmanagement\" verknüpft, außerhalb dieses Clusters)", "pruefidee": "Neuen Kunden anlegen und Verzeichnisbaum im DMS-Modul auf Vollständigkeit prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-CRM-06", @@ -3545,7 +3756,8 @@ "tracelinks": "SyRS-CRM-06", "konsolidierung": "Kandidat: SyRS-CRM-06 (konkurrierendes Aktiv-Kriterium für verwandte Entität AppUser/Employee)", "pruefidee": "Mitarbeiter mit `LeavingDate = 1899-01-01` bzw. `LeavingDate = null` anlegen und prüfen, ob beide als \"aktiv\" gelten (sofern `State=1`); Vergleich mit `IsActive`-Feld auf Inkonsistenzen prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-CRM-07", @@ -3563,7 +3775,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SwRS-CRM-01, SyRS-CRM-08, SyRS-CRM-09 (gemeinsames Thema: fehlende serverseitige Validierung/Redundanz von Stammdatenfeldern)", "pruefidee": "Prüfen, welches der Felder tatsächlich in Rechnungsstellung/EDI (z. B. ZUGFeRD) verwendet wird; Format-Grep in Validierungs-/Regex-Bibliotheken.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-CRM-08", @@ -3580,7 +3793,8 @@ "tracelinks": "StRS-CRM-02", "konsolidierung": "Kandidat: StRS-CRM-02, StRS-CRM-03 (gemeinsames Thema DSGVO-Datenlöschung/-bereinigung)", "pruefidee": "Im laufenden System versuchen, eine kundenbezogene DSGVO-Löschung auszuführen, und den resultierenden Fehler dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-CRM-09", @@ -3596,7 +3810,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Kundenherkunft löschen, die noch von einem Kunden referenziert wird; Fehlermeldung/-verhalten dokumentieren; feststellen, ob Fehlermeldung an Endnutzer tatsächlich englischsprachig ausgegeben wird (i18n-Lücke).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-CRM-10", @@ -3612,7 +3827,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Zwei `EmployeeRfidToken`-Datensätze mit identischem entschlüsseltem Tokenwert für unterschiedliche Mitarbeiter anlegen und prüfen, ob dies zugelassen wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-CRM-11", @@ -3629,7 +3845,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "UI-Bezeichnungen der Felder Adviser5/Adviser6 im WPF-Client (nicht Teil dieses Clusters) abgleichen, um deren fachliche Bedeutung zu klären.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-CRM-12", @@ -3646,7 +3863,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein (Auswertung vermutlich im Cluster „Vertrieb/Auftragsabwicklung\" gegenzuprüfen)", "pruefidee": "Auftrag für Kunden mit `PurchaseOrderNumberRequiered=true` ohne Bestellnummer anlegen (im Auftragsmodul, nicht Teil dieses Clusters) und Systemverhalten prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-01", @@ -3662,7 +3880,8 @@ "tracelinks": "SyRS-SALES-01 - Begründung: konkretisiert den Zustandsübergang \"offen → abgeschlossen\" des einheitlichen ReceiptState-Automaten für Angebote.", "konsolidierung": "nein", "pruefidee": "Setting auf jeden der drei Werte stellen und Teil-/Vollübernahme eines Angebots in einen Auftrag testen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-02", @@ -3679,7 +3898,8 @@ "tracelinks": "SyRS-SALES-01 - Begründung: konkretisiert Zustandsübergänge des einheitlichen ReceiptState-Automaten für Aufträge/Angebote.", "konsolidierung": "nein", "pruefidee": "Auftrag manuell schließen, dann Ursprungsangebot ändern → Auftrag darf nicht automatisch wieder öffnen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-03", @@ -3695,7 +3915,8 @@ "tracelinks": "SyRS-SALES-09, SyRS-SALES-10 - Begründung: implementiert die Pflichtfeldprüfung, die Teil des Freigabeworkflows (SyRS-SALES-09) und Vorbedingung für dessen automatischen Abschluss (SyRS-SALES-10) ist.", "konsolidierung": "nein", "pruefidee": "Warenkorb ohne Lieferadresse final bestellen → Exception; mit Adresse → Auftrag mit IsDirectDeliveryPossible=true wird erzeugt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-04", @@ -3712,7 +3933,8 @@ "tracelinks": "SyRS-SALES-02 - Begründung: thematische Nähe zur Auftrag→Rechnung-Beziehung im allgemeinen Belegfluss (wenn auch technisch über eine eigene Methode statt des generischen ForwardReceipt realisiert).", "konsolidierung": "nein", "pruefidee": "Anzahlungsrechnung aus Auftrag erzeugen, prüfen ob Verknüpfung in Belegverfolgung (\"Progression\") sichtbar ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-05", @@ -3729,7 +3951,8 @@ "tracelinks": "SyRS-SALES-01 - Begründung: die Aufgabenerzeugung ist eine an Speicher-/Statusereignisse des ReceiptState-Automaten gekoppelte Nebenwirkung.", "konsolidierung": "nein", "pruefidee": "Auftrag mit Picking-Artikel und QuantityPicked=0 anlegen → Kommissionierungs-To-Do muss entstehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-06", @@ -3745,7 +3968,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke) - kein eigenständiger SyRS-/StRS-Kandidat zu Provisionierung in diesem Cluster erhoben.", "konsolidierung": "nein", "pruefidee": "Setting OrderAutoProvisionEmployee=2 (Adviser3) und Prozentsatz 10 setzen, neuen Auftrag anlegen, Provisionsempfänger/-anteil prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-07", @@ -3762,7 +3986,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Bestellung in Filiale A für Auftrag in Filiale B abwickeln, prüfen ob Datensatz in SupplierOrderPerBranch-Liste erscheint und nach Export nicht erneut.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-08", @@ -3779,7 +4004,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Neuen Kunden anlegen, prüfen ob nach Ausführung des Nachlege-Jobs für alle Matrix-Produkte ein Rating mit Wert \"Nothing\" existiert; Rating ändern und Change-Log prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-09", @@ -3795,7 +4021,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke) - Legacy-Pfad (CustomerAssets-Architektur), kein SyRS-Pendant im Receipt-Framework erhoben.", "konsolidierung": "nein", "pruefidee": "Bereits verplante oder bereits weiterverarbeitete Helpdeskzeit an Pauschalposition anhängen → jeweilige Fehlermeldung erwartet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-10", @@ -3811,7 +4038,8 @@ "tracelinks": "SyRS-SALES-01 - Begründung: der Abschlussgrund ist ein Attribut des Zustandsübergangs \"abgeschlossen\" im ReceiptState-Automaten.", "konsolidierung": "nein", "pruefidee": "Abschlussgrund löschen, der einem geschlossenen Angebot zugeordnet ist → Fehlermeldung erwartet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-11", @@ -3827,7 +4055,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke) - für eine Web/SaaS-Neuimplementierung zu klären, ob Barverkauf gefordert ist (aktuell technisch ausgeschlossen, kein SyRS-/StRS-Pendant vorhanden).", "konsolidierung": "nein", "pruefidee": "Beleg mit IsCashAsset=true speichern → Speichervorgang muss mit exakt dieser Meldung abgebrochen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-12", @@ -3845,7 +4074,8 @@ "tracelinks": "SyRS-SALES-02 - Begründung: die Positionsarten-Umwandlung ist ein direkter Bestandteil der Weiterleitungskette Angebot→Auftrag.", "konsolidierung": "nein", "pruefidee": "Angebot mit Alternativposition in Auftrag weiterleiten, Einstellung InOrderForArticlePositionKindAlternativeUse auf verschiedene Werte testen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-13", @@ -3861,7 +4091,8 @@ "tracelinks": "SyRS-SALES-01 - Begründung: konkretisiert (im Legacy-Codepfad) denselben Zustandsübergang \"offen → abgeschlossen\" wie SwRS-SALES-01/-10.", "konsolidierung": "Kandidat: SwRS-SALES-10 (Löschschutz für Angebots-Abschlussgründe) - Begründung: beide Anforderungen betreffen dieselbe fachliche Funktion \"Abschlussgrund eines Angebots\"; ggf. Ablösung dieses Legacy-Pfads durch das Receipt-Framework/ReceiptCompleteReason zu prüfen.", "pruefidee": "Angebot ohne Abschlussgrund manuell schließen → Methode liefert false, Status bleibt \"offen\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-BILL-01", @@ -3878,7 +4109,8 @@ "tracelinks": "SyRS-BILL-16, StRS-BILL-03", "konsolidierung": "nein", "pruefidee": "Kunde mit LockOrderAfterDunning=1 und aktueller Mahnstufe 1: Auftragsanlage -> Fehlermeldung erwarten; Mahnstufe 0 -> Anlage möglich", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-BILL-02", @@ -3894,7 +4126,8 @@ "tracelinks": "SyRS-BILL-04, StRS-BILL-04", "konsolidierung": "nein", "pruefidee": "Zahlungseingang zu Rechnung erfassen, Saldo prüfen, Zahlungseingang löschen, Saldo erneut prüfen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-BILL-03", @@ -3910,7 +4143,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Aktionspreis mit EffectiveUntil in der Vergangenheit anlegen, Preismatrix öffnen -> Preis darf nicht erscheinen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-BILL-04", @@ -3927,7 +4161,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Aktionspreis direkt über REST-Endpoint `SaveOrUpdateActionPrice` mit leerem Distributor bzw. EffectiveFrom > EffectiveUntil senden -> prüfen ob Speicherung dennoch gelingt", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-BILL-05", @@ -3943,7 +4178,8 @@ "tracelinks": "SyRS-BILL-18, StRS-BILL-04", "konsolidierung": "nein", "pruefidee": "Vertragsänderung durchführen, AnlageLog-Eintrag mit AnlageArt=22 und korrektem AnlageI3D erwarten", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-BILL-06", @@ -3959,7 +4195,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Vertragsrecht sucht belegtypübergreifend -> Verträge dürfen nicht im Ergebnis erscheinen", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-TIME-01", @@ -3975,7 +4212,8 @@ "tracelinks": "SyRS-TIME-01, SyRS-TIME-02", "konsolidierung": "nein", "pruefidee": "Neue Zeit anlegen und prüfen, dass alle Felder persistiert werden; IsAssignedToAsset bei Zuordnung zu Beleg true.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-TIME-02", @@ -3991,7 +4229,8 @@ "tracelinks": "SyRS-TIME-01", "konsolidierung": "nein", "pruefidee": "Zeit mit Start=10:00, Stop=10:30 anlegen, prüfen dass Timer=1800 gespeichert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-TIME-03", @@ -4007,7 +4246,8 @@ "tracelinks": "SyRS-TIME-01", "konsolidierung": "Kandidat: SyRS-TIME-02 (siehe dort)", "pruefidee": "Zeit, die einer Rechnung zugeordnet ist, bearbeiten -> ArgumentException \"...da sie einer Rechnung zugeordnet ist.\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-TIME-04", @@ -4023,7 +4263,8 @@ "tracelinks": "SyRS-TIME-01", "konsolidierung": "nein", "pruefidee": "Zeit mit Stop < Start speichern -> Fehlermeldung, kein Speichern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-TIME-05", @@ -4039,7 +4280,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Zeit ohne Recht DELETE_HELPDESK_SIGNATURE entfernen lassen -> Fehler \"Sie besitzen nicht das Recht...\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-TIME-06", @@ -4056,7 +4298,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Start einer Zeit ändern -> Log-Eintrag mit \"Start: 'alt' => 'neu'\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-TIME-07", @@ -4072,7 +4315,8 @@ "tracelinks": "SyRS-TIME-08", "konsolidierung": "nein", "pruefidee": "DocBee sendet Status \"Cancelled\" für existierende ExternalId -> zugehörige HelpdeskTimer wird gelöscht (sofern nicht bereits abgerechnet).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-TIME-08", @@ -4088,7 +4332,8 @@ "tracelinks": "SyRS-TIME-05, StRS-TIME-01", "konsolidierung": "nein", "pruefidee": "Zeit mit 50 % Zuschlag auf Position mit 21 % Rabatt abrechnen -> resultierender „Rabatt\" auf der Position ist rechnerisch -18,5 %.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-TIME-09", @@ -4105,7 +4350,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Ticketprojekt ohne ShortDescription speichern -> Guard-Fehler; Filter OnlyActive=true liefert nur Status==1.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-TIME-10", @@ -4122,7 +4368,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "TicketProjectTask löschen -> Datensatz bleibt in der DB mit IsActive=false erhalten; GetTicketProjectTasks (IncludeInactive=false) liefert ihn nicht mehr.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-TIME-11", @@ -4139,7 +4386,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein (Beobachtung: überlappende BL-Klassen `TicketProjectBL`/`TicketProjectDependencyBL` auf Implementierungsebene, aber keine zweite Anforderung im Kandidatensatz, die dieselbe fachliche Funktion beschreibt)", "pruefidee": "Abhängigkeit FinishToStart zwischen zwei TicketProjectTasks anlegen und wieder abfragen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-TIME-12", @@ -4156,7 +4404,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Fortschritt einer TicketProjectTask ändern -> Log-Eintrag mit EventType=ProgressHasChanged wird erwartet (Ereigniserzeugung selbst nicht in den gelesenen Dateien lokalisiert, nur Datenmodell/Filter – als Lücke vermerkt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-TIME-13", @@ -4172,7 +4421,8 @@ "tracelinks": "StRS-TIME-03", "konsolidierung": "nein", "pruefidee": "Prüfen, ob `ProjectBL`/`Project`-Entity in der WPF-UI überhaupt noch referenziert wird (nicht Teil dieser Recherche).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-TIME-14", @@ -4189,7 +4439,8 @@ "tracelinks": "SyRS-TIME-15", "konsolidierung": "nein", "pruefidee": "Zwei parallele Ausführungsanfragen für denselben Task am selben Tag simulieren -> zweiter Aufruf erhält Warnung statt Doppelanlage eines Tickets.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-TIME-15", @@ -4205,7 +4456,8 @@ "tracelinks": "SyRS-TIME-10, SyRS-TIME-17", "konsolidierung": "nein", "pruefidee": "Vom Mitarbeiter verworfenen TeamViewer-Vorschlag erneut abrufen (gleicher Zeitraum) -> Vorschlag erscheint nicht erneut.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-LOG-01", @@ -4221,7 +4473,8 @@ "tracelinks": "SyRS-LOG-04", "konsolidierung": "Kandidat: SwRS-LOG-06, SwRS-LOG-07 (ergänzende SN-Pflicht-Constraints derselben fachlichen Domäne)", "pruefidee": "Bestandsbuchung für Artikel mit ScanBarcode=false und ScanBarcode=true vergleichen; prüfen ob Barcode-Zustand bei false wirklich keinen Einfluss auf `ARTIK.Menge`/`NebenlagerArtikel.Bestand` hat.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-LOG-02", @@ -4237,7 +4490,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Wareneingang mit unterschiedlichen `NoMixedEk`-Einstellungen durchspielen und resultierenden EK sowie Rundung verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-LOG-03", @@ -4253,7 +4507,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Rebooking ohne Mitarbeiter/ohne Ziellager auslösen und erwartete Fehlermeldung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-LOG-04", @@ -4269,7 +4524,8 @@ "tracelinks": "SyRS-LOG-07", "konsolidierung": "nein", "pruefidee": "Barcode mit Status InInvoice in Inventur scannen → erwartete Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-LOG-05", @@ -4285,7 +4541,8 @@ "tracelinks": "SyRS-LOG-05", "konsolidierung": "nein", "pruefidee": "Korrektur für SN-pflichtigen Artikel anstoßen → erwartete Fehlermeldung; parallel prüfen ob Bestandsänderung konsistent mit Werten aus `ArticleStockBL` bleibt (Umgehung der zentralen Buchungslogik als Risiko).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-LOG-06", @@ -4301,7 +4558,8 @@ "tracelinks": "SyRS-LOG-04", "konsolidierung": "Kandidat: SwRS-LOG-01", "pruefidee": "Artikel mit Bestand > 0 speichern und ScanBarcode-Flag umschalten → Fehlermeldung erwarten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-LOG-07", @@ -4317,7 +4575,8 @@ "tracelinks": "SyRS-LOG-04", "konsolidierung": "Kandidat: SwRS-LOG-01", "pruefidee": "Setting aktivieren, Anzahl Seriennummern künstlich von Lagermenge abweichen lassen, Speichern testen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-LOG-08", @@ -4333,7 +4592,8 @@ "tracelinks": "SyRS-LOG-07", "konsolidierung": "nein", "pruefidee": "Barcode einem Auftrag zuweisen, dann Zuweisung zu einem zweiten Auftrag versuchen → Fehler erwarten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-LOG-09", @@ -4349,7 +4609,8 @@ "tracelinks": "StRS-LOG-02, SyRS-LOG-11", "konsolidierung": "nein", "pruefidee": "Stückliste für Artikel A anlegen, Fertigungsauftrag erzeugen, prüfen ob Schrittreihenfolge (SortOrder) korrekt übernommen wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-LOG-10", @@ -4365,7 +4626,8 @@ "tracelinks": "StRS-LOG-02", "konsolidierung": "nein", "pruefidee": "Maschinenstandort-Hierarchie mit 2 Ebenen anlegen und Filterung nach übergeordnetem Standort prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-LOG-11", @@ -4381,7 +4643,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Lagerplatz mit 2 Lagerbereichen deaktivieren und prüfen, ob beide Bereiche automatisch auf State=0 gesetzt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-LOG-12", @@ -4397,7 +4660,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Zweiten Zustand als Default markieren und prüfen, ob der vorherige Default automatisch zurückgesetzt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-01", @@ -4414,7 +4678,8 @@ "tracelinks": "StRS-ADM-01; SyRS-ADM-01", "konsolidierung": "nein", "pruefidee": "Unit-Test: GetSettings mit gemischter Liste aus AppSettingsConst und ApplicationSettingID prüfen; GetSettings mit anderem Objekttyp muss Exception werfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-02", @@ -4431,7 +4696,8 @@ "tracelinks": "StRS-ADM-01; SyRS-ADM-01", "konsolidierung": "nein", "pruefidee": "Prüfen ob je vergebener ID genau eine Beschreibung in ApplicationSettingDefinitions existiert (Konsistenzcheck als Build-Test denkbar).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-03", @@ -4447,7 +4713,8 @@ "tracelinks": "StRS-ADM-01; SyRS-ADM-01", "konsolidierung": "nein", "pruefidee": "Test: GetSettings mit einer neuen, noch nie gespeicherten ApplicationSettingID aufrufen und prüfen, dass ein Datensatz mit Default-Werten entsteht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-04", @@ -4463,7 +4730,8 @@ "tracelinks": "StRS-ADM-01; SyRS-ADM-01", "konsolidierung": "nein", "pruefidee": "Test: In DB einen Enum-Setting-Wert außerhalb des gültigen Bereichs speichern (z.B. -1) und prüfen, dass GetEnum den übergebenen Default zurückgibt statt zu werfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-05", @@ -4479,7 +4747,8 @@ "tracelinks": "StRS-ADM-02; SyRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Test: Neues ModuleClass-Objekt mit unbekannter GUID übergeben, prüfen dass genau ein neuer Module-Datensatz inkl. Kategorie entsteht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-06", @@ -4495,7 +4764,8 @@ "tracelinks": "StRS-ADM-02; SyRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Testfall: Neue CentronModuleCategory ohne case in DoGetDisplayTextForCategory hinzufügen, prüfen dass ArgumentOutOfRangeException geworfen wird (\"Unknown category: ...\").", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-07", @@ -4512,7 +4782,8 @@ "tracelinks": "SyRS-ADM-02; StRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "API-Test: Filter mit OnlyErrors=true setzen, prüfen dass nur Error/PartlyError-Einträge zurückkommen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-08", @@ -4528,7 +4799,8 @@ "tracelinks": "SyRS-ADM-02; StRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Test: Zwei Objekte mit identischem NotificationUser (gleiche Felder) verknüpfen, prüfen dass nur ein NotificationUser-Datensatz in der DB existiert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-09", @@ -4544,7 +4816,8 @@ "tracelinks": "StRS-ADM-03; SyRS-ADM-03", "konsolidierung": "nein", "pruefidee": "Konfigurationstest: Host=smtp.office365.com, SmtpSslActive=false setzen, prüfen dass EnableSsl dennoch true ist. Für Web-Neuimplementierung klären, ob dieser Sonderfall fachlich gewollt bleibt oder durch allgemeine Pflichtverschlüsselung ersetzt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-10", @@ -4561,7 +4834,8 @@ "tracelinks": "StRS-ADM-03; SyRS-ADM-04 (verwandtes Muster inkonsistenter Zugangsdaten-Verschlüsselung)", "konsolidierung": "nein", "pruefidee": "Sicherheitsreview: DB-Inhalt der Stammdat-Zeile für MailSmtpPassword direkt inspizieren und mit ApplicationSetting für GraphAppSecret vergleichen (Klartext vs. Chiffrat).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-11", @@ -4577,7 +4851,8 @@ "tracelinks": "StRS-ADM-03; SyRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Test: Mail mit einer gültigen und einer syntaktisch ungültigen To-Adresse versenden; erwartet ResultStatus.Warning und Zustellung an die gültige Adresse.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-12", @@ -4593,7 +4868,8 @@ "tracelinks": "StRS-ADM-03; SyRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Test: MailSettingsDTO mit leerem SmtpHost übergeben, prüfen dass ResultException mit exaktem Meldungstext geworfen wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-13", @@ -4610,7 +4886,8 @@ "tracelinks": "StRS: keine direkte Verknüpfung (Lücke); SyRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Testmatrix: Für dieselbe MailTemplateReference gezielt nur Branch- und Global-Vorlage anlegen (keine Account-/Personal-Vorlage), erwartete Ergebnis-Ebene \"branch\" prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-14", @@ -4627,7 +4904,8 @@ "tracelinks": "StRS: keine direkte Verknüpfung (Lücke); SyRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Datenmodell-Review: Prüfen ob für jede fachliche Verwendung (Offer, Order, Helpdesk, Escalation, ...) eine eindeutige MailTemplateReference in `MailTemplateReferences` registriert ist ohne Kollisionen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-15", @@ -4644,7 +4922,8 @@ "tracelinks": "StRS: keine direkte Verknüpfung (Lücke); SyRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Test: Vorlage mit historischem Platzhalter \"KdNummer\" gegen aktuelle Variable \"KundenNummer\" prüfen, ob beide Schreibweisen korrekt ersetzt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-16", @@ -4661,7 +4940,8 @@ "tracelinks": "StRS: keine direkte Verknüpfung (Lücke); SyRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Test: Vorlage mit Body-Inhalt \"-\" laden, prüfen dass der zurückgegebene Body leer ist statt des RTF-formatierten Bindestrichs.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-17", @@ -4677,7 +4957,8 @@ "tracelinks": "StRS-ADM-03 (gemeinsamer Kommunikations-/Sicherheitskontext); SyRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Test: Blacklist-Eintrag \"@spam.de\" (exakt) und \"test\" (Muster) anlegen; prüfen dass \"user@spam.de\" gesperrt ist und \"user@mytest.de\" ebenfalls über Musterprüfung erkannt wird; ungültige Adresse ohne \"@\" liefert Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-18", @@ -4693,7 +4974,8 @@ "tracelinks": "StRS-ADM-03 (gemeinsamer Kommunikationskontext); SyRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Funktionstest: Tracking-Keyword für \"Angebot\" setzen, prüfen dass es korrekt persistiert und beim Laden zurückgegeben wird; Zusammenspiel mit MailScanner (Zuordnungslogik) als Anschlussfrage prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ADM-19", @@ -4709,7 +4991,8 @@ "tracelinks": "SyRS-ADM-04; StRS: keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Berechtigungstest: Benutzer ohne ACCESS_VMA_MODULE-Recht ruft GetProfiles auf, erwartet Fehlermeldung statt Daten. Ergänzend: Rechteprüfung für Save/Delete/SaveTasks im Code verifizieren (evtl. Lücke).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-DOC-01", @@ -4727,7 +5010,8 @@ "tracelinks": "SyRS-DOC-01, StRS-DOC-01", "konsolidierung": "nein", "pruefidee": "Datei zweimal hochladen (gleicher Name/Ordner) → prüfen ob zwei Datensätze mit Version 1/2 und gemeinsamer OwnerDocument-Referenz entstehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-DOC-02", @@ -4743,7 +5027,8 @@ "tracelinks": "SyRS-DOC-05", "konsolidierung": "nein", "pruefidee": "Denselben Beleg zweimal exportieren, prüfen ob nur ein Dokumentdatensatz im Zielordner entsteht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-DOC-03", @@ -4759,7 +5044,8 @@ "tracelinks": "StRS-DOC-01 (keine direkte SyRS-Verknüpfung - Lücke, im Kandidatenset keine SyRS zu Mail-Dokumentsicherheit erhoben)", "konsolidierung": "nein", "pruefidee": "Signierte E-Mail mit ungültiger Signatur importieren und im FileManagement öffnen — prüfen ob Warnhinweis im UI sichtbar ist (aktuell nur Log, kein UI-Hinweis erkennbar).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-DOC-04", @@ -4775,7 +5061,8 @@ "tracelinks": "StRS-DOC-01 (keine direkte SyRS-Verknüpfung - Lücke)", "konsolidierung": "nein (Migrationshinweis: Einschränkung ist technikbedingt/Legacy-DB-Schema und entfällt vermutlich bei Unicode-fähiger DB im Web/SaaS-Neubau)", "pruefidee": "Datei mit z. B. kyrillischem oder emoji-haltigem Dateinamen hochladen, prüfen welche Zeichen im gespeicherten Namen verloren gehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-DOC-05", @@ -4791,7 +5078,8 @@ "tracelinks": "StRS-DOC-02 (keine direkte SyRS-Verknüpfung - Lücke)", "konsolidierung": "Kandidat: SwRS-DOC-01 (analoges Append-Only-Versionierungsmuster wie bei Document, jedoch andere Entität „Documentation\" — Vereinheitlichung im Neubau prüfen)", "pruefidee": "Bestehende Dokumentation zweimal ändern, prüfen ob zwei DocumentationVersion-Datensätze mit korrekten Feldwerten entstehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-DOC-06", @@ -4808,7 +5096,8 @@ "tracelinks": "SyRS-DOC-05, SyRS-DOC-06", "konsolidierung": "nein", "pruefidee": "Alternativen PDF-Drucker simuliert nicht verfügbar machen, prüfen ob nach Fehlschlag automatisch FastReport verwendet wird und ob nach 30 Minuten erneut versucht wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-DOC-07", @@ -4825,7 +5114,8 @@ "tracelinks": "SyRS-DOC-05", "konsolidierung": "nein", "pruefidee": "Zwei ReportDataQuery-Objekte mit sich gegenseitig referenzierendem SuperQuery anlegen und Reportausführung testen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-DOC-08", @@ -4841,7 +5131,8 @@ "tracelinks": "SyRS-DOC-09", "konsolidierung": "nein", "pruefidee": "Parameter in FastReport-Designer umbenennen/Typ ändern, Report speichern, prüfen ob ReportDataParameters-Tabelle korrekt aktualisiert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-DOC-09", @@ -4858,7 +5149,8 @@ "tracelinks": "SyRS-DOC-07", "konsolidierung": "nein", "pruefidee": "Katalog aller TextModuleType-Werte aus der Enum-Datei extrahieren und mit Fachbereich abgleichen, welche im Web-Redesign noch benötigt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-DOC-10", @@ -4874,7 +5166,8 @@ "tracelinks": "SyRS-DOC-07", "konsolidierung": "nein (Grundlage für SwRS-DOC-11, keine Funktionsduplikat)", "pruefidee": "RTF-Textbaustein mit Platzhalter in einem Hyperlink anlegen (z. B. `mailto:@@KdEMail@@`), Ersetzung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-DOC-11", @@ -4891,7 +5184,8 @@ "tracelinks": "SyRS-DOC-07", "konsolidierung": "nein (ergänzt SwRS-DOC-10 zur vollständigen Platzhalterlogik, keine Duplikat-Funktion)", "pruefidee": "Kundenanlage ohne hinterlegten Ansprechpartner verwenden, prüfen ob `@@AnsprechVorname@@` als Leerstring statt Exception im Ergebnistext erscheint.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-DOC-12", @@ -4907,7 +5201,8 @@ "tracelinks": "SyRS-DOC-07", "konsolidierung": "nein", "pruefidee": "Lieferantenbestellung und Kundenangebot jeweils per Mail versenden, prüfen ob korrekte Platzhaltergruppe angewendet wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-DOC-13", @@ -4923,7 +5218,8 @@ "tracelinks": "SyRS-DOC-05", "konsolidierung": "nein", "pruefidee": "Druckeinstellungen (z. B. Duplex + Schacht 2) für eine Reportgruppe konfigurieren, Druckvorgang auslösen und physische/simulierte Druckerparameter verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-01", @@ -4939,7 +5235,8 @@ "tracelinks": "SyRS-INT-01, StRS-INT-01", "konsolidierung": "nein", "pruefidee": "Sicherheitsreview: Warum wird bei FTPS jedes Zertifikat akzeptiert? Timeout von 120 Minuten je SFTP-Operation prüfen (ungewöhnlich lang, ggf. Workaround für langsame Lieferanten-Server).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-02", @@ -4956,7 +5253,8 @@ "tracelinks": "SyRS-INT-01, StRS-INT-01", "konsolidierung": "nein", "pruefidee": "Verifizieren, ob Duplikatsprüfung auch bei Dateinamensänderung durch Lieferanten (z.B. Zeitstempel im Namen) robust bleibt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-03", @@ -4972,7 +5270,8 @@ "tracelinks": "SyRS-INT-01, StRS-INT-01", "konsolidierung": "nein", "pruefidee": "Prüfen, wie mit fehlerhaften/passwortgeschützten ZIP-Dateien umgegangen wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-04", @@ -4988,7 +5287,8 @@ "tracelinks": "SyRS-INT-01, StRS-INT-01", "konsolidierung": "nein", "pruefidee": "Schlüsselverwaltung der AES-Verschlüsselung prüfen (Ort, Rotation) - im gesichteten Code nicht ersichtlich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-05", @@ -5005,7 +5305,8 @@ "tracelinks": "SyRS-INT-04, StRS-INT-01, StRS-INT-02", "konsolidierung": "nein", "pruefidee": "Klären, ob \"fjku6Zi0l8Dq\" ein öffentlicher c-entron-Partner-Account bei ITScope oder ein sensibles Secret ist (Security-Review empfohlen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-06", @@ -5022,7 +5323,8 @@ "tracelinks": "SyRS-INT-09, StRS-INT-01", "konsolidierung": "nein", "pruefidee": "Prüfen, ob EGIS-Fehlercodes vollständig auf nutzerverständliche Meldungen gemappt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-07", @@ -5038,7 +5340,8 @@ "tracelinks": "StRS-INT-01", "konsolidierung": "nein", "pruefidee": "Prüfen, welche ZUGFeRD-Profile (BASIC, COMFORT, EXTENDED) unterstützt werden und wie mit reinen PDF-Rechnungen ohne XML umgegangen wird (Fallback laut edi-architecture.md: `IsZUGFeRD = true`-Markierung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-08", @@ -5054,7 +5357,8 @@ "tracelinks": "StRS-INT-01", "konsolidierung": "nein", "pruefidee": "Prüfen, ob Validierung gegen offizielles ebInterface-XSD-Schema erfolgt und ob Versionierung (z.B. 5.0) geplant ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-09", @@ -5070,7 +5374,8 @@ "tracelinks": "SyRS-INT-07", "konsolidierung": "nein", "pruefidee": "Prüfen, ob bei sehr vielen Seiten ein Performance-/Timeout-Risiko besteht (keine Parallelisierung, sequentielle Abfrage).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-10", @@ -5087,7 +5392,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SwRS-INT-12 (Shipcloud als alternativer/konsolidierter Versand-Adapter)", "pruefidee": "Sicherheitsreview: Zweck des zusätzlichen fest hinterlegten `Authorization`-Headers klären (wirkt wie totes/veraltetes Legacy-Credential neben dynamischer `NetworkCredential`) - Secret-Leak-Risiko im Quellcode.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-11", @@ -5103,7 +5409,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SwRS-INT-12 (Shipcloud als alternativer/konsolidierter Versand-Adapter)", "pruefidee": "Prüfen, ob diese Limits bei GLS-API-Änderungen zentral pflegbar sind (aktuell als Magic Numbers im Code).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-12", @@ -5119,7 +5426,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SwRS-INT-10, SwRS-INT-11 (Versand über GLS-Direktanbindung vs. Shipcloud-Aggregator - ggf. auf einheitlichen Adapter konsolidieren)", "pruefidee": "Prüfen, ob Shipcloud GLS als eigene Direktanbindung ablöst oder parallel für andere Carrier eingesetzt wird (Konsolidierungsbedarf für Zielarchitektur).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-13", @@ -5135,7 +5443,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SwRS-INT-14, SwRS-INT-15 (weitere Produktdatenquellen - ggf. auf einheitlichen Produktdaten-Adapter konsolidieren)", "pruefidee": "Prüfen, in welchem Turnus/Trigger die COP-Synchronisation angestoßen wird (im gesichteten Ausschnitt nicht erkennbar).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-14", @@ -5151,7 +5460,8 @@ "tracelinks": "SyRS-INT-04, StRS-INT-02", "konsolidierung": "nein (ergänzt SwRS-INT-05 ITScope-Authentifizierung, keine Funktionsdopplung)", "pruefidee": "Prüfen, ob die Quota-Information im System aktiv ausgewertet wird (z.B. Drosselung) oder nur informativ abrufbar ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-15", @@ -5167,7 +5477,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SwRS-INT-13, SwRS-INT-14 (weitere Produktdatenquellen - ggf. auf einheitlichen Produktdaten-Adapter konsolidieren)", "pruefidee": "Prüfen, welche Sprachen/Länder unterstützt werden und ob Bilddaten mit heruntergeladen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-16", @@ -5183,7 +5494,8 @@ "tracelinks": "StRS-INT-01", "konsolidierung": "nein", "pruefidee": "Klären, warum das Passwort im Feld `Additional` statt im regulären Passwortfeld der Konfiguration abgelegt ist (Konsistenzproblem im Datenmodell).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-17", @@ -5199,7 +5511,8 @@ "tracelinks": "StRS-INT-03", "konsolidierung": "nein", "pruefidee": "Prüfen, ob Retry-Logik für fehlgeschlagene Webhook-Zustellungen existiert (im gesichteten Code nicht erkennbar - einmaliger Versuch pro Aufruf).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-18", @@ -5215,7 +5528,8 @@ "tracelinks": "SyRS-INT-01, StRS-INT-01", "konsolidierung": "nein", "pruefidee": "Klären, ob diese Sonderbehandlung noch benötigt wird oder Altlast eines längst migrierten Partners ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-INT-19", @@ -5231,7 +5545,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein", "pruefidee": "Exportformat (Feldstruktur, Frequenz) und tatsächlichen Übertragungsweg (FTP-Zieladresse) im weiteren Verlauf detailliert prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-NEX-01", @@ -5247,7 +5562,8 @@ "tracelinks": "SyRS-NEX-01, SyRS-NEX-04, StRS-NEX-01", "konsolidierung": "Kandidat: SyRS-NEX-01, SyRS-NEX-04 (Eskalationsstufen) - ergänzt das Statuskonzept und die Eskalationsstufen um Historisierung/Reset.", "pruefidee": "Ticket-Status ändern und prüfen, ob HelpdeskHistory-Eintrag mit korrektem Text erzeugt wird; Fälligkeitsdatum ändern und EscalationLevel prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-NEX-02", @@ -5263,7 +5579,8 @@ "tracelinks": "SyRS-NEX-02, StRS-NEX-02", "konsolidierung": "Kandidat: SyRS-NEX-02 (Zuweisungsbenachrichtigung), SwRS-NEX-06 (Abteilungs-Zuweisung).", "pruefidee": "Ticket ohne explizite Bearbeiterzuweisung speichern und prüfen, dass der anlegende Mitarbeiter automatisch als Editor gesetzt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-NEX-03", @@ -5280,7 +5597,8 @@ "tracelinks": "SyRS-NEX-02", "konsolidierung": "Kandidat: SyRS-NEX-02 - Teil derselben Notification-Engine-Gruppe.", "pruefidee": "Priorität eines Tickets ändern und prüfen, ob Benachrichtigungstext das neue Fälligkeitsdatum enthält; interne Notiz ändern und prüfen dass \"informAll\" nicht greift (Verursacher wird nicht benachrichtigt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-NEX-04", @@ -5296,7 +5614,8 @@ "tracelinks": "SyRS-NEX-02", "konsolidierung": "Kandidat: SyRS-NEX-02 - Teil derselben Notification-Engine-Gruppe.", "pruefidee": "Kommentar mit `[@Mustermann:123]`-Syntax erfassen und prüfen, dass Mitarbeiter I3D 123 Notification vom Typ MentionedInComment erhält, nicht aber CommentReceivedOnTicket zusätzlich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-NEX-05", @@ -5313,7 +5632,8 @@ "tracelinks": "SyRS-NEX-04", "konsolidierung": "Kandidat: SyRS-NEX-04 (Eskalation), SwRS-NEX-01 (Reset von EscalationLevel bei DueDate-Änderung).", "pruefidee": "Ticket kurz vor Geschäftszeitende mit Priorität (DueDateDelayInHours > verbleibende Stunden) anlegen und prüfen, ob Fälligkeit korrekt auf nächsten Geschäftstag verschoben wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-NEX-06", @@ -5329,7 +5649,8 @@ "tracelinks": "SyRS-NEX-02", "konsolidierung": "Kandidat: SwRS-NEX-02 (Mindest-Editor-Regel), SwRS-NEX-07 (Auto-Ticket-Vorlagen bei Bestellungen).", "pruefidee": "Ticket über Vorlage mit hinterlegter Abteilung X anlegen und prüfen, dass alle aktiven Mitarbeiter der Abteilung X (und nur diese) als Editoren gesetzt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-NEX-07", @@ -5346,7 +5667,8 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "Kandidat: SwRS-NEX-06 (Abteilungszuweisung bei Mustern); zusätzlich clusterübergreifender Hinweis: ggf. Überschneidung mit ERP-Bestellungs-Cluster (Trigger-Seite \"aus Bestellung\"), dort gegenprüfen.", "pruefidee": "Zwei Vorlagen anlegen, eine als Standard setzen, Löschversuch der Standardvorlage durchführen und Fehlermeldung/Ablehnung prüfen; zweite Vorlage als Standard setzen und prüfen, dass automatisch nur noch diese `IsStandard=true` hat.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-NEX-08", @@ -5362,7 +5684,8 @@ "tracelinks": "SyRS-NEX-08, StRS-NEX-01", "konsolidierung": "Kandidat: SwRS-NEX-06 (automatische Abteilungszuweisung von Editoren) - ergänzt um eine manuelle Einschränkung für ResponsiblePerson.", "pruefidee": "Mitarbeiter mit gesetztem Recht versucht, verantwortliche Person aus fremder Abteilung zu setzen; erwartete Fehlermeldung \"Die verantwortliche Person muss zu einer Ihrer Abteilungen gehören.\"", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-NEX-09", @@ -5378,7 +5701,8 @@ "tracelinks": "SyRS-NEX-01, StRS-NEX-01", "konsolidierung": "nein (siehe HYPOTHESEN-Abschnitt: CanCloseHelpdesk-Detailregeln nicht vollständig gelesen)", "pruefidee": "Ticket mit offener Wiedervorlage schließen und prüfen, dass die Wiedervorlage entfernt und der Status korrekt auf den konfigurierten \"geschlossen\"-Zustand gesetzt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-NEX-10", @@ -5394,6 +5718,7 @@ "tracelinks": "keine direkte Verknüpfung (Lücke)", "konsolidierung": "nein (clusterübergreifender Hinweis: eher generisches ERP-Datenintegritätsmuster als Nexus-spezifisch, ggf. mit Datensicherheits-Cluster konsolidieren)", "pruefidee": "Ticket per Anwendung ändern (Fingerprint wird aktualisiert), anschließend `ChangedDate` per Direkt-SQL manipulieren und `GetCountOfInvalidFingerprints()` ausführen - erwartet: Datensatz wird als ungültig erkannt.", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_153529_v2.1.1-db12/_meta/anforderungen.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_153529_v2.1.1-db12/_meta/anforderungen.md index b8eab8dc..961b8881 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_153529_v2.1.1-db12/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_153529_v2.1.1-db12/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 311 (95,7 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (100 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 325 von 325 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_163523_v2.1.1-26ea/Protokoll.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_163523_v2.1.1-26ea/Protokoll.md index 6988f4e4..ff096e37 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_163523_v2.1.1-26ea/Protokoll.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_163523_v2.1.1-26ea/Protokoll.md @@ -93,6 +93,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -129,6 +131,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 175 (92,6 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -146,6 +152,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (62 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 189 von 189 mit Tracelinks (100,0 %) | ## Vergleich aller Läufe (identischer Prompt, SHA-256 unverändert) diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_163523_v2.1.1-26ea/_meta/anforderungen.json b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_163523_v2.1.1-26ea/_meta/anforderungen.json index b00f628c..9324a7f4 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_163523_v2.1.1-26ea/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_163523_v2.1.1-26ea/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-046, SyRS-047, SwRS-050, SwRS-051, SwRS-052", "konsolidierung": "Kandidat: Legacy-Modell (Customer/Supplier) und neues Account-Modell bilden dieselbe fachliche Funktion ab und sollten im Zielsystem zusammengeführt werden.", "pruefidee": "Prüfen, ob im neuen Account-Modell ein realer Geschäftspartner sowohl als AccountCustomer als auch als AccountSupplier abgebildet werden kann und ob beide Sichten konsistente Stammdaten liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -32,7 +33,8 @@ "tracelinks": "SyRS-026, SyRS-027, SyRS-028, SwRS-060, SwRS-061, SwRS-062", "konsolidierung": "nein", "pruefidee": "Ein Angebot in einen Auftrag, einen Lieferschein und eine Rechnung überführen und prüfen, ob die Belegkette in beide Richtungen (vor/zurück) korrekt angezeigt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -50,7 +52,8 @@ "tracelinks": "SyRS-029, SyRS-030, SyRS-031, SwRS-063, SwRS-064, SwRS-065", "konsolidierung": "nein", "pruefidee": "Einen RMM-fähigen Vertrag mit Über-/Unterbuchungsgrenze anlegen, simulierte Nutzungsdaten liefern lassen und prüfen, ob die Rechnung korrekt geclamped wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -68,7 +71,8 @@ "tracelinks": "SyRS-032, SyRS-033, SwRS-066, SwRS-067", "konsolidierung": "nein", "pruefidee": "Eine Rechnung mit einer Kopf-/Positionssummen-Abweichung > 3,00 erzeugen und prüfen, dass der Export mit Fehler abbricht statt eine falsche Rechnung zu erzeugen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -85,7 +89,8 @@ "tracelinks": "SyRS-034, SwRS-068, SwRS-069", "konsolidierung": "nein", "pruefidee": "Einen Kunden mit überschrittener dritter Mahnstufe anlegen und prüfen, ob ein neuer Auftrag gemäß OrderLockAfterDunning blockiert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -102,7 +107,8 @@ "tracelinks": "SyRS-035, SwRS-070", "konsolidierung": "nein", "pruefidee": "Prüfen, ob ohne gültige FinAPI-Lizenz der Zugriff auf die Banking-Funktion planmäßig verweigert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -120,7 +126,8 @@ "tracelinks": "SyRS-011, SyRS-012, SyRS-013, SwRS-001, SwRS-002, SwRS-003", "konsolidierung": "nein", "pruefidee": "Einem Testbenutzer ein einschränkendes Recht (z. B. \"nur eigene Filiale\") zuweisen und prüfen, dass Datensätze anderer Filialen nicht sichtbar sind.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -137,7 +144,8 @@ "tracelinks": "SyRS-014, SyRS-015, SwRS-004, SwRS-005", "konsolidierung": "nein", "pruefidee": "Einen Benutzer mit AuthentificationKind=OpenIdConnect ohne die erforderliche Lizenz anmelden lassen und prüfen, dass die Anmeldung mit definierter Fehlermeldung verweigert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -154,7 +162,8 @@ "tracelinks": "SyRS-016, SyRS-017, SwRS-006, SwRS-007", "konsolidierung": "nein", "pruefidee": "Für eine Passwort-Manager-Richtlinie mit gesetztem TwoFactorAuthentification-Flag prüfen, ob beim Anzeigen eines Passworts tatsächlich eine PIN-Abfrage erscheint.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -172,7 +181,8 @@ "tracelinks": "SyRS-018, SyRS-019, SwRS-008, SwRS-009", "konsolidierung": "nein", "pruefidee": "Die maximale Sitzplatzanzahl einer Lizenz erreichen und prüfen, dass ein weiterer Login-Versuch mit definiertem Fehlercode abgelehnt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -189,7 +199,8 @@ "tracelinks": "SyRS-020, SwRS-010, SwRS-011", "konsolidierung": "nein", "pruefidee": "Einen versiegelten Passwort-Manager-Eintrag öffnen und prüfen, ob der Siegelbruch protokolliert und die konfigurierte Benachrichtigung ausgelöst wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -206,7 +217,8 @@ "tracelinks": "SyRS-001, SyRS-002, SyRS-003, SwRS-012, SwRS-013", "konsolidierung": "nein", "pruefidee": "Denselben Geschäftsvorfall einmal über Direkt-DB-Zugriff und einmal über die Web-Service-Schnittstelle abwickeln und die Ergebnisse vergleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -223,7 +235,8 @@ "tracelinks": "SyRS-066, SyRS-067, SwRS-072, SwRS-073", "konsolidierung": "nein", "pruefidee": "Eine Artikelsuche mit aktivierten externen Katalogen ausführen und prüfen, ob Treffer aus mehreren Quellen korrekt zusammengeführt und als solche gekennzeichnet werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -240,7 +253,8 @@ "tracelinks": "SyRS-068, SyRS-069, SwRS-074, SwRS-075, SwRS-100", "konsolidierung": "nein", "pruefidee": "Einen Artikel unter den Mindestbestand fallen lassen und prüfen, ob er korrekt in der Bestellvorschlagsliste erscheint und bei Bestellauslösung im richtigen EDI-Format an den zuständigen Distributor gesendet wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-015", @@ -256,7 +270,8 @@ "tracelinks": "SyRS-070, SyRS-071, SwRS-076, SwRS-077, SwRS-078", "konsolidierung": "nein", "pruefidee": "Eine Umbuchung ohne Zielort auslösen und prüfen, dass sie mit definierter Fehlermeldung abgelehnt wird; einen RMA-Rückläufer buchen und prüfen, dass er nicht im regulären Bestand erscheint.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-016", @@ -274,7 +289,8 @@ "tracelinks": "SyRS-072, SwRS-079, SwRS-080", "konsolidierung": "Kandidat: GLS- und Shipcloud-Integration bilden dieselbe fachliche Funktion (Versandauftrag erstellen) ab und sollten hinter einer gemeinsamen Abstraktion vereinheitlicht werden.", "pruefidee": "Eine Sendung mit mehr als der zulässigen Anzahl Pakete (>30) an GLS übergeben und prüfen, ob die clientseitige Validierung greift.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-017", @@ -292,7 +308,8 @@ "tracelinks": "SyRS-079, SyRS-080, SwRS-081, SwRS-082", "konsolidierung": "Kandidat: AccountDeviceToTicket und HelpdeskDeviceLink bilden dieselbe fachliche Funktion (Gerät-Ticket-Verknüpfung) ab.", "pruefidee": "Ein Gerät mit Fernzugriffskanal anlegen, es einem Ticket zuordnen und prüfen, dass der Fernzugriffskanal im Ticket sichtbar ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-018", @@ -309,7 +326,8 @@ "tracelinks": "SyRS-081, SwRS-083, SwRS-084", "konsolidierung": "nein", "pruefidee": "Einen docuFORM-Import anstoßen und prüfen, ob importierte Zählerstände korrekt den Verträgen zugeordnet werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-019", @@ -326,7 +344,8 @@ "tracelinks": "SyRS-091, SyRS-092, SyRS-093, SwRS-085, SwRS-086, SwRS-087", "konsolidierung": "nein", "pruefidee": "Ein Ticket mit offenem Checklistenpunkt zu schließen versuchen und prüfen, dass dies verhindert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-020", @@ -343,7 +362,8 @@ "tracelinks": "SyRS-094, SyRS-095, SwRS-088, SwRS-089, SwRS-090", "konsolidierung": "nein", "pruefidee": "Ein RMM-Ereignis mit unbekannter Geräte-ID simulieren und prüfen, ob das Ticket dennoch erstellt wird und die fehlende Zuordnung nachvollziehbar geloggt ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-021", @@ -361,7 +381,8 @@ "tracelinks": "SyRS-113, SyRS-114, SyRS-115, SwRS-101, SwRS-102, SwRS-103", "konsolidierung": "nein", "pruefidee": "Als WebAccount-Kunde einloggen, ein Angebot online akzeptieren/signieren und prüfen, dass der Status im Backend korrekt aktualisiert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-022", @@ -378,7 +399,8 @@ "tracelinks": "SyRS-116, SyRS-117, SwRS-104, SwRS-105", "konsolidierung": "Kandidat: ServiceBoard (Nexus) und WPF-Helpdesk-Modul bilden dieselbe fachliche Funktion in zwei parallelen Oberflächen ab.", "pruefidee": "Als interner Mitarbeitender im ServiceBoard ein Ticket bearbeiten und im WPF-Client prüfen, ob die Änderung konsistent sichtbar ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -394,7 +416,8 @@ "tracelinks": "StRS-012, SwRS-012", "konsolidierung": "nein", "pruefidee": "Denselben Client zunächst mit SqlServer-, dann mit CentronWebServices-Verbindung starten und Funktionsumfang vergleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -410,7 +433,8 @@ "tracelinks": "StRS-012, SwRS-012", "konsolidierung": "nein", "pruefidee": "Ein Modul ohne CentronWebServices-Unterstützung bei Web-Service-Verbindung öffnen und prüfen, dass es nicht in der Modulliste erscheint.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -427,7 +451,8 @@ "tracelinks": "StRS-012, SwRS-013", "konsolidierung": "Kandidat: beide API-Oberflächen bilden für überlappende Domänen (z. B. Contracts) dieselbe fachliche Funktion ab und sollten langfristig auf die moderne API konsolidiert werden.", "pruefidee": "Denselben Geschäftsvorgang einmal über die Legacy-Schnittstelle und einmal (sofern vorhanden) über die v1-Controller-API ausführen und Ergebniskonsistenz prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -443,7 +468,8 @@ "tracelinks": "StRS-008, SwRS-004", "konsolidierung": "nein", "pruefidee": "Eine Anfrage mit gültigem Ticket und eine mit gültigem JWT jeweils gegen den entsprechenden Endpunkttyp senden und Erfolg prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -459,7 +485,8 @@ "tracelinks": "StRS-012, SwRS-014", "konsolidierung": "nein", "pruefidee": "Eine Anfrage von einer beliebigen, nicht auf einer Whitelist stehenden Origin senden und prüfen, ob sie (aktuell) angenommen wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -475,7 +502,8 @@ "tracelinks": "StRS-012, SwRS-015", "konsolidierung": "nein", "pruefidee": "Prüfen, ob ein Ausfall eines Hintergrunddienstes (z. B. EDI-Download) den REST-Betrieb im selben Prozess beeinträchtigt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -491,7 +519,8 @@ "tracelinks": "StRS-012, SwRS-016", "konsolidierung": "nein", "pruefidee": "Ein System mit ausstehenden Migrationsskripten starten und prüfen, dass diese vor der ersten bedienten Anfrage vollständig ausgeführt wurden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -508,7 +537,8 @@ "tracelinks": "StRS-012, SwRS-017", "konsolidierung": "nein", "pruefidee": "Prüfen, ob im Code eine DB-Provider-Abstraktionsschicht existiert, die einen anderen RDBMS-Treiber zuließe.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -524,7 +554,8 @@ "tracelinks": "StRS-012, SwRS-018", "konsolidierung": "nein", "pruefidee": "Die Compose-Umgebung starten und prüfen, dass alle vier Dienste erreichbar sind und miteinander kommunizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -541,7 +572,8 @@ "tracelinks": "StRS-012, SwRS-019", "konsolidierung": "nein", "pruefidee": "Eine frische Windows-Umgebung mit dem Nexus-MSI installieren und prüfen, dass der Dienst \"CentronNexus\" automatisch startet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -557,7 +589,8 @@ "tracelinks": "StRS-007, SwRS-001", "konsolidierung": "nein", "pruefidee": "Ein Recht per Datenbank direkt aus einer Gruppe entfernen und prüfen, dass die betroffene Operation ab dem nächsten (nicht gecachten) Aufruf verweigert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -574,7 +607,8 @@ "tracelinks": "StRS-007, SwRS-002", "konsolidierung": "nein", "pruefidee": "Zwei Benutzer aus unterschiedlichen Filialen mit \"nur eigene Filiale\"-Recht anlegen und prüfen, dass sie jeweils nur eigene Filialdaten sehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -591,7 +625,8 @@ "tracelinks": "StRS-007, SwRS-003", "konsolidierung": "Kandidat: einheitliches Fehlerrückgabeverhalten für Rechteprüfungen im Zielsystem vereinheitlichen.", "pruefidee": "Eine OPOS-Abfrage ohne das erforderliche Recht auslösen und prüfen, ob der Client die resultierende Exception sauber verarbeitet statt abzustürzen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -607,7 +642,8 @@ "tracelinks": "StRS-008, SwRS-004", "konsolidierung": "nein", "pruefidee": "Einen Benutzer mit AuthentificationKind=ActiveDirectory bei einem System mit Standardverfahren Basic anmelden und prüfen, ob der Fallback korrekt greift.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -623,7 +659,8 @@ "tracelinks": "StRS-008, SwRS-005", "konsolidierung": "nein", "pruefidee": "Einen Benutzer mit gesetztem DisallowingRight für eine Anwendung anmelden lassen und prüfen, dass der Login mit definierter Fehlermeldung verweigert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-016", @@ -639,7 +676,8 @@ "tracelinks": "StRS-009, SwRS-006", "konsolidierung": "nein", "pruefidee": "Sich zweimal hintereinander vom selben Gerät/IP anmelden und prüfen, dass beim zweiten Mal keine erneute 2FA-Abfrage erfolgt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-017", @@ -656,7 +694,8 @@ "tracelinks": "StRS-009, SwRS-007", "konsolidierung": "nein", "pruefidee": "Eine Zugriffsrichtlinie mit gesetztem TwoFactorAuthentification-Flag anlegen und beim Öffnen eines zugehörigen Passworts prüfen, ob tatsächlich eine PIN-Abfrage erscheint.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-018", @@ -672,7 +711,8 @@ "tracelinks": "StRS-010, SwRS-008", "konsolidierung": "nein", "pruefidee": "Eine Funktion ohne gültige Lizenz über alle drei Zugriffskanäle (WPF, Web-Service, Nexus) aufrufen und konsistente Sperre prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-019", @@ -688,7 +728,8 @@ "tracelinks": "StRS-010, StRS-011, SwRS-009", "konsolidierung": "nein", "pruefidee": "Export mit gültiger Lizenz aber ohne das Recht versuchen und prüfen, dass er verweigert wird; und umgekehrt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-020", @@ -705,7 +746,8 @@ "tracelinks": "StRS-011, SwRS-010", "konsolidierung": "nein", "pruefidee": "Ein Siegel brechen und prüfen, ob die Aktion protokolliert und die Benachrichtigung an alle siegelberechtigten Mitarbeitenden gesendet wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-021", @@ -721,7 +763,8 @@ "tracelinks": "StRS-008", "konsolidierung": "nein", "pruefidee": "50 fehlgeschlagene Anmeldeversuche in kurzer Folge für denselben Benutzer auslösen und prüfen, ob eine Sperre oder Verzögerung eintritt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-022", @@ -738,7 +781,8 @@ "tracelinks": "StRS-008", "konsolidierung": "nein", "pruefidee": "Zwei Benutzer mit identischem Passwort anlegen und prüfen, ob die gespeicherten Hash-Werte identisch sind (Indiz für fehlendes Salting).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-023", @@ -754,7 +798,8 @@ "tracelinks": "StRS-007, SwRS-002", "konsolidierung": "nein", "pruefidee": "Versuchen, ein nicht auf der Positivliste stehendes Recht von der Administratoren-Gruppe zu entfernen, und prüfen, dass dies verhindert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-024", @@ -770,7 +815,8 @@ "tracelinks": "StRS-021, SwRS-102", "konsolidierung": "nein", "pruefidee": "Prüfen, ob eine Änderung der internen Rechte eines Mitarbeitenden Auswirkungen auf die WebAccount-Rechte hat (sollte nicht der Fall sein).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-025", @@ -786,7 +832,8 @@ "tracelinks": "StRS-008, SwRS-004", "konsolidierung": "nein", "pruefidee": "Einen AD-authentifizierten Benutzer eine interne Passwortänderung versuchen lassen und die Fehlermeldung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-026", @@ -802,7 +849,8 @@ "tracelinks": "StRS-002, SwRS-060", "konsolidierung": "nein", "pruefidee": "Für jede Belegart den Statuswert nach Erstellung, nach Abschluss und nach Stornierung auslesen und gegen die drei erwarteten Werte prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-027", @@ -818,7 +866,8 @@ "tracelinks": "StRS-002, SwRS-060", "konsolidierung": "nein", "pruefidee": "Einen Auftrag mit Positionen aus zwei unterschiedlichen Angeboten erzeugen und prüfen, dass beide Ursprungsangebote korrekt angezeigt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-028", @@ -834,7 +883,8 @@ "tracelinks": "StRS-002, SwRS-061", "konsolidierung": "nein", "pruefidee": "Denselben Beleg in zwei Sitzungen laden, in Sitzung A speichern, dann in Sitzung B mit veralteter GUID speichern und den erwarteten Fehler prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-029", @@ -850,7 +900,8 @@ "tracelinks": "StRS-003, SwRS-063", "konsolidierung": "nein", "pruefidee": "Einen Auto-Vertrag mit erreichtem Vertragsende und vollständig abgerechnetem Zeitraum simulieren und prüfen, dass er automatisch geschlossen wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-030", @@ -866,7 +917,8 @@ "tracelinks": "StRS-003, SwRS-063", "konsolidierung": "nein", "pruefidee": "Die letzte ContractArticleReferenzes-Zeile eines Vertrags löschen und prüfen, dass er danach als nicht mehr RMM-fähig gilt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-031", @@ -882,7 +934,8 @@ "tracelinks": "StRS-003, SwRS-064", "konsolidierung": "nein", "pruefidee": "Für jede der drei Grenzen-Kombinationen (beide, nur eine, keine) eine Testabrechnung mit bekannter gemessener Menge durchführen und das erwartete Ergebnis prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-032", @@ -898,7 +951,8 @@ "tracelinks": "StRS-004, SwRS-066", "konsolidierung": "nein", "pruefidee": "Eine Rechnung mit einer Kopf-/Positionsabweichung von genau 3,01 erzeugen und den Exportabbruch prüfen; mit 2,99 den stillen Korrekturfall prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-033", @@ -914,7 +968,8 @@ "tracelinks": "StRS-004, SwRS-067", "konsolidierung": "nein", "pruefidee": "Eine erzeugte ebInterface-Datei gegen das offizielle XSD-Schema 4.3 validieren (da die Implementierung selbst nicht validiert).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-034", @@ -930,7 +985,8 @@ "tracelinks": "StRS-005, SwRS-068", "konsolidierung": "Kandidat: Legacy-Customer-Mahnkonfiguration und die redesignte AccountCustomer-Mahnkonfiguration (SyRS-065) bilden dieselbe fachliche Funktion ab.", "pruefidee": "Einen Kunden mit OrderLockAfterDunning=2 und erreichter zweiter Mahnstufe anlegen und einen neuen Auftrag anlegen; Sperre prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-035", @@ -946,7 +1002,8 @@ "tracelinks": "StRS-006, SwRS-070", "konsolidierung": "nein", "pruefidee": "Prüfen, ob die im Quellcode hinterlegten Zugangsdaten produktiv gültig sind und rotiert werden müssen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-036", @@ -962,7 +1019,8 @@ "tracelinks": "StRS-002, SwRS-062", "konsolidierung": "nein", "pruefidee": "Eine bereits buchhalterisch exportierte Rechnung zu stornieren versuchen und die Ablehnung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-037", @@ -978,7 +1036,8 @@ "tracelinks": "StRS-003, SwRS-062", "konsolidierung": "nein", "pruefidee": "Bei einem Vertrag mit drei Rechnungen versuchen, die mittlere zu stornieren, und die Ablehnung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-038", @@ -994,7 +1053,8 @@ "tracelinks": "StRS-002, SwRS-060", "konsolidierung": "nein", "pruefidee": "Eine Belegposition teilweise verarbeiten (Restmenge >0) und prüfen, dass der Beleg offen bleibt; danach vollständig verarbeiten und Auto-Abschluss prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-039", @@ -1010,7 +1070,8 @@ "tracelinks": "StRS-002, SwRS-060", "konsolidierung": "nein", "pruefidee": "Einen Beleg einer fremden Filiale zu bearbeiten versuchen und die Ablehnung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-040", @@ -1027,7 +1088,8 @@ "tracelinks": "StRS-002, StRS-021, SwRS-101", "konsolidierung": "nein", "pruefidee": "Einen Warenkorb durch den vollständigen Workflow (ReadyForCheck→Checked→Ordered) mit zwei unterschiedlichen Benutzern führen und jede Rechteprüfung testen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-041", @@ -1044,7 +1106,8 @@ "tracelinks": "StRS-013", "konsolidierung": "nein", "pruefidee": "Über die REST-API einen ActionPrice mit leerem Distributor-Feld anlegen und prüfen, ob dies (unerwünscht) gelingt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-042", @@ -1061,7 +1124,8 @@ "tracelinks": "StRS-002", "konsolidierung": "Kandidat: Doppelte Persistenzpfade sollten im Zielsystem auf ein einziges Modell konsolidiert werden.", "pruefidee": "Ein neues Feld nur im modernen Entity-Mapping ergänzen, speichern und prüfen, ob der Wert nach einem Neuladen aus der DB erhalten bleibt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-043", @@ -1077,7 +1141,8 @@ "tracelinks": "StRS-002", "konsolidierung": "nein", "pruefidee": "Ein neues Feld nur in der Basistabelle ergänzen und prüfen, ob die Versionshistorie dieses Feld nach einer Änderung korrekt mitschreibt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-044", @@ -1093,7 +1158,8 @@ "tracelinks": "StRS-002, SyRS-003", "konsolidierung": "Kandidat: siehe SyRS-003.", "pruefidee": "Eine Liste aller Beleg-/Vertragsoperationen der Legacy-API gegen die v1-Controller abgleichen und die Deckungslücke dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-045", @@ -1109,7 +1175,8 @@ "tracelinks": "StRS-006, SwRS-070", "konsolidierung": "nein", "pruefidee": "Eine mit einem SEPA-Mandatsbeleg verknüpfte Bankverbindung zu löschen versuchen und die Ablehnung inkl. Belegliste prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-046", @@ -1126,7 +1193,8 @@ "tracelinks": "StRS-001, SwRS-050", "konsolidierung": "Kandidat: siehe StRS-001.", "pruefidee": "Denselben realen Geschäftspartner in beiden Modellen anlegen und prüfen, ob Abfragen (z. B. Rechnungsstellung) konsistente Ergebnisse liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-047", @@ -1143,7 +1211,8 @@ "tracelinks": "StRS-001, SwRS-050", "konsolidierung": "nein", "pruefidee": "Einen Legacy-Kunden mit leeren, im neuen Modell aber pflichtigen Feldern in das neue Modell zu überführen versuchen und den Fehlerfall dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-048", @@ -1160,7 +1229,8 @@ "tracelinks": "StRS-001, SwRS-051", "konsolidierung": "nein", "pruefidee": "Versuchen, einen Ansprechpartner ohne Adresszuordnung zu speichern, und den Fehler auf beiden Ebenen (DB, BL) prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-049", @@ -1177,7 +1247,8 @@ "tracelinks": "StRS-001, SwRS-051", "konsolidierung": "nein", "pruefidee": "Über einen direkten DB-Zugriff (unter Umgehung der BL) eine Adresse ohne Kunden-/Lieferantenbezug einfügen und prüfen, dass dies technisch möglich ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-050", @@ -1194,7 +1265,8 @@ "tracelinks": "StRS-001, SwRS-052", "konsolidierung": "nein", "pruefidee": "Einen neuen Kunden ohne explizite Adresse anlegen und prüfen, dass automatisch eine Standardadresse existiert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-051", @@ -1210,7 +1282,8 @@ "tracelinks": "StRS-001, SwRS-052", "konsolidierung": "nein", "pruefidee": "Einen Kunden mit State=1 aber Locked=true in mehreren Modulen (Beleg, Helpdesk, Web-Account) abfragen und prüfen, dass er überall konsistent als \"nicht aktiv nutzbar\" behandelt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-052", @@ -1227,7 +1300,8 @@ "tracelinks": "StRS-001, StRS-004", "konsolidierung": "nein", "pruefidee": "Eine offensichtlich ungültige USt-IdNr. (z. B. falsches Format) erfassen und prüfen, ob das System dies akzeptiert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-053", @@ -1243,7 +1317,8 @@ "tracelinks": "StRS-001, SyRS-096", "konsolidierung": "nein", "pruefidee": "Eine E-Mail von einer bekannten Kunden-Domain senden und prüfen, ob automatisch der korrekte Kunde zugeordnet wird; dasselbe mit einer gesperrten Domain (z. B. gmail.com) und die Nicht-Zuordnung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-054", @@ -1259,7 +1334,8 @@ "tracelinks": "StRS-001, SyRS-003", "konsolidierung": "nein", "pruefidee": "Einen POST-Aufruf gegen den v1-Customers-Endpunkt senden und das aktuelle Antwortverhalten (nicht implementiert) dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-055", @@ -1275,7 +1351,8 @@ "tracelinks": "StRS-001, StRS-021, SwRS-057", "konsolidierung": "nein", "pruefidee": "Je einen WebAccount für einen Legacy-Kontakt und einen Account-Kontakt anlegen und beide Logins erfolgreich testen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-056", @@ -1291,7 +1368,8 @@ "tracelinks": "StRS-001, StRS-021, SwRS-057", "konsolidierung": "nein", "pruefidee": "Einen Kunden sperren, dessen WebAccount weiterhin existiert, und einen Login-Versuch als verweigert prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-057", @@ -1308,7 +1386,8 @@ "tracelinks": "StRS-021, SyRS-022", "konsolidierung": "nein", "pruefidee": "Ein WebAccount-Passwort mit exakt 8 Zeichen ohne Komplexität (z. B. \"aaaaaaaa\") setzen und prüfen, dass dies akzeptiert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-058", @@ -1324,7 +1403,8 @@ "tracelinks": "StRS-021, StRS-022, SwRS-104", "konsolidierung": "nein", "pruefidee": "Je einen WebAccount mit Type=Employee und Type=AddressContact anlegen und prüfen, dass sie jeweils nur den für sie vorgesehenen Portalbereich sehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-059", @@ -1340,7 +1420,8 @@ "tracelinks": "StRS-021, SwRS-101", "konsolidierung": "nein", "pruefidee": "Einem Kunden zwei Sonderpreis-Artikel zuweisen und im WebCart prüfen, dass genau diese (und keine anderen) sichtbar sind.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-060", @@ -1356,7 +1437,8 @@ "tracelinks": "StRS-004, SwRS-066", "konsolidierung": "nein", "pruefidee": "Eine Rechnung ohne explizites Leistungsdatum an einen XRechnung-pflichtigen Empfänger erzeugen und prüfen, dass das Rechnungsdatum als Ersatzwert übernommen wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-061", @@ -1372,7 +1454,8 @@ "tracelinks": "StRS-004, SwRS-066", "konsolidierung": "nein", "pruefidee": "Eine Rechnung mit einer Rabattposition exportieren und die erzeugte XML auf positive NetPrice-/negative Quantity-Werte prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-062", @@ -1388,7 +1471,8 @@ "tracelinks": "StRS-004, SwRS-066", "konsolidierung": "nein", "pruefidee": "Für einen Kunden mit individueller MandatorBank-Einstellung eine Rechnung exportieren und die verwendete IBAN prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-063", @@ -1404,7 +1488,8 @@ "tracelinks": "StRS-005, SwRS-069", "konsolidierung": "nein", "pruefidee": "Einem Benutzer das Dunning-Recht entziehen und prüfen, dass sowohl Mahnwesen als auch OPOS-Ansicht verweigert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-064", @@ -1420,7 +1505,8 @@ "tracelinks": "StRS-006, SwRS-070", "konsolidierung": "nein", "pruefidee": "Eine zweite Bankverbindung als Standard markieren und prüfen, dass die vorherige automatisch entfernt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-065", @@ -1437,7 +1523,8 @@ "tracelinks": "StRS-005, SyRS-034", "konsolidierung": "Kandidat: siehe SyRS-034.", "pruefidee": "Für einen in beiden Modellen geführten Kunden die Mahnkonfiguration in beiden Modellen vergleichen und Abweichungen dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-066", @@ -1453,7 +1540,8 @@ "tracelinks": "StRS-013, SwRS-072", "konsolidierung": "nein", "pruefidee": "Mit allen vier externen Quellen deaktiviert suchen (nur interne Treffer erwartet), dann mit allen aktiviert erneut suchen und den Unterschied prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-067", @@ -1469,7 +1557,8 @@ "tracelinks": "StRS-013, SwRS-072", "konsolidierung": "nein", "pruefidee": "Den Distributor \"Eigene\" temporär umbenennen und prüfen, dass die betroffene Suchfunktion mit der erwarteten Fehlermeldung abbricht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-068", @@ -1485,7 +1574,8 @@ "tracelinks": "StRS-014, SwRS-074", "konsolidierung": "nein", "pruefidee": "Für einen Artikel mit bekanntem Bedarf/Bestand die berechnete Vorschlagsmenge manuell nachrechnen und mit der Systemausgabe vergleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-069", @@ -1501,7 +1591,8 @@ "tracelinks": "StRS-014, SwRS-075, SwRS-100", "konsolidierung": "nein", "pruefidee": "Eine Testbestellung an einen ALSO- und einen Komsa-Distributor senden und die jeweils erzeugten XML-Dateien gegen die erwarteten Formate prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-070", @@ -1517,7 +1608,8 @@ "tracelinks": "StRS-015, SwRS-076", "konsolidierung": "nein", "pruefidee": "Eine Bestandsabfrage ohne explizite Lagerangabe ausführen und prüfen, dass sie sich auf das Hauptlager (-1) bezieht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-071", @@ -1534,7 +1626,8 @@ "tracelinks": "StRS-015, SwRS-076", "konsolidierung": "nein", "pruefidee": "Über die REST-API (unter Umgehung der WPF-Rechteprüfung) eine Buchung auslösen, die den Bestand unter null senkt, und das Ergebnis dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-072", @@ -1551,7 +1644,8 @@ "tracelinks": "StRS-016, SwRS-079", "konsolidierung": "Kandidat: siehe StRS-016.", "pruefidee": "Eine Sendung mit 31 Paketen an GLS zu übergeben versuchen und die clientseitige Ablehnung (max. 30) prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-073", @@ -1567,7 +1661,8 @@ "tracelinks": "StRS-015, SwRS-077", "konsolidierung": "nein", "pruefidee": "Für einen Artikel mit \"gewichteter Durchschnitt\"-Strategie einen Wareneingang mit abweichendem Preis buchen und den neuen Durchschnittspreis nachrechnen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-074", @@ -1583,7 +1678,8 @@ "tracelinks": "StRS-015, SwRS-078", "konsolidierung": "nein", "pruefidee": "Einen RMA-Rückläufer buchen und prüfen, dass der Artikel danach nicht in der regulären, verkaufsbezogenen Bestandssuche erscheint.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-075", @@ -1599,7 +1695,8 @@ "tracelinks": "StRS-015, SwRS-076", "konsolidierung": "nein", "pruefidee": "Eine Umbuchung ohne Zielort auslösen und die Ablehnung mit definierter Fehlermeldung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-076", @@ -1615,7 +1712,8 @@ "tracelinks": "StRS-015, SyRS-068", "konsolidierung": "nein", "pruefidee": "Die vollständige Spaltenliste der Tabelle ARTIK mit den gemappten Entity-Properties abgleichen und Inkonsistenzen dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-077", @@ -1631,7 +1729,8 @@ "tracelinks": "StRS-013, SwRS-072", "konsolidierung": "nein", "pruefidee": "Für alle drei Anbieter denselben Testartikel suchen und prüfen, dass identisches Antwortverhalten vorliegt (nur Zugangsdaten/Endpunkt unterscheiden sich).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-078", @@ -1648,7 +1747,8 @@ "tracelinks": "StRS-014, SwRS-074", "konsolidierung": "nein", "pruefidee": "Für einen Artikel einen B-Lieferanten hinterlegen und in der Bestellvorschlagsliste gezielt nach diesem filtern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-079", @@ -1665,7 +1765,8 @@ "tracelinks": "StRS-017, SwRS-081", "konsolidierung": "nein", "pruefidee": "Einem Gerät zwei unterschiedliche Fernzugriffskanäle zuordnen und deren korrekte Anzeige im Ticket-Kontext prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-080", @@ -1681,7 +1782,8 @@ "tracelinks": "StRS-017, SwRS-081", "konsolidierung": "nein", "pruefidee": "Ein Gerät aus WOASI synchronisieren und prüfen, dass das Origin-Feld korrekt gesetzt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-081", @@ -1698,7 +1800,8 @@ "tracelinks": "StRS-018, SwRS-083", "konsolidierung": "nein", "pruefidee": "Prüfen, ob ein Anwenderbedarf für automatisierte Verbrauchsmaterial-/Fehlerüberwachung besteht, bevor die vorbereiteten Endpunkte im Zielsystem implementiert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-082", @@ -1715,7 +1818,8 @@ "tracelinks": "StRS-017, SwRS-082", "konsolidierung": "Kandidat: siehe StRS-017.", "pruefidee": "Ein Ticket über beide Mechanismen mit Geräten verknüpfen und prüfen, ob beide Verknüpfungen konsistent in derselben Ticket-Ansicht sichtbar sind.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-083", @@ -1731,7 +1835,8 @@ "tracelinks": "StRS-018, SwRS-084", "konsolidierung": "nein", "pruefidee": "Einen nicht zuordenbaren Zählerstand importieren und beobachten, ob und wie er aktuell manuell nachbearbeitet werden muss.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-084", @@ -1747,7 +1852,8 @@ "tracelinks": "StRS-018, SwRS-083", "konsolidierung": "nein", "pruefidee": "Prüfen, über welchen Zeitraum Zählerstände in der Praxis veralten, bevor ein manueller Import erfolgt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-091", @@ -1763,7 +1869,8 @@ "tracelinks": "StRS-019, SwRS-085", "konsolidierung": "nein", "pruefidee": "Einen neuen, mandantenspezifischen Ticketstatus anlegen und als \"geschlossen\"-Status konfigurieren; prüfen, dass ein Ticketabschluss diesen Status korrekt setzt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-092", @@ -1779,7 +1886,8 @@ "tracelinks": "StRS-019, SwRS-085", "konsolidierung": "nein", "pruefidee": "Ein Ticket freitagnachmittags mit einer Priorität ohne Wochenend-Eskalation anlegen und prüfen, dass die Fälligkeit erst am folgenden Montag beginnt zu zählen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-093", @@ -1795,7 +1903,8 @@ "tracelinks": "StRS-019, SwRS-086", "konsolidierung": "nein", "pruefidee": "Ein Ticket mit einem offenen Checklistenpunkt zu schließen versuchen und die Ablehnung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-094", @@ -1812,7 +1921,8 @@ "tracelinks": "StRS-020, SwRS-088", "konsolidierung": "nein", "pruefidee": "Mit einem gültigen RMM-Zugangsschlüssel ein Ticket anlegen, aktualisieren und schließen und jeden Schritt im System nachvollziehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-095", @@ -1828,7 +1938,8 @@ "tracelinks": "StRS-020, SwRS-089", "konsolidierung": "nein", "pruefidee": "Ein RMM-Ereignis mit einer unbekannten Geräte-ID senden und prüfen, dass das Ticket dennoch erstellt und die fehlende Zuordnung nachvollziehbar geloggt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-096", @@ -1844,7 +1955,8 @@ "tracelinks": "StRS-019, StRS-020, SwRS-090", "konsolidierung": "nein", "pruefidee": "Ein RMM-Ticket ohne gesetzte Priorität automatisiert erzeugen und prüfen, dass die Erstellung dennoch gelingt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-097", @@ -1861,7 +1973,8 @@ "tracelinks": "StRS-019, SwRS-085", "konsolidierung": "nein", "pruefidee": "Ein Ticket nacheinander mit Status-, Prioritäts- und Kommentaränderung speichern und die drei erwarteten, korrekt typisierten Historieneinträge prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-098", @@ -1877,7 +1990,8 @@ "tracelinks": "StRS-019, SwRS-085", "konsolidierung": "nein", "pruefidee": "Eine Standard-Vorlage zu löschen versuchen und die Ablehnung prüfen; danach eine andere Vorlage als Standard setzen und erneut versuchen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-099", @@ -1893,7 +2007,8 @@ "tracelinks": "StRS-019", "konsolidierung": "nein", "pruefidee": "Ein Projekt mit drei verschachtelten Teilaufgaben anlegen und die korrekte Baumstruktur-Anzeige prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-100", @@ -1909,7 +2024,8 @@ "tracelinks": "StRS-020", "konsolidierung": "nein", "pruefidee": "Für einen Kunden AllowCloseHelpdesks=false setzen und prüfen, dass ein externer Abschlussversuch verweigert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-101", @@ -1925,7 +2041,8 @@ "tracelinks": "StRS-020, SwRS-090", "konsolidierung": "nein", "pruefidee": "Eine Codesuche nach \"CreatedFrom == 7\" bzw. \"CreatedFrom==7\" im gesamten Backend durchführen und alle Fundstellen auf Konsistenz prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-102", @@ -1941,7 +2058,8 @@ "tracelinks": "StRS-019", "konsolidierung": "nein", "pruefidee": "Einen Ticket-Termin in Outlook manuell verschieben, eine Exchange-Synchronisation auslösen und prüfen, dass der c-entron-Termin unverändert bleibt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-108", @@ -1958,7 +2076,8 @@ "tracelinks": "StRS-014, SwRS-100", "konsolidierung": "nein", "pruefidee": "Eine EDI-Testdatei eines Distributors einspielen und prüfen, dass die enthaltenen Positionen korrekt dem erwarteten Beleg zugeordnet werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-109", @@ -1974,7 +2093,8 @@ "tracelinks": "StRS-014", "konsolidierung": "nein", "pruefidee": "Dieselbe EDI-Datei zweimal einspielen und prüfen, dass beim zweiten Mal keine doppelten Belege entstehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-110", @@ -1990,7 +2110,8 @@ "tracelinks": "StRS-014", "konsolidierung": "nein", "pruefidee": "Eine absichtlich fehlerhafte EDI-Datei dreimal einspielen und prüfen, dass sie danach automatisch von weiteren Verarbeitungsversuchen ausgeschlossen wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-111", @@ -2006,7 +2127,8 @@ "tracelinks": "StRS-014", "konsolidierung": "nein", "pruefidee": "Mit den Fachbereichen klären, ob \"EDI\" im Zielsystem weiterhin beide Richtungen bezeichnen soll.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-113", @@ -2022,7 +2144,8 @@ "tracelinks": "StRS-021, StRS-022, SwRS-104", "konsolidierung": "nein", "pruefidee": "Mit einem externen WebAccount-Login versuchen, eine interne ServiceBoard-URL direkt aufzurufen, und die Zugriffsverweigerung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-114", @@ -2039,7 +2162,8 @@ "tracelinks": "StRS-021, SwRS-101", "konsolidierung": "nein", "pruefidee": "Ein Angebot zur Signatur freigeben, extern signieren und prüfen, dass der Belegstatus im Backend korrekt aktualisiert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-115", @@ -2055,7 +2179,8 @@ "tracelinks": "StRS-021, SwRS-101", "konsolidierung": "nein", "pruefidee": "Als externer Empfänger die Lieferadresse eines freigegebenen Angebots ändern und prüfen, dass die Änderung korrekt im Backend übernommen wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-116", @@ -2071,7 +2196,8 @@ "tracelinks": "StRS-022, SwRS-105", "konsolidierung": "Kandidat: siehe StRS-022.", "pruefidee": "Denselben Support-Vorgang einmal im WPF-Client und einmal im ServiceBoard bearbeiten und Funktionsparität dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-117", @@ -2087,7 +2213,8 @@ "tracelinks": "StRS-022", "konsolidierung": "nein", "pruefidee": "Für ein Ticket mit langer Historie eine KI-Zusammenfassung anfordern und deren inhaltliche Plausibilität stichprobenartig prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-118", @@ -2103,7 +2230,8 @@ "tracelinks": "StRS-021", "konsolidierung": "nein", "pruefidee": "Einen SelfCare-Link nach Ablauf der konfigurierten Frist aufrufen und die Fehlermeldung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-119", @@ -2119,7 +2247,8 @@ "tracelinks": "StRS-021, StRS-022", "konsolidierung": "Kandidat: Ablösung der älteren \"ServiceBoard Online\"-Plattform durch CentronNexus ist im Zielsystem als abgeschlossen zu betrachten.", "pruefidee": "Die Einstellung umschalten und prüfen, dass neu generierte Links konsistent auf die jeweils konfigurierte Plattform zeigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-120", @@ -2135,7 +2264,8 @@ "tracelinks": "StRS-022", "konsolidierung": "nein", "pruefidee": "Mit Produktmarketing/Vertrieb klären, welche Bezeichnung im Zielsystem verbindlich verwendet werden soll.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -2151,7 +2281,8 @@ "tracelinks": "SyRS-011, SyRS-023", "konsolidierung": "nein", "pruefidee": "Ein Recht per DB entziehen und innerhalb derselben Session erneut prüfen (sollte gecacht noch als vorhanden gelten) sowie nach Session-Neustart (sollte korrekt entzogen sein).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-002", @@ -2167,7 +2298,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Mit OnlyOwnBranch-Recht ein Ticket einer fremden Filiale per direkter ID aufrufen und die Ablehnung prüfen (nicht nur die Listenfilterung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-003", @@ -2184,7 +2316,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "Kandidat: siehe SyRS-013.", "pruefidee": "Eine automatisierte Codesuche nach \"HasUserRight\"-Aufrufen durchführen und die Verteilung von Result.AsError vs. throw-Exception quantifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-004", @@ -2200,7 +2333,8 @@ "tracelinks": "SyRS-004, SyRS-014, SyRS-025", "konsolidierung": "nein", "pruefidee": "Einen Benutzer mit inkonsistenter AuthentificationKind (z. B. AD-Kennzeichnung, aber Systemstandard Basic) anmelden und den Fallback-Pfad verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-005", @@ -2216,7 +2350,8 @@ "tracelinks": "SyRS-015", "konsolidierung": "nein", "pruefidee": "Für eine Test-Anwendung DisallowingRight setzen, einen Benutzer mit diesem Recht anmelden lassen und Ablehnung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-006", @@ -2232,7 +2367,8 @@ "tracelinks": "SyRS-016", "konsolidierung": "nein", "pruefidee": "Die Merkfrist auf 1 Tag konfigurieren, sich anmelden, einen Tag warten (oder Systemzeit stellen) und erneute 2FA-Abfrage prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-007", @@ -2249,7 +2385,8 @@ "tracelinks": "SyRS-017", "konsolidierung": "nein", "pruefidee": "Codesuche nach allen Aufrufstellen von ShowTwoFactorAuthentificationView im gesamten Repository durchführen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-008", @@ -2265,7 +2402,8 @@ "tracelinks": "SyRS-018", "konsolidierung": "nein", "pruefidee": "Die Sitzplatzgrenze auf 1 setzen, zwei Anmeldungen versuchen und die Ablehnung der zweiten prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-009", @@ -2281,7 +2419,8 @@ "tracelinks": "SyRS-019", "konsolidierung": "nein", "pruefidee": "Export mit Lizenz aber ohne Recht auslösen und den spezifischen Fehlercode prüfen; danach ohne Lizenz aber mit Recht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-010", @@ -2297,7 +2436,8 @@ "tracelinks": "SyRS-020", "konsolidierung": "nein", "pruefidee": "Die Datenbanktabelle direkt einsehen und prüfen, dass der Passwortwert nicht im Klartext gespeichert ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -2313,7 +2453,8 @@ "tracelinks": "SyRS-020", "konsolidierung": "nein", "pruefidee": "Einen Siegelbruch auslösen und prüfen, dass alle siegelberechtigten Mitarbeitenden tatsächlich eine Benachrichtigung erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -2329,7 +2470,8 @@ "tracelinks": "SyRS-001, SyRS-002", "konsolidierung": "nein", "pruefidee": "Ein Modul mit SupportsConnectionTypes={SqlServer} bei CentronWebServices-Verbindung starten und die Ausblendung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-013", @@ -2345,7 +2487,8 @@ "tracelinks": "SyRS-003", "konsolidierung": "nein", "pruefidee": "Je einen Aufruf an einen Legacy- und einen v1-Controller-Endpunkt senden und beide erfolgreich beantwortet sehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-014", @@ -2361,7 +2504,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "nein", "pruefidee": "Eine Anfrage mit Origin-Header einer nicht vertrauenswürdigen Domain senden und das aktuelle Antwortverhalten dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-015", @@ -2377,7 +2521,8 @@ "tracelinks": "SyRS-006", "konsolidierung": "nein", "pruefidee": "Alle registrierten IHostedService-Implementierungen auflisten und nach Kritikalität/Skalierungsbedarf kategorisieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-016", @@ -2393,7 +2538,8 @@ "tracelinks": "SyRS-007", "konsolidierung": "nein", "pruefidee": "Ein absichtlich fehlerhaftes Migrationsskript einspielen und den Startabbruch prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-017", @@ -2409,7 +2555,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Alle Roh-SQL-Vorkommen im Backend zählen und deren SQL-Server-Spezifität (T-SQL-Funktionen) bewerten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-018", @@ -2425,7 +2572,8 @@ "tracelinks": "SyRS-009", "konsolidierung": "nein", "pruefidee": "docker compose up ausführen und alle vier Dienste auf Erreichbarkeit prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-019", @@ -2441,7 +2589,8 @@ "tracelinks": "SyRS-010", "konsolidierung": "nein", "pruefidee": "Nach Installation den Server neu starten und prüfen, dass der Dienst \"CentronNexus\" automatisch läuft.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-050", @@ -2457,7 +2606,8 @@ "tracelinks": "SyRS-046, SyRS-047", "konsolidierung": "nein", "pruefidee": "Für dieselben Kernfelder (Name, Adresse) im Legacy- und im neuen Modell versuchen, sie leer zu lassen, und das jeweilige Fehlerverhalten (DB- vs. keine Fehlermeldung) vergleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-051", @@ -2474,7 +2624,8 @@ "tracelinks": "SyRS-048, SyRS-049", "konsolidierung": "nein", "pruefidee": "Einen Ansprechpartner ohne Adresse und eine Adresse ohne Kunden-/Lieferantenbezug jeweils über die WPF-Oberfläche zu speichern versuchen und die Fehlermeldungen prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-052", @@ -2491,7 +2642,8 @@ "tracelinks": "SyRS-050, SyRS-051", "konsolidierung": "nein", "pruefidee": "Einen neuen Kunden minimal (nur Name) anlegen und prüfen, dass Standardadresse/-ansprechpartner existieren und der Kunde als aktiv gilt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-057", @@ -2507,7 +2659,8 @@ "tracelinks": "SyRS-055, SyRS-056, SyRS-057", "konsolidierung": "nein", "pruefidee": "Ein WebAccount-Passwort \"aaaaaaaa\" setzen und prüfen, dass es akzeptiert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-060", @@ -2525,7 +2678,8 @@ "tracelinks": "SyRS-026, SyRS-027, SyRS-038, SyRS-039", "konsolidierung": "nein", "pruefidee": "Einen Beleg mit negativer Nummer anlegen und prüfen, dass IsTemplate korrekt true zurückgibt, ohne dass ein separates Flag gesetzt wurde.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-061", @@ -2541,7 +2695,8 @@ "tracelinks": "SyRS-028", "konsolidierung": "nein", "pruefidee": "Eine Codesuche nach \"ConcurrencyControlGuid\" durchführen und jede Fundstelle auf konsistente Prüfung untersuchen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-062", @@ -2557,7 +2712,8 @@ "tracelinks": "SyRS-036, SyRS-037", "konsolidierung": "nein", "pruefidee": "Für jede der sechs Bedingungen einen gezielten Testfall konstruieren, der genau diese eine Bedingung verletzt, und die spezifische Fehlermeldung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-063", @@ -2574,7 +2730,8 @@ "tracelinks": "SyRS-029, SyRS-030", "konsolidierung": "nein", "pruefidee": "Einen Vertrag mit erreichtem ContractEnd aber unvollständig abgerechnetem Zeitraum (LastBookingTo < ContractEnd) prüfen — sollte NICHT automatisch schließen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-064", @@ -2590,7 +2747,8 @@ "tracelinks": "SyRS-031", "konsolidierung": "nein", "pruefidee": "Unit-Test mit allen vier Flag-Kombinationen und je einer Nutzungsmenge unter/über/im ContractAmount-Bereich schreiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-065", @@ -2606,7 +2764,8 @@ "tracelinks": "SyRS-031", "konsolidierung": "nein", "pruefidee": "Einen RMM-Dienstausfall simulieren: einmal für einen Vertrag ohne RMM-Artikel (sollte durchlaufen) und einmal mit RMM-Artikel (sollte abbrechen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-066", @@ -2623,7 +2782,8 @@ "tracelinks": "SyRS-032, SyRS-060, SyRS-061, SyRS-062", "konsolidierung": "nein", "pruefidee": "Je einen Testfall für Toleranzüberschreitung, fehlendes Leistungsdatum und negative Rabattposition durchführen und das erzeugte XML gegen die erwarteten Werte prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-067", @@ -2639,7 +2799,8 @@ "tracelinks": "SyRS-033", "konsolidierung": "nein", "pruefidee": "Eine erzeugte ebInterface-Datei mit einem externen XSD-4.3-Validator prüfen und Abweichungen dokumentieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-068", @@ -2655,7 +2816,8 @@ "tracelinks": "SyRS-034", "konsolidierung": "nein", "pruefidee": "Für zwei Kunden mit unterschiedlichem OrderLockAfterDunning-Wert dieselbe Mahnstufe erreichen und das unterschiedliche Sperrverhalten prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-069", @@ -2671,7 +2833,8 @@ "tracelinks": "SyRS-063", "konsolidierung": "nein", "pruefidee": "Einem Benutzer das Dunning-Recht entziehen und beide Funktionsbereiche einzeln auf Zugriffsverweigerung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-070", @@ -2687,7 +2850,8 @@ "tracelinks": "SyRS-035, SyRS-045, SyRS-064", "konsolidierung": "nein", "pruefidee": "Eine referenzierte Bankverbindung zu löschen versuchen (Ablehnung erwartet), danach eine unreferenzierte löschen (Erfolg erwartet).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-072", @@ -2704,7 +2868,8 @@ "tracelinks": "SyRS-066, SyRS-067, SyRS-077", "konsolidierung": "nein", "pruefidee": "Eine Suche mit deaktivierter interner Quelle (nur extern) ausführen und prüfen, dass dennoch ein vollständiges Ergebnis geliefert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-073", @@ -2721,7 +2886,8 @@ "tracelinks": "SyRS-066", "konsolidierung": "nein", "pruefidee": "Denselben Artikel für zwei Kunden mit unterschiedlichem Rabattsatz suchen und die berechneten Verkaufspreise vergleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-074", @@ -2737,7 +2903,8 @@ "tracelinks": "SyRS-068, SyRS-078", "konsolidierung": "nein", "pruefidee": "Für einen Artikel mit bekanntem A/B/C-Lieferantenset und ArticleCalculationFactor=0 (Fallback erwartet: 1) den berechneten Vorschlag nachrechnen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-075", @@ -2753,7 +2920,8 @@ "tracelinks": "SyRS-069", "konsolidierung": "nein", "pruefidee": "Eine Testbestellung für einen SFTP-basierten und einen HTTP-basierten Distributor auslösen und den jeweils genutzten Transportweg protokollieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-076", @@ -2770,7 +2938,8 @@ "tracelinks": "SyRS-070, SyRS-071, SyRS-075, SyRS-076", "konsolidierung": "nein", "pruefidee": "Eine Umbuchung mit fehlendem Zielort auslösen (Ablehnung erwartet); eine RMA-Buchung durchführen und die Ausblendung aus der regulären Bestandsliste prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-077", @@ -2786,7 +2955,8 @@ "tracelinks": "SyRS-073", "konsolidierung": "nein", "pruefidee": "Für einen Artikel mit \"gewichteter Durchschnitt\"-Strategie einen Wareneingang mit Sondervereinbarungspreis buchen und prüfen, dass der Durchschnittspreis unverändert bleibt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-078", @@ -2803,7 +2973,8 @@ "tracelinks": "SyRS-074", "konsolidierung": "nein", "pruefidee": "Die Systemeinstellung für ein RMA-Sonderlager auf ein anderes physisches Lager umstellen und prüfen, dass die Ausblendung korrekt dem neuen Lager folgt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-079", @@ -2819,7 +2990,8 @@ "tracelinks": "SyRS-072", "konsolidierung": "nein", "pruefidee": "Eine Sendung mit 51 Referenzen erstellen und die clientseitige Fehlermeldung vor jeglichem Netzwerkaufruf prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-080", @@ -2835,7 +3007,8 @@ "tracelinks": "SyRS-072", "konsolidierung": "nein", "pruefidee": "Prüfen, ob die im Quellcode hinterlegten GLS-Zugangsdaten produktiv gültig sind und rotiert werden müssen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-081", @@ -2852,7 +3025,8 @@ "tracelinks": "SyRS-079, SyRS-080", "konsolidierung": "nein", "pruefidee": "Ein Gerät löschen (Soft-Delete) und prüfen, dass es weiterhin in der Historie/im Audit-Log sichtbar bleibt, aber nicht mehr in aktiven Listen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-082", @@ -2869,7 +3043,8 @@ "tracelinks": "SyRS-082", "konsolidierung": "Kandidat: siehe SyRS-082.", "pruefidee": "Ein Ticket über AccountDeviceToTicket mit einem Gerät verknüpfen und in einer Ansicht prüfen, die auf HelpdeskDeviceLink basiert, ob die Verknüpfung sichtbar ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-083", @@ -2886,7 +3061,8 @@ "tracelinks": "SyRS-081, SyRS-083, SyRS-084", "konsolidierung": "nein", "pruefidee": "Einen Import-Lauf für mehrere Geräte durchführen und prüfen, ob alle importierten Zählerstände korrekt in die DownloadResult-Liste übernommen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-084", @@ -2902,7 +3078,8 @@ "tracelinks": "SyRS-083", "konsolidierung": "nein", "pruefidee": "Mit dem Fachbereich klären, ob und wie oft in der Praxis nicht zuordenbare Zählerstände auftreten und wie sie aktuell manuell behandelt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-085", @@ -2919,7 +3096,8 @@ "tracelinks": "SyRS-091, SyRS-092, SyRS-097, SyRS-098", "konsolidierung": "nein", "pruefidee": "Ein Ticket mit mehreren aufeinanderfolgenden Änderungen (Status, Priorität, Kommentar) speichern und jede Historie-Einzelzeile mit dem erwarteten Aktionstyp abgleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-086", @@ -2935,7 +3113,8 @@ "tracelinks": "SyRS-093", "konsolidierung": "nein", "pruefidee": "Ein Ticket mit einer CanCloseHelpdesk=false-Checkliste und einem offenen Punkt schließen versuchen und die Ablehnung prüfen; danach den Punkt abschließen und den erfolgreichen Abschluss prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-087", @@ -2951,7 +3130,8 @@ "tracelinks": "SyRS-091", "konsolidierung": "nein", "pruefidee": "Ein Ticket mit aktiviertem externem Benachrichtigungs-Setting schließen und prüfen, dass E-Mail inkl. PDF-Servicebericht beim Kunden ankommt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-088", @@ -2967,7 +3147,8 @@ "tracelinks": "SyRS-094", "konsolidierung": "nein", "pruefidee": "Ein Ticket sowohl mit einem alten Riverbird-Ticket als auch mit einem neuen RMM-Zugangsschlüssel anlegen und beide Erfolgsfälle prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-089", @@ -2983,7 +3164,8 @@ "tracelinks": "SyRS-095", "konsolidierung": "nein", "pruefidee": "Ein RMM-Ereignis mit zwei bekannten und einer unbekannten Geräte-ID senden und prüfen, dass alle drei im Log erscheinen, aber nur die zwei bekannten verknüpft werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-090", @@ -3000,7 +3182,8 @@ "tracelinks": "SyRS-096, SyRS-101", "konsolidierung": "nein", "pruefidee": "Eine Codesuche nach \"CreatedFrom == 7\" über HelpdeskBL, HelpdeskSendMailBL, HelpdeskSearchBL, HelpdeskWebServiceBL durchführen und auf konsistente Verwendung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-100", @@ -3016,7 +3199,8 @@ "tracelinks": "SyRS-069, SyRS-108", "konsolidierung": "nein", "pruefidee": "Eine fehlerhafte EDI-Datei eines Distributors einspielen und prüfen, dass die Verarbeitung anderer Distributoren im selben Lauf unbeeinträchtigt bleibt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-101", @@ -3033,7 +3217,8 @@ "tracelinks": "SyRS-040, SyRS-114, SyRS-115", "konsolidierung": "nein", "pruefidee": "Einen bereits bestellten Warenkorb (State != Active bzw. IsCart auf false gesetzt) erneut über die externe URL aufzurufen versuchen und die Fehlerbehandlung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-102", @@ -3049,7 +3234,8 @@ "tracelinks": "SyRS-024", "konsolidierung": "nein", "pruefidee": "Einem WebAccount das Recht CUSTOMERADMINISTRATOR zuweisen und prüfen, dass ausschließlich die dafür vorgesehenen Portal-Funktionen freigeschaltet werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-103", @@ -3066,7 +3252,8 @@ "tracelinks": "SyRS-114", "konsolidierung": "nein", "pruefidee": "Ein Dokument extern signieren und den resultierenden Belegstatus im WPF-Client auf Konsistenz prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-104", @@ -3082,7 +3269,8 @@ "tracelinks": "SyRS-058, SyRS-113", "konsolidierung": "nein", "pruefidee": "Für eine Testseite mit kombinierten Anforderungen (Recht + Lizenz) den Zugriff mit nur einer erfüllten Anforderung testen und die Ablehnung prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-105", @@ -3098,6 +3286,7 @@ "tracelinks": "SyRS-116", "konsolidierung": "Kandidat: siehe SyRS-116.", "pruefidee": "Eine neu eingeführte WPF-Helpdesk-Funktion daraufhin prüfen, ob und wann eine äquivalente ServiceBoard-Funktion nachgezogen wird (Aufwandsindikator für Doppelpflege).", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_163523_v2.1.1-26ea/_meta/anforderungen.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_163523_v2.1.1-26ea/_meta/anforderungen.md index f6c3bff0..96aaefe8 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_163523_v2.1.1-26ea/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_163523_v2.1.1-26ea/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 175 (92,6 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (62 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 189 von 189 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182941_v3.4.0-5b99/Protokoll.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182941_v3.4.0-5b99/Protokoll.md index 07ef615d..f050102f 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182941_v3.4.0-5b99/Protokoll.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182941_v3.4.0-5b99/Protokoll.md @@ -97,6 +97,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -127,6 +129,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 2,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 234 (95,1 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -144,6 +150,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **verletzt** – 1 von 85 ungedeckt: SyRS-SYS-02 | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 246 von 246 mit Tracelinks (100,0 %) | ## V1b-Block F–J, fünf Messpunkte diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182941_v3.4.0-5b99/_meta/anforderungen.json b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182941_v3.4.0-5b99/_meta/anforderungen.json index 44c986cf..e6593a0d 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182941_v3.4.0-5b99/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182941_v3.4.0-5b99/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-SALES-01, SyRS-SALES-02, SwRS-SALES-02", "konsolidierung": "nein", "pruefidee": "Ein Angebot anlegen, per ForwardReceipt in einen Auftrag, dann in einen Lieferschein, dann in eine Rechnung überführen; prüfen, dass Kundendaten und Positionen (abzüglich bereits verarbeiteter Mengen) übernommen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SALES-02", @@ -33,7 +34,8 @@ "tracelinks": "StRS-SALES-01", "konsolidierung": "nein", "pruefidee": "Vertrag mit `AutomatedBilling=true` und monatlichem Intervall anlegen; nach Ablauf der Periode prüfen, dass automatisch eine Rechnung mit korrektem Zeitraum erzeugt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SALES-03", @@ -51,7 +53,8 @@ "tracelinks": "SyRS-SALES-05", "konsolidierung": "nein", "pruefidee": "Benutzer ohne EDIT_ORDER-Recht versucht Auftrag zu speichern → Fehler \"RightCheckFailed\"; Benutzer mit Recht nur eigene Filiale versucht Beleg einer Fremdfiliale zu bearbeiten → Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SALES-04", @@ -68,7 +71,8 @@ "tracelinks": "SyRS-SALES-04, SwRS-SALES-03, SwRS-SALES-07", "konsolidierung": "nein", "pruefidee": "Beleg mit bereits weiterverarbeitetem Positionen (z.B. Auftrag mit erzeugtem Lieferschein) editieren → Versionierungsversuch wird mit definierter Fehlermeldung abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SALES-05", @@ -85,7 +89,8 @@ "tracelinks": "SwRS-SALES-04, SwRS-SALES-05", "konsolidierung": "nein", "pruefidee": "Position mit Basispreis 100, Rabatt 10%, MwSt 19% anlegen → Netto 90,00, Steuer 17,10 erwartet; zwei Positionen mit unterschiedlichem Steuersatz erzeugen zwei Zeilen in der MwSt-Aufstellung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-BP-01", @@ -103,7 +108,8 @@ "tracelinks": "SyRS-BP-01, SyRS-BP-07", "konsolidierung": "nein", "pruefidee": "Adresse mit gesetztem CustomerI3D und gesetztem SupplierI3D anlegen und prüfen, ob dies systemseitig verhindert wird (Datenintegritätstest).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-BP-02", @@ -120,7 +126,8 @@ "tracelinks": "SyRS-BP-03, SwRS-BP-02, SwRS-BP-03", "konsolidierung": "nein", "pruefidee": "Kunde mit Kreditlimit 1000 EUR anlegen, Beleg über 1200 EUR erzeugen und prüfen, ob der Überschreitungsdialog mit korrekter Differenz (200 EUR) erscheint.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-BP-03", @@ -137,7 +144,8 @@ "tracelinks": "SyRS-BP-04, SwRS-BP-04", "konsolidierung": "nein", "pruefidee": "Kunde mit Mahnstufe 2 und OrderLockAfterDunning=2 anlegen; Versuch, einen neuen Auftrag zu erstellen, muss mit Fehlermeldung abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-BP-04", @@ -154,7 +162,8 @@ "tracelinks": "SyRS-BP-06, SwRS-BP-08", "konsolidierung": "nein", "pruefidee": "Sonderpreis mit ValidTo=gestern anlegen und prüfen, dass er bei ShowOnlyActive=true nicht mehr in der Ergebnisliste erscheint.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-BP-05", @@ -170,7 +179,8 @@ "tracelinks": "SyRS-BP-09, SwRS-BP-06", "konsolidierung": "nein", "pruefidee": "Mit Web-Account von Kunde A versuchen, Kundendaten von Kunde B über GET /v1/Customers/{B} abzurufen; erwartet: leeres/kein Ergebnis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-BP-06", @@ -187,7 +197,8 @@ "tracelinks": "SyRS-BP-05, SwRS-BP-05", "konsolidierung": "nein", "pruefidee": "Kundenauftrag ohne Zahlungskondition speichern; erwartet: Fehlermeldung \"Der Beleg hat keine Zahlungskondition.\"", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-FIN-01", @@ -204,7 +215,8 @@ "tracelinks": "SyRS-FIN-01, SyRS-FIN-02, SwRS-FIN-01, SwRS-FIN-02", "konsolidierung": "nein", "pruefidee": "Banktransaktion mit Rechnungsnummer im Verwendungszweck importieren; prüfen, dass genau die referenzierte offene Rechnung als TransactionAssignment mit Heuristik \"MatchedInvoiceNumbers\" vorgeschlagen wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-FIN-02", @@ -221,7 +233,8 @@ "tracelinks": "SyRS-FIN-04, SyRS-FIN-05, SwRS-FIN-04", "konsolidierung": "nein", "pruefidee": "Rechnung ohne Mahnstufe mit Mahnlauf ausführen -> DunningLevel wird Level1, DunningLevel1Date/-Employee gesetzt; erneuter Lauf erhöht auf Level2.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-FIN-03", @@ -238,7 +251,8 @@ "tracelinks": "StRS-FIN-02, SyRS-FIN-06, SwRS-FIN-06", "konsolidierung": "nein", "pruefidee": "Kunde mit LockOrderAfterDunningLevel=2 und aktueller Mahnstufe Level2: Versuch, neuen Auftrag anzulegen, muss mit Fehlermeldung \"Aufgrund der Mahnstufe darf kein neuer Beleg ... angelegt werden.\" abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-FIN-04", @@ -256,7 +270,8 @@ "tracelinks": "SyRS-FIN-07, SwRS-FIN-07", "konsolidierung": "nein", "pruefidee": "Rechnung für Kunden mit gesetzter Leitweg-ID generieren; erzeugte XML muss XInvoice/XRechnung-Struktur (fileKind=XInvoice) statt ZUGFeRD-Comfort aufweisen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-FIN-05", @@ -273,7 +288,8 @@ "tracelinks": "SyRS-FIN-08, SyRS-FIN-09, SwRS-FIN-08, SwRS-FIN-09", "konsolidierung": "nein", "pruefidee": "Zweite Bankverbindung eines Kunden als \"Standard\" speichern -> vorherige Standardverbindung muss automatisch IsDefault=false erhalten; Löschversuch einer in einer aktiven Rechnung verwendeten Bankverbindung muss fehlschlagen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-PUR-01", @@ -290,7 +306,8 @@ "tracelinks": "SyRS-PUR-01, SyRS-PUR-03, SwRS-PUR-01, SwRS-PUR-02", "konsolidierung": "nein", "pruefidee": "Für einen Artikel mit Lagerbestand < Mindestbestand und ohne Zulauf muss der Artikel in der von `GetOrderSuggestionArticle` gelieferten Liste erscheinen; nach Zulaufbuchung ≥ Fehlmenge muss er verschwinden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-PUR-02", @@ -307,7 +324,8 @@ "tracelinks": "SyRS-PUR-04, SwRS-PUR-05", "konsolidierung": "nein", "pruefidee": "Bei aktiver Branch-Lizenz und zwei Filialen mit unterschiedlichen `SupplierToBranch`-Einträgen für denselben Lieferanten muss `GetSupplierBranchInfos` je Filiale die jeweils passende Kundennummer zurückgeben; ohne Lizenz muss auf die zentrale `AccountSupplier`-Kundennummer zurückgefallen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-PUR-03", @@ -324,7 +342,8 @@ "tracelinks": "SyRS-PUR-06, SwRS-PUR-03, SwRS-PUR-09", "konsolidierung": "nein", "pruefidee": "Nach Eintreffen einer EDI-Auftragsbestätigung mit abweichendem Liefertermin/Preis/Menge müssen die entsprechenden Felder der Bestellposition automatisch aktualisiert und ein Log-Eintrag (`CreateUpdatedSupplierOrderWithEdiValuesEntry`) erzeugt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-PUR-04", @@ -341,7 +360,8 @@ "tracelinks": "SyRS-PUR-02, SwRS-PUR-04", "konsolidierung": "nein", "pruefidee": "`GetDistributors` muss für einen Lieferanten mit gepflegtem `Mindestbestellwert` und `MindestbestellwertDirektlieferung` beide Werte unverändert und getrennt zurückliefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-PUR-05", @@ -358,7 +378,8 @@ "tracelinks": "SyRS-PUR-07, SwRS-PUR-06", "konsolidierung": "nein", "pruefidee": "`GetProductByEanCodeAsync` muss für eine gültige EAN ein `Product` mit gefüllten Feldern `Price`, `Stock` und mindestens einem `SupplierInfo`-Eintrag liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-PUR-06", @@ -374,7 +395,8 @@ "tracelinks": "SyRS-PUR-03, SwRS-PUR-02", "konsolidierung": "nein", "pruefidee": "Ein Auftrag mit `BestellSperre = 1` und Bestand unter Mindestbestand darf in keiner der vier `GetOrderSuggestion*`-Methoden erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-ART-01", @@ -391,7 +413,8 @@ "tracelinks": "SyRS-ART-01, SwRS-ART-01", "konsolidierung": "nein", "pruefidee": "Zwei Artikel mit identischem Artikelcode anlegen; zweite Anlage muss mit Fehlermeldung fehlschlagen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-ART-02", @@ -408,7 +431,8 @@ "tracelinks": "SyRS-ART-04, SwRS-ART-05", "konsolidierung": "nein", "pruefidee": "Wareneingang auf ein Nebenlager buchen; SecondaryStockArticle.Stock erhöht sich, ArticleMainStock des Hauptlagers bleibt unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-ART-03", @@ -425,7 +449,8 @@ "tracelinks": "SyRS-ART-05, SwRS-ART-07", "konsolidierung": "nein", "pruefidee": "Verkaufsauftrag mit offener Menge anlegen; StockInOrder des betroffenen Artikels erhöht sich um die Auftragsmenge, physischer Bestand ändert sich erst bei Lieferung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-ART-04", @@ -442,7 +467,8 @@ "tracelinks": "SyRS-ART-07, SwRS-ART-05", "konsolidierung": "nein", "pruefidee": "Lager vom Kind RmaCustomer anlegen und in den Einstellungen als RMACustomerStorage hinterlegen; Lager erscheint danach nicht mehr im Ergebnis von LoadOpenWarehouses() für reguläre Buchungen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-ART-05", @@ -459,7 +485,8 @@ "tracelinks": "SyRS-ART-08, SyRS-ART-09", "konsolidierung": "nein", "pruefidee": "Artikelsuche über ITscope mit gültiger EAN durchführen; Ergebnis enthält Beschreibung, Preis und Bestand des externen Anbieters und lässt sich in eine Beleg-/Bestellposition übernehmen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-ART-06", @@ -476,7 +503,8 @@ "tracelinks": "SyRS-ART-06, SwRS-ART-06", "konsolidierung": "nein", "pruefidee": "Verkaufsbeleg ohne Recht RIGHT_NEGATIVBUCHUNG buchen, der den Bestand unter null senken würde; System fordert Anmeldedaten eines berechtigten Kollegen an, bevor die Buchung durchgeführt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-PROD-01", @@ -494,7 +522,8 @@ "tracelinks": "SyRS-PROD-01, SwRS-PROD-01", "konsolidierung": "nein", "pruefidee": "Anlegen eines ProductionOrder-Datensatzes ohne OrderI3D/OrderNumber muss einen DB-Constraint-Fehler auslösen; Speichern mit gültigem OrderI3D muss über GetProductionOrdersByFilter(OrderI3D=x) wieder auffindbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-PROD-02", @@ -512,7 +541,8 @@ "tracelinks": "StRS-PROD-01, SyRS-PROD-02, SyRS-PROD-03, SwRS-PROD-02", "konsolidierung": "nein", "pruefidee": "Setzen von State=InProgression bei ProducedAmount Zugriff wird mit \"Sie haben nicht die Berechtigung...\" verweigert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-HD-02", @@ -772,7 +816,8 @@ "tracelinks": "SyRS-HD-04, SyRS-HD-05, SwRS-HD-05, SwRS-HD-09", "konsolidierung": "nein", "pruefidee": "Ticket mit einer verknüpften, nicht abschlussfreien Checkliste und offenem Punkt schließen -> Aktion liefert Fehlermeldung \"...wurde noch nicht vollständig erledigt.\" und Status bleibt unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-HD-03", @@ -790,7 +835,8 @@ "tracelinks": "SyRS-HD-08, SwRS-HD-08", "konsolidierung": "nein", "pruefidee": "Nicht-Editor versucht, Bezeichnung eines Vorlagenpunkts zu ändern -> Fehlermeldung \"kann hier nur von einem Administrator geändert werden.\"; Ersteller eines AdHoc-Punkts kann diesen bearbeiten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-HD-04", @@ -808,7 +854,8 @@ "tracelinks": "SyRS-HD-07, SwRS-HD-06, SwRS-HD-07, SwRS-HD-10", "konsolidierung": "nein", "pruefidee": "Benutzer mit DELETE_HELPDESK_TIMER versucht, eine bereits abgerechnete Zeit zu löschen -> Fehlermeldung \"...wurde einem Beleg zugewiesen. Löschen ist nicht möglich.\"", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-HD-05", @@ -825,7 +872,8 @@ "tracelinks": "StRS-HD-02, SyRS-HD-09, SwRS-HD-09, SwRS-HD-10", "konsolidierung": "nein", "pruefidee": "POST v1/Helpdesks/{id}/close ohne gültiges Auth-Token -> HTTP 401; mit Token, aber ohne CLOSE_REQUEST -> BadRequest mit fachlicher Fehlermeldung aus der BL.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SEC-01", @@ -843,7 +891,8 @@ "tracelinks": "SyRS-SEC-01, SyRS-SEC-02, SwRS-SEC-01", "konsolidierung": "nein", "pruefidee": "Benutzer mit Basisrecht, aber ohne einschränkendes Zusatzrecht sieht alle Datensätze; Benutzer mit Zusatzrecht \"nur eigene Filiale\" sieht nur Datensätze seiner Filiale (verifiziert je Domäne).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SEC-02", @@ -860,7 +909,8 @@ "tracelinks": "SyRS-SEC-03, SyRS-SEC-04, SwRS-SEC-02", "konsolidierung": "nein", "pruefidee": "System mit SystemAuthenticationMethod=ActiveDirectory konfigurieren; Anmeldeversuch mit Basic-Authenticator-Pfad muss laut TryCreateActiveDirectory-Logik abgelehnt werden, sofern AD nicht erreichbar/aktiviert ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SEC-03", @@ -878,7 +928,8 @@ "tracelinks": "SyRS-SEC-05, SyRS-SEC-06, SwRS-SEC-03, SwRS-SEC-04", "konsolidierung": "nein", "pruefidee": "Web-Service ohne gültige Centron-Basislizenz starten -> Startvorgang schlägt laut LoadLicenses()-Kommentar (Zeilen 226-233) bewusst fehl, um DB-Schema-Upgrades ohne gültige Lizenz zu verhindern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SEC-04", @@ -895,7 +946,8 @@ "tracelinks": "SyRS-SEC-07, SwRS-SEC-05", "konsolidierung": "Kandidat: Koexistenz mit älterer manueller Rechteprüfung in WebServiceBL-Klassen (ControllerBaseExtensions.CheckUserHasRight) - beide Mechanismen bestehen parallel.", "pruefidee": "Neuer Controller mit `[AuthorizeUserRight(RightId)]` versehen; unautorisierter Zugriff liefert 403, ohne dass der Controller selbst Prüfcode enthält.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SYS-01", @@ -913,7 +965,8 @@ "tracelinks": "SyRS-SYS-01, SyRS-SYS-02", "konsolidierung": "nein", "pruefidee": "Ein im WPF-Client angelegter Kunde mit Web-Zugang kann sich im Nexus-Portal anmelden und seine im ERP hinterlegten Sonderpreise im WebCart sehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SYS-02", @@ -931,7 +984,8 @@ "tracelinks": "SyRS-SYS-03, SyRS-SYS-04", "konsolidierung": "Kandidat: Zusammenführung der zwei parallelen API-Schichten (Legacy WCF-artig vs. ASP.NET-Core-Controller) in eine einzige API-Fläche für das Zielsystem.", "pruefidee": "Ein Testclient kann sich per Ticket authentifizieren und über einen v1-Controller-Endpunkt sowie parallel über ICentronRestService dieselbe Kundenentität lesen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-SYS-03", @@ -948,7 +1002,8 @@ "tracelinks": "SyRS-SEC-Filialrechte (siehe SEC-Domäne), SwRS-SALES (ReceiptBase.BranchI3D, siehe SALES-Domäne)", "konsolidierung": "nein", "pruefidee": "Ein Benutzer mit \"nur eigene Filiale\"-Recht ruft eine Liste von Belegen ab und erhält ausschließlich Datensätze mit passendem BranchI3D.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-01", @@ -966,7 +1021,8 @@ "tracelinks": "StRS-SALES-01", "konsolidierung": "nein", "pruefidee": "POST /ForwardReceipt mit einer Auftrags-I3D und ReceiptKind=DeliveryListClass senden → Response enthält neuen Lieferschein mit übernommenen offenen Mengen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-02", @@ -983,7 +1039,8 @@ "tracelinks": "StRS-SALES-01, SyRS-SALES-01", "konsolidierung": "nein", "pruefidee": "ForwardReceipt-Request mit Quelle Angebot und Ziel CreditVoucherClass senden → Server antwortet mit Fehlermeldung, kein Beleg wird angelegt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-03", @@ -1000,7 +1057,8 @@ "tracelinks": "StRS-SALES-04", "konsolidierung": "nein", "pruefidee": "Beleg laden, GUID merken; parallel Beleg durch zweiten Client ändern und speichern; erster Client versucht mit alter GUID zu speichern → Fehler `ChangedByOtherInstance`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-04", @@ -1017,7 +1075,8 @@ "tracelinks": "StRS-SALES-04, SyRS-SALES-03", "konsolidierung": "Kandidat: konzeptionell verwandt mit SyRS-SALES-03 (optimistische Sperre) — beide behandeln nebenläufigen Zugriff, jedoch auf unterschiedlichen Ebenen (pessimistisch vs. optimistisch); in einer Neuimplementierung ggf. auf ein einheitliches Locking-Konzept konsolidieren.", "pruefidee": "Benutzer A startet Bearbeitung (Sperre erwerben); Benutzer B versucht zeitgleich Neuversion desselben Belegs → `ReceiptIsLockedFromOtherUser=true` in Response.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-05", @@ -1034,7 +1093,8 @@ "tracelinks": "StRS-SALES-03", "konsolidierung": "nein", "pruefidee": "Benutzer ohne `CHANGE_PURCHASE_PRICE` versucht, den Einkaufspreis einer Auftragsposition zu ändern und zu speichern → Zugriff wird verweigert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-06", @@ -1051,7 +1111,8 @@ "tracelinks": "StRS-SALES-01", "konsolidierung": "nein", "pruefidee": "SearchReceiptsThroughPaging mit EntriesPerPage=20 aufrufen → Response enthält maximal 20 Belege unabhängig von der Gesamttrefferzahl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-07", @@ -1068,7 +1129,8 @@ "tracelinks": "StRS-SALES-03, SyRS-SALES-05", "konsolidierung": "nein", "pruefidee": "Unauthentifizierten Request an `POST v1/Offers` senden → sollte 401 liefern; aktueller Code-Befund legt nahe, dass dies zu prüfen und ggf. zu härten ist, bevor die Web/SaaS-Neuimplementierung diesen Zustand übernimmt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SALES-08", @@ -1085,7 +1147,8 @@ "tracelinks": "StRS-SALES-06, SwRS-SALES-06", "konsolidierung": "nein", "pruefidee": "Stornierte Rechnung mit `UpdateReceiptIsPaid(isPaid:true)` aufrufen → Fehlermeldung; offene Rechnung mit demselben Aufruf → State wechselt auf Completed und ein Log-Eintrag wird erzeugt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BP-01", @@ -1102,7 +1165,8 @@ "tracelinks": "StRS-BP-01", "konsolidierung": "nein", "pruefidee": "Adresse mit zwei Kontaktpersonen anlegen, beide mit Default=true markieren, prüfen ob SelectedContactPerson konsistent den ersten Treffer liefert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BP-02", @@ -1118,7 +1182,8 @@ "tracelinks": "StRS-BP-01, SwRS-BP-01", "konsolidierung": "nein", "pruefidee": "Neuen Kunden ohne Adressliste speichern; erwartet: eine automatisch erzeugte Adresse mit DefaultCustomer=true.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BP-03", @@ -1135,7 +1200,8 @@ "tracelinks": "StRS-BP-02, SwRS-BP-02, SwRS-BP-03", "konsolidierung": "nein", "pruefidee": "Kunde mit offenem Auftrag (500) und offener Rechnung (300) und Limit 1000: CreditLimitAvailable muss 200 betragen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BP-04", @@ -1152,7 +1218,8 @@ "tracelinks": "StRS-BP-03, SwRS-BP-04", "konsolidierung": "nein", "pruefidee": "Kunde mit Mahnstufe 1 und OrderLockAfterDunning=2: Auftrag muss erstellbar sein; bei Mahnstufe 2 muss er blockiert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BP-05", @@ -1169,7 +1236,8 @@ "tracelinks": "StRS-BP-06, SwRS-BP-05", "konsolidierung": "nein", "pruefidee": "Kunde mit Standardzahlungskondition \"30 Tage netto\" anlegen, Rechnung mit \"sofort\" erstellen; erwartet: Abweichungsdialog erscheint.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BP-06", @@ -1186,7 +1254,8 @@ "tracelinks": "StRS-BP-04, SwRS-BP-08", "konsolidierung": "nein", "pruefidee": "Sonderpreis auf Warengruppenebene mit 10% Rabatt auf Listenpreis anlegen; Artikel dieser Warengruppe muss den reduzierten Preis erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BP-07", @@ -1202,7 +1271,8 @@ "tracelinks": "StRS-BP-01", "konsolidierung": "nein", "pruefidee": "Prüfen, dass ein Supplier-Datensatz ohne jegliche Customer-Referenz vollständig funktionsfähig ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BP-08", @@ -1219,7 +1289,8 @@ "tracelinks": "StRS-BP-03", "konsolidierung": "Kandidat: mit SyRS-BP-04 (Mahnstufen-Sperre) als gemeinsames \"Sperr-Konzept\" zusammenzuführen, da unterschiedliche Sperrmechanismen (Locked vs. Mahnstufe) parallel existieren.", "pruefidee": "Kunde mit Locked=true anlegen und CheckCustomerStatus mit dessen DongleId aufrufen; erwartet: gesperrt-Status.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-BP-09", @@ -1236,7 +1307,8 @@ "tracelinks": "StRS-BP-05, SwRS-BP-06, SwRS-BP-07", "konsolidierung": "nein", "pruefidee": "HTTP POST/PUT/DELETE gegen v1/Customers senden; erwartet: 404/405, da keine passende Route registriert ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-FIN-01", @@ -1252,7 +1324,8 @@ "tracelinks": "StRS-FIN-01", "konsolidierung": "nein", "pruefidee": "Buchungstext \"Zahlung RG 12345 danke\" mit Rechnungsnummernkreis 5-stellig -> Extraktion liefert 12345 und referenzierte Rechnung wird vorgeschlagen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-FIN-02", @@ -1268,7 +1341,8 @@ "tracelinks": "StRS-FIN-01", "konsolidierung": "nein", "pruefidee": "Denselben Kontoauszugs-Datensatz zweimal importieren -> zweiter Import liefert Result mit Status=Warning und DefaultMessageCodes.DuplicateRecords, kein zweiter Datenbankeintrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-FIN-03", @@ -1284,7 +1358,8 @@ "tracelinks": "StRS-FIN-01", "konsolidierung": "nein", "pruefidee": "Transaktion mit Betrag 100,00 EUR und gebuchter Zuordnung 99,95 EUR -> IsCompleted=true; bei 99,80 EUR -> IsCompleted=false.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-FIN-04", @@ -1300,7 +1375,8 @@ "tracelinks": "StRS-FIN-02, SwRS-FIN-04", "konsolidierung": "nein", "pruefidee": "Rechnung mit DunningLevel=Level1 in Mahnlauf einschließen -> nach Ausführung DunningLevel=Level2, DunningLevel2Date=heutiges Datum, DunningLevel2Employee=ausführender Nutzer.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-FIN-05", @@ -1316,7 +1392,8 @@ "tracelinks": "StRS-FIN-02, StRS-FIN-06 (Nachvollziehbarkeit)", "konsolidierung": "nein", "pruefidee": "Mahnlauf ausführen, danach ResetDunningRun mit der erzeugten DunningRunNumber aufrufen -> Rechnung erhält vorherige Mahnstufe zurück, DunningRunItem-Einträge erhalten State=Deleted mit DeletedByEmployeeI3D/DeletedDate.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-FIN-06", @@ -1332,7 +1409,8 @@ "tracelinks": "StRS-FIN-02", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Recht \"Mahnwesen\" ruft GetDunningCustomers auf -> Exception \"does not have right 'dunning'\" wird geworfen, keine Daten werden zurückgegeben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-FIN-07", @@ -1350,7 +1428,8 @@ "tracelinks": "StRS-FIN-03, SwRS-FIN-06", "konsolidierung": "nein", "pruefidee": "Kunde mit Mahnstufe 2 und Auftrags-Schwellwert 2: Auftragsneuanlage wird abgelehnt; Rechnungsneuanlage für denselben Kunden bleibt möglich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-FIN-08", @@ -1367,7 +1446,8 @@ "tracelinks": "StRS-FIN-04, SwRS-FIN-07", "konsolidierung": "nein", "pruefidee": "Kunde mit exportZUGFeRD=false -> Result.AsWarning ohne XML-Erzeugung; Kunde mit exportZUGFeRD=true -> stets neueste XRechnung-Version laut ZugferdKindHelpers.NewestActiveZugferdVersion.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-FIN-09", @@ -1383,7 +1463,8 @@ "tracelinks": "StRS-FIN-05", "konsolidierung": "nein", "pruefidee": "Bankverbindung löschen, die auf einer aktiven Rechnung als MandatI3D hinterlegt ist -> Result.AsError mit Auflistung \"Rechnung \" und DefaultMessageCodes.DependencyCheckFailed.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PUR-01", @@ -1399,7 +1480,8 @@ "tracelinks": "StRS-PUR-01, SwRS-PUR-01", "konsolidierung": "nein", "pruefidee": "Ergebnisliste von `GetOrderSuggestionArticle` muss sowohl Artikel aus `_sqlArticle` als auch Artikel aus `_sqlSpec` (Sondervereinbarung) enthalten, wenn beide Bedingungen erfüllt sind.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PUR-02", @@ -1416,7 +1498,8 @@ "tracelinks": "StRS-PUR-04, SwRS-PUR-04", "konsolidierung": "nein", "pruefidee": "`GetDistributors` liefert für einen als Favorit markierten Lieferanten (`IsFavorite=1`) einen `DistributorDTO` mit `IsFavorite=true` und beiden Konditionspaaren gefüllt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PUR-03", @@ -1433,7 +1516,8 @@ "tracelinks": "StRS-PUR-01, StRS-PUR-06, SwRS-PUR-01, SwRS-PUR-02", "konsolidierung": "nein", "pruefidee": "Für einen Artikel mit unterschiedlichem Mindestbestand in Lager A und Lager B muss `GetOrderSuggestionWH` zwei getrennte Zeilen mit unterschiedlichem `ToBooking` liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PUR-04", @@ -1449,7 +1533,8 @@ "tracelinks": "StRS-PUR-02, SwRS-PUR-05", "konsolidierung": "nein", "pruefidee": "Ohne Branch-Lizenz muss `GetSupplierBranchInfos` für gegebene `SupplierI3Ds` Datensätze mit `BranchI3D = 0` und Daten aus `AccountSupplier` liefern, nicht aus `SupplierToBranch`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PUR-05", @@ -1466,7 +1551,8 @@ "tracelinks": "StRS-PUR-03, SwRS-PUR-07", "konsolidierung": "nein", "pruefidee": "Ein zweiter Bearbeitungsversuch derselben Bestellung durch einen anderen Benutzer muss abgelehnt werden, solange ein aktiver `ReceiptSupplierOrderLock`-Eintrag mit anderem `Lockuser` besteht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PUR-06", @@ -1483,7 +1569,8 @@ "tracelinks": "StRS-PUR-03, SwRS-PUR-03, SwRS-PUR-09", "konsolidierung": "nein", "pruefidee": "Bei einer EDI-Bestätigung mit abweichender Menge muss `QuantityComplete` der betroffenen Position aktualisiert und ein Log-Eintrag über `ReceiptLogBL.CreateUpdatedSupplierOrderWithEdiValuesEntry` erzeugt werden; bei identischer Menge darf keine Änderung erfolgen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PUR-07", @@ -1500,7 +1587,8 @@ "tracelinks": "StRS-PUR-05, SwRS-PUR-06", "konsolidierung": "nein", "pruefidee": "Ein Aufruf von `GetProductByManufacturerCodeAsync` mit gültigem Herstellercode muss ein `Product`-Objekt mit gesetztem `Manufacturer` und `Price` liefern; bei unbekanntem Code eine leere/Null-Antwort ohne Absturz.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PUR-08", @@ -1516,7 +1604,8 @@ "tracelinks": "StRS-PUR-01, SwRS-PUR-01", "konsolidierung": "nein", "pruefidee": "Für einen Artikel mit gesetztem `BLieferantI3D` muss bei `SearchCriteria.B_criteria` genau ein `DistriToArticleDTO`-Eintrag mit dem zugehörigen Kreditor-I3D erzeugt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PUR-09", @@ -1532,7 +1621,8 @@ "tracelinks": "StRS-PUR-03, SwRS-PUR-08", "konsolidierung": "nein", "pruefidee": "Nach Setzen von `TakeEKFromLastSupplierOrder = true` und `TakeEKFromArticle = false` muss eine neu angelegte Bestellposition den EK aus der letzten Lieferantenbestellung übernehmen (Verifikation erfordert zusätzlich Code der eigentlichen Bestellpositionserstellung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ART-01", @@ -1548,7 +1638,8 @@ "tracelinks": "StRS-ART-01, SwRS-ART-01", "konsolidierung": "nein", "pruefidee": "Direkter Insert eines zweiten ARTIK-Datensatzes mit identischem Artikelcode auf DB-Ebene muss einen Constraint-Verstoß auslösen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ART-02", @@ -1564,7 +1655,8 @@ "tracelinks": "StRS-ART-01, SwRS-ART-02", "konsolidierung": "nein", "pruefidee": "Artikel ohne Warengruppe speichern; Speicherung wird mit Fehlermeldung abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ART-03", @@ -1581,7 +1673,8 @@ "tracelinks": "StRS-ART-01", "konsolidierung": "nein", "pruefidee": "EAN-13 mit manipulierter letzter Ziffer eingeben; Validierung liefert Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ART-04", @@ -1598,7 +1691,8 @@ "tracelinks": "StRS-ART-02, SwRS-ART-05", "konsolidierung": "Kandidat - SecondaryStock (als obsolet markiert) und Stock koexistieren; sollte in Zielarchitektur konsolidiert werden.", "pruefidee": "Artikel mit Bestand in zwei unterschiedlichen Lagern abfragen; Mengen werden getrennt je Lager ausgewiesen und stimmen mit den jeweiligen Buchungen überein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ART-05", @@ -1615,7 +1709,8 @@ "tracelinks": "StRS-ART-03, SwRS-ART-07", "konsolidierung": "nein", "pruefidee": "Bestand eines Artikels unter dessen Mindestbestand senken; Verkaufsbuchung bleibt möglich, Artikel taucht im Bestellvorschlag auf.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ART-06", @@ -1631,7 +1726,8 @@ "tracelinks": "StRS-ART-06, SwRS-ART-06", "konsolidierung": "nein", "pruefidee": "Buchung mit Testbenutzer ohne RIGHT_NEGATIVBUCHUNG auslösen, die den Bestand negativ werden ließe; Anwendung fordert Anmeldedaten eines berechtigten Kollegen an.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ART-07", @@ -1649,7 +1745,8 @@ "tracelinks": "StRS-ART-04, SwRS-ART-05", "konsolidierung": "Kandidat - StorageLocation als \"obsolet\" markiert, Nachfolgeklasse StoragePlace nicht vorhanden; Migration unvollständig.", "pruefidee": "Filiale mit hinterlegtem Standardlager anlegen; neuer Beleg dieser Filiale schlägt automatisch das zugeordnete Lager vor.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ART-08", @@ -1666,7 +1763,8 @@ "tracelinks": "StRS-ART-05, SwRS-ART-08, SwRS-ART-09", "konsolidierung": "nein", "pruefidee": "Suche nach einer bekannten EAN über ITscope durchführen; Ergebnis enthält korrekt umgerechneten Preis und dem lokalen Steuersatz zugeordneten VAT-Wert trotz abweichender Nachkommadarstellung der externen API.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ART-09", @@ -1683,7 +1781,8 @@ "tracelinks": "StRS-ART-05, SwRS-ART-10", "konsolidierung": "nein", "pruefidee": "Icecat-Import für einen Artikel mit bekannter EAN anstoßen; Beschreibung und Bild werden im Erfassungsdialog vorbefüllt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-ART-10", @@ -1699,7 +1798,8 @@ "tracelinks": "StRS-ART-02, SwRS-ART-05", "konsolidierung": "nein", "pruefidee": "Wareneingang mit abweichendem Einkaufspreis für einen Artikel ohne NoMixedEk buchen; resultierender Einstandspreis entspricht dem mengengewichteten Mittel aus altem und neuem Bestand.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PROD-01", @@ -1716,7 +1816,8 @@ "tracelinks": "StRS-PROD-01", "konsolidierung": "nein", "pruefidee": "INSERT eines ProductionOrder-Datensatzes mit NULL in OrderI3D muss durch NHibernate/DB abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PROD-02", @@ -1732,7 +1833,8 @@ "tracelinks": "StRS-PROD-02", "konsolidierung": "nein", "pruefidee": "Speichern einer ProductionOrderItem ohne MachineKindI3D muss fehlschlagen; Speichern ohne MachineI3D muss erfolgreich sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PROD-03", @@ -1749,7 +1851,8 @@ "tracelinks": "StRS-PROD-02", "konsolidierung": "nein", "pruefidee": "Zuweisung eines nicht definierten Integer-Werts an State (z.B. 3) außerhalb des Enum-Bereichs muss beim Casting/Deserialisieren fehlschlagen bzw. abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PROD-04", @@ -1766,7 +1869,8 @@ "tracelinks": "StRS-PROD-01, StRS-PROD-02", "konsolidierung": "nein", "pruefidee": "Löschen eines ProductionOrder-Datensatzes muss dazu führen, dass alle zugehörigen ProductionOrderItem-Zeilen ebenfalls entfernt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PROD-05", @@ -1783,7 +1887,8 @@ "tracelinks": "StRS-PROD-04", "konsolidierung": "nein", "pruefidee": "Gleichzeitiges Ändern von Comment und State bei einer ProductionOrderItem muss genau zwei Log-Einträge (CommentChanged, StateChanged) erzeugen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PROD-06", @@ -1799,7 +1904,8 @@ "tracelinks": "StRS-PROD-03", "konsolidierung": "nein", "pruefidee": "Speichern eines ArticleProductionMaterial ohne MaterialArticleI3D muss durch die DB abgelehnt werden; Speichern ohne Quantity muss möglich sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PROD-07", @@ -1816,7 +1922,8 @@ "tracelinks": "StRS-PROD-05", "konsolidierung": "nein", "pruefidee": "Integrationstest: BL-Methodenaufruf ohne Lizenz-GUID im LicenseManager-Mock muss je nach Methode Exception oder leeres Ergebnis liefern, nie jedoch Produktionsdaten zurückgeben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PROD-08", @@ -1833,7 +1940,8 @@ "tracelinks": "StRS-PROD-02", "konsolidierung": "nein", "pruefidee": "Zwei aufeinanderfolgende RFID-Scans desselben Mitarbeiters ohne OnlyStop müssen dazu führen, dass die erste Zeitbuchung eine EndTime erhält, bevor die zweite mit StartTime=now angelegt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PROJ-01", @@ -1850,7 +1958,8 @@ "tracelinks": "StRS-PROJ-01, SwRS-PROJ-01", "konsolidierung": "nein", "pruefidee": "Zwei Projekte parallel ohne Nummer anlegen und prüfen, dass beide unterschiedliche, aufsteigende Number-Werte erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PROJ-02", @@ -1867,7 +1976,8 @@ "tracelinks": "StRS-PROJ-01, SwRS-PROJ-02", "konsolidierung": "nein", "pruefidee": "SaveOrUpdateTicketProject mit leerer ShortDescription aufrufen und Fehler/Exception erwarten; Projekt ohne Statusangabe anlegen und Status = 1 in der DB prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PROJ-03", @@ -1883,7 +1993,8 @@ "tracelinks": "StRS-PROJ-02, SwRS-PROJ-04", "konsolidierung": "nein", "pruefidee": "Aufgabe löschen, danach GetTicketProjectTasks ohne IncludeInactive aufrufen und prüfen, dass die Aufgabe fehlt; mit IncludeInactive=true muss sie erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PROJ-04", @@ -1900,7 +2011,8 @@ "tracelinks": "StRS-PROJ-02", "konsolidierung": "nein", "pruefidee": "Aufgabenbaum mit drei Ebenen anlegen und GetAllSubTasks auf der Wurzel aufrufen; alle sechs erwarteten Unteraufgaben müssen zurückgegeben werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PROJ-05", @@ -1918,7 +2030,8 @@ "tracelinks": "StRS-PROJ-02, StRS-PROJ-03", "konsolidierung": "nein", "pruefidee": "Abhängigkeit vom Typ FinishToStart zwischen zwei Aufgaben anlegen, abrufen und löschen; Rückgabewerte gegen erwartete Felder prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PROJ-06", @@ -1935,7 +2048,8 @@ "tracelinks": "StRS-PROJ-04", "konsolidierung": "nein", "pruefidee": "Log-Eintrag mit I3D > 0 an SaveTicketProjectLog übergeben und die Fehlermeldung „Log entries may not be modified\" als Ergebnis erwarten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-PROJ-07", @@ -1952,7 +2066,8 @@ "tracelinks": "StRS-PROJ-02, StRS-PROJ-04, SyRS-PROJ-06", "konsolidierung": "nein", "pruefidee": "Aufgabe von 30% auf 60% Fortschritt aktualisieren und prüfen, dass ein Log mit EventType=ProgressHasChanged, OldValue=30, NewValue=60 entsteht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-EDI-01", @@ -1969,7 +2084,8 @@ "tracelinks": "StRS-EDI-01, SwRS-EDI-01", "konsolidierung": "nein", "pruefidee": "Zeitmessung zwischen zwei aufeinanderfolgenden ExecuteServiceAsync-Aufrufen im Log muss ca. 30 Minuten betragen; erster Lauf nach Systemstart ca. nach 1 Minute.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-EDI-02", @@ -1986,7 +2102,8 @@ "tracelinks": "StRS-EDI-05, SwRS-EDI-03", "konsolidierung": "nein", "pruefidee": "Für je eine SupplierEdiConfigurations mit ExportKind=Ftp, Ftps und Sftp wird ein Download gegen einen Testserver ausgeführt und muss erfolgreich Dateien liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-EDI-03", @@ -2002,7 +2119,8 @@ "tracelinks": "StRS-EDI-01, SyRS-EDI-01", "konsolidierung": "nein", "pruefidee": "Eine ZIP-Datei mit drei XML-Dokumenten wird bereitgestellt; nach Verarbeitung müssen drei EDIDistriFile-Objekte mit korrektem UnpackName erzeugt worden sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-EDI-04", @@ -2019,7 +2137,8 @@ "tracelinks": "StRS-EDI-02, SwRS-EDI-02", "konsolidierung": "nein", "pruefidee": "Eine Komsa-Rechnungsdatei (ObjectKind=Invoice) wird bereitgestellt; ApplyDistriToCentron muss isOk=false liefern bzw. keinen EDIInvoiceHead erzeugen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-EDI-05", @@ -2035,7 +2154,8 @@ "tracelinks": "StRS-EDI-04, SwRS-EDI-03", "konsolidierung": "Kandidat: Zusammenführen mit SyRS-EDI-06 (beide Teil derselben Filterkette in Ftp_DownloadAsync)", "pruefidee": "Dieselbe Datei zweimal in der Serverliste simulieren; zweiter Durchlauf darf keinen zweiten ApplyDistriToCentron-Aufruf auslösen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-EDI-06", @@ -2052,7 +2172,8 @@ "tracelinks": "SyRS-EDI-05, StRS-EDI-03", "konsolidierung": "Kandidat: siehe SyRS-EDI-05", "pruefidee": "Für eine Testdatei vier Exception-Log-Einträge mit demselben FileName erzeugen; anschließender Download-Lauf darf diese Datei nicht mehr verarbeiten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-EDI-07", @@ -2069,7 +2190,8 @@ "tracelinks": "StRS-EDI-05, SwRS-EDI-09", "konsolidierung": "nein", "pruefidee": "Ein Passwort über SaveOrUpdateSupplierEdiConfiguration speichern; per Datenbankzugriff prüfen, dass der gespeicherte Wert nicht dem Klartext entspricht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-EDI-08", @@ -2086,7 +2208,8 @@ "tracelinks": "StRS-EDI-03, SwRS-EDI-08", "konsolidierung": "nein", "pruefidee": "Testdaten mit CreatedDate älter als 185 Tage anlegen, EDIDownloadStartAsync zu einer Uhrzeit vor 2 Uhr ausführen; die alten Einträge müssen entfernt sein, jüngere bleiben erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-HD-01", @@ -2102,7 +2225,8 @@ "tracelinks": "StRS-HD-01, SwRS-HD-01", "konsolidierung": "nein", "pruefidee": "Unit-Test mit gemocktem AppRightsBL: WebAccount mit nur SHOWONLYOWNREQUESTS -> Rückgabe OnlyOwn; interner Benutzer mit SHOW_HELPDESK_ONLY_OWN_BRANCH -> Rückgabe OnlyOwnBranch.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-HD-02", @@ -2118,7 +2242,8 @@ "tracelinks": "StRS-HD-01, SwRS-HD-02", "konsolidierung": "nein", "pruefidee": "WebAccount A mit OnlyOwn ruft Helpdesk-I3D eines fremden, nicht verlinkten Kontakts ab -> Result-Error \"Kein Recht für diese Operation vorhanden\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-HD-03", @@ -2134,7 +2259,8 @@ "tracelinks": "StRS-HD-02, SwRS-HD-03", "konsolidierung": "nein", "pruefidee": "Benutzer ohne MATURITY_CHANGE ändert das Fälligkeitsdatum -> Save liefert Fehler \"Kein Recht für Fälligkeitsdatum ändern vorhanden.\"", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-HD-04", @@ -2151,7 +2277,8 @@ "tracelinks": "StRS-HD-02, StRS-HD-03, SwRS-HD-05, SwRS-HD-09", "konsolidierung": "nein", "pruefidee": "Ticket mit Checkliste (CanCloseHelpdesk=false) und einem offenen Punkt -> Close-Aufruf liefert CanClose=false mit Meldungstext, Status bleibt unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-HD-05", @@ -2167,7 +2294,8 @@ "tracelinks": "StRS-HD-02, SwRS-HD-05", "konsolidierung": "nein", "pruefidee": "Versuch, einen Status zu löschen, der von mindestens einem Ticket verwendet wird -> Result.AsError mit Zähl-Meldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-HD-06", @@ -2184,7 +2312,8 @@ "tracelinks": "StRS-HD-01, SwRS-HD-04", "konsolidierung": "nein", "pruefidee": "Benutzer mit dem Recht weist Ticket einem Mitarbeiter außerhalb seiner Abteilungen zu -> Fehlermeldung \"...muss zu einer Ihrer Abteilungen gehören.\"", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-HD-07", @@ -2202,7 +2331,8 @@ "tracelinks": "StRS-HD-04, SwRS-HD-07, SwRS-HD-10", "konsolidierung": "nein", "pruefidee": "Zeit mit IsAssignedToAsset=true löschen -> Fehlermeldung \"...wurde einem Beleg zugewiesen. Löschen ist nicht möglich.\"; Verschieben -> \"...bereits abgerechnet und kann somit nicht mehr verändert und verschoben werden.\"", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-HD-08", @@ -2218,7 +2348,8 @@ "tracelinks": "StRS-HD-03, SwRS-HD-08", "konsolidierung": "nein", "pruefidee": "Benutzer ohne EDIT_CHECKLIST_ITEM_EDITOR versucht Editor-Feld eines Vorlagenpunkts zu ändern -> Fehler \"Sie benötigen das Recht 'Checklisten Bearbeiter ändern'.\"", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-HD-09", @@ -2236,7 +2367,8 @@ "tracelinks": "StRS-HD-05, SwRS-HD-09, SwRS-HD-10", "konsolidierung": "nein", "pruefidee": "Integrationstest: POST v1/HelpdeskTimers/move-timer ohne Token -> 401; mit Token für bereits abgerechnete Zeit -> 400 mit Fehlertext aus CheckTimerCanBeMoved.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-01", @@ -2253,7 +2385,8 @@ "tracelinks": "StRS-SEC-01", "konsolidierung": "nein", "pruefidee": "Direkter API-Aufruf mit bekannter fremder ID (z. B. GetHelpdeskRequest, GetReceipt) durch Benutzer mit einschränkendem Recht muss denselben Fehler liefern wie eine entsprechend gefilterte Listenabfrage.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-02", @@ -2270,7 +2403,8 @@ "tracelinks": "StRS-SEC-01", "konsolidierung": "nein", "pruefidee": "Benutzer mit EDIT_ORDER, aber ohne CHANGE_PURCHASE_PRICE kann Auftrag speichern, aber keinen Einkaufspreis ändern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-03", @@ -2288,7 +2422,8 @@ "tracelinks": "StRS-SEC-02", "konsolidierung": "nein", "pruefidee": "Code-Review von BasicAuthenticator.cs bestätigt fehlendes Salting; Datenbankexport von AppUser.Password zeigt identische Hash-Werte für identische Passwörter unterschiedlicher Benutzer (Beweis für fehlendes Salt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-04", @@ -2304,7 +2439,8 @@ "tracelinks": "StRS-SEC-02, SyRS-SEC-03", "konsolidierung": "nein", "pruefidee": "SystemAuthenticationMethod=ActiveDirectory konfigurieren; Benutzer mit AuthentificationKind=CentronLogin versucht Anmeldung mit lokalem Passwort -> Anmeldung gelingt trotz AD-Pflicht (sofern Passwort korrekt), was der fachlichen Erwartung einer erzwungenen Methode widerspricht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-05", @@ -2321,7 +2457,8 @@ "tracelinks": "StRS-SEC-03", "konsolidierung": "nein", "pruefidee": "Lizenz mit Count=2 und zwei aktiven Tickets; dritter Login-Versuch muss mit `LicenseMaximumReached` fehlschlagen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-06", @@ -2339,7 +2476,8 @@ "tracelinks": "StRS-SEC-03", "konsolidierung": "Kandidat: Uneinheitliches Fehlerverhalten zwischen Exception (ProductionOrderBL) und Result.AsError (BookKeepingExportBL) — siehe auch PROD-Domäne.", "pruefidee": "API-Aufruf gegen einen mit `[AuthorizeCentronHosted]` geschützten Endpunkt ohne CentronInternal-Lizenz -> Autorisierung schlägt auf Policy-Ebene fehl, bevor die Controller-Aktion ausgeführt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-07", @@ -2355,7 +2493,8 @@ "tracelinks": "StRS-SEC-02, SyRS-SEC-03", "konsolidierung": "nein", "pruefidee": "100 aufeinanderfolgende Fehlanmeldungen mit demselben Benutzernamen im Basic-Auth-Pfad simulieren; im Ist-Zustand erfolgt keine Sperre oder Verzögerung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-08", @@ -2373,7 +2512,8 @@ "tracelinks": "StRS-SEC-02", "konsolidierung": "nein", "pruefidee": "Benutzer meldet sich an, führt 35 Minuten lang durchgehend alle 2 Minuten API-Aufrufe durch (ohne erneuten Login) -> Session läuft dennoch nach ~30 Minuten ab, da keine Aktivitäts-basierte Verlängerung erfolgt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SEC-09", @@ -2390,7 +2530,8 @@ "tracelinks": "StRS-SEC-02", "konsolidierung": "nein", "pruefidee": "Ticket A anmelden, Logout aufrufen, danach mit Ticket A einen beliebigen authentifizierten Endpunkt aufrufen -> Zugriff wird verweigert (401), obwohl das ursprüngliche ExpiryDate noch nicht erreicht wäre.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SYS-01", @@ -2408,7 +2549,8 @@ "tracelinks": "StRS-SYS-01, SwRS-SYS-01", "konsolidierung": "nein", "pruefidee": "Eine BL-Methode, die Result.AsWarning(...) zurückgibt, erzeugt über die API eine Response mit StatusCode.Success, aber gefüllter Message.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SYS-02", @@ -2425,7 +2567,8 @@ "tracelinks": "StRS-SYS-01, SwRS-SYS-02", "konsolidierung": "Kandidat: Für eine Web/SaaS-Neuimplementierung entfällt der Direktverbindungs-Pfad (BLLogic) vermutlich vollständig zugunsten eines reinen API-Zugriffs — zu klären mit Fachexperten.", "pruefidee": "Dasselbe WPF-Modul wird einmal mit SqlServer-Verbindung und einmal mit CentronWebServices-Verbindung gestartet; beide Male liefert eine Testabfrage dasselbe Ergebnis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SYS-03", @@ -2442,7 +2585,8 @@ "tracelinks": "StRS-SYS-02, SwRS-SYS-03", "konsolidierung": "Kandidat: Ergänzt die tiefergehende Rechteprüfung im WebServiceBL-Layer (siehe SEC-Domäne) — README.md selbst beschreibt beide Prüfebenen als koexistierend mit unterschiedlichem Einsatzzweck.", "pruefidee": "Ein nicht angemeldeter Client ruft einen mit [AuthorizeUserRight] geschützten Endpunkt auf und erhält 401; ein angemeldeter Client ohne das Recht erhält 403.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SYS-04", @@ -2459,7 +2603,8 @@ "tracelinks": "StRS-SYS-02, SwRS-SYS-04", "konsolidierung": "nein", "pruefidee": "Ein Request an `v1/Customers/...` liefert eine Antwort; die Route-Definition enthält nachweisbar den Versionsparameter.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SYS-05", @@ -2476,7 +2621,8 @@ "tracelinks": "StRS-SYS-01, SwRS-SYS-05", "konsolidierung": "nein", "pruefidee": "Ein API-Request mit Header \"Accept-Language: en-US\" liefert eine Fehlermeldung in Englisch; derselbe Request ohne Header liefert die Meldung auf Deutsch.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SYS-06", @@ -2493,7 +2639,8 @@ "tracelinks": "StRS-SYS-01, SwRS-SYS-06", "konsolidierung": "nein", "pruefidee": "Das Docker-Image docker/c-entron-webservice/Dockerfile wird gebaut und gestartet; ein HTTP-Request an den konfigurierten Port liefert eine gültige API-Antwort.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SYS-07", @@ -2509,7 +2656,8 @@ "tracelinks": "StRS-SYS-02, SwRS-SYS-07", "konsolidierung": "nein", "pruefidee": "Die Pipeline security-pipeline.yaml wird manuell ausgelöst und erzeugt einen CodeQL- sowie Dependency-Scan-Report für den aktuellen master-Stand.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SYS-08", @@ -2526,7 +2674,8 @@ "tracelinks": "StRS-SYS-02, SwRS-SYS-08", "konsolidierung": "nein", "pruefidee": "Zwei aufeinanderfolgende Commits ohne Änderung an version.json erzeugen zwei Builds mit um 1 steigendem letzten Versionsteil.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SYS-09", @@ -2542,7 +2691,8 @@ "tracelinks": "StRS-SYS-02, SwRS-SYS-09", "konsolidierung": "nein", "pruefidee": "Ein DEBUG-Build löst eine E-Mail an eine externe Testadresse aus; es wird verifiziert, dass die tatsächlich versendete Nachricht an test@nexoware.com geht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-SYS-10", @@ -2558,7 +2708,8 @@ "tracelinks": "StRS-SYS-02, SwRS-SYS-10", "konsolidierung": "Kandidat: Überschneidung mit SEC-Domäne (Rechte- vs. Lizenzprüfung sind zwei getrennte, aber verwandte Autorisierungsebenen) — im Zielsystem ggf. zusammenzuführen.", "pruefidee": "Ein Kunde ohne PasswordManager-Lizenz meldet sich an c-entron.NET an; das Passwort-Manager-Modul ist nicht sichtbar/aufrufbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-01", @@ -2576,7 +2727,8 @@ "tracelinks": "SyRS-SALES-01", "konsolidierung": "nein", "pruefidee": "Neues Feld nur in `ReceiptOffer`-Entity und View ergänzen, nicht im `SaveReceiptOfferRepository`; Beleg speichern und neu laden → Feldwert ist nach Neuladen wieder leer/Default.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-02", @@ -2593,7 +2745,8 @@ "tracelinks": "StRS-SALES-01, SyRS-SALES-02", "konsolidierung": "nein", "pruefidee": "Auftragsposition in Lieferschein weiterverarbeiten → erzeugte Lieferschein-Position hat `OriginKind=Order`, `OriginReceiptI3D`=Auftrags-I3D, `OriginReceiptItemI3D`=Auftragspositions-I3D.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-03", @@ -2610,7 +2763,8 @@ "tracelinks": "StRS-SALES-04, SwRS-SALES-01", "konsolidierung": "nein", "pruefidee": "Neue Spalte nur in `AngKopf`, nicht in `AngKopfVersions` anlegen; Versionierung eines Angebots auslösen → INSERT in `AngKopfVersions` schlägt mit Spaltenfehler fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-04", @@ -2627,7 +2781,8 @@ "tracelinks": "StRS-SALES-05", "konsolidierung": "nein", "pruefidee": "Position mit QuantityComplete=10, QuantityProcessed=4 (nach Teillieferung), Basispreis 50 → offener Nettobetrag muss auf Basis von 6 Einheiten berechnet werden, nicht 10.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-05", @@ -2644,7 +2799,8 @@ "tracelinks": "StRS-SALES-05, SwRS-SALES-04", "konsolidierung": "nein", "pruefidee": "Beleg mit Bruttobetrag 100,02 CHF und aktivierter CH-Rundung berechnen → ausgewiesener Betrag rundet auf 100,00 oder 100,05 (nächstes Vielfaches von 0,05).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-06", @@ -2661,7 +2817,8 @@ "tracelinks": "StRS-SALES-06, SyRS-SALES-08", "konsolidierung": "nein", "pruefidee": "Alle State-Zuweisungen im Code (`ReceiptBL.cs`) auf Vollständigkeit prüfen: kein Pfad darf einen vierten Wert oder `null` zuweisen (Feld ist `Not.Nullable`).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-07", @@ -2677,7 +2834,8 @@ "tracelinks": "StRS-SALES-04, SyRS-SALES-04", "konsolidierung": "nein", "pruefidee": "Auftrag, aus dem bereits ein Lieferschein erzeugt wurde, versionieren → Fehlermeldung \"wurde bereits weiterverarbeitet\"; Auftrag mit aktiver Seriennummer versionieren → Fehlermeldung zu Seriennummern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SALES-08", @@ -2695,7 +2853,8 @@ "tracelinks": "SwRS-SALES-02", "konsolidierung": "Kandidat: dasselbe generische ObjectKind+I3D-Referenzmuster wird laut Architekturdoku auch außerhalb von Receipts verwendet (\"used throughout the system\") — bei einer domänenübergreifenden Konsolidierung sollte geprüft werden, ob ein einheitliches Referenz-/Audit-Modul entstehen kann.", "pruefidee": "Auftrag in Lieferschein weiterverarbeiten → `GetForwardedInto`/`GetForwardedFrom` liefern je einen `ReceiptHistoryEntryRaw` mit korrektem `OtherReceiptKind=DeliveryListClass` bzw. `OrderClass`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-BP-01", @@ -2711,7 +2870,8 @@ "tracelinks": "SyRS-BP-02", "konsolidierung": "nein", "pruefidee": "Kunde mit `Name = \"\"` speichern; erwartet: Result.Status=Error mit Meldung \"Bitte geben Sie einen Namen ein\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-BP-02", @@ -2727,7 +2887,8 @@ "tracelinks": "StRS-BP-02, SyRS-BP-03", "konsolidierung": "nein", "pruefidee": "Kunde mit CreditLimit=null (falls über API erzwingbar) speichern; erwartet: DB-Fehler oder Validierungsfehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-BP-03", @@ -2743,7 +2904,8 @@ "tracelinks": "StRS-BP-02, SwRS-BP-02", "konsolidierung": "nein", "pruefidee": "Beleg über Kreditlimit hinaus mit `SaveAlthoughCustomerLimitExceeded=true` speichern; erwartet: Speicherung erfolgreich ohne Blockade.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-BP-04", @@ -2759,7 +2921,8 @@ "tracelinks": "StRS-BP-03, SyRS-BP-04", "konsolidierung": "nein", "pruefidee": "Beleganlage für gesperrten Kunden auch mit `IgnoreCallbacks=true` versuchen; erwartet: weiterhin Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-BP-05", @@ -2775,7 +2938,8 @@ "tracelinks": "StRS-BP-06, SyRS-BP-05", "konsolidierung": "nein", "pruefidee": "Kundenauftrag ohne PaymentConditionI3D speichern; erwartet: Result mit Fehlercode PaymentCondition.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-BP-06", @@ -2792,7 +2956,8 @@ "tracelinks": "StRS-BP-05, SyRS-BP-09", "konsolidierung": "nein", "pruefidee": "GET auf fremde customerId mit Webshop-Token; erwartet lt. Code: HTTP 200 mit leerem CustomerDTO (kein 403) — als potenzielle Inkonsistenz für die Neuimplementierung zu bewerten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-BP-07", @@ -2809,7 +2974,8 @@ "tracelinks": "StRS-BP-05, SyRS-BP-09", "konsolidierung": "nein", "pruefidee": "Code-Review/Routing-Test: kein POST/PUT/DELETE-Route für v1/Customers registriert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-BP-08", @@ -2825,7 +2991,8 @@ "tracelinks": "StRS-BP-04, SyRS-BP-06", "konsolidierung": "nein", "pruefidee": "Sonderpreis mit ObjectKind != CustomerClass speichern; erwartet: Exception \"Not implemented object kind for saving special prices!\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-BP-09", @@ -2841,7 +3008,8 @@ "tracelinks": "StRS-BP-01, SyRS-BP-01, SyRS-BP-07", "konsolidierung": "nein", "pruefidee": "Adresse mit sowohl CustomerI3D als auch SupplierI3D gesetzt speichern; prüfen ob dies durch Anwendungslogik verhindert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-FIN-01", @@ -2857,7 +3025,8 @@ "tracelinks": "SyRS-FIN-02", "konsolidierung": "nein", "pruefidee": "Zwei DTOs mit identischen fünf Schlüsselfeldern aber I3D=0 nacheinander speichern -> zweiter Aufruf erzeugt keinen DB-Datensatz, sondern nur eine Warnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-FIN-02", @@ -2873,7 +3042,8 @@ "tracelinks": "SyRS-FIN-01", "konsolidierung": "nein", "pruefidee": "Transaktion mit einer bereits gebuchten Zuordnung (50 EUR) und Gesamtbetrag 100 EUR: neue Vorschläge dürfen zusammen max. 50 EUR erhalten, die gebuchte Zuordnung bleibt unverändert 50 EUR.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-FIN-03", @@ -2889,7 +3059,8 @@ "tracelinks": "SyRS-FIN-01", "konsolidierung": "nein", "pruefidee": "Abgeschlossene Rechnung (State=Completed) erhält Buchung mit AssignedAmount=-50 -> PaidFC wird reduziert, Log-Eintrag enthält \"(Chargeback)\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-FIN-04", @@ -2905,7 +3076,8 @@ "tracelinks": "SyRS-FIN-04, StRS-FIN-02", "konsolidierung": "nein", "pruefidee": "InvoiceDunning mit DunningLevel=Level3 in Mahnlauf einschließen -> ArgumentOutOfRangeException wird geworfen (Level3 ist Endzustand, kein case vorhanden).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-FIN-05", @@ -2921,7 +3093,8 @@ "tracelinks": "SyRS-FIN-06", "konsolidierung": "Kandidat: Vereinheitlichung mit übrigem Result/Error-Muster des Moduls (aktuell Exception statt Result.AsError, uneinheitlich zu z. B. PaymentsBL.DeleteIncomingPayment).", "pruefidee": "LoggedInUser ohne Recht \"Dunning\" ruft CalculateDunningStatistics auf -> Exception mit Text \"does not have right 'dunning'\" wird geworfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-FIN-06", @@ -2937,7 +3110,8 @@ "tracelinks": "SyRS-FIN-07, StRS-FIN-03", "konsolidierung": "nein", "pruefidee": "blockOnLevel=2, dunningLevel=2 -> Sperre aktiv (Grenzfall); blockOnLevel=0 -> Sperre nie aktiv unabhängig von dunningLevel.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-FIN-07", @@ -2954,7 +3128,8 @@ "tracelinks": "SyRS-FIN-08, StRS-FIN-04", "konsolidierung": "nein", "pruefidee": "PDF-Erzeugung mit format=ZUGFeRD_XInvoice_3_0_1 und leitwegID gesetzt -> AttachZugferdInvoice erhält PdfZugferdVersion.Version2_1 und PdfZugferdConformanceLevel.XRechnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-FIN-08", @@ -2970,7 +3145,8 @@ "tracelinks": "StRS-FIN-05", "konsolidierung": "nein", "pruefidee": "Kunde besitzt Bankverbindung A (IsDefault=true); Bankverbindung B wird mit IsDefault=true gespeichert -> nach dem Speichern hat A IsDefault=false und B IsDefault=true.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-FIN-09", @@ -2986,7 +3162,8 @@ "tracelinks": "SyRS-FIN-09, StRS-FIN-05", "konsolidierung": "nein", "pruefidee": "Neuen Belegtyp mit IReceiptWithMandat-Implementierung einführen (ohne Codeänderung an BankAccountBL) und referenzierte Bankverbindung löschen -> Löschung wird dennoch blockiert, wenn der neue Belegtyp die Verbindung referenziert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PUR-01", @@ -3002,7 +3179,8 @@ "tracelinks": "SyRS-PUR-01, SyRS-PUR-03, StRS-PUR-01", "konsolidierung": "nein", "pruefidee": "Testfall mit `MinimumQuantity=5`, `ArticleStock=2`, `WarehouseIntake=0` muss `ActiveWH=1` liefern; mit `ArticleStock=10` muss der Datensatz durch die WHERE-Klausel entfallen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PUR-02", @@ -3018,7 +3196,8 @@ "tracelinks": "SyRS-PUR-03, StRS-PUR-06", "konsolidierung": "nein", "pruefidee": "Eine Auftragsposition mit `BestellSperre=1` und sonst identischen Bedarfsdaten wie eine ungesperrte Vergleichsposition darf nicht im Ergebnis von `GetOrderSuggestionArticle` erscheinen, die ungesperrte jedoch schon.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PUR-03", @@ -3034,7 +3213,8 @@ "tracelinks": "SyRS-PUR-06, StRS-PUR-03", "konsolidierung": "nein", "pruefidee": "Bei `QuantityProcessed=3` und EDI-Menge `newQuantity=7` muss `QuantityComplete` nach Update `10` betragen, nicht `7`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PUR-04", @@ -3050,7 +3230,8 @@ "tracelinks": "SyRS-PUR-02, StRS-PUR-04", "konsolidierung": "nein", "pruefidee": "Für einen Lieferanten mit unterschiedlichen DB-Werten für `Mindestbestellwert` und `MindestbestellwertDirektlieferung` müssen beide DTO-Felder die jeweils korrekten, unterschiedlichen Werte enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PUR-05", @@ -3066,7 +3247,8 @@ "tracelinks": "SyRS-PUR-04, StRS-PUR-02", "konsolidierung": "nein", "pruefidee": "Aufruf ohne Branch-Lizenz mit gültigen `SupplierI3Ds` muss eine Liste liefern, in der jeder Eintrag `BranchI3D == 0` besitzt und `CustomerNumberAtSupplier` aus `AccountSupplier.OwnCustomerNumber` stammt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PUR-06", @@ -3082,7 +3264,8 @@ "tracelinks": "SyRS-PUR-07, StRS-PUR-05", "konsolidierung": "nein", "pruefidee": "Aufruf mit einer bekannten, gültigen EAN muss ein `Product` mit `Ean == eanCode` liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PUR-07", @@ -3099,7 +3282,8 @@ "tracelinks": "SyRS-PUR-05, StRS-PUR-03", "konsolidierung": "nein", "pruefidee": "Beim gleichzeitigen Öffnen derselben Bestellung durch zwei Benutzer darf nur der erste einen `ReceiptSupplierOrderLock`-Datensatz mit seinem `Lockuser` erhalten; der zweite muss eine Sperrmeldung erhalten (konkrete Prüf-/BL-Methode für die Sperrdurchsetzung wurde im gesichteten Code nicht lokalisiert).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PUR-08", @@ -3115,7 +3299,8 @@ "tracelinks": "SyRS-PUR-09, StRS-PUR-01", "konsolidierung": "nein", "pruefidee": "Setzen von `BVLAlwaysSortItems = true` über `UpdateSettings` und anschließendes `GetSettings` muss denselben Wert zurückliefern (Round-Trip-Test); die tatsächliche Sortierwirkung in der UI ist nicht Teil dieses Nachweises.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PUR-09", @@ -3132,7 +3317,8 @@ "tracelinks": "SyRS-PUR-06, StRS-PUR-03", "konsolidierung": "nein", "pruefidee": "`LoadEDIReceiptItems` mit `filter.ObjectKind = CentronObjectKindNumeric.SupplierOrder` muss unabhängig vom ursprünglichen Lieferantenformat (ALSO, Komsa, …) ein einheitliches `IEDIReceiptItems`-Ergebnis liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ART-01", @@ -3148,7 +3334,8 @@ "tracelinks": "SyRS-ART-01", "konsolidierung": "nein", "pruefidee": "Artikelcode mit 61 Zeichen speichern; Speicherung schlägt mit Längenfehler fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ART-02", @@ -3164,7 +3351,8 @@ "tracelinks": "SyRS-ART-02", "konsolidierung": "nein", "pruefidee": "SaveArticle mit leerem ArticleCode aufrufen; Result.IsError==true mit Text \"Bitte geben Sie einen Artikelcode ein.\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ART-03", @@ -3181,7 +3369,8 @@ "tracelinks": "SyRS-ART-03", "konsolidierung": "nein", "pruefidee": "EAN-13 mit manipulierter letzter Ziffer eingeben; Validierung liefert Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ART-04", @@ -3197,7 +3386,8 @@ "tracelinks": "SyRS-ART-01", "konsolidierung": "nein", "pruefidee": "Neuen Artikel ohne ArticleCode bei aktivierter Einstellung speichern; System vergibt automatisch einen eindeutigen Code.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ART-05", @@ -3213,7 +3403,8 @@ "tracelinks": "StRS-ART-02, SyRS-ART-04, SwRS-ART-06", "konsolidierung": "nein", "pruefidee": "UpdateArticleStock direkt (unter Umgehung von ReceiptArticleBookingBL) mit einem Delta aufrufen, das den Bestand negativ werden lässt; Aufruf wird ohne Fehler ausgeführt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ART-06", @@ -3229,7 +3420,8 @@ "tracelinks": "StRS-ART-06, SyRS-ART-06, SwRS-ART-05", "konsolidierung": "nein", "pruefidee": "Buchung als Benutzer ohne RIGHT_NEGATIVBUCHUNG auslösen, die Bestand negativ werden ließe; Anmeldedialog erscheint, Buchung wird erst nach gültiger Fremdauthentifizierung fortgesetzt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ART-07", @@ -3245,7 +3437,8 @@ "tracelinks": "StRS-ART-03, SyRS-ART-05", "konsolidierung": "nein", "pruefidee": "StockInOrder-Property im Code manuell setzen und Artikel speichern; nach erneutem Laden aus der DB ist der ursprüngliche, DB-berechnete Wert unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ART-08", @@ -3261,7 +3454,8 @@ "tracelinks": "SyRS-ART-08", "konsolidierung": "nein", "pruefidee": "Abfrage mit ungültigem API-Key durchführen; ITscopeException mit Meldung \"API key invalid\" wird geworfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ART-09", @@ -3277,7 +3471,8 @@ "tracelinks": "SyRS-ART-08", "konsolidierung": "nein", "pruefidee": "ITscope-Ergebnis mit ConditionId!=1 verarbeiten; Artikel erscheint nicht im SearchedArticle-Ergebnis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-ART-10", @@ -3294,7 +3489,8 @@ "tracelinks": "SyRS-ART-09", "konsolidierung": "nein", "pruefidee": "Icecat-Import für einen Artikel ohne High-Res-Bild auslösen; Low- oder Thumbnail-Bild wird stattdessen übernommen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PROD-01", @@ -3310,7 +3506,8 @@ "tracelinks": "StRS-PROD-05, SyRS-PROD-07", "konsolidierung": "nein", "pruefidee": "Unit-Test ruft SaveProductionOrder mit einem LicenseManager-Mock ohne ProductionManagement-GUID auf und erwartet eine Exception mit exakt diesem Meldungstext.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PROD-02", @@ -3326,7 +3523,8 @@ "tracelinks": "SyRS-PROD-03, StRS-PROD-02", "konsolidierung": "nein", "pruefidee": "Deserialisierung eines DataContract-Objekts mit State=3 muss fehlschlagen bzw. den Wert nicht als gültiges EnumMember erkennen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PROD-03", @@ -3342,7 +3540,8 @@ "tracelinks": "SyRS-PROD-02", "konsolidierung": "nein", "pruefidee": "Schema-Test: SQL-Skript-Generierung aus dem Mapping muss für die genannten Spalten NOT NULL erzeugen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PROD-04", @@ -3359,7 +3558,8 @@ "tracelinks": "SyRS-PROD-05, StRS-PROD-04", "konsolidierung": "nein", "pruefidee": "Für jeden der 26 Enum-Werte existiert mindestens ein Codepfad, der ihn tatsächlich verwendet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PROD-05", @@ -3375,7 +3575,8 @@ "tracelinks": "SyRS-PROD-06, StRS-PROD-03", "konsolidierung": "nein", "pruefidee": "Speichern eines ArticleProductionMaterial mit Quantity=1234.567 muss auf 1234.57 oder einen Rundungsfehler/Overflow abgebildet werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PROD-06", @@ -3391,7 +3592,8 @@ "tracelinks": "SyRS-PROD-08", "konsolidierung": "nein", "pruefidee": "Zwei aufeinanderfolgende Aufrufe von SetArticleProductionOrderStepItemTime für denselben Mitarbeiter ohne zwischenzeitlichen Stop müssen in der DB genau eine Zeile mit EndTime=null hinterlassen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PROD-07", @@ -3407,7 +3609,8 @@ "tracelinks": "StRS-PROD-02", "konsolidierung": "nein", "pruefidee": "Filterung mit SearchText=\"Fräsen\" muss sowohl Positionen mit \"Fräsen\" im Comment als auch im Description-Feld zurückliefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PROJ-01", @@ -3423,7 +3626,8 @@ "tracelinks": "StRS-PROJ-01, SyRS-PROJ-02", "konsolidierung": "nein", "pruefidee": "Unit-Test: SaveOrUpdateTicketProject(null) und SaveOrUpdateTicketProject(mit ShortDescription=\"\") müssen jeweils eine Guard-Exception werfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PROJ-02", @@ -3439,7 +3643,8 @@ "tracelinks": "StRS-PROJ-01, SyRS-PROJ-02", "konsolidierung": "nein", "pruefidee": "Projekt mit PlannedStartDate=null speichern und prüfen, dass das gespeicherte PlannedStartDate dem aktuellen Datum (00:00 Uhr) entspricht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PROJ-03", @@ -3455,7 +3660,8 @@ "tracelinks": "StRS-PROJ-01", "konsolidierung": "nein", "pruefidee": "Je ein Projekt mit IsTemplate=true und IsTemplate=false anlegen; GetTicketProjects ohne IsTemplate-Filter aufrufen und prüfen, dass nur das Nicht-Vorlagen-Projekt zurückkommt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PROJ-04", @@ -3471,7 +3677,8 @@ "tracelinks": "SyRS-PROJ-03", "konsolidierung": "nein", "pruefidee": "Aufgabe löschen und direkt per SQL prüfen, dass der Datensatz weiterhin existiert mit IsActive=0.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PROJ-05", @@ -3487,7 +3694,8 @@ "tracelinks": "StRS-PROJ-04, SyRS-PROJ-06, SyRS-PROJ-07", "konsolidierung": "nein", "pruefidee": "Aufgabe mit geändertem StartDate (EndDate unverändert) speichern und prüfen, dass genau ein Log mit EventType=OnlyStartDateHasChanged entsteht, kein DateHasChanged.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PROJ-06", @@ -3503,7 +3711,8 @@ "tracelinks": "StRS-PROJ-04", "konsolidierung": "nein", "pruefidee": "Zwei Mitarbeitern zugeordnete, unterschiedlich geänderte Aufgaben erzeugen; prüfen, dass zwei separate E-Mails mit jeweils nur den für den Empfänger hervorgehobenen Zeilen versendet werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-PROJ-07", @@ -3520,7 +3729,8 @@ "tracelinks": "StRS-PROJ-01", "konsolidierung": "Kandidat: Legacy-Feature ggf. nicht in Web/SaaS-Reimplementierung übernehmen.", "pruefidee": "Code-Referenzsuche nach \"ProjectBL\" außerhalb der eigenen Datei/des DI-Containers durchführen; keine Aufrufer über Controller/Webservice feststellbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-EDI-01", @@ -3536,7 +3746,8 @@ "tracelinks": "StRS-EDI-01, StRS-EDI-02, SyRS-EDI-01", "konsolidierung": "nein", "pruefidee": "Aufruf mit EdiDataType=999 (ungültig) muss Result.AsError liefern statt einer Exception oder eines Null-Dokuments.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-EDI-02", @@ -3552,7 +3763,8 @@ "tracelinks": "StRS-EDI-01, SyRS-EDI-04", "konsolidierung": "nein", "pruefidee": "Verarbeitung einer Datei mit DeleteAfterUpload=false darf die Quelldatei nicht löschen; mit DeleteAfterUpload=true und deal==null muss sie entfernt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-EDI-03", @@ -3568,7 +3780,8 @@ "tracelinks": "SyRS-EDI-02, SyRS-EDI-05, SyRS-EDI-06", "konsolidierung": "Kandidat: SwRS-EDI-03 könnte mit SyRS-EDI-05/06 zu einer gemeinsamen Anforderung \"Filterkette\" konsolidiert werden.", "pruefidee": "Eine Datei, die die Maske nicht erfüllt, darf trotz Nicht-Blacklist und Nicht-Duplikat nicht heruntergeladen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-EDI-04", @@ -3584,7 +3797,8 @@ "tracelinks": "SyRS-EDI-03", "konsolidierung": "nein", "pruefidee": "ZIP mit zwei Einträgen liefert zwei EDIDistriFile-Objekte mit korrektem UnpackName je Eintrag und identischem DistriName.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-EDI-05", @@ -3601,7 +3815,8 @@ "tracelinks": "StRS-EDI-02, SyRS-EDI-04", "konsolidierung": "nein", "pruefidee": "Eine Datei im \"neuen\" Herweck-Format, das vom ersten Parser als ungültig erkannt wird, muss dennoch über den Fallback korrekt importiert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-EDI-06", @@ -3617,7 +3832,8 @@ "tracelinks": "StRS-EDI-02, SyRS-EDI-04", "konsolidierung": "nein", "pruefidee": "Eine ALSO-CH-Rechnung mit Gebührencode \"G1\" muss die Bezeichnung \"Sammelgebühr\" tragen; ein unbekannter Code muss definiert behandelt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-EDI-07", @@ -3635,7 +3851,8 @@ "tracelinks": "StRS-EDI-03, SyRS-EDI-06, SyRS-EDI-08", "konsolidierung": "nein", "pruefidee": "Ein simulierter Verzeichnislistenfehler (FTP) muss zu genau einem EDIManagementLog-Eintrag mit State=Exception (bzw. TestException im Testmodus) und nichtleerem Comment führen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-EDI-08", @@ -3651,7 +3868,8 @@ "tracelinks": "StRS-EDI-03, SyRS-EDI-08", "konsolidierung": "nein", "pruefidee": "DeleteEDILog mit EDIManagementLogFilter { EndDate = null oder DateTime.Today } aufrufen; danach prüfen, ob die EDIManagementLog-Tabelle vollständig geleert wurde.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-EDI-09", @@ -3667,7 +3885,8 @@ "tracelinks": "SyRS-EDI-07, StRS-EDI-05", "konsolidierung": "nein", "pruefidee": "Passwort über SaveOrUpdateSupplierEdiConfiguration speichern und den Rohwert in der Datenbanktabelle prüfen; er darf nicht dem eingegebenen Klartext entsprechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-EDI-10", @@ -3685,7 +3904,8 @@ "tracelinks": "StRS-EDI-01, StRS-EDI-03", "konsolidierung": "nein", "pruefidee": "Ein importiertes Dokument mit abweichender Menge/Preis gegenüber der Ursprungsbestellung muss NeedsUserValidation=true erhalten und in der entsprechenden Prüfliste erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-HD-01", @@ -3701,7 +3921,8 @@ "tracelinks": "SyRS-HD-01", "konsolidierung": "nein", "pruefidee": "Interner Benutzer besitzt SHOW_HELPDESK + SHOW_HELPDESK_ONLY_OWN + SHOW_HELPDESK_ONLY_OWN_BRANCH gleichzeitig -> Rückgabe ist OnlyOwn (erste Prüfung gewinnt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-HD-02", @@ -3717,7 +3938,8 @@ "tracelinks": "SyRS-HD-02", "konsolidierung": "nein", "pruefidee": "Multi-WebAccount-Kontakt, dessen Link IsActive=false ist, fordert Ticket dieses Kontakts an -> Zugriff wird trotz historischer Verknüpfung verweigert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-HD-03", @@ -3733,7 +3955,8 @@ "tracelinks": "SyRS-HD-03", "konsolidierung": "nein", "pruefidee": "Benutzer mit EDIT_HELPDESK aber ohne CLOSE_REQUEST setzt Status auf den konfigurierten Abschlussstatus -> Fehler \"Sie haben nicht das Recht 'Helpdesk abschließen'.\"", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-HD-04", @@ -3749,7 +3972,8 @@ "tracelinks": "SyRS-HD-06", "konsolidierung": "nein", "pruefidee": "Ticket speichern ohne Änderung von ResponsiblePerson -> keine Abteilungsprüfung ausgelöst, auch wenn aktuelle ResponsiblePerson abteilungsfremd wäre.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-HD-05", @@ -3766,7 +3990,8 @@ "tracelinks": "SyRS-HD-04, SwRS-HD-09", "konsolidierung": "nein", "pruefidee": "Ticket mit zwei blockierenden Checklisten, beide mit offenen Punkten -> Messages enthält zwei Einträge, CanClose=false.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-HD-06", @@ -3782,7 +4007,8 @@ "tracelinks": "SyRS-HD-07", "konsolidierung": "nein", "pruefidee": "Benutzer B mit OWN_TIME_EDIT bearbeitet eine von Benutzer A erstellte Zeit ohne EmployeeArticle-Zuordnung -> ResultException \"Nutzer hat keine Rechte um Zeiten anderer Mitarbeiter zu bearbeiten\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-HD-07", @@ -3798,7 +4024,8 @@ "tracelinks": "SyRS-HD-07", "konsolidierung": "nein", "pruefidee": "Benutzer ohne DELETE_HELPDESK_TIMER versucht Löschung -> sofortiger Result-Error, ohne dass IsAssignedToAsset überhaupt geprüft wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-HD-08", @@ -3815,7 +4042,8 @@ "tracelinks": "SyRS-HD-08", "konsolidierung": "nein", "pruefidee": "Zugewiesener Editor ändert nur State eines Vorlagenpunkts -> erlaubt; ändert zusätzlich Caption -> Fehler \"...kann hier nur von einem Administrator geändert werden.\"", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-HD-09", @@ -3831,7 +4059,8 @@ "tracelinks": "StRS-HD-05, SyRS-HD-09, SwRS-HD-05", "konsolidierung": "nein", "pruefidee": "Integrationstest: Request ohne Body gegen ein durch Checklisten blockiertes Ticket -> 400 mit Fehlertext aus CanHelpdeskClose bzw. Save().", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-HD-10", @@ -3850,7 +4079,8 @@ "tracelinks": "StRS-HD-04, StRS-HD-05, SyRS-HD-07, SyRS-HD-09", "konsolidierung": "Kandidat: mit SwRS-HD-06 zusammenführen, falls MOVE_HELPDESK_TIMER-Prüfung an anderer Stelle noch gefunden wird.", "pruefidee": "Benutzer mit EDIT_TIME aber ohne MOVE_HELPDESK_TIMER verschiebt eine nicht abgerechnete Zeit -> aktueller Code lässt dies zu (Diskrepanz-Nachweis).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SEC-01", @@ -3867,7 +4097,8 @@ "tracelinks": "StRS-SEC-01, SyRS-SEC-01", "konsolidierung": "Kandidat: HasUserRight-Erweiterungsmethode auf currentUser (in Attributen) vs. explizite AppRightsBL-Instanziierung (in BL-Klassen) — zwei Aufrufpfade zum selben fachlichen Ziel, in Zielarchitektur zu vereinheitlichen.", "pruefidee": "Code-Review bestätigt, dass sowohl BL-seitige als auch Controller-seitige Rechteprüfungen letztlich auf AppRightsBL bzw. dieselbe zugrundeliegende Datenquelle zurückgreifen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SEC-02", @@ -3884,7 +4115,8 @@ "tracelinks": "StRS-SEC-02, SyRS-SEC-04", "konsolidierung": "nein", "pruefidee": "Neue Authenticator-Implementierung (z. B. SAML) als zusätzliche IAuthenticator-Klasse hinzufügen und in AuthenticatorFactory registrieren, ohne BasicAuthenticator/ActiveDirectoryAuthenticator zu verändern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SEC-03", @@ -3900,7 +4132,8 @@ "tracelinks": "StRS-SEC-03, SyRS-SEC-05", "konsolidierung": "nein", "pruefidee": "Datenbank auf andere Maschine kopieren (andere MachineName/DatabaseOwnerSid) und Lizenzprüfung durchführen -> Lizenzprüfung schlägt fehl bzw. erfordert Neuvalidierung gegen den Lizenzserver.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SEC-04", @@ -3917,7 +4150,8 @@ "tracelinks": "StRS-SEC-03, SwRS-SEC-03", "konsolidierung": "nein", "pruefidee": "Benutzer mit gültiger Lizenz, aber ohne RequiredRight für eine bestimmte ApplicationKind -> Login wird bereits in ValidateRights abgelehnt, bevor die Lizenzprüfung überhaupt erreicht wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SEC-05", @@ -3933,7 +4167,8 @@ "tracelinks": "StRS-SEC-04, SyRS-SEC-01", "konsolidierung": "nein", "pruefidee": "Request ohne Authentifizierung an geschützten Endpunkt -> 401; Request mit gültigem, aber unzureichend berechtigtem Token -> 403.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SEC-06", @@ -3950,7 +4185,8 @@ "tracelinks": "StRS-SEC-04, SyRS-SALES-07", "konsolidierung": "Kandidat: Direkter Zusammenhang mit SyRS-SALES-07 (fehlendes [Authorize] auf OffersController/ContractsController) — dieselbe strukturelle Ursache.", "pruefidee": "Neuen Controller ohne jegliches Autorisierungsattribut hinzufügen -> Endpunkt ist ohne Anmeldung erreichbar (verifiziert die \"secure by default\"-Lücke).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SYS-01", @@ -3967,7 +4203,8 @@ "tracelinks": "SyRS-SYS-01", "konsolidierung": "nein", "pruefidee": "Ein Codereview einer neuen BL-Methode prüft, dass ausschließlich Result.AsSuccess/AsError/AsWarning/FromException verwendet werden und kein direkter Konstruktoraufruf vorkommt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SYS-02", @@ -3984,7 +4221,8 @@ "tracelinks": "SyRS-SYS-02", "konsolidierung": "nein", "pruefidee": "Eine neue Klasse `BLThingyLogic` und `IThingyLogic` werden angelegt; ohne weitere Registrierung liefert `ClassContainer.Instance.GetInstance()` eine funktionsfähige Instanz.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SYS-03", @@ -4001,7 +4239,8 @@ "tracelinks": "SyRS-SYS-03", "konsolidierung": "Kandidat: Konzeptionelle Überschneidung mit rechteprüfenden Codepfaden in WebServiceBL-Klassen (siehe SEC-Domäne) — zwei Durchsetzungsorte für dieselbe fachliche Regelklasse.", "pruefidee": "Unit-/Integrationstest ruft `UserRightAuthorizationFilter.OnAuthorization` mit einem Kontext ohne angemeldeten Benutzer auf und prüft, dass `context.Result` vom Typ `UnauthorizedResult` ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SYS-04", @@ -4017,7 +4256,8 @@ "tracelinks": "SyRS-SYS-04", "konsolidierung": "nein", "pruefidee": "Für jede im Ordner v1/ vorhandene Domäne existiert mindestens ein Controller mit passendem Routen-Präfix `v{version:apiVersion}/{Domäne}`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SYS-05", @@ -4033,7 +4273,8 @@ "tracelinks": "SyRS-SYS-05", "konsolidierung": "nein", "pruefidee": "Ein XAML-Audit mit dem in der Dokumentation angegebenen Suchmuster `(Text|Label|Caption|ToolTip|Content|Header)=\"[^{]*?\"` findet keine verbleibenden hartkodierten deutschen Strings in einer Stichprobe von XAML-Dateien.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SYS-06", @@ -4050,7 +4291,8 @@ "tracelinks": "SyRS-SYS-06", "konsolidierung": "nein", "pruefidee": "`docker build -f docker/c-entron-webservice/Dockerfile .` schlägt nicht fehl und erzeugt ein startfähiges Image.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SYS-07", @@ -4066,7 +4308,8 @@ "tracelinks": "SyRS-SYS-07", "konsolidierung": "nein", "pruefidee": "Nach einem Pipelinelauf ist im Azure-DevOps-Projekt unter \"Advanced Security\" ein Scan-Ergebnis für den entsprechenden Commit vorhanden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SYS-08", @@ -4083,7 +4326,8 @@ "tracelinks": "SyRS-SYS-08", "konsolidierung": "nein", "pruefidee": "Zwei Testbuilds ohne Änderung an version.json, aber mit einem zusätzlichen Commit dazwischen, ergeben zwei unterschiedliche, um 1 steigende letzte Versionsteile.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SYS-09", @@ -4099,7 +4343,8 @@ "tracelinks": "SyRS-SYS-09", "konsolidierung": "nein", "pruefidee": "Code-Review von DeveloperSecurity.cs bestätigt Existenz und Wirkweise der Eigenschaft `AllowSendingEmailToExternalAddresses` sowie die Domänenprüfung auf \"nexoware.com\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-SYS-10", @@ -4115,6 +4360,7 @@ "tracelinks": "SyRS-SYS-10", "konsolidierung": "Kandidat: siehe SEC-Domäne für tiefere Verifikation der Lizenz-/Rechteprüfungs-Trennung.", "pruefidee": "Für ein bekanntes Feature (z. B. Password Manager) wird verifiziert, dass die UI-Sichtbarkeit direkt von `LicenseManager.Instance.HasLicense(LicenseGuids.PasswordManager)` abhängt.", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182941_v3.4.0-5b99/_meta/anforderungen.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182941_v3.4.0-5b99/_meta/anforderungen.md index 30fa6bb2..1be6fd46 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182941_v3.4.0-5b99/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182941_v3.4.0-5b99/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -32,6 +34,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 2,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 234 (95,1 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -49,5 +55,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **verletzt** – 1 von 85 ungedeckt: SyRS-SYS-02 | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 246 von 246 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182942_v3.4.0-176f/Protokoll.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182942_v3.4.0-176f/Protokoll.md index 00764dcb..43b4835c 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182942_v3.4.0-176f/Protokoll.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182942_v3.4.0-176f/Protokoll.md @@ -97,6 +97,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -127,6 +129,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 215 (90,3 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -144,6 +150,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (112 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 238 von 238 mit Tracelinks (100,0 %) | ## V1b-Block F–J, fünf Messpunkte diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182942_v3.4.0-176f/_meta/anforderungen.json b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182942_v3.4.0-176f/_meta/anforderungen.json index c02107f2..6989bd50 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182942_v3.4.0-176f/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182942_v3.4.0-176f/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-001, SyRS-006, SwRS-001, SwRS-002", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Recht X versucht Aktion X auszuführen → Aktion wird mit Fehlermeldung \"Benutzer hat nicht die passenden Rechte.\" abgelehnt (vgl. AppRightsBL.HasUserRightWithDefaultMessage).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -32,7 +33,8 @@ "tracelinks": "SyRS-006, SwRS-014", "konsolidierung": "nein", "pruefidee": "Benutzer mit Recht \"nur eigene Filiale\" sucht Aufträge → Ergebnismenge enthält ausschließlich Aufträge mit BranchI3D = eigene Filiale.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -50,7 +52,8 @@ "tracelinks": "SyRS-001, SwRS-003, SwRS-006, SwRS-007, SwRS-008", "konsolidierung": "nein", "pruefidee": "Für jede der drei Methoden: gültige Anmeldedaten führen zu erfolgreicher Session, ungültige zu Ablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -67,7 +70,8 @@ "tracelinks": "SyRS-003, SyRS-004, SwRS-009, SwRS-010", "konsolidierung": "nein", "pruefidee": "Benutzer mit aktivierter 2FA meldet sich an → wird nach Passwort-OK zur zweiten Faktorprüfung aufgefordert; Abschluss nur nach Erfolg dieser Prüfung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -83,7 +87,8 @@ "tracelinks": "SyRS-002, SwRS-004, SwRS-005", "konsolidierung": "nein", "pruefidee": "Mitarbeiter mit Austrittsdatum in der Vergangenheit versucht Login → wird abgelehnt, obwohl `IsAccountDisabled = false`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -100,7 +105,8 @@ "tracelinks": "SwRS-013", "konsolidierung": "nein", "pruefidee": "Admin fügt Benutzer zu Gruppe hinzu → `GetAllAppRightLogs()` liefert neuen Eintrag mit Kind=AddUserToGroup, korrektem CreatedByI3D und Zeitstempel.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -117,7 +123,8 @@ "tracelinks": "SyRS-011, SyRS-016, SwRS-025", "konsolidierung": "nein", "pruefidee": "Filiale A hat Standardlager L1; ein dort erfasster Wareneingang erhöht den Bestand in L1, nicht in einem anderen Lager.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -134,7 +141,8 @@ "tracelinks": "SyRS-013, SwRS-019, SwRS-020", "konsolidierung": "nein", "pruefidee": "Lieferschein über 5 Stück eines Artikels speichern → Lagerbestand sinkt um 5; identischer Auftrag verändert den Bestand nicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -151,7 +159,8 @@ "tracelinks": "SyRS-014, SwRS-021", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Recht bucht Menge, die Bestand negativ werden ließe, für einen Lieferschein → Sperre mit Aufforderung zur Zweitanmeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -168,7 +177,8 @@ "tracelinks": "SyRS-012, SwRS-022, SwRS-023", "konsolidierung": "nein", "pruefidee": "Artikel mit ScanBarcode=true wird gebucht → Lagerbestand (Menge) bleibt unverändert, stattdessen ändert sich der BarcodeState der betroffenen Seriennummer.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -184,7 +194,8 @@ "tracelinks": "SyRS-018, SwRS-028", "konsolidierung": "nein", "pruefidee": "Simulierter Fehler während CloseStorages (z. B. DB-Verbindungsabbruch) → Bestand nach Rollback identisch zum Stand vor Inventurabschluss.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -200,7 +211,8 @@ "tracelinks": "SwRS-024", "konsolidierung": "nein", "pruefidee": "Zwei identische Buchungsvorgänge für denselben Artikel/Lieferantenbeleg innerhalb von 2 Sekunden auslösen → zweiter Vorgang wird mit Fehlermeldung abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -217,7 +229,8 @@ "tracelinks": "SyRS-021, SwRS-027, SwRS-028", "konsolidierung": "nein", "pruefidee": "Kunde ruft Signaturlink auf, zeichnet Unterschrift, sendet ab → SharedDocument.IsSigned=true, SignedDate gesetzt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -234,7 +247,8 @@ "tracelinks": "SyRS-021, SwRS-029", "konsolidierung": "nein", "pruefidee": "Interner Freigeber lehnt mit Kommentar ab → State wechselt zu EmployeeAcceptanceDeclined, kein Kundenversand.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-015", @@ -250,7 +264,8 @@ "tracelinks": "SyRS-026, SwRS-032", "konsolidierung": "Kandidat: StRS-013 (Teil desselben Ende-zu-Ende-Ablaufs)", "pruefidee": "Angebot signieren → resultierender Auftrag referenziert dieselben Positionen/Preise wie das Angebot.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-016", @@ -266,7 +281,8 @@ "tracelinks": "SyRS-022, SwRS-027", "konsolidierung": "nein", "pruefidee": "Signaturlink nach Ablaufdatum aufrufen → Zugriff verweigert. Bereits signiertes Dokument erneut aufrufen → Zugriff verweigert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-017", @@ -283,7 +299,8 @@ "tracelinks": "SyRS-021, SwRS-036", "konsolidierung": "nein", "pruefidee": "Mitarbeiter ohne jegliche Sonderrolle löscht einen fremden Signaturvorgang eines anderen Mitarbeiters/einer anderen Filiale → Löschung gelingt (sollte laut Erwartungshaltung verweigert werden).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-018", @@ -299,7 +316,8 @@ "tracelinks": "SyRS-030, SwRS-037", "konsolidierung": "nein", "pruefidee": "Zeiteintrag mit manipuliertem Timer-Wert, aber korrektem Start/Stop speichern → gespeicherter Wert entspricht Stop-Start, nicht dem manipulierten Wert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-019", @@ -315,7 +333,8 @@ "tracelinks": "SyRS-034, SwRS-039", "konsolidierung": "nein", "pruefidee": "Zeiteintrag mit Calculable=false, Einstellung NoBilling → Zeit erscheint nicht auf dem generierten Beleg.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-020", @@ -331,7 +350,8 @@ "tracelinks": "SyRS-031, SwRS-038", "konsolidierung": "nein", "pruefidee": "Zeiteintrag mit IsAssignedToInvoice=true bearbeiten → Fehlermeldung, keine Änderung gespeichert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-021", @@ -348,7 +368,8 @@ "tracelinks": "SyRS-032, SwRS-040", "konsolidierung": "nein", "pruefidee": "Mitarbeiter mit OWN_TIME_EDIT bearbeitet fremden Zeiteintrag → Ablehnung mit Rechtefehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-022", @@ -364,7 +385,8 @@ "tracelinks": "SyRS-035", "konsolidierung": "nein", "pruefidee": "Letzte offene Zeit eines Tickets abrechnen, TicketCloseDialogOptions=CloseAlways → Ticket wird automatisch geschlossen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-023", @@ -380,7 +402,8 @@ "tracelinks": "SyRS-030", "konsolidierung": "nein", "pruefidee": "Zwei überlappende Zeiteinträge für denselben Mitarbeiter anlegen → prüfen, ob beide anstandslos gespeichert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-024", @@ -396,7 +419,8 @@ "tracelinks": "SyRS-038, SyRS-039, SwRS-046", "konsolidierung": "nein", "pruefidee": "Beleg erstellen, der das Kreditlimit überschreitet → Dialog erscheint; nach Bestätigung wird gespeichert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-025", @@ -412,7 +436,8 @@ "tracelinks": "SyRS-040, SwRS-047", "konsolidierung": "nein", "pruefidee": "Artikel mit sowohl Vertragspreis als auch Kundensonderpreis auf Beleg hinzufügen → Vertragspreis wird angewendet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-026", @@ -429,7 +454,8 @@ "tracelinks": "SyRS-041", "konsolidierung": "nein", "pruefidee": "Kunde ohne eigene Zahlungsbedingung für Rechnungen → neue Rechnung erhält die systemweite Standard-Zahlungsbedingung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-027", @@ -446,7 +472,8 @@ "tracelinks": "SyRS-042", "konsolidierung": "nein", "pruefidee": "Kunde mit Locked=true suchen → erscheint nicht im Standard-Suchergebnis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-028", @@ -462,7 +489,8 @@ "tracelinks": "SyRS-043", "konsolidierung": "nein", "pruefidee": "Benutzer ohne EDIT_CUSTOMER_INFO ändert InfoOffer und speichert → Feld bleibt beim erneuten Laden unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-029", @@ -479,7 +507,8 @@ "tracelinks": "SyRS-045, SyRS-046, SwRS-050, SwRS-051", "konsolidierung": "nein", "pruefidee": "Löschantrag für einen Kunden über die DSGVO-Funktion ausführen → NotImplementedException statt Anonymisierung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-030", @@ -495,7 +524,8 @@ "tracelinks": "SyRS-047", "konsolidierung": "nein", "pruefidee": "Kunde ohne PLZ exportieren → Result.Error statt XML-Export.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-031", @@ -511,7 +541,8 @@ "tracelinks": "SyRS-048, SwRS-053", "konsolidierung": "Kandidat: StRS-008 (gemeinsames Belegmodell für Bestand)", "pruefidee": "ReceiptSupplierOrder erbt von ReceiptBase und nutzt SaveAssetVersion wie Verkaufsbelege.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-032", @@ -528,7 +559,8 @@ "tracelinks": "SyRS-049", "konsolidierung": "nein", "pruefidee": "Versuch, eine Bestellung direkt in eine Lieferantenrechnung zu überführen → Ablehnung durch ValidateReceiptForwarding.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-033", @@ -545,7 +577,8 @@ "tracelinks": "SyRS-052, SwRS-055", "konsolidierung": "nein", "pruefidee": "Bestellung an OpenTrans-2.1-Lieferanten senden → gültiges ORDER-XML wird erzeugt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-034", @@ -561,7 +594,8 @@ "tracelinks": "SyRS-052", "konsolidierung": "nein", "pruefidee": "EDI-Lieferavis mit abweichender Positions-ID, aber übereinstimmendem EAN-Code → korrekte Zuordnung zur Bestellposition.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-035", @@ -577,7 +611,8 @@ "tracelinks": "SyRS-056", "konsolidierung": "nein", "pruefidee": "Bestellung anlegen und prüfen, ob ein Freigabeschritt vor dem Setzen von IsPurchased erzwungen wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-036", @@ -594,7 +629,8 @@ "tracelinks": "SyRS-054, SwRS-059", "konsolidierung": "nein", "pruefidee": "Benutzer ohne SHOW_ORDER versucht Bestellliste zu öffnen → keine Anzeige/Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-037", @@ -611,7 +647,8 @@ "tracelinks": "SyRS-057, SwRS-060", "konsolidierung": "nein", "pruefidee": "Neuer Belegtyp erbt von ReceiptBase und erhält automatisch Versionierung und Audit-Felder ohne Zusatzaufwand.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-038", @@ -628,7 +665,8 @@ "tracelinks": "SyRS-060, SyRS-061, SwRS-064", "konsolidierung": "nein", "pruefidee": "Versuch, eine Gutschrift weiterzuverarbeiten → Ablehnung, da CanBeForwardedInto() eine leere Liste liefert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-039", @@ -645,7 +683,8 @@ "tracelinks": "SyRS-063, SwRS-068", "konsolidierung": "nein", "pruefidee": "Beleg zweimal mit inhaltlichen Änderungen speichern → zwei Versionssätze in *Versions-Tabellen mit unterschiedlichem Inhalt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-040", @@ -661,7 +700,8 @@ "tracelinks": "SyRS-059, SwRS-062", "konsolidierung": "nein", "pruefidee": "Stornierungsversuch einer bereits an die Buchhaltung exportierten Rechnung → Ablehnung mit spezifischer Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-041", @@ -678,7 +718,8 @@ "tracelinks": "SyRS-067, SwRS-065, SwRS-066", "konsolidierung": "nein", "pruefidee": "Schweizer Mandant mit CommercialRoundCH=true → Belegendsumme ist auf 0,05 CHF gerundet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-042", @@ -695,7 +736,8 @@ "tracelinks": "SyRS-066, SwRS-070", "konsolidierung": "nein", "pruefidee": "Kunde mit PurchaseOrderNumberRequiered=true, Beleg ohne Bestellnummer speichern → Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-043", @@ -711,7 +753,8 @@ "tracelinks": "SyRS-065, SwRS-069", "konsolidierung": "nein", "pruefidee": "Position unter Mindestpreis ohne Zusatzrecht speichern → Ablehnung; nach Zweitanmeldung eines berechtigten Kollegen → Speichern gelingt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-044", @@ -728,7 +771,8 @@ "tracelinks": "SyRS-057, SyRS-068", "konsolidierung": "nein", "pruefidee": "Code-Review bestätigt: kein State-Wert \"Draft\"/\"Released\" existiert auf ReceiptBase.State.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-045", @@ -744,7 +788,8 @@ "tracelinks": "SyRS-069, SyRS-070, SwRS-074", "konsolidierung": "nein", "pruefidee": "Rechnung vollständig bezahlt (Status Completed), danach Rückbuchung negativer Betrag zuordnen → Status wechselt zurück zu Active.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-046", @@ -761,7 +806,8 @@ "tracelinks": "SyRS-071, SyRS-072, SwRS-076, SwRS-077", "konsolidierung": "nein", "pruefidee": "Direkter Sprung von None auf Level3 versuchen → ArgumentOutOfRangeException.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-047", @@ -777,7 +823,8 @@ "tracelinks": "SyRS-073, SwRS-078", "konsolidierung": "nein", "pruefidee": "Artikel mit zwei zeitlich gestaffelten Steuersätzen; Beleg mit Datum vor dem Wechsel → alter Satz wird angewendet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-048", @@ -794,7 +841,8 @@ "tracelinks": "SyRS-074, SyRS-075, SwRS-079, SwRS-080", "konsolidierung": "nein", "pruefidee": "Innergemeinschaftliche Lieferung mit 0% Steuersatz exportieren → Steuerkategorie \"K\" mit korrektem Freitext.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-049", @@ -810,7 +858,8 @@ "tracelinks": "SyRS-047 (Konsolidierungskandidat StRS-030)", "konsolidierung": "Kandidat: StRS-030 (identischer BookKeepingExportBL-Mechanismus, dort aus Kundenperspektive beschrieben)", "pruefidee": "Export für Schweizer Mandanten mit CommercialRoundCH → zusätzliche Rundungsbuchungszeile im Export enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-050", @@ -826,7 +875,8 @@ "tracelinks": "SyRS-076, SwRS-081", "konsolidierung": "nein", "pruefidee": "Kursabgleich ausführen → Country.CurrencyRate entspricht dem tagesaktuellen EZB-Referenzkurs.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-051", @@ -842,7 +892,8 @@ "tracelinks": "SyRS-078", "konsolidierung": "nein", "pruefidee": "Bereits exportierte Rechnung nach Periodenabschluss ändern → Änderung gelingt nach Bestätigung des Warnhinweises.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-052", @@ -858,7 +909,8 @@ "tracelinks": "SyRS-079, SwRS-085", "konsolidierung": "Kandidat: StRS-002 (identisches \"nur eigene/nur eigene Filiale\"-Muster wie bei Belegsuchen)", "pruefidee": "Code-Verifikation von UserRightsConst.Sales.Customer.Helpdesk.SHOW_HELPDESK* in ReceiptSearcher-artigen Filterklassen für Helpdesk-Tickets nachholen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-053", @@ -874,7 +926,8 @@ "tracelinks": "SyRS-080, SwRS-087", "konsolidierung": "nein", "pruefidee": "Codeverifikation der CFlow.*- und Checklists.*-Rechte in der Ticketvorlagen-BL nachholen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-054", @@ -890,7 +943,8 @@ "tracelinks": "StRS-021", "konsolidierung": "nein", "pruefidee": "Codeverifikation in HelpdeskTimerSignatureBL, ob DELETE_HELPDESK_SIGNATURE tatsächlich geprüft wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-055", @@ -908,7 +962,8 @@ "tracelinks": "SyRS-084, SyRS-088, SwRS-093, StRS-003, StRS-013", "konsolidierung": "nein", "pruefidee": "Kunde ohne Lizenz für Funktion X versucht Zugriff → Ablehnung; Zähllizenz mit Limit 3 → vierte Nutzung wird abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-056", @@ -924,7 +979,8 @@ "tracelinks": "SyRS-085", "konsolidierung": "nein", "pruefidee": "Neue LocalizedStrings.resx-Zeichenkette ohne zugehörigen Eintrag in LocalizedStrings.en.resx → Konsistenzprüfung schlägt fehl (organisatorische Regel, keine Code-Erzwingung gefunden).", - "qm": "Übertragbarkeit / Wartbarkeit (ISO/IEC 25010)" + "qm": "Übertragbarkeit / Wartbarkeit (ISO/IEC 25010)", + "uebernahme": "" }, { "id": "StRS-057", @@ -940,7 +996,8 @@ "tracelinks": "SyRS-082, SwRS-090, SwRS-091, SwRS-092", "konsolidierung": "nein", "pruefidee": "Modul im SqlServer-Verbindungsmodus und im CentronWebServices-Modus testen → identisches funktionales Verhalten.", - "qm": "Übertragbarkeit / Wartbarkeit (ISO/IEC 25010)" + "qm": "Übertragbarkeit / Wartbarkeit (ISO/IEC 25010)", + "uebernahme": "" }, { "id": "StRS-058", @@ -956,7 +1013,8 @@ "tracelinks": "SyRS-087, SwRS-094", "konsolidierung": "nein", "pruefidee": "DEBUG-Build sendet E-Mail an externe Testadresse → tatsächlicher Empfänger ist test@nexoware.com, nicht die eingegebene Adresse.", - "qm": "Zuverlässigkeit (ISO/IEC 25010)" + "qm": "Zuverlässigkeit (ISO/IEC 25010)", + "uebernahme": "" }, { "id": "SyRS-001", @@ -973,7 +1031,8 @@ "tracelinks": "StRS-003", "konsolidierung": "nein", "pruefidee": "System auf \"ActiveDirectory\" konfiguriert, Benutzer mit AuthentificationKind=CentronLogin meldet sich an → BasicAuthenticator wird verwendet (Benutzerausnahme greift), nicht ActiveDirectoryAuthenticator.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -989,7 +1048,8 @@ "tracelinks": "StRS-005", "konsolidierung": "nein", "pruefidee": "Deaktiviertes Konto (IsAccountDisabled=true) meldet sich mit korrektem Passwort an → Anmeldung wird verweigert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -1005,7 +1065,8 @@ "tracelinks": "StRS-004", "konsolidierung": "nein", "pruefidee": "System-Flag aktiv, Benutzer-Flag inaktiv → keine 2FA-Abfrage. System-Flag inaktiv, Benutzer-Flag aktiv → keine 2FA-Abfrage (System-Flag dominiert laut Kurzschluss-Logik).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -1022,7 +1083,8 @@ "tracelinks": "StRS-004", "konsolidierung": "nein", "pruefidee": "Konfiguration auf RadiusServer → RadiusTwoFactorValidator wird instanziiert; Konfiguration auf EmailLink → EmailTwoFactorValidator wird instanziiert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -1038,7 +1100,8 @@ "tracelinks": "StRS-004", "konsolidierung": "nein", "pruefidee": "Erfolgreicher 2FA-Login, danach zweiter Login desselben Benutzers von derselben Maschine/IP innerhalb der Gültigkeitsdauer → keine 2FA-Abfrage; nach Ablauf der Frist erneut erforderlich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -1054,7 +1117,8 @@ "tracelinks": "StRS-001, StRS-002", "konsolidierung": "nein", "pruefidee": "Benutzer mit \"nur eigene Filiale\"-Recht sucht Rechnungen → Ergebnis enthält keine Rechnungen anderer Filialen, auch wenn technisch vorhanden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -1071,7 +1135,8 @@ "tracelinks": "StRS-003", "konsolidierung": "nein", "pruefidee": "Benutzer mit korrektem Passwort, aber ohne Lizenz für \"Outlook Add-In\" versucht Login an diese Anwendung → wird abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -1088,7 +1153,8 @@ "tracelinks": "StRS-001", "konsolidierung": "nein", "pruefidee": "Löschanfrage für Gruppe I3D=6 → Ergebnis Error, keine Löschung in DB.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -1104,7 +1170,8 @@ "tracelinks": "StRS-003", "konsolidierung": "nein", "pruefidee": "AD-authentifizierter Benutzer ruft Passwortänderung auf → Result.Error mit obiger Meldung, kein Datenbank-Update.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -1120,7 +1187,8 @@ "tracelinks": "StRS-006", "konsolidierung": "nein", "pruefidee": "Sequenzieller Test aller AppRightLogKind-Werte → je Aktion existiert genau ein neuer Log-Eintrag mit korrektem Kind.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -1136,7 +1204,8 @@ "tracelinks": "StRS-007", "konsolidierung": "nein", "pruefidee": "Zwei gleichzeitige Buchungen auf denselben Artikel/Lager → beide Inkremente werden korrekt kumuliert (kein Lost-Update durch atomares SQL-UPDATE).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -1152,7 +1221,8 @@ "tracelinks": "StRS-010", "konsolidierung": "nein", "pruefidee": "Seriennummerpflichtiger Artikel wird auf Lieferschein gebucht → Quantity-Feld unverändert, BarcodeState des betroffenen Exemplars wechselt zu InDeliveryList.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -1169,7 +1239,8 @@ "tracelinks": "StRS-008", "konsolidierung": "nein", "pruefidee": "Angebot mit bestandsrelevanten Positionen speichern → kein Bestandsbuchungsaufruf erfolgt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -1185,7 +1256,8 @@ "tracelinks": "StRS-009", "konsolidierung": "nein", "pruefidee": "Lieferschein mit Negativbuchung, Benutzer ohne Recht, Zweitmitarbeiter mit Recht meldet sich an → Buchung wird durchgeführt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -1201,7 +1273,8 @@ "tracelinks": "StRS-008", "konsolidierung": "nein", "pruefidee": "Lieferschein mit Artikel, der im gewählten Nebenlager nicht angelegt ist, ohne AutoNewSecondstockArticle-Einstellung → Fehlermeldung, keine Buchung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-016", @@ -1217,7 +1290,8 @@ "tracelinks": "StRS-007", "konsolidierung": "nein", "pruefidee": "Filiale mit zwei zugeordneten Lagern, eines mit IsDefault=true → GetDefaultWarehouseI3DFromBranch liefert genau dieses Lager.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-017", @@ -1233,7 +1307,8 @@ "tracelinks": "StRS-007", "konsolidierung": "nein", "pruefidee": "RMALockOwnStorage aktiviert → das RMAOwnStorage-Lager erscheint nicht in LoadOpenWarehouses().", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-018", @@ -1249,7 +1324,8 @@ "tracelinks": "StRS-011", "konsolidierung": "nein", "pruefidee": "Fehler-Injektion (z. B. Constraint-Verletzung) während CloseStorages → keine der vorgesehenen Änderungen ist in der Datenbank sichtbar.", - "qm": "Zuverlässigkeit (ISO/IEC 25010)" + "qm": "Zuverlässigkeit (ISO/IEC 25010)", + "uebernahme": "" }, { "id": "SyRS-019", @@ -1265,7 +1341,8 @@ "tracelinks": "StRS-010, StRS-011", "konsolidierung": "nein", "pruefidee": "Seriennummer im Status InInvoice wird während Inventur gescannt → Fehlermeldung, kein Inventureintrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-020", @@ -1281,7 +1358,8 @@ "tracelinks": "StRS-012", "konsolidierung": "nein", "pruefidee": "Zwei identische Buchungen < 2 Sekunden auseinander → zweite schlägt fehl.", - "qm": "Zuverlässigkeit (ISO/IEC 25010)" + "qm": "Zuverlässigkeit (ISO/IEC 25010)", + "uebernahme": "" }, { "id": "SyRS-021", @@ -1298,7 +1376,8 @@ "tracelinks": "StRS-013", "konsolidierung": "nein", "pruefidee": "WebReceiptState wechselt zu WebOfferSign, während SharedDocumentState gleichzeitig SendToCustomerWaiting ist → beide Werte unabhängig abrufbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-022", @@ -1314,7 +1393,8 @@ "tracelinks": "StRS-016", "konsolidierung": "nein", "pruefidee": "Vier Testfälle: gültig / abgelaufen / bereits signiert / falscher AuthenticationKey.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-023", @@ -1330,7 +1410,8 @@ "tracelinks": "StRS-016", "konsolidierung": "nein", "pruefidee": "Zweiten Signaturvorgang für denselben Beleg anlegen, während erster aktiv ist → Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-024", @@ -1346,7 +1427,8 @@ "tracelinks": "StRS-013", "konsolidierung": "nein", "pruefidee": "Mandant ohne Lizenz DocumentProcessing ruft GenerateTokenForDocument auf → Ergebnis Error.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-025", @@ -1362,7 +1444,8 @@ "tracelinks": "StRS-013", "konsolidierung": "nein", "pruefidee": "AllowAcceptReceiptWithoutSignature=true, Kunde akzeptiert → kein SharedDocument wird erzeugt, Auftrag existiert direkt danach.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-026", @@ -1378,7 +1461,8 @@ "tracelinks": "StRS-015", "konsolidierung": "nein", "pruefidee": "Angebot signieren → Auftrag existiert, ReceiptLog enthält CreateSignForwardingEntry-Eintrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-027", @@ -1394,7 +1478,8 @@ "tracelinks": "StRS-013", "konsolidierung": "nein", "pruefidee": "Signaturvorgang mit allen vier Vorlagenteilen aufrufen → PDF enthält alle vier Abschnitte in korrekter Reihenfolge.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-028", @@ -1410,7 +1495,8 @@ "tracelinks": "StRS-013", "konsolidierung": "nein", "pruefidee": "Zwei aufeinanderfolgende Signaturvorgänge mit derselben Vorlage → zweite Vorschau zeigt nicht die Unterschrift des ersten Kunden.", - "qm": "Sicherheit (ISO/IEC 25010)" + "qm": "Sicherheit (ISO/IEC 25010)", + "uebernahme": "" }, { "id": "SyRS-029", @@ -1426,7 +1512,8 @@ "tracelinks": "StRS-013, StRS-017", "konsolidierung": "nein", "pruefidee": "Aufruf von SignSharedDocument ohne Session-Ticket, aber mit gültigem Token → Aufruf gelingt; Aufruf von DeleteSharedDocument ohne Session-Ticket → wird abgelehnt (Authentifizierung fehlt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-030", @@ -1442,7 +1529,8 @@ "tracelinks": "StRS-018", "konsolidierung": "nein", "pruefidee": "Siehe StRS-018.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-031", @@ -1458,7 +1546,8 @@ "tracelinks": "StRS-020", "konsolidierung": "nein", "pruefidee": "Siehe StRS-020.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-032", @@ -1474,7 +1563,8 @@ "tracelinks": "StRS-021", "konsolidierung": "nein", "pruefidee": "Siehe StRS-021.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-033", @@ -1490,7 +1580,8 @@ "tracelinks": "StRS-021", "konsolidierung": "nein", "pruefidee": "Zeiteintrag mit Recht, aber IsAssignedToAsset=true löschen → Ablehnung \"Löschen ist nicht möglich.\"", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-034", @@ -1506,7 +1597,8 @@ "tracelinks": "StRS-019", "konsolidierung": "nein", "pruefidee": "Siehe StRS-019.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-035", @@ -1522,7 +1614,8 @@ "tracelinks": "StRS-022", "konsolidierung": "nein", "pruefidee": "Siehe StRS-022.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-036", @@ -1539,7 +1632,8 @@ "tracelinks": "StRS-021", "konsolidierung": "nein", "pruefidee": "Benutzer ohne CAN_CHANGE_DATE öffnet Einstellungen für Rechnungen → Datumsfeld ist deaktiviert, Tooltip nennt das fehlende Recht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-037", @@ -1555,7 +1649,8 @@ "tracelinks": "StRS-022", "konsolidierung": "nein", "pruefidee": "Zeiteintrag auf einem Ticket mit Status \"geschlossen\" anlegen → prüfen, ob dies verhindert wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-038", @@ -1571,7 +1666,8 @@ "tracelinks": "StRS-024", "konsolidierung": "nein", "pruefidee": "Kunde ohne CreditLimit speichert beliebig hohen Beleg → keine Limitmeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-039", @@ -1587,7 +1683,8 @@ "tracelinks": "StRS-024", "konsolidierung": "nein", "pruefidee": "Beleg über Limit ohne Bestätigungsflag speichern → Dialoganzeige, kein Speichern; mit Flag → Speichern gelingt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-040", @@ -1603,7 +1700,8 @@ "tracelinks": "StRS-025", "konsolidierung": "nein", "pruefidee": "Siehe StRS-025.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-041", @@ -1619,7 +1717,8 @@ "tracelinks": "StRS-026", "konsolidierung": "nein", "pruefidee": "Siehe StRS-026.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-042", @@ -1635,7 +1734,8 @@ "tracelinks": "StRS-027", "konsolidierung": "nein", "pruefidee": "Siehe StRS-027.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-043", @@ -1651,7 +1751,8 @@ "tracelinks": "StRS-028", "konsolidierung": "nein", "pruefidee": "Siehe StRS-028.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-044", @@ -1667,7 +1768,8 @@ "tracelinks": "StRS-027", "konsolidierung": "nein", "pruefidee": "Web-Konto von Kunde A ruft Kundendatensatz von Kunde B ab → kein Ergebnis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-045", @@ -1683,7 +1785,8 @@ "tracelinks": "StRS-029", "konsolidierung": "nein", "pruefidee": "Kontaktperson löschen → Name/Telefon/E-Mail sind anonymisiert, DsgvoDeletedDate ist gesetzt, Löschprotokoll listet alle geänderten Felder.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-046", @@ -1699,7 +1802,8 @@ "tracelinks": "StRS-029", "konsolidierung": "nein", "pruefidee": "Löschantrag für Kunden-Entität auslösen → NotImplementedException.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-047", @@ -1715,7 +1819,8 @@ "tracelinks": "StRS-030", "konsolidierung": "nein", "pruefidee": "Siehe StRS-030.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-048", @@ -1731,7 +1836,8 @@ "tracelinks": "StRS-031", "konsolidierung": "nein", "pruefidee": "Inkonsistente CanBeForwardedInto/From-Konfiguration → ApplicationException beim Anwendungsstart.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-049", @@ -1747,7 +1853,8 @@ "tracelinks": "StRS-032", "konsolidierung": "nein", "pruefidee": "Siehe StRS-032.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-050", @@ -1764,7 +1871,8 @@ "tracelinks": "StRS-032", "konsolidierung": "Kandidat: SyRS-013 (identisches Policy-Muster wie bei Verkaufsbelegen)", "pruefidee": "Siehe StRS-008 (analoges Muster im Verkauf).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-051", @@ -1780,7 +1888,8 @@ "tracelinks": "StRS-032", "konsolidierung": "nein", "pruefidee": "Wareneingang mit LateBooking=true speichern → Bestand unverändert bis zur expliziten Nachbuchung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-052", @@ -1796,7 +1905,8 @@ "tracelinks": "StRS-034", "konsolidierung": "nein", "pruefidee": "Siehe StRS-034.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-053", @@ -1812,7 +1922,8 @@ "tracelinks": "StRS-032", "konsolidierung": "nein", "pruefidee": "Referenzierte Bestellposition löschen, Wareneingang erneut speichern → Referenz wird automatisch entfernt statt Fehler zu werfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-054", @@ -1828,7 +1939,8 @@ "tracelinks": "StRS-036", "konsolidierung": "nein", "pruefidee": "Siehe StRS-036.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-055", @@ -1844,7 +1956,8 @@ "tracelinks": "StRS-036", "konsolidierung": "nein", "pruefidee": "Benutzer mit SHOW_ORDER_ONLY_OWN_BRANCH sieht dennoch Bestellungen anderer Filialen → Bestätigung der Lücke.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-056", @@ -1860,7 +1973,8 @@ "tracelinks": "StRS-035", "konsolidierung": "nein", "pruefidee": "Siehe StRS-035.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-057", @@ -1877,7 +1991,8 @@ "tracelinks": "StRS-037, StRS-044", "konsolidierung": "nein", "pruefidee": "Neuen Beleg anlegen → State=Active; nach Vollzahlung → Completed; nach Stornierung (nur Rechnung) → Canceled.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-058", @@ -1893,7 +2008,8 @@ "tracelinks": "StRS-044", "konsolidierung": "nein", "pruefidee": "Stornierte Rechnung als bezahlt markieren → Ablehnung mit Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-059", @@ -1909,7 +2025,8 @@ "tracelinks": "StRS-040", "konsolidierung": "nein", "pruefidee": "Sechs Testfälle, je ein Verstoß gegen eine Vorbedingung → jeweils Ablehnung mit passender Meldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-060", @@ -1925,7 +2042,8 @@ "tracelinks": "StRS-038", "konsolidierung": "nein", "pruefidee": "Siehe StRS-038.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-061", @@ -1941,7 +2059,8 @@ "tracelinks": "StRS-038", "konsolidierung": "nein", "pruefidee": "Zwei Lieferscheine unterschiedlicher Kunden gemeinsam zur Rechnung weiterverarbeiten → Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-062", @@ -1957,7 +2076,8 @@ "tracelinks": "StRS-038", "konsolidierung": "nein", "pruefidee": "Angebot Nr. A-100 in Auftrag überführen → resultierender Auftrag hat eine Nummer aus dem Auftrags-Nummernkreis, nicht \"A-100\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-063", @@ -1973,7 +2093,8 @@ "tracelinks": "StRS-039", "konsolidierung": "nein", "pruefidee": "Beleg mit aktiven Seriennummern erneut mit höherer Version speichern → Ablehnung mit Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-064", @@ -1989,7 +2110,8 @@ "tracelinks": "StRS-038", "konsolidierung": "nein", "pruefidee": "Auftragsposition, die bereits per Lieferschein weiterverarbeitet wurde, in der Menge ändern → Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-065", @@ -2005,7 +2127,8 @@ "tracelinks": "StRS-043", "konsolidierung": "Kandidat: SyRS-014 (identisches Zweitanmeldungsmuster wie Negativbuchung)", "pruefidee": "Siehe StRS-043.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-066", @@ -2021,7 +2144,8 @@ "tracelinks": "StRS-042", "konsolidierung": "nein", "pruefidee": "Beleg mit Nettosumme unter MinimumAmount speichern → Dialog erscheint, erst nach Bestätigung wird gespeichert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-067", @@ -2037,7 +2161,8 @@ "tracelinks": "StRS-041", "konsolidierung": "nein", "pruefidee": "Siehe StRS-041.", - "qm": "Funktionale Eignung (ISO/IEC 25010)" + "qm": "Funktionale Eignung (ISO/IEC 25010)", + "uebernahme": "" }, { "id": "SyRS-068", @@ -2054,7 +2179,8 @@ "tracelinks": "StRS-044", "konsolidierung": "nein", "pruefidee": "Warenkorb wird vom Prüfer abgelehnt → State=DeclinedByChecker, kein Auftrag entsteht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-069", @@ -2070,7 +2196,8 @@ "tracelinks": "StRS-045", "konsolidierung": "nein", "pruefidee": "Siehe StRS-045.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-070", @@ -2086,7 +2213,8 @@ "tracelinks": "StRS-045", "konsolidierung": "nein", "pruefidee": "Siehe StRS-045.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-071", @@ -2102,7 +2230,8 @@ "tracelinks": "StRS-046", "konsolidierung": "nein", "pruefidee": "Siehe StRS-046.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-072", @@ -2118,7 +2247,8 @@ "tracelinks": "StRS-046", "konsolidierung": "nein", "pruefidee": "Siehe StRS-046.", - "qm": "Zuverlässigkeit (ISO/IEC 25010)" + "qm": "Zuverlässigkeit (ISO/IEC 25010)", + "uebernahme": "" }, { "id": "SyRS-073", @@ -2134,7 +2264,8 @@ "tracelinks": "StRS-047", "konsolidierung": "nein", "pruefidee": "Siehe StRS-047.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-074", @@ -2150,7 +2281,8 @@ "tracelinks": "StRS-048", "konsolidierung": "nein", "pruefidee": "Position mit IsReverseCharge=true und VATRate=19 → IsReverseChargeActive() liefert false.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-075", @@ -2166,7 +2298,8 @@ "tracelinks": "StRS-048", "konsolidierung": "nein", "pruefidee": "Kunde mit exportZUGFeRD=false → generiertes Dokument entspricht ZUGFeRD_1_0, nicht der Systemstandardversion.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-076", @@ -2182,7 +2315,8 @@ "tracelinks": "StRS-050", "konsolidierung": "nein", "pruefidee": "Beleg mit fixiertem Kurs; Kursaktualisierung durchführen → Belegkurs bleibt unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-077", @@ -2198,7 +2332,8 @@ "tracelinks": "StRS-045", "konsolidierung": "nein", "pruefidee": "Benutzer ohne OUTGOING_PAYMENT_TRANSACTIONS speichert Ausgangszahlung → Speichern gelingt entgegen der fachlichen Erwartung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-078", @@ -2214,7 +2349,8 @@ "tracelinks": "StRS-051", "konsolidierung": "nein", "pruefidee": "Siehe StRS-051.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-079", @@ -2230,7 +2366,8 @@ "tracelinks": "StRS-052", "konsolidierung": "nein", "pruefidee": "Siehe StRS-052.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-080", @@ -2246,7 +2383,8 @@ "tracelinks": "StRS-053", "konsolidierung": "nein", "pruefidee": "Siehe StRS-053.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-081", @@ -2263,7 +2401,8 @@ "tracelinks": "StRS-021", "konsolidierung": "Kandidat: SyRS-033 (gleiche fachliche Regel wie DELETE_HELPDESK_TIMER)", "pruefidee": "Verschieben einer Zeit eines Tickets, das Teil eines Belegs ist → sollte laut Dokumentation verweigert werden; Codeverifikation ausstehend.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-082", @@ -2279,7 +2418,8 @@ "tracelinks": "StRS-057", "konsolidierung": "nein", "pruefidee": "Siehe StRS-057.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-083", @@ -2296,7 +2436,8 @@ "tracelinks": "StRS-057", "konsolidierung": "nein", "pruefidee": "Stichprobenartige Codeanalyse: >90% der öffentlichen BL-Methoden geben Result/Result<T> zurück.", - "qm": "Wartbarkeit (ISO/IEC 25010)" + "qm": "Wartbarkeit (ISO/IEC 25010)", + "uebernahme": "" }, { "id": "SyRS-084", @@ -2313,7 +2454,8 @@ "tracelinks": "StRS-055", "konsolidierung": "nein", "pruefidee": "Benutzer mit vollen Rechten, aber Mandant ohne Lizenz → Funktion bleibt gesperrt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-085", @@ -2329,7 +2471,8 @@ "tracelinks": "StRS-056", "konsolidierung": "nein", "pruefidee": "Siehe StRS-056.", - "qm": "Übertragbarkeit (ISO/IEC 25010)" + "qm": "Übertragbarkeit (ISO/IEC 25010)", + "uebernahme": "" }, { "id": "SyRS-086", @@ -2345,7 +2488,8 @@ "tracelinks": "StRS-056", "konsolidierung": "nein", "pruefidee": "Neue Datei ohne BOM anlegen → Konsistenzprüfung/Code-Review sollte dies erkennen (organisatorische Regel, keine automatisierte Durchsetzung im Code gefunden).", - "qm": "Wartbarkeit (ISO/IEC 25010)" + "qm": "Wartbarkeit (ISO/IEC 25010)", + "uebernahme": "" }, { "id": "SyRS-087", @@ -2361,7 +2505,8 @@ "tracelinks": "StRS-058", "konsolidierung": "nein", "pruefidee": "Siehe StRS-058.", - "qm": "Zuverlässigkeit (ISO/IEC 25010)" + "qm": "Zuverlässigkeit (ISO/IEC 25010)", + "uebernahme": "" }, { "id": "SyRS-088", @@ -2377,7 +2522,8 @@ "tracelinks": "StRS-055", "konsolidierung": "nein", "pruefidee": "Neue Lizenz anlegen, GUID in LicenseGuids.cs eintragen, HasLicense-Aufruf mit dieser GUID → funktioniert unabhängig von der Anwendungsversion.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -2393,7 +2539,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Benutzer ist Mitglied zweier Gruppen; Recht X ist nur der zweiten Gruppe zugewiesen → HasUserRight(User, X) liefert true.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-002", @@ -2409,7 +2556,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Code-Review/Grep bestätigt >100 Aufrufstellen dieser Methode in der BL-Schicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-003", @@ -2425,7 +2573,8 @@ "tracelinks": "SyRS-007", "konsolidierung": "nein", "pruefidee": "ApplicationKind mit RequiredRight=X, Benutzer ohne X → Login abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-004", @@ -2441,7 +2590,8 @@ "tracelinks": "SyRS-002", "konsolidierung": "Kandidat: SwRS-005 (beide prüfen Kontogültigkeit im selben Methodenaufruf)", "pruefidee": "Konto mit AccountDisabledFromDate=gestern, ToDate=morgen → Login abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-005", @@ -2457,7 +2607,8 @@ "tracelinks": "SyRS-002", "konsolidierung": "Kandidat: SwRS-004", "pruefidee": "Mitarbeiter mit Austrittsdatum gestern, IsAccountDisabled=false → Login dennoch abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-006", @@ -2474,7 +2625,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Statischer Code-Review bestätigt Fehlen eines Salt-Parameters; Migrationsplanung sollte Passwort-Reset aller Bestandskonten vorsehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-007", @@ -2490,7 +2642,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Falsches AD-Passwort → genau ein fehlgeschlagener Bind-Versuch im Log, kein Retry.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-008", @@ -2506,7 +2659,8 @@ "tracelinks": "SyRS-001, SyRS-007", "konsolidierung": "nein", "pruefidee": "Gültiges Token, aber Mandant ohne Lizenz LicenseGuids.OpenIDConnectAuthentication → Login abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-009", @@ -2522,7 +2676,8 @@ "tracelinks": "SyRS-003", "konsolidierung": "nein", "pruefidee": "4 Kombinationen (System×Benutzer je an/aus) testen → 2FA nur bei \"an/an\" aktiv.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-010", @@ -2538,7 +2693,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "nein", "pruefidee": "TwoFactorValidDurationInDays=7; erneuter Login nach 8 Tagen von derselben Maschine → 2FA erneut verlangt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -2554,7 +2710,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Session ohne Aktivität länger als 30 Minuten → nachfolgender Zugriff wird abgelehnt (Ticket abgelaufen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -2570,7 +2727,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Versuch, RIGHT_NEGATIVBUCHUNG (nicht in Whitelist) der Admin-Gruppe zu entziehen → Rückgabe false, keine DB-Änderung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-013", @@ -2587,7 +2745,8 @@ "tracelinks": "SyRS-010", "konsolidierung": "nein", "pruefidee": "Sieben Testfälle (je AppRightLogKind-Wert) → je ein neuer Log-Eintrag mit korrektem Kind.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-014", @@ -2603,7 +2762,8 @@ "tracelinks": "SyRS-006", "konsolidierung": "nein", "pruefidee": "Zwei Benutzer unterschiedlicher Filialen mit \"nur eigene Filiale\"-Recht suchen denselben Auftrag → nur der Benutzer der zutreffenden Filiale erhält einen Treffer.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-015", @@ -2619,7 +2779,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "PasswordMinLength=8, neues Passwort mit 6 Zeichen → Result.Error.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-016", @@ -2635,7 +2796,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Manueller Test: Benutzer mit abgelaufener PasswordValidDurationDays meldet sich an → prüfen, ob Login verweigert oder Passwortänderung erzwungen wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-017", @@ -2651,7 +2813,8 @@ "tracelinks": "SyRS-011", "konsolidierung": "nein", "pruefidee": "Lasttest mit parallelen Buchungen auf denselben Artikel/Lager → Endsumme entspricht Summe aller Einzelbuchungen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-018", @@ -2667,7 +2830,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "Kandidat: SwRS-020 (Nachbuchungslogik bei Lieferanten-Belegen, gleicher Guard-Mechanismus)", "pruefidee": "Bereits gebuchte Position (IsBooked=true) erneut speichern → keine zweite Buchung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-019", @@ -2683,7 +2847,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "nein", "pruefidee": "Für jeden der 7 Kunden-Belegtypen: policy-konformes Verhalten bei Buchung nachweisen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-020", @@ -2699,7 +2864,8 @@ "tracelinks": "SyRS-014", "konsolidierung": "nein", "pruefidee": "Zweitanmeldung mit falschem Passwort → Buchung bleibt gesperrt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-021", @@ -2715,7 +2881,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Seriennummer durchläuft InStock→InOrder→InDeliveryList→InInvoice → jeder Übergang ist im Log nachvollziehbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-022", @@ -2731,7 +2898,8 @@ "tracelinks": "SyRS-019", "konsolidierung": "nein", "pruefidee": "Bereits verrechnete Seriennummer (InInvoice) wird gescannt → Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-023", @@ -2747,7 +2915,8 @@ "tracelinks": "SyRS-016, SyRS-017", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-016/017.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-024", @@ -2763,7 +2932,8 @@ "tracelinks": "SyRS-020", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-020.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-025", @@ -2779,7 +2949,8 @@ "tracelinks": "SyRS-018", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-018.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-026", @@ -2795,7 +2966,8 @@ "tracelinks": "SyRS-014", "konsolidierung": "nein", "pruefidee": "Manuelle Lagerzubuchung ohne Recht BOOK_TO_STOCK über direkten API-Aufruf (nicht über UI) versuchen → prüfen, ob serverseitig abgelehnt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-027", @@ -2811,7 +2983,8 @@ "tracelinks": "SyRS-022", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-022.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-028", @@ -2827,7 +3000,8 @@ "tracelinks": "SyRS-023", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-023.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-029", @@ -2843,7 +3017,8 @@ "tracelinks": "StRS-014", "konsolidierung": "nein", "pruefidee": "Siehe StRS-014.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-030", @@ -2859,7 +3034,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "nein", "pruefidee": "Ungültigen Enum-Wert (z. B. Cast eines ungültigen int) übergeben → InvalidEnumArgumentException.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-031", @@ -2875,7 +3051,8 @@ "tracelinks": "SyRS-025", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-025.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-032", @@ -2891,7 +3068,8 @@ "tracelinks": "SyRS-026", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-026.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-033", @@ -2907,7 +3085,8 @@ "tracelinks": "SyRS-027", "konsolidierung": "nein", "pruefidee": "Word-Vorlage mit SVG+Bitmap-Bildpaar konvertieren → resultierendes PDF zeigt das Bild korrekt, nicht schwarz.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-034", @@ -2923,7 +3102,8 @@ "tracelinks": "SyRS-028", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-028.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-035", @@ -2939,7 +3119,8 @@ "tracelinks": "StRS-013", "konsolidierung": "nein", "pruefidee": "Signaturvorgang durchführen und anschließend SignedFromIp prüfen → erwartungsgemäß NULL/leer.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-036", @@ -2955,7 +3136,8 @@ "tracelinks": "StRS-017", "konsolidierung": "nein", "pruefidee": "Siehe StRS-017.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-037", @@ -2971,7 +3153,8 @@ "tracelinks": "SyRS-030", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-030.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-038", @@ -2987,7 +3170,8 @@ "tracelinks": "SyRS-031", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-031.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-039", @@ -3003,7 +3187,8 @@ "tracelinks": "SyRS-034", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-034.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-040", @@ -3019,7 +3204,8 @@ "tracelinks": "SyRS-032", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-032.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-041", @@ -3035,7 +3221,8 @@ "tracelinks": "SyRS-033", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-033.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-042", @@ -3051,7 +3238,8 @@ "tracelinks": "SyRS-035", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-035.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-043", @@ -3067,7 +3255,8 @@ "tracelinks": "SyRS-036", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-036.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-044", @@ -3083,7 +3272,8 @@ "tracelinks": "StRS-023", "konsolidierung": "nein", "pruefidee": "Siehe StRS-023.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-045", @@ -3099,7 +3289,8 @@ "tracelinks": "SyRS-042", "konsolidierung": "nein", "pruefidee": "Benutzer ohne SEARCH_CUSTOMER ruft Kundenliste ab → leeres Ergebnis/Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-046", @@ -3115,7 +3306,8 @@ "tracelinks": "SyRS-038, SyRS-039", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-038/039.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-047", @@ -3131,7 +3323,8 @@ "tracelinks": "SyRS-040", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-040.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-048", @@ -3147,7 +3340,8 @@ "tracelinks": "StRS-027", "konsolidierung": "nein", "pruefidee": "Neuanlage mit State=0 im DTO → gespeicherter Kunde hat dennoch State=1.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-049", @@ -3163,7 +3357,8 @@ "tracelinks": "SyRS-043", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-043.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-050", @@ -3179,7 +3374,8 @@ "tracelinks": "SyRS-045", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-045.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-051", @@ -3195,7 +3391,8 @@ "tracelinks": "SyRS-046", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-046.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-052", @@ -3211,7 +3408,8 @@ "tracelinks": "SyRS-047", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-047.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-053", @@ -3227,7 +3425,8 @@ "tracelinks": "SyRS-048", "konsolidierung": "nein", "pruefidee": "Instanzierung von ReceiptSupplierOrder implementiert alle deklarierten Interfaces vollständig (Compile-Check).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-054", @@ -3244,7 +3443,8 @@ "tracelinks": "SyRS-049", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-049.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-055", @@ -3260,7 +3460,8 @@ "tracelinks": "StRS-033", "konsolidierung": "nein", "pruefidee": "Siehe StRS-033.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-056", @@ -3276,7 +3477,8 @@ "tracelinks": "StRS-033", "konsolidierung": "nein", "pruefidee": "Je eine Testdatei pro Format/Dokumenttyp-Kombination verarbeiten → korrekte Zielmethode wird aufgerufen (Unit-/Integrationstest).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-057", @@ -3292,7 +3494,8 @@ "tracelinks": "StRS-034", "konsolidierung": "nein", "pruefidee": "Wareneingang mit Menge > Bestellmenge verbuchen → InStock-Tracker zeigt maximal die Bestellmenge.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-058", @@ -3309,7 +3512,8 @@ "tracelinks": "StRS-036", "konsolidierung": "nein", "pruefidee": "Benutzer ohne jegliches Einkaufsrecht, aber mit allgemeinem Login, bearbeitet bestehende Bestellung → Bearbeitung gelingt entgegen der fachlichen Erwartung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-059", @@ -3325,7 +3529,8 @@ "tracelinks": "SyRS-054", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-054.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-060", @@ -3341,7 +3546,8 @@ "tracelinks": "StRS-037", "konsolidierung": "nein", "pruefidee": "Siehe StRS-037.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-061", @@ -3357,7 +3563,8 @@ "tracelinks": "SyRS-058", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-058.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-062", @@ -3373,7 +3580,8 @@ "tracelinks": "SyRS-059", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-059.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-063", @@ -3389,7 +3597,8 @@ "tracelinks": "StRS-040", "konsolidierung": "nein", "pruefidee": "Versuch, einen Auftrag über eine vermutete \"CancelOrder\"-Methode zu stornieren → Methode existiert nicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-064", @@ -3405,7 +3614,8 @@ "tracelinks": "StRS-038", "konsolidierung": "nein", "pruefidee": "Siehe StRS-038.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-065", @@ -3421,7 +3631,8 @@ "tracelinks": "StRS-041", "konsolidierung": "nein", "pruefidee": "Siehe StRS-041.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-066", @@ -3437,7 +3648,8 @@ "tracelinks": "SyRS-067", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-067.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-067", @@ -3453,7 +3665,8 @@ "tracelinks": "StRS-039", "konsolidierung": "nein", "pruefidee": "Siehe StRS-039.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-068", @@ -3469,7 +3682,8 @@ "tracelinks": "SyRS-063", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-063.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-069", @@ -3485,7 +3699,8 @@ "tracelinks": "SyRS-065", "konsolidierung": "Kandidat: SwRS-020 (identisches Zweitanmeldungsmuster)", "pruefidee": "Siehe SyRS-065.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-070", @@ -3501,7 +3716,8 @@ "tracelinks": "SyRS-066", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-066.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-071", @@ -3517,7 +3733,8 @@ "tracelinks": "SyRS-064", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-064.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-072", @@ -3533,7 +3750,8 @@ "tracelinks": "SyRS-060", "konsolidierung": "nein", "pruefidee": "Widersprüchliche Testkonfiguration einspielen → ApplicationException beim Start.", - "qm": "Zuverlässigkeit (ISO/IEC 25010)" + "qm": "Zuverlässigkeit (ISO/IEC 25010)", + "uebernahme": "" }, { "id": "SwRS-073", @@ -3549,7 +3767,8 @@ "tracelinks": "SyRS-068", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-068.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-074", @@ -3565,7 +3784,8 @@ "tracelinks": "SyRS-069, SyRS-070", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-069.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-075", @@ -3581,7 +3801,8 @@ "tracelinks": "StRS-045", "konsolidierung": "nein", "pruefidee": "Eingangszahlung löschen → Rechnung PaidFC reduziert sich entsprechend, Status ggf. zurück auf Active.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-076", @@ -3597,7 +3818,8 @@ "tracelinks": "SyRS-071", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-071.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-077", @@ -3613,7 +3835,8 @@ "tracelinks": "StRS-046", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Dunning-Recht startet Mahnlauf → Exception, kein Mahnlauf wird ausgeführt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-078", @@ -3629,7 +3852,8 @@ "tracelinks": "SyRS-073", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-073.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-079", @@ -3645,7 +3869,8 @@ "tracelinks": "StRS-048, SyRS-074", "konsolidierung": "nein", "pruefidee": "Siehe StRS-048.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-080", @@ -3661,7 +3886,8 @@ "tracelinks": "SyRS-075", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-075.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-081", @@ -3677,7 +3903,8 @@ "tracelinks": "StRS-050", "konsolidierung": "nein", "pruefidee": "Siehe StRS-050.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-082", @@ -3693,7 +3920,8 @@ "tracelinks": "SyRS-076", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-076.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-083", @@ -3709,7 +3937,8 @@ "tracelinks": "SyRS-077", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-077.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-084", @@ -3725,7 +3954,8 @@ "tracelinks": "StRS-046", "konsolidierung": "nein", "pruefidee": "Einstellung aktivieren, Kunde erreicht Mahnstufe 3, neuer Auftrag wird trotzdem anstandslos angelegt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-085", @@ -3741,7 +3971,8 @@ "tracelinks": "StRS-052, SwRS-014", "konsolidierung": "Kandidat: SwRS-014", "pruefidee": "Siehe StRS-052.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-086", @@ -3757,7 +3988,8 @@ "tracelinks": "StRS-052", "konsolidierung": "nein", "pruefidee": "Codeverifikation in der Ticket-Statusänderungslogik.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-087", @@ -3773,7 +4005,8 @@ "tracelinks": "StRS-053", "konsolidierung": "nein", "pruefidee": "Siehe StRS-053.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-090", @@ -3789,7 +4022,8 @@ "tracelinks": "SyRS-082", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-082.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-091", @@ -3805,7 +4039,8 @@ "tracelinks": "SyRS-082", "konsolidierung": "nein", "pruefidee": "Modul mit abweichender Benennung anlegen → automatische Registrierung schlägt fehl (organisatorische Konvention, keine harte Compile-Prüfung gefunden).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-092", @@ -3821,7 +4056,8 @@ "tracelinks": "SyRS-082", "konsolidierung": "nein", "pruefidee": "Modul, das nur SqlServer deklariert, im Webservice-Modus aufrufen → Modul wird nicht angeboten/funktioniert nicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-093", @@ -3837,7 +4073,8 @@ "tracelinks": "SyRS-084, SyRS-088", "konsolidierung": "nein", "pruefidee": "GetLicenseCount für unbegrenzte Lizenz → Data=null; für begrenzte Lizenz mit 3 → Data=3.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-094", @@ -3853,6 +4090,7 @@ "tracelinks": "SyRS-087", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-087.", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182942_v3.4.0-176f/_meta/anforderungen.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182942_v3.4.0-176f/_meta/anforderungen.md index 13a4ec5f..2a179626 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182942_v3.4.0-176f/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182942_v3.4.0-176f/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -32,6 +34,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 215 (90,3 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -49,5 +55,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (112 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 238 von 238 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182943_v3.4.0-1407/Protokoll.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182943_v3.4.0-1407/Protokoll.md index dfb0c980..3f69046c 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182943_v3.4.0-1407/Protokoll.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182943_v3.4.0-1407/Protokoll.md @@ -97,6 +97,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -133,6 +135,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 2 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 109 (96,5 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -150,6 +156,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (43 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 110 von 113 mit Tracelinks (97,3 %) | ## V1b-Block F–J, fünf Messpunkte diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182943_v3.4.0-1407/_meta/anforderungen.json b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182943_v3.4.0-1407/_meta/anforderungen.json index 495e1e05..988ae596 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182943_v3.4.0-1407/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182943_v3.4.0-1407/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-001, SyRS-002", "konsolidierung": "nein", "pruefidee": "Mitarbeiter ohne Recht X ruft Funktion X über WPF-UI und über Webservice auf; beide Wege müssen mit Fehlermeldung/Ablehnung reagieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -33,7 +34,8 @@ "tracelinks": "SyRS-001, SwRS-004", "konsolidierung": "nein", "pruefidee": "Mitarbeiter A (Filiale 1) mit „nur eigene Filiale\"-Recht ruft Beleg aus Filiale 2 auf; Zugriff muss verweigert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -51,7 +53,8 @@ "tracelinks": "SyRS-002", "konsolidierung": "nein", "pruefidee": "Login mit korrektem Passwort aber falschem/fehlendem TOTP-Code muss mit TwoFactorAuthFailed abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -68,7 +71,8 @@ "tracelinks": "SyRS-005, SwRS-010", "konsolidierung": "nein", "pruefidee": "Ein Account mit AccountTypeToAccount-Einträgen für Customer UND Supplier lässt sich anlegen und in beiden Kontexten (Verkaufsbeleg, Einkaufsbeleg) referenzieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -85,7 +89,8 @@ "tracelinks": "SyRS-006, SwRS-014", "konsolidierung": "nein", "pruefidee": "Kunde mit CreditLimit=1000 und offenen Rechnungen von 950 legt neue Rechnung über 100 an → Dialog „Kreditlimit überschritten\" muss erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -103,7 +108,8 @@ "tracelinks": "SyRS-005, SyRS-007", "konsolidierung": "nein", "pruefidee": "Kunde wird gesperrt (IsLocked=true) → verknüpfter Web-Account kann sich nicht mehr einloggen; DSGVO-Löschanfrage für eine Kontaktperson erzeugt Protokolleintrag „DSGVO: Auf Anfrage gelöscht\" und leert personenbezogene Felder.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -121,7 +127,8 @@ "tracelinks": "SyRS-008, SwRS-016", "konsolidierung": "nein", "pruefidee": "Angebot → Auftrag → Lieferschein → Rechnung erfolgreich; Lieferschein → Vertrag wird mit Fehlermeldung abgelehnt (kein zulässiger Übergang laut CanBeForwardedInto).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -138,7 +145,8 @@ "tracelinks": "SyRS-008, SwRS-017", "konsolidierung": "nein", "pruefidee": "Bereits an DATEV exportierte Rechnung kann nicht storniert werden (Fehlermeldung); nicht-exportierte, nicht weitergeführte Rechnung lässt sich stornieren und erzeugt neue Version mit Status Canceled.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -154,7 +162,8 @@ "tracelinks": "SyRS-008, SwRS-016", "konsolidierung": "nein", "pruefidee": "Auftrag mit einer Position wird vollständig in Lieferschein überführt (QuantityProcessed = QuantityComplete) → Auftragsstatus wechselt automatisch zu Completed.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -171,7 +180,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "Kandidat: betrifft alle SwRS-Anforderungen der Belegtypen (SwRS-016 ff.)", "pruefidee": "Für das Zielsystem: Anzahl der Codepfade, die zum Hinzufügen eines neuen Belegfelds geändert werden müssen, soll auf 1 (Datenmodell) statt aktuell bis zu 10 reduziert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -188,7 +198,8 @@ "tracelinks": "SyRS-010, SwRS-020", "konsolidierung": "nein", "pruefidee": "Artikel mit aktivem Aktionspreis und ITscope-Preis zeigt beide Quellen gleichzeitig im Preisspiegel mit Gültigkeitsdatum an.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -205,7 +216,8 @@ "tracelinks": "SyRS-010, SwRS-020", "konsolidierung": "nein", "pruefidee": "Artikel mit PurchasePrice-Änderung ohne NoPriceUpdate-Flag löst Neuberechnung von Price1-4 gemäß konfigurierter Markup-Tabelle aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -222,7 +234,8 @@ "tracelinks": "SyRS-010, SwRS-021", "konsolidierung": "nein", "pruefidee": "Seriennummernpflichtiger Artikel wird zu einem Vertrag hinzugefügt → Fehlermeldung „ist Seriennummernpflichtig\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -239,7 +252,8 @@ "tracelinks": "SyRS-011, SwRS-023", "konsolidierung": "nein", "pruefidee": "Artikel mit Bestand unter Mindestbestand und offenem Kundenauftragsbedarf erscheint in der Bestellvorschlagsliste mit korrekter Vorschlagsmenge.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-015", @@ -255,7 +269,8 @@ "tracelinks": "SyRS-011, SwRS-023", "konsolidierung": "nein", "pruefidee": "Lieferschein mit Liefermenge > bestellter Menge wird gebucht → InStock wird auf die ursprünglich bestellte Menge (Booked) begrenzt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-016", @@ -272,7 +287,8 @@ "tracelinks": "SyRS-011, SwRS-023", "konsolidierung": "nein", "pruefidee": "Verkaufsauftrag mit einer abweichenden Lieferadresse wird zu Lieferantenbestellung weitergeführt → Lieferadresse der Bestellung entspricht der Kundenlieferadresse.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-017", @@ -289,7 +305,8 @@ "tracelinks": "SyRS-012, SwRS-026", "konsolidierung": "nein", "pruefidee": "Rechnung mit gesetztem Leitweg-ID-Feld erzeugt XML mit ram:BuyerReference = Leitweg-ID und Konformitätslevel XRechnung; ohne Leitweg-ID wird EN16931-Comfort erzeugt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-018", @@ -307,7 +324,8 @@ "tracelinks": "SyRS-012, SwRS-027", "konsolidierung": "nein", "pruefidee": "Überfällige Rechnung ohne Mahnsperre wird im Mahnlauf von Level0 auf Level1 gesetzt; erneuter Lauf am selben Tag erhöht nicht über Level3 hinaus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-019", @@ -324,7 +342,8 @@ "tracelinks": "SyRS-012, SwRS-027", "konsolidierung": "nein", "pruefidee": "SEPA-Export für Rechnung mit Mandat ohne AuthorizationDate schlägt kontrolliert fehl; IBAN mit falscher Prüfsumme, über die API statt WPF-UI eingereicht, sollte idealerweise ebenfalls abgelehnt werden (aktuell laut Befund nicht der Fall).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-020", @@ -341,7 +360,8 @@ "tracelinks": "SyRS-013, SwRS-028", "konsolidierung": "nein", "pruefidee": "Belegposition ohne auflösbares Sachkonto wird beim DATEV-Export mit Fehlermeldung zurückgewiesen; vollständige Belege werden exportiert und als „bereits exportiert\" markiert (BookKeepingCustomerAssetExportFlag).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-021", @@ -358,7 +378,8 @@ "tracelinks": "SyRS-014, SwRS-030", "konsolidierung": "nein", "pruefidee": "Administrator legt neuen Status „Wartet auf Ersatzteil\" an, ordnet ihn nicht als „geschlossen\" ein; Tickets in diesem Status werden in Auswertungen als offen gezählt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-022", @@ -375,7 +396,8 @@ "tracelinks": "SyRS-014, SwRS-030", "konsolidierung": "nein", "pruefidee": "Ticket mit Pflicht-Checkliste, die einen offenen Punkt enthält, kann nicht auf „geschlossen\" gesetzt werden; nach Erledigung aller Punkte gelingt der Statuswechsel.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-023", @@ -393,7 +415,8 @@ "tracelinks": "SyRS-014, SwRS-030", "konsolidierung": "nein", "pruefidee": "Auftragsposition mit konfigurierter Standardvorlage erzeugt beim Ticket-Erstellungslauf ein Ticket mit den in der Vorlage hinterlegten Werten (Kategorie, Priorität, Checkliste).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-024", @@ -410,7 +433,8 @@ "tracelinks": "SyRS-014, SwRS-030", "konsolidierung": "nein", "pruefidee": "Ticket wird kurz vor Geschäftszeitende mit einer Priorität mit Verzögerung > Restarbeitszeit angelegt → Fälligkeit fällt korrekt auf den nächsten Geschäftstag ab OfficeHourFrom.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-025", @@ -427,7 +451,8 @@ "tracelinks": "SyRS-014, SwRS-031", "konsolidierung": "nein", "pruefidee": "Zeitbuchung, die bereits einer Rechnung zugeordnet ist, kann nicht mehr geändert werden (Fehlermeldung); Mitarbeiter mit OWN_TIME_EDIT kann fremde, nicht zugeordnete Zeitbuchung nicht bearbeiten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-026", @@ -445,7 +470,8 @@ "tracelinks": "SyRS-015, SwRS-032", "konsolidierung": "nein", "pruefidee": "Kunde unterschreibt ein per WebOffer-Link zugesandtes Angebot → System erzeugt automatisch einen Auftrag und versendet Auftragsbestätigungs-Mails an Kunde und internen Bearbeiter.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-027", @@ -463,7 +489,8 @@ "tracelinks": "SyRS-015, SwRS-032", "konsolidierung": "nein", "pruefidee": "Rechtliche/fachliche Prüfung, ob die C-Sign-Unterschrift für die im Zielsystem vorgesehenen Vertragsabschlüsse ausreichend ist, oder ob ein höheres eIDAS-Niveau erforderlich wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-028", @@ -480,7 +507,8 @@ "tracelinks": "SyRS-016", "konsolidierung": "nein", "pruefidee": "Repository-weite Suche nach „ProjectBL\" bzw. „GetProjectList(\" bestätigt 0 Aufrufer außerhalb der Modul-eigenen Dateien.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-029", @@ -497,7 +525,8 @@ "tracelinks": "SyRS-017, SwRS-034", "konsolidierung": "nein", "pruefidee": "Kunde mit individueller Angebots-Mailvorlage erhält bei Angebotsversand seine eigene Vorlage; Kunde ohne individuelle Vorlage erhält die Filial- bzw. globale Vorlage.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-030", @@ -514,7 +543,8 @@ "tracelinks": "SyRS-017, SwRS-034", "konsolidierung": "nein", "pruefidee": "Kommentar mit „[@Mustermann:123]\" erzeugt für Benutzer 123 sofort eine MentionedInComment-Benachrichtigung im Nexus-Portal.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-031", @@ -531,7 +561,8 @@ "tracelinks": "SyRS-018, SwRS-035", "konsolidierung": "nein", "pruefidee": "Wöchentlich wiederkehrender Report-Task erzeugt zum konfigurierten Zeitpunkt automatisch eine PDF-Mail an alle definierten Empfänger.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-032", @@ -548,7 +579,8 @@ "tracelinks": "SyRS-019, SwRS-036", "konsolidierung": "nein", "pruefidee": "Zwei Mandanten mit je eigenem Nummernkreis erzeugen keine kollidierenden Belegnummern; Filialwechsel eines Benutzers zeigt ausschließlich Daten der neuen Filiale, sofern Filialrecht gesetzt ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-033", @@ -566,7 +598,8 @@ "tracelinks": "SyRS-002, SyRS-019", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Lizenz LicenseGuids.OpenIDConnectAuthentication kann sich nicht per Microsoft-Login anmelden (AuthenticatorFactory.GetFromOpenIdConnectAuth lehnt ab).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-034", @@ -583,7 +616,8 @@ "tracelinks": "SyRS-020, SwRS-039", "konsolidierung": "nein", "pruefidee": "Serverstart mit alter DB-Version führt alle ausstehenden ScriptMethod-Skripte in Versionsreihenfolge aus und protokolliert sie als angewendet (DBUpdate-Tabelle), sodass ein erneuter Start sie nicht wiederholt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-035", @@ -600,7 +634,8 @@ "tracelinks": "SyRS-021, SwRS-040", "konsolidierung": "Kandidat: StRS-026 (WebOffer-Annahme erzeugt ebenfalls automatisch einen Order-Beleg über einen separaten Web-Workflow; beide Mechanismen könnten im Zielsystem zu einem einheitlichen „Web-zu-Auftrag\"-Baustein konsolidiert werden)", "pruefidee": "Kunde mit Checker-Rolle gibt Warenkorb frei, Kunde mit Orderer-Rolle bestellt final → im ERP-System entsteht ein Order-Beleg mit übereinstimmender Bestellnummer.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-036", @@ -618,7 +653,8 @@ "tracelinks": "SyRS-002, SwRS-002", "konsolidierung": "nein", "pruefidee": "Mitarbeiter mit hinterlegter OpenIdConnectSubjectIdentifier meldet sich per Microsoft-Login an und erhält gültiges c-entron-Ticket; Mitarbeiter ohne Verknüpfung wird abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-037", @@ -636,7 +672,8 @@ "tracelinks": "SyRS-022, SwRS-041", "konsolidierung": "nein", "pruefidee": "Datei, die 4-mal mit Exception fehlschlägt, wird beim 5. Lauf übersprungen (Blacklist); erfolgreich verarbeitete Datei wird nicht erneut heruntergeladen (OrigFileName-Duplikatsprüfung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-038", @@ -654,7 +691,8 @@ "tracelinks": "SyRS-008, SwRS-018", "konsolidierung": "nein", "pruefidee": "Vertrag mit RMM-Pflichtartikel und nicht erreichbarem Riverbird-Dienst erzeugt keine Rechnung, sondern eine protokollierte Fehlermeldung; Vertrag ohne RMM-Bezug wird termingerecht regulär abgerechnet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -671,7 +709,8 @@ "tracelinks": "StRS-001, StRS-002", "konsolidierung": "nein", "pruefidee": "Für eine Stichprobe von 10 rechtebehafteten Funktionen: Aufruf ohne Recht über Legacy-Webservice UND über modernen Controller muss beide Male abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -689,7 +728,8 @@ "tracelinks": "StRS-003, StRS-033, StRS-036", "konsolidierung": "nein", "pruefidee": "Aufruf mit abgelaufenem Ticket wird abgelehnt; Ticket wird bei aktiver Nutzung automatisch verlängert (RefreshTicketExpireDate), sofern die Verlängerung ≥5 Minuten beträgt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -707,7 +747,8 @@ "tracelinks": "StRS-003", "konsolidierung": "nein", "pruefidee": "Sicherheitsreview/Penetrationstest: Offline-Angriffsresistenz des gespeicherten Passwort-Hashes bei angenommener DB-Kompromittierung bewerten; Prüfen, ob >N fehlgeschlagene native Logins in Folge aktuell keine Sperre auslösen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -723,7 +764,8 @@ "tracelinks": "StRS-003", "konsolidierung": "nein", "pruefidee": "Direkter SQL-Zugriff auf die Password-Manager-Tabelle zeigt ausschließlich verschlüsselte Werte (ValueEncryptedString), kein Klartext.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -740,7 +782,8 @@ "tracelinks": "StRS-004, StRS-006", "konsolidierung": "nein", "pruefidee": "Löschversuch eines Kunden mit einer offenen Rechnung wird abgelehnt; nach Ausgleich/Stornierung aller offenen Vorgänge gelingt die Löschung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -756,7 +799,8 @@ "tracelinks": "StRS-005", "konsolidierung": "nein", "pruefidee": "Auftrag über 500 wird zu Rechnung über 500 weitergeführt; Summe der Kreditlimit-Auslastung bleibt bei 500, nicht 1000.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -772,7 +816,8 @@ "tracelinks": "StRS-006", "konsolidierung": "nein", "pruefidee": "DSGVO-Löschanfrage für eine Kontaktperson mit verknüpften historischen Rechnungen: Rechnungen bleiben abrufbar, Kontaktdaten sind anonymisiert, Protokolleintrag ist vorhanden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -790,7 +835,8 @@ "tracelinks": "StRS-007, StRS-008, StRS-009, StRS-038", "konsolidierung": "nein", "pruefidee": "Ein neuer Belegtyp kann durch alleinige Implementierung einer SpecificLogic-Klasse (ohne Änderung an ReceiptBL selbst) am Forwarding-/Zustandsmechanismus teilnehmen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -807,7 +853,8 @@ "tracelinks": "StRS-005, StRS-007", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Negativbestandsrecht versucht eine Buchung ins Minus; Dialog zur Nachauthentifizierung eines berechtigten Kollegen erscheint und lässt bei korrekten Zugangsdaten die Buchung zu.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -823,7 +870,8 @@ "tracelinks": "StRS-011, StRS-012, StRS-013", "konsolidierung": "nein", "pruefidee": "Artikel mit offenen Aufträgen über Menge X: StockInOrder-Wert entspricht der Summe aller offenen, nicht stornierten Auftragspositionen zu diesem Zeitpunkt (Live-Berechnung, kein veralteter Cache-Wert).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -840,7 +888,8 @@ "tracelinks": "StRS-014, StRS-015, StRS-016", "konsolidierung": "nein", "pruefidee": "Bestellung über einen sehr hohen Wert kann von jedem Mitarbeiter mit Basisrecht ohne zusätzliche Freigabe angelegt werden (Ist-Zustand); zu klären, ob das Zielsystem eine Freigabeschwelle benötigt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -857,7 +906,8 @@ "tracelinks": "StRS-017, StRS-018, StRS-019", "konsolidierung": "nein", "pruefidee": "Steuersatzänderung mit Gültigkeitsdatum in der Zukunft wird auf einen heute erstellten Beleg noch nicht angewendet, auf einen mit zukünftigem Datum erstellten Beleg hingegen schon.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -874,7 +924,8 @@ "tracelinks": "StRS-020", "konsolidierung": "nein", "pruefidee": "Export eines Belegs ohne aufgelöstes Sachkonto in DATEV-ASCII-Format wird mit Fehlermeldung abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -892,7 +943,8 @@ "tracelinks": "StRS-021, StRS-022, StRS-023, StRS-024, StRS-025", "konsolidierung": "nein", "pruefidee": "Administrator ändert Geschäftszeiten und Prioritäts-Verzögerungszeit; neu erstellte Tickets übernehmen sofort die geänderte Fälligkeitsberechnung ohne Deployment.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -908,7 +960,8 @@ "tracelinks": "StRS-026, StRS-027", "konsolidierung": "nein", "pruefidee": "Zugriff auf einen bereits signierten oder abgelaufenen Signatur-Link wird abgelehnt; interner Benutzer ohne Dokumentenrecht kann testweise prüfen, ob SharedDocument-Verwaltungsfunktionen dennoch erreichbar sind (Sicherheitslückenverifikation).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-016", @@ -924,7 +977,8 @@ "tracelinks": "StRS-028", "konsolidierung": "nein", "pruefidee": "Fachbereichsbefragung: Wird im Tagesgeschäft überhaupt versucht, das „Projects\"-Modul zu nutzen, oder ist TicketProjects der etablierte Ersatz?", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-017", @@ -941,7 +995,8 @@ "tracelinks": "StRS-029, StRS-030", "konsolidierung": "Kandidat: Vereinheitlichung beider Benachrichtigungsmechanismen im Zielsystem sinnvoll, da fachlich ähnliche Aufgabe (Benutzer über Ereignis informieren) technisch zweimal unabhängig gelöst ist.", "pruefidee": "Ticketzuweisung eines Nexus-Nutzers löst ohne Seiten-Neuladen eine sichtbare Benachrichtigung aus; ein Systemfehlerlog wird nach der konfigurierten Aufbewahrungsdauer automatisch bereinigt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-018", @@ -957,7 +1012,8 @@ "tracelinks": "StRS-031", "konsolidierung": "nein", "pruefidee": "Zwei parallele Webservice-Instanzen versuchen gleichzeitig, denselben fälligen Report-Task auszuführen; nur eine Instanz führt ihn tatsächlich aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-019", @@ -974,7 +1030,8 @@ "tracelinks": "StRS-032, StRS-033", "konsolidierung": "nein", "pruefidee": "Code-Review/Testabdeckung: Für eine Stichprobe neuer BL-Methoden prüfen, ob die Filialfilterung korrekt implementiert wurde (Regressionsrisiko bei manuellem Muster).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-020", @@ -990,7 +1047,8 @@ "tracelinks": "StRS-034", "konsolidierung": "nein", "pruefidee": "Serverstart mit rückständiger DB-Version wendet fehlende Skripte in Reihenfolge an; erneuter Start führt keine bereits protokollierten Skripte erneut aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-021", @@ -1006,7 +1064,8 @@ "tracelinks": "StRS-035", "konsolidierung": "nein", "pruefidee": "Kunde mit nur Checker-Recht kann einen Warenkorb freigeben, aber nicht final bestellen; Kunde mit nur Orderer-Recht kann einen bereits freigegebenen Warenkorb final bestellen, nicht jedoch selbst freigeben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-022", @@ -1023,7 +1082,8 @@ "tracelinks": "StRS-037", "konsolidierung": "nein", "pruefidee": "Neue EDI-Datei eines bislang fehlerhaften Lieferanten wird nach dem 4. Fehlversuch nicht mehr automatisch verarbeitet, erscheint aber weiterhin im Fehlerprotokoll für manuelle Nachbearbeitung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-023", @@ -1040,7 +1100,8 @@ "tracelinks": "StRS-020, StRS-019", "konsolidierung": "nein", "pruefidee": "Testdatensatz ohne Sachkonto wird beim DATEV-Export zurückgewiesen, nicht stillschweigend mit Kontonummer „0\" exportiert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-024", @@ -1056,7 +1117,8 @@ "tracelinks": "StRS-007", "konsolidierung": "nein", "pruefidee": "Lasttest: Belegsuche über einen sehr großen Datenbestand mit vielen aktiven Filtern bleibt unter 5 Minuten oder liefert einen kontrollierten Timeout-Fehler statt eines unkontrollierten Absturzes.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-025", @@ -1072,7 +1134,8 @@ "tracelinks": "StRS-036", "konsolidierung": "nein", "pruefidee": "Lasttest/Penetrationstest: Wiederholte Login- oder API-Anfragen in kurzer Folge werden aktuell nicht gedrosselt oder blockiert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-026", @@ -1088,7 +1151,8 @@ "tracelinks": "StRS-036", "konsolidierung": "nein", "pruefidee": "Cross-Origin-Testanfrage von einer beliebigen, nicht autorisierten Domain wird aktuell nicht durch CORS-Header blockiert (nur durch fehlendes gültiges Ticket).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-027", @@ -1105,7 +1169,8 @@ "tracelinks": "StRS-021", "konsolidierung": "nein", "pruefidee": "Webservice-Aufruf mit Accept-Language: en-US liefert englische Fehlermeldungstexte; WPF-Client ohne Sprachumschaltung zeigt deutsche Texte als Standard.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-028", @@ -1121,7 +1186,8 @@ "tracelinks": "-", "konsolidierung": "nein", "pruefidee": "Linux-Deployment des Webservice: Sub-Webservice-Funktionalität ist nicht nutzbar (bekannte, dokumentierte Einschränkung); HTTPS-Konfiguration erfordert manuelles Editieren von WebServiceConfig.xml.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-029", @@ -1138,7 +1204,8 @@ "tracelinks": "-", "konsolidierung": "nein", "pruefidee": "Build mit absichtlich eingefügter, nicht in der Ausnahmeliste (WarningsNotAsErrors) enthaltener Warnung schlägt fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-030", @@ -1154,7 +1221,8 @@ "tracelinks": "-", "konsolidierung": "nein", "pruefidee": "Derselbe Ende-zu-Ende-Test wird zweimal an unterschiedlichen Tagen ohne Codeänderung ausgeführt und liefert identische *.actual.txt-Ergebnisse.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -1171,7 +1239,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Neues Recht wird mit ID 20800174 (nächste freie ID) angelegt; bestehende Legacy-Rechte-IDs bleiben unverändert funktionsfähig.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-002", @@ -1188,7 +1257,8 @@ "tracelinks": "SyRS-002", "konsolidierung": "nein", "pruefidee": "Mitarbeiter mit geänderter Microsoft-E-Mail-Adresse, aber unveränderter Object-ID, kann sich weiterhin erfolgreich per Microsoft-Login anmelden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-003", @@ -1205,7 +1275,8 @@ "tracelinks": "SyRS-002", "konsolidierung": "nein", "pruefidee": "Zwei aufeinanderfolgende Ticket-Ausstellungen für dasselbe Gerät erzeugen unterschiedliche Ticket-IDs.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-004", @@ -1222,7 +1293,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "Kandidat: Die 7+ unabhängigen Implementierungen desselben Filial-Filter-Musters sind Kandidaten für eine gemeinsame, zentrale Filterkomponente im Zielsystem.", "pruefidee": "Für jeden der 7 Belegtypen: Mitarbeiter mit „nur eigene Filiale\"-Recht kann Beleg einer fremden Filiale weder anzeigen noch bearbeiten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-005", @@ -1238,7 +1310,8 @@ "tracelinks": "SyRS-003", "konsolidierung": "nein", "pruefidee": "Codereview bestätigt Fehlen eines Salts in der Passwortprüfungsroutine; Migrationsstrategie für bestehende Passwort-Hashes beim Wechsel auf einen neuen Algorithmus ist zu klären.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-006", @@ -1254,7 +1327,8 @@ "tracelinks": "SyRS-002", "konsolidierung": "nein", "pruefidee": "Mit einer Standard-Authenticator-App (z. B. Microsoft Authenticator) generierter TOTP-Code wird vom System akzeptiert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-007", @@ -1270,7 +1344,8 @@ "tracelinks": "SyRS-004", "konsolidierung": "nein", "pruefidee": "Feld ValueEncryptedString in der Datenbank enthält für jeden gespeicherten Eintrag ausschließlich Chiffretext.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-008", @@ -1288,7 +1363,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "nein", "pruefidee": "Account mit zwei AccountTypeToAccount-Einträgen (Customer, Supplier) referenziert korrekt sowohl eine AccountCustomer- als auch eine AccountSupplier-Zusatzzeile.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-009", @@ -1304,7 +1380,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "nein", "pruefidee": "Kunde mit einer offenen Rechnung, aber ohne Tickets/Verträge, kann nicht gelöscht werden; nach Ausgleich der Rechnung (und weiterhin keinen Tickets/Verträgen) gelingt die Löschung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-010", @@ -1320,7 +1397,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "nein", "pruefidee": "Kunde wird gesperrt (IsLocked=true); zugehöriger, technisch korrekter Web-Account-Login schlägt danach fehl, obwohl Benutzername/Passwort unverändert korrekt sind.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -1336,7 +1414,8 @@ "tracelinks": "SyRS-007", "konsolidierung": "nein", "pruefidee": "Nach DSGVO-Löschanfrage für eine Kontaktperson sind Telefonnummer/E-Mail geleert und ein Kommentar mit Mitarbeiter- und Datumsangabe ist an der Kontaktperson sichtbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -1352,7 +1431,8 @@ "tracelinks": "SyRS-019", "konsolidierung": "nein", "pruefidee": "Kunde mit CustomerToBranch-Einträgen für Filiale A und B besitzt zwei unterschiedliche BookKeepingNumber-Werte, die unabhängig voneinander als „exportiert\" markiert werden können.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-013", @@ -1369,7 +1449,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Neu angelegter, unvollständiger Beleg besitzt State=Active, keinen separaten „Draft\"-Wert; Belegvorlage besitzt eine negative Number.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-014", @@ -1385,7 +1466,8 @@ "tracelinks": "SyRS-006", "konsolidierung": "nein", "pruefidee": "Kunde mit CreditLimitCalculationKind=1 und Limit knapp unter Nettobetrag eines neuen Belegs löst Dialog aus; bei Brutto-Modus mit identischem Limit und Bruttobetrag ebenso.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-015", @@ -1401,7 +1483,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Zwei parallele Belegerstellungen im selben Nummernkreis erhalten unterschiedliche, nicht zwingend lückenlos aufeinanderfolgende Nummern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-016", @@ -1418,7 +1501,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Absichtlich asymmetrisch konfigurierter Testfall (A erlaubt Forward zu B, B erlaubt Forward-From A nicht) führt beim Anwendungsstart zu einer ApplicationException.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-017", @@ -1434,7 +1518,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Rechnung wird storniert → neue Version mit State=Canceled liegt vor, alte Version bleibt in Versionstabelle abrufbar; anschließender Versuch, dieselbe Rechnung zusätzlich in eine Gutschrift zu überführen, ist weiterhin separat möglich (kein automatischer Zusammenhang).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-018", @@ -1450,7 +1535,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Vertrag ohne RMM-Artikelreferenzen wird bei RMM-Dienstausfall trotzdem regulär abgerechnet; Vertrag mit RMM-Artikelreferenzen wird bei demselben Ausfall mit Fehlermeldung abgebrochen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-019", @@ -1466,7 +1552,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Beleg mit gemischten Steuersätzen (19%/7%) zeigt zwei separate ReceiptVatPrices-Einträge mit korrekten Einzelsummen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-020", @@ -1482,7 +1569,8 @@ "tracelinks": "SyRS-010", "konsolidierung": "nein", "pruefidee": "Artikel mit PurchasePrice knapp über einer TillEk-Grenze erhält eine andere (niedrigere) Aufschlagsstufe als ein sonst identischer Artikel knapp darunter.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-021", @@ -1498,7 +1586,8 @@ "tracelinks": "SyRS-010", "konsolidierung": "nein", "pruefidee": "Mietartikel wird mit ScanBarcode=true und ChangeStock=true zu speichern versucht → beide Flags werden beim Speichern automatisch auf false gesetzt, Log-Eintrag wird erzeugt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-022", @@ -1515,7 +1604,8 @@ "tracelinks": "SyRS-019", "konsolidierung": "nein", "pruefidee": "Filiale mit zwei verknüpften Warenhäusern zeigt bei Neubuchung automatisch das als IsDefault markierte Warenhaus vor.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-023", @@ -1531,7 +1621,8 @@ "tracelinks": "SyRS-011", "konsolidierung": "nein", "pruefidee": "Bestellung über 10 Stück, Lieferschein über 12 Stück gebucht → InStock wird auf maximal 10 begrenzt, InDelivery zeigt 12.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-024", @@ -1547,7 +1638,8 @@ "tracelinks": "SyRS-011", "konsolidierung": "nein", "pruefidee": "Sonderkondition mit abgelaufenem ValidUntil wird bei der Preisberechnung eines Bestellvorschlags nicht mehr berücksichtigt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-025", @@ -1563,7 +1655,8 @@ "tracelinks": "SyRS-011", "konsolidierung": "Kandidat: Fehlender dedizierter Retourenbelegtyp könnte im Zielsystem als eigener, klarer benannter Belegtyp konsolidiert werden, statt die Gutschrift semantisch zu überladen.", "pruefidee": "Lieferantengutschrift über 5 Stück eines Artikels, aus einer Lieferantenrechnung weitergeführt und gebucht, reduziert den Lagerbestand dieses Artikels um 5 Stück.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-026", @@ -1579,7 +1672,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Rechnung mit gesetzter, aber sonst unvollständiger Pflichtfeldlage (z. B. fehlende Verkäufer-USt-ID) wird im Bestandssystem trotzdem als XRechnung generiert (Negativtest, zeigt die Lücke).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-027", @@ -1595,7 +1689,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "SEPA-Export eines Mandats ohne AuthorizationDate schlägt kontrolliert fehl; ein über einen direkten API-Aufruf (unter Umgehung der WPF-Maske) mit ungültiger IBAN gespeicherter Kunde sollte idealerweise beim SEPA-Export ebenfalls fehlschlagen (aktuell laut Befund nicht sichergestellt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-028", @@ -1611,7 +1706,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "nein", "pruefidee": "Testposition ohne auflösbares Sachkonto wird unabhängig vom gewählten Exportformat (DATEV vs. Abacus) gleichermaßen abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-029", @@ -1627,7 +1723,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Zwei ValueAddedTax-Datensätze mit identischem NextTaxRate-Wert lösen bei Auflösung eine ResultException statt eines stillen Fallbacks aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-030", @@ -1643,7 +1740,8 @@ "tracelinks": "SyRS-014", "konsolidierung": "nein", "pruefidee": "Versuch, einen noch von aktiven Tickets referenzierten Status zu löschen, wird abgelehnt; nach Umsetzung aller betroffenen Tickets auf einen anderen Status gelingt die Löschung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-031", @@ -1659,7 +1757,8 @@ "tracelinks": "SyRS-014", "konsolidierung": "nein", "pruefidee": "Mitarbeiter mit vollem EDIT_TIME-Recht kann eine bereits rechnungszugeordnete Zeitbuchung nicht ändern (Sperre greift trotz vollem Recht).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-032", @@ -1675,7 +1774,8 @@ "tracelinks": "SyRS-015", "konsolidierung": "nein", "pruefidee": "Dokument mit 2 von 3 erteilten internen Freigaben wird noch nicht an den Kunden versendet; nach der 3. Freigabe erfolgt der Versand automatisch; eine Ablehnung durch einen der drei Mitarbeiter blockiert den Versand dauerhaft (State EmployeeAcceptanceDeclined).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-033", @@ -1691,7 +1791,8 @@ "tracelinks": "SyRS-014", "konsolidierung": "nein", "pruefidee": "Ticket überschreitet Eskalationsstufe 1 → Management erhält Eskalations-Mail, ResponsiblePerson-Feld des Tickets bleibt unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-034", @@ -1707,7 +1808,8 @@ "tracelinks": "SyRS-017", "konsolidierung": "nein", "pruefidee": "Kunde mit Vorlage bestehend nur aus „-\" erhält beim Mailversand einen leeren Textkörper, nicht den globalen Standardtext.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-035", @@ -1723,7 +1825,8 @@ "tracelinks": "SyRS-018", "konsolidierung": "nein", "pruefidee": "Installation mit nur ProjectManagement-Lizenz kann Report-Task mit ausschließlich Projektmitgliedern als Empfänger ausführen; Versuch mit einem Nicht-Projektmitglied als zusätzlichem Empfänger wird abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-036", @@ -1739,7 +1842,8 @@ "tracelinks": "SyRS-019", "konsolidierung": "nein", "pruefidee": "Codereview: Alle Stellen, die BranchI3D direkt (statt über IsBranchEqual) vergleichen, werden auf korrekte Behandlung von 0/null/-2 geprüft.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-037", @@ -1756,7 +1860,8 @@ "tracelinks": "SyRS-019", "konsolidierung": "Kandidat: Die parallel existierenden Logging-Mechanismen (AnlageLog, ARTIKlog, ungenutztes ChangeLog, SharedDocumentLog, HelpdeskHistory) sind Kandidaten für eine Konsolidierung im Zielsystem.", "pruefidee": "Für das Zielsystem klären: Soll ein zentraler, generischer Audit-Trail-Mechanismus (wie hier vorbereitet) aktiv genutzt werden, statt die vorhandenen, modulspezifischen Einzel-Logs (AnlageLog, ARTIKlog, ChangeLog ungenutzt) weiterzuführen?", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-038", @@ -1772,7 +1877,8 @@ "tracelinks": "SyRS-019", "konsolidierung": "nein", "pruefidee": "Mengenänderung durch einen Kunden im WebOffer-Kontext wird im Beleg-Log mit dem Systembenutzer, nicht mit einem beliebigen internen Mitarbeiter, protokolliert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-039", @@ -1788,7 +1894,8 @@ "tracelinks": "SyRS-020", "konsolidierung": "nein", "pruefidee": "Absichtlich fehlschlagendes Testskript mit Skriptnummer außerhalb der Ausnahmeliste blockiert den Serverstart; ein Skript mit einer der vier Ausnahme-Nummern blockiert den Start bei Fehlschlag nicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-040", @@ -1804,7 +1911,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "nein", "pruefidee": "Warenkorb im Zustand ReadyForCheck kann von einem Benutzer mit nur Orderer-Recht (ohne Checker-Recht) nicht final bestellt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-041", @@ -1821,7 +1929,8 @@ "tracelinks": "SyRS-022", "konsolidierung": "nein", "pruefidee": "Neue Partial-Class-Datei für einen fiktiven Testlieferanten wird hinzugefügt und in ApplyDistriToCentron verdrahtet, ohne bestehende Lieferanten-Testfälle (z. B. Herweck, Alltron) zu verändern oder zu brechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-042", @@ -1837,7 +1946,8 @@ "tracelinks": "SyRS-022", "konsolidierung": "nein", "pruefidee": "Datei mit genau 3 protokollierten Exceptions wird noch einmal verarbeitet; Datei mit 4 protokollierten Exceptions wird beim nächsten Lauf übersprungen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-043", @@ -1854,7 +1964,8 @@ "tracelinks": "SyRS-017", "konsolidierung": "nein", "pruefidee": "Kontaktperson mit blacklisteter Domain (z. B. gmail.com) wird bei aktivierter Domain-Erkennung NICHT automatisch einem bestehenden Kundenkonto zugeordnet; ein E-Mail-Versand an dieselbe Adresse wird davon unabhängig durchgeführt (kein Versandstopp).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-044", @@ -1870,7 +1981,8 @@ "tracelinks": "SyRS-017", "konsolidierung": "Kandidat: Gemeinsame Nutzung des Prozessmotors mit anderen Modulen ist als Wiederverwendung positiv zu werten, sollte im Zielsystem beibehalten werden.", "pruefidee": "Neue Verarbeitungsregel für ein Postfachprofil wird ausschließlich über die allgemeine Workflow-Konfiguration angelegt, ohne Codeänderung; verschlüsselte Zugangsdaten (Password/ClientSecret) sind in der Datenbank nicht im Klartext einsehbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-045", @@ -1887,6 +1999,7 @@ "tracelinks": "SyRS-025, SyRS-026", "konsolidierung": "nein", "pruefidee": "Sicherheitsreview: Wiederholte automatisierte Login-Versuche gegen /jwt/login bzw. den klassischen Login-Endpunkt werden aktuell durch keine serverseitige Drosselung verlangsamt.", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182943_v3.4.0-1407/_meta/anforderungen.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182943_v3.4.0-1407/_meta/anforderungen.md index d27eb4a5..409e039f 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182943_v3.4.0-1407/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182943_v3.4.0-1407/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 2 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 109 (96,5 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (43 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 110 von 113 mit Tracelinks (97,3 %) | diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182945_v3.4.0-1d0e/Protokoll.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182945_v3.4.0-1d0e/Protokoll.md index d5e744da..b18323d2 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182945_v3.4.0-1d0e/Protokoll.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182945_v3.4.0-1d0e/Protokoll.md @@ -97,6 +97,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -133,6 +135,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 2 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 145 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -150,6 +156,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (73 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 145 von 145 mit Tracelinks (100,0 %) | ## V1b-Block F–J, fünf Messpunkte diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182945_v3.4.0-1d0e/_meta/anforderungen.json b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182945_v3.4.0-1d0e/_meta/anforderungen.json index d095d772..91d21c93 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182945_v3.4.0-1d0e/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182945_v3.4.0-1d0e/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-001, SyRS-002, SyRS-003", "konsolidierung": "nein", "pruefidee": "Einem Benutzer wird eine Gruppe mit Recht X zugewiesen und wieder entzogen; das System muss den Zugriff auf X unmittelbar entsprechend gewähren/verweigern, ohne dass eine benutzerindividuelle Rechteänderung möglich ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -33,7 +34,8 @@ "tracelinks": "SyRS-004, SyRS-005, SyRS-006, SyRS-007", "konsolidierung": "nein", "pruefidee": "Ein Auftrag mit Menge 10 wird in zwei Lieferscheinen zu je 5 Stück weiterverarbeitet; das System muss danach eine offene Menge von 0 ausweisen und beide Lieferscheine korrekt referenzieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -51,7 +53,8 @@ "tracelinks": "SyRS-008, SyRS-009, SyRS-010, SyRS-011", "konsolidierung": "nein", "pruefidee": "Eine bereits stornierte Rechnung wird ein zweites Mal storniert; das System muss dies mit einer Fehlermeldung ablehnen und den Beleg unverändert lassen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -69,7 +72,8 @@ "tracelinks": "SyRS-012, SyRS-013", "konsolidierung": "nein", "pruefidee": "Für einen Beleg mit gesetzter Leitweg-ID muss die erzeugte PDF eine eingebettete, gegen das XRechnung-Schema valide XML-Datei enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -87,7 +91,8 @@ "tracelinks": "SyRS-014, SyRS-015, SyRS-016, SyRS-017", "konsolidierung": "nein", "pruefidee": "Ein Vertrag mit automatischer Verlängerung und 3 Monaten Kündigungsfrist muss sich exakt dann nicht weiter verlängern, wenn innerhalb der Frist eine Kündigung erfasst wurde, sonst aber automatisch fortlaufen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -105,7 +110,8 @@ "tracelinks": "SyRS-018, SyRS-019", "konsolidierung": "nein", "pruefidee": "Ein Vertrag ohne konfigurierte RMM-Artikelreferenz muss bei nicht erreichbarem RMM-Dienst trotzdem erfolgreich fakturiert werden; ein Vertrag mit konfigurierter Referenz muss die Fakturierung mit Fehlermeldung abbrechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -123,7 +129,8 @@ "tracelinks": "SyRS-020, SyRS-021", "konsolidierung": "Kandidat: Account/AccountCustomer vs. Customer/CustomerBase bilden dieselbe fachliche Funktion (Kundenstammdaten) redundant ab.", "pruefidee": "Eine über das Account-Modell angelegte Kundenadresse muss in allen abhängigen Belegen (Angebot, Rechnung) konsistent auffindbar sein, ohne Datenpflege im Legacy-Modell zu erfordern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -141,7 +148,8 @@ "tracelinks": "SyRS-022", "konsolidierung": "nein", "pruefidee": "Ein Kunde mit Kreditlimit 1000 € und bereits 900 € offenem Volumen erhält beim Anlegen eines weiteren Belegs über 200 € einen Warnhinweis, kann den Speichervorgang aber nach Bestätigung abschließen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -159,7 +167,8 @@ "tracelinks": "SyRS-023, SyRS-024, SyRS-025, SyRS-026", "konsolidierung": "nein", "pruefidee": "Ein Web-Account ohne hinterlegte Sonderpreise muss im Shop-Bereich eine leere Artikelliste erhalten; ein vollständiger Warenkorb-Freigabeprozess muss zu einem im Backend auffindbaren ReceiptOrder führen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -177,7 +186,8 @@ "tracelinks": "SyRS-027, SyRS-028", "konsolidierung": "nein", "pruefidee": "Nach erfolgter Kundensignatur eines Web-Angebots muss im Backend automatisiert ein neuer Auftrag mit Bezug zum ursprünglichen Angebot existieren, ohne dass ein Mitarbeiter eingreift.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -195,7 +205,8 @@ "tracelinks": "SyRS-029, SyRS-030, SyRS-031, SyRS-032, SyRS-033", "konsolidierung": "nein", "pruefidee": "Beim Anlegen eines Auftrags für einen Artikel mit Bestand 0 darf der Bestand unverändert 0 bleiben; erst beim Erzeugen des zugehörigen Lieferscheins muss der Bestand entsprechend abgebucht werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -212,7 +223,8 @@ "tracelinks": "SyRS-034", "konsolidierung": "nein", "pruefidee": "Für einen Artikel mit EAN-Treffer bei mindestens zwei externen Quellen müssen beide Preise gleichzeitig in der Preismatrix sichtbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -230,7 +242,8 @@ "tracelinks": "SyRS-035, SyRS-036, SyRS-037", "konsolidierung": "nein", "pruefidee": "Beim Anlegen eines Tickets aus einer Vorlage mit hinterlegter Checkliste muss das neue Ticket automatisch eine eigenständige (nicht die Vorlagen-)Kopie dieser Checkliste besitzen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -248,7 +261,8 @@ "tracelinks": "SyRS-038, SyRS-039", "konsolidierung": "nein", "pruefidee": "Ein Zeiteintrag, der bereits einer Rechnung zugewiesen wurde, darf über keinen UI- oder API-Pfad mehr löschbar oder auf ein anderes Ticket verschiebbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-015", @@ -266,7 +280,8 @@ "tracelinks": "SyRS-040, SyRS-041", "konsolidierung": "nein", "pruefidee": "Eine bereits erfolgreich importierte EDI-Datei darf bei erneutem Vorhandensein auf dem Lieferanten-Server nicht ein zweites Mal verarbeitet werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-016", @@ -284,7 +299,8 @@ "tracelinks": "SyRS-042, SyRS-043", "konsolidierung": "Kandidat: Legacy-REST-Dienst (ICentronRestService) und moderne v1-Controller bilden für viele Domänen dieselbe fachliche Funktion doppelt ab.", "pruefidee": "Ein gültiges Ticket, das über den Legacy-REST-Login erzeugt wurde, muss auch von einem modernen v1-Controller-Endpunkt akzeptiert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-017", @@ -302,7 +318,8 @@ "tracelinks": "SyRS-044, SyRS-045", "konsolidierung": "nein", "pruefidee": "Beim Erreichen des lizenzierten Sitzplatzlimits muss ein weiterer Loginversuch mit definierter Fehlermeldung (LicenseMaximumReached) abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-018", @@ -320,7 +337,8 @@ "tracelinks": "SyRS-046, SyRS-047", "konsolidierung": "nein", "pruefidee": "Nach drei aufeinanderfolgenden Änderungen an einem Auftrag müssen alle drei vorherigen Zustände vollständig aus den Versionstabellen rekonstruierbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-019", @@ -339,7 +357,8 @@ "tracelinks": "SyRS-048, SyRS-049, SyRS-050, SyRS-051", "konsolidierung": "nein", "pruefidee": "Ein Penetrationstest muss zeigen, dass gestohlene Passwort-Hashes aus der Datenbank ohne unverhältnismäßigen Aufwand nicht auf Klartextpasswörter rückführbar sind (aktuell widerlegt: unsalted SHA-1 ist mit Standard-Hardware in kurzer Zeit brechbar).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-020", @@ -357,7 +376,8 @@ "tracelinks": "SyRS-052, SyRS-053, SyRS-054, SyRS-055", "konsolidierung": "nein", "pruefidee": "Eine Folgeiteration muss für jeden dieser Bereiche mindestens ein vollständiges StRS/SyRS/SwRS-Tripel mit PRIMÄR-Beleg liefern, bevor er als vollständig spezifiziert gilt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -374,7 +394,8 @@ "tracelinks": "StRS-001; SwRS-001, SwRS-002", "konsolidierung": "nein", "pruefidee": "Ein Benutzer ohne jede Gruppenmitgliedschaft muss bei jeder Rechteprüfung als \"kein Recht\" bewertet werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -392,7 +413,8 @@ "tracelinks": "StRS-001; SwRS-003, SwRS-004", "konsolidierung": "nein", "pruefidee": "Ein modifizierter Client, der eine UI-Rechteprüfung umgeht und die Operation dennoch sendet, muss serverseitig mit einer Rechte-Fehlermeldung abgewiesen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -409,7 +431,8 @@ "tracelinks": "StRS-001; SwRS-005", "konsolidierung": "nein", "pruefidee": "Eine neue Belegtyp-Konfiguration, die nur ShowRight und die SQL-Fragmente setzt, muss ohne weiteren Code automatisch die \"nur eigene Filiale\"-Einschränkung respektieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -426,7 +449,8 @@ "tracelinks": "StRS-002; SwRS-006, SwRS-007", "konsolidierung": "nein", "pruefidee": "Für jeden der sieben Kernbelegtypen (Angebot, Auftrag, Lieferschein, Rechnung, Gutschrift, Abholschein, Vertrag) muss eine generische Statusabfrage denselben Wertebereich liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -444,7 +468,8 @@ "tracelinks": "StRS-002; SwRS-008, SwRS-009", "konsolidierung": "nein", "pruefidee": "Ein Auftrag mit 10 Stück, von denen 4 bereits in einen Lieferschein weiterverarbeitet wurden, darf im Auftrag nicht auf eine Menge kleiner 4 reduzierbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -461,7 +486,8 @@ "tracelinks": "StRS-002; SwRS-010", "konsolidierung": "nein", "pruefidee": "Zwei parallele Sitzungen laden denselben Beleg; Sitzung A speichert erfolgreich, Sitzung B muss beim nachfolgenden Speichern eine Konfliktmeldung erhalten, keine stille Überschreibung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -478,7 +504,8 @@ "tracelinks": "StRS-002, StRS-018; SwRS-011", "konsolidierung": "nein", "pruefidee": "Ein zweimaliges Neuspeichern derselben Belegversion ohne Versionserhöhung darf keinen zusätzlichen Eintrag in der Versionstabelle erzeugen; eine echte Versionserhöhung muss genau einen neuen Eintrag erzeugen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -494,7 +521,8 @@ "tracelinks": "StRS-003; SwRS-012, SwRS-013", "konsolidierung": "nein", "pruefidee": "Eine bereits an die Buchhaltung exportierte Rechnung darf nicht stornierbar sein; das System muss dies mit definierter Fehlermeldung ablehnen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -511,7 +539,8 @@ "tracelinks": "StRS-003; SwRS-014, SwRS-015", "konsolidierung": "nein", "pruefidee": "Für eine Rechnung mit drei Positionen zu 19% MwSt müssen die Einzelsteuerbeträge unrundungsbedingt vom \"Summe-dann-runden\"-Ergebnis abweichen können; das System muss das Summenrundungsergebnis liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -528,7 +557,8 @@ "tracelinks": "StRS-003; SwRS-016", "konsolidierung": "nein", "pruefidee": "Ein Auftrag mit zwei nicht stornierten Anzahlungsrechnungen über je 100 € muss bei Erstellung der Schlussrechnung automatisch zwei Positionen zu je -100 € enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -545,7 +575,8 @@ "tracelinks": "StRS-003; SwRS-017", "konsolidierung": "nein", "pruefidee": "Bei zwei gleichzeitigen Rechnungsanlagen dürfen niemals zwei Rechnungen dieselbe Nummer erhalten; bei einem konfigurierten Intervall > 1 muss geprüft werden, ob dies für Rechnungen bewusst ausgeschlossen ist (aktuell nicht codeseitig erzwungen - siehe Hypothesen.md).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -562,7 +593,8 @@ "tracelinks": "StRS-004; SwRS-018", "konsolidierung": "nein", "pruefidee": "Eine Rechnung mit gesetzter Leitweg-ID muss eine eingebettete XML mit Konformitätsstufe XRechnung erhalten; eine Rechnung ohne Leitweg-ID eine im ZUGFeRD-Comfort-Profil.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -578,7 +610,8 @@ "tracelinks": "StRS-004; SwRS-019", "konsolidierung": "nein", "pruefidee": "Eine PDF-Lieferantenrechnung mit eingebetteter, gültiger ZUGFeRD-XML muss ohne manuelles Zutun in eine EDI-Rechnungsstruktur überführt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -594,7 +627,8 @@ "tracelinks": "StRS-005; SwRS-020", "konsolidierung": "nein", "pruefidee": "Ein monatlicher Vertrag mit Abrechnung zum 31. eines Monats muss im Folgemonat korrekt auf den letzten Tag des kürzeren Monats fallen (z. B. 28./29. Februar).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -611,7 +645,8 @@ "tracelinks": "StRS-005; SwRS-021, SwRS-022", "konsolidierung": "nein", "pruefidee": "Ein Vertrag mit aktivierter Restübertragung und 5 nicht genutzten Kontingentstunden der Vorperiode muss in der Folgeperiode 5 zusätzliche verfügbare Stunden ausweisen; bei deaktivierter Übertragung nicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-016", @@ -628,7 +663,8 @@ "tracelinks": "StRS-005; SwRS-023, SwRS-024", "konsolidierung": "nein", "pruefidee": "Ein Vertrag, dessen erste Kündigungsfrist bereits verstrichen ist, muss beim nächsten Lauf des Dienstes sein Vertragsende automatisch um ein Verlängerungsintervall fortschreiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-017", @@ -645,7 +681,8 @@ "tracelinks": "StRS-005; SwRS-025", "konsolidierung": "nein", "pruefidee": "Ein fälliger Vertrag darf ohne ausdrückliche Aktion eines Mitarbeiters (Assistent oder API-Aufruf) keine Rechnung erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-018", @@ -661,7 +698,8 @@ "tracelinks": "StRS-006; SwRS-026", "konsolidierung": "nein", "pruefidee": "Bei simuliertem RMM-Dienstausfall muss die Rechnungserstellung für einen Vertrag ohne RMM-Konfiguration erfolgreich abgeschlossen werden, für einen Vertrag mit RMM-Konfiguration hingegen mit definierter Fehlermeldung abbrechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-019", @@ -677,7 +715,8 @@ "tracelinks": "StRS-006; SwRS-027", "konsolidierung": "nein", "pruefidee": "Ein Zählerstand-Delta von 50 bei einer Freimenge von 100 muss eine Abrechnungsmenge von 0 ergeben, nicht -50.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-020", @@ -694,7 +733,8 @@ "tracelinks": "StRS-007; SwRS-028, SwRS-029", "konsolidierung": "Kandidat: siehe StRS-007", "pruefidee": "Für eine Stichprobe von 50 Bestandskunden muss geprüft werden, ob Account- und Customer-Datensatz widersprüchliche Werte (z. B. unterschiedliche Kreditlimits) enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-021", @@ -712,7 +752,8 @@ "tracelinks": "StRS-007; SwRS-030", "konsolidierung": "nein", "pruefidee": "Ein Beleg, der programmatisch mit der I3D eines bekannt gesperrten Kunden gespeichert wird (ohne über die UI-Auswahlliste zu gehen), darf im Zielsystem nicht erfolgreich gespeichert werden können.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-022", @@ -728,7 +769,8 @@ "tracelinks": "StRS-008; SwRS-031", "konsolidierung": "nein", "pruefidee": "Ein Speichervorgang, der das Kreditlimit überschreitet, ohne Bestätigungs-Flag muss abgelehnt werden (Dialog-Flag gesetzt), mit gesetztem Bestätigungs-Flag muss er erfolgreich sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-023", @@ -745,7 +787,8 @@ "tracelinks": "StRS-009; SwRS-032, SwRS-033", "konsolidierung": "nein", "pruefidee": "Ein per Entra-ID angemeldeter Nutzer muss anschließend denselben Rechte- und Lizenzstatus erhalten wie ein klassisch angemeldeter Nutzer mit identischem c-entron-Konto.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-024", @@ -761,7 +804,8 @@ "tracelinks": "StRS-009; SwRS-034", "konsolidierung": "nein", "pruefidee": "Nach Abschluss eines WebCart-Freigabeprozesses muss im WPF-Client ein neuer Auftrag mit der Herkunftsmarkierung \"WebServices\" sichtbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-025", @@ -778,7 +822,8 @@ "tracelinks": "StRS-009; SwRS-035", "konsolidierung": "nein", "pruefidee": "Ein Kunde ohne Recht zur freien Prioritätswahl darf im Erstellungsdialog keine Prioritätsauswahl angeboten bekommen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-026", @@ -794,7 +839,8 @@ "tracelinks": "StRS-009; SwRS-036", "konsolidierung": "nein", "pruefidee": "Ein Web-Account, dessen verknüpfter Kunde keine aktiven Sonderpreise besitzt, muss im Shop eine leere Artikelliste erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-027", @@ -810,7 +856,8 @@ "tracelinks": "StRS-010; SwRS-037", "konsolidierung": "nein", "pruefidee": "Ein Zugriffsversuch mit abgelaufenem Token muss mit der Meldung \"Die Signierungsanfrage ist bereits abgelaufen.\" abgewiesen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-028", @@ -826,7 +873,8 @@ "tracelinks": "StRS-010; SwRS-038", "konsolidierung": "nein", "pruefidee": "Direkt nach Abschluss einer Kundensignatur eines Web-Angebots muss ohne weitere Aktion ein neuer, referenzierender Auftrag im System existieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-029", @@ -842,7 +890,8 @@ "tracelinks": "StRS-011; SwRS-039", "konsolidierung": "nein", "pruefidee": "Für einen Artikel mit vier unterschiedlichen Preisebenen muss `GetPrice(Customer)` je nach zugeordneter Preisliste des Kunden die korrekte Ebene zurückliefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-030", @@ -860,7 +909,8 @@ "tracelinks": "StRS-011; SwRS-040, SwRS-041", "konsolidierung": "nein", "pruefidee": "Zwei parallele Aufträge über denselben, knappen Artikelbestand müssen beide erfolgreich anlegbar sein (keine Blockade durch Reservierung); erst beim Versuch, beide vollständig auszuliefern, darf der zweite Lieferschein mangels Bestand fehlschlagen bzw. eine Warnung erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-031", @@ -876,7 +926,8 @@ "tracelinks": "StRS-011; SwRS-042", "konsolidierung": "nein", "pruefidee": "Für eine ausgelieferte Seriennummer muss sich sowohl die ursprüngliche Lieferantenlieferung als auch der finale Kundenlieferschein eindeutig ermitteln lassen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-032", @@ -893,7 +944,8 @@ "tracelinks": "StRS-011; SwRS-043", "konsolidierung": "nein", "pruefidee": "Eine Bestandsbuchung für Lager A darf den Bestand von Lager B für denselben Artikel nicht verändern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-033", @@ -909,7 +961,8 @@ "tracelinks": "StRS-011; SwRS-044", "konsolidierung": "nein", "pruefidee": "Ein Artikel, dessen aktueller Bestand unter den konfigurierten Mindestbestand fällt, muss in der Nachbestell-Vorschlagsliste erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-034", @@ -926,7 +979,8 @@ "tracelinks": "StRS-012; SwRS-045, SwRS-046", "konsolidierung": "nein", "pruefidee": "Bei simulierter Verzögerung einer einzelnen externen Quelle darf die Gesamtladezeit der Preismatrix nicht um mehr als die Verzögerung dieser einen Quelle steigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-035", @@ -942,7 +996,8 @@ "tracelinks": "StRS-013; SwRS-047", "konsolidierung": "nein", "pruefidee": "Eine Änderung der Einstellung \"geschlossener Status\" muss unmittelbar beeinflussen, welcher Status-Datensatz als abschließend behandelt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-036", @@ -958,7 +1013,8 @@ "tracelinks": "StRS-013; SwRS-048", "konsolidierung": "nein", "pruefidee": "Eine Änderung an einem Checklistenpunkt eines konkreten Tickets darf die Vorlage nicht verändern; ein neues Ticket aus derselben Vorlage muss weiterhin den ursprünglichen Zustand erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-037", @@ -975,7 +1031,8 @@ "tracelinks": "StRS-013; SwRS-049", "konsolidierung": "nein", "pruefidee": "Ein neues Ticket aus einer Vorlage mit zwei hinterlegten Checklisten muss unmittelbar nach Anlage exakt zwei eigenständige, dem Ticket zugeordnete Checklisten enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-038", @@ -993,7 +1050,8 @@ "tracelinks": "StRS-014; SwRS-050, SwRS-051", "konsolidierung": "nein", "pruefidee": "Ein bereits einer Rechnung zugewiesener Zeiteintrag muss über jeden Zugriffsweg (UI und direkter API-Aufruf) gegen Löschen/Verschieben geschützt sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-039", @@ -1009,7 +1067,8 @@ "tracelinks": "StRS-014; SwRS-052", "konsolidierung": "nein", "pruefidee": "Ein Mitarbeiter mit Recht zur Zeitbearbeitung, aber ohne DELETE_HELPDESK_SIGNATURE, darf eine vorhandene Signatur nicht entfernen können.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-040", @@ -1027,7 +1086,8 @@ "tracelinks": "StRS-015; SwRS-053, SwRS-054", "konsolidierung": "nein", "pruefidee": "Eine EDI-Datei, die viermal in Folge einen Verarbeitungsfehler erzeugt, darf beim fünften Durchlauf nicht mehr erneut versucht werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-041", @@ -1044,7 +1104,8 @@ "tracelinks": "StRS-015; SwRS-055", "konsolidierung": "nein", "pruefidee": "Ein frisch importierter EDI-Datensatz muss vor expliziter Mitarbeiterbestätigung als \"zu prüfen\" gekennzeichnet in der entsprechenden Übersicht erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-042", @@ -1061,7 +1122,8 @@ "tracelinks": "StRS-016; SwRS-056", "konsolidierung": "Kandidat: siehe StRS-016", "pruefidee": "Für eine Stichprobe von fünf Fachdomänen (z. B. Accounts, Orders, Contracts) muss geprüft werden, ob dieselbe Operation sowohl über den Legacy-REST-Dienst als auch über einen v1-Controller erreichbar ist (Konsolidierungsindiz).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-043", @@ -1078,7 +1140,8 @@ "tracelinks": "StRS-016; SwRS-057, SwRS-058", "konsolidierung": "nein", "pruefidee": "Ein 35 Minuten inaktives Standard-Ticket darf nach dem nächsten Bereinigungslauf für keine weitere Anfrage mehr akzeptiert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-044", @@ -1095,7 +1158,8 @@ "tracelinks": "StRS-017; SwRS-059", "konsolidierung": "nein", "pruefidee": "Beim Erreichen der lizenzierten Sitzplatzanzahl muss ein zusätzlicher Loginversuch eines neuen Benutzers mit LicenseMaximumReached abgelehnt werden, während bereits angemeldete Benutzer unbeeinträchtigt bleiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-045", @@ -1112,7 +1176,8 @@ "tracelinks": "StRS-017; SwRS-060", "konsolidierung": "nein", "pruefidee": "Bei simuliert nicht erreichbarem Lizenzserver nach Ablauf des lokalen Lizenz-Caches muss eine lizenzpflichtige Funktion als nicht verfügbar behandelt werden, nicht als uneingeschränkt nutzbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-046", @@ -1129,7 +1194,8 @@ "tracelinks": "StRS-018; SwRS-061", "konsolidierung": "nein", "pruefidee": "Für einen beliebigen Beleg und einen beliebigen Signaturvorgang muss unabhängig voneinander eine vollständige, zeitlich geordnete Ereignisliste abrufbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-047", @@ -1147,7 +1213,8 @@ "tracelinks": "StRS-018; SwRS-062", "konsolidierung": "nein", "pruefidee": "Ein Migrationsskript, das eine Spalte nur an der Basistabelle, nicht aber an der Versionstabelle ergänzt, muss im Review/CI als Regelverstoß erkennbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-048", @@ -1165,7 +1232,8 @@ "tracelinks": "StRS-019; SwRS-063", "konsolidierung": "nein", "pruefidee": "Ein Sicherheitsaudit muss nachweisen, dass gestohlene Passwort-Hashes im Zielsystem selbst mit spezialisierter Hardware nicht in praktikabler Zeit auf Klartext rückführbar sind.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-049", @@ -1182,7 +1250,8 @@ "tracelinks": "StRS-019; SwRS-064", "konsolidierung": "nein", "pruefidee": "Eine Inspektion der Datenbanktabelle SupplierEdiConfigurations darf im Zielsystem keine im Klartext lesbaren Passwörter enthalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-050", @@ -1199,7 +1268,8 @@ "tracelinks": "StRS-019; SwRS-065", "konsolidierung": "nein", "pruefidee": "Ein automatisiertes Skript mit 1000 aufeinanderfolgenden fehlgeschlagenen Login-Versuchen in kurzer Zeit muss im Zielsystem nach einer definierten Schwelle blockiert werden; eine Cross-Origin-Anfrage von einer nicht autorisierten Domain muss vom Browser aufgrund der CORS-Policy verweigert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-051", @@ -1216,7 +1286,8 @@ "tracelinks": "StRS-019; SwRS-066", "konsolidierung": "nein", "pruefidee": "Ein DEBUG-Build, der eine E-Mail an eine echte, nicht-interne Adresse sendet, darf diese niemals tatsächlich erreichen, sondern muss sie automatisch an die Test-Adresse umleiten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-052", @@ -1233,7 +1304,8 @@ "tracelinks": "StRS-020; SwRS-067", "konsolidierung": "nein", "pruefidee": "Ein Mahnlauf ohne zugrundeliegende überfällige Rechnung muss mit definierter Fehlermeldung abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-053", @@ -1250,7 +1322,8 @@ "tracelinks": "StRS-020; SwRS-068", "konsolidierung": "nein", "pruefidee": "Ein Benutzer ohne ADMINISTRATE_ALL_EMPLOYEES-Recht darf keine Mitarbeiterstammdaten anderer Personen ändern können.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-054", @@ -1267,7 +1340,8 @@ "tracelinks": "StRS-020; SwRS-069", "konsolidierung": "nein", "pruefidee": "Eine über die Web-Service-BL abgerufene Kennzahl muss mit der im WPF-Client angezeigten Kennzahl für denselben Zeitraum übereinstimmen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-055", @@ -1284,7 +1358,8 @@ "tracelinks": "StRS-020; SwRS-070", "konsolidierung": "nein", "pruefidee": "Ein Benutzer mit ProductionManagement-Lizenz, aber ohne jegliches sonstiges Fachrecht, darf im Zielsystem keinen Produktionsauftrag anlegen können, solange kein explizites Recht dafür vergeben wurde.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -1301,7 +1376,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Zwei aufeinanderfolgende Rechteprüfungen desselben Benutzers innerhalb einer Sitzung dürfen nur eine Datenbankabfrage auslösen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-002", @@ -1317,7 +1393,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Ein Architektur-Review muss bestätigen, dass keine neue Funktion eine direkte Benutzer-Recht-Relation einführt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-003", @@ -1333,7 +1410,8 @@ "tracelinks": "SyRS-002", "konsolidierung": "nein", "pruefidee": "Ein direkter BL-Aufruf ohne vorherige UI-Prüfung muss bei fehlendem Recht dieselbe Fehlermeldung liefern wie ein UI-gesteuerter Aufruf.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-004", @@ -1350,7 +1428,8 @@ "tracelinks": "SyRS-002", "konsolidierung": "nein", "pruefidee": "Nach Entzug eines Rechts während einer laufenden Nexus-Sitzung muss die nächste geschützte Anfrage das entzogene Recht nicht mehr gewähren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-005", @@ -1366,7 +1445,8 @@ "tracelinks": "SyRS-003", "konsolidierung": "nein", "pruefidee": "Eine neue Konfigurationsklasse ohne Override der drei Properties darf standardmäßig keine Einschränkung anwenden (sicherer Default zu prüfen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-006", @@ -1383,7 +1463,8 @@ "tracelinks": "SyRS-004", "konsolidierung": "nein", "pruefidee": "Für jeden der sieben Belegtypen muss `State` denselben Enum-Typ mit denselben drei Werten liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-007", @@ -1399,7 +1480,8 @@ "tracelinks": "SyRS-004", "konsolidierung": "nein", "pruefidee": "Ein Beleg mit ungültiger Versionsnummer muss unabhängig vom Belegtyp mit derselben generischen Fehlermeldung abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-008", @@ -1417,7 +1499,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "nein", "pruefidee": "Ein aus einem Angebot erzeugter Auftrag muss eine eigene, vom Angebot verschiedene Belegnummer besitzen, aber identische Empfänger-/Zahlungsbedingungsdaten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-009", @@ -1434,7 +1517,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "nein", "pruefidee": "Eine Position mit 4 von 10 Stück weiterverarbeitet darf im Ursprungsbeleg nicht auf weniger als 4 Stück reduzierbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-010", @@ -1451,7 +1535,8 @@ "tracelinks": "SyRS-006", "konsolidierung": "nein", "pruefidee": "Ein zweiter Speicherversuch mit dem vor der ersten Speicherung gültigen Guid muss nach erfolgreicher erster Speicherung fehlschlagen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -1468,7 +1553,8 @@ "tracelinks": "SyRS-007", "konsolidierung": "nein", "pruefidee": "Ein Neuspeichern der aktuellen (nicht erhöhten) Belegversion darf keinen zusätzlichen Eintrag in der Versionstabelle erzeugen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -1484,7 +1570,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Für jede der sechs Ausschlussbedingungen einzeln muss ein Testfall existieren, der die Stornierung mit der jeweils spezifischen Fehlermeldung ablehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-013", @@ -1501,7 +1588,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Nach einer Stornierung müssen sowohl die stornierte neue Version als auch die unveränderte alte Version über die Versionshistorie abrufbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-014", @@ -1518,7 +1606,8 @@ "tracelinks": "SyRS-009", "konsolidierung": "nein", "pruefidee": "Für drei Positionen mit rundungskritischen Nettobeträgen zum selben Steuersatz muss der ausgewiesene Steuerbetrag der Summenrundung, nicht der Summe der Einzelrundungen entsprechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-015", @@ -1534,7 +1623,8 @@ "tracelinks": "SyRS-009", "konsolidierung": "nein", "pruefidee": "Ein Speicherversuch mit ExclusiveOfVAT=true, inländischem Kunden und leerer USt-IdNr. muss abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-016", @@ -1550,7 +1640,8 @@ "tracelinks": "SyRS-010", "konsolidierung": "nein", "pruefidee": "Für einen Auftrag mit einer stornierten und einer aktiven Anzahlungsrechnung darf nur die aktive als Negativposition in die Schlussrechnung übernommen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-017", @@ -1566,7 +1657,8 @@ "tracelinks": "SyRS-011", "konsolidierung": "nein", "pruefidee": "Unter simulierter hoher Parallelität (100 gleichzeitige Speichervorgänge) dürfen keine zwei Belege dieselbe Nummer erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-018", @@ -1582,7 +1674,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Eine Rechnung mit leerer Leitweg-ID muss stets im Comfort/EN16931-Profil erzeugt werden, unabhängig von anderen Feldern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-019", @@ -1598,7 +1691,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "nein", "pruefidee": "Eine PDF mit ZUGFeRD-XML unter untypischem Dateinamen muss dennoch korrekt erkannt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-020", @@ -1614,7 +1708,8 @@ "tracelinks": "SyRS-014", "konsolidierung": "nein", "pruefidee": "Ein monatlicher Vertrag mit Startdatum 31. Januar muss im Februar korrekt auf den 28./29. Februar fallen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-021", @@ -1630,7 +1725,8 @@ "tracelinks": "SyRS-015", "konsolidierung": "nein", "pruefidee": "Für einen Vertrag mit fünf aufeinanderfolgenden Abrechnungsperioden müssen fünf eigenständige, korrekt datierte Buchungssätze existieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-022", @@ -1646,7 +1742,8 @@ "tracelinks": "SyRS-015", "konsolidierung": "nein", "pruefidee": "Ein Vertrag mit deaktivierter Restübertragung darf trotz ungenutztem Vorperioden-Kontingent in der Folgeperiode keinen erhöhten Saldo ausweisen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-023", @@ -1662,7 +1759,8 @@ "tracelinks": "SyRS-016", "konsolidierung": "nein", "pruefidee": "Ein Vertrag mit 3 Monaten Erstkündigungsfrist und 1 Monat Folgekündigungsfrist muss in der zweiten Verlängerungsperiode die kürzere Frist anwenden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-024", @@ -1678,7 +1776,8 @@ "tracelinks": "SyRS-016", "konsolidierung": "nein", "pruefidee": "Nach Ablauf eines Tages ohne manuelles Eingreifen muss jeder fällige Vertrag automatisch neu bewertet worden sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-025", @@ -1695,7 +1794,8 @@ "tracelinks": "SyRS-017", "konsolidierung": "nein", "pruefidee": "Ohne expliziten API-Aufruf oder Assistenten-Durchlauf dürfen über Nacht keine neuen Vertragsrechnungen entstehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-026", @@ -1711,7 +1811,8 @@ "tracelinks": "SyRS-018", "konsolidierung": "nein", "pruefidee": "Bei simuliertem RMM-Fehler müssen in einem Testlauf beide Zweige (Abbruch bei Erwartung, Fortsetzung ohne Erwartung) reproduzierbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-027", @@ -1727,7 +1828,8 @@ "tracelinks": "SyRS-019", "konsolidierung": "nein", "pruefidee": "Ein Zählerdelta unterhalb der Freimenge muss stets eine Abrechnungsmenge von 0 ergeben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-028", @@ -1744,7 +1846,8 @@ "tracelinks": "SyRS-020", "konsolidierung": "nein", "pruefidee": "Eine Änderung an kommerziellen Daten (Kreditlimit) darf keine Änderung an den Adressstammdaten erfordern und umgekehrt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-029", @@ -1760,7 +1863,8 @@ "tracelinks": "SyRS-020", "konsolidierung": "Kandidat: SwRS-028 (Account/AccountCustomer) und SwRS-029 (Customer/CustomerBase) bilden dieselbe fachliche Funktion redundant ab.", "pruefidee": "Ein Datenabgleich zwischen Account- und Customer-Modell für dieselbe Kunden-I3D muss auf Divergenzen geprüft werden, bevor eine Migration erfolgt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-030", @@ -1778,7 +1882,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "nein", "pruefidee": "Ein direkter, nicht über die UI-Auswahlliste geführter Speicherversuch mit der I3D eines gesperrten Kunden muss im Zielsystem ebenfalls fehlschlagen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-031", @@ -1794,7 +1899,8 @@ "tracelinks": "SyRS-022", "konsolidierung": "nein", "pruefidee": "Ein Speichervorgang mit Limitüberschreitung ohne Bestätigungs-Flag muss den Dialog auslösen und nicht persistieren; mit Bestätigungs-Flag muss er erfolgreich persistieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-032", @@ -1810,7 +1916,8 @@ "tracelinks": "SyRS-023", "konsolidierung": "nein", "pruefidee": "Ein per OIDC angemeldeter und ein klassisch angemeldeter Benutzer mit identischem Konto müssen identische Folgeanfragen-Berechtigung erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-033", @@ -1826,7 +1933,8 @@ "tracelinks": "SyRS-023", "konsolidierung": "nein", "pruefidee": "Ein SSO-Login eines nicht in c-entron registrierten Entra-ID-Kontos muss abgelehnt werden, da kein passendes c-entron-Ticket erzeugt werden kann.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-034", @@ -1842,7 +1950,8 @@ "tracelinks": "SyRS-024", "konsolidierung": "nein", "pruefidee": "Ein aus dem WebCart erzeugter Auftrag muss die Herkunftsmarkierung \"WebServices\" tragen und ansonsten den regulären Auftragsprozess durchlaufen können.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-035", @@ -1858,7 +1967,8 @@ "tracelinks": "SyRS-025", "konsolidierung": "nein", "pruefidee": "Bei deaktivierter Prioritätswahl darf im Erstellungsdialog kein Prioritäts-Auswahlfeld sichtbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-036", @@ -1874,7 +1984,8 @@ "tracelinks": "SyRS-026", "konsolidierung": "nein", "pruefidee": "Ein Web-Account ohne Sonderpreise muss eine leere, nicht eine Standard-Artikelliste erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-037", @@ -1890,7 +2001,8 @@ "tracelinks": "SyRS-027", "konsolidierung": "nein", "pruefidee": "Ein Zugriff auf ein bereits signiertes Dokument über denselben Token muss mit \"Dokument wurde bereits signiert.\" abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-038", @@ -1906,7 +2018,8 @@ "tracelinks": "SyRS-028", "konsolidierung": "nein", "pruefidee": "Direkt nach Abschluss der Signatur muss ein neuer Auftrag mit Referenz zum ursprünglichen Angebot existieren, ohne weitere Aktion.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-039", @@ -1922,7 +2035,8 @@ "tracelinks": "SyRS-029", "konsolidierung": "nein", "pruefidee": "Zwei Kunden mit unterschiedlicher Preislistenzuordnung müssen für denselben Artikel unterschiedliche Preise erhalten, sofern die Ebenen unterschiedliche Werte tragen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-040", @@ -1939,7 +2053,8 @@ "tracelinks": "SyRS-030", "konsolidierung": "nein", "pruefidee": "Ein neuer Belegtyp mit UpdatesStock()=>false darf unter keinen Umständen eine Bestandsänderung auslösen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-041", @@ -1955,7 +2070,8 @@ "tracelinks": "SyRS-030", "konsolidierung": "nein", "pruefidee": "Das Anlegen eines zweiten Auftrags über einen bereits vollständig durch einen ersten Auftrag \"gebundenen\" Artikelbestand darf nicht technisch verhindert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-042", @@ -1971,7 +2087,8 @@ "tracelinks": "SyRS-031", "konsolidierung": "nein", "pruefidee": "Für eine ausgelieferte Seriennummer muss eine einzelne Abfrage sowohl Wareneingang als auch finalen Lieferschein liefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-043", @@ -1987,7 +2104,8 @@ "tracelinks": "SyRS-032", "konsolidierung": "nein", "pruefidee": "Eine Buchung in Lager A darf den in Lager B ausgewiesenen Bestand desselben Artikels nicht verändern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-044", @@ -2003,7 +2121,8 @@ "tracelinks": "SyRS-033", "konsolidierung": "nein", "pruefidee": "Ein Artikel mit ausreichend eingehender Ware zur Deckung des offenen Bedarfs darf trotz niedrigem Ist-Bestand kein Nachbestellsignal auslösen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-045", @@ -2019,7 +2138,8 @@ "tracelinks": "SyRS-034", "konsolidierung": "nein", "pruefidee": "Bei künstlich verzögerter einzelner Quelle darf die Gesamtladezeit nicht um mehr als die Verzögerung dieser einen Quelle steigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-046", @@ -2035,7 +2155,8 @@ "tracelinks": "SyRS-034", "konsolidierung": "nein", "pruefidee": "Eine Änderung am gemeinsamen Abfrageverhalten muss konsistent bei allen drei Distributoren wirksam werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-047", @@ -2051,7 +2172,8 @@ "tracelinks": "SyRS-035", "konsolidierung": "nein", "pruefidee": "Eine Änderung der Einstellung muss unmittelbar beeinflussen, welcher Status als abschließend behandelt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-048", @@ -2067,7 +2189,8 @@ "tracelinks": "SyRS-036", "konsolidierung": "nein", "pruefidee": "Nach zehnfacher Anwendung derselben Vorlage muss die Vorlage selbst unverändert und zehn eigenständige Instanzen vorhanden sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-049", @@ -2083,7 +2206,8 @@ "tracelinks": "SyRS-037", "konsolidierung": "nein", "pruefidee": "Ein Ticket aus einer Vorlage mit drei Checklisten und zwei Formularen muss exakt drei eigenständige Checklisten und zwei Formularkopien erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-050", @@ -2099,7 +2223,8 @@ "tracelinks": "SyRS-038", "konsolidierung": "nein", "pruefidee": "Ein Löschversuch eines einer Rechnung zugewiesenen Zeiteintrags muss auch mit vorhandenem DELETE_HELPDESK_TIMER-Recht fehlschlagen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-051", @@ -2116,7 +2241,8 @@ "tracelinks": "SyRS-038", "konsolidierung": "Kandidat: HelpdeskCustomerBL-Prüfung und TicketDetailViewModel-Prüfung bilden dieselbe fachliche Regel redundant ab.", "pruefidee": "Eine Änderung der Geschäftsregel (z. B. Erweiterung um einen vierten Belegtyp) darf im Zielsystem nur an einer Stelle im Code erforderlich sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-052", @@ -2132,7 +2258,8 @@ "tracelinks": "SyRS-039", "konsolidierung": "nein", "pruefidee": "Ein Mitarbeiter mit EDIT_TIME, aber ohne DELETE_HELPDESK_SIGNATURE, darf keine Signatur entfernen können.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-053", @@ -2148,7 +2275,8 @@ "tracelinks": "SyRS-040", "konsolidierung": "nein", "pruefidee": "Eine neu bereitgestellte EDI-Datei muss spätestens 30 Minuten nach Bereitstellung importiert sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-054", @@ -2164,7 +2292,8 @@ "tracelinks": "SyRS-040", "konsolidierung": "nein", "pruefidee": "Eine Datei mit vier protokollierten Fehlversuchen darf beim fünften Durchlauf nicht erneut heruntergeladen/verarbeitet werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-055", @@ -2180,7 +2309,8 @@ "tracelinks": "SyRS-041", "konsolidierung": "nein", "pruefidee": "Für jeden der sieben unterstützten Formate muss ein frisch importierter Testdatensatz das Flag NeedsUserValidation=true tragen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-056", @@ -2196,7 +2326,8 @@ "tracelinks": "SyRS-042", "konsolidierung": "nein", "pruefidee": "Ein neuer v2-Controller-Ordner muss automatisch, ohne manuelle Routen-Konfiguration, unter `/v2/...` erreichbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-057", @@ -2212,7 +2343,8 @@ "tracelinks": "SyRS-043", "konsolidierung": "nein", "pruefidee": "Ein Monitoring-Connector-Ticket muss nach 5, ein Standard-Ticket nach 30 Minuten Inaktivität ablaufen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-058", @@ -2229,7 +2361,8 @@ "tracelinks": "SyRS-043", "konsolidierung": "nein", "pruefidee": "Ein Ticket, das genau nach Ablauf, aber vor dem nächsten Bereinigungslauf verwendet wird, darf im Zielsystem nicht mehr akzeptiert werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-059", @@ -2245,7 +2378,8 @@ "tracelinks": "SyRS-044", "konsolidierung": "nein", "pruefidee": "Bei fehlgeschlagener Lizenzprüfung darf unter keinen Umständen ein neues Ticket erzeugt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-060", @@ -2261,7 +2395,8 @@ "tracelinks": "SyRS-045", "konsolidierung": "nein", "pruefidee": "Ein Web-Service-Start ohne gültige Lizenz muss fehlschlagen, nicht nur eingeschränkt funktionieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-061", @@ -2277,7 +2412,8 @@ "tracelinks": "SyRS-046", "konsolidierung": "nein", "pruefidee": "Für einen abgelehnten Signaturvorgang muss ein Log-Eintrag mit dem spezifischen Ablehnungs-Ereigniscode existieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-062", @@ -2294,7 +2430,8 @@ "tracelinks": "SyRS-047", "konsolidierung": "nein", "pruefidee": "Ein CI-Check muss ein Migrationsskript ablehnen, das eine Spalte nur an Basis-, nicht aber an Versionstabelle ergänzt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-063", @@ -2310,7 +2447,8 @@ "tracelinks": "SyRS-048", "konsolidierung": "nein", "pruefidee": "Nach Migration muss ein Login mit einem noch unsalted-SHA1-gehashten Bestandspasswort funktionieren und dabei automatisch auf das neue Verfahren umgestellt werden (transparente Migration).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-064", @@ -2326,7 +2464,8 @@ "tracelinks": "SyRS-049", "konsolidierung": "nein", "pruefidee": "Ein direkter Blick in die Datenbanktabelle darf im Zielsystem keine lesbaren Passwörter zeigen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-065", @@ -2343,7 +2482,8 @@ "tracelinks": "SyRS-050", "konsolidierung": "nein", "pruefidee": "Eine Anfrage von einer nicht auf der Allowlist stehenden Origin muss im Zielsystem browserseitig durch die CORS-Policy blockiert werden; wiederholte Login-Fehlversuche müssen nach einer definierten Schwelle gedrosselt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-066", @@ -2359,7 +2499,8 @@ "tracelinks": "SyRS-051", "konsolidierung": "nein", "pruefidee": "Ein DEBUG-Build-Testlauf darf unter keinen Umständen eine echte externe Zahlung, SMS oder einen echten Webhook an ein Drittsystem auslösen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-067", @@ -2375,7 +2516,8 @@ "tracelinks": "SyRS-052", "konsolidierung": "nein", "pruefidee": "Eine Änderung der Mahnstufenlogik darf keine Regressionen in der allgemeinen Rechnungserstellung verursachen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-068", @@ -2392,7 +2534,8 @@ "tracelinks": "SyRS-053", "konsolidierung": "nein", "pruefidee": "Ein Zugriff auf Mitarbeiterstammdaten ohne das erforderliche Recht muss abgelehnt werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-069", @@ -2409,7 +2552,8 @@ "tracelinks": "SyRS-054", "konsolidierung": "nein", "pruefidee": "Eine über die Web-Service-BL abgerufene Kennzahl muss für denselben Zeitraum mit der im WPF-Client angezeigten Kennzahl übereinstimmen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-070", @@ -2426,6 +2570,7 @@ "tracelinks": "SyRS-055", "konsolidierung": "nein", "pruefidee": "Ein Benutzer mit ProductionManagement-Lizenz, aber gezielt entzogenem Produktionsrecht, darf im Zielsystem keinen Zugriff mehr auf das Modul erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182945_v3.4.0-1d0e/_meta/anforderungen.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182945_v3.4.0-1d0e/_meta/anforderungen.md index 97c39a44..813c0abe 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182945_v3.4.0-1d0e/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182945_v3.4.0-1d0e/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 2 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 145 (100,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (73 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 145 von 145 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182946_v3.4.0-6bab/Protokoll.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182946_v3.4.0-6bab/Protokoll.md index 4e0484a4..4073e610 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182946_v3.4.0-6bab/Protokoll.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182946_v3.4.0-6bab/Protokoll.md @@ -97,6 +97,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -127,6 +129,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 238 (99,6 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -144,6 +150,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **verletzt** – 1 ohne Beleg: SwRS-012 | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (84 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 239 von 239 mit Tracelinks (100,0 %) | ## V1b-Block F–J, fünf Messpunkte diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182946_v3.4.0-6bab/_meta/anforderungen.json b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182946_v3.4.0-6bab/_meta/anforderungen.json index b33b0ccc..80505259 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182946_v3.4.0-6bab/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182946_v3.4.0-6bab/_meta/anforderungen.json @@ -14,7 +14,8 @@ "tracelinks": "SyRS-001, SyRS-002, SyRS-009", "konsolidierung": "nein", "pruefidee": "Für Testbenutzer ohne Lizenz X, aber mit Recht X prüfen, dass Modul X nicht im Menü erscheint; nach Lizenzvergabe erscheint es.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -31,7 +32,8 @@ "tracelinks": "SyRS-006, SwRS-006", "konsolidierung": "nein", "pruefidee": "Deployment auf Ubuntu/Debian gemäß Anleitung durchführen; verifizieren, dass Sub-Web-Services-Funktion fehlt und Zertifikatspasswort im Klartext in WebServiceConfig.xml steht.", - "qm": "Übertragbarkeit" + "qm": "Übertragbarkeit", + "uebernahme": "" }, { "id": "StRS-003", @@ -47,7 +49,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Prüfen, dass eine Web-Service-Installer-Version ohne gleichzeitiges Client-Update installierbar ist und die DB-Versionsprüfung kompatible Client-Versionen zulässt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -64,7 +67,8 @@ "tracelinks": "StRS-008, SyRS-004", "konsolidierung": "nein", "pruefidee": "Start mit ungültiger/abgelaufener Lizenzdatei erzwingen; keine DB-Verbindung/kein Skript wird ausgeführt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -80,7 +84,8 @@ "tracelinks": "SyRS-009, SyRS-010", "konsolidierung": "nein", "pruefidee": "Benutzer ohne AiAssistant-Lizenz öffnet persönliche Einstellungen -> KI-Einstellungsseite fehlt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -98,7 +103,8 @@ "tracelinks": "SyRS-009, SyRS-017, SyRS-020, SwRS-015, SwRS-018", "konsolidierung": "Kandidat: rechtebasierte Zugriffsmuster wiederholen sich domänenübergreifend (StRS-013, StRS-023) - gemeinsames Rechte-Rahmenwerk, kein Duplikat der Fachlogik.", "pruefidee": "Entzug eines Rechts von der Gruppe eines Nutzers führt unmittelbar zur Blockade der zugehörigen Aktion.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -116,7 +122,8 @@ "tracelinks": "SyRS-013, SyRS-014, SyRS-015, SwRS-004", "konsolidierung": "nein", "pruefidee": "Nutzer mit AuthentificationKind=WindowsAuth kann sich nicht per Basic-Login anmelden, wenn AD nicht konfiguriert ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -133,7 +140,8 @@ "tracelinks": "StRS-001, StRS-004, SyRS-005", "konsolidierung": "nein", "pruefidee": "Erreichen des Sitzplatzlimits erzeugt DefaultMessageCodes.LicenseMaximumReached und verweigert Ticketerstellung.", - "qm": "Sicherheit/Autorisierung" + "qm": "Sicherheit/Autorisierung", + "uebernahme": "" }, { "id": "StRS-009", @@ -150,7 +158,8 @@ "tracelinks": "SyRS-016, SyRS-018, SwRS-016", "konsolidierung": "nein", "pruefidee": "Nutzer mit aktivierter 2FA und abgelaufener TwoFactorValidDurationInDays muss erneut den zweiten Faktor bestätigen.", - "qm": "Sicherheit/Vertraulichkeit" + "qm": "Sicherheit/Vertraulichkeit", + "uebernahme": "" }, { "id": "StRS-010", @@ -167,7 +176,8 @@ "tracelinks": "StRS-042, SyRS-021", "konsolidierung": "Kandidat: überschneidet sich mit StRS-042 (Nexus Self-Service-Login) - gleiches Login-/Rechtemodell, unterschiedliche Frontends (WPF-Legacy-Webzugriff vs. Nexus-Portal).", "pruefidee": "Login mit korrektem Passwort, aber IsCustomerActiveAndNotLocked=false, schlägt fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -184,7 +194,8 @@ "tracelinks": "SyRS-022, SwRS-006", "konsolidierung": "nein", "pruefidee": "Nach AddRightToRightGroup existiert ein neuer AppRightLog-Datensatz mit Kind=AddRightToGroup.", - "qm": "Sicherheit/Nachweisbarkeit" + "qm": "Sicherheit/Nachweisbarkeit", + "uebernahme": "" }, { "id": "StRS-012", @@ -201,7 +212,8 @@ "tracelinks": "SyRS-026, SyRS-032", "konsolidierung": "nein", "pruefidee": "Vertriebsmitarbeiter mit Recht CREATE_NEW_OFFER kann ein Angebot für einen bestehenden Kunden anlegen und speichern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -219,7 +231,8 @@ "tracelinks": "SyRS-028, SyRS-029", "konsolidierung": "Analoges Muster in Purchasing-Domäne: StRS-027 (Beschaffungs-Belegkette). Gleiches technische Forwarding-Konzept (ReceiptBL), unterschiedliche Fachdomäne.", "pruefidee": "Versuch, einen Lieferschein direkt als Ursprung eines neuen Auftrags zu erzeugen, wird durch ValidateReceiptForwarding abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -236,7 +249,8 @@ "tracelinks": "SyRS-030", "konsolidierung": "nein", "pruefidee": "Speichern eines Angebots mit einer Position unter Mindestpreis ohne Berechtigung löst Dialog aus und darf nicht persistiert werden.", - "qm": "Sicherheit" + "qm": "Sicherheit", + "uebernahme": "" }, { "id": "StRS-015", @@ -253,7 +267,8 @@ "tracelinks": "SyRS-030", "konsolidierung": "nein", "pruefidee": "Auftrag mit WEEE-pflichtiger Position ohne WEEE-Nummer darf nicht gespeichert werden; identische Position im Angebot darf gespeichert werden.", - "qm": "Sicherheit/Compliance" + "qm": "Sicherheit/Compliance", + "uebernahme": "" }, { "id": "StRS-016", @@ -270,7 +285,8 @@ "tracelinks": "SyRS-025, SwRS-018, StRS-018", "konsolidierung": "nein", "pruefidee": "Stornierter Auftrag fließt nicht mehr in Kreditlimitsumme ein; Kunde mit Mahnstufe über Schwellwert erhält keinen neuen Auftrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-017", @@ -287,7 +303,8 @@ "tracelinks": "SyRS-034, SyRS-036, SwRS-025, SwRS-026, SwRS-027", "konsolidierung": "nein", "pruefidee": "Stornierung einer exportierten Rechnung/Barrechnung/nicht-letzten Vertragsrechnung -> Fehler; gültige offene Rechnung -> Erfolg.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-018", @@ -304,7 +321,8 @@ "tracelinks": "SwRS-028, SwRS-029, SwRS-030, StRS-016", "konsolidierung": "nein", "pruefidee": "Mahnlauf für Rechnung mit DunningLevel=Level3 -> ArgumentException; Mahnlauf über zwei Kunden -> ArgumentException.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-019", @@ -322,7 +340,8 @@ "tracelinks": "SyRS-053, SwRS-046, SwRS-048", "konsolidierung": "nein", "pruefidee": "Testrechnung mit Δ>3,00 exportieren -> Export schlägt fehl; Reverse-Charge-Position -> Kategorie \"AE\" mit §13b-Text.", - "qm": "Compliance" + "qm": "Compliance", + "uebernahme": "" }, { "id": "StRS-020", @@ -339,7 +358,8 @@ "tracelinks": "SyRS-071, SwRS-070", "konsolidierung": "Kandidat: RMM-Datenherkunft überschneidet sich mit StRS-051 (Device-Domäne).", "pruefidee": "RMM-Service simuliert nicht erreichbar + Vertrag mit ContractArticleReferenzes -> automatische Rechnungserstellung schlägt fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-021", @@ -355,7 +375,8 @@ "tracelinks": "SyRS-024, SwRS-024", "konsolidierung": "nein", "pruefidee": "Benutzer mit \"nur eigene Filiale\"-Recht bearbeitet Rechnung anderer Filiale -> RightCheckFailed; Web-Account sieht Rechnung nie ein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-022", @@ -372,7 +393,8 @@ "tracelinks": "SyRS-037, SyRS-038", "konsolidierung": "nein", "pruefidee": "Neuer Account mit Kunden- UND Lieferantendaten anlegen -> ein Account-Datensatz mit zwei AccountTypeToAccount-Einträgen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-023", @@ -390,7 +412,8 @@ "tracelinks": "SwRS-031, SwRS-035", "konsolidierung": "Kandidat: gemeinsames Rechte-Rahmenwerk mit StRS-006.", "pruefidee": "Benutzer ohne EDIT_CUSTOMER_ADDRESS_CURRENCY ändert Adresswährung -> Änderung wird serverseitig zurückgesetzt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-024", @@ -406,7 +429,8 @@ "tracelinks": "SyRS-039", "konsolidierung": "nein", "pruefidee": "Kunde mit offener Rechnung löschen -> Result Error InvalidDeleteRequest, Datensatz bleibt bestehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-025", @@ -423,7 +447,8 @@ "tracelinks": "SwRS-034", "konsolidierung": "nein", "pruefidee": "Account sperren, Bearbeitungsversuch ohne UNLOCK_CUSTOMER-Recht -> Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-026", @@ -441,7 +466,8 @@ "tracelinks": "SwRS-044", "konsolidierung": "nein", "pruefidee": "Zwei Accounts mit E-Mails derselben Domain -> Warnhinweis, Speichern trotzdem möglich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-027", @@ -460,7 +486,8 @@ "tracelinks": "SyRS-058", "konsolidierung": "Analoges Forwarding-Konzept wie StRS-013 (Sales-Domäne).", "pruefidee": "Versuch, aus SupplierOffer direkt SupplierOrder oder aus SupplierOrder direkt SupplierInvoice zu erzeugen -> abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-028", @@ -477,7 +504,8 @@ "tracelinks": "SwRS-055", "konsolidierung": "nein", "pruefidee": "Bestand unter Mindestbestand senken -> Artikel erscheint in Bestellvorschlagsliste; Zulauf reduziert vorgeschlagene Menge.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-029", @@ -494,7 +522,8 @@ "tracelinks": "SwRS-063", "konsolidierung": "nein", "pruefidee": "Bestellung mit Direktlieferungs-Flag: Fracht-/Mindestbestellwert-Konditionen werden aus *Direktlieferung-Feldern gezogen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-030", @@ -511,7 +540,8 @@ "tracelinks": "SyRS-059, SyRS-060, SyRS-061", "konsolidierung": "Kandidat: GLS/Shipcloud-Anbindung wird sowohl in dieser (Purchasing-)Domäne als auch in der EDI-Domäne (StRS-041, \"Integration mit externen Fachanwendungen\") beschrieben - dieselbe technische Schnittstelle, gehört fachlich in beide Betrachtungswinkel (Versand vs. Partnerintegration); für die Zielimplementierung als EIN Versand-Modul zusammenzuführen.", "pruefidee": "Ohne aktive GLS/Shipcloud-Lizenz: Menüpunkt ausgeblendet; mit Lizenz: Label wird erzeugt und abgelegt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-031", @@ -528,7 +558,8 @@ "tracelinks": "SyRS-062, SyRS-063, SyRS-064, SyRS-065", "konsolidierung": "nein", "pruefidee": "Artikelsuche mit aktivem ITscope- und Icecat-Zugang: Treffer nur nach manueller Auswahl übernommen, keine periodische Synchronisation.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-032", @@ -545,7 +576,8 @@ "tracelinks": "SwRS-069", "konsolidierung": "nein", "pruefidee": "Inventur ohne DROP_INVENTORY-Recht löschen -> Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-033", @@ -562,7 +594,8 @@ "tracelinks": "SyRS-067, SwRS-072", "konsolidierung": "nein", "pruefidee": "Zeit mit Calculable=true in Beleg übernehmen -> InvoiceAssetItemI3D wird gesetzt, Zeit nicht mehr frei editierbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-034", @@ -578,7 +611,8 @@ "tracelinks": "SyRS-072", "konsolidierung": "nein", "pruefidee": "Neuen Status anlegen, als HelpdeskClosedState konfigurieren, Ticket darauf setzen -> ClosedAt gesetzt, CLOSE_REQUEST-Recht greift.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-035", @@ -594,7 +628,8 @@ "tracelinks": "StRS-042, SyRS-062", "konsolidierung": "Kandidat: dasselbe Zwei-Rechte-Modell wie StRS-010 (WebAccount) und StRS-043 (Nexus Portal-Rechte).", "pruefidee": "Ticket über Kundenportal mit WEBRIGHT_EDITONLYOWNREQUESTS: Zugriff auf fremdes Ticket verweigert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-036", @@ -610,7 +645,8 @@ "tracelinks": "SyRS-063", "konsolidierung": "nein", "pruefidee": "Ohne Lizenz GetProductionOrdersByFilter -> Exception; mit Lizenz erfolgreicher Aufruf trotz fehlendem spezifischem Recht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-037", @@ -627,7 +663,8 @@ "tracelinks": "SyRS-070", "konsolidierung": "nein", "pruefidee": "Aktive wiederkehrende Aufgabe mit fehlgeschlagener Ticket-Erzeugung simulieren, Repair-Lauf triggern -> genau ein nachgeliefertes Ticket ohne Duplikat.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-038", @@ -645,7 +682,8 @@ "tracelinks": "SyRS-051, SyRS-065, SyRS-069, SyRS-070", "konsolidierung": "nein", "pruefidee": "Testdatei je Distributor bereitstellen, 30-Min-Zyklus abwarten, prüfen dass EDI-Kopf/-Positionen persistiert und Datei entfernt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-039", @@ -663,7 +701,8 @@ "tracelinks": "SyRS-085, SwRS-081", "konsolidierung": "Konsolidierungskandidat mit StRS-019 (Accounting-Domäne behandelt denselben ZUGFeRD/XRechnung-Export bereits) — Import- und Exportpfad sollten in der Zielarchitektur als ein zusammenhängendes E-Invoicing-Modul beschrieben werden.", "pruefidee": "Rechnung mit Leitweg-ID drucken -> PDF muss XRechnungs-Konformitätslevel aufweisen; ZUGFeRD-Testrechnung importieren -> EDI-Kopf mit NeedsUserValidation=true.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-040", @@ -680,7 +719,8 @@ "tracelinks": "SyRS-089", "konsolidierung": "nein", "pruefidee": "Banktransaktion mit exakter Rechnungsnummer -> automatische Vollbuchung; unbekannte IBAN -> Markierung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-041", @@ -699,7 +739,8 @@ "tracelinks": "SyRS-090, SyRS-091", "konsolidierung": "Kandidat: identisch mit StRS-030 (GLS/Shipcloud aus Purchasing-Sicht) sowie StRS-051 (RMM aus Device-Sicht) - dieselben technischen Schnittstellen aus drei fachlichen Blickwinkeln beschrieben.", "pruefidee": "Je Partnerintegration einen End-to-End-Testfall definieren (z.B. DocBee-Ticket-Erstellung -> Webhook-Empfang -> Verknüpfung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-042", @@ -717,7 +758,8 @@ "tracelinks": "StRS-010, SyRS-092", "konsolidierung": "Kandidat: identisches Zwei-Login-Modell wie StRS-010.", "pruefidee": "Login mit gültigen WebAccount-Credentials über /auth/customer -> Redirect nach /customerportal; unter /auth nicht vorgesehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-043", @@ -734,7 +776,8 @@ "tracelinks": "SyRS-075, SyRS-076, SyRS-079", "konsolidierung": "Kandidat: eigenständiges, aber strukturell paralleles Rechtemodell zu StRS-006/StRS-023.", "pruefidee": "WebAccount ohne SHOWALLEREQUESTS/SHOWONLYOWNREQUESTS/CUSTOMERADMINISTRATOR erhält beim Aufruf der Ticket-Detailseite eine Autorisierungsablehnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-044", @@ -750,7 +793,8 @@ "tracelinks": "SwRS-085", "konsolidierung": "nein", "pruefidee": "Aufruf ohne bestehende Session liefert das Formular aus; falsche Captcha-Antwort verhindert Absenden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-045", @@ -767,7 +811,8 @@ "tracelinks": "StRS-020", "konsolidierung": "nein", "pruefidee": "Kunde mit WEBRIGHT_SHOWONLYOWNINVOICES sieht nur eigene Rechnungen; ohne WEBRIGHT_SHOWCONTRACTS ist Vertragsübersicht nicht erreichbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-046", @@ -784,7 +829,8 @@ "tracelinks": "SyRS-077, SyRS-080, SwRS-074, SwRS-075, SwRS-078", "konsolidierung": "nein", "pruefidee": "Statuswechsel eines Tickets erzeugt NexusNotification-Datensatz für alle Editoren + verantwortliche Person und SignalR-Push.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-047", @@ -800,7 +846,8 @@ "tracelinks": "SyRS-082, SyRS-083, SyRS-086, SwRS-080, SwRS-081, SwRS-085", "konsolidierung": "nein", "pruefidee": "Task mit Report-Action und Lizenz anlegen, geplanten Lauf triggern -> PDFs korrekt versendet, Erfolgs-Log entsteht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-048", @@ -817,7 +864,8 @@ "tracelinks": "SyRS-084, SyRS-087, SwRS-084, SwRS-086, SwRS-087", "konsolidierung": "nein", "pruefidee": "Mail-Vorlage nur auf Kundenebene anlegen, keine globale/Branch-Vorlage -> für diesen Kunden wird genau diese Vorlage verwendet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-049", @@ -834,7 +882,8 @@ "tracelinks": "SyRS-085, SyRS-088", "konsolidierung": "nein", "pruefidee": "Workflow mit Bedingung \"SubjectContains\" + Aktion \"CreateTicket\": Testmail erzeugt automatisch Helpdesk-Ticket und Logeintrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-050", @@ -851,7 +900,8 @@ "tracelinks": "SyRS-045, SyRS-089, SwRS-088, SwRS-089", "konsolidierung": "nein", "pruefidee": "Gerät per externer DeviceId (aus RMM) anlegen, danach per c-entron-UI wiederfinden und mit einem Ticket verknüpfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-051", @@ -869,7 +919,8 @@ "tracelinks": "StRS-020, StRS-041, SyRS-090, SyRS-091, SyRS-093", "konsolidierung": "Kandidat: identische RMM/Riverbird-Schnittstelle wie StRS-041 (EDI-Domäne) - zwei Blickwinkel (Fachanwendungsintegration vs. Gerätemanagement) auf dieselbe technische Komponente RiverDivoBL/RmmController.", "pruefidee": "RMM-Interface aktivieren, mit korrektem/falschem Access-Key gegen v1/rmm/devices/lookup aufrufen -> 401 bei Fehlschlag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-052", @@ -886,7 +937,8 @@ "tracelinks": "SyRS-092, SyRS-094, SwRS-090, SwRS-091, SwRS-092, SwRS-093", "konsolidierung": "nein", "pruefidee": "Checklistenpunkt abhaken, Historieneintrag mit Bearbeiter und Zeitstempel prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -903,7 +955,8 @@ "tracelinks": "StRS-001", "konsolidierung": "nein", "pruefidee": "Für dieselbe fachliche Operation sowohl /REST/... als auch /v1/... aufrufen und Antwortformat/Statuscodes vergleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -919,7 +972,8 @@ "tracelinks": "StRS-001", "konsolidierung": "nein", "pruefidee": "GET auf v1-Endpunkt prüfen, ob Response-Header \"api-supported-versions\" vorhanden ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -936,7 +990,8 @@ "tracelinks": "StRS-007", "konsolidierung": "nein", "pruefidee": "Request ohne Ticket/JWT -> 401; abgelaufenes JWT -> 401 trotz gültiger Signatur.", - "qm": "Sicherheit" + "qm": "Sicherheit", + "uebernahme": "" }, { "id": "SyRS-004", @@ -953,7 +1008,8 @@ "tracelinks": "StRS-002", "konsolidierung": "nein", "pruefidee": "Web-Service mit HTTP-Adresse betreiben; Request auf v1-Endpunkt wird ohne Redirect mit 200 beantwortet.", - "qm": "Sicherheit" + "qm": "Sicherheit", + "uebernahme": "" }, { "id": "SyRS-005", @@ -970,7 +1026,8 @@ "tracelinks": "StRS-002", "konsolidierung": "nein", "pruefidee": "Identischen Build unter Windows und Linux mit identischer Config starten, TLS-Handshake auf beiden Plattformen verifizieren.", - "qm": "Portabilität/Kompatibilität" + "qm": "Portabilität/Kompatibilität", + "uebernahme": "" }, { "id": "SyRS-006", @@ -988,7 +1045,8 @@ "tracelinks": "StRS-002, StRS-003", "konsolidierung": "nein", "pruefidee": "Denselben DB-Stand mit allen drei Hosting-Varianten starten, identisches API-Verhalten verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -1005,7 +1063,8 @@ "tracelinks": "StRS-003", "konsolidierung": "nein", "pruefidee": "Prüfen, ob ein äquivalenter CodeQL-Lauf auch für src/webservice und src/centron existiert.", - "qm": "Wartbarkeit/Sicherheit" + "qm": "Wartbarkeit/Sicherheit", + "uebernahme": "" }, { "id": "SyRS-008", @@ -1022,7 +1081,8 @@ "tracelinks": "StRS-003, StRS-004", "konsolidierung": "nein", "pruefidee": "Zwei Instanzen mit ExecuteServices=true gegen dieselbe DB starten, auf doppelte Jobausführung prüfen.", - "qm": "Zuverlässigkeit/Performance-Effizienz" + "qm": "Zuverlässigkeit/Performance-Effizienz", + "uebernahme": "" }, { "id": "SyRS-009", @@ -1038,7 +1098,8 @@ "tracelinks": "StRS-001, StRS-006", "konsolidierung": "nein", "pruefidee": "API-Aufruf mit gültigem Token, aber ohne erforderliches Recht -> 403; ohne Token -> 401.", - "qm": "Sicherheit" + "qm": "Sicherheit", + "uebernahme": "" }, { "id": "SyRS-010", @@ -1054,7 +1115,8 @@ "tracelinks": "StRS-005, StRS-042", "konsolidierung": "nein", "pruefidee": "Nexus mit falschem Notifications.SecretKey starten; Notification-Hub-Aufrufe werden mit 403 abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -1070,7 +1132,8 @@ "tracelinks": "StRS-007", "konsolidierung": "nein", "pruefidee": "Anmeldung mit falschem Passwort liefert LoginFailed.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -1086,7 +1149,8 @@ "tracelinks": "StRS-007", "konsolidierung": "nein", "pruefidee": "Bei ErrorCode 49 (IncorrectCredentials) werden keine weiteren Kombinationen versucht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -1103,7 +1167,8 @@ "tracelinks": "StRS-007", "konsolidierung": "nein", "pruefidee": "ID-Token ohne passenden AppUser.OpenIdConnectSubjectIdentifier -> LoginFailed.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -1119,7 +1184,8 @@ "tracelinks": "StRS-007", "konsolidierung": "nein", "pruefidee": "Ticket mit ExpirationKind.OneDay nach 23h noch gültig, nach 25h nicht mehr.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -1136,7 +1202,8 @@ "tracelinks": "StRS-005", "konsolidierung": "nein", "pruefidee": "Deaktivierter Token liefert \"Token ist deaktiviert.\"; Erstellungsversuch bei erreichtem Kontingent liefert Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-016", @@ -1152,7 +1219,8 @@ "tracelinks": "StRS-009", "konsolidierung": "nein", "pruefidee": "Konto mit AccountDisabledFromDate=heute und ohne ToDate wird ab sofort abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-017", @@ -1169,7 +1237,8 @@ "tracelinks": "StRS-006", "konsolidierung": "nein", "pruefidee": "DeleteRightGroup(6, admin) liefert Fehlermeldung; Zuweisung eines Kindrechts erzeugt zwei Assignment-Einträge.", - "qm": "Sicherheit/Integrität" + "qm": "Sicherheit/Integrität", + "uebernahme": "" }, { "id": "SyRS-018", @@ -1185,7 +1254,8 @@ "tracelinks": "StRS-009", "konsolidierung": "nein", "pruefidee": "E-Mail-2FA ohne Linkklick innerhalb Timeout wirft ResultException(Canceled); TwoFactorAuthLastLogin älter als konfigurierte Tage löst erneute 2FA-Pflicht aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-019", @@ -1202,7 +1272,8 @@ "tracelinks": "StRS-009", "konsolidierung": "nein", "pruefidee": "Aufruf ohne Lizenz -> LicenseNotFound; falsche PIN -> \"Die eingegebene PIN ist ungültig!\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-020", @@ -1219,7 +1290,8 @@ "tracelinks": "StRS-006", "konsolidierung": "nein", "pruefidee": "Im DEBUG-Build wird eine Mail an eine fremde Domain tatsächlich an test@nexoware.com zugestellt.", - "qm": "Sicherheit" + "qm": "Sicherheit", + "uebernahme": "" }, { "id": "SyRS-021", @@ -1235,7 +1307,8 @@ "tracelinks": "StRS-012", "konsolidierung": "nein", "pruefidee": "Neu angelegtes Angebot/Auftrag hat Status \"Active\"; nach Abschluss \"Completed\", nach Stornierung \"Canceled\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-022", @@ -1251,7 +1324,8 @@ "tracelinks": "StRS-012, StRS-013", "konsolidierung": "nein", "pruefidee": "Bei Einstellung \"3\" wird Angebot erst geschlossen, wenn alle Positionen vollständig übernommen wurden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-023", @@ -1267,7 +1341,8 @@ "tracelinks": "StRS-013", "konsolidierung": "Analoges Muster in Purchasing-Domäne (SyRS-058).", "pruefidee": "Rechnung als Ursprung für neues Angebot -> abgelehnt; zwei Lieferscheine unterschiedlicher Kunden gemeinsam weiterverarbeiten -> Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-024", @@ -1283,7 +1358,8 @@ "tracelinks": "StRS-013", "konsolidierung": "nein", "pruefidee": "Auftrag aus Angebot erzeugt und in Lieferschein weiterverarbeitet: GetRelatedItemsForObject liefert beide.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-025", @@ -1300,7 +1376,8 @@ "tracelinks": "StRS-012, StRS-016", "konsolidierung": "nein", "pruefidee": "Benutzer ohne EDIT_ORDER darf Auftrag nicht speichern; mit EDIT_ORDER_ONLY_OWN_BRANCH nur eigene Filiale.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-026", @@ -1318,7 +1395,8 @@ "tracelinks": "StRS-012", "konsolidierung": "nein", "pruefidee": "Unauthentifizierter POST gegen v1/Offers und v1/Orders vergleichen: erwartet beide 401, tatsächlich vermutlich nur Orders.", - "qm": "Sicherheit" + "qm": "Sicherheit", + "uebernahme": "" }, { "id": "SyRS-027", @@ -1334,7 +1412,8 @@ "tracelinks": "StRS-016", "konsolidierung": "nein", "pruefidee": "Stornierter Auftrag fließt nicht in Kreditlimitsumme ein; Mahnstufe über Schwelle blockiert neuen Auftrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-028", @@ -1350,7 +1429,8 @@ "tracelinks": "StRS-019", "konsolidierung": "nein", "pruefidee": "Belegerstellung für Kunden ohne Steuer-ID -> Fehler; Position mit VATI3D=null -> Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-029", @@ -1367,7 +1447,8 @@ "tracelinks": "StRS-017", "konsolidierung": "Konsolidierungskandidat mit SyRS-021 (identisches ReceiptState-Enum für Sales-Belege) - gemeinsames Statusmodell über alle Belegarten hinweg, technisch bereits konsolidiert (eine Enum), fachlich in der Zielarchitektur als EIN Konzept zu dokumentieren.", "pruefidee": "UpdateReceiptIsPaid auf stornierter Rechnung -> Fehler \"... wurde storniert und kann daher nicht als bezahlt eingestellt werden.\"", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-030", @@ -1383,7 +1464,8 @@ "tracelinks": "StRS-017", "konsolidierung": "nein", "pruefidee": "Beleg mit veralteter GUID speichern -> ChangedByOtherInstance-Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-031", @@ -1399,7 +1481,8 @@ "tracelinks": "StRS-017", "konsolidierung": "Konsolidierungskandidat mit SyRS-039 (identischer Mechanismus für Account/Kunde/Lieferant) und der Beschaffungsdomäne (SyRS-057, getrennte Nummernkreise) - ein gemeinsamer NumberGroupBL-Mechanismus über alle Domänen.", "pruefidee": "Zwei parallele Threads rufen GetNextNumber für dieselbe Gruppe auf -> unterschiedliche, aufeinanderfolgende Nummern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-032", @@ -1416,7 +1499,8 @@ "tracelinks": "StRS-017", "konsolidierung": "nein", "pruefidee": "Rechnung mit Exportflag stornieren -> Fehler; ältere Vertragsrechnung stornieren -> Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-033", @@ -1433,7 +1517,8 @@ "tracelinks": "StRS-020", "konsolidierung": "nein", "pruefidee": "Vertrag mit IsOverbooking=false, IsRestTake=true: Restwert wird in Folgeperiode verrechnet, keine Zusatzberechnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-034", @@ -1449,7 +1534,8 @@ "tracelinks": "StRS-018", "konsolidierung": "nein", "pruefidee": "Mahnlauf mit gemischten Kunden -> Exception; SendType=Fax -> Exception.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-035", @@ -1466,7 +1552,8 @@ "tracelinks": "StRS-021", "konsolidierung": "nein", "pruefidee": "Benutzer nur mit INCOMING_PAYMENT_TRANSACTIONS ruft UpdateReceiptIsPaid auf -> Erfolg trotz fehlendem allgemeinem Edit-Recht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-036", @@ -1482,7 +1569,8 @@ "tracelinks": "StRS-019", "konsolidierung": "nein", "pruefidee": "Reverse-Charge-Position -> Kategorie AE + §13b-Text; Δ>3,00 -> Exportabbruch, Δ<3,00 -> automatische Korrektur mit Log.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-037", @@ -1499,7 +1587,8 @@ "tracelinks": "StRS-019", "konsolidierung": "nein", "pruefidee": "AssetCondition mit Skonto1OffDay=14/Skonto1Percent=2 -> Text \"#SKONTO#TAGE=14#PROZENT=2.00#\"; Gutschrift mit zwei möglichen Ursprungsrechnungen -> kein Referenzdokument.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-038", @@ -1516,7 +1605,8 @@ "tracelinks": "StRS-022", "konsolidierung": "nein", "pruefidee": "Account mit 2 Adressen und je 2 Kontakten anlegen und laden -> vollständige Hierarchie wird zurückgegeben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-039", @@ -1532,7 +1622,8 @@ "tracelinks": "StRS-022", "konsolidierung": "Konsolidierungskandidat mit SyRS-031 (identischer NumberGroupBL-Mechanismus).", "pruefidee": "Neuer Account mit beiden Rollen -> drei unterschiedliche Nummern; Einstellung aktivieren -> BookKeepingNumber == Präfix+Number.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-040", @@ -1549,7 +1640,8 @@ "tracelinks": "StRS-022", "konsolidierung": "nein", "pruefidee": "Kunde zwei Filialen mit unterschiedlichen BookKeepingNumbers zuordnen -> beide Zuordnungen abrufbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-041", @@ -1566,7 +1658,8 @@ "tracelinks": "StRS-023", "konsolidierung": "nein", "pruefidee": "Benutzer mit SHOW_ONLY_OWN_CUSTOMER ohne Adviser-Zuordnung zu Account X -> Error beim Laden der Adressen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-042", @@ -1582,7 +1675,8 @@ "tracelinks": "StRS-025", "konsolidierung": "nein", "pruefidee": "Deaktivierten Account mit 2 Adressen/Kontakten reaktivieren -> alle IsActive=true, Kunden.Status=1.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-043", @@ -1599,7 +1693,8 @@ "tracelinks": "StRS-022", "konsolidierung": "nein", "pruefidee": "Zweite Adresse als IsDefault=true speichern -> vorherige Standardadresse verliert Flag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-044", @@ -1615,7 +1710,8 @@ "tracelinks": "StRS-022", "konsolidierung": "nein", "pruefidee": "Root-Ordner-Konfiguration ungültig setzen, neuen Kunden anlegen -> gesamte Transaktion wird zurückgerollt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-045", @@ -1632,7 +1728,8 @@ "tracelinks": "StRS-050", "konsolidierung": "nein", "pruefidee": "Gerät löschen -> Datensatz bleibt mit IsDeleted=true, Log enthält Löscheintrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-046", @@ -1648,7 +1745,8 @@ "tracelinks": "StRS-023", "konsolidierung": "nein", "pruefidee": "Benutzer mit nur RIGHT_LIEFERANTANLEGEN versucht Kontakt an reinem Kunden-Account -> Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-047", @@ -1665,7 +1763,8 @@ "tracelinks": "StRS-022", "konsolidierung": "nein", "pruefidee": "AccountContract aus Kind für Account mit aktiver Standardadresse erzeugen -> Kontaktfelder entsprechen Account-Stammdaten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-048", @@ -1682,7 +1781,8 @@ "tracelinks": "StRS-030", "konsolidierung": "Konsolidierungskandidat mit SyRS-066 (EDI-Domäne, \"Versanddienstleister GLS/Shipcloud\").", "pruefidee": "Sendung ohne ShipperId/ShipmentDate -> Validierungsfehler vor HTTP-Call; Testupload nutzt TestBaseURL statt konfigurierter Zugangsdaten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-049", @@ -1700,7 +1800,8 @@ "tracelinks": "StRS-030", "konsolidierung": "nein", "pruefidee": "Realen API-Call mit gültigem Key gegen Sandbox ausführen und Response-Status auswerten; Lieferschein mit 2 Paketen -> prüfen ob 1 oder 2 Tracking-Nummern entstehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-050", @@ -1719,7 +1820,8 @@ "tracelinks": "StRS-031", "konsolidierung": "nein", "pruefidee": "Artikelsuche per EAN mit aktivem ITscope-Zugang: nur Distributoren der Whitelist erscheinen; Cop-Familie: Bestandsspalte konstant Platzhalter.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-051", @@ -1736,7 +1838,8 @@ "tracelinks": "StRS-038", "konsolidierung": "Konsolidierungskandidat mit SyRS-069/070 (EDI-Domäne detailliert dieselbe SupplierEdiBL).", "pruefidee": "EDI-Auftragsbestätigung einspielen: Preis/Menge/Liefertermin werden nur bei tatsächlicher Abweichung aktualisiert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-052", @@ -1753,7 +1856,8 @@ "tracelinks": "StRS-027", "konsolidierung": "Konsolidierungskandidat mit SyRS-031/039 (gleiches NumberGroupBL-Muster).", "pruefidee": "Mehrere Wareneingänge/Bestellungen parallel anlegen; Nummernkreise überschneiden sich nicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-053", @@ -1769,7 +1873,8 @@ "tracelinks": "StRS-027", "konsolidierung": "nein", "pruefidee": "Als RMA-Sonderlager konfiguriertes Lager darf in allgemeiner Lagerauswahl nicht erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-054", @@ -1785,7 +1890,8 @@ "tracelinks": "StRS-031", "konsolidierung": "nein", "pruefidee": "Externe Artikelsuche durchführen, Treffer übernehmen; prüfen ob ExternalArticle-Datensatz entsteht - erwartet: nein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-055", @@ -1801,7 +1907,8 @@ "tracelinks": "StRS-029", "konsolidierung": "nein", "pruefidee": "Direktlieferungs-Bestellung mit Bezug zu Kundenauftragsposition: Liefertermin-Änderung schlägt auf Kundenauftrag durch.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-056", @@ -1818,7 +1925,8 @@ "tracelinks": "StRS-033", "konsolidierung": "nein", "pruefidee": "Timer mit Start=10:00/Stop=11:30 -> Timer=5400; Stop aktuell akzeptiert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-057", @@ -1835,7 +1943,8 @@ "tracelinks": "StRS-033", "konsolidierung": "nein", "pruefidee": "Zeit einer Rechnung zuordnen, Löschversuch -> Fehler; Nutzer mit EDIT_TIME aber ohne DELETE_HELPDESK_TIMER -> Löschung verweigert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-058", @@ -1852,7 +1961,8 @@ "tracelinks": "StRS-033", "konsolidierung": "nein", "pruefidee": "Zeit an Feiertag mit konfiguriertem HolidayPercent -> Zuschlag greift NICHT (bekannte Lücke); Zeit mit zwei Überlappungen -> Abrechnung verweigert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-059", @@ -1869,7 +1979,8 @@ "tracelinks": "StRS-034", "konsolidierung": "nein", "pruefidee": "Ticket ohne Kunde schließen -> Fehler; identisches, aus Rechnung erzeugtes Ticket -> keine Prüfung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-060", @@ -1885,7 +1996,8 @@ "tracelinks": "StRS-034", "konsolidierung": "nein", "pruefidee": "Externe Mail-Adresse ungültig, interne gültig -> externalNotificationSuccessful=false, internalNotificationSuccessful=true.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-061", @@ -1901,7 +2013,8 @@ "tracelinks": "StRS-034", "konsolidierung": "nein", "pruefidee": "Aufgabenkette A->B->C->D: GetAllSubTasks(A) liefert B,C,D; Zyklus A->B->A: Stack-Overflow-Risiko (keine Schutzlogik).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-062", @@ -1917,7 +2030,8 @@ "tracelinks": "StRS-035", "konsolidierung": "nein", "pruefidee": "Mitarbeiter mit diesem Recht versucht Zuweisung außerhalb seiner Abteilung -> RightCheckFailed.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-063", @@ -1934,7 +2048,8 @@ "tracelinks": "StRS-036", "konsolidierung": "nein", "pruefidee": "Fertigungsauftrag für Baugruppe mit Unter-Fertigungsauftrag anlegen; RequiredAmount/ProducedAmount schrittweise erhöhen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-064", @@ -1950,7 +2065,8 @@ "tracelinks": "StRS-037", "konsolidierung": "nein", "pruefidee": "Aktive Aufgabe mit fehlgeschlagener Ticket-Erzeugung: Repair-Lauf erzeugt genau ein Ticket ohne Duplikat; pausierte Aufgabe bleibt unangetastet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-065", @@ -1967,7 +2083,8 @@ "tracelinks": "StRS-038", "konsolidierung": "nein", "pruefidee": "Netzwerkmitschnitt einer FTPS-Verbindung zeigt AUTH TLS-Handshake; Password-Feld in DB nicht im Klartext lesbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-066", @@ -1984,7 +2101,8 @@ "tracelinks": "StRS-041", "konsolidierung": "Konsolidierungskandidat mit SyRS-048/049 (Purchasing-Domäne, identische Schnittstellen).", "pruefidee": "Testsendung über beide Dienstleister anlegen -> Tracking-Link in neuer Belegversion, Label als PDF abgelegt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-067", @@ -2001,7 +2119,8 @@ "tracelinks": "StRS-041", "konsolidierung": "nein", "pruefidee": "Vorgang mit Vertriebsauftragsbezug anlegen -> Webhook-Payload enthält SalesOrderId; DocBee-Zeiteintrag mit Status \"abrechenbar\" -> HelpdeskTimer mit korrektem billable-Flag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-068", @@ -2018,7 +2137,8 @@ "tracelinks": "StRS-041, StRS-051", "konsolidierung": "Konsolidierungskandidat mit SyRS-089/090 (Devices-Domäne, identische RMM-Komponente).", "pruefidee": "Zugriff mit falschem Access-Key -> 401; RmmInterfaceEnabled=false -> auch korrekter Key wird abgelehnt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-069", @@ -2036,7 +2156,8 @@ "tracelinks": "StRS-038", "konsolidierung": "nein", "pruefidee": "Neuer EDI-Beleg -> Status \"offen\"; nach Bestätigung -> \"akzeptiert\"; Herweck-Datei im neuen Format -> Import gelingt über Fallback.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-070", @@ -2052,7 +2173,8 @@ "tracelinks": "StRS-038", "konsolidierung": "nein", "pruefidee": "Testdatei ohne LineID, aber mit EAN-Code (fehlende führende Nullen) -> Zuordnung funktioniert dennoch (Padding-Logik).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-071", @@ -2069,7 +2191,8 @@ "tracelinks": "StRS-039", "konsolidierung": "nein", "pruefidee": "Gültige ZUGFeRD-2.1-Testrechnung hochladen -> EDI-Kopf mit NeedsUserValidation=true; PDF ohne XML-Attachment -> definierte Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-072", @@ -2086,7 +2209,8 @@ "tracelinks": "StRS-040", "konsolidierung": "nein", "pruefidee": "Sandbox-Bankverbindung importieren -> Transaktionsliste mit Paging vollständig geladen; Token-Ablauf simulieren -> definierter Fehler statt Refresh.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-073", @@ -2103,7 +2227,8 @@ "tracelinks": "StRS-040", "konsolidierung": "nein", "pruefidee": "Export im DATEV-XML-Online-2020-Format gegen aktuelle Schnittstellenspezifikation validieren; OPOS-Import mit widersprüchlichen Zahlbeträgen -> definiertes Fehlerverhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-074", @@ -2120,7 +2245,8 @@ "tracelinks": "StRS-042", "konsolidierung": "nein", "pruefidee": "Deaktivierung der CentronNexus-Lizenz verhindert Login über /auth/customer, /auth-Login bleibt unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-075", @@ -2136,7 +2262,8 @@ "tracelinks": "StRS-042, StRS-043", "konsolidierung": "nein", "pruefidee": "WebAccount vom Typ \"Address Contact\" anlegen -> referenziert ausschließlich AddressContactI3D, kein AppUser nötig.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-076", @@ -2153,7 +2280,8 @@ "tracelinks": "StRS-043", "konsolidierung": "nein", "pruefidee": "Direktaufruf der URL ohne das geforderte Recht führt zu Redirect/Fehlerseite.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-077", @@ -2170,7 +2298,8 @@ "tracelinks": "StRS-046", "konsolidierung": "nein", "pruefidee": "Netzwerkmitschnitt zeigt, dass ein Notification-DTO an alle verbundenen Hub-Clients gesendet wird, auch wenn UserI3D nicht deren Nutzer entspricht.", - "qm": "Sicherheit" + "qm": "Sicherheit", + "uebernahme": "" }, { "id": "SyRS-078", @@ -2187,7 +2316,8 @@ "tracelinks": "StRS-044", "konsolidierung": "nein", "pruefidee": "Deaktivieren von TicketPattern.IsActive -> Fehlermeldung \"Das Formular ist nicht mehr aktiv.\"", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-079", @@ -2204,7 +2334,8 @@ "tracelinks": "StRS-043, StRS-045", "konsolidierung": "nein", "pruefidee": "Fehlende HelpdeskAfterOpenDefaultState-Konfiguration verhindert \"Freigeben\"; CanEditTicketDescription=false blendet Bearbeitungsbutton aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-080", @@ -2221,7 +2352,8 @@ "tracelinks": "StRS-042, StRS-046", "konsolidierung": "nein", "pruefidee": "complete_login?returnUrl=https://evil.example führt NICHT zu Redirect auf evil.example; Mitarbeiter A bearbeitet Feld, Kunde B sieht Sperrhinweis.", - "qm": "Sicherheit" + "qm": "Sicherheit", + "uebernahme": "" }, { "id": "SyRS-081", @@ -2237,7 +2369,8 @@ "tracelinks": "StRS-044", "konsolidierung": "nein", "pruefidee": "AllowHelpdeskCreation=false für Kunden setzen; prüfen ob Ticketerstellung über Portal tatsächlich verhindert wird (aktuell nicht erkennbar verdrahtet).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-082", @@ -2253,7 +2386,8 @@ "tracelinks": "StRS-047", "konsolidierung": "nein", "pruefidee": "Ungültigen Druckernamen konfigurieren -> PDF-Export gelingt dennoch via FastReport; erneuter Aufruf innerhalb 30 Min nutzt sofort Fallback.", - "qm": "Zuverlässigkeit" + "qm": "Zuverlässigkeit", + "uebernahme": "" }, { "id": "SyRS-083", @@ -2269,7 +2403,8 @@ "tracelinks": "StRS-047", "konsolidierung": "nein", "pruefidee": "Kundenspezifischen Report für \"Rechnung/Mail\" hinterlegen; automatisierter Mailversand nutzt diesen statt globalen Report.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-084", @@ -2286,7 +2421,8 @@ "tracelinks": "StRS-048", "konsolidierung": "nein", "pruefidee": "TestMails.Start aktivieren, Mailversand auslösen -> keine echte Verbindung, Mail landet in Subscriber-Collection.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-085", @@ -2303,7 +2439,8 @@ "tracelinks": "StRS-044, StRS-049", "konsolidierung": "nein", "pruefidee": "Task mit ActiveUntilDate in Vergangenheit darf nicht mehr ausgeführt werden; Profil speichern, DB-Spalte Password nicht im Klartext lesbar.", - "qm": "Sicherheit/Zuverlässigkeit" + "qm": "Sicherheit/Zuverlässigkeit", + "uebernahme": "" }, { "id": "SyRS-086", @@ -2320,7 +2457,8 @@ "tracelinks": "StRS-047", "konsolidierung": "nein", "pruefidee": "Task-Aktion ohne gültige Absenderadresse -> CentronNotification mit LogKind=Error; DeleteAfterDays=30 -> nur ältere Einträge werden entfernt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-087", @@ -2336,7 +2474,8 @@ "tracelinks": "StRS-048", "konsolidierung": "nein", "pruefidee": "Nachricht mit 251 Zeichen -> Exception; Nutzer A editiert Nachricht von Nutzer B -> Exception; Löschen ersetzt Text durch \"Gelöscht.\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-088", @@ -2353,7 +2492,8 @@ "tracelinks": "StRS-049", "konsolidierung": "nein", "pruefidee": "\"gmail.com\" als Blacklist-Domain hinterlegen; E-Mail von test@gmail.com verarbeiten -> keine automatische Domain-basierte Kundenzuordnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-089", @@ -2370,7 +2510,8 @@ "tracelinks": "StRS-050", "konsolidierung": "nein", "pruefidee": "Gerät mit OriginKind=Riversuite laden -> alle Eingabefelder disabled, Speichern-Button fehlt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-090", @@ -2386,7 +2527,8 @@ "tracelinks": "StRS-051", "konsolidierung": "nein", "pruefidee": "Als Webaccount von Kunde A versuchen, Geräte von Kunde B abzurufen -> leere Liste + Log-Eintrag statt Daten.", - "qm": "Sicherheit" + "qm": "Sicherheit", + "uebernahme": "" }, { "id": "SyRS-091", @@ -2402,7 +2544,8 @@ "tracelinks": "StRS-051", "konsolidierung": "nein", "pruefidee": "RMM erzeugt Ticket mit unbekannter externer DeviceId -> Ticket entsteht trotzdem, Warnung wird geloggt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-092", @@ -2419,7 +2562,8 @@ "tracelinks": "StRS-020, StRS-052", "konsolidierung": "nein", "pruefidee": "Löschversuch einer in ContractArticleReferenzes verwendeten Zuweisung -> Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-093", @@ -2435,7 +2579,8 @@ "tracelinks": "StRS-051", "konsolidierung": "Kandidat: identisches Rechte-Rahmenwerk wie StRS-006.", "pruefidee": "Mitarbeiter ohne RMM_BACKUP_SHOW_LOGIN_CREDENTIALS darf Backup-Zugangsdaten nicht einsehen, obwohl RMM_BACKUP-Recht vorhanden ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-094", @@ -2452,7 +2597,8 @@ "tracelinks": "StRS-052", "konsolidierung": "nein", "pruefidee": "Blattknoten abhaken bei offenem Geschwisterknoten -> Elternknoten bleibt offen; Ticket mit Pflicht-Checkliste und offenem Item -> CanClose=false.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -2468,7 +2614,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Zwei parallele Threads denselben Telemetrie-Bucket gleichzeitig upserten -> beide Erhöhungen korrekt aufsummiert, max. 5 Retries.", - "qm": "Zuverlässigkeit" + "qm": "Zuverlässigkeit", + "uebernahme": "" }, { "id": "SwRS-002", @@ -2484,7 +2631,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "nein", "pruefidee": "Upload einer sehr großen Datei erzeugt keinen 413; simulierter Inspektor-Aufruf >5 Minuten wird nicht durch Timeout getrennt.", - "qm": "Performance-Effizienz/Sicherheit" + "qm": "Performance-Effizienz/Sicherheit", + "uebernahme": "" }, { "id": "SwRS-003", @@ -2500,7 +2648,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "nein", "pruefidee": "Web-Service auf Server mit z.B. russischer Locale starten; Zahlenformate entsprechen weiterhin dem konfigurierten Format.", - "qm": "Kompatibilität" + "qm": "Kompatibilität", + "uebernahme": "" }, { "id": "SwRS-004", @@ -2516,7 +2665,8 @@ "tracelinks": "SyRS-004", "konsolidierung": "nein", "pruefidee": "Start gegen absichtlich zu alte/neue Test-DB -> Exception, Host startet nicht.", - "qm": "Zuverlässigkeit" + "qm": "Zuverlässigkeit", + "uebernahme": "" }, { "id": "SwRS-005", @@ -2532,7 +2682,8 @@ "tracelinks": "SyRS-003", "konsolidierung": "nein", "pruefidee": "JWT mit Standard-Claim \"sub\" -> Autorisierungslogik erhält \"sub\", nicht die .NET-XML-Namespace-URI.", - "qm": "Kompatibilität" + "qm": "Kompatibilität", + "uebernahme": "" }, { "id": "SwRS-006", @@ -2549,7 +2700,8 @@ "tracelinks": "SyRS-007", "konsolidierung": "nein", "pruefidee": "Testdatei mit OverrideExpectedFiles=true committen -> Pipeline schlägt fehl; ungültiges Signaturzertifikat -> \"Verify signed installers\" bricht ab.", - "qm": "Wartbarkeit/Sicherheit" + "qm": "Wartbarkeit/Sicherheit", + "uebernahme": "" }, { "id": "SwRS-007", @@ -2565,7 +2717,8 @@ "tracelinks": "SyRS-007", "konsolidierung": "nein", "pruefidee": "Container mit Präfix und Erstellungszeit >4h anlegen -> wird entfernt; <4h alter Container mit demselben Präfix -> bleibt bestehen.", - "qm": "Zuverlässigkeit/Wartbarkeit" + "qm": "Zuverlässigkeit/Wartbarkeit", + "uebernahme": "" }, { "id": "SwRS-008", @@ -2582,7 +2735,8 @@ "tracelinks": "SyRS-010", "konsolidierung": "nein", "pruefidee": "Prüfen, ob DatabaseConnectionStringPlain in Produktivinstallationen tatsächlich ignoriert/verschlüsselt wird.", - "qm": "Sicherheit" + "qm": "Sicherheit", + "uebernahme": "" }, { "id": "SwRS-009", @@ -2599,7 +2753,8 @@ "tracelinks": "SyRS-011", "konsolidierung": "nein", "pruefidee": "Zwei Nutzer mit identischem Passwort haben identischen Hash in der DB.", - "qm": "Sicherheit/Vertraulichkeit" + "qm": "Sicherheit/Vertraulichkeit", + "uebernahme": "" }, { "id": "SwRS-010", @@ -2616,7 +2771,8 @@ "tracelinks": "SyRS-011", "konsolidierung": "nein", "pruefidee": "PasswordMinLength=10, 9-Zeichen-Passwort -> abgelehnt; ChangeOwnPassword mit falschem currentPassword -> Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -2632,7 +2788,8 @@ "tracelinks": "SyRS-012, SyRS-013", "konsolidierung": "nein", "pruefidee": "Nutzer mit AuthentificationKind=WindowsAuth erhält bei ChangeOwnPassword stets Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -2646,7 +2803,8 @@ "tracelinks": "SyRS-011", "konsolidierung": "nein", "pruefidee": "10 aufeinanderfolgende Fehlversuche mit demselben Benutzernamen werden nicht blockiert.", - "qm": "Sicherheit" + "qm": "Sicherheit", + "uebernahme": "" }, { "id": "SwRS-013", @@ -2662,7 +2820,8 @@ "tracelinks": "SyRS-014", "konsolidierung": "nein", "pruefidee": "Ticket mit ExpirationKind.OneDay nach 23h gültig, nach 25h nicht mehr.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-014", @@ -2678,7 +2837,8 @@ "tracelinks": "SyRS-015", "konsolidierung": "nein", "pruefidee": "Direkte DB-Abfrage von AccessToken enthält niemals den Klartext-Token.", - "qm": "Sicherheit/Vertraulichkeit" + "qm": "Sicherheit/Vertraulichkeit", + "uebernahme": "" }, { "id": "SwRS-015", @@ -2694,7 +2854,8 @@ "tracelinks": "SyRS-017", "konsolidierung": "Kandidat: strukturell parallel zu SwRS-verwandten WebAccountRightsConst-Mustern der Nexus-Domäne (SyRS-076).", "pruefidee": "HasWebAccountRight ignoriert Sichtrus/Sichmemb vollständig.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-016", @@ -2710,7 +2871,8 @@ "tracelinks": "SyRS-016", "konsolidierung": "nein", "pruefidee": "WebAccount mit Namen eines existierenden AppUsers anlegen -> Fehlermeldung mit Hinweis auf Mitarbeiter.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-017", @@ -2726,7 +2888,8 @@ "tracelinks": "SyRS-011", "konsolidierung": "nein", "pruefidee": "WebAccount-Anlage mit Passwort löst Mail mit Klartext-Passwort im Body aus.", - "qm": "Sicherheit/Vertraulichkeit" + "qm": "Sicherheit/Vertraulichkeit", + "uebernahme": "" }, { "id": "SwRS-018", @@ -2742,7 +2905,8 @@ "tracelinks": "SyRS-017", "konsolidierung": "nein", "pruefidee": "Neu hinzugefügtes Recht erhält ID >= aktuell dokumentierter nächster freier Wert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-019", @@ -2758,7 +2922,8 @@ "tracelinks": "SyRS-025", "konsolidierung": "nein", "pruefidee": "Auftrag ohne Kundenbestellnummer -> Validierungsmeldung; identische Nummer zweimal -> Duplikatmeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-020", @@ -2775,7 +2940,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "nein", "pruefidee": "Auftrag ohne CostCenterI3D -> abgelehnt; Angebot ohne ProbabilityClassificationI3D bei aktiver Einstellung -> Dialog, kein Speichern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-021", @@ -2791,7 +2957,8 @@ "tracelinks": "SyRS-023", "konsolidierung": "nein", "pruefidee": "Reduzierung einer teilweise kommissionierten Position ohne Bestätigung -> Dialog, kein Speichern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-022", @@ -2808,7 +2975,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "nein", "pruefidee": "Angebot mit EOL-Artikel zu Auftrag weiterverarbeiten -> Warnmeldung; OrderAutoProvisionIsActive aktiv -> Adviser1I3D wird Provisionsempfänger.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-023", @@ -2824,7 +2992,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "nein", "pruefidee": "Rabattänderung einer Position mit EkIsVk=true-Artikel -> PurchaseBasePrice wird proportional neu berechnet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-024", @@ -2840,7 +3009,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "nein", "pruefidee": "Zusammenführen zweier Lieferscheine unterschiedlicher Filialen -> Filiale des ersten Lieferscheins wird nicht willkürlich übernommen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-025", @@ -2856,7 +3026,8 @@ "tracelinks": "SyRS-027", "konsolidierung": "nein", "pruefidee": "Kunde mit OrderLockAfterDunning=2 und Mahnstufe 2 -> kein neuer Auftrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-026", @@ -2872,7 +3043,8 @@ "tracelinks": "SyRS-028", "konsolidierung": "nein", "pruefidee": "Position mit VATI3D=null -> nicht speicherbar; Kunde ohne Steuer-ID -> Belegerstellung schlägt fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-027", @@ -2889,7 +3061,8 @@ "tracelinks": "SyRS-029", "konsolidierung": "nein", "pruefidee": "Benutzer ohne RIGHT_RECHNUNGSTORNIEREN -> Fehler; Barrechnung stornieren -> immer Fehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-028", @@ -2905,7 +3078,8 @@ "tracelinks": "SyRS-029", "konsolidierung": "nein", "pruefidee": "Rechnung mit 3 Positionen stornieren -> neue Version QuantityComplete=0 für alle, alte Version bleibt mit Originalmengen bestehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-029", @@ -2921,7 +3095,8 @@ "tracelinks": "SyRS-034", "konsolidierung": "nein", "pruefidee": "UpdateInvoice() direkt mit DunningLevel=Level3 -> ArgumentOutOfRangeException.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-030", @@ -2937,7 +3112,8 @@ "tracelinks": "SyRS-034", "konsolidierung": "nein", "pruefidee": "Rechnung mit Teilzahlung und Teilgutschrift -> offener Betrag = Brutto - Zahlung - Gutschrift.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-031", @@ -2953,7 +3129,8 @@ "tracelinks": "SyRS-035", "konsolidierung": "nein", "pruefidee": "Zwei Zahlungseingänge erfassen, einen löschen -> PaidFC reduziert sich exakt um den gelöschten Betrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-032", @@ -2969,7 +3146,8 @@ "tracelinks": "SyRS-032", "konsolidierung": "nein", "pruefidee": "Rechnung festschreiben, danach SaveReceipt() mit geänderter Position aufrufen; falls dies gelingt, ist die GoBD-Unveränderbarkeit nicht durchgesetzt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-033", @@ -2985,7 +3163,8 @@ "tracelinks": "SyRS-033", "konsolidierung": "nein", "pruefidee": "Kontingentnutzung mit Bruchwerten über mehrere Belege verrechnen -> Endergebnis stimmt auf 9 Nachkommastellen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-034", @@ -3001,7 +3180,8 @@ "tracelinks": "SyRS-029", "konsolidierung": "nein", "pruefidee": "CloseCreditVoucher aufrufen -> asset.State==2.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-035", @@ -3017,7 +3197,8 @@ "tracelinks": "SyRS-036", "konsolidierung": "nein", "pruefidee": "Δ=1,50 -> Export gelingt mit Log-Warnung; Δ=5,00 -> Export schlägt fehl; Rabattposition mit negativem NetPrice -> positiver ChargeAmount + negierte Menge.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-036", @@ -3033,7 +3214,8 @@ "tracelinks": "SyRS-039", "konsolidierung": "nein", "pruefidee": "SaveAccount ohne CREATE_CUSTOMER -> Result.Error, kein GetNextNumber-Aufruf; ignoreRights=true mit rechtelosem Systemnutzer -> Speicherung gelingt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-037", @@ -3049,7 +3231,8 @@ "tracelinks": "SyRS-044", "konsolidierung": "nein", "pruefidee": "Verzeichnisanlage künstlich fehlschlagen lassen -> Account nicht in DB vorhanden.", - "qm": "Zuverlässigkeit" + "qm": "Zuverlässigkeit", + "uebernahme": "" }, { "id": "SwRS-038", @@ -3065,7 +3248,8 @@ "tracelinks": "SyRS-042", "konsolidierung": "nein", "pruefidee": "Kunde mit IsLocked=true entsperren -> Kunden.Locked=0.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-039", @@ -3081,7 +3265,8 @@ "tracelinks": "SyRS-038", "konsolidierung": "nein", "pruefidee": "RemoveAccountTypeFromAccount mit [Customer, CustomType] -> nur CustomType wird entfernt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-040", @@ -3097,7 +3282,8 @@ "tracelinks": "SyRS-041", "konsolidierung": "nein", "pruefidee": "GetAccount mit WebAccount-LoggedInUser -> Error unabhängig vom AccountFilter.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-041", @@ -3113,7 +3299,8 @@ "tracelinks": "SyRS-046", "konsolidierung": "nein", "pruefidee": "Benutzer ohne EDIT_CUSTOMER_ADDRESS_LANGUAGE ändert LanguageI3D und Straße gleichzeitig -> Straße geändert, LanguageI3D unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-042", @@ -3130,7 +3317,8 @@ "tracelinks": "SyRS-038", "konsolidierung": "nein", "pruefidee": "Neue Adresse ohne weitere Eingaben -> CountryI3D==LanguageI3D==CurrencyI3D==I3D des Default-Landes.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-043", @@ -3146,7 +3334,8 @@ "tracelinks": "SyRS-038", "konsolidierung": "nein", "pruefidee": "Alle Country.Default auf false setzen, neue Adresse anlegen -> unbehandelte InvalidOperationException.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-044", @@ -3162,7 +3351,8 @@ "tracelinks": "SyRS-038", "konsolidierung": "nein", "pruefidee": "AddPartnerTooAccount zweimal mit identischen Parametern -> nur ein AccountRelationship-Datensatz.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-045", @@ -3178,7 +3368,8 @@ "tracelinks": "SyRS-047", "konsolidierung": "nein", "pruefidee": "Account mit inaktiver Standardadresse -> Error CouldNotFindData trotz existierendem Account.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-046", @@ -3194,7 +3385,8 @@ "tracelinks": "SyRS-052", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Recht bucht negativen Bestand -> Login-Dialog; gültige Kollegen-Zugangsdaten -> Buchung akzeptiert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-047", @@ -3210,7 +3402,8 @@ "tracelinks": "SyRS-052", "konsolidierung": "nein", "pruefidee": "Position in Sitzung A buchen, danach in Sitzung B mit veraltetem Wert speichern -> Exception.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-048", @@ -3226,7 +3419,8 @@ "tracelinks": "SyRS-052", "konsolidierung": "nein", "pruefidee": "Wareneingang mit LateBooking=true -> Lagerbestand unverändert, InDelivery erhöht; separate Buchung -> Bestand steigt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-049", @@ -3243,7 +3437,8 @@ "tracelinks": "SyRS-052", "konsolidierung": "nein", "pruefidee": "Artikel mit NoMixedEk=LastPurchasePrice zweimal einbuchen -> PurchasePrice=letzter Preis; Artikel mit SpecialAgreementI3D>0 -> PurchasePrice unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-050", @@ -3260,7 +3455,8 @@ "tracelinks": "SyRS-052", "konsolidierung": "nein", "pruefidee": "Seriennummernpflichtiger Artikel Menge 5, nur 4 Barcodes -> Fehlermeldung bzw. Menge auf 4 korrigiert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-051", @@ -3277,7 +3473,8 @@ "tracelinks": "SyRS-055", "konsolidierung": "nein", "pruefidee": "Bestellung für Artikel ohne Nebenlager-Bestandseintrag -> nach Speichern existiert neuer SecondaryStockArticle-Datensatz.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-052", @@ -3294,7 +3491,8 @@ "tracelinks": "SyRS-052", "konsolidierung": "nein", "pruefidee": "Benutzer mit RIGHT_LIEFERANTENANLAGEENTSPERREN ohne sonstige Beleg-Rechte entsperrt eine gesperrte Lieferantenrechnung -> laut Code erfolgreich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-053", @@ -3310,7 +3508,8 @@ "tracelinks": "SyRS-053", "konsolidierung": "nein", "pruefidee": "Lagerplatz mit 2 zugeordneten Lagerbereichen löschen -> beide State=0.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-054", @@ -3326,7 +3525,8 @@ "tracelinks": "SyRS-049", "konsolidierung": "nein", "pruefidee": "Vorlage mit Length=0 -> Fehler; zweite Default-Vorlage -> vorherige verliert Flag automatisch.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-055", @@ -3342,7 +3542,8 @@ "tracelinks": "SyRS-056", "konsolidierung": "nein", "pruefidee": "Zeit von 23:00 bis 02:00 (Folgetag) -> Dialog erscheint; bei Abbrechen bleibt Zeit ungespeichert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-056", @@ -3358,7 +3559,8 @@ "tracelinks": "SyRS-057", "konsolidierung": "nein", "pruefidee": "Neue Zeit ohne Employee-Angabe -> Employee=aktueller Nutzer; Logging-Fehler simulieren -> Zeit trotzdem gespeichert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-057", @@ -3374,7 +3576,8 @@ "tracelinks": "SyRS-057", "konsolidierung": "nein", "pruefidee": "Zeit anlegen -> Kalendertermin und MyDay-Element erscheinen; Zeit löschen -> beide verschwinden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-058", @@ -3390,7 +3593,8 @@ "tracelinks": "SyRS-060", "konsolidierung": "nein", "pruefidee": "Ticket mit offenem To-Do schließen -> To-Do verschwindet; DeleteHelpdeskToDos-Fehler simulieren -> Ticket bleibt offen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-059", @@ -3406,7 +3610,8 @@ "tracelinks": "SyRS-059", "konsolidierung": "nein", "pruefidee": "Ticket schließen; HelpdeskHistory zeigt korrekten alten/neuen Statusnamen.", - "qm": "Wartbarkeit" + "qm": "Wartbarkeit", + "uebernahme": "" }, { "id": "SwRS-060", @@ -3422,7 +3627,8 @@ "tracelinks": "SyRS-058", "konsolidierung": "nein", "pruefidee": "Zeit mit Kommentartext speichern -> AiTextRatingJson wird nachträglich befüllt; KI-Dienst nicht erreichbar -> ErrorMessage im JSON, Zeitbuchung bleibt gespeichert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-061", @@ -3438,7 +3644,8 @@ "tracelinks": "SyRS-056", "konsolidierung": "nein", "pruefidee": "Tabelle mit >500 betroffenen Datensätzen befüllen, Job ausführen -> keine Timeout-Exception.", - "qm": "Zuverlässigkeit" + "qm": "Zuverlässigkeit", + "uebernahme": "" }, { "id": "SwRS-062", @@ -3454,7 +3661,8 @@ "tracelinks": "SyRS-064", "konsolidierung": "nein", "pruefidee": "Zwei neue TicketProjects ohne Number -> aufsteigende, eindeutige Nummern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-063", @@ -3470,7 +3678,8 @@ "tracelinks": "SyRS-062", "konsolidierung": "nein", "pruefidee": "Mitarbeiter ohne dieses Recht öffnet Zeitbuchung mit Sonderartikel -> Feld nicht editierbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-064", @@ -3486,7 +3695,8 @@ "tracelinks": "SyRS-069", "konsolidierung": "nein", "pruefidee": "Datei mit fehlerhaftem Inhalt 4x einspielen -> 5. Versuch wird ohne Verarbeitung übersprungen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-065", @@ -3502,7 +3712,8 @@ "tracelinks": "SyRS-069", "konsolidierung": "nein", "pruefidee": "ZIP mit 3 XML-Dateien -> alle 3 resultieren in separaten EDI-Köpfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-066", @@ -3519,7 +3730,8 @@ "tracelinks": "SyRS-065, SyRS-066", "konsolidierung": "nein", "pruefidee": "Mandant nur mit EDI_General -> EGIS-Downloadzweig wird nicht ausgeführt, klassischer FTP/SFTP-Zyklus läuft weiter.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-067", @@ -3536,7 +3748,8 @@ "tracelinks": "SyRS-067", "konsolidierung": "nein", "pruefidee": "Systemzeit auf 01:xx Uhr, EDI-Zyklus auslösen -> Logeinträge älter 185 Tage werden gelöscht; um 10:00 Uhr -> keine Löschung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-068", @@ -3552,7 +3765,8 @@ "tracelinks": "SyRS-071", "konsolidierung": "Konsolidierungskandidat mit SwRS-035 (Accounting-Domäne, identische ZUGFeRD-Toleranzlogik).", "pruefidee": "Rechnung mit Summenabweichung von 5,0 -> Export blockiert; Abweichung von 1,0 -> automatische Korrektur, Export erfolgreich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-069", @@ -3568,7 +3782,8 @@ "tracelinks": "SyRS-069", "konsolidierung": "nein", "pruefidee": "Datei im neuen Herweck-Format -> Import gelingt über Fallback.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-070", @@ -3586,7 +3801,8 @@ "tracelinks": "SyRS-072", "konsolidierung": "nein", "pruefidee": "Datenbank-Dump der Konfigurationstabellen -> keines der Passwort-/Secret-Felder im Klartext lesbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-071", @@ -3602,7 +3818,8 @@ "tracelinks": "SyRS-068", "konsolidierung": "nein", "pruefidee": "Benutzer mit Administration.SETTINGS, aber ohne fachliche Berechtigung, versucht RMM-/DocuForm-Zugangsdaten zu ändern -> aktuell vermutlich erfolgreich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-072", @@ -3618,7 +3835,8 @@ "tracelinks": "SyRS-070", "konsolidierung": "nein", "pruefidee": "Ohne Reportserver-Lizenz einen Empfänger als freie E-Mail-Adresse konfigurieren -> Task-Ausführung schlägt mit LicenseNotFound fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-073", @@ -3635,7 +3853,8 @@ "tracelinks": "SyRS-074", "konsolidierung": "nein", "pruefidee": "Aufruf LoginCustomer erzeugt Request mit WebLoginType.Customer und LicenseGuids.CentronNexus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-074", @@ -3651,7 +3870,8 @@ "tracelinks": "SyRS-077", "konsolidierung": "nein", "pruefidee": "Kommentar mit \"[@Mustermann:42]\" -> Notification vom Typ MentionedInComment für Mitarbeiter 42.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-075", @@ -3668,7 +3888,8 @@ "tracelinks": "SyRS-077", "konsolidierung": "nein", "pruefidee": "SendNexusNotification bleibt No-Op -> Save() dennoch erfolgreich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-076", @@ -3684,7 +3905,8 @@ "tracelinks": "SyRS-078", "konsolidierung": "nein", "pruefidee": "Falsche Zahl -> Fehlermeldung, keine Ticketerstellung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-077", @@ -3700,7 +3922,8 @@ "tracelinks": "SyRS-079", "konsolidierung": "nein", "pruefidee": "Ticket mit bereits gesetztem Status zeigt keine Buttons; fehlende Zielstatus-Konfiguration bei \"Ablehnen\" -> Fehlermeldung ohne DB-Schreibzugriff.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-078", @@ -3716,7 +3939,8 @@ "tracelinks": "SyRS-080", "konsolidierung": "nein", "pruefidee": "Nach OIDC-Login: Cookie-Header enthält keinen \"OpenIdConnectTemp\"-Eintrag mehr.", - "qm": "Performance-Effizienz" + "qm": "Performance-Effizienz", + "uebernahme": "" }, { "id": "SwRS-079", @@ -3732,7 +3956,8 @@ "tracelinks": "SyRS-074", "konsolidierung": "nein", "pruefidee": "WebAccount I3D=7 und Employee I3D=7 legen je eine Ansicht an; GetAllTicketViews für WebAccount liefert nur dessen eigene Ansicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-080", @@ -3748,7 +3973,8 @@ "tracelinks": "SyRS-082", "konsolidierung": "nein", "pruefidee": "RTF mit Bullet-Liste bei aktivierter interner Lizenz verarbeiten -> \"\\pn\"-Struktur statt \"\\lsN\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-081", @@ -3764,7 +3990,8 @@ "tracelinks": "SyRS-082", "konsolidierung": "nein", "pruefidee": "3 Empfänger, einer mit ungültiger Adresse -> 2 Mails erfolgreich, 1 Fehler-Log, Gesamtergebnis kein Error.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-082", @@ -3780,7 +4007,8 @@ "tracelinks": "SyRS-083", "konsolidierung": "nein", "pruefidee": "Report mit Parameter \"@SichBenuI3D\" -> Wert entspricht I3D des angemeldeten Nutzers.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-083", @@ -3796,7 +4024,8 @@ "tracelinks": "SyRS-087", "konsolidierung": "nein", "pruefidee": "Ungelesene Chat-Nachricht über 30 Min. -> aktuell keine E-Mail wird versendet (bekannter, dokumentierter Lücken-/Altlast-Zustand).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-084", @@ -3812,7 +4041,8 @@ "tracelinks": "SyRS-084", "konsolidierung": "nein", "pruefidee": "Text mit \"@@AnsprechpartnerAnrede@@\" und Text mit \"@@AnsprechpartnerBriefanrede@@\" -> beide liefern denselben ersetzten Wert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-085", @@ -3828,7 +4058,8 @@ "tracelinks": "SyRS-082", "konsolidierung": "Konsolidierungskandidat mit SwRS-072 (EDI/TaskManager-Domäne, identischer Mechanismus).", "pruefidee": "Report mit Parameter \"@Date\" -> Parameterwert entspricht dem Ausführungsdatum.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-086", @@ -3844,7 +4075,8 @@ "tracelinks": "SyRS-087", "konsolidierung": "nein", "pruefidee": "Nutzer A editiert Nachricht von Nutzer B -> Exception; Löschen ersetzt Text durch \"Gelöscht.\", Originaltext nicht mehr abrufbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-087", @@ -3860,7 +4092,8 @@ "tracelinks": "SyRS-084", "konsolidierung": "nein", "pruefidee": "Mailing mit Version=1 anlegen -> erscheint nicht in Standardabfragen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-088", @@ -3877,7 +4110,8 @@ "tracelinks": "SyRS-089", "konsolidierung": "nein", "pruefidee": "Zweimaliges Senden desselben Geräts (gleiche DeviceId, I3D=0) -> zweiter Aufruf aktualisiert denselben Datensatz.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-089", @@ -3894,7 +4128,8 @@ "tracelinks": "SyRS-089", "konsolidierung": "nein", "pruefidee": "Gerät löschen -> Log-Eintrag \"Das Gerät wurde gelöscht\"; Ticket hat Gerät A, RMM sendet additiv Gerät B -> Ergebnis enthält A und B.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-090", @@ -3910,7 +4145,8 @@ "tracelinks": "SyRS-094", "konsolidierung": "nein", "pruefidee": "Checkliste mit 2 Ebenen und gemischtem Status exportieren -> Text mit korrekter Einrückung und Nummerierung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-091", @@ -3926,7 +4162,8 @@ "tracelinks": "SyRS-094", "konsolidierung": "nein", "pruefidee": "Kunde erfüllt Filterkriterium neu -> RuleType=None-Zuordnung; zuvor manuell ausgeschlossener Kunde bleibt trotz Filtertreffer ausgeschlossen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-092", @@ -3942,7 +4179,8 @@ "tracelinks": "SyRS-092", "konsolidierung": "nein", "pruefidee": "Löschversuch einer verknüpften Zuweisung -> Fehlermeldung; unverknüpfte Zuweisung -> erfolgreich gelöscht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-093", @@ -3959,6 +4197,7 @@ "tracelinks": "SyRS-092", "konsolidierung": "nein", "pruefidee": "SamAccountName eines Dienstkontos in Ausschlussliste eintragen -> nachfolgende Zählung berücksichtigt dieses Konto nicht mehr.", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182946_v3.4.0-6bab/_meta/anforderungen.md b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182946_v3.4.0-6bab/_meta/anforderungen.md index 7c339108..8b50815f 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182946_v3.4.0-6bab/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-sonnet-5/builtin/high/01_Lauf_2026-08-25_182946_v3.4.0-6bab/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -32,6 +34,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 238 (99,6 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -49,5 +55,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **verletzt** – 1 ohne Beleg: SwRS-012 | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (84 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 239 von 239 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173142_v3.2.0-496c/Protokoll.md b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173142_v3.2.0-496c/Protokoll.md index a976495c..d052c48a 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173142_v3.2.0-496c/Protokoll.md +++ b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173142_v3.2.0-496c/Protokoll.md @@ -96,6 +96,8 @@ allen V1b-Laeufen, wo sie um bis zu Faktor 21,6 auseinanderlagen. Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -130,6 +132,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 38 (90,5 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -147,6 +153,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (20 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 42 von 42 mit Tracelinks (100,0 %) | ## Vergleich V1 (solo) gegen V1b (builtin) diff --git a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173142_v3.2.0-496c/_meta/anforderungen.json b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173142_v3.2.0-496c/_meta/anforderungen.json index 4ebe1468..9901397e 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173142_v3.2.0-496c/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173142_v3.2.0-496c/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-001, SwRS-001, SwRS-002", "konsolidierung": "nein", "pruefidee": "Einem Testbenutzer wird eine Gruppe ohne ein bestimmtes Recht zugewiesen; die zugehörige Funktion darf im Client nicht sichtbar/ausführbar sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -32,7 +33,8 @@ "tracelinks": "SyRS-002, SwRS-003", "konsolidierung": "Kandidat: Gleiches Muster wiederkehrend bei Kalender (RIGHT_KALENDERANZEIGENEIGENE) und Mitarbeiterauslastung (RIGHT_MITARBEITERAUSLASTUNGNUREIGENEFILIALE) — im Zielsystem als generisches \"Sichtbarkeits-Scoping\" konsolidierbar.", "pruefidee": "Zwei Testbenutzer unterschiedlicher Filialen mit \"nur eigene Filiale\"-Recht dürfen jeweils nur Tickets ihrer eigenen Filiale in der Liste sehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -49,7 +51,8 @@ "tracelinks": "SyRS-003, SyRS-004, SwRS-004, SwRS-005", "konsolidierung": "nein", "pruefidee": "Aus einem Auftrag wird ein Lieferschein und daraus eine Rechnung erzeugt; `GetRelatedItemsForObject` für die Rechnung muss Auftrag und Lieferschein als Ursprungsbelege zurückliefern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -65,7 +68,8 @@ "tracelinks": "SyRS-004, SwRS-005", "konsolidierung": "nein", "pruefidee": "Für einen Auftrag mit einer Anzahlungsrechnung liefert `GetRelatedItemsForObject(Auftrag)` die Anzahlungsrechnung als verknüpftes Objekt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -81,7 +85,8 @@ "tracelinks": "SyRS-005, SwRS-006", "konsolidierung": "nein", "pruefidee": "Ein neu angelegter Beleg hat Status \"offen\"; nach Stornierung liefert eine Statusabfrage \"storniert\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -97,7 +102,8 @@ "tracelinks": "SyRS-006, SwRS-007", "konsolidierung": "nein", "pruefidee": "Zwei parallele Aufrufe von `GetNextNumber(updateDatabase:true)` für denselben Nummernkreis dürfen keine identische Nummer liefern (Lasttest mit paralleler Ausführung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -114,7 +120,8 @@ "tracelinks": "SyRS-007, SyRS-008, SwRS-008, SwRS-009", "konsolidierung": "nein", "pruefidee": "Ein Ticket wird angelegt, bearbeitet, Zeit erfasst und abgeschlossen; jeder Schritt ist im Änderungsprotokoll nachvollziehbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -130,7 +137,8 @@ "tracelinks": "SyRS-002, SwRS-009", "konsolidierung": "nein", "pruefidee": "Testbenutzer mit EDIT_HELPDESK aber ohne CLOSE_REQUEST versucht, Status auf \"geschlossen\" zu setzen → erwartet: Fehler-Result, kein Speichern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -146,7 +154,8 @@ "tracelinks": "SyRS-009, SwRS-010", "konsolidierung": "nein", "pruefidee": "Wareneingang über einen Lieferschein erhöht den Bestand des betroffenen Artikels am betroffenen Lagerort um die Liefermenge.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -164,7 +173,8 @@ "tracelinks": "SyRS-010", "konsolidierung": "Kandidat: Partnerspezifische EDI-Module folgen strukturell ähnlichem Muster (Import/Connector-Klassen) — im Zielsystem als generisches EDI-Adapter-Framework konsolidierbar. [HYPOTHESE: nicht im Detail verglichen, ob die Partner-Implementierungen tatsächlich strukturell identisch sind — Bestätigung erfordert Tiefenanalyse je Partnermodul.]", "pruefidee": "Eine Testdatei im jeweiligen Partnerformat wird importiert; Ergebnis ist ein systemseitig referenzierbarer Beleg/Belegstatus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -181,7 +191,8 @@ "tracelinks": "SyRS-011, SyRS-002", "konsolidierung": "nein", "pruefidee": "Ein Web-Account meldet sich in CentronNexus an und sieht ausschließlich für ihn freigegebene Artikel (Sonderpreise) im WebCart.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -197,7 +208,8 @@ "tracelinks": "SyRS-012, SwRS-011", "konsolidierung": "nein", "pruefidee": "Für ein beliebiges Modul existieren sowohl eine `BL{Modul}Logic`- als auch eine `WS{Modul}Logic`-Klasse, die dasselbe `I{Modul}Logic`-Interface implementieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -214,7 +226,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "nein", "pruefidee": "Stichprobe von 20 zufälligen benutzersichtbaren Strings im WPF-Client: alle sind auf Deutsch vorhanden (Basis-resx).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -231,7 +244,8 @@ "tracelinks": "SyRS-007, SwRS-008", "konsolidierung": "nein", "pruefidee": "Eine bereits abgerechnete Zeitbuchung eines Tickets kann über EDIT_TIME nicht mehr gelöscht werden (erwarteter Fehler).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -247,7 +261,8 @@ "tracelinks": "StRS-001; SwRS-001", "konsolidierung": "nein", "pruefidee": "Direkter Aufruf von `CheckRightsFromUser` mit der I3D eines Rechts, das keiner Gruppe des Benutzers zugewiesen ist, liefert eine leere Liste.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -263,7 +278,8 @@ "tracelinks": "StRS-002; SwRS-003", "konsolidierung": "Kandidat: identisches Scoping-Muster (All/OnlyOwn/OnlyOwnBranch) potenziell in weiteren Modulen (Kalender, Mitarbeiterauslastung) — nur für Helpdesk verifiziert, für andere Module [HYPOTHESE].", "pruefidee": "Benutzer mit SHOW_HELPDESK_ONLY_OWN_BRANCH erhält bei Ticketsuche ausschließlich Tickets seiner Filiale, auch bei explizitem Filterversuch auf andere Filialen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -279,7 +295,8 @@ "tracelinks": "StRS-003; SwRS-004", "konsolidierung": "nein", "pruefidee": "Für einen Lieferschein mit bekanntem Ursprungsauftrag und bekannter Folgerechnung liefert `GetRelatedItemsForObject` genau diese zwei Objekte mit korrektem IsOrigin-Wert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -295,7 +312,8 @@ "tracelinks": "StRS-003, StRS-004; SwRS-005", "konsolidierung": "nein", "pruefidee": "Ein Datensatz in `ObjectExternalReferences` mit bekannter ExternalReferenceID liefert bei Abfrage den verknüpften internen Auftrag/Lieferschein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -311,7 +329,8 @@ "tracelinks": "StRS-005; SwRS-006", "konsolidierung": "nein", "pruefidee": "Statischer Test: Serialisierung/Deserialisierung eines Belegs erlaubt keinen anderen Enum-Wert als die drei definierten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -327,7 +346,8 @@ "tracelinks": "StRS-006; SwRS-007", "konsolidierung": "nein", "pruefidee": "Lasttest mit N parallelen Threads, die `GetNextNumber(updateDatabase:true)` für denselben Nummernkreis aufrufen: alle N Ergebnisse müssen paarweise verschieden sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -344,7 +364,8 @@ "tracelinks": "StRS-003; SwRS-004", "konsolidierung": "nein", "pruefidee": "Nach Änderung eines Belegs existiert ein neuer `ReceiptLog`-Eintrag mit korrektem Employee- und Zeitstempel-Wert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -360,7 +381,8 @@ "tracelinks": "StRS-008; SwRS-009", "konsolidierung": "nein", "pruefidee": "Statuswechsel eines Tickets vom konfigurierten Abschlussstatus zurück auf \"in Bearbeitung\" führt zu `ClosedAt == null` nach dem Speichern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -376,7 +398,8 @@ "tracelinks": "StRS-009; SwRS-010", "konsolidierung": "nein", "pruefidee": "Buchung eines Lieferscheinpostens mit abweichendem Einkaufspreis führt zu aktualisiertem `SecondaryStockArticle`-Preis für den betroffenen Artikel/Lagerort.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -392,7 +415,8 @@ "tracelinks": "StRS-010; SwRS-004", "konsolidierung": "nein", "pruefidee": "Für jeden Partnerordner existiert mindestens eine BL-Klasse mit Importmethode; Testnachricht des Partnerformats erzeugt einen validen internen Beleg.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -408,7 +432,8 @@ "tracelinks": "StRS-011; SwRS-012", "konsolidierung": "nein", "pruefidee": "Ein WebAccount ohne explizite WebAccountsRights-Zuweisung erhält bei `CheckWebRightsFromUser` eine leere Ergebnisliste, selbst wenn ein gleichnamiges internes Recht existiert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -424,7 +449,8 @@ "tracelinks": "StRS-012; SwRS-011", "konsolidierung": "nein", "pruefidee": "Ein Modul mit `SupportsConnectionTypes = [SqlServer, CentronWebServices]` liefert bei beiden Verbindungsarten dieselben Testdaten für dieselbe Anfrage.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -440,7 +466,8 @@ "tracelinks": "StRS-013", "konsolidierung": "nein", "pruefidee": "Für eine resx-Datei ohne .en.resx-Pendant liefert die Lokalisierung zur Laufzeit den deutschen Text statt eines Fehlers/leeren Strings.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -457,7 +484,8 @@ "tracelinks": "StRS-001; SwRS-013", "konsolidierung": "nein", "pruefidee": "Nach Passwortänderung enthält die Datenbankspalte `Password` einen 40-stelligen Hex-String, kein Klartext.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -473,7 +501,8 @@ "tracelinks": "SyRS-014; SwRS-013", "konsolidierung": "nein", "pruefidee": "Setzen eines Passworts mit Länge < PasswordMinLength liefert Result mit Status Error und der genannten Fehlermeldung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -490,7 +519,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Unit-Test ruft CheckRightsFromUser mit einer Mischung aus zugewiesenen/nicht zugewiesenen Recht-IDs auf; Ergebnisliste enthält exakt die zugewiesene Teilmenge.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-002", @@ -506,7 +536,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Simulation einer Exception innerhalb der Session-Erzeugung während `HasUserRight`-Aufruf: Rückgabewert ist `false`, keine Exception propagiert zum Aufrufer.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-003", @@ -522,7 +553,8 @@ "tracelinks": "SyRS-002", "konsolidierung": "nein", "pruefidee": "Für alle 2^3 Kombinationen der drei Basisrechte liefert die Methode den in der Tabelle der Fallunterscheidung dokumentierten Modus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-004", @@ -539,7 +571,8 @@ "tracelinks": "SyRS-003, SyRS-004, SyRS-010", "konsolidierung": "nein", "pruefidee": "Für jeden in ReceiptProgressionBL verwendeten numerischen Code existiert ein korrespondierender, namentlich passender Enum-Wert in `CentronObjectKindNumeric` (Konsistenzprüfung Enum vs. SQL-Literale).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-005", @@ -555,7 +588,8 @@ "tracelinks": "SyRS-003, SyRS-004", "konsolidierung": "nein", "pruefidee": "Rechnung mit gesetztem `DownPaymentForOrderI3D` erscheint bei Abfrage der verknüpften Objekte des referenzierten Auftrags.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-006", @@ -571,7 +605,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "Kandidat: Zwei redundante Zuordnungen (Attribut + switch-Methode) für dieselbe Information — im Zielsystem auf eine einzige Quelle konsolidierbar.", "pruefidee": "Für jeden Enum-Wert liefern sowohl das Description-Attribut als auch `GetReceiptStateString()` denselben deutschen Text (Konsistenzprüfung der doppelten Definition).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-007", @@ -588,7 +623,8 @@ "tracelinks": "SyRS-006", "konsolidierung": "nein", "pruefidee": "Zwei parallele Transaktionen mit demselben Ausgangswert `Current`: nur eine darf erfolgreich committen, die andere muss die Schleife erneut durchlaufen und einen anderen Wert erhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-008", @@ -604,7 +640,8 @@ "tracelinks": "StRS-014", "konsolidierung": "nein", "pruefidee": "Suche nach der konkreten Prüfmethode (voraussichtlich in einer `HelpdeskTimer*BL`-Klasse) und Verifikation der Bedingung im Code als Folgeschritt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-009", @@ -620,7 +657,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Ticket im Abschlussstatus mit gesetztem ClosedAt wird auf \"in Bearbeitung\" umgestellt → nach Speichern ist ClosedAt == null.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-010", @@ -636,7 +674,8 @@ "tracelinks": "SyRS-009", "konsolidierung": "nein", "pruefidee": "Zwei aufeinanderfolgende Wareneingänge mit unterschiedlichem Einkaufspreis führen zu einem im Artikel/Lagerort konsistent nachvollziehbaren, aktualisierten Preis (z. B. gleitender Durchschnitt oder letzter Preis – exakte Bewertungsmethode nicht Teil dieses Belegs).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -652,7 +691,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Neues Test-Modul mit korrektem Namensschema wird ohne expliziten Registrierungsaufruf über `ClassContainer.Instance.WithInstance()` auflösbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -668,7 +708,8 @@ "tracelinks": "SyRS-011", "konsolidierung": "Kandidat: Zwei parallele, strukturell unterschiedliche Rechtemodelle (gruppenbasiert für AppUser, direkt für WebAccount) — im Zielsystem ggf. auf ein einheitliches RBAC-Modell konsolidierbar.", "pruefidee": "Datenmodellprüfung: `WebAccountsRights` besitzt keine Fremdschlüsselspalte auf eine Gruppentabelle (Strukturvergleich mit `Sichtrus`/`Sichmemb`).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-013", @@ -684,6 +725,7 @@ "tracelinks": "SyRS-014", "konsolidierung": "nein", "pruefidee": "Zwei AppUser-Datensätze mit demselben Testpasswort erzeugen identische Werte in der Spalte `Password`.", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173142_v3.2.0-496c/_meta/anforderungen.md b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173142_v3.2.0-496c/_meta/anforderungen.md index a73c9013..47e1b354 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173142_v3.2.0-496c/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173142_v3.2.0-496c/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -36,6 +38,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 38 (90,5 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -53,5 +59,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (20 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 42 von 42 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173143_v3.2.0-2bc6/Protokoll.md b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173143_v3.2.0-2bc6/Protokoll.md index a70428cf..6454510f 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173143_v3.2.0-2bc6/Protokoll.md +++ b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173143_v3.2.0-2bc6/Protokoll.md @@ -96,6 +96,8 @@ allen V1b-Laeufen, wo sie um bis zu Faktor 21,6 auseinanderlagen. Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -132,6 +134,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 80 (97,6 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -149,6 +155,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (40 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 82 von 82 mit Tracelinks (100,0 %) | ## Vergleich V1 (solo) gegen V1b (builtin) diff --git a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173143_v3.2.0-2bc6/_meta/anforderungen.json b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173143_v3.2.0-2bc6/_meta/anforderungen.json index 4870e6ea..6e8f4f64 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173143_v3.2.0-2bc6/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173143_v3.2.0-2bc6/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-001, SyRS-002, SyRS-026", "konsolidierung": "nein", "pruefidee": "Benutzer ohne die entsprechende Gruppenmitgliedschaft ruft eine rechtegeschützte Aktion auf (API und WPF) → Zugriff wird verweigert (403 bzw. Result.AsError mit RightCheckFailed).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -32,7 +33,8 @@ "tracelinks": "SyRS-003, StRS-001", "konsolidierung": "nein", "pruefidee": "Anmeldung als WebAccount und Aufruf einer internen Beleg-Ansichtsfunktion → Result.AsError mit RightCheckFailed und Text \"Web-Benutzer haben keine Berechtigung Belege einzusehen.\"", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -49,7 +51,8 @@ "tracelinks": "SyRS-004, StRS-001", "konsolidierung": "nein", "pruefidee": "Benutzer der Filiale A mit \"nur eigene Filiale\"-Recht versucht, einen Beleg der Filiale B zu bearbeiten → Fehlermeldung \"...einer anderen Filiale zu bearbeiten.\"", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -65,7 +68,8 @@ "tracelinks": "SyRS-005, StRS-001", "konsolidierung": "nein", "pruefidee": "Löschversuch der Gruppe \"Administratoren\" → Result.AsError; Versuch, ein nicht in der Whitelist enthaltenes Recht der Admin-Gruppe zu entziehen → Operation liefert false/keine Änderung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -82,7 +86,8 @@ "tracelinks": "SyRS-006", "konsolidierung": "nein", "pruefidee": "Nach Zuweisung eines Rechts an eine Gruppe erscheint ein neuer Eintrag in GetAllAppRightLogs mit korrektem Beschreibungstext und Benutzerreferenz.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -100,7 +105,8 @@ "tracelinks": "SyRS-007, SyRS-008", "konsolidierung": "nein", "pruefidee": "Ein Angebot wird in einen Auftrag übernommen; GetReceiptForwardedInto(Angebot) liefert den erzeugten Auftrag als Ziel.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -117,7 +123,8 @@ "tracelinks": "SyRS-009, StRS-006", "konsolidierung": "nein", "pruefidee": "Ein stornierter Beleg kann nicht mehr als bezahlt markiert werden (Fehlermeldung); ein neu angelegter Beleg mit passender Zahlungsbedingung wird automatisch auf \"abgeschlossen\" gesetzt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -134,7 +141,8 @@ "tracelinks": "SyRS-010, SyRS-011, StRS-006", "konsolidierung": "nein", "pruefidee": "Zwei simultane Speichervorgänge im selben Nummernkreis führen zu zwei unterschiedlichen, gültigen Nummern (kein Duplikat in der Zieltabelle).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -151,7 +159,8 @@ "tracelinks": "SyRS-012, StRS-006", "konsolidierung": "nein", "pruefidee": "Benutzer A speichert einen Beleg; Benutzer B versucht anschließend, denselben (veralteten) Beleg mit alter ConcurrencyControlGuid zu speichern → Fehler \"was changed in the meantime\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -167,7 +176,8 @@ "tracelinks": "SyRS-013, StRS-007", "konsolidierung": "nein", "pruefidee": "Benutzer mit ausschließlich INCOMING_PAYMENT_TRANSACTIONS-Recht (ohne allgemeines Bearbeitungsrecht) kann einen Beleg als bezahlt markieren; derselbe Versuch an einem stornierten Beleg schlägt fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -184,7 +194,8 @@ "tracelinks": "SyRS-014, StRS-007", "konsolidierung": "nein", "pruefidee": "Rechnung mit aktivierter ZUGFeRD-Einstellung erzeugen → resultierendes PDF enthält eingebettetes XML gemäß ZUGFeRD-Schema.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -202,7 +213,8 @@ "tracelinks": "SyRS-015, StRS-001", "konsolidierung": "nein", "pruefidee": "Signatureinstellungen (Zertifikat/TSA) werden von einem Benutzer ohne Administration.SETTINGS-Recht abgelehnt gespeichert; ein signiertes PDF weist eine gültige, prüfbare Signatur auf.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -219,7 +231,8 @@ "tracelinks": "SyRS-016, StRS-012, StRS-020", "konsolidierung": "nein", "pruefidee": "Aufruf der URL .../weboffer/{gültigesToken} ohne vorherige Anmeldung zeigt das zugehörige Angebot inklusive Mandantenbranding an; ein ungültiges/abgelaufenes Token verweigert den Zugriff (Detail-Mechanismus nicht verifiziert, siehe Hypothesen.md).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -236,7 +249,8 @@ "tracelinks": "SyRS-017, SyRS-018", "konsolidierung": "nein", "pruefidee": "Aufruf von DataSecurityExecuteCleanUp mit gültigen Rechten führt zu keiner beobachtbaren Datenänderung (Abgleich Datenbestand vor/nach Aufruf) → bestätigt Stub-Charakter.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-015", @@ -253,7 +267,8 @@ "tracelinks": "SyRS-019, SyRS-020", "konsolidierung": "nein", "pruefidee": "Ein Ticket mit IsOnlyInternalVisible=true zeigt den betreffenden Inhalt im Kundenportal nicht an; ein gesperrtes Ticket (LockUserName gesetzt) kann von einem zweiten Bearbeiter nicht gleichzeitig verändert werden (UI-seitige Prüfung, Detailmechanismus nicht vollständig verifiziert).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-016", @@ -270,7 +285,8 @@ "tracelinks": "SyRS-021, StRS-015", "konsolidierung": "nein", "pruefidee": "Benutzer ohne CanChangeDateInInvoices-Einstellung öffnet die Timer-Fakturierungs-Einstellungen für eine Rechnung → BillingDate-Feld ist deaktiviert, Hinweistext \"Sie besitzen nicht das Recht ... Datum der Rechnung nach neuer Version / bei Neuanlage ändern\" wird angezeigt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-017", @@ -286,7 +302,8 @@ "tracelinks": "SyRS-022", "konsolidierung": "nein", "pruefidee": "Zwei aufeinanderfolgende Wareneingangsbuchungen mit unterschiedlichem Preis auf denselben Artikel → RawEk2 entspricht nach der zweiten Buchung dem Preis der ersten Buchung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-018", @@ -303,7 +320,8 @@ "tracelinks": "SyRS-023", "konsolidierung": "nein", "pruefidee": "Ein Mandant ohne Lizenz \"CentronInternal\" erhält bei Aufruf eines mit der Policy \"CentronHosted\" geschützten Endpunkts keinen Zugriff, unabhängig von individuellen Benutzerrechten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-019", @@ -319,7 +337,8 @@ "tracelinks": "SyRS-024, SyRS-025, StRS-001", "konsolidierung": "nein", "pruefidee": "Aufruf eines geschützten Endpunkts ohne jegliches Authentifizierungsmerkmal → HTTP 401; Aufruf mit abgelaufenem JWT → 401 (ValidateLifetime=true).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-020", @@ -335,7 +354,8 @@ "tracelinks": "SyRS-027, StRS-013", "konsolidierung": "nein", "pruefidee": "Zwei Mandanten mit unterschiedlich konfiguriertem Logo erzeugen sichtbar unterschiedliche Web-Angebots-Seiten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -351,7 +371,8 @@ "tracelinks": "StRS-001; SwRS-001, SwRS-002", "konsolidierung": "nein", "pruefidee": "Unit-/Integrationstest: Benutzer mit Gruppenmitgliedschaft X, Gruppe X besitzt Recht Y → HasUserRight(User, Y)==true; Entzug des Rechts → false nach Cache-Invalidierung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -368,7 +389,8 @@ "tracelinks": "StRS-001; SwRS-003", "konsolidierung": "nein", "pruefidee": "Integrationstest: Aufruf eines annotierten Endpunkts ohne Login → 401; mit Login aber ohne Recht → 403; mit Recht → 200.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -384,7 +406,8 @@ "tracelinks": "StRS-002; SwRS-004", "konsolidierung": "nein", "pruefidee": "WebAccount-Login mit (fehlerhaft) hinterlegtem internen AppRight versucht Belegeinsicht → dennoch RightCheckFailed.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -400,7 +423,8 @@ "tracelinks": "StRS-003; SwRS-005", "konsolidierung": "nein", "pruefidee": "Benutzer ohne jegliches Bearbeitungsrecht → Meldung \"nicht das Recht ... zu bearbeiten\"; Benutzer mit Recht, aber falscher Filiale → Meldung \"... einer anderen Filiale zu bearbeiten\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -416,7 +440,8 @@ "tracelinks": "StRS-004; SwRS-006", "konsolidierung": "nein", "pruefidee": "Versuch, ein nicht in der Whitelist enthaltenes Recht (z. B. Rechteverwaltung selbst) von der Administratorengruppe zu entziehen → RemoveAssignGroupToRight liefert false.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -432,7 +457,8 @@ "tracelinks": "StRS-005; SwRS-007", "konsolidierung": "nein", "pruefidee": "Nach AddRightToRightGroup existiert genau ein neuer AppRightLog-Eintrag mit Kind=AddRightToGroup und korrektem Beschreibungstext.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -448,7 +474,8 @@ "tracelinks": "StRS-006; SwRS-008", "konsolidierung": "nein", "pruefidee": "Für jede Unterklasse von ReceiptBase existieren gültige Implementierungen der vier abstrakten Members (Compile-Time-Prüfung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -464,7 +491,8 @@ "tracelinks": "StRS-006; SwRS-009", "konsolidierung": "nein", "pruefidee": "Position P eines Angebots wurde in einen aktiven Auftrag übernommen → Versuch, P aus dem Angebot zu entfernen, wird als \"removedPositionsThatCouldNotBeRemoved\" erkannt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -480,7 +508,8 @@ "tracelinks": "StRS-007; SwRS-010", "konsolidierung": "Kandidat: SyRS-013 (beide betreffen UpdateReceiptIsPaid, unterschiedliche Prüfaspekte derselben Methode – im Zielsystem ggf. als eine zusammengesetzte Regel modellieren)", "pruefidee": "UpdateReceiptIsPaid auf einem Canceled-Beleg → Result.AsError, kein Datenbank-Write.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -496,7 +525,8 @@ "tracelinks": "StRS-008; SwRS-011, SwRS-012", "konsolidierung": "nein", "pruefidee": "Lasttest: N parallele Aufrufe von GetNextNumber(..., updateDatabase:true) auf demselben Nummernkreis liefern N paarweise verschiedene Nummern.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -513,7 +543,8 @@ "tracelinks": "StRS-008; SwRS-013", "konsolidierung": "nein", "pruefidee": "Zwei Filialen desselben Mandanten erzeugen unabhängig voneinander Rechnung Nr. 1000 ohne Kollision (unterschiedliche NumberGroup-Objekte).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -529,7 +560,8 @@ "tracelinks": "StRS-009; SwRS-014", "konsolidierung": "nein", "pruefidee": "Speichern mit veralteter ConcurrencyControlGuid → Fehler ChangedByOtherInstance; Speichern mit übersprungener Versionsnummer (z. B. v1→v3) → Fehler \"keine gültige Versionsnummer\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -545,7 +577,8 @@ "tracelinks": "StRS-010; SwRS-010", "konsolidierung": "Kandidat: SyRS-009 (siehe dort)", "pruefidee": "Benutzer mit ausschließlich INCOMING_PAYMENT_TRANSACTIONS-Recht kann UpdateReceiptIsPaid erfolgreich ausführen, obwohl CanUserEditReceipt für ihn fehlschlägt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -561,7 +594,8 @@ "tracelinks": "StRS-011; SwRS-015", "konsolidierung": "nein", "pruefidee": "Stornierte Rechnung mit aktivierter ZUGFeRD-Einstellung wird gedruckt → resultierendes PDF enthält KEINE ZUGFeRD-Struktur.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -577,7 +611,8 @@ "tracelinks": "StRS-012; SwRS-016", "konsolidierung": "nein", "pruefidee": "Auslesen der zugrunde liegenden ApplicationSettings-Datensätze außerhalb der BL zeigt Base64/verschlüsselten, nicht lesbaren Wert für Zertifikat und Passwort.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-016", @@ -593,7 +628,8 @@ "tracelinks": "StRS-013; SwRS-017", "konsolidierung": "nein", "pruefidee": "Aufruf der Route mit gültigem Token in einem Browser ohne bestehende Session zeigt den Beleg an.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-017", @@ -609,7 +645,8 @@ "tracelinks": "StRS-014; SwRS-018", "konsolidierung": "nein", "pruefidee": "Benutzer mit Recht, aber deaktiviertem Feature-Flag → \"Insufficient rights!\"; Benutzer ohne Recht, aber aktiviertem Flag → ebenfalls \"Insufficient rights!\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-018", @@ -625,7 +662,8 @@ "tracelinks": "StRS-014; SwRS-018", "konsolidierung": "nein", "pruefidee": "Vergleich des Datenbankinhalts (betroffene Tabellen) vor und nach Aufruf von DataSecurityExecuteCleanUp mit denselben Filterkriterien wie zuvor in GetDataSecurityCleanUpStats verwendet → keine Änderung erwartet (bestätigt Lücke).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-019", @@ -641,7 +679,8 @@ "tracelinks": "StRS-015; SwRS-019", "konsolidierung": "nein", "pruefidee": "Anlage eines neuen HelpdeskStateBase-Datensatzes über die Stammdatenverwaltung; neuer Status steht danach für Tickets zur Auswahl (Detailmechanismus der UI-Anbindung nicht vollständig verifiziert).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-020", @@ -657,7 +696,8 @@ "tracelinks": "StRS-015; SwRS-020", "konsolidierung": "nein", "pruefidee": "Zwei Bearbeiter öffnen dasselbe Ticket; zweiter Bearbeiter erhält Hinweis auf Sperre durch ersten (LockUserName gesetzt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-021", @@ -673,7 +713,8 @@ "tracelinks": "StRS-016; SwRS-021", "konsolidierung": "nein", "pruefidee": "Für ReceiptKind=InvoiceClass mit CanChangeDateInInvoices=false → BillingDateIsEnabled=false, Hinweistext enthält \"der Rechnung\"; für DeliveryListClass entsprechend \"des Lieferscheins\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-022", @@ -689,7 +730,8 @@ "tracelinks": "StRS-017; SwRS-022", "konsolidierung": "nein", "pruefidee": "Wareneingang mit Preis A, danach Wareneingang mit Preis B auf denselben Artikel im Hauptlager → nach zweiter Buchung: RawEk1=B, RawEk2=A.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-023", @@ -706,7 +748,8 @@ "tracelinks": "StRS-018, StRS-019; SwRS-023", "konsolidierung": "nein", "pruefidee": "Mandant ohne Lizenz CentronInternal ruft geschützten Endpunkt mit gültigem JWT eines berechtigten Benutzers auf → Zugriff dennoch verweigert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-024", @@ -722,7 +765,8 @@ "tracelinks": "StRS-019; SwRS-024", "konsolidierung": "nein", "pruefidee": "Manuell abgelaufener JWT wird bei Aufruf eines geschützten Endpunkts mit 401 abgelehnt (ValidateLifetime).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-025", @@ -738,7 +782,8 @@ "tracelinks": "StRS-019; SwRS-025", "konsolidierung": "nein", "pruefidee": "Ein gültiger SecretKey ohne gültiges JWT erlaubt Zugriff auf ausschließlich SecretKey-geschützte Endpunkte, nicht auf JWT-geschützte Endpunkte (und umgekehrt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-026", @@ -754,7 +799,8 @@ "tracelinks": "StRS-001", "konsolidierung": "nein", "pruefidee": "Controller mit [AuthorizeUserRight(SETTINGS)] und Action mit zusätzlichem [AuthorizeUserRight(ADVANCED_SETTINGS)]: Benutzer mit nur SETTINGS erhält 403 auf dieser Action.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-027", @@ -770,7 +816,8 @@ "tracelinks": "StRS-020; SwRS-017", "konsolidierung": "nein", "pruefidee": "Wechsel der BrandingConfig für einen Mandanten führt ohne Neubau der Anwendung zu geändertem Logo auf der Web-Angebots-Seite.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-028", @@ -786,7 +833,8 @@ "tracelinks": "StRS-020", "konsolidierung": "nein", "pruefidee": "Deployment desselben Images für einen Mandanten in einer anderen Zeitzone → Serverzeit bleibt Europe/Berlin (durch Log-Zeitstempel im Container zu verifizieren).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-029", @@ -802,7 +850,8 @@ "tracelinks": "StRS-001; SwRS-001", "konsolidierung": "nein", "pruefidee": "Performance-Test: N aufeinanderfolgende HasUserRight-Aufrufe für denselben Benutzer erzeugen genau einen SQL-Query (Query-Zähler-Messung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-030", @@ -818,7 +867,8 @@ "tracelinks": "StRS-018", "konsolidierung": "nein", "pruefidee": "Start des gebauten Images ohne vorinstallierte .NET-Runtime auf dem Host → Anwendung startet erfolgreich (self-contained-Nachweis).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-031", @@ -835,7 +885,8 @@ "tracelinks": "StRS-012", "konsolidierung": "nein", "pruefidee": "Build ohne gültigen DevExpress-Lizenzschlüssel → Build- oder Laufzeitfehler in signatur-/reportbezogenen Funktionen (nicht im Rahmen dieser statischen Analyse ausführbar getestet).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-032", @@ -853,7 +904,8 @@ "tracelinks": "StRS-018", "konsolidierung": "nein", "pruefidee": "Migration einer einzelnen BL-Klasse mit Raw-SQL auf eine andere Datenbank ohne Anpassung der SQL-Strings schlägt fehl (z. B. IIF ist keine Standard-SQL-Funktion in PostgreSQL).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-033", @@ -870,7 +922,8 @@ "tracelinks": "StRS-001, StRS-006 bis StRS-018", "konsolidierung": "nein", "pruefidee": "Statische Codeanalyse: Anteil von BL-Methoden mit Rückgabetyp Result/Result\\ an rechteprüfenden/validierenden Methoden (Stichprobe zeigt nahezu 100 % in den analysierten Klassen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-034", @@ -887,7 +940,8 @@ "tracelinks": "StRS-018", "konsolidierung": "nein", "pruefidee": "n/a (dokumentierender Befund, keine funktionale Prüfidee) - relevanter Hinweis für Datenmigrationsplanung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -903,7 +957,8 @@ "tracelinks": "SyRS-001, SyRS-029", "konsolidierung": "nein", "pruefidee": "Codeanalyse: keine weiteren Vorkommen von direktem SQL-Zugriff auf Sichtrus/Sichmemb außerhalb AppRightsBL im Backend-Quellcode.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-002", @@ -919,7 +974,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Benutzer in zwei Gruppen mit überschneidenden Rechten → Ergebnisliste enthält jedes Recht nur gemäß SQL-JOIN-Semantik (Duplikate möglich, da kein DISTINCT im Statement).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-003", @@ -935,7 +991,8 @@ "tracelinks": "SyRS-002", "konsolidierung": "nein", "pruefidee": "Unit-Test des Filters mit gemocktem HttpContext ohne User → context.Result ist UnauthorizedResult; mit User ohne Recht → ForbidResult.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-004", @@ -951,7 +1008,8 @@ "tracelinks": "SyRS-003", "konsolidierung": "nein", "pruefidee": "Statischer Codepfad-Test: bei IsWebAccountLogin==true wird _specificLogics.Execute nicht erreicht (Branch-Coverage).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-005", @@ -967,7 +1025,8 @@ "tracelinks": "SyRS-004", "konsolidierung": "nein", "pruefidee": "Neue Testimplementierung von HasRightToEditReceipt für eine fiktive Belegart wird korrekt von CanUserEditReceipt verwendet, ohne dass die Methode selbst angepasst werden muss.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-006", @@ -983,7 +1042,8 @@ "tracelinks": "SyRS-005", "konsolidierung": "nein", "pruefidee": "Aufruf von RemoveAssignGroupToRight mit einer nicht in der Liste enthaltenen Recht-I3D und der Administratorengruppe → Rückgabewert false, keine Datenbankänderung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-007", @@ -999,7 +1059,8 @@ "tracelinks": "SyRS-006", "konsolidierung": "nein", "pruefidee": "Für jede der sieben Operationen existiert ein Test, der nach Ausführung einen AppRightLog mit korrektem Kind-Wert erwartet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-008", @@ -1015,7 +1076,8 @@ "tracelinks": "SyRS-007", "konsolidierung": "nein", "pruefidee": "Compile-Test: jede konkrete Receipt-Unterklasse implementiert alle vier abstrakten Members (Compiler erzwingt dies bereits strukturell).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-009", @@ -1031,7 +1093,8 @@ "tracelinks": "SyRS-008", "konsolidierung": "nein", "pruefidee": "Position in storniertem Folgebeleg → Entfernung aus Ursprungsbeleg wird nicht blockiert; Position in aktivem Folgebeleg → wird blockiert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-010", @@ -1047,7 +1110,8 @@ "tracelinks": "SyRS-009, SyRS-013", "konsolidierung": "nein", "pruefidee": "Vier getrennte Testfälle, je einer pro Prüfschritt, der isoliert zum Fehlschlagen der Methode führt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -1063,7 +1127,8 @@ "tracelinks": "SyRS-010", "konsolidierung": "nein", "pruefidee": "Manuelles Vorbelegen der Zieltabelle mit der rechnerisch nächsten Nummer → FindNextNumber überspringt diese und liefert die übernächste.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -1079,7 +1144,8 @@ "tracelinks": "SyRS-010", "konsolidierung": "nein", "pruefidee": "Zwei simulierte parallele Aufrufe (z. B. über zwei Threads/Sessions) auf dieselbe NumberGroup → beide terminieren erfolgreich mit unterschiedlichem Ergebnis; kein Deadlock, keine Endlosschleife bei realistischer Last.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-013", @@ -1096,7 +1162,8 @@ "tracelinks": "SyRS-011", "konsolidierung": "nein", "pruefidee": "Speichern eines Belegs für den konfigurierten Vorlagen-Kunden → erzeugte Nummer stammt nachweislich nicht aus derselben Zählersequenz wie reguläre Belege desselben Typs.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-014", @@ -1112,7 +1179,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Speichern eines Belegs mit Version=Vorgänger+2 → Fehlermeldung \"keine gültige Versionsnummer\"; Version=Vorgänger (Überschreiben) und Version=Vorgänger+1 → jeweils erfolgreich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-015", @@ -1128,7 +1196,8 @@ "tracelinks": "SyRS-014", "konsolidierung": "nein", "pruefidee": "Rechnung mit global deaktiviertem, aber lokal aktiviertem ZUGFeRD → PDF enthält ZUGFeRD-Struktur (bestätigt ODER-Semantik der Aktivierungsquelle).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-016", @@ -1144,7 +1213,8 @@ "tracelinks": "SyRS-015", "konsolidierung": "nein", "pruefidee": "Direktes Auslesen der zugrunde liegenden ApplicationSettings-Zeile für PdfSigningCertificatePassword zeigt keinen erkennbaren Klartextwert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-017", @@ -1160,7 +1230,8 @@ "tracelinks": "SyRS-016, SyRS-027", "konsolidierung": "nein", "pruefidee": "Aufruf mit syntaktisch validem, aber nicht existierendem Token → definiertes Fehlverhalten (z. B. leere Seite/Fehlermeldung; exakter Mechanismus nicht verifiziert, siehe Hypothesen.md).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-018", @@ -1176,7 +1247,8 @@ "tracelinks": "SyRS-017, SyRS-018", "konsolidierung": "nein", "pruefidee": "Aufruf von DataSecurityExecuteCleanUp mit denselben Filterkriterien wie eine zuvor als \"zu bereinigen\" ausgewiesene Statistik → betroffene Datensätze bleiben unverändert (Regressionstest zur Schließung dieser Lücke empfohlen).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-019", @@ -1192,7 +1264,8 @@ "tracelinks": "SyRS-019", "konsolidierung": "nein", "pruefidee": "Datenbankseitiges Anlegen eines neuen HelpdeskStateBase-Datensatzes wird von der Anwendung ohne Codeänderung akzeptiert (keine Enum-Validierung im Entitätscode erkennbar).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-020", @@ -1208,7 +1281,8 @@ "tracelinks": "SyRS-020", "konsolidierung": "nein", "pruefidee": "Serialisierung/Deserialisierung eines Helpdesk-Datensatzes bewahrt alle genannten Feldwerte verlustfrei (Struktur-Test).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-021", @@ -1224,7 +1298,8 @@ "tracelinks": "SyRS-021", "konsolidierung": "nein", "pruefidee": "Property-Change-Test: Setzen von ReceiptKind=InvoiceClass löst automatisch einen Aufruf von UpdateBillingDateIsEnabled aus (SetProperty-Callback, Z. 195-199 im Diff).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-022", @@ -1240,7 +1315,8 @@ "tracelinks": "SyRS-022", "konsolidierung": "nein", "pruefidee": "Zwei Hauptlagerbuchungen mit identischem Preis → PurchasePrice bleibt unverändert, RawEk1/RawEk1Date werden dennoch aktualisiert (Else-Zweig Z. 3639-3651).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-023", @@ -1256,7 +1332,8 @@ "tracelinks": "SyRS-023", "konsolidierung": "nein", "pruefidee": "Unit-Test: HasLicense liefert false → context.HasSucceeded bleibt false nach Aufruf; HasLicense liefert true → context.HasSucceeded==true.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-024", @@ -1272,7 +1349,8 @@ "tracelinks": "SyRS-024", "konsolidierung": "nein", "pruefidee": "Token mit falscher Audience → Ablehnung (ValidateAudience); Token mit Claim \"sub\", DefaultMapInboundClaims=false → Claim bleibt \"sub\", nicht auf ClaimTypes.NameIdentifier gemappt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-025", @@ -1289,7 +1367,8 @@ "tracelinks": "SyRS-025", "konsolidierung": "nein", "pruefidee": "Request mit korrektem SecretKey, aber ohne JWT/Ticket → Zugriff auf SecretKey-Policy-geschützte Endpunkte erfolgreich, auf JWT-geschützte Endpunkte weiterhin verweigert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-026", @@ -1305,7 +1384,8 @@ "tracelinks": "SyRS-033", "konsolidierung": "nein", "pruefidee": "Stichprobenartige Codeanalyse über weitere *BL-Klassen außerhalb der explizit gelesenen Stichprobe bestätigt dasselbe Muster (Konsistenzprüfung, im Rahmen dieser Iteration nicht flächendeckend durchgeführt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-027", @@ -1322,7 +1402,8 @@ "tracelinks": "SyRS-033", "konsolidierung": "nein", "pruefidee": "Codeanalyse: Anteil öffentlicher BL-Methoden mit Rückgabetyp Result/Result\\ in den analysierten Klassen (Stichprobe: deutlich überwiegend, exakte Quote nicht vollständig erhoben).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-028", @@ -1338,6 +1419,7 @@ "tracelinks": "SyRS-007, SyRS-034", "konsolidierung": "nein", "pruefidee": "Historische Konsistenzprüfung: keine doppelt vergebenen numerischen Werte in der Enum-Definition (Stichprobenprüfung während der Analyse ergab keine Duplikate, siehe Analysebericht Konsistenzcheck).", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173143_v3.2.0-2bc6/_meta/anforderungen.md b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173143_v3.2.0-2bc6/_meta/anforderungen.md index a4eac856..55a10b83 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173143_v3.2.0-2bc6/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_173143_v3.2.0-2bc6/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 80 (97,6 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (40 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 82 von 82 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180416_v3.3.0-5851/Protokoll.md b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180416_v3.3.0-5851/Protokoll.md index f3030691..9e74916e 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180416_v3.3.0-5851/Protokoll.md +++ b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180416_v3.3.0-5851/Protokoll.md @@ -97,6 +97,8 @@ Ohne Subagenten sind Haupt- und Gesamtwerte für `claude-sonnet-5` identisch. Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -132,6 +134,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 45 (75,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -149,6 +155,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **verletzt** – 1 von 26 ungedeckt: SwRS-003 | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 59 von 60 mit Tracelinks (98,3 %) | ## V1-Reihe: fünf Messpunkte unter identischer Bedingung diff --git a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180416_v3.3.0-5851/_meta/anforderungen.json b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180416_v3.3.0-5851/_meta/anforderungen.json index b8984261..f86c2c92 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180416_v3.3.0-5851/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180416_v3.3.0-5851/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-001, SyRS-002", "konsolidierung": "nein", "pruefidee": "Einem Testbenutzer wird gezielt ein Einzelrecht (z. B. ADD_NEW_HELPDESK) entzogen; Ticketanlage muss verweigert werden, während andere Helpdesk-Funktionen weiter verfügbar bleiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-002", @@ -32,7 +33,8 @@ "tracelinks": "SyRS-001, SyRS-002", "konsolidierung": "nein", "pruefidee": "Zwei Benutzer derselben Gruppe, einer zusätzlich mit SHOW_HELPDESK_ONLY_OWN: Ersterer sieht alle Tickets der Filiale, Zweiterer nur eigene.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-003", @@ -49,7 +51,8 @@ "tracelinks": "SyRS-003, SyRS-004", "konsolidierung": "nein", "pruefidee": "Für jede Belegart existiert eine Entity-Klasse, die von ReceiptBase erbt und ReceiptKind/GetReceiptItems() implementiert (Code-Review/Reflektion).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-004", @@ -66,7 +69,8 @@ "tracelinks": "SyRS-005, SwRS-005", "konsolidierung": "nein", "pruefidee": "Nach Änderung eines Rechnungsfeldes existiert ein neuer Datensatz in RechKopfVersions mit dem vorherigen Wert und OriginalI3D-Referenz auf den aktuellen Datensatz.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-005", @@ -83,7 +87,8 @@ "tracelinks": "SyRS-006, SyRS-007", "konsolidierung": "nein", "pruefidee": "Kunde ruft Link auf, ändert Menge einer Position, klickt „Annehmen“ → Zustand AcceptWebReceiptWithChangeRequests wird gesetzt, keine automatische Auftragsanlage ohne weiteren Schritt (siehe SyRS-006).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-006", @@ -100,7 +105,8 @@ "tracelinks": "SyRS-007, SyRS-008, SwRS-010", "konsolidierung": "nein", "pruefidee": "Bei AllowAcceptReceiptWithoutSignature=false darf ReceiptBL.AcceptWebReceipt keinen Auftrag erzeugen, bevor der Signaturvorgang abgeschlossen ist (Statuscheck WebReceiptState.WebOfferSign vor Abschluss).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-007", @@ -118,7 +124,8 @@ "tracelinks": "SyRS-007, SwRS-010", "konsolidierung": "Kandidat: StRS-006 (gleiche fachliche Funktion „Auftragserteilung“, unterschiedliche Ausprägung der Signaturpflicht – im Zielsystem als ein konfigurierbarer Ablauf statt zwei Codepfade zu modellieren)", "pruefidee": "Beleg mit AllowAcceptReceiptWithoutSignature=true: Nach Klick „Annehmen“ entsteht sofort ein Auftrag, WebReceiptState wird nicht auf WebOfferSign gesetzt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-008", @@ -136,7 +143,8 @@ "tracelinks": "SyRS-009, SyRS-010, SwRS-014", "konsolidierung": "nein", "pruefidee": "Vertrag mit AutomatedBilling=true und BillingIntervalKind=Monthly erzeugt nach Ablauf des Intervalls automatisch eine neue Rechnung mit korrektem Betrag.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-009", @@ -152,7 +160,8 @@ "tracelinks": "SyRS-010", "konsolidierung": "nein", "pruefidee": "Vertrag mit ContingentLimitValue=100h und Verbrauch von 105h löst laut Konfiguration eine Zusatzberechnung/Benachrichtigung aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-010", @@ -169,7 +178,8 @@ "tracelinks": "SyRS-011, SwRS-015, SwRS-016", "konsolidierung": "nein", "pruefidee": "Benutzer ohne das entsprechende Recht öffnet Timer-Billing-Assistent für Rechnungen: Feld „Belegdatum“ ist deaktiviert, Info-Icon mit Tooltip „Sie besitzen nicht das Recht ... ist sichtbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-011", @@ -185,7 +195,8 @@ "tracelinks": "SyRS-012", "konsolidierung": "nein", "pruefidee": "Administrator legt neuen Status „Wartet auf Kunde“ an, weist ihn keinem der beiden Sondersettings zu: Status erscheint wählbar, löst aber keine Sonderlogik (Schließen/Reopen-Default) aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-012", @@ -201,7 +212,8 @@ "tracelinks": "SyRS-012, SwRS-018", "konsolidierung": "nein", "pruefidee": "Löschversuch eines Status, der auf 3 Tickets und 1 Task verwendet wird, liefert Fehlermeldung „... wird in 3 Tickets & 1 Task verwendet.“ und der Datensatz bleibt bestehen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-013", @@ -218,7 +230,8 @@ "tracelinks": "SyRS-013, SyRS-014", "konsolidierung": "nein", "pruefidee": "Import einer ALSO-CH-Auftragsbestätigungsdatei führt zu aktualisiertem Auftragsstatus im referenzierten c-entron-Auftrag ohne manuellen Eingriff.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-014", @@ -234,7 +247,8 @@ "tracelinks": "SyRS-013", "konsolidierung": "nein", "pruefidee": "Code-Inspektion von SupplierEdiBL.Komsa.cs bestätigt Fehlen einer Invoice-Verarbeitungsmethode.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-015", @@ -251,7 +265,8 @@ "tracelinks": "SyRS-015, SyRS-016, SwRS-020, SwRS-021", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Lizenz OpenIDConnectAuthentication erhält bei OIDC-Login-Versuch den Fehler „No license for OpenIDConnectAuthentication“, unabhängig von einem gültigen Microsoft-Token.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-016", @@ -268,7 +283,8 @@ "tracelinks": "SyRS-015, SyRS-017", "konsolidierung": "nein", "pruefidee": "LicenseManager.Instance.HasLicense(LicenseGuids.PasswordManager) liefert false für einen Kunden ohne diese Lizenz, UI-Modul „Passwort-Manager“ wird nicht angezeigt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-017", @@ -285,7 +301,8 @@ "tracelinks": "SyRS-018, SwRS-024", "konsolidierung": "nein", "pruefidee": "Ribbon minimieren, Modul wechseln: aktiver Tab zeigt sichtbare Unterstreichung/Hervorhebung ohne Ribbon-Expansion.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-001", @@ -302,7 +319,8 @@ "tracelinks": "StRS-001", "konsolidierung": "nein", "pruefidee": "Direkter Webservice-Aufruf (unter Umgehung der UI) einer rechtebehafteten Methode ohne das erforderliche Recht muss serverseitig abgelehnt werden, auch wenn die UI die Aktion nicht anbietet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-002", @@ -319,7 +337,8 @@ "tracelinks": "StRS-002", "konsolidierung": "nein", "pruefidee": "Zwei Support-Mitarbeiter unterschiedlicher Filialen mit SHOW_HELPDESK_ONLY_OWN_BRANCH sehen bei identischer Suchanfrage jeweils nur Tickets ihrer eigenen Filiale.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-003", @@ -335,7 +354,8 @@ "tracelinks": "StRS-003", "konsolidierung": "nein", "pruefidee": "SELECT * FROM Invoices liefert dieselben fachlichen Felder wie eine direkte Abfrage auf RechKopf, jedoch mit englischen Spaltennamen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-004", @@ -351,7 +371,8 @@ "tracelinks": "StRS-003", "konsolidierung": "nein", "pruefidee": "Ein neues Rechnungsfeld wird nur im View/Entity ergänzt (nicht im Repository): Wert lädt korrekt, geht aber nach dem nächsten Speichervorgang verloren (Regressionstest).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-005", @@ -367,7 +388,8 @@ "tracelinks": "StRS-004", "konsolidierung": "nein", "pruefidee": "Nach zwei aufeinanderfolgenden Änderungen an einem Vertrag existieren zwei Datensätze in VertragKopfVersions mit korrektem OriginalI3D-Bezug und vollständigen historischen Werten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-006", @@ -383,7 +405,8 @@ "tracelinks": "StRS-005", "konsolidierung": "nein", "pruefidee": "Zugriff auf `/weboffer/{Token}` mit geratenem/ungültigem Token liefert Fehlermeldung „Beleg konnte nicht geladen werden.“ statt Fremddaten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-007", @@ -400,7 +423,8 @@ "tracelinks": "StRS-005", "konsolidierung": "nein", "pruefidee": "Zweiter Aufruf von ChangeWebReceiptState nach bereits erfolgter Annahme wird serverseitig abgelehnt (Statuscheck), nicht nur clientseitig durch deaktivierte Buttons verhindert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-008", @@ -416,7 +440,8 @@ "tracelinks": "StRS-006", "konsolidierung": "nein", "pruefidee": "Manipulierter API-Request, der versucht, direkt einen Auftrag ohne vorherigen Signatur-Callback zu erzeugen, wird von ReceiptBL abgelehnt, da der Beleg noch im Zustand WebOfferSign verharrt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-009", @@ -432,7 +457,8 @@ "tracelinks": "StRS-008", "konsolidierung": "nein", "pruefidee": "Vertrag mit BillingIntervalKind=Monthly, AutomatedBilling=true: Am Fälligkeitstag entsteht ohne manuellen Eingriff eine neue Rechnung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-010", @@ -448,7 +474,8 @@ "tracelinks": "StRS-009", "konsolidierung": "nein", "pruefidee": "Änderung der Menge eines kontingentrelevanten Beleg-Items löst Neuberechnung von ContingentBalanceUsedHours aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-011", @@ -464,7 +491,8 @@ "tracelinks": "StRS-010", "konsolidierung": "nein", "pruefidee": "Änderung des zugrunde liegenden Rechts wirkt sich unmittelbar (nach Cache-Refresh) sowohl im Timer-Billing als auch in anderen Belegdatums-Kontexten gleich aus.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-012", @@ -480,7 +508,8 @@ "tracelinks": "StRS-011, StRS-012", "konsolidierung": "nein", "pruefidee": "Ändern der Anwendungseinstellung HelpdeskClosedState auf einen anderen Status-I3D bewirkt sofort, dass GetClosedHelpdeskStatus() den neuen Status liefert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-013", @@ -497,7 +526,8 @@ "tracelinks": "StRS-013", "konsolidierung": "nein", "pruefidee": "Aufruf von ApplyDistriToCentron mit EdiDataType=Alltron delegiert nachweislich an eine SupplierEdiBL.Alltron.cs-Methode (z. B. per Log-Eintrag oder Debugger).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-014", @@ -513,7 +543,8 @@ "tracelinks": "StRS-013, StRS-014", "konsolidierung": "nein", "pruefidee": "EDI-Testdatei mit einer fehlerhaften und neun korrekten Positionszeilen: Neun Positionen werden verarbeitet, eine wird mit Fehlerprotokoll übersprungen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-015", @@ -529,7 +560,8 @@ "tracelinks": "StRS-015", "konsolidierung": "nein", "pruefidee": "Gültiges Microsoft-ID-Token, aber Mandant ohne Lizenz OpenIDConnectAuthentication → Login schlägt mit „No license for OpenIDConnectAuthentication“ fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-016", @@ -545,7 +577,8 @@ "tracelinks": "StRS-015", "konsolidierung": "nein", "pruefidee": "Benutzer ändert seine Microsoft-E-Mail-Adresse (oid bleibt gleich): Login funktioniert unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-017", @@ -561,7 +594,8 @@ "tracelinks": "StRS-015", "konsolidierung": "nein", "pruefidee": "Ticket wird nach 31 Minuten Inaktivität bei nachfolgendem API-Call als abgelaufen erkannt und erfordert erneuten Login.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-018", @@ -577,7 +611,8 @@ "tracelinks": "StRS-017", "konsolidierung": "nein", "pruefidee": "Manuelle UI-Prüfung: Ribbon minimieren, mehrere Module durchklicken, aktives Modul muss stets erkennbar bleiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-019", @@ -593,7 +628,8 @@ "tracelinks": "-", "konsolidierung": "nein", "pruefidee": "Debug-Build sendet Testmail an externe.adresse@kunde.de: tatsächlicher Empfänger im Mailserver-Log ist test@nexoware.com.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-001", @@ -609,7 +645,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Statische Code-Analyse: keine zwei Konstanten in UserRightsConst.cs besitzen denselben Integer-Wert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-002", @@ -625,7 +662,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "nein", "pruefidee": "Neue Codeverwendung einer obsoleten Konstante erzeugt eine Compiler-Warnung (CS0618), verhindert den Build aber nicht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-003", @@ -641,7 +679,8 @@ "tracelinks": "SyRS-001", "konsolidierung": "Kandidat: Vereinheitlichung der Rechteprüfung auf einen einzigen, schichtübergreifend wiederverwendbaren Mechanismus im Zielsystem (z. B. Policy-based Authorization statt drei paralleler APIs).", "pruefidee": "Code-Review: Für ein Beispielrecht wird geprüft, ob UI-Sichtbarkeitsprüfung und BL-Durchsetzungsprüfung unabhängig voneinander gepflegt werden (z. B. unterschiedliche Rechte-ID durch Copy-Paste-Fehler).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-004", @@ -657,7 +696,8 @@ "tracelinks": "StRS-003", "konsolidierung": "nein", "pruefidee": "Ein Beleg mit Number=-1 liefert IsTemplate=true; ein Beleg mit Number=0 oder positiv liefert IsTemplate=false.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-005", @@ -673,7 +713,8 @@ "tracelinks": "StRS-003", "konsolidierung": "nein", "pruefidee": "Für jeden Belegtyp lässt sich per Unit-Test verifizieren, dass State nur einen der drei Enum-Werte annehmen kann (Datenbankkonsistenzprüfung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-006", @@ -689,7 +730,8 @@ "tracelinks": "SyRS-007", "konsolidierung": "nein", "pruefidee": "Ein Web-Angebot im Zustand WebOfferSign hat gleichzeitig ReceiptState.Active, bis die Signatur abgeschlossen ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-007", @@ -706,7 +748,8 @@ "tracelinks": "StRS-005, SyRS-007", "konsolidierung": "nein", "pruefidee": "Kunde ändert dieselbe Position zweimal (Menge 5 dann 3): Nach Annahme wird nur die letzte Änderung (3) im neuen Beleg übernommen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-008", @@ -722,7 +765,8 @@ "tracelinks": "StRS-005", "konsolidierung": "nein", "pruefidee": "Beleg mit AllowChangeQuantity=false, AllowChangeReceiptItemArticlePositionKind=true: Nach Annahme wird nur die Positionsart-Änderung übernommen, eine vom Kunden vorgenommene Mengenänderung wird verworfen (potenziell ohne Information an den Kunden – siehe Hypothesen.md).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-009", @@ -738,7 +782,8 @@ "tracelinks": "StRS-005", "konsolidierung": "nein", "pruefidee": "Race-Condition-Test: Change-Requests werden zwischen Klick „Annehmen“ und Serververarbeitung durch einen parallelen Prozess gelöscht → Server antwortet mit Fehler statt fälschlicher Vollannahme.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-010", @@ -754,7 +799,8 @@ "tracelinks": "StRS-006, SyRS-008", "konsolidierung": "nein", "pruefidee": "Nach Auslösung des Signaturvorgangs erhält sowohl die Kunden-E-Mail-Adresse (receiptPdfDocument.MailAddress) als auch die Mitarbeiter-E-Mail-Adresse je eine E-Mail mit unterschiedlichem Template.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-011", @@ -770,7 +816,8 @@ "tracelinks": "StRS-006", "konsolidierung": "nein", "pruefidee": "OfferSignExpiredDateCount=7: Link ist am Tag 7 nutzbar, am Tag 8 liefert der Aufruf „Ungültiger Link“.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-012", @@ -786,7 +833,8 @@ "tracelinks": "StRS-006", "konsolidierung": "nein", "pruefidee": "Für jede der drei SignatureType-Varianten entsteht ein gültiges, im PDF sichtbares Signaturbild.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-013", @@ -803,7 +851,8 @@ "tracelinks": "StRS-008", "konsolidierung": "nein", "pruefidee": "Reflection-Test: ReceiptContract.BaseType == typeof(ReceiptBase); Properties enthalten BillingIntervalKind und MandatI3D.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-014", @@ -819,7 +868,8 @@ "tracelinks": "StRS-008", "konsolidierung": "nein", "pruefidee": "Rechnung aus Vertrag mit MandatI3D erzeugt einen SEPA-Lastschrift-Exportdatensatz mit korrekter Mandatsreferenz.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-015", @@ -835,7 +885,8 @@ "tracelinks": "StRS-010, SyRS-011", "konsolidierung": "nein", "pruefidee": "Wechsel von ReceiptKind=InvoiceClass zu DeliveryList bei fehlendem Recht: Hinweistext wechselt von „der Rechnung“ zu „des Lieferscheins“ ohne Seiten-Reload.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-016", @@ -851,7 +902,8 @@ "tracelinks": "StRS-010", "konsolidierung": "nein", "pruefidee": "UseBillingDate=false, Benutzer ohne Recht: Kein Info-Icon sichtbar. UseBillingDate=true, gleicher Benutzer: Info-Icon erscheint.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-017", @@ -867,7 +919,8 @@ "tracelinks": "StRS-011", "konsolidierung": "nein", "pruefidee": "Upload eines 512x512-PNG-Icons resultiert in einem gespeicherten 16x16-BMP-Icon.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-018", @@ -883,7 +936,8 @@ "tracelinks": "StRS-012", "konsolidierung": "nein", "pruefidee": "Status wird nur in einer TaskManagementHelpdeskAction referenziert (0 Tickets): Löschung wird dennoch verweigert mit Meldung „... wird in 1 Task verwendet.“", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-019", @@ -899,7 +953,8 @@ "tracelinks": "StRS-013", "konsolidierung": "nein", "pruefidee": "Hinzufügen eines neuen Lieferanten erfordert laut Doku nur eine neue Datei `SupplierEdiBL.NeuerLieferant.cs` plus Erweiterung des Dispatch in ApplyDistriToCentron.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-020", @@ -915,7 +970,8 @@ "tracelinks": "SyRS-016", "konsolidierung": "nein", "pruefidee": "Unit-Test instanziiert OpenIdConnectAuthObject mit einer ClaimsIdentity, die einen \"oid\"-Claim enthält: SubjectIdentifier liefert exakt diesen Wert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-021", @@ -931,7 +987,8 @@ "tracelinks": "SyRS-015, SyRS-016", "konsolidierung": "nein", "pruefidee": "Token ohne oid-Claim führt zu Log-Eintrag „Could not find subject identifier 'oid' in JWT claims.“ ohne DB-Zugriff (verifizierbar per SQL-Profiler/Mock).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-022", @@ -947,7 +1004,8 @@ "tracelinks": "SyRS-017", "konsolidierung": "nein", "pruefidee": "Zwei aufeinanderfolgende API-Aufrufe im Abstand von 1 Minute lösen nur eine tatsächliche DB-Schreiboperation für ExpiryDate aus (per SQL-Profiler nachweisbar).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-023", @@ -963,7 +1021,8 @@ "tracelinks": "SyRS-017", "konsolidierung": "nein", "pruefidee": "Login mit ApplicationKind, der dem 24h-Fall zugeordnet ist, erzeugt ein Ticket mit ExpiryDate = jetzt + 1440 Minuten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-024", @@ -979,6 +1038,7 @@ "tracelinks": "StRS-017, SyRS-018", "konsolidierung": "nein", "pruefidee": "Ribbon minimiert, verschiedene Module (auch mit abweichender visueller Struktur/Custom-Templates) angewählt: Unterstreichung erscheint in allen Fällen ohne Cast-Exception.", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180416_v3.3.0-5851/_meta/anforderungen.md b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180416_v3.3.0-5851/_meta/anforderungen.md index 9552506e..34bb4d77 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180416_v3.3.0-5851/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180416_v3.3.0-5851/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -37,6 +39,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1,0 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 45 (75,0 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -54,5 +60,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **verletzt** – 1 von 26 ungedeckt: SwRS-003 | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 59 von 60 mit Tracelinks (98,3 %) | diff --git a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180417_v3.3.0-664e/Protokoll.md b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180417_v3.3.0-664e/Protokoll.md index dc9cdee6..33f41bcb 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180417_v3.3.0-664e/Protokoll.md +++ b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180417_v3.3.0-664e/Protokoll.md @@ -97,6 +97,8 @@ Ohne Subagenten sind Haupt- und Gesamtwerte für `claude-sonnet-5` identisch. Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -127,6 +129,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 71 (97,3 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -144,6 +150,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (40 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 73 von 73 mit Tracelinks (100,0 %) | ## V1-Reihe: fünf Messpunkte unter identischer Bedingung diff --git a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180417_v3.3.0-664e/_meta/anforderungen.json b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180417_v3.3.0-664e/_meta/anforderungen.json index f33e3180..f06c1ee8 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180417_v3.3.0-664e/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180417_v3.3.0-664e/_meta/anforderungen.json @@ -15,7 +15,8 @@ "tracelinks": "SyRS-01, SyRS-02", "konsolidierung": "nein", "pruefidee": "Einen fixierten Auftrag ändern und prüfen, dass `Version` erhöht und der alte Datensatz weiterhin per `OriginalI3D`/Vorgängerversion referenzierbar ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-02", @@ -32,7 +33,8 @@ "tracelinks": "SyRS-03, SyRS-04", "konsolidierung": "Kandidat: Analoge Stornoabläufe in OrderBL/OfferBL/DeliveryListBL/CreditVoucherBL wurden nicht im Detail geprüft (siehe Analysebericht.md) und sollten auf einheitliche Umsetzung verglichen werden.", "pruefidee": "Rechnung stornieren und prüfen: (a) neue Version wird angelegt, (b) State der neuen Version = 3, (c) Positionsmengen = 0, (d) Vorgängerversion bleibt abrufbar.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-03", @@ -49,7 +51,8 @@ "tracelinks": "SyRS-05", "konsolidierung": "nein", "pruefidee": "Für einen Kunden mit zwei offenen Lieferscheinen vor Stichtag und einem nach Stichtag prüfen, dass nur die beiden ersten in der Ergebnisliste erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-04", @@ -66,7 +69,8 @@ "tracelinks": "SyRS-06", "konsolidierung": "nein", "pruefidee": "Vertrag mit Beginn 01.01., LaufzeitArt=Monatlich, LaufzeitDauer=1 anlegen und prüfen, dass das berechnete nächste Datum der 01.02. ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-05", @@ -83,7 +87,8 @@ "tracelinks": "SyRS-07, SyRS-08", "konsolidierung": "nein", "pruefidee": "TimerBilling-Einstellungsseite öffnen, `ReceiptKind` zwischen Rechnung/Lieferschein wechseln und prüfen, dass der Hinweistext bei fehlender Berechtigung/Einstellung erscheint.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-06", @@ -100,7 +105,8 @@ "tracelinks": "SyRS-09, SyRS-10", "konsolidierung": "nein", "pruefidee": "Einem Benutzer ein Recht ausschließlich über eine neue Gruppenzuordnung erteilen und prüfen, dass `HasUserRight` anschließend `true` liefert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-07", @@ -118,7 +124,8 @@ "tracelinks": "SyRS-11", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Recht „SETTINGS“, aber in Gruppe „Administratoren“, ruft geschützte Funktion auf und erhält Zugriff.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-08", @@ -135,7 +142,8 @@ "tracelinks": "SyRS-12", "konsolidierung": "nein", "pruefidee": "Einem WebAccount ein Web-Recht zuweisen und prüfen, dass dies keine Auswirkung auf interne `Sichtrus`-Rechte desselben zugrunde liegenden Kunden hat (und umgekehrt).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-09", @@ -152,7 +160,8 @@ "tracelinks": "SyRS-13", "konsolidierung": "Kandidat: Einheitliches Cross-Cutting-Konzern-Pattern über alle sechs Beleg-BL-Klassen hinweg; im Zielsystem als zentraler Autorisierungsfilter statt Einzelprüfung je Methode konsolidierbar.", "pruefidee": "Als WebAccount mit `CustomerI3D=100` eine Abfrage mit `filter.CustomerI3D=200` senden und prüfen, dass die Ergebnisliste leer ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-10", @@ -169,7 +178,8 @@ "tracelinks": "SyRS-14", "konsolidierung": "nein", "pruefidee": "Benutzer ohne hinterlegten Schlüssel führt Validierung durch und erhält die definierte Fehlermeldung statt eines Erfolgs.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-11", @@ -186,7 +196,8 @@ "tracelinks": "SyRS-15, SyRS-16, SyRS-17", "konsolidierung": "nein", "pruefidee": "Mit gültigem Zertifikat und konfiguriertem TSA-Server ein PDF signieren und die Signatur inkl. Zeitstempel technisch verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-12", @@ -202,7 +213,8 @@ "tracelinks": "SyRS-18", "konsolidierung": "nein", "pruefidee": "Einen neuen Ticketstatus mit eigenem Icon/Farbe anlegen und prüfen, dass er in der Statusauswahl eines Tickets erscheint, ohne dass Code geändert wurde.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-13", @@ -218,7 +230,8 @@ "tracelinks": "SyRS-19", "konsolidierung": "nein", "pruefidee": "Benutzer mit `OnlyOwnBranch` meldet sich an und prüft, dass nur Tickets der eigenen Niederlassung in der Liste erscheinen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-14", @@ -234,7 +247,8 @@ "tracelinks": "SyRS-20", "konsolidierung": "nein", "pruefidee": "Für einen Artikel mit `BarcodeScanen=1` zwei Barcodes erfassen und prüfen, dass der Bestand 2 beträgt, unabhängig vom `Bestand`-Feld in `NebenlagerArtikel`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-15", @@ -250,7 +264,8 @@ "tracelinks": "SyRS-21", "konsolidierung": "nein", "pruefidee": "Kunde mit Rabatt=10% und Zahlungsziel „30 Tage netto“ anlegen; neuen Auftrag für diesen Kunden erstellen und prüfen, dass beide Werte im Beleg vorbelegt sind.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-16", @@ -266,7 +281,8 @@ "tracelinks": "SyRS-22", "konsolidierung": "nein", "pruefidee": "`InvoiceReminderDays=14` konfigurieren, Rechnung anlegen und prüfen, dass `ReminderDate` = heute + 14 Tage beträgt; bei Einstellung 0/nicht gesetzt bleibt `ReminderDate` unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-17", @@ -283,7 +299,8 @@ "tracelinks": "SyRS-23, SyRS-24", "konsolidierung": "Kandidat: Die drei Attribute teilen nahezu identische Filterlogik (Unterschied nur in Any/All/Single-Verknüpfung) und könnten im Zielsystem auf einen parametrisierten Autorisierungsfilter konsolidiert werden.", "pruefidee": "Endpunkt mit `[AuthorizeUserRight(X)]` ohne Session aufrufen → 401; mit Session aber ohne Recht X aufrufen → 403; mit Recht X aufrufen → 200.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-18", @@ -299,7 +316,8 @@ "tracelinks": "SyRS-17", "konsolidierung": "nein", "pruefidee": "TSA-Passwort speichern und den Rohwert in der Einstellungstabelle prüfen — er darf nicht dem eingegebenen Klartext entsprechen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-01", @@ -315,7 +333,8 @@ "tracelinks": "StRS-01", "konsolidierung": "nein", "pruefidee": "Sequenzieller Aufruf beobachten (z. B. per Log/Debugger) und prüfen, dass alle drei Phasen in der genannten Reihenfolge durchlaufen werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-02", @@ -331,7 +350,8 @@ "tracelinks": "StRS-01", "konsolidierung": "nein", "pruefidee": "Beleg mit gebundenem Barcode neu versionieren und prüfen, dass ein Historieneintrag mit der alten Versionsnummer erhalten bleibt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-03", @@ -347,7 +367,8 @@ "tracelinks": "StRS-02", "konsolidierung": "nein", "pruefidee": "`CancelInvoice` aufrufen und Rückgabewert von `StoreAsset` sowie den persistierten Datensatz prüfen (State=3, alle Positionsmengen=0).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-04", @@ -363,7 +384,8 @@ "tracelinks": "StRS-02", "konsolidierung": "nein", "pruefidee": "`State`-Werte 1, 2, 3 und z. B. 4 an der UI anzeigen lassen und die jeweilige Beschriftung/leere Anzeige prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-05", @@ -379,7 +401,8 @@ "tracelinks": "StRS-03", "konsolidierung": "nein", "pruefidee": "Zwei Lieferscheine (vor/nach Stichtag) für denselben Kunden anlegen und prüfen, dass nur der Beleg vor dem Stichtag zurückgegeben wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-06", @@ -395,7 +418,8 @@ "tracelinks": "StRS-04", "konsolidierung": "nein", "pruefidee": "Vertrag mit `LaufzeitArt=null` anlegen und prüfen, dass keine Exception geworfen wird und kein Folgedatum berechnet wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-07", @@ -411,7 +435,8 @@ "tracelinks": "StRS-05", "konsolidierung": "nein", "pruefidee": "`ReceiptKind` von Invoice auf DeliveryList umstellen und beobachten, dass `BillingDateIsEnabled`/`ShowBillingDateNoteEnabledInfo` neu ausgewertet werden.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-08", @@ -428,7 +453,8 @@ "tracelinks": "StRS-05", "konsolidierung": "nein", "pruefidee": "`CanChangeDateInInvoices=false` setzen, ReceiptKind=Invoice wählen und prüfen, dass das Datumsfeld deaktiviert ist und der Hinweistext „... der Rechnung ...“ erscheint.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-09", @@ -444,7 +470,8 @@ "tracelinks": "StRS-06", "konsolidierung": "nein", "pruefidee": "Benutzer meldet sich an (Cache wird befüllt); Recht wird per Admin-Oberfläche entzogen; prüfen, ob und wann (gleiche Session/nach Neuanmeldung) `HasUserRight` das entzogene Recht noch als vorhanden meldet.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-10", @@ -460,7 +487,8 @@ "tracelinks": "StRS-06", "konsolidierung": "nein", "pruefidee": "Benutzer zwei Gruppen zuordnen, die ein gemeinsames Recht enthalten, und prüfen, dass es in der Ergebnisliste nur einmal vorkommt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-11", @@ -477,7 +505,8 @@ "tracelinks": "StRS-07", "konsolidierung": "nein", "pruefidee": "Siehe StRS-07.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-12", @@ -493,7 +522,8 @@ "tracelinks": "StRS-08", "konsolidierung": "nein", "pruefidee": "Web-Recht für einen WebAccount setzen und prüfen, dass keine Zeile in `Sichtrus`/`Sichmemb` dafür angelegt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-13", @@ -510,7 +540,8 @@ "tracelinks": "StRS-09", "konsolidierung": "Kandidat: sechsfach dupliziertes Prüfmuster, siehe StRS-09.", "pruefidee": "Siehe StRS-09.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-14", @@ -526,7 +557,8 @@ "tracelinks": "StRS-10", "konsolidierung": "nein", "pruefidee": "Siehe StRS-10.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-15", @@ -542,7 +574,8 @@ "tracelinks": "StRS-11", "konsolidierung": "nein", "pruefidee": "Alle fünf Einstellungswerte setzen, Anwendung neu starten und prüfen, dass `GetPdfSigningSettings` dieselben Werte zurückliefert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-16", @@ -558,7 +591,8 @@ "tracelinks": "StRS-11", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Recht „SETTINGS“ ruft `SavePdfSigningSettings` auf und erhält `Result.AsError` mit Code `RightCheckFailed`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-17", @@ -574,7 +608,8 @@ "tracelinks": "StRS-11, StRS-18", "konsolidierung": "nein", "pruefidee": "Siehe StRS-18.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-18", @@ -590,7 +625,8 @@ "tracelinks": "StRS-12", "konsolidierung": "nein", "pruefidee": "Siehe StRS-12.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-19", @@ -606,7 +642,8 @@ "tracelinks": "StRS-13", "konsolidierung": "nein", "pruefidee": "Siehe StRS-13.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-20", @@ -622,7 +659,8 @@ "tracelinks": "StRS-14", "konsolidierung": "nein", "pruefidee": "Siehe StRS-14.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-21", @@ -638,7 +676,8 @@ "tracelinks": "StRS-15", "konsolidierung": "nein", "pruefidee": "Siehe StRS-15.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-22", @@ -654,7 +693,8 @@ "tracelinks": "StRS-16", "konsolidierung": "nein", "pruefidee": "Siehe StRS-16.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-23", @@ -670,7 +710,8 @@ "tracelinks": "StRS-17", "konsolidierung": "Kandidat: siehe SyRS-24 (gleiche Filterinfrastruktur, unterschiedliche Verknüpfung).", "pruefidee": "Siehe StRS-17.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-24", @@ -686,7 +727,8 @@ "tracelinks": "StRS-17", "konsolidierung": "Kandidat: `AuthorizeUserRightAttribute`, `AuthorizeAnyUserRightAttribute` und `AuthorizeAllUserRightsAttribute` teilen fast identischen Aufbau (nur Any/All/Single-Verknüpfung unterscheidet sich) — im Zielsystem auf einen parametrisierten Filter konsolidierbar.", "pruefidee": "Attribut mit leerem Rechte-Array `[AuthorizeAnyUserRight()]` testen und prüfen, dass der Zugriff mit 403 verweigert wird (Fail-Closed-Verhalten).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-01", @@ -702,7 +744,8 @@ "tracelinks": "SyRS-01", "konsolidierung": "nein", "pruefidee": "Unit-Test: `asset.Version` vor/nach Aufruf vergleichen, Differenz muss exakt 1 sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-02", @@ -718,7 +761,8 @@ "tracelinks": "SyRS-01", "konsolidierung": "nein", "pruefidee": "Reflektion über eine beliebige abgeleitete Klasse (z. B. `Invoice`) prüfen, dass `State`/`OriginalI3D` vorhanden und vom Typ `int` sind.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-03", @@ -734,7 +778,8 @@ "tracelinks": "SyRS-02", "konsolidierung": "nein", "pruefidee": "Historieneintrag nach Versionswechsel abfragen und `Version`-Feld mit der tatsächlichen Belegversion zum Zeitpunkt der Erstellung vergleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-04", @@ -750,7 +795,8 @@ "tracelinks": "SyRS-03", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-03.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-05", @@ -766,7 +812,8 @@ "tracelinks": "SyRS-04", "konsolidierung": "nein", "pruefidee": "Converter mit Werten 0,1,2,3,4 aufrufen und exakte Rückgabewerte prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-06", @@ -782,7 +829,8 @@ "tracelinks": "SyRS-05", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-05.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-07", @@ -798,7 +846,8 @@ "tracelinks": "SyRS-06", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-06.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-08", @@ -814,7 +863,8 @@ "tracelinks": "SyRS-06", "konsolidierung": "nein", "pruefidee": "Aufruf mit `receiptKind=Invoice` und `receiptKind=CreditVoucher` und Vergleich der jeweils ausgeführten Named Query (z. B. per SQL-Profiler).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-09", @@ -830,7 +880,8 @@ "tracelinks": "SyRS-07", "konsolidierung": "nein", "pruefidee": "`ReceiptKind` zweimal auf denselben Wert setzen und prüfen, dass `UpdateBillingDateIsEnabled()` nur beim ersten (wertändernden) Aufruf ausgeführt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-10", @@ -846,7 +897,8 @@ "tracelinks": "SyRS-08", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-08.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-11", @@ -862,7 +914,8 @@ "tracelinks": "SyRS-09", "konsolidierung": "nein", "pruefidee": "Zwei aufeinanderfolgende `HasUserRight`-Aufrufe für denselben Benutzer per SQL-Profiler beobachten; es darf nur eine `Sichtrus`/`Sichmemb`-Abfrage anfallen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-12", @@ -878,7 +931,8 @@ "tracelinks": "SyRS-09", "konsolidierung": "nein", "pruefidee": "SQL direkt gegen Testdatenbestand ausführen und Ergebnis mit erwarteten Gruppenrechten abgleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-13", @@ -894,7 +948,8 @@ "tracelinks": "SyRS-10", "konsolidierung": "nein", "pruefidee": "Methode mit einem `AppUser`-Objekt aus einer bereits geschlossenen/fremden Session aufrufen und prüfen, dass kein `LazyInitializationException` auftritt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-14", @@ -910,7 +965,8 @@ "tracelinks": "SyRS-11", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-11.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-15", @@ -927,7 +983,8 @@ "tracelinks": "SyRS-11", "konsolidierung": "nein", "pruefidee": "Gruppe „Administratoren“ in Testsystem umbenennen und prüfen, dass `IsAdmin()` für ehemalige Mitglieder anschließend `false` liefert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-16", @@ -943,7 +1000,8 @@ "tracelinks": "SyRS-12", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-12.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-17", @@ -959,7 +1017,8 @@ "tracelinks": "SyRS-12", "konsolidierung": "Kandidat: zwei Überladungen mit identischer Delegationslogik — im Zielsystem ggf. auf eine generische Signatur reduzierbar.", "pruefidee": "Beide Überladungen mit äquivalenten Werten aufrufen und identisches Ergebnis prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-18", @@ -975,7 +1034,8 @@ "tracelinks": "SyRS-13", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-13.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-19", @@ -991,7 +1051,8 @@ "tracelinks": "SyRS-13", "konsolidierung": "Kandidat: siehe SyRS-13.", "pruefidee": "Jede der fünf Dateien einzeln öffnen und die konkrete Bedingung mit dem Muster aus SwRS-18 vergleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-20", @@ -1007,7 +1068,8 @@ "tracelinks": "SyRS-14", "konsolidierung": "nein", "pruefidee": "Aufruf mit leerem Schlüssel prüft spezifische Fehlermeldung; Aufruf mit korrektem/falschem TOTP-Code prüft jeweiliges Ergebnis.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-21", @@ -1023,7 +1085,8 @@ "tracelinks": "SyRS-14", "konsolidierung": "nein", "pruefidee": "Named Queries im Mapping/Query-Katalog auffinden und deren SQL-Text auf Plausibilität (korrekte Tabelle/Spalte) prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-22", @@ -1039,7 +1102,8 @@ "tracelinks": "SyRS-15", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-15.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-23", @@ -1055,7 +1119,8 @@ "tracelinks": "SyRS-16", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-16.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-24", @@ -1071,7 +1136,8 @@ "tracelinks": "SyRS-17", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-17.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-25", @@ -1087,7 +1153,8 @@ "tracelinks": "SyRS-18", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-18.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-26", @@ -1103,7 +1170,8 @@ "tracelinks": "SyRS-19", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-19.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-27", @@ -1119,7 +1187,8 @@ "tracelinks": "SyRS-20", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-20.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-28", @@ -1135,7 +1204,8 @@ "tracelinks": "SyRS-21", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-21.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-29", @@ -1151,7 +1221,8 @@ "tracelinks": "SyRS-22", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-22.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-30", @@ -1167,7 +1238,8 @@ "tracelinks": "SyRS-23", "konsolidierung": "nein", "pruefidee": "Siehe SyRS-23.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-31", @@ -1183,6 +1255,7 @@ "tracelinks": "SyRS-24", "konsolidierung": "Kandidat: nahezu identischer Aufbau beider Filterklassen (siehe SyRS-24).", "pruefidee": "Siehe SyRS-24.", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180417_v3.3.0-664e/_meta/anforderungen.md b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180417_v3.3.0-664e/_meta/anforderungen.md index 8ad5ed31..141d1290 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180417_v3.3.0-664e/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180417_v3.3.0-664e/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -32,6 +34,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 71 (97,3 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -49,5 +55,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **erfüllt** (40 risikorelevante Anforderungen, alle gedeckt) | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 73 von 73 mit Tracelinks (100,0 %) | diff --git a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180418_v3.3.0-b676/Protokoll.md b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180418_v3.3.0-b676/Protokoll.md index 692ac9c1..506869b3 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180418_v3.3.0-b676/Protokoll.md +++ b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180418_v3.3.0-b676/Protokoll.md @@ -97,6 +97,8 @@ Ohne Subagenten sind Haupt- und Gesamtwerte für `claude-sonnet-5` identisch. Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -133,6 +135,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 42 (62,7 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -150,6 +156,7 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **verletzt** – 5 von 31 ungedeckt: StRS-17, SyRS-05, SyRS-18, SwRS-10, SwRS-26 | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 67 von 67 mit Tracelinks (100,0 %) | ## V1-Reihe: fünf Messpunkte unter identischer Bedingung diff --git a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180418_v3.3.0-b676/_meta/anforderungen.json b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180418_v3.3.0-b676/_meta/anforderungen.json index 282045d1..4a9d816a 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180418_v3.3.0-b676/_meta/anforderungen.json +++ b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180418_v3.3.0-b676/_meta/anforderungen.json @@ -14,7 +14,8 @@ "tracelinks": "SyRS-01", "konsolidierung": "nein", "pruefidee": "Für jede der sieben Belegarten prüfen, dass Kopf-Objekt Number, Date, State, BranchI3D, CurrencyI3D, Receiver konsistent befüllt und persistiert wird; Test: Angebot anlegen → in Auftrag übernehmen → Referenz auf Ursprungsangebot prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-02", @@ -31,7 +32,8 @@ "tracelinks": "SyRS-02", "konsolidierung": "nein", "pruefidee": "Beleg stornieren, danach Versuch `SetPaid` aufzurufen → erwartete Fehlermeldung mit Code `DefaultMessageCodes.ErrorMessage`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-03", @@ -48,7 +50,8 @@ "tracelinks": "SyRS-03", "konsolidierung": "nein", "pruefidee": "Beleg zweimal ändern und speichern; prüfen, dass für jede Änderung ein neuer Datensatz mit inkrementierendem `OriginalI3D`-Bezug in der *Versions-Tabelle entsteht und alle Positionswerte identisch zum historischen Stand sind.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-04", @@ -65,7 +68,8 @@ "tracelinks": "SyRS-04", "konsolidierung": "nein", "pruefidee": "Suche mit `ReceiptKinds = [Invoice]` und einem Kunden ohne Anzeigerecht für Rechnungen ausführen → 0 Treffer für diese Belegart trotz vorhandener Datensätze.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-05", @@ -82,7 +86,8 @@ "tracelinks": "SyRS-05", "konsolidierung": "nein", "pruefidee": "Vertrag mit `BillingIntervalKind=Monthly`, `AutomatedBilling=true` anlegen, Systemdatum auf Fälligkeitstag stellen, automatisierten Lauf ausführen → genau eine neue Rechnung mit Bezug `ContractI3D` entsteht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-06", @@ -99,7 +104,8 @@ "tracelinks": "SyRS-06", "konsolidierung": "nein", "pruefidee": "RMM-Dienst simulieren als nicht erreichbar, Vertrag mit RMM-Artikelreferenz abrechnen lassen → Rechnungserstellung schlägt mit definierter Fehlermeldung fehl, keine Teil-Rechnung wird gespeichert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-07", @@ -116,7 +122,8 @@ "tracelinks": "SyRS-07", "konsolidierung": "nein", "pruefidee": "Kunde mit Limit 1000€ (Netto) anlegen, offene Belege mit Summe 900€ anlegen, neuen Beleg über 200€ ohne Override speichern → Bestätigungsdialog mit korrekt berechneter Differenz (100€) erscheint; mit `SaveAlthoughCustomerLimitExceeded=true` wird gespeichert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-08", @@ -133,7 +140,8 @@ "tracelinks": "SyRS-08", "konsolidierung": "nein", "pruefidee": "Codestellen suchen, die `LockOrderAfterDunningLevel` lesend mit dem tatsächlichen `DunningLevel` eines Kunden vergleichen (z. B. in Order-/DeliveryList-SpecificLogic oder UI-ViewModels); falls keine gefunden wird, mit Fachbereich klären, ob die Sperre nur UI-seitig/manuell umgesetzt ist.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-09", @@ -150,7 +158,8 @@ "tracelinks": "SyRS-09", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Recht `CREATE_CUSTOMER` versucht Kunde anzulegen → `AccountBL` liefert `Result.AsError(\"Fehlende Rechte um Accounts zu erstellen\")`, kein Datensatz wird angelegt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-10", @@ -167,7 +176,8 @@ "tracelinks": "SyRS-10, SyRS-11", "konsolidierung": "nein", "pruefidee": "Benutzer ohne Passwort-Manager-Lizenz ruft `GetPasswordManagerCustomersEmployeesRights` auf → Fehler \"Sie besitzen keine Lizenz für den Passwort-Manager.\"; Benutzer mit hinterlegtem 2FA-Schlüssel gibt falsche PIN ein → Fehler \"Die eingegebene PIN ist ungültig!\".", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-11", @@ -184,7 +194,8 @@ "tracelinks": "SyRS-12", "konsolidierung": "nein", "pruefidee": "Feature mit Lizenz-GUID ohne zugeordnete Lizenz beim Kunden aufrufen → `HasLicense` liefert `false`, UI blendet Funktion aus (Beispiel Passwort-Manager, siehe StRS-10).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-12", @@ -200,7 +211,8 @@ "tracelinks": "SyRS-13", "konsolidierung": "nein", "pruefidee": "Test-EDI-Datei eines unterstützten Lieferanten (z. B. Alltron-Lieferavis) einspielen → zugehöriger c-entron-Auftrag wird um Lieferinformationen (Sendungsverfolgung, Seriennummern) ergänzt, Verarbeitungsstatus wird in `EDILogBL` protokolliert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-13", @@ -216,7 +228,8 @@ "tracelinks": "SyRS-14", "konsolidierung": "nein", "pruefidee": "Aktionspreis mit `EffectiveUntil` in der Vergangenheit anlegen → erscheint nicht im Preisspiegel; Versuch, Aktionspreis ohne Distributor zu speichern → Validierungsfehler.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-14", @@ -232,7 +245,8 @@ "tracelinks": "SyRS-15", "konsolidierung": "nein", "pruefidee": "Benutzer ohne `BOOK_ARTICLE_STOCK_INTO_NEGATIVE` versucht Abbuchung, die den Bestand unter 0 bringen würde → Aktion wird verweigert; Benutzer mit Recht kann die Buchung durchführen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-15", @@ -248,7 +262,8 @@ "tracelinks": "SyRS-16", "konsolidierung": "nein", "pruefidee": "Rechnung mit manipulierter Positionssumme (Abweichung > 3,00 vom Kopfbetrag) exportieren → Export schlägt mit Fehler fehl; Abweichung ≤ 3,00 → Export mit Warnung und korrigiertem Wert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-16", @@ -265,7 +280,8 @@ "tracelinks": "SyRS-17", "konsolidierung": "nein", "pruefidee": "In DEBUG-Build eine Mail an \"kunde@fremdefirma.de\" auslösen → tatsächlicher Empfänger ist \"test@nexoware.com\"; Mail an \"kollege@nexoware.com\" bleibt unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-17", @@ -281,7 +297,8 @@ "tracelinks": "SyRS-18", "konsolidierung": "nein", "pruefidee": "Ein Modul mit beiden Implementierungen identifizieren (z. B. `IAccountContractsLogic`) und prüfen, dass beide Implementierungen dieselbe Methode mit identischer Rückgabestruktur anbieten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-18", @@ -298,7 +315,8 @@ "tracelinks": "SyRS-19", "konsolidierung": "nein", "pruefidee": "Suchfilter mit SQL-Metazeichen (`'; DROP TABLE ...`) in `SearchText` befüllen → Query wird als Parameterwert behandelt, keine strukturelle Änderung der Abfrage; Penetrationstest mit automatisiertem SQLi-Scanner auf Such-Endpunkt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "StRS-19", @@ -315,7 +333,8 @@ "tracelinks": "SyRS-20", "konsolidierung": "nein", "pruefidee": "Stichprobenprüfung von 20 zufällig gewählten Fehlermeldungen/UI-Strings auf deutsche Sprache und Vorhandensein einer `.en.resx`-Übersetzung.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-01", @@ -331,7 +350,8 @@ "tracelinks": "StRS-01", "konsolidierung": "nein", "pruefidee": "Für alle sieben Belegarten per Reflection prüfen, dass sie von `ReceiptBase` erben und keine der Basiseigenschaften \"shadowen\"/überschreiben.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-02", @@ -348,7 +368,8 @@ "tracelinks": "StRS-02", "konsolidierung": "nein", "pruefidee": "Automatisierter Test: Beleg canceln, `SetPaid(true)` aufrufen → Fehler; Beleg mit State=Active, `SetPaid(true)` → State wird Completed und Log-Eintrag `CreateSetAsPaidEntry` wird erzeugt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-03", @@ -365,7 +386,8 @@ "tracelinks": "StRS-03", "konsolidierung": "nein", "pruefidee": "Schema-Diff zwischen `AngKopf` und `AngKopfVersions` (bzw. `VertragPos`/`VertragPosVersions`) automatisiert prüfen: alle Spalten aus der Basistabelle (außer I3D) müssen 1:1 in der Versionstabelle vorhanden sein.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-04", @@ -381,7 +403,8 @@ "tracelinks": "StRS-04", "konsolidierung": "nein", "pruefidee": "Lasttest: Suche über alle sieben Belegarten mit großem Datenbestand (>100.000 Belege je Art) ausführen, Antwortzeit und Einhaltung des 5-Minuten-Timeouts messen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-05", @@ -397,7 +420,8 @@ "tracelinks": "StRS-05", "konsolidierung": "nein", "pruefidee": "Verträge mit unterschiedlichen Intervallkombinationen (z. B. Monthly/1, Monthly/3, Yearly/1) anlegen und den automatisierten Lauf für verschiedene Stichtage simulieren; erwartete Rechnungstermine mit tatsächlich erzeugten vergleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-06", @@ -413,7 +437,8 @@ "tracelinks": "StRS-06", "konsolidierung": "nein", "pruefidee": "Integrationstest mit simuliertem RMM-Dienstausfall: (a) Vertrag mit RMM-Artikelreferenzen → Exception und Log-Eintrag; (b) Vertrag ohne RMM-Bezug → Rechnung wird trotz RMM-Ausfall normal erstellt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-07", @@ -429,7 +454,8 @@ "tracelinks": "StRS-07", "konsolidierung": "nein", "pruefidee": "Regressionstest mit mehrstufiger Belegkette (Angebot→Auftrag→Rechnung), bei dem derselbe Betrag nicht doppelt ins Limit einfließt (Prüfung `GetLimitUsedInOriginReceipts`-Abzug).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-08", @@ -445,7 +471,8 @@ "tracelinks": "StRS-08", "konsolidierung": "nein", "pruefidee": "Gezielte Codesuche nach lesendem Zugriff auf `LockOrderAfterDunningLevel` außerhalb von Zuweisung/Mapping; Rückfrage an Fachbereich, ob die Sperre ausschließlich manuell (Mitarbeiterhinweis) erfolgt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-09", @@ -461,7 +488,8 @@ "tracelinks": "StRS-09", "konsolidierung": "nein", "pruefidee": "Benutzer mit 3 angefragten Rechten, von denen er nur 1 besitzt, aufrufen → Rückgabemenge enthält exakt dieses eine Recht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-10", @@ -477,7 +505,8 @@ "tracelinks": "StRS-10", "konsolidierung": "nein", "pruefidee": "Direkter Webservice-Aufruf ohne UI (z. B. via Testclient) gegen einen Kunden ohne Passwort-Manager-Lizenz → Fehlerantwort mit `LicenseNotFound`, keine Daten im Response-Body.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-11", @@ -493,7 +522,8 @@ "tracelinks": "StRS-10", "konsolidierung": "nein", "pruefidee": "PIN-Test mit korrektem TOTP-Wert (aus demselben Secret berechnet) → Erfolg; mit falschem/abgelaufenem Wert → \"Die eingegebene PIN ist ungültig!\"; Benutzer ohne Schlüssel → spezifischer Hinweistext.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-12", @@ -509,7 +539,8 @@ "tracelinks": "StRS-11", "konsolidierung": "nein", "pruefidee": "Lizenzserver offline simulieren → `HasLicense` liefert weiterhin Werte aus `FileLicenseCache`; Lizenz mit `count=3` grenzt eine vierte Nutzung ab (siehe Beispiel MyDay-Import in Dokumentation).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-13", @@ -525,7 +556,8 @@ "tracelinks": "StRS-12", "konsolidierung": "nein", "pruefidee": "Für jede in der Tabelle als \"✗\" markierte Kombination (z. B. Komsa+Invoice) prüfen, dass das System dies erkennt und keinen Verarbeitungsversuch unternimmt, statt eine Ausnahme unbehandelt zu werfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-14", @@ -541,7 +573,8 @@ "tracelinks": "StRS-13", "konsolidierung": "nein", "pruefidee": "Aktionspreis mit `EffectiveFrom > EffectiveUntil` speichern → Validierungsfehler; Aktionspreis mit `EffectiveUntil = gestern` → wird im Preisspiegel nicht angezeigt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-15", @@ -557,7 +590,8 @@ "tracelinks": "StRS-14", "konsolidierung": "nein", "pruefidee": "Für jedes der 10 Rechte einen Benutzer ohne dieses Recht testen und sicherstellen, dass das zugehörige Flag `false` ist und die serverseitige Aktion verweigert wird (nicht nur UI-Ausblendung).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-16", @@ -573,7 +607,8 @@ "tracelinks": "StRS-15", "konsolidierung": "nein", "pruefidee": "E-Rechnung mit Reverse-Charge-Fall exportieren → Steuerkategorie \"AE\" mit Hinweistext \"Steuerschuldnerschaft...\"; Testfall mit absichtlicher Rundungsdifferenz von 3,50 → Export schlägt fehl.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-17", @@ -589,7 +624,8 @@ "tracelinks": "StRS-16", "konsolidierung": "nein", "pruefidee": "Unit-Test: `ValidateAddress(\"kunde@fremd.de\")` in simuliertem DEBUG-Kontext → liefert `test@nexoware.com`; `ValidateAddress(\"kollege@nexoware.com\")` → liefert unverändert.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-18", @@ -605,7 +641,8 @@ "tracelinks": "StRS-17", "konsolidierung": "nein", "pruefidee": "Für ein bestehendes Modul (`IAccountContractsLogic`) beide Implementierungen gegen dieselbe Testsuite laufen lassen und identisches Verhalten (bei identischen Daten) verifizieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-19", @@ -622,7 +659,8 @@ "tracelinks": "StRS-18", "konsolidierung": "nein", "pruefidee": "Statische Codeanalyse (z. B. Regex-Suche nach String-Konkatenation mit `filter.` in SQL-Strings) über alle `*SearchConfiguration`- und `*BL`-Klassen; ergänzend automatisierter SQLi-Test gegen Such-Endpunkte.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SyRS-20", @@ -638,7 +676,8 @@ "tracelinks": "StRS-19", "konsolidierung": "nein", "pruefidee": "Stichprobe: für N zufällige Keys aus `LocalizedStrings.resx` prüfen, ob ein entsprechender Key in `LocalizedStrings.en.resx` existiert (Vollständigkeitsquote ermitteln).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-01", @@ -654,7 +693,8 @@ "tracelinks": "SyRS-01", "konsolidierung": "nein", "pruefidee": "Vererbungshierarchie aller Klassen mit Namensmuster `Receipt*` per Reflection prüfen: alle erben transitiv von `ReceiptBase`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-02", @@ -670,7 +710,8 @@ "tracelinks": "SyRS-01, SyRS-03", "konsolidierung": "nein", "pruefidee": "Neues Feld nur in View + Entity ergänzen (nicht im Repository) → Wert wird nach Speichern+Neuladen NICHT persistiert; Regressionstest als Vorlage für künftige Feldänderungen einrichten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-03", @@ -686,7 +727,8 @@ "tracelinks": "SyRS-02", "konsolidierung": "nein", "pruefidee": "Compile-Test: `default: throw new ArgumentOutOfRangeException()` in `GetReceiptStateString` deckt auf, wenn ein neuer Enum-Wert ohne Anpassung eingeführt wird.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-04", @@ -702,7 +744,8 @@ "tracelinks": "SyRS-02", "konsolidierung": "nein", "pruefidee": "Fehlermeldungstext exakt gegen Testfall abgleichen (inkl. Tippfehler-Erkennung als Regressionsschutz gegen unbeabsichtigte Textänderung); parallele Änderung mit veraltetem `ConcurrencyControlGuid` → Fehler `ChangedByOtherInstance`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-05", @@ -718,7 +761,8 @@ "tracelinks": "SyRS-03", "konsolidierung": "nein", "pruefidee": "Automatisiertes Schema-Diff-Skript zwischen jeder `*Kopf`/`*Pos`-Tabelle und ihrer `*Versions`-Entsprechung als CI-Check.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-06", @@ -734,7 +778,8 @@ "tracelinks": "SyRS-03", "konsolidierung": "Kandidat: SwRS-05 (gemeinsame Testbasis Schema+Kopiervorgang)", "pruefidee": "Beleg mit 5 Positionen zweimal ändern → 2 Kopf-Versionsdatensätze, 10 Positions-Versionsdatensätze mit korrektem `KopfVersionsI3D`-Bezug je Änderungszeitpunkt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-07", @@ -750,7 +795,8 @@ "tracelinks": "SyRS-04", "konsolidierung": "nein", "pruefidee": "Filter setzen, der von genau einer von sieben Belegarten unterstützt wird → Ergebnis enthält ausschließlich Treffer dieser einen Belegart, keine Fehlermeldung für die anderen sechs.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-08", @@ -766,7 +812,8 @@ "tracelinks": "SyRS-04, SyRS-09", "konsolidierung": "nein", "pruefidee": "Benutzer ohne `ShowRight` für Verträge sucht mit `ReceiptKinds` leer (alle Belegarten) → Ergebnisliste enthält keine Vertragsbelege, auch wenn diese existieren.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-09", @@ -782,7 +829,8 @@ "tracelinks": "SyRS-05", "konsolidierung": "nein", "pruefidee": "Vertrag mit allen Kontingent-Feldern befüllen, Serialisierung/Deserialisierung (DTO-Mapping) auf Vollständigkeit prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-10", @@ -798,7 +846,8 @@ "tracelinks": "SyRS-05", "konsolidierung": "nein", "pruefidee": "Codereview/Komponententest: `AutomaticFacturaBL.Contracts.cs` auf Vorhandensein der beschriebenen Verantwortlichkeiten (Fälligkeitsselektion, RMM-Aufruf, Kontingent-Update) prüfen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-11", @@ -814,7 +863,8 @@ "tracelinks": "SyRS-06", "konsolidierung": "nein", "pruefidee": "Rechnungsvorlage mit Platzhalter in Position 3 von 6 → RMM-Positionen erscheinen an Position 3; Vorlage ohne Platzhalter → RMM-Positionen erscheinen bei Position (Anzahl-2).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-12", @@ -830,7 +880,8 @@ "tracelinks": "SyRS-06", "konsolidierung": "nein", "pruefidee": "Zwei Testfälle wie in SyRS-06 beschrieben, zusätzlich Prüfung der geloggten Fehlermeldung (`_logger.Error(errorMsg)`).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-13", @@ -846,7 +897,8 @@ "tracelinks": "SyRS-07", "konsolidierung": "nein", "pruefidee": "Beleg über 500€ anlegen (Limitverbrauch 500€), danach auf 600€ ändern und erneut speichern → Limitverbrauch insgesamt 600€, nicht 1100€.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-14", @@ -863,7 +915,8 @@ "tracelinks": "SyRS-07, SyRS-08", "konsolidierung": "nein", "pruefidee": "Feldweise Persistenztest: alle genannten Felder setzen, speichern, neu laden, Werte vergleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-15", @@ -879,7 +932,8 @@ "tracelinks": "SyRS-08", "konsolidierung": "nein", "pruefidee": "Vollständige Volltextsuche über die gesamte Codebasis (auch WPF.UI-ViewModels, Reports, gespeicherte Prozeduren) nach `LockOrderAfterDunningLevel`; falls keine Durchsetzung gefunden wird, Rückfrage an Fachbereich/Produktverantwortliche.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-16", @@ -895,7 +949,8 @@ "tracelinks": "SyRS-09", "konsolidierung": "Kandidat: SwRS-08 (beide nutzen Rechteprüfung als Vorfilter, aber unterschiedliche Aufrufer/Mechanik — AppRightsBL arbeitet auf App-Usern, ReceiptSearcher auf konfigurierten ShowRight-Werten)", "pruefidee": "Unit-/Integrationstest mit bekannter Testdatenbank: Benutzer mit 2 von 5 angefragten Rechten → Rückgabe enthält exakt 2 IDs.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-17", @@ -912,7 +967,8 @@ "tracelinks": "SyRS-09", "konsolidierung": "nein", "pruefidee": "Statische Codeanalyse: Suche nach numerischen Literalen in `HasUserRight(...)`/`CheckRightsFromUser(...)`-Aufrufen als Verstoß gegen die Konvention.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-18", @@ -928,7 +984,8 @@ "tracelinks": "SyRS-10", "konsolidierung": "nein", "pruefidee": "Alle öffentlichen Methoden von `PasswordManagerBL` auflisten und prüfen, ob jede davon dieselbe Lizenzprüfung am Anfang durchführt (Konsistenzprüfung, da nur eine Methode im Detail gelesen wurde — siehe Analysebericht/Lücken).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-19", @@ -944,7 +1001,8 @@ "tracelinks": "SyRS-11", "konsolidierung": "nein", "pruefidee": "Drei Testfälle: kein Schlüssel hinterlegt, korrekte PIN, falsche PIN → jeweils erwartetes Result-Objekt.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-20", @@ -961,7 +1019,8 @@ "tracelinks": "SyRS-12", "konsolidierung": "nein", "pruefidee": "Drei Testfälle mit präparierten Lizenzdaten: keine Lizenz, unbegrenzte Lizenz, Lizenz mit count=3 → jeweils erwartetes Result-Verhalten.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-21", @@ -977,7 +1036,8 @@ "tracelinks": "SyRS-13", "konsolidierung": "nein", "pruefidee": "Neue Testlieferant-Integration nach Schema hinzufügen und prüfen, dass `ApplyDistriToCentron` sie ohne Änderung an bestehenden Partial-Classes korrekt dispatcht.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-22", @@ -993,7 +1053,8 @@ "tracelinks": "SyRS-13", "konsolidierung": "nein", "pruefidee": "Für jede der 7×4 theoretisch möglichen Kombinationen dokumentieren/testen, ob sie unterstützt wird (Abgleich mit Tabelle \"Document Types Supported\").", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-23", @@ -1009,7 +1070,8 @@ "tracelinks": "SyRS-14", "konsolidierung": "nein", "pruefidee": "Speicherversuch mit leerem Distributor → Fehler; mit `EffectiveFrom` nach `EffectiveUntil` → Fehler; gültiger Datensatz → erfolgreich gespeichert und im Preisspiegel sichtbar bei aktuellem Datum im Bereich.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-24", @@ -1025,7 +1087,8 @@ "tracelinks": "SyRS-15", "konsolidierung": "nein", "pruefidee": "Für jedes der 11 Rechte einzeln: Benutzer ohne dieses (aber mit allen anderen) Recht → nur das zugehörige Flag ist `false`.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-25", @@ -1041,7 +1104,8 @@ "tracelinks": "SyRS-16", "konsolidierung": "nein", "pruefidee": "Drei Testfälle: Abweichung 0,00 (kein Hinweis), 2,50 (Warnung + Korrektur), 5,00 (Fehler, kein Export).", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-26", @@ -1057,7 +1121,8 @@ "tracelinks": "SyRS-16", "konsolidierung": "nein", "pruefidee": "Je einen Testfall pro Kategorie (Standard, steuerfrei Inland, innergemeinschaftlich, Export, Reverse Charge) mit erwartetem Code und Hinweistext abgleichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-27", @@ -1073,7 +1138,8 @@ "tracelinks": "SyRS-17", "konsolidierung": "nein", "pruefidee": "Randfalltests: leere Adresse, Adresse \"NEXOWARE.COM\"-Großschreibung, Adresse ohne @-Zeichen.", - "qm": "" + "qm": "", + "uebernahme": "" }, { "id": "SwRS-28", @@ -1089,6 +1155,7 @@ "tracelinks": "SyRS-18", "konsolidierung": "nein", "pruefidee": "Codebase-weite Suche nach Interfaces mit Suffix `Logic`, die NICHT dem Muster `I*Logic`/`BL*Logic`/`WS*Logic` folgen, als Qualitätsindikator für Konventionsabweichungen (siehe Konsolidierungshinweis Analysebericht).", - "qm": "" + "qm": "", + "uebernahme": "" } ] \ No newline at end of file diff --git a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180418_v3.3.0-b676/_meta/anforderungen.md b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180418_v3.3.0-b676/_meta/anforderungen.md index 6f6d7ea1..14f19b4e 100644 --- a/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180418_v3.3.0-b676/_meta/anforderungen.md +++ b/Versuche/Versuch_01/claude-sonnet-5/solo/high/01_Lauf_2026-08-25_180418_v3.3.0-b676/_meta/anforderungen.md @@ -2,6 +2,8 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockformat des Prompts). Erzeugt von `analyse-anforderungen.py`. +Die Kenngrößen decken die **maschinell prüfbare** Hälfte des Evaluationsrahmens aus Kapitel 4.3 ab: Belegqualität und Übernahmewürdigkeit gehören zur *Statement-Qualität*, Verteilung und Konsolidierungskandidaten zur *Set-Qualität*, Tracelinks und Belegklassifikation zur *Traceability-Qualität*. Die Expertenbewertung nach Likert-Skala tritt daneben und wird hier nicht ersetzt. + ### Verteilung über die Ebenen | Ebene | Anzahl | Anteil | @@ -38,6 +40,10 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | Belege je Anforderung (Median) | 1 | | Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 42 (62,7 %) | +### Übernahmewürdigkeit + +**nicht erhoben** – das Feld `Übernahmewürdigkeit` wurde erst mit der Prompt-Fassung vom 2026-08-26 eingeführt und liegt für diesen Lauf nicht vor. Hinweise auf Workarounds stecken ersatzweise im Feld `Status`. + ### Status | Kategorie | Anzahl | Anteil | @@ -55,5 +61,6 @@ Maschinell aus `Ergebnisse\StRS.md`, `SyRS.md` und `SwRS.md` ausgewertet (Blockf | **Belegpflicht** – jede Anforderung mindestens ein Artefaktbeleg | **erfüllt** (0 Anforderungen ohne Beleg) | | **Risikobasierte Priorisierung** – Sicherheit, Abrechnung, Berechtigungen brauchen einen `PRIMÄR`-Beleg oder die Kennzeichnung `[HYPOTHESE]` | **verletzt** – 5 von 31 ungedeckt: StRS-17, SyRS-05, SyRS-18, SwRS-10, SwRS-26 | | **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** | +| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | *nicht erhoben* (Feld erst ab Prompt-Fassung 2026-08-26) | | **Traceability** – Verknüpfung zwischen den Ebenen | 67 von 67 mit Tracelinks (100,0 %) |